commit 205faf4224b43e8848e89ab2caffdc1caa0ac28a Author: afoucaultc Date: Fri Jun 5 13:11:08 2026 +0200 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..5384ad4 --- /dev/null +++ b/README.md @@ -0,0 +1,49 @@ +# dotfiles, mode d'emploi +> [!ATTENTION] +> Encryption dans le tuto arch non testée, à ne pas faire pour le moment +> Safe boot pas encore réglé +> Besoin de rédiger la marche à suivre pour faire fonctionner proton mail bridge + +Des tutoriels : +- installation de Arch Linux (arch_installation.md) (version minimale !!!) +- installation de mon workflow (my_install.md) +- installation et utilisation de neovim (minimal car en cours de rédaction) (neovim.md) + +Les dotfiles : +> [!ATTENTION] +> pas à jour +- le contenu de INHOME doit être mis dans le home (~/) +- le contenu de OLD contient des config de choses que je n'utilise plus / ai remplacé +- fichiers de configuration de : + - hypr (hyprland, window manager) + - hyprpanel (taskbar) + - kitty (terminal, ALT Q pour ouvrir) + - neofetch + - nvim (voir tutoriel, raccourci sur alt N pour ouvrir) + - rofi (sélecteur d'applications, raccourci sur ALT W pour ouvrir) + - zathura (pdf viewer) + - zsh (langage terminal, ancienne config dans OLD mais sous Oh-My-Zsh maintenant) + - dolphinrc (gestionnaire de fichiers) + - GIMP (éditeur d'image) + - inkscape (images vectorielles) + - ashell (barre supérieure hyprland) (remplacé par hyprpanel) + +- copy.sh permet de copier les fichiers DEPUIS .config VERS dotfiles (dans l'autre sens, faire à la main pour le moment) + +Problèmes connus : +- neovim : buffer s'affiche parfois sur markdown (sûrement un pb de lsp) +- neovim : visionneur d'image non fonctionnel +- neovim : revoir la correction orthographique notamment le soulignage +- 2ème écran qui lag +- manque d'explications sur les systemctl + quelques commandes à faire (bluetooth et brightness notamment) +- pas (encore) de tuto pour le partage d'écran et la caméra +- éclairage RGB non fonctionnel pour le moment (voir wiki) +- quelques caractères non fonctionnels (mais c'est de mieux en mieux) +TODO : +- finir tuto neovim + continuer à paramétrer +- rédiger un tutoriel workflow (pandoc + zotero + vimtex + markdown + neovim + inkscape) +- proposer des workflows de chercheureuses sur l'internet +- mullvadvpn sans client GUI +- firewall à revoir +- TUTORIELS : ajouter mention de hyprpanel, gestion des thèmes (gtk, kvantum), asusctl et rog control center, ohmyzsh, hyprsunset, imagemagick +- revoir supergfxctl (?) diff --git a/config/GIMP/3.0/action-history b/config/GIMP/3.0/action-history new file mode 100644 index 0000000..0dd7610 --- /dev/null +++ b/config/GIMP/3.0/action-history @@ -0,0 +1,104 @@ +# GIMP action-history + +(history-item "layers-visible" 5) +(history-item "drawable-visible" 2) +(history-item "filters-color-balance" 3) +(history-item "layers-lock-alpha" 2) +(history-item "filters-hue-chroma" 1) +(history-item "layers-lock-content" 0) +(history-item "layers-lock-position" 2) +(history-item "layers-new" 0) +(history-item "file-save" 0) +(history-item "image-convert-non-linear" 0) +(history-item "image-color-profile-use-srgb" 0) +(history-item "file-export-as" 0) +(history-item "tools-move" 0) +(history-item "file-quit" 1) +(history-item "filters-brightness-contrast" 0) +(history-item "view-snap-to-guides" 0) +(history-item "view-show-menubar" 0) +(history-item "view-show-statusbar" 0) +(history-item "dockable-preview-size-medium" 0) +(history-item "dockable-tab-style-icon" 0) +(history-item "dockable-tab-style-preview" 0) +(history-item "dockable-view-type-list" 0) +(history-item "dock-show-image-menu" 0) +(history-item "dock-auto-follow-active" 0) +(history-item "dock-move-to-screen-wayland-1" 0) +(history-item "layers-blend-space-auto" 0) +(history-item "layers-composite-space-auto" 0) +(history-item "layers-composite-mode-auto" 0) +(history-item "drawable-lock-content" 0) +(history-item "drawable-lock-position" 0) +(history-item "view-color-management-enable" 0) +(history-item "view-show-selection" 0) +(history-item "view-show-layer-boundary" 0) +(history-item "view-show-canvas-boundary" 0) +(history-item "view-show-guides" 0) +(history-item "view-show-sample-points" 0) +(history-item "view-show-rulers" 0) +(history-item "view-show-scrollbars" 0) +(history-item "file-open" 0) +(history-item "layers-alpha-selection-replace" 0) +(history-item "select-grow" 0) +(history-item "file-overwrite" 0) +(history-item "view-dot-for-dot" 0) +(history-item "view-display-black-point-compensation" 0) +(history-item "dockable-show-button-bar" 0) +(history-item "dockable-preview-size-tiny" 0) +(history-item "edit-paste" 0) +(history-item "layers-edit-text" 0) +(history-item "edit-clear" 0) +(history-item "layers-delete" 0) +(history-item "edit-copy" 0) +(history-item "edit-paste-as-new-image" 0) +(history-item "filters-color-temperature" 0) +(history-item "filters-noise-cie-lch" 0) +(history-item "filters-exposure" 0) +(history-item "filters-curves" 0) +(history-item "layers-alpha-remove" 0) +(history-item "filters-saturation" 0) +(history-item "tools-rect-select" 0) +(history-item "filters-hue-saturation" 0) +(history-item "filters-invert-value" 0) +(history-item "filters-fattal-2002" 0) +(history-item "plug-in-despeckle" 0) +(history-item "filters-cubism" 0) +(history-item "plug-in-gimpressionist" 0) +(history-item "file-export" 0) +(history-item "file-open-as-layers" 0) +(history-item "layers-merge-down" 0) +(history-item "filters-invert-perceptual" 0) +(history-item "select-feather" 0) +(history-item "select-invert" 0) +(history-item "image-new" 0) +(history-item "tools-unified-transform" 0) +(history-item "filters-alien-map" 0) +(history-item "dockable-close-tab" 0) +(history-item "tools-ellipse-select" 0) +(history-item "file-save-as" 0) +(history-item "tools-align" 0) +(history-item "image-convert-rgb" 0) +(history-item "image-convert-indexed" 0) +(history-item "dialogs-preferences" 0) +(history-item "select-all" 0) +(history-item "dockable-preview-size-large" 0) +(history-item "dockable-view-type-grid" 0) +(history-item "tools-scale" 0) +(history-item "quick-mask-invert-on" 0) +(history-item "quick-mask-invert-off" 0) +(history-item "paths-lock-content" 0) +(history-item "paths-lock-position" 0) +(history-item "channels-lock-content" 0) +(history-item "channels-lock-position" 0) +(history-item "image-softproof-black-point-compensation" 0) +(history-item "dockable-detach-tab" 0) +(history-item "tool-options-reset" 0) +(history-item "image-softproof-intent-perceptual" 0) +(history-item "image-softproof-intent-relative-colorimetric" 0) +(history-item "image-convert-u8" 0) +(history-item "image-convert-linear" 0) +(history-item "windows-show-tabs" 0) +(history-item "windows-use-single-window-mode" 0) + +# end of action-history diff --git a/config/GIMP/3.0/colorrc b/config/GIMP/3.0/colorrc new file mode 100644 index 0000000..7b1bffd --- /dev/null +++ b/config/GIMP/3.0/colorrc @@ -0,0 +1,17 @@ +# GIMP colorrc +# +# This file holds a list of recently used colors. + +(color-history + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0) + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0) + (color "HSVA float" 16 "\63\330\21\77\74\332\240\76\202P\61\76\0\0\200\77" 0) + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0) + (color "R'G'B'A u8" 4 "\0\0\370\377" 0) + (color "R'G'B'A double" 32 "\0\0\0\140\42\27\267\77\0\0\0\340\223\222\342\77\0\0\0\340\72\72\352\77\0\0\0\0\0\0\360\77" 0) + (color "HSV float" 12 "\63\330\21\77\330\345O\77\355\235\325\76" 0) + (color "R'G'B'A u8" 4 "\377\377\0\377" 0) + (color "R'G'B'A u8" 4 "\272\321\236\377" 0) + (color "R'G'B'A u8" 4 "\336\357\370\377" 0)) + +# end of colorrc diff --git a/config/GIMP/3.0/contextrc b/config/GIMP/3.0/contextrc new file mode 100644 index 0000000..9d39320 --- /dev/null +++ b/config/GIMP/3.0/contextrc @@ -0,0 +1,18 @@ +# GIMP user context + +(tool "gimp-move-tool") +(paint-info "gimp-paintbrush") +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(mybrush "100% Opaque") +(pattern "Pine") +(gradient "Standard") +(palette "Standard") +(font "Monospace") +(tool-preset "Core Pointer") + +# end of user context diff --git a/config/GIMP/3.0/controllerrc b/config/GIMP/3.0/controllerrc new file mode 100644 index 0000000..d1e8c9f --- /dev/null +++ b/config/GIMP/3.0/controllerrc @@ -0,0 +1,40 @@ +# GIMP controllerrc +# +# This file will be entirely rewritten each time you exit. + +(GimpControllerInfo "Main Mouse Wheel" + (icon-name "gimp-controller-wheel") + (enabled yes) + (debug-events no) + (controller "GimpControllerWheel") + (mapping + (map "scroll-down-shift-primary" "tools-aspect-decrease") + (map "scroll-up-shift-alt" "tools-angle-increase") + (map "scroll-up-alt" "tools-opacity-increase") + (map "scroll-down-shift-alt" "tools-angle-decrease") + (map "scroll-down-primary-alt" "tools-size-decrease") + (map "scroll-up-shift-primary-alt" "tools-spacing-increase") + (map "scroll-down-alt" "tools-opacity-decrease") + (map "scroll-up-primary-alt" "tools-size-increase") + (map "scroll-up-shift-primary" "tools-aspect-increase") + (map "scroll-down-shift-primary-alt" "tools-spacing-decrease"))) +(GimpControllerInfo "Main Keyboard" + (icon-name "gimp-controller-keyboard") + (enabled yes) + (debug-events no) + (controller "GimpControllerKeyboard") + (mapping + (map "cursor-right-alt" "tools-size-increase") + (map "cursor-left-shift" "view-scroll-page-left") + (map "cursor-right-shift" "view-scroll-page-right") + (map "cursor-up-shift" "view-scroll-page-up") + (map "cursor-up-primary" "view-scroll-top-border") + (map "cursor-down-primary" "view-scroll-bottom-border") + (map "cursor-up-alt" "tools-size-increase-skip") + (map "cursor-left-alt" "tools-size-decrease") + (map "cursor-down-shift" "view-scroll-page-down") + (map "cursor-right-primary" "view-scroll-right-border") + (map "cursor-left-primary" "view-scroll-left-border") + (map "cursor-down-alt" "tools-size-decrease-skip"))) + +# end of controllerrc diff --git a/config/GIMP/3.0/devicerc b/config/GIMP/3.0/devicerc new file mode 100644 index 0000000..33efaf8 --- /dev/null +++ b/config/GIMP/3.0/devicerc @@ -0,0 +1,123 @@ +# GIMP devicerc + +(GimpDeviceInfo "Core Pointer" + (icon-name "gimp-cursor") + (name "Core Pointer") + (tool-options "GimpMoveOptions" + (tool "gimp-move-tool")) + (use-fg-bg no) + (use-opacity-paint-mode no) + (use-brush no) + (use-dynamics no) + (use-mypaint-brush no) + (use-gradient no) + (use-pattern no) + (use-palette no) + (use-font no) + (mode screen) + (axes 2 x y) + (keys 0) + (pressure-curve + (curve-type smooth) + (points 0) + (point-types 0) + (n-samples 256) + (samples 256 0 0.0039215686274509803 0.0078431372549019607 0.011764705882352941 0.015686274509803921 0.019607843137254902 0.023529411764705882 0.027450980392156862 0.031372549019607843 0.035294117647058823 0.039215686274509803 0.043137254901960784 0.047058823529411764 0.050980392156862744 0.054901960784313725 0.058823529411764705 0.062745098039215685 0.066666666666666666 0.070588235294117646 0.074509803921568626 0.078431372549019607 0.082352941176470587 0.086274509803921567 0.090196078431372548 0.094117647058823528 0.098039215686274508 0.10196078431372549 0.10588235294117647 0.10980392156862745 0.11372549019607843 0.11764705882352941 0.12156862745098039 0.12549019607843137 0.12941176470588237 0.13333333333333333 0.13725490196078433 0.14117647058823529 0.14509803921568629 0.14901960784313725 0.15294117647058825 0.15686274509803921 0.16078431372549021 0.16470588235294117 0.16862745098039217 0.17254901960784313 0.17647058823529413 0.1803921568627451 0.18431372549019609 0.18823529411764706 0.19215686274509805 0.19607843137254902 0.20000000000000001 0.20392156862745098 0.20784313725490197 0.21176470588235294 0.21568627450980393 0.2196078431372549 0.22352941176470589 0.22745098039215686 0.23137254901960785 0.23529411764705882 0.23921568627450981 0.24313725490196078 0.24705882352941178 0.25098039215686274 0.25490196078431371 0.25882352941176473 0.2627450980392157 0.26666666666666666 0.27058823529411763 0.27450980392156865 0.27843137254901962 0.28235294117647058 0.28627450980392155 0.29019607843137257 0.29411764705882354 0.29803921568627451 0.30196078431372547 0.30588235294117649 0.30980392156862746 0.31372549019607843 0.31764705882352939 0.32156862745098042 0.32549019607843138 0.32941176470588235 0.33333333333333331 0.33725490196078434 0.3411764705882353 0.34509803921568627 0.34901960784313724 0.35294117647058826 0.35686274509803922 0.36078431372549019 0.36470588235294116 0.36862745098039218 0.37254901960784315 0.37647058823529411 0.38039215686274508 0.3843137254901961 0.38823529411764707 0.39215686274509803 0.396078431372549 0.40000000000000002 0.40392156862745099 0.40784313725490196 0.41176470588235292 0.41568627450980394 0.41960784313725491 0.42352941176470588 0.42745098039215684 0.43137254901960786 0.43529411764705883 0.4392156862745098 0.44313725490196076 0.44705882352941179 0.45098039215686275 0.45490196078431372 0.45882352941176469 0.46274509803921571 0.46666666666666667 0.47058823529411764 0.47450980392156861 0.47843137254901963 0.4823529411764706 0.48627450980392156 0.49019607843137253 0.49411764705882355 0.49803921568627452 0.50196078431372548 0.50588235294117645 0.50980392156862742 0.51372549019607838 0.51764705882352946 0.52156862745098043 0.52549019607843139 0.52941176470588236 0.53333333333333333 0.53725490196078429 0.54117647058823526 0.54509803921568623 0.5490196078431373 0.55294117647058827 0.55686274509803924 0.5607843137254902 0.56470588235294117 0.56862745098039214 0.5725490196078431 0.57647058823529407 0.58039215686274515 0.58431372549019611 0.58823529411764708 0.59215686274509804 0.59607843137254901 0.59999999999999998 0.60392156862745094 0.60784313725490191 0.61176470588235299 0.61568627450980395 0.61960784313725492 0.62352941176470589 0.62745098039215685 0.63137254901960782 0.63529411764705879 0.63921568627450975 0.64313725490196083 0.6470588235294118 0.65098039215686276 0.65490196078431373 0.6588235294117647 0.66274509803921566 0.66666666666666663 0.6705882352941176 0.67450980392156867 0.67843137254901964 0.68235294117647061 0.68627450980392157 0.69019607843137254 0.69411764705882351 0.69803921568627447 0.70196078431372544 0.70588235294117652 0.70980392156862748 0.71372549019607845 0.71764705882352942 0.72156862745098038 0.72549019607843135 0.72941176470588232 0.73333333333333328 0.73725490196078436 0.74117647058823533 0.74509803921568629 0.74901960784313726 0.75294117647058822 0.75686274509803919 0.76078431372549016 0.76470588235294112 0.7686274509803922 0.77254901960784317 0.77647058823529413 0.7803921568627451 0.78431372549019607 0.78823529411764703 0.792156862745098 0.79607843137254897 0.80000000000000004 0.80392156862745101 0.80784313725490198 0.81176470588235294 0.81568627450980391 0.81960784313725488 0.82352941176470584 0.82745098039215681 0.83137254901960789 0.83529411764705885 0.83921568627450982 0.84313725490196079 0.84705882352941175 0.85098039215686272 0.85490196078431369 0.85882352941176465 0.86274509803921573 0.8666666666666667 0.87058823529411766 0.87450980392156863 0.8784313725490196 0.88235294117647056 0.88627450980392153 0.8901960784313725 0.89411764705882357 0.89803921568627454 0.90196078431372551 0.90588235294117647 0.90980392156862744 0.9137254901960784 0.91764705882352937 0.92156862745098034 0.92549019607843142 0.92941176470588238 0.93333333333333335 0.93725490196078431 0.94117647058823528 0.94509803921568625 0.94901960784313721 0.95294117647058818 0.95686274509803926 0.96078431372549022 0.96470588235294119 0.96862745098039216 0.97254901960784312 0.97647058823529409 0.98039215686274506 0.98431372549019602 0.9882352941176471 0.99215686274509807 0.99607843137254903 1)) + (pad-actions)) +(GimpDeviceInfo "Wayland Finger Scrolling" + (name "Wayland Finger Scrolling") + (tool-options "GimpPaintOptions" + (tool "gimp-paintbrush-tool") + (foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) + (background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + (brush "2. Hardness 050") + (dynamics "Pressure Size") + (pattern "Pine") + (gradient "Standard") + (palette "Standard") + (brush-size 51) + (brush-hardness 0.5)) + (use-fg-bg no) + (use-opacity-paint-mode yes) + (use-brush no) + (use-dynamics no) + (use-mypaint-brush no) + (use-gradient no) + (use-pattern yes) + (use-palette no) + (use-font no) + (mode disabled) + (axes 2 x y) + (keys 0) + (pressure-curve + (curve-type smooth) + (points 0) + (point-types 0) + (n-samples 256) + (samples 256 0 0.0039215686274509803 0.0078431372549019607 0.011764705882352941 0.015686274509803921 0.019607843137254902 0.023529411764705882 0.027450980392156862 0.031372549019607843 0.035294117647058823 0.039215686274509803 0.043137254901960784 0.047058823529411764 0.050980392156862744 0.054901960784313725 0.058823529411764705 0.062745098039215685 0.066666666666666666 0.070588235294117646 0.074509803921568626 0.078431372549019607 0.082352941176470587 0.086274509803921567 0.090196078431372548 0.094117647058823528 0.098039215686274508 0.10196078431372549 0.10588235294117647 0.10980392156862745 0.11372549019607843 0.11764705882352941 0.12156862745098039 0.12549019607843137 0.12941176470588237 0.13333333333333333 0.13725490196078433 0.14117647058823529 0.14509803921568629 0.14901960784313725 0.15294117647058825 0.15686274509803921 0.16078431372549021 0.16470588235294117 0.16862745098039217 0.17254901960784313 0.17647058823529413 0.1803921568627451 0.18431372549019609 0.18823529411764706 0.19215686274509805 0.19607843137254902 0.20000000000000001 0.20392156862745098 0.20784313725490197 0.21176470588235294 0.21568627450980393 0.2196078431372549 0.22352941176470589 0.22745098039215686 0.23137254901960785 0.23529411764705882 0.23921568627450981 0.24313725490196078 0.24705882352941178 0.25098039215686274 0.25490196078431371 0.25882352941176473 0.2627450980392157 0.26666666666666666 0.27058823529411763 0.27450980392156865 0.27843137254901962 0.28235294117647058 0.28627450980392155 0.29019607843137257 0.29411764705882354 0.29803921568627451 0.30196078431372547 0.30588235294117649 0.30980392156862746 0.31372549019607843 0.31764705882352939 0.32156862745098042 0.32549019607843138 0.32941176470588235 0.33333333333333331 0.33725490196078434 0.3411764705882353 0.34509803921568627 0.34901960784313724 0.35294117647058826 0.35686274509803922 0.36078431372549019 0.36470588235294116 0.36862745098039218 0.37254901960784315 0.37647058823529411 0.38039215686274508 0.3843137254901961 0.38823529411764707 0.39215686274509803 0.396078431372549 0.40000000000000002 0.40392156862745099 0.40784313725490196 0.41176470588235292 0.41568627450980394 0.41960784313725491 0.42352941176470588 0.42745098039215684 0.43137254901960786 0.43529411764705883 0.4392156862745098 0.44313725490196076 0.44705882352941179 0.45098039215686275 0.45490196078431372 0.45882352941176469 0.46274509803921571 0.46666666666666667 0.47058823529411764 0.47450980392156861 0.47843137254901963 0.4823529411764706 0.48627450980392156 0.49019607843137253 0.49411764705882355 0.49803921568627452 0.50196078431372548 0.50588235294117645 0.50980392156862742 0.51372549019607838 0.51764705882352946 0.52156862745098043 0.52549019607843139 0.52941176470588236 0.53333333333333333 0.53725490196078429 0.54117647058823526 0.54509803921568623 0.5490196078431373 0.55294117647058827 0.55686274509803924 0.5607843137254902 0.56470588235294117 0.56862745098039214 0.5725490196078431 0.57647058823529407 0.58039215686274515 0.58431372549019611 0.58823529411764708 0.59215686274509804 0.59607843137254901 0.59999999999999998 0.60392156862745094 0.60784313725490191 0.61176470588235299 0.61568627450980395 0.61960784313725492 0.62352941176470589 0.62745098039215685 0.63137254901960782 0.63529411764705879 0.63921568627450975 0.64313725490196083 0.6470588235294118 0.65098039215686276 0.65490196078431373 0.6588235294117647 0.66274509803921566 0.66666666666666663 0.6705882352941176 0.67450980392156867 0.67843137254901964 0.68235294117647061 0.68627450980392157 0.69019607843137254 0.69411764705882351 0.69803921568627447 0.70196078431372544 0.70588235294117652 0.70980392156862748 0.71372549019607845 0.71764705882352942 0.72156862745098038 0.72549019607843135 0.72941176470588232 0.73333333333333328 0.73725490196078436 0.74117647058823533 0.74509803921568629 0.74901960784313726 0.75294117647058822 0.75686274509803919 0.76078431372549016 0.76470588235294112 0.7686274509803922 0.77254901960784317 0.77647058823529413 0.7803921568627451 0.78431372549019607 0.78823529411764703 0.792156862745098 0.79607843137254897 0.80000000000000004 0.80392156862745101 0.80784313725490198 0.81176470588235294 0.81568627450980391 0.81960784313725488 0.82352941176470584 0.82745098039215681 0.83137254901960789 0.83529411764705885 0.83921568627450982 0.84313725490196079 0.84705882352941175 0.85098039215686272 0.85490196078431369 0.85882352941176465 0.86274509803921573 0.8666666666666667 0.87058823529411766 0.87450980392156863 0.8784313725490196 0.88235294117647056 0.88627450980392153 0.8901960784313725 0.89411764705882357 0.89803921568627454 0.90196078431372551 0.90588235294117647 0.90980392156862744 0.9137254901960784 0.91764705882352937 0.92156862745098034 0.92549019607843142 0.92941176470588238 0.93333333333333335 0.93725490196078431 0.94117647058823528 0.94509803921568625 0.94901960784313721 0.95294117647058818 0.95686274509803926 0.96078431372549022 0.96470588235294119 0.96862745098039216 0.97254901960784312 0.97647058823529409 0.98039215686274506 0.98431372549019602 0.9882352941176471 0.99215686274509807 0.99607843137254903 1)) + (pad-actions)) +(GimpDeviceInfo "Wayland Pointer" + (icon-name "gimp-cursor") + (name "Wayland Pointer") + (tool-options "GimpPaintOptions" + (tool "gimp-paintbrush-tool") + (brush "2. Hardness 050") + (dynamics "Pressure Size") + (pattern "Pine") + (gradient "Standard") + (palette "Standard") + (brush-size 51) + (brush-hardness 0.5)) + (use-fg-bg yes) + (use-opacity-paint-mode no) + (use-brush yes) + (use-dynamics yes) + (use-mypaint-brush no) + (use-gradient yes) + (use-pattern yes) + (use-palette yes) + (use-font no) + (mode disabled) + (axes 2 x y) + (keys 0) + (pressure-curve + (curve-type smooth) + (points 0) + (point-types 0) + (n-samples 256) + (samples 256 0 0.0039215686274509803 0.0078431372549019607 0.011764705882352941 0.015686274509803921 0.019607843137254902 0.023529411764705882 0.027450980392156862 0.031372549019607843 0.035294117647058823 0.039215686274509803 0.043137254901960784 0.047058823529411764 0.050980392156862744 0.054901960784313725 0.058823529411764705 0.062745098039215685 0.066666666666666666 0.070588235294117646 0.074509803921568626 0.078431372549019607 0.082352941176470587 0.086274509803921567 0.090196078431372548 0.094117647058823528 0.098039215686274508 0.10196078431372549 0.10588235294117647 0.10980392156862745 0.11372549019607843 0.11764705882352941 0.12156862745098039 0.12549019607843137 0.12941176470588237 0.13333333333333333 0.13725490196078433 0.14117647058823529 0.14509803921568629 0.14901960784313725 0.15294117647058825 0.15686274509803921 0.16078431372549021 0.16470588235294117 0.16862745098039217 0.17254901960784313 0.17647058823529413 0.1803921568627451 0.18431372549019609 0.18823529411764706 0.19215686274509805 0.19607843137254902 0.20000000000000001 0.20392156862745098 0.20784313725490197 0.21176470588235294 0.21568627450980393 0.2196078431372549 0.22352941176470589 0.22745098039215686 0.23137254901960785 0.23529411764705882 0.23921568627450981 0.24313725490196078 0.24705882352941178 0.25098039215686274 0.25490196078431371 0.25882352941176473 0.2627450980392157 0.26666666666666666 0.27058823529411763 0.27450980392156865 0.27843137254901962 0.28235294117647058 0.28627450980392155 0.29019607843137257 0.29411764705882354 0.29803921568627451 0.30196078431372547 0.30588235294117649 0.30980392156862746 0.31372549019607843 0.31764705882352939 0.32156862745098042 0.32549019607843138 0.32941176470588235 0.33333333333333331 0.33725490196078434 0.3411764705882353 0.34509803921568627 0.34901960784313724 0.35294117647058826 0.35686274509803922 0.36078431372549019 0.36470588235294116 0.36862745098039218 0.37254901960784315 0.37647058823529411 0.38039215686274508 0.3843137254901961 0.38823529411764707 0.39215686274509803 0.396078431372549 0.40000000000000002 0.40392156862745099 0.40784313725490196 0.41176470588235292 0.41568627450980394 0.41960784313725491 0.42352941176470588 0.42745098039215684 0.43137254901960786 0.43529411764705883 0.4392156862745098 0.44313725490196076 0.44705882352941179 0.45098039215686275 0.45490196078431372 0.45882352941176469 0.46274509803921571 0.46666666666666667 0.47058823529411764 0.47450980392156861 0.47843137254901963 0.4823529411764706 0.48627450980392156 0.49019607843137253 0.49411764705882355 0.49803921568627452 0.50196078431372548 0.50588235294117645 0.50980392156862742 0.51372549019607838 0.51764705882352946 0.52156862745098043 0.52549019607843139 0.52941176470588236 0.53333333333333333 0.53725490196078429 0.54117647058823526 0.54509803921568623 0.5490196078431373 0.55294117647058827 0.55686274509803924 0.5607843137254902 0.56470588235294117 0.56862745098039214 0.5725490196078431 0.57647058823529407 0.58039215686274515 0.58431372549019611 0.58823529411764708 0.59215686274509804 0.59607843137254901 0.59999999999999998 0.60392156862745094 0.60784313725490191 0.61176470588235299 0.61568627450980395 0.61960784313725492 0.62352941176470589 0.62745098039215685 0.63137254901960782 0.63529411764705879 0.63921568627450975 0.64313725490196083 0.6470588235294118 0.65098039215686276 0.65490196078431373 0.6588235294117647 0.66274509803921566 0.66666666666666663 0.6705882352941176 0.67450980392156867 0.67843137254901964 0.68235294117647061 0.68627450980392157 0.69019607843137254 0.69411764705882351 0.69803921568627447 0.70196078431372544 0.70588235294117652 0.70980392156862748 0.71372549019607845 0.71764705882352942 0.72156862745098038 0.72549019607843135 0.72941176470588232 0.73333333333333328 0.73725490196078436 0.74117647058823533 0.74509803921568629 0.74901960784313726 0.75294117647058822 0.75686274509803919 0.76078431372549016 0.76470588235294112 0.7686274509803922 0.77254901960784317 0.77647058823529413 0.7803921568627451 0.78431372549019607 0.78823529411764703 0.792156862745098 0.79607843137254897 0.80000000000000004 0.80392156862745101 0.80784313725490198 0.81176470588235294 0.81568627450980391 0.81960784313725488 0.82352941176470584 0.82745098039215681 0.83137254901960789 0.83529411764705885 0.83921568627450982 0.84313725490196079 0.84705882352941175 0.85098039215686272 0.85490196078431369 0.85882352941176465 0.86274509803921573 0.8666666666666667 0.87058823529411766 0.87450980392156863 0.8784313725490196 0.88235294117647056 0.88627450980392153 0.8901960784313725 0.89411764705882357 0.89803921568627454 0.90196078431372551 0.90588235294117647 0.90980392156862744 0.9137254901960784 0.91764705882352937 0.92156862745098034 0.92549019607843142 0.92941176470588238 0.93333333333333335 0.93725490196078431 0.94117647058823528 0.94509803921568625 0.94901960784313721 0.95294117647058818 0.95686274509803926 0.96078431372549022 0.96470588235294119 0.96862745098039216 0.97254901960784312 0.97647058823529409 0.98039215686274506 0.98431372549019602 0.9882352941176471 0.99215686274509807 0.99607843137254903 1)) + (pad-actions)) +(GimpDeviceInfo "Wayland Wheel Scrolling" + (name "Wayland Wheel Scrolling") + (tool-options "GimpPaintOptions" + (tool "gimp-paintbrush-tool") + (brush "2. Hardness 050") + (dynamics "Pressure Size") + (pattern "Pine") + (gradient "Standard") + (palette "Standard") + (brush-size 51) + (brush-hardness 0.5)) + (use-fg-bg no) + (use-opacity-paint-mode no) + (use-brush no) + (use-dynamics no) + (use-mypaint-brush no) + (use-gradient no) + (use-pattern no) + (use-palette no) + (use-font no) + (mode disabled) + (axes 2 x y) + (keys 0) + (pressure-curve + (curve-type smooth) + (points 0) + (point-types 0) + (n-samples 256) + (samples 256 0 0.0039215686274509803 0.0078431372549019607 0.011764705882352941 0.015686274509803921 0.019607843137254902 0.023529411764705882 0.027450980392156862 0.031372549019607843 0.035294117647058823 0.039215686274509803 0.043137254901960784 0.047058823529411764 0.050980392156862744 0.054901960784313725 0.058823529411764705 0.062745098039215685 0.066666666666666666 0.070588235294117646 0.074509803921568626 0.078431372549019607 0.082352941176470587 0.086274509803921567 0.090196078431372548 0.094117647058823528 0.098039215686274508 0.10196078431372549 0.10588235294117647 0.10980392156862745 0.11372549019607843 0.11764705882352941 0.12156862745098039 0.12549019607843137 0.12941176470588237 0.13333333333333333 0.13725490196078433 0.14117647058823529 0.14509803921568629 0.14901960784313725 0.15294117647058825 0.15686274509803921 0.16078431372549021 0.16470588235294117 0.16862745098039217 0.17254901960784313 0.17647058823529413 0.1803921568627451 0.18431372549019609 0.18823529411764706 0.19215686274509805 0.19607843137254902 0.20000000000000001 0.20392156862745098 0.20784313725490197 0.21176470588235294 0.21568627450980393 0.2196078431372549 0.22352941176470589 0.22745098039215686 0.23137254901960785 0.23529411764705882 0.23921568627450981 0.24313725490196078 0.24705882352941178 0.25098039215686274 0.25490196078431371 0.25882352941176473 0.2627450980392157 0.26666666666666666 0.27058823529411763 0.27450980392156865 0.27843137254901962 0.28235294117647058 0.28627450980392155 0.29019607843137257 0.29411764705882354 0.29803921568627451 0.30196078431372547 0.30588235294117649 0.30980392156862746 0.31372549019607843 0.31764705882352939 0.32156862745098042 0.32549019607843138 0.32941176470588235 0.33333333333333331 0.33725490196078434 0.3411764705882353 0.34509803921568627 0.34901960784313724 0.35294117647058826 0.35686274509803922 0.36078431372549019 0.36470588235294116 0.36862745098039218 0.37254901960784315 0.37647058823529411 0.38039215686274508 0.3843137254901961 0.38823529411764707 0.39215686274509803 0.396078431372549 0.40000000000000002 0.40392156862745099 0.40784313725490196 0.41176470588235292 0.41568627450980394 0.41960784313725491 0.42352941176470588 0.42745098039215684 0.43137254901960786 0.43529411764705883 0.4392156862745098 0.44313725490196076 0.44705882352941179 0.45098039215686275 0.45490196078431372 0.45882352941176469 0.46274509803921571 0.46666666666666667 0.47058823529411764 0.47450980392156861 0.47843137254901963 0.4823529411764706 0.48627450980392156 0.49019607843137253 0.49411764705882355 0.49803921568627452 0.50196078431372548 0.50588235294117645 0.50980392156862742 0.51372549019607838 0.51764705882352946 0.52156862745098043 0.52549019607843139 0.52941176470588236 0.53333333333333333 0.53725490196078429 0.54117647058823526 0.54509803921568623 0.5490196078431373 0.55294117647058827 0.55686274509803924 0.5607843137254902 0.56470588235294117 0.56862745098039214 0.5725490196078431 0.57647058823529407 0.58039215686274515 0.58431372549019611 0.58823529411764708 0.59215686274509804 0.59607843137254901 0.59999999999999998 0.60392156862745094 0.60784313725490191 0.61176470588235299 0.61568627450980395 0.61960784313725492 0.62352941176470589 0.62745098039215685 0.63137254901960782 0.63529411764705879 0.63921568627450975 0.64313725490196083 0.6470588235294118 0.65098039215686276 0.65490196078431373 0.6588235294117647 0.66274509803921566 0.66666666666666663 0.6705882352941176 0.67450980392156867 0.67843137254901964 0.68235294117647061 0.68627450980392157 0.69019607843137254 0.69411764705882351 0.69803921568627447 0.70196078431372544 0.70588235294117652 0.70980392156862748 0.71372549019607845 0.71764705882352942 0.72156862745098038 0.72549019607843135 0.72941176470588232 0.73333333333333328 0.73725490196078436 0.74117647058823533 0.74509803921568629 0.74901960784313726 0.75294117647058822 0.75686274509803919 0.76078431372549016 0.76470588235294112 0.7686274509803922 0.77254901960784317 0.77647058823529413 0.7803921568627451 0.78431372549019607 0.78823529411764703 0.792156862745098 0.79607843137254897 0.80000000000000004 0.80392156862745101 0.80784313725490198 0.81176470588235294 0.81568627450980391 0.81960784313725488 0.82352941176470584 0.82745098039215681 0.83137254901960789 0.83529411764705885 0.83921568627450982 0.84313725490196079 0.84705882352941175 0.85098039215686272 0.85490196078431369 0.85882352941176465 0.86274509803921573 0.8666666666666667 0.87058823529411766 0.87450980392156863 0.8784313725490196 0.88235294117647056 0.88627450980392153 0.8901960784313725 0.89411764705882357 0.89803921568627454 0.90196078431372551 0.90588235294117647 0.90980392156862744 0.9137254901960784 0.91764705882352937 0.92156862745098034 0.92549019607843142 0.92941176470588238 0.93333333333333335 0.93725490196078431 0.94117647058823528 0.94509803921568625 0.94901960784313721 0.95294117647058818 0.95686274509803926 0.96078431372549022 0.96470588235294119 0.96862745098039216 0.97254901960784312 0.97647058823529409 0.98039215686274506 0.98431372549019602 0.9882352941176471 0.99215686274509807 0.99607843137254903 1)) + (pad-actions)) + +# end of devicerc diff --git a/config/GIMP/3.0/dockrc b/config/GIMP/3.0/dockrc new file mode 100644 index 0000000..bb1944b --- /dev/null +++ b/config/GIMP/3.0/dockrc @@ -0,0 +1,4 @@ +# recently closed docks + + +# end of recently closed docks diff --git a/config/GIMP/3.0/extensionrc b/config/GIMP/3.0/extensionrc new file mode 100644 index 0000000..072796c --- /dev/null +++ b/config/GIMP/3.0/extensionrc @@ -0,0 +1,6 @@ +# GIMP extensionrc + +(GimpExtension "org.gimp.extension.goat-exercises" + (active yes)) + +# end of extensionrc diff --git a/config/GIMP/3.0/filters/GimpBrightnessContrastConfig.settings b/config/GIMP/3.0/filters/GimpBrightnessContrastConfig.settings new file mode 100644 index 0000000..ecac4f3 --- /dev/null +++ b/config/GIMP/3.0/filters/GimpBrightnessContrastConfig.settings @@ -0,0 +1,44 @@ +# settings + +(GimpBrightnessContrastConfig "2026-03-11 21:48:50" + (time 1773262130) + (brightness -0.14173228346456693) + (contrast 0.07874015748031496)) +(GimpBrightnessContrastConfig "2026-03-11 21:29:07" + (time 1773260947) + (brightness -0.44094488188976377) + (contrast 0.40944881889763779)) +(GimpBrightnessContrastConfig "2026-03-11 20:53:05" + (time 1773258785) + (brightness 0.2125984251968504) + (contrast -0.031496062992125984)) +(GimpBrightnessContrastConfig "2026-03-11 20:51:35" + (time 1773258695) + (brightness 0) + (contrast 0.46456692913385828)) +(GimpBrightnessContrastConfig "2026-03-11 20:46:44" + (time 1773258404) + (brightness 0) + (contrast 0.30708661417322836)) +(GimpBrightnessContrastConfig "2026-03-11 20:33:17" + (time 1773257597) + (brightness 0.023622047244094488) + (contrast 0.44094488188976377)) +(GimpBrightnessContrastConfig "2026-02-10 12:24:49" + (time 1770722689) + (brightness 0) + (contrast 0.34645669291338582)) +(GimpBrightnessContrastConfig "2026-02-10 10:35:32" + (time 1770716132) + (brightness 0) + (contrast 0.33070866141732286)) +(GimpBrightnessContrastConfig "2026-02-03 14:30:38" + (time 1770125438) + (brightness 0) + (contrast 0.6692913385826772)) +(GimpBrightnessContrastConfig "2026-02-03 14:20:12" + (time 1770124812) + (brightness 0) + (contrast 1)) + +# end of settings diff --git a/config/GIMP/3.0/filters/GimpColorBalanceConfig.settings b/config/GIMP/3.0/filters/GimpColorBalanceConfig.settings new file mode 100644 index 0000000..73ba0f7 --- /dev/null +++ b/config/GIMP/3.0/filters/GimpColorBalanceConfig.settings @@ -0,0 +1,154 @@ +# settings + +(GimpColorBalanceConfig "2026-03-11 21:47:31" + (time 1773262051) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red 0.027000000000000003) + (magenta-green -0.80700000000000005) + (yellow-blue -0.625) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-03-11 21:44:02" + (time 1773261842) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red 1) + (magenta-green -0.80900000000000005) + (yellow-blue -1) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-03-11 21:28:50" + (time 1773260930) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red 0.38900000000000001) + (magenta-green -0.184) + (yellow-blue -0.094) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-03-11 21:15:19" + (time 1773260119) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red -0.97599999999999998) + (magenta-green 0) + (yellow-blue 0) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-03-11 20:32:39" + (time 1773257559) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red -0.40100000000000002) + (magenta-green 0.46600000000000003) + (yellow-blue 0.36200000000000004) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-03-11 19:52:31" + (time 1773255151) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red 0.17000000000000001) + (magenta-green 0.35600000000000004) + (yellow-blue -0.79900000000000004) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-02-10 10:41:39" + (time 1770716499) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red -0.0090000000000000011) + (magenta-green -0.39399999999999996) + (yellow-blue 0) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-01-31 13:08:20" + (time 1769861300) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red -0.10800000000000001) + (magenta-green -0.311) + (yellow-blue 0) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-01-31 13:05:08" + (time 1769861108) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-01-31 13:05:05" + (time 1769861105) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red -0.501) + (magenta-green -0.45700000000000002) + (yellow-blue -0.57100000000000006) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) + +# end of settings diff --git a/config/GIMP/3.0/filters/GimpGegl-gegl-alien-map-config.settings b/config/GIMP/3.0/filters/GimpGegl-gegl-alien-map-config.settings new file mode 100644 index 0000000..75f56da --- /dev/null +++ b/config/GIMP/3.0/filters/GimpGegl-gegl-alien-map-config.settings @@ -0,0 +1,16 @@ +# settings + +(GimpGegl-gegl-alien-map-config "2026-02-10 10:37:27" + (time 1770716247) + (color-model rgb) + (cpn-1-frequency 1.024) + (cpn-2-frequency 0.88400000000000001) + (cpn-3-frequency 0.75) + (cpn-1-phaseshift 0) + (cpn-2-phaseshift 15.16) + (cpn-3-phaseshift 0) + (cpn-1-keep no) + (cpn-2-keep no) + (cpn-3-keep no)) + +# end of settings diff --git a/config/GIMP/3.0/filters/GimpGegl-gegl-color-temperature-config.settings b/config/GIMP/3.0/filters/GimpGegl-gegl-color-temperature-config.settings new file mode 100644 index 0000000..b3205b2 --- /dev/null +++ b/config/GIMP/3.0/filters/GimpGegl-gegl-color-temperature-config.settings @@ -0,0 +1,24 @@ +# settings + +(GimpGegl-gegl-color-temperature-config "2026-03-11 21:00:48" + (time 1773259248) + (original-temperature 2704.6999999999998) + (intended-temperature 6500)) +(GimpGegl-gegl-color-temperature-config "2026-03-11 20:30:39" + (time 1773257439) + (original-temperature 3237.8000000000002) + (intended-temperature 12000)) +(GimpGegl-gegl-color-temperature-config "2026-02-10 12:25:08" + (time 1770722708) + (original-temperature 2724.0999999999999) + (intended-temperature 6500)) +(GimpGegl-gegl-color-temperature-config "2026-02-10 10:35:51" + (time 1770716151) + (original-temperature 4918.1999999999998) + (intended-temperature 6500)) +(GimpGegl-gegl-color-temperature-config "2026-01-31 12:17:03" + (time 1769858223) + (original-temperature 4596.1999999999998) + (intended-temperature 6722.8000000000002)) + +# end of settings diff --git a/config/GIMP/3.0/filters/GimpGegl-gegl-exposure-config.settings b/config/GIMP/3.0/filters/GimpGegl-gegl-exposure-config.settings new file mode 100644 index 0000000..5dabe26 --- /dev/null +++ b/config/GIMP/3.0/filters/GimpGegl-gegl-exposure-config.settings @@ -0,0 +1,16 @@ +# settings + +(GimpGegl-gegl-exposure-config "2026-03-11 20:59:38" + (time 1773259178) + (black-level -0.085999999999999993) + (exposure -0.46500000000000002)) +(GimpGegl-gegl-exposure-config "2026-03-11 20:56:49" + (time 1773259009) + (black-level 0.037999999999999999) + (exposure -3.8300000000000001)) +(GimpGegl-gegl-exposure-config "2026-01-31 13:06:10" + (time 1769861170) + (black-level 0.10000000000000001) + (exposure 0)) + +# end of settings diff --git a/config/GIMP/3.0/filters/GimpGegl-gegl-hue-chroma-config.settings b/config/GIMP/3.0/filters/GimpGegl-gegl-hue-chroma-config.settings new file mode 100644 index 0000000..dae6c14 --- /dev/null +++ b/config/GIMP/3.0/filters/GimpGegl-gegl-hue-chroma-config.settings @@ -0,0 +1,54 @@ +# settings + +(GimpGegl-gegl-hue-chroma-config "2026-03-11 21:50:58" + (time 1773262258) + (hue 55.270000000000003) + (chroma -71.25) + (lightness 0)) +(GimpGegl-gegl-hue-chroma-config "2026-03-11 21:46:33" + (time 1773261993) + (hue 40.170000000000002) + (chroma 2.1299999999999999) + (lightness -5.8700000000000001)) +(GimpGegl-gegl-hue-chroma-config "2026-03-11 21:45:39" + (time 1773261939) + (hue 45.920000000000002) + (chroma -5.4299999999999997) + (lightness 0)) +(GimpGegl-gegl-hue-chroma-config "2026-03-11 21:29:44" + (time 1773260984) + (hue -88.109999999999999) + (chroma 0) + (lightness 0)) +(GimpGegl-gegl-hue-chroma-config "2026-03-11 20:52:32" + (time 1773258752) + (hue 121.78) + (chroma 11.949999999999999) + (lightness 100)) +(GimpGegl-gegl-hue-chroma-config "2026-03-11 20:49:37" + (time 1773258577) + (hue 93.049999999999997) + (chroma 0) + (lightness 0)) +(GimpGegl-gegl-hue-chroma-config "2026-03-11 20:47:45" + (time 1773258465) + (hue -40.509999999999998) + (chroma 0) + (lightness 0)) +(GimpGegl-gegl-hue-chroma-config "2026-03-11 20:46:10" + (time 1773258370) + (hue 67.280000000000001) + (chroma 3.6699999999999999) + (lightness 0.48999999999999999)) +(GimpGegl-gegl-hue-chroma-config "2026-03-11 20:35:15" + (time 1773257715) + (hue -3.8900000000000001) + (chroma 10.710000000000001) + (lightness 100)) +(GimpGegl-gegl-hue-chroma-config "2026-02-10 12:24:58" + (time 1770722698) + (hue -90.430000000000007) + (chroma 0) + (lightness 0)) + +# end of settings diff --git a/config/GIMP/3.0/filters/GimpGegl-gegl-noise-cie-lch-config.settings b/config/GIMP/3.0/filters/GimpGegl-gegl-noise-cie-lch-config.settings new file mode 100644 index 0000000..3c5934a --- /dev/null +++ b/config/GIMP/3.0/filters/GimpGegl-gegl-noise-cie-lch-config.settings @@ -0,0 +1,25 @@ +# settings + +(GimpGegl-gegl-noise-cie-lch-config "2026-03-11 20:29:31" + (time 1773257371) + (holdness 5) + (lightness-distance 40) + (chroma-distance 40) + (hue-distance 3) + (seed 0)) +(GimpGegl-gegl-noise-cie-lch-config "2026-03-11 20:19:03" + (time 1773256743) + (holdness 5) + (lightness-distance 69.510000000000005) + (chroma-distance 0) + (hue-distance 12.699999999999999) + (seed 0)) +(GimpGegl-gegl-noise-cie-lch-config "2026-03-11 20:13:43" + (time 1773256423) + (holdness 2) + (lightness-distance 40) + (chroma-distance 40) + (hue-distance 3) + (seed 0)) + +# end of settings diff --git a/config/GIMP/3.0/filters/GimpGegl-gegl-noise-slur-config.settings b/config/GIMP/3.0/filters/GimpGegl-gegl-noise-slur-config.settings new file mode 100644 index 0000000..9cc4279 --- /dev/null +++ b/config/GIMP/3.0/filters/GimpGegl-gegl-noise-slur-config.settings @@ -0,0 +1,9 @@ +# settings + +(GimpGegl-gegl-noise-slur-config "2026-02-18 13:35:01" + (time 1771418101) + (pct-random 26.699999999999999) + (repeat 18) + (seed 0)) + +# end of settings diff --git a/config/GIMP/3.0/filters/GimpGegl-gegl-saturation-config.settings b/config/GIMP/3.0/filters/GimpGegl-gegl-saturation-config.settings new file mode 100644 index 0000000..da426a7 --- /dev/null +++ b/config/GIMP/3.0/filters/GimpGegl-gegl-saturation-config.settings @@ -0,0 +1,32 @@ +# settings + +(GimpGegl-gegl-saturation-config "2026-03-11 20:14:08" + (time 1773256448) + (scale 2.0840000000000001) + (colorspace Native)) +(GimpGegl-gegl-saturation-config "2026-02-10 10:46:36" + (time 1770716796) + (scale 0) + (colorspace Native)) +(GimpGegl-gegl-saturation-config "2026-02-10 10:37:46" + (time 1770716266) + (scale 2.1309999999999998) + (colorspace Native)) +(GimpGegl-gegl-saturation-config "2026-02-10 10:35:16" + (time 1770716116) + (scale 0) + (colorspace Native)) +(GimpGegl-gegl-saturation-config "2026-02-03 14:30:49" + (time 1770125449) + (scale 2.1520000000000001) + (colorspace Native)) +(GimpGegl-gegl-saturation-config "2026-02-03 14:10:30" + (time 1770124230) + (scale 1.593) + (colorspace Native)) +(GimpGegl-gegl-saturation-config "2026-02-03 13:41:19" + (time 1770122479) + (scale 2.27) + (colorspace Native)) + +# end of settings diff --git a/config/GIMP/3.0/filters/GimpGegl-gimp-colorize-config.settings b/config/GIMP/3.0/filters/GimpGegl-gimp-colorize-config.settings new file mode 100644 index 0000000..1adf2f2 --- /dev/null +++ b/config/GIMP/3.0/filters/GimpGegl-gimp-colorize-config.settings @@ -0,0 +1,11 @@ +# settings + +(GimpGegl-gimp-colorize-config "2026-01-31 13:08:07" + (time 1769861287) + (hue 0.1052) + (saturation 0.5) + (lightness 0) + (color + (color "HSL float" 12 "\31s\327\75\0\0\0\77\0\0\0\77" 0))) + +# end of settings diff --git a/config/GIMP/3.0/filters/GimpHueSaturationConfig.settings b/config/GIMP/3.0/filters/GimpHueSaturationConfig.settings new file mode 100644 index 0000000..5f9d343 --- /dev/null +++ b/config/GIMP/3.0/filters/GimpHueSaturationConfig.settings @@ -0,0 +1,35 @@ +# settings + +(GimpHueSaturationConfig "2026-03-11 20:51:09" + (time 1773258669) + (range all) + (hue -0.43333333333333335) + (saturation 0) + (lightness -0.17699999999999999) + (range red) + (hue 0) + (saturation 0) + (lightness 0) + (range yellow) + (hue 0) + (saturation 0) + (lightness 0) + (range green) + (hue 0) + (saturation 0) + (lightness 0) + (range cyan) + (hue 0) + (saturation 0) + (lightness 0) + (range blue) + (hue 0) + (saturation 0) + (lightness 0) + (range magenta) + (hue 0) + (saturation 0) + (lightness 0) + (overlap 0)) + +# end of settings diff --git a/config/GIMP/3.0/filters/GimpLevelsConfig.settings b/config/GIMP/3.0/filters/GimpLevelsConfig.settings new file mode 100644 index 0000000..e8d4d6b --- /dev/null +++ b/config/GIMP/3.0/filters/GimpLevelsConfig.settings @@ -0,0 +1,39 @@ +# settings + +(GimpLevelsConfig "2026-01-31 12:58:54" + (time 1769860734) + (trc non-linear) + (clamp-input no) + (clamp-output no) + (channel value) + (low-input 0) + (high-input 1) + (gamma 1) + (low-output 0) + (high-output 1) + (channel red) + (low-input 0) + (high-input 1) + (gamma 1) + (low-output 0) + (high-output 1) + (channel green) + (low-input 0) + (high-input 1) + (gamma 1) + (low-output 0) + (high-output 1) + (channel blue) + (low-input 0) + (high-input 1) + (gamma 1) + (low-output 0) + (high-output 1) + (channel alpha) + (low-input 0) + (high-input 1) + (gamma 1) + (low-output 0) + (high-output 1)) + +# end of settings diff --git a/config/GIMP/3.0/gimprc b/config/GIMP/3.0/gimprc new file mode 100644 index 0000000..6fedeb6 --- /dev/null +++ b/config/GIMP/3.0/gimprc @@ -0,0 +1,39 @@ +# GIMP gimprc +# +# This is your personal gimprc file. Any variable defined in this file takes +# precedence over the value defined in the system-wide gimprc: +# /etc/gimp/3.0/gimprc +# Most values can be set within GIMP by changing some options in the +# Preferences dialog. + +(language "fr") +(prev-language "fr") +(config-version "3.0.8") +(import-raw-plug-in "${gimp_plug_in_dir}/plug-ins/file-raw-placeholder/file-raw-placeholder") +(monitor-xresolution 102) +(monitor-yresolution 103) +(selection-grow-radius 3) +(fill-options + (style fg-color) + (custom-style solid-color) + (antialias yes) + (feather no) + (feather-radius 10)) +(stroke-options + (style fg-color) + (custom-style solid-color) + (antialias yes) + (feather no) + (feather-radius 10) + (method line) + (width 6) + (unit pixels) + (cap-style butt) + (join-style miter) + (miter-limit 10) + (dash-offset 0) + (dash-info 0) + (emulate-brush-dynamics no)) + + +# end of gimprc diff --git a/config/GIMP/3.0/internal-data/custom.ggr b/config/GIMP/3.0/internal-data/custom.ggr new file mode 100644 index 0000000..65023c2 --- /dev/null +++ b/config/GIMP/3.0/internal-data/custom.ggr @@ -0,0 +1,4 @@ +GIMP Gradient +Name: Personnalisé +1 +0 0.5 1 0 0 0 1 1 1 1 1 0 0 1 3 diff --git a/config/GIMP/3.0/modifiersrc b/config/GIMP/3.0/modifiersrc new file mode 100644 index 0000000..aad0e8b --- /dev/null +++ b/config/GIMP/3.0/modifiersrc @@ -0,0 +1,7 @@ +# GIMP modifiersrc +# +# This file stores modifiers configuration. You are not supposed to edit it +# manually, but of course you can do. The modifiersrc will be entirely +# rewritten every time you quit GIMP. If this file isn't found, defaults are +# used. + diff --git a/config/GIMP/3.0/parasiterc b/config/GIMP/3.0/parasiterc new file mode 100644 index 0000000..6cfb1be --- /dev/null +++ b/config/GIMP/3.0/parasiterc @@ -0,0 +1,6 @@ +# GIMP parasiterc +# +# This file will be entirely rewritten each time you exit. + + +# end of parasiterc diff --git a/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-file-jpeg-export.last b/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-file-jpeg-export.last new file mode 100644 index 0000000..e9f0c19 --- /dev/null +++ b/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-file-jpeg-export.last @@ -0,0 +1,27 @@ +# settings + +(quality 0.90000000000000002) +(smoothing 0) +(optimize yes) +(progressive yes) +(cmyk no) +(sub-sampling "sub-sampling-1x1") +(baseline yes) +(restart 16) +(dct "integer") +(include-exif no) +(include-iptc no) +(include-xmp no) +(include-color-profile no) +(include-thumbnail no) +(include-comment no) +(use-original-quality no) +(original-quality 90) +(original-sub-sampling 0) +(original-num-quant-tables 0) +(show-preview no) +(use-arithmetic-coding no) +(use-restart no) +(gimp-comment "Created with GIMP") + +# end of settings diff --git a/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-file-jpeg-load.last b/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-file-jpeg-load.last new file mode 100644 index 0000000..3013a25 --- /dev/null +++ b/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-file-jpeg-load.last @@ -0,0 +1,4 @@ +# settings + + +# end of settings diff --git a/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-file-png-export.last b/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-file-png-export.last new file mode 100644 index 0000000..b1f4d44 --- /dev/null +++ b/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-file-png-export.last @@ -0,0 +1,20 @@ +# settings + +(interlaced no) +(compression 1) +(bkgd no) +(offs no) +(phys yes) +(time yes) +(save-transparent no) +(optimize-palette no) +(format "rgb8") +(include-exif no) +(include-iptc no) +(include-xmp no) +(include-color-profile no) +(include-thumbnail no) +(include-comment no) +(gimp-comment "Created with GIMP") + +# end of settings diff --git a/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-file-png-load.last b/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-file-png-load.last new file mode 100644 index 0000000..3013a25 --- /dev/null +++ b/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-file-png-load.last @@ -0,0 +1,4 @@ +# settings + + +# end of settings diff --git a/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-plug-in-busy-dialog.last b/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-plug-in-busy-dialog.last new file mode 100644 index 0000000..8f12bac --- /dev/null +++ b/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-plug-in-busy-dialog.last @@ -0,0 +1,5 @@ +# settings + +(run-mode interactive) + +# end of settings diff --git a/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-plug-in-despeckle.last b/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-plug-in-despeckle.last new file mode 100644 index 0000000..7c5868d --- /dev/null +++ b/config/GIMP/3.0/plug-in-settings/GimpProcedureConfigRun-plug-in-despeckle.last @@ -0,0 +1,8 @@ +# settings + +(radius 1) +(type "adaptive") +(black 255) +(white 0) + +# end of settings diff --git a/config/GIMP/3.0/pluginrc b/config/GIMP/3.0/pluginrc new file mode 100644 index 0000000..1e47698 --- /dev/null +++ b/config/GIMP/3.0/pluginrc @@ -0,0 +1,4720 @@ +# GIMP pluginrc +# +# This file can safely be removed and will be automatically regenerated by +# querying the installed plug-ins. + +(protocol-version 277) +(file-version 15) + +(plug-in-def "${gimp_plug_in_dir}/plug-ins/web-browser/web-browser" 1769438854 + (proc-def "plug-in-web-browser" 1 + "Open an URL in the user specified web browser" + "Opens the given URL in the user specified web browser." + "Henrik Brix Andersen " + "2003" + "2003/09/16" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 1 0 + (proc-arg 7 "GParamString" "gchararray" "url" "URL" "URL to open" 3 "https://www.gimp.org/"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/wavelet-decompose/wavelet-decompose" 1769438854 + (proc-def "plug-in-wavelet-decompose" 1 + "Décomposition en ondelettes" + "Compute and render wavelet scales" + "Miroslav Talasek " + "Miroslav Talasek " + "19 January 2017" + "Décomposer en _ondelettes…" + 1 + (menu-path "/Filters/Enhance") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 6 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "scales" "Scal_es" "Number of scales" 3 1 7 5) + (proc-arg 5 "GParamBoolean" "gboolean" "create-group" "Create a layer group to store the _decomposition" "Créer un groupe de calques pour stocker la décomposition" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "create-masks" "_Add a layer mask to each scales layer" "Add a layer mask to each scales layer" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/warp/warp" 1769438854 + (proc-def "plug-in-warp" 1 + "Tourbillonne ou salit l’image de différentes façons" + "Smears an image along vector paths calculated as the gradient of a separate control matrix. The effect can look like brushstrokes of acrylic or watercolor paint, in some cases." + "John P. Beale" + "John P. Beale" + "1997" + "Déca_ler…" + 1 + (menu-path "/Filters/Map") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 17 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 6 "GParamDouble" "gdouble" "amount" "Step si_ze" "Pixel displacement multiplier" 3 -1.7976931348623157e+308 1.7976931348623157e+308 10) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "warp-map" "Dis_placement Map" "Displacement control map" 3 1) + (proc-arg 1 "GParamInt" "gint" "iter" "I_terations" "Iteration count" 3 1 100 5) + (proc-arg 6 "GParamDouble" "gdouble" "dither" "_Dither size" "Random dither amount" 3 0 100 0) + (proc-arg 6 "GParamDouble" "gdouble" "angle" "Rotatio_n angle" "Angle of gradient vector rotation" 3 0 360 90) + (proc-arg 4 "GimpParamChoice" "gchararray" "wrap-type" "On ed_ges" "Wrap type" 3 "wrap" 4 "wrap" 0 "Enrouler" "" "smear" 1 "Étaler" "" "black" 2 "Noir" "" "color" 3 "Foreground Color" "") + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "mag-map" "_Magnitude Map" "Magnitude control map" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "mag-use" "_Use magnitude map" "Utiliser la carte de force" 3 0) + (proc-arg 1 "GParamInt" "gint" "substeps" "Su_bsteps" "Substeps between image updates" 3 1 100 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "grad-map" "Gradient Ma_p" "Gradient control map" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "grad-scale" "Gradient s_cale" "Scaling factor for gradient map (0=don't use)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 0) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "vector-map" "_Vector Map" "Fixed vector control map" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "vector-scale" "Vector magn_itude" "Scaling factor for fixed vector map (0=don't use)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 0) + (proc-arg 6 "GParamDouble" "gdouble" "vector-angle" "Ang_le" "Angle for fixed vector map" 3 0 360 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/van-gogh-lic/van-gogh-lic" 1769438854 + (proc-def "plug-in-lic" 1 + "Effets spéciaux que personne ne comprend" + "No help yet" + "Tom Bech & Federico Mena Quintero" + "Tom Bech & Federico Mena Quintero" + "Version 0.14, September 24 1997" + "_Van Gogh (LIC)…" + 1 + (menu-path "/Filters/Artistic") + (icon icon-name -1 "") + "RGB*" + 1 + 12 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 4 "GimpParamChoice" "gchararray" "effect-channel" "E_ffect Channel" "Canal d’effet" 3 "brightness" 3 "hue" 0 "Teinte" "" "saturation" 1 "Saturation" "" "brightness" 2 "Brightness" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "effect-operator" "Effect O_perator" "Opérateur d’effet" 3 "gradient" 2 "derivative" 0 "Derivative" "" "gradient" 1 "Gradient" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "effect-convolve" "Con_volve" "Convolution" 3 "with-source-image" 2 "with-white-noise" 0 "With white noise" "" "with-source-image" 1 "With source image" "") + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "effect-image" "Effect i_mage" "Effect image" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "filter-length" "Fil_ter length" "Filter length" 3 0.10000000000000001 64 5) + (proc-arg 6 "GParamDouble" "gdouble" "noise-magnitude" "_Noise Magnitude" "Noise Magnitude" 3 1 5 2) + (proc-arg 6 "GParamDouble" "gdouble" "integration-steps" "Inte_gration steps" "Integration steps" 3 1 40 25) + (proc-arg 6 "GParamDouble" "gdouble" "min-value" "Minimum v_alue" "Minimum value" 3 -100 0 -25) + (proc-arg 6 "GParamDouble" "gdouble" "max-value" "Ma_ximum value" "Maximum value" 3 0 100 25))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/unit-editor/unit-editor" 1769438854 + (proc-def "plug-in-unit-editor" 1 + "Crée ou modifie les unités utilisées par GIMP" + "The GIMP unit editor" + "Michael Natterer " + "Michael Natterer " + "2000" + "U_nités" + 1 + (menu-path "/Edit/[Preferences]") + (icon icon-name -1 "gimp-tool-measure") + "" + 2147483647 + 1 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/tile-small/tile-small" 1769438854 + (proc-def "plug-in-small-tiles" 1 + "Refait une image avec des versions plus petites de l’original" + "More here later" + "Andy Thomas" + "Andy Thomas" + "1997" + "Petits ra_ccords…" + 1 + (menu-path "/Filters/Map") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "num-tiles" "_n²" "Number of tiles to make" 3 2 6 2))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/tile/tile" 1769438854 + (proc-def "plug-in-tile" 1 + "Crée un tableau de copies de l’image" + "This function creates a new image with a single layer sized to the specified 'new_width' and 'new_height' parameters. The specified drawable is tiled into this layer. The new layer will have the same type as the specified drawable and the new image will have a corresponding base type." + "Spencer Kimball & Peter Mattis" + "Spencer Kimball & Peter Mattis" + "1996-1997" + "_Raccorder…" + 1 + (menu-path "/Filters/Map") + (icon icon-name -1 "") + "*" + 1 + 6 2 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "new-width" "New _width" "New (tiled) image width" 3 1 524288 1) + (proc-arg 1 "GParamInt" "gint" "new-height" "New _height" "New (tiled) image height" 3 1 524288 1) + (proc-arg 5 "GParamBoolean" "gboolean" "new-image" "New _image" "Create a new image" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image" "New image" "Output image (NULL if new-image == FALSE)" 3 1) + (proc-arg 9 "GimpParamLayer" "GimpLayer" "new-layer" "New layer" "Output layer (NULL if new-image == FALSE)" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/test-sphere-v3/test-sphere-v3.scm" 1769438854 + (proc-def "script-fu-test-sphere-v3" 1 + "Plug-in example in Scheme" + "" + "Spencer Kimball, Sven Neumann" + "Spencer Kimball" + "1996, 1998" + "Plug-In Example in _Scheme" + 1 + (menu-path "/Filters/Development/Plug-In Examples") + (icon icon-name -1 "") + "*" + 5 + 26 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "adjustment" "Radius (in pixels)" "Radius (in pixels)" 3 1 5000 100) + (proc-arg 6 "GParamDouble" "gdouble" "adjustment-2" "Lighting (degrees)" "Lighting (degrees)" 3 0 360 45) + (proc-arg 5 "GParamBoolean" "gboolean" "toggle" "Shadow" "Shadow" 3 1) + (proc-arg 8 "GimpParamColor" "GeglColor" "color" "Background color" "Background color" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0) + (proc-arg 8 "GimpParamColor" "GeglColor" "color-2" "Sphere color" "Sphere color" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0) + (proc-arg 12 "GimpParamBrush" "GimpBrush" "brush" "Brush" "Brush" 3 0 0 21) + (proc-arg 7 "GParamString" "gchararray" "string" "Text" "Text" 3 "Tiny-Fu rocks!") + (proc-arg 7 "GParamString" "gchararray" "text" "Multi-line text" "Multi-line text" 3 "Hello,\nWorld!") + (proc-arg 12 "GimpParamPattern" "GimpPattern" "pattern" "Pattern" "Pattern" 3 0 0 1965) + (proc-arg 12 "GimpParamGradient" "GimpGradient" "gradient" "Gradient" "Gradient" 3 0 0 2060) + (proc-arg 5 "GParamBoolean" "gboolean" "toggle-2" "Gradient reverse" "Gradient reverse" 3 0) + (proc-arg 12 "GimpParamFont" "GimpFont" "font" "Font" "Font" 3 0 0 0) + (proc-arg 1 "GParamInt" "gint" "adjustment-3" "Font size (pixels)" "Font size (pixels)" 3 1 1000 50) + (proc-arg 12 "GimpParamPalette" "GimpPalette" "palette" "Palette" "Palette" 3 0 0 2014) + (proc-arg 13 "GimpParamFile" "GFile" "filename" "Environment map" "Environment map" 259 0 1 "file:///usr/share/gimp/3.0/scripts/images/beavis.jpg") + (proc-arg 1 "GParamInt" "gint" "option" "Orientation" "Orientation" 3 0 1 0) + (proc-arg 3 "GParamEnum" "GimpInterpolationType" "enum" "Interpolation" "Interpolation" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "dirname" "Output directory" "Output directory" 259 2 1 "file:///var/tmp") + (proc-arg 9 "GimpParamImage" "GimpImage" "otherImage" "Image" "Image" 3 1) + (proc-arg 9 "GimpParamLayer" "GimpLayer" "layer" "Layer" "Layer" 3 1) + (proc-arg 9 "GimpParamChannel" "GimpChannel" "channel" "Channel" "Channel" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "drawable" "Drawable" "Drawable" 3 1) + (proc-arg 9 "GimpParamPath" "GimpPath" "vectors" "Vectors" "Vectors" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/spyro-plus/spyro-plus.py" 1769438854 + (proc-def "plug-in-spyrogimp" 1 + "Dessine des courbes spiroïdales en utilisant les paramètres et sélection définis dans l’outil actif." + "Uses current tool settings to draw Spyrograph patterns. The size and location of the pattern is based on the current selection." + "Elad Shahar" + "Elad Shahar" + "2018" + "Spyrogimp…" + 1 + (menu-path "/Filters/Render/") + (icon icon-name -1 "") + "*" + 1 + 16 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 4 "GimpParamChoice" "gchararray" "curve-type" "Type de courbe" "Type de courbe" 3 "spyrograph" 4 "spyrograph" 0 "Spyrographe" "" "epitrochoid" 1 "Épitrochoïde" "" "sine" 2 "Sinus" "" "lissajous" 3 "Lissajous" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "shape" "Forme" "Forme" 3 "circle" 7 "circle" 0 "Cercle" "" "rack" 1 "rack" "" "frame" 2 "frame" "" "selection" 3 "Sélection" "" "polygon-star" 4 "Étoile-polygone" "" "sine" 5 "Sinus" "" "bumps" 6 "Bosses" "") + (proc-arg 1 "GParamInt" "gint" "sides" "Si_des" "Number of sides of fixed gear (3 or greater). Only used by some shapes." 3 3 2147483647 3) + (proc-arg 6 "GParamDouble" "gdouble" "morph" "_Morph" "Morph shape of fixed gear, between 0 and 1. Only used by some shapes." 3 0 1 0) + (proc-arg 1 "GParamInt" "gint" "fixed-teeth" "Fi_xed Gear Teeth" "Number of teeth for fixed gear." 3 0 2147483647 96) + (proc-arg 1 "GParamInt" "gint" "moving-teeth" "Mo_ving Gear Teeth" "Number of teeth for fixed gear." 3 0 2147483647 36) + (proc-arg 6 "GParamDouble" "gdouble" "hole-percent" "_Hole Radius (%)" "Location of hole in moving gear in percent, where 100 means that the hole is at the edge of the gear, and 0 means the hole is at the center" 3 0 100 100) + (proc-arg 1 "GParamInt" "gint" "margin" "Margin (_px)" "Margin from selection, in pixels" 3 0 2147483647 0) + (proc-arg 5 "GParamBoolean" "gboolean" "equal-w-h" "Égaliser largeur et hauteur" "Égaliser largeur et hauteur" 3 0) + (proc-arg 6 "GParamDouble" "gdouble" "pattern-rotation" "_Rotation" "Pattern rotation, in degrees" 3 -360 360 0) + (proc-arg 6 "GParamDouble" "gdouble" "shape-rotation" "_Rotation" "Shape rotation of fixed gear, in degrees" 3 -360 360 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "tool" "Outil" "Outil" 3 "preview" 7 "preview" 0 "Aperçu" "" "paintbrush" 1 "Brosse" "" "pencil" 2 "Crayon" "" "airbrush" 3 "Aérographe" "" "stroke" 4 "Coup de pinceau" "" "ink" 5 "Encre" "" "mypaintbrush" 6 "Brosse MyPaint" "") + (proc-arg 5 "GParamBoolean" "gboolean" "long-gradient" "Long _Gradient" "Whether to apply a long gradient to match the length of the pattern. Only applicable to some of the tools." 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/sphere-designer/sphere-designer" 1769438854 + (proc-def "plug-in-spheredesigner" 1 + "Crée une image d’une sphère texturée" + "This plug-in can be used to create textured and/or bumpmapped spheres, and uses a small lightweight raytracer to perform the task with good quality" + "Vidar Madsen" + "Vidar Madsen" + "1999" + "Créateur de sphè_re…" + 1 + (menu-path "/Filters/Render") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/sparkle/sparkle" 1769438854 + (proc-def "plug-in-sparkle" 1 + "Transforme les taches lumineuses en pointes étoilées" + "Uses a percentage based luminosity threshold to find candidate pixels for adding some sparkles (spikes)." + "John Beale, & (ported to GIMP v0.54) Michael J. Hammel & ted to GIMP v1.0) & Seth Burgess & Spencer Kimball" + "John Beale" + "Version 1.27, September 2003" + "É_tinceler…" + 1 + (menu-path "/Filters/Light and Shadow/[Light]") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 16 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 6 "GParamDouble" "gdouble" "lum-threshold" "Lu_minosity threshold" "Ajuste le seuil de luminosité" 3 0 0.10000000000000001 0.01) + (proc-arg 6 "GParamDouble" "gdouble" "flare-inten" "_Flare intensity" "Ajuste l’intensité de l’éblouissement" 3 0 1 0.5) + (proc-arg 1 "GParamInt" "gint" "spike-len" "Spi_ke length" "Adjust the spike length (in pixels)" 3 1 100 20) + (proc-arg 1 "GParamInt" "gint" "spike-points" "Spike _points" "Ajuste le nombre de pointes" 3 1 16 4) + (proc-arg 1 "GParamInt" "gint" "spike-angle" "Spike angle (-_1: random)" "Ajuste l’angle des pointes (-1 signifie qu’un angle aléatoire est choisi)" 3 -1 360 15) + (proc-arg 6 "GParamDouble" "gdouble" "density" "Spike _density" "Ajuste la densité des pointes" 3 0 1 1) + (proc-arg 6 "GParamDouble" "gdouble" "transparency" "_Transparency" "Ajuste l’opacité des pointes" 3 0 1 0) + (proc-arg 6 "GParamDouble" "gdouble" "random-hue" "Random _hue" "Ajuste l’influence du hasard sur la teinte" 3 0 1 0) + (proc-arg 6 "GParamDouble" "gdouble" "random-saturation" "R_andom saturation" "Ajuste l’influence du hasard sur la saturation" 3 0 1 0) + (proc-arg 5 "GParamBoolean" "gboolean" "preserve-luminosity" "Preserve l_uminosity" "La luminosité doit-elle être préservée ?" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "inverse" "In_verser" "L’effet doit-il être inversé ?" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "border" "Add _border" "Trace une bordure de pointes autour de l’image" 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "color-type" "_Color type" "Color of sparkles" 3 "natural-color" 3 "natural-color" 0 "Natural color" "" "foreground-color" 1 "Couleur de premier plan" "" "background-color" 2 "Background color" ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/smooth-palette/smooth-palette" 1769438854 + (proc-def "plug-in-smooth-palette" 1 + "Déduit une palette lissée depuis l’image" + "help!" + "Scott Draves" + "Scott Draves" + "1997" + "_Palette lissée…" + 1 + (menu-path "/Colors/Info") + (icon icon-name -1 "") + "RGB*" + 1 + 7 2 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "width" "_Largeur" "Width" 3 2 524288 256) + (proc-arg 1 "GParamInt" "gint" "height" "_Hauteur" "Height" 3 2 524288 64) + (proc-arg 1 "GParamInt" "gint" "n-tries" "Search _depth" "Search depth" 3 1 1024 50) + (proc-arg 5 "GParamBoolean" "gboolean" "show-image" "Afficher l’image" "Afficher l’image" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image" "New image" "Output image" 3 0) + (proc-arg 9 "GimpParamLayer" "GimpLayer" "new-layer" "New layer" "Output layer" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/selection-to-path/selection-to-path" 1769438854 + (proc-def "plug-in-sel2path" 1 + "Converts a selection to a path" + "Converts a selection to a path" + "Andy Thomas" + "Andy Thomas" + "1999" + "" + 0 + (icon icon-name -1 "") + "*" + 13 + 23 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 6 "GParamDouble" "gdouble" "align-threshold" "_Align Threshold" "Si deux points d’extrémité sont plus proches que ce seuil, ils sont égalisés." 3 0.20000000000000001 2 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "corner-always-threshold" "Corner Al_ways Threshold" "Si l’angle défini par un point, ainsi que ses prédécesseurs et successeurs, est plus petit que ce seuil, c’est un coin, même s’il se situe à l’intérieur des pixels « environnement de coin » d’un point avec un angle plus petit." 3 30 180 60) + (proc-arg 1 "GParamInt" "gint" "corner-surround" "Corner _Surround" "Nombre de points à prendre en considération pour déterminer si un point est un coin ou non." 3 3 8 4) + (proc-arg 6 "GParamDouble" "gdouble" "corner-threshold" "Cor_ner Threshold" "Si c’est un point, et que ses prédécesseurs et successeurs forment un angle plus petit que ce seuil, c’est un coin." 3 0 180 100) + (proc-arg 6 "GParamDouble" "gdouble" "error-threshold" "Error Thres_hold" "Taux d’erreur au-delà duquel l’ajustement d’une spline devient inacceptable. Si un ajustement d’un pixel se situe au-delà de cette valeur, l’algorithme recommence." 3 0.20000000000000001 10 0.40000000000000002) + (proc-arg 1 "GParamInt" "gint" "filter-alternative-surround" "_Filter Alternative Surround" "Autre nombre de points adjacents à prendre en considération lors du filtrage." 3 1 10 1) + (proc-arg 6 "GParamDouble" "gdouble" "filter-epsilon" "Filter E_psilon" "Si les angles entre les vecteurs produits par les points filter_surround et filter_alternative_surround diffèrent d’une valeur supérieure à celle-ci, utiliser celle de filter_alternative_surround." 3 5 40 10) + (proc-arg 1 "GParamInt" "gint" "filter-iteration-count" "Filter Iteration Co_unt" "C’est le nombre d’applications du filtre pour lisser les points de données. L’augmentation forte de ce nombre, à 50 ou plus, peut améliorer grandement les résultats. Mais si aucun point qui « devrait » être un coin n’est trouvé, la courbe prendra un aspect erratique autour de ce point." 3 4 70 4) + (proc-arg 6 "GParamDouble" "gdouble" "filter-percent" "Filt_er Percent" "Pour produire le nouveau point, utiliser l’ancien point ajusté de ce pourcentage de ses voisins." 3 0 1 0.33000000000000002) + (proc-arg 1 "GParamInt" "gint" "filter-secondary-surround" "Filter Secondar_y Surround" "Nombre de points adjacents à prendre en considération si les points de « filter_surround » définissent une ligne droite." 3 3 10 3) + (proc-arg 1 "GParamInt" "gint" "filter-surround" "Filter Surroun_d" "Nombre de points adjacents à prendre en considération lors du filtrage." 3 2 10 2) + (proc-arg 5 "GParamBoolean" "gboolean" "keep-knees" "_Keep Knees" "Indique s’il faut ou non supprimer les points « coudes » après avoir défini le contour." 3 0) + (proc-arg 6 "GParamDouble" "gdouble" "line-reversion-threshold" "_Line Reversion Threshold" "Si une spline est plus proche d’une ligne droite que cette valeur, elle reste ligne droite, même si autrement elle aurait dû être transformée en courbe. Ceci est pondéré par le carré de la longueur de la courbe pour que les courtes courbes aient plus de chances d’être refaites." 3 0.01 0.20000000000000001 0.01) + (proc-arg 6 "GParamDouble" "gdouble" "line-threshold" "L_ine Threshold" "Nombre de pixels (en moyenne) qu’une spline peut diverger de la ligne déterminée par ses extrémités avant d’être transformée en ligne droite." 3 0.20000000000000001 4 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "reparametrize-improvement" "Reparametri_ze Improvement" "Si le reparamétrage n’améliore pas de ce pourcentage l’adaptation, l’algorithme renonce à le faire. Importance de l’erreur au-delà de laquelle il est inutile de poursuivre le reparamétrage." 3 0 1 0.01) + (proc-arg 6 "GParamDouble" "gdouble" "reparametrize-threshold" "Repara_metrize Threshold" "Taux de l’erreur pour laquelle le reparamétrage devient sans intérêt. Cela survient, par exemple, quand l’algorithme essaie d’adapter le contour de la bordure d’un « O » à une simple spline. L’adaptation initiale n’est pas assez bonne pour que l’itération de Newton-Raphson puisse l’améliorer. Il vaudrait peut-être mieux détecter les cas où l’algorithme ne trouve aucun coin." 3 1 50 1) + (proc-arg 6 "GParamDouble" "gdouble" "subdivide-search" "Subdi_vide Search" "Pourcentage de la courbe au-delà du plus mauvais point imposant la recherche d’un meilleur endroit pour subdiviser." 3 0.050000000000000003 1 0.10000000000000001) + (proc-arg 1 "GParamInt" "gint" "subdivide-surround" "Su_bdivide Surround" "Nombre de points à prendre en considération pour savoir si un point donné convient à la subdivision." 3 2 10 4) + (proc-arg 6 "GParamDouble" "gdouble" "subdivide-threshold" "Subdivide Th_reshold" "De combien de pixels un point peut diverger de la ligne droite et demeurer le meilleur endroit pour subdiviser." 3 0.01 1 0.029999999999999999) + (proc-arg 1 "GParamInt" "gint" "tangent-surround" "_Tangent Surround" "Nombre de points à étudier de chaque côté d’un point lors du calcul de la tangente approximative en ce point." 3 2 10 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/script-fu-server/script-fu-server" 1769438854 + (proc-def "plug-in-script-fu-server" 1 + "Serveur pour les opérations Script-Fu distantes" + "Provides a server for remote script-fu operation. NOTE that for security reasons this procedure's API was changed in an incompatible way since GIMP 2.8.12. You now have to pass the IP to listen on as first parameter. Calling this procedure with the old API will fail on purpose." + "Spencer Kimball & Peter Mattis" + "Spencer Kimball & Peter Mattis" + "1997" + "_Démarrer le serveur…" + 1 + (menu-path "/Filters/Development/Script-Fu") + (icon icon-name -1 "") + "" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0) + (proc-arg 7 "GParamString" "gchararray" "ip" "IP" "The IP on which to listen for requests" 3 "") + (proc-arg 1 "GParamInt" "gint" "port" "Port" "The port on which to listen for requests" 3 0 2147483647 0) + (proc-arg 7 "GParamString" "gchararray" "logfile" "Log File" "The file to log activity to" 3 ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/script-fu/script-fu" 1769438854 + (proc-def "extension-script-fu" 2 + "A scheme interpreter for scripting GIMP operations" + "More help here later" + "Spencer Kimball & Peter Mattis" + "Spencer Kimball & Peter Mattis" + "1997" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 0 0) + (proc-def "plug-in-script-fu-console" 1 + "Console interactive pour le développement de Script-Fu" + "Provides an interface which allows interactive scheme development." + "Spencer Kimball & Peter Mattis" + "Spencer Kimball & Peter Mattis" + "1997" + "_Console Script-Fu" + 1 + (menu-path "/Filters/Development/Script-Fu") + (icon icon-name -1 "") + "" + 2147483647 + 1 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0)) + (proc-def "plug-in-script-fu-text-console" 1 + "Provides a text console mode for script-fu development" + "Provides an interface which allows interactive scheme development." + "Spencer Kimball & Peter Mattis" + "Spencer Kimball & Peter Mattis" + "1997" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 1 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0)) + (proc-def "plug-in-script-fu-eval" 1 + "Evaluate scheme code" + "Evaluate the code under the scheme interpreter (primarily for batch mode)" + "Manish Singh" + "Manish Singh" + "1998" + "" + 0 + (icon icon-name -1 "") + (batch-interpreter "Script-fu (scheme)") + "" + 2147483647 + 2 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 7 "GParamString" "gchararray" "script" "Batch commands in the target language" "Batch commands in the target language, which will be run by the interpreter" 3 ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/screenshot/screenshot" 1769438854 + (proc-def "plug-in-screenshot" 1 + "Crée une image depuis une région de l’écran" + "The plug-in takes screenshots of an interactively selected window or of the desktop, either the whole desktop or an interactively selected region. When called non-interactively, it may grab the root window or use the window-id passed as a parameter. The last four parameters are optional and can be used to specify the corners of the region to be grabbed.On Mac OS X, when called non-interactively, the plug-inonly can take screenshots of the entire root window.Grabbing a window or a region is not supportednon-interactively. To grab a region or a particularwindow, you need to use the interactive mode." + "Sven Neumann , Henrik Brix Andersen ,Simone Karin Lehmann" + "1998 - 2008" + "v1.1 (2008/04)" + "_Capture d’écran…" + 1 + (menu-path "/File/Create") + (icon pixbuf 1192 "\211PNG\15\12\32\12\0\0\0\15IHDR\0\0\0\26\0\0\0\26\10\6\0\0\0\304\264l\73\0\0\4oIDATx\234\235UKl\33U\24\75\63\36\217\75\266\343\46\216\23\307i\276\135\264\251\232\12\24\41\22\25\51\233F\42\242\52\53\100e\221H\54\40JYd\305\206\256\21l\350\212\25\12\22\12\5\242J\25\13\52\2\64iUP\76D\245rB\22\362Eq\234\346c\307\377\357x\74\63\334g\217\53\53\264R\350\225\256\336\357\352\334\373\316\75oF\300\377\260\261\261\61\63\15\356\362zppp\377y\261\34Nh\36O\175\237\44\331\176\222\44\311T\336\213\307\343\351BA\351\15\6C\276\27\6\346y\176qzf\372bOw\317\323\275\273w\177L\135\275\372\346\32M\137\71\36\57\340\204\46\10\202\355\301\203\373\10\4vJ\33\72\60u\177\322\316q\234\240\353\372\177\343qB\63\231L\266\361\361\361\75\257\267\341ecm\336\333\333\137\247\204vEQN\6\134\137\137\347\245\301C\336M\374\275\177\241\363BU\173\173\233G\226\345tkK\333\242\311\304\353\46A\200\325\52i\33\353\233u\4\374\210\250\62\273\335\265\237P\374m\206\301\35\3\352\15\207\43\37\322\325\270\376\376\327k\57\137\356\253\362z\275\341\32W\265\175n\176\256\352\367\207\17\341r\325\22\240\5v\207\35\251T\12\347\317w\252\311D\362\267\346\346f\347\317\23\23\236\371\371\371\367\10\174\222\43\320\76\2\373\312\341p\64\136\173\367\232\320\323\323\215\246\246\46X\54\42r\271\34fff\221\227\25\344U\271\270\317\361\74L\344\274\251\44\216\303\203\175\310\331\34\74\15\15\260\210R\346\372\360u\306\202E\70\72\12\177q\347\207\73\55\316\52\7\322\351\64\276\271u\13\205B\1g\316\264\43x\30\304\320\7\303\140\315\31\277\375\35\246\356\335\203\315\341\204\40Z\40\232M\20\5\36\365\36\17\66\66\67\361\370\261\17\227\56\275f\43\213e\62\31\10\304M\325\37s\263t\245\16\354Sv\342\22\215\215\247\61\61\61\201\335\100\0\243\243\243\260\331\44\204\42at\276\332\13\233d\205\222\315\342\340\340\0\207\241\60\216\42\353\310R\305\21\72g\324T\66O\317R\140\54\36\247\212\63\364\20\74\360\371\174\360o\373\231v\361\367\352\62Z\333\332\321v\266\23\351h\30\133\313O\40\347\363\200\246C\321T\270\335n\4v\2\10\207\243\310\21\316S\140\326\50\235D\251S\340\352\352jq\63\221H\26\371\245k\25\301\255\366SX\133Z\44\16\315\370ki\31A\272\331\251\352\32tt\234\303\372\372\6\232\232\333\20\217DP\241f\256\44\67\35\317\65\235\204\223I\247\260\273\367\4\376\255\55\50r\16\311d\22\61\272z\62\36EcK\53\266w\374\220lv\212K\263\176\60\245Q\71\206U\362Si\26\253\204\177\210\226\40q\52\232\5\366\175\300\320\320\20ZZZ\240\251\52\240\26\250\331\52lUN\243\276\42\260\300\227\252\322\301\72\371\54\223\254\326\242Jd\342\317\42\212\30\36\36FWW\27\6\6\6PWW\7\273\335\16z\326P\24\342\275\364\264\31\260X\2\246\65\343\364\270\361\74\321\220I\27\347VJ\340\367\373\213\215M\44\22p\72\235\244\236F\324TW\227H\345xdsY\250\252\306\60\5\23q\362\351\225\53o\230R\304c\231\16Y\316\243\321\173\32\365u\36\245\265\265\65W\343r\213\321X\264X\65\323\64\3\217F\243\30\31\31\301\362\312\12i\271\1\252\222W\243\341\10\27\215FVr\71\371k\216\336\367\100\54\26\277y\343\306\307\56U\53h\224\231\13\205\216\370\205\205\5evf\66\302\12\267X\54\316s\27\137\262\12t\311H\50X\254\336\345r\341\354\271\16\254QC\175\177\76\322\263\351t\230b\227\35\16\373g\251Tz\272Htm\255\253\237\236\365M\326\53r\366\227P\50\340K\12\330\240\271\235\271U\222\76\177\353\355wD\246w\225\32F\37\67\230I\176S\277\376\2gu\315\267\273\376\355I\212\133\42\17\220\307\70\203l\336\0\224\312\100\306\134\64\222\61Y\232\5\263\371\173Q\24\35f\62M\323t\45\257\344\250\75\37\311\271\354\26\235\357\221\207\310\223\214\315\362\37\344x\202\262\213\6\250\140\234\225\343tc\315F\271\302\231\2\330\307Y\173\326\257\251\62I\345\274\174\246\31\243Z\1\256\33\373\232\61\307\277C\217\376L\255\371\221\364\0\0\0\0IEND\256B\140\202") + "" + 2147483647 + 8 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 4 "GimpParamChoice" "gchararray" "shoot-type" "Shoot _area" "The shoot type" 3 "window" 3 "window" 0 "Take a screenshot of a single window" "" "screen" 1 "Take a screenshot of the entire screen" "" "region" 2 "Select a region to grab" "") + (proc-arg 1 "GParamInt" "gint" "x1" "X1" "Region left x coord for SHOOT-WINDOW" 3 -2147483648 2147483647 0) + (proc-arg 1 "GParamInt" "gint" "y1" "Y1" "Region top y coord for SHOOT-WINDOW" 3 -2147483648 2147483647 0) + (proc-arg 1 "GParamInt" "gint" "x2" "X2" "Region right x coord for SHOOT-WINDOW" 3 -2147483648 2147483647 0) + (proc-arg 1 "GParamInt" "gint" "y2" "Y2" "Region bottom y coord for SHOOT-WINDOW" 3 -2147483648 2147483647 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-pointer" "Inclure le _pointeur de la souris" "Your pointing device's cursor will be part of the image" 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "color-profile" "Color _Profile" "" 3 "monitor" 2 "monitor" 0 "Tag image with monitor profile" "" "srgb" 1 "Convert image with sRGB" "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/sample-colorize/sample-colorize" 1769438854 + (proc-def "plug-in-sample-colorize" 1 + "Colorie l’image en utilisant un échantillon d’image comme guide" + "This plug-in colorizes the contents of the specified (gray) layer with the help of a sample (color) layer. It analyzes all colors in the sample layer. The sample colors are sorted by brightness (== intensity) and amount and stored in a sample colortable (where brightness is the index) The pixels of the destination layer are remapped with the help of the sample colortable. If use_subcolors is TRUE, the remapping process uses all sample colors of the corresponding brightness-intensity and distributes the subcolors according to their amount in the sample (If the sample has 5 green, 3 yellow, and 1 red pixel of the intensity value 105, the destination pixels at intensity value 105 are randomly painted in green, yellow and red in a relation of 5:3:1 If use_subcolors is FALSE only one sample color per intensity is used. (green will be used in this example) The brightness intensity value is transformed at the remapping process according to the levels: out_lo, out_hi, in_lo, in_high and gamma The in_low / in_high levels specify an initial mapping of the intensity. The gamma value determines how intensities are interpolated between the in_lo and in_high levels. A gamma value of 1.0 results in linear interpolation. Higher gamma values results in more high-level intensities Lower gamma values results in more low-level intensities The out_low/out_high levels constrain the resulting intensity index The intensity index is used to pick the corresponding color in the sample colortable. If hold_inten is FALSE the picked color is used 1:1 as resulting remap_color. If hold_inten is TRUE The brightness of the picked color is adjusted back to the original intensity value (only hue and saturation are taken from the picked sample color) (or to the input level, if orig_inten is set FALSE) Works on both Grayscale and RGB image with/without alpha channel. (the image with the dst_drawable is converted to RGB if necessary) The sample_drawable should be of type RGB or RGBA" + "Wolfgang Hofer" + "hof@hotbot.com" + "02/2000" + "C_olorier à partir d’un échantillon…" + 1 + (menu-path "/Colors/Map") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 13 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "sample-drawable" "Sample drawable" "Sample drawable (should be of Type RGB or RGBA)" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "hold-inten" "Garder l’_intensité" "Hold brightness intensity levels" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "orig-inten" "I_ntensité d’origine" "TRUE: hold brightness of original intensity levels, FALSE: Hold Intensity of input levels" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "rnd-subcolors" "Utilis_er les sous-couleurs" "TRUE: Use all subcolors of same intensity, FALSE: Use only one color per intensity" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "guess-missing" "Smooth sam_ples" "TRUE: guess samplecolors for the missing intensity values, FALSE: use only colors found in the sample" 3 1) + (proc-arg 1 "GParamInt" "gint" "in-low" "_Low" "Intensity of lowest input" 3 0 254 0) + (proc-arg 1 "GParamInt" "gint" "in-high" "_High" "Intensity of highest input" 3 1 255 255) + (proc-arg 6 "GParamDouble" "gdouble" "gamma" "Ga_mma" "Gamma adjustment factor, 1.0 is linear" 3 0.10000000000000001 10 1) + (proc-arg 1 "GParamInt" "gint" "out-low" "Lo_w" "Lowest sample color intensity" 3 0 254 0) + (proc-arg 1 "GParamInt" "gint" "out-high" "Hi_gh" "Highest sample color intensity" 3 1 255 255))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/qbist/qbist" 1769438854 + (proc-def "plug-in-qbist" 1 + "Génère une grande variété de motifs abstraits" + "This Plug-in is based on an article by Jörn Loviscach (appeared in c't 10/95, page 326). It generates modern art pictures from a random genetic formula." + "Jörn Loviscach, Jens Ch. Restemeier" + "Jörn Loviscach, Jens Ch. Restemeier" + "January 2001, 1.12" + "_Qbiste…" + 1 + (menu-path "/Filters/Render/Pattern") + (icon icon-name -1 "") + "RGB*" + 1 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 5 "GParamBoolean" "gboolean" "anti-aliasing" "_Anti-aliasing" "Enable anti-aliasing using an oversampling algorithm" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/python-eval/python-eval.py" 1769438854 + (proc-def "python-fu-eval" 1 + "Evaluate Python code" + "Evaluate python code under the python interpreter (primarily for batch mode)" + "Manish Singh" + "Manish Singh" + "2006" + "" + 0 + (icon icon-name -1 "") + (batch-interpreter "Python 3") + "" + 2147483647 + 2 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 7 "GParamString" "gchararray" "script" "Batch commands in the target language" "Batch commands in the target language, which will be run by the interpreter" 3 ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/python-console/python-console.py" 1769438854 + (proc-def "python-fu-console" 1 + "Interpréteur interactif GIMP Python" + "Type in commands and see results" + "James Henstridge" + "James Henstridge" + "1997-1999" + "_Console Python" + 1 + (menu-path "/Filters/Development/Python-Fu") + (icon icon-name -1 "") + "" + 2147483647 + 1 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/procedure-browser/procedure-browser" 1769438854 + (proc-def "plug-in-dbbrowser" 1 + "Dresse la liste des procédures disponibles dans la PDB" + "" + "Thomas Noel" + "Thomas Noel" + "23th june 1997" + "Navigateur de _procédures" + 1 + (menu-path "/Help/[Programming]") + (icon icon-name -1 "") + "" + 2147483647 + 1 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/print/print" 1769438854 + (proc-def "file-print-gtk" 1 + "Imprime l’image" + "Print the image using the GTK+ Print API." + "Bill Skaggs, Sven Neumann, Stefan Röllin" + "Bill Skaggs " + "2006 - 2008" + "_Imprimer…" + 1 + (menu-path "/File/[Send]") + (icon icon-name -1 "document-print") + "*" + 13 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/plugin-browser/plugin-browser" 1769438854 + (proc-def "plug-in-plug-in-details" 1 + "Affiche des informations sur les greffons" + "Allows one to browse the plug-in menus system. You can search for plug-in names, sort by name or menu location and you can view a tree representation of the plug-in menus. Can also be of help to find where new plug-ins have installed themselves in the menus." + "Andy Thomas" + "Andy Thomas" + "1999" + "Navigateur de _greffons" + 1 + (menu-path "/Help/[Programming]") + (icon icon-name -1 "gimp-plugin") + "" + 2147483647 + 1 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/palette-to-gradient/palette-to-gradient.py" 1769438854 + (proc-def "python-fu-palette-to-gradient" 1 + "Créer un dégradé en utilisant les couleurs issues de la palette" + "Create a new gradient using colors from the palette." + "Carol Spears, reproduced from previous work by Adrian Likins and Jeff Trefftz" + "Carol Spears" + "2006" + "Palette vers _dégradé" + 1 + (menu-path "/Palettes Menu") + (icon icon-name -1 "") + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 12 "GimpParamPalette" "GimpPalette" "palette" "_Palette" "Palette" 3 1 1 0) + (proc-arg 12 "GimpParamGradient" "GimpGradient" "new-gradient" "The newly created gradient" "The newly created gradient" 3 1 0 0)) + (proc-def "python-fu-palette-to-gradient-repeating" 1 + "Créé un dégradé répétitif en utilisant les couleurs de la palette" + "Create a new repeating gradient using colors from the palette." + "Carol Spears, reproduced from previous work by Adrian Likins and Jeff Trefftz" + "Carol Spears" + "2006" + "Palette vers dégradé _répétitif" + 1 + (menu-path "/Palettes Menu") + (icon icon-name -1 "") + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 12 "GimpParamPalette" "GimpPalette" "palette" "_Palette" "Palette" 3 1 1 0) + (proc-arg 12 "GimpParamGradient" "GimpGradient" "new-gradient" "The newly created gradient" "The newly created gradient" 3 1 0 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/palette-sort/palette-sort.py" 1769438854 + (proc-def "python-fu-palette-sort" 1 + "Trier les couleurs dans une palette" + "\nSorts a palette, or part of a palette.\nSorts the given palette when it is editable, otherwise creates a new sorted palette.\nThe default is a 1D sort, but you can also sort over two color channels\nor create a 2D sorted palette with sorted rows.\nYou can optionally install colormath (https://pypi.python.org/pypi/colormath/1.0.8)\nto GIMP's Python to get even more channels to choose from.\n" + "João S. O. Bueno, Carol Spears, David Gowers" + "João S. O. Bueno, Carol Spears, David Gowers" + "2006-2014" + "_Trier la palette…" + 1 + (menu-path "/Palettes Menu") + (icon icon-name -1 "") + "" + 2147483647 + 11 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0) + (proc-arg 12 "GimpParamPalette" "GimpPalette" "palette" "_Palette" "Palette" 3 1 1 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "selections" "Select_ions" "Selections" 3 "all" 4 "all" 0 "Tous" "" "slice-array" 1 "Tranche / Tableau" "" "auto-slice" 2 "Auto-partitionnement (PP->AP)" "" "partitioned" 3 "Partitionné" "") + (proc-arg 7 "GParamString" "gchararray" "slice-expr" "_Expression de tranche" "\n Format is 'start:nrows,length' . All items are optional.\n\n The empty string selects all items, as does ':'\n ':4,' makes a 4-row selection out of all colors (length auto-determined)\n ':4' also.\n ':1,4' selects the first 4 colors\n ':,4' selects rows of 4 colors (nrows auto-determined)\n ':3,4' selects 3 rows of 4 colors\n '4:' selects a single row of all colors after 4, inclusive.\n '3:,4' selects rows of 4 colors, starting at 3 (nrows auto-determined)\n '2:3,4' selects 3 rows of 4 colors (12 colors total), beginning at index 2.\n '4' is illegal (ambiguous)\n" 3 "") + (proc-arg 4 "GimpParamChoice" "gchararray" "channel1" "Channel _to sort" "Channel to sort" 3 "luma" 16 "red" 0 "Rouge" "" "green" 1 "Vert" "" "blue" 2 "Bleu" "" "luma" 3 "Luma (Y)" "" "hue" 4 "Teinte" "" "saturation" 5 "Saturation" "" "value" 6 "Valeur" "" "saturation-hsl" 7 "Saturation (TSL)" "" "lightness-hsl" 8 "Luminosité (TSL)" "" "index" 9 "Index" "" "random" 10 "Aléatoire" "" "lightness-lab" 11 "Luminosité (LAB)" "" "a-color" 12 "Couleur-a" "" "b-color" 13 "Couleur-b" "" "chroma-lchab" 14 "Chroma (LCHab)" "" "hue-lchab" 15 "Teinte (LCHab)" "") + (proc-arg 5 "GParamBoolean" "gboolean" "ascending1" "_Ascendant" "Ascending" 3 1) + (proc-arg 4 "GimpParamChoice" "gchararray" "channel2" "Secondary C_hannel to sort" "Secondary Channel to sort" 3 "saturation" 16 "red" 0 "Rouge" "" "green" 1 "Vert" "" "blue" 2 "Bleu" "" "luma" 3 "Luma (Y)" "" "hue" 4 "Teinte" "" "saturation" 5 "Saturation" "" "value" 6 "Valeur" "" "saturation-hsl" 7 "Saturation (TSL)" "" "lightness-hsl" 8 "Luminosité (TSL)" "" "index" 9 "Index" "" "random" 10 "Aléatoire" "" "lightness-lab" 11 "Luminosité (LAB)" "" "a-color" 12 "Couleur-a" "" "b-color" 13 "Couleur-b" "" "chroma-lchab" 14 "Chroma (LCHab)" "" "hue-lchab" 15 "Teinte (LCHab)" "") + (proc-arg 5 "GParamBoolean" "gboolean" "ascending2" "Ascen_ding" "Ascending" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "quantize" "_Quantification" "Quantization" 3 0 1 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "pchannel" "Partitionin_g channel" "Partitioning channel" 3 "luma" 16 "red" 0 "Rouge" "" "green" 1 "Vert" "" "blue" 2 "Bleu" "" "luma" 3 "Luma (Y)" "" "hue" 4 "Teinte" "" "saturation" 5 "Saturation" "" "value" 6 "Valeur" "" "saturation-hsl" 7 "Saturation (TSL)" "" "lightness-hsl" 8 "Luminosité (TSL)" "" "index" 9 "Index" "" "random" 10 "Aléatoire" "" "lightness-lab" 11 "Luminosité (LAB)" "" "a-color" 12 "Couleur-a" "" "b-color" 13 "Couleur-b" "" "chroma-lchab" 14 "Chroma (LCHab)" "" "hue-lchab" 15 "Teinte (LCHab)" "") + (proc-arg 6 "GParamDouble" "gdouble" "pquantize" "Q_uantification de partition" "Partition quantization" 3 0 1 0) + (proc-arg 12 "GimpParamPalette" "GimpPalette" "new-palette" "Palette" "Palette" 3 1 0 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/palette-offset/palette-offset.py" 1769438854 + (proc-def "python-fu-palette-offset" 1 + "Décaler les couleurs d’une palette" + "\nOffset the colors in the palette.\nOffsets and returns the given palette when it is editable,\notherwise copies the given palette and returns it.\n" + "Joao S. O. Bueno Calligaris, Carol Spears" + "(c) Joao S. O. Bueno Calligaris" + "2004, 2006" + "_Décalage de palette…" + 1 + (menu-path "/Palettes Menu") + (icon icon-name -1 "") + "" + 2147483647 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 12 "GimpParamPalette" "GimpPalette" "palette" "_Palette" "Palette" 3 1 1 0) + (proc-arg 1 "GParamInt" "gint" "amount" "O_ffset" "Décalage" 3 1 2147483647 1) + (proc-arg 12 "GimpParamPalette" "GimpPalette" "new-palette" "The edited palette" "The newly created palette when read-only, otherwise the input palette" 3 1 0 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/pagecurl/pagecurl" 1769438854 + (proc-def "plug-in-pagecurl" 1 + "Crée un coin de page dans un coin de l’image" + "This plug-in creates a pagecurl-effect." + "Federico Mena Quintero and Simon Budig" + "Federico Mena Quintero and Simon Budig" + "July 2004, 1.0" + "Coin de p_age…" + 1 + (menu-path "/Filters/Distorts") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 8 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 4 "GimpParamChoice" "gchararray" "colors" "Couleurs" "" 3 "fg-bg" 3 "fg-bg" 0 "Couleurs de premier / arrière-plan" "" "current-gradient" 1 "Dégradé actif" "" "current-gradient-reversed" 2 "Dégradé actif (inversé)" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "edge" "Locatio_n" "Corner which is curled" 3 "lower-right" 4 "upper-left" 3 "Supérieur gauche" "" "upper-right" 4 "Supérieur droit" "" "lower-left" 2 "Inférieur gauche" "" "lower-right" 1 "Inférieur droit" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "orientation" "_Orientation" "" 3 "vertical" 2 "vertical" 0 "Vertical" "" "horizontal" 1 "Horizontal" "") + (proc-arg 5 "GParamBoolean" "gboolean" "shade" "Sh_ade" "Shade the region under the curl" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "opacity" "Opaci_ty" "Opacity" 3 0 1 0) + (proc-arg 9 "GimpParamLayer" "GimpLayer" "curl-layer" "Curl layer" "The new layer with the curl." 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/nl-filter/nl-filter" 1769438854 + (proc-def "plug-in-nl-filter" 1 + "Le couteau suisse des filtres non linéaires" + "This is the pnmnlfilt, in GIMP's clothing. See the pnmnlfilt manpage for details." + "Graeme W. Gill, GIMP 0.99 plug-in by Eric L. Hernes" + "Graeme W. Gill, Eric L. Hernes" + "1997" + "_Filtre NL…" + 1 + (menu-path "/Filters/Enhance") + (icon icon-name -1 "") + "RGB, GRAY" + 1 + 6 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 6 "GParamDouble" "gdouble" "alpha" "_Alpha" "The amount of the filter to apply" 3 0 1 0.29999999999999999) + (proc-arg 6 "GParamDouble" "gdouble" "radius" "Ra_dius" "The filter radius" 3 0.33333333333333331 1 0.33333333333333331) + (proc-arg 4 "GimpParamChoice" "gchararray" "filter" "_Filter" "The Filter to Run" 3 "alpha-trim" 3 "alpha-trim" 0 "Alpha trimmed mean" "" "optimal-estimation" 1 "Optimal estimation" "" "edge-enhancement" 2 "Edge enhancement" ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/metadata-viewer/metadata-viewer" 1769438854 + (proc-def "plug-in-metadata-viewer" 1 + "Affiche les métadonnées (Exif, IPTC, XMP)" + "View metadata information attached to the current image. This can include Exif, IPTC and/or XMP information." + "Hartmut Kuhse, Michael Natterer, Ben Touchette" + "Hartmut Kuhse, Michael Natterer, Ben Touchette" + "2013, 2017" + "_Afficher les métadonnées" + 1 + (menu-path "/Image/Metadata") + (icon icon-name -1 "") + "*" + 5 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/metadata-editor/metadata-editor" 1769438854 + (proc-def "plug-in-metadata-editor" 1 + "Modifie les métadonnées (IPTC, EXIF, XMP)" + "Edit metadata information attached to the current image. Some or all of this metadata will be saved in the file, depending on the output file format." + "Ben Touchette" + "Ben Touchette" + "2017" + "_Modifier les métadonnées" + 1 + (menu-path "/Image/Metadata") + (icon icon-name -1 "") + "*" + 5 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 0 "GParamBoxed" "GBytes" "parent-handle" "Parent's window handle" "The opaque handle of the window to set this plug-in's dialog transient to" 515))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/map-object/map-object" 1769438854 + (proc-def "plug-in-map-object" 1 + "Plaque une image sur un objet (plan, sphère, boite ou cylindre)" + "No help yet" + "Tom Bech & Federico Mena Quintero" + "Tom Bech & Federico Mena Quintero" + "Version 1.2.0, July 16 1998" + "_Plaquer sur un objet…" + 1 + (menu-path "/Filters/Map") + (icon icon-name -1 "") + "RGB*" + 1 + 53 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 4 "GimpParamChoice" "gchararray" "map-type" "Map _to" "Type of mapping" 3 "map-plane" 4 "map-plane" 0 "Plan" "" "map-sphere" 1 "Sphère" "" "map-box" 2 "Parallélépipède rectangle (boîte)" "" "map-cylinder" 3 "Cylindre" "") + (proc-arg 6 "GParamDouble" "gdouble" "viewpoint-x" "X" "Position of viewpoint (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "viewpoint-y" "Y" "Position of viewpoint (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "viewpoint-z" "Z" "Position of viewpoint (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 2) + (proc-arg 6 "GParamDouble" "gdouble" "position-x" "Position X" "Object position (x,y,z)" 3 -1 2 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "position-y" "Position Y" "Object position (x,y,z)" 3 -1 2 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "position-z" "Position Z" "Object position (x,y,z)" 3 -1 2 0) + (proc-arg 6 "GParamDouble" "gdouble" "first-axis-x" "X" "First axis of object (x,y,z)" 3 -1 2 1) + (proc-arg 6 "GParamDouble" "gdouble" "first-axis-y" "y" "First axis of object (x,y,z)" 3 -1 2 0) + (proc-arg 6 "GParamDouble" "gdouble" "first-axis-z" "Z" "First axis of object (x,y,z)" 3 -1 2 0) + (proc-arg 6 "GParamDouble" "gdouble" "second-axis-x" "X" "Second axis of object (x,y,z)" 3 -1 2 0) + (proc-arg 6 "GParamDouble" "gdouble" "second-axis-y" "Y" "Second axis of object (x,y,z)" 3 -1 2 1) + (proc-arg 6 "GParamDouble" "gdouble" "second-axis-z" "Z" "Second axis of object (x,y,z)" 3 -1 2 0) + (proc-arg 6 "GParamDouble" "gdouble" "rotation-angle-x" "Angle X" "Rotation about X axis in degrees" 3 -360 360 0) + (proc-arg 6 "GParamDouble" "gdouble" "rotation-angle-y" "Angle Y" "Rotation about Y axis in degrees" 3 -360 360 0) + (proc-arg 6 "GParamDouble" "gdouble" "rotation-angle-z" "Angle Z" "Rotation about Z axis in degrees" 3 -360 360 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "light-type" "Light source type" "Type of lightsource" 3 "point-light" 3 "point-light" 0 "Point Light" "" "directional-light" 1 "Directional Light" "" "no-light" 2 "No Light" "") + (proc-arg 8 "GimpParamColor" "GeglColor" "light-color" "Light source _color" "Light source color" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0) + (proc-arg 6 "GParamDouble" "gdouble" "light-position-x" "Light position X" "Light source position (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 -0.5) + (proc-arg 6 "GParamDouble" "gdouble" "light-position-y" "Light position Y" "Light source position (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 -0.5) + (proc-arg 6 "GParamDouble" "gdouble" "light-position-z" "Light position Z" "Light source position (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 2) + (proc-arg 6 "GParamDouble" "gdouble" "light-direction-x" "Light direction X" "Light source direction (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 -1) + (proc-arg 6 "GParamDouble" "gdouble" "light-direction-y" "Light direction Y" "Light source direction (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 -1) + (proc-arg 6 "GParamDouble" "gdouble" "light-direction-z" "Light direction Z" "Light source direction (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 1) + (proc-arg 6 "GParamDouble" "gdouble" "ambient-intensity" "Ambie_nt" "Material ambient intensity" 3 0 1 0.29999999999999999) + (proc-arg 6 "GParamDouble" "gdouble" "diffuse-intensity" "D_iffuse" "Material diffuse intensity" 3 0 1 1) + (proc-arg 6 "GParamDouble" "gdouble" "diffuse-reflectivity" "Di_ffuse" "Material diffuse reflectivity" 3 0 1 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "specular-reflectivity" "Spec_ular" "Material specular reflectivity" 3 0 1 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "highlight" "Highligh_t" "Material highlight (note, it's exponential)" 3 0 1.7976931348623157e+308 27) + (proc-arg 5 "GParamBoolean" "gboolean" "antialiasing" "Antialia_sing" "Apply antialiasing" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "depth" "_Depth" "Qualité de l’anticrénelage. Plus elle est élevée, meilleur est l’anticrénelage mais plus élevé est le temps de calcul" 3 1 5 3) + (proc-arg 6 "GParamDouble" "gdouble" "threshold" "Thr_eshold" "Arrête lorsque les différences entre pixels sont plus petites que cette valeur" 3 0.001 1000 0.25) + (proc-arg 5 "GParamBoolean" "gboolean" "tiled" "_Tile source image" "Carreler avec l’image source" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "new-image" "Create _new image" "Create a new image" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "new-layer" "Create ne_w layer" "Crée un nouveau calque lors de l’application du filtre" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "transparent-background" "Transparent bac_kground" "Make background transparent" 3 0) + (proc-arg 6 "GParamDouble" "gdouble" "sphere-radius" "Radi_us" "Sphere radius" 3 0 1.7976931348623157e+308 0.25) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "box-front-drawable" "Fro_nt" "Box front face (set this to NULL if not used)" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "box-back-drawable" "B_ack" "Box back face" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "box-top-drawable" "To_p" "Box top face" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "box-bottom-drawable" "Bo_ttom" "Box bottom face" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "box-left-drawable" "Le_ft" "Box left face" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "box-right-drawable" "Ri_ght" "Box right face" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "x-scale" "Scale X" "Box X size" 3 0 1.7976931348623157e+308 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "y-scale" "Scale Y" "Box Y size" 3 0 1.7976931348623157e+308 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "z-scale" "Scale Z" "Box Z size" 3 0 1.7976931348623157e+308 0.5) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "cyl-top-drawable" "_Top" "Cylinder top face (set this to NULL if not used)" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "cyl-bottom-drawable" "_Bottom" "Cylinder bottom face (set this to NULL if not used)" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "cylinder-radius" "Radi_us" "Rayon du cylindre" 3 0 1.7976931348623157e+308 0.25) + (proc-arg 6 "GParamDouble" "gdouble" "cylinder-length" "Cylin_der length" "Longueur du cylindre" 3 0 1.7976931348623157e+308 0.25))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/mail/mail" 1769438854 + (has-init)) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/lighting/lighting" 1769438854 + (proc-def "plug-in-lighting" 1 + "Applique différents effets de lumière à l’image" + "No help yet" + "Tom Bech & Federico Mena Quintero" + "Tom Bech & Federico Mena Quintero" + "Version 0.2.0, March 15 1998" + "_Effets d’éclairage…" + 1 + (menu-path "/Filters/Light and Shadow/[Light]") + (icon icon-name -1 "") + "RGB*" + 1 + 28 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "bump-drawable" "B_ump map image" "Bumpmap drawable (set to NULL if disabled)" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "env-drawable" "Enviro_nment map image" "Environmentmap drawable (set to NULL if disabled)" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "do-bumpmap" "Enable bump mappi_ng" "Enable bumpmapping" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "do-envmap" "Enable en_vironment mapping" "Enable envmapping" 3 1) + (proc-arg 4 "GimpParamChoice" "gchararray" "bumpmap-type" "Cur_ve" "Type of mapping" 3 "bumpmap-linear" 4 "bumpmap-linear" 0 "Linéaire" "" "bumpmap-log" 1 "Logarithmique" "" "bumpmap-sinusoidal" 2 "Sinusoïdal" "" "bumpmap-spherical" 3 "Sphérique" "") + (proc-arg 6 "GParamDouble" "gdouble" "bumpmap-max-height" "Ma_ximum height" "The maximum height of the bumpmap" 3 0 3.4028234663852886e+38 0.10000000000000001) + (proc-arg 4 "GimpParamChoice" "gchararray" "light-type-1" "Type" "Type of light source" 3 "light-point" 4 "light-none" 3 "Aucun" "" "light-directional" 1 "Directionnel" "" "light-point" 0 "Point" "" "light-spot" 2 "Spot" "") + (proc-arg 8 "GimpParamColor" "GeglColor" "light-color-1" "Couleur" "Light source color" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0) + (proc-arg 6 "GParamDouble" "gdouble" "light-intensity-1" "Intensity" "Light source intensity" 3 0 100 1) + (proc-arg 6 "GParamDouble" "gdouble" "light-position-x-1" "Light position X" "Light source position (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 -1) + (proc-arg 6 "GParamDouble" "gdouble" "light-position-y-1" "Light position Y" "Light source position (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 -1) + (proc-arg 6 "GParamDouble" "gdouble" "light-position-z-1" "Light position Z" "Light source position (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 1) + (proc-arg 6 "GParamDouble" "gdouble" "light-direction-x-1" "Light direction X" "Light source direction (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 -1) + (proc-arg 6 "GParamDouble" "gdouble" "light-direction-y-1" "Light direction Y" "Light source direction (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 -1) + (proc-arg 6 "GParamDouble" "gdouble" "light-direction-z-1" "Light direction Z" "Light source direction (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 1) + (proc-arg 6 "GParamDouble" "gdouble" "ambient-intensity" "Ambient intensity" "Material ambient intensity (Glowing)" 3 0 1 0.20000000000000001) + (proc-arg 6 "GParamDouble" "gdouble" "diffuse-intensity" "Diffuse intensity" "Material diffuse intensity (Bright)" 3 0 1 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "diffuse-reflectivity" "Diffuse reflectivity" "Material diffuse reflectivity" 3 0 1 0.40000000000000002) + (proc-arg 6 "GParamDouble" "gdouble" "specular-reflectivity" "Specular reflectivity" "Material specular reflectivity" 3 0 1 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "highlight" "Highlight" "Material highlight (note, it's exponential) (Polished)" 3 0 1.7976931348623157e+308 27) + (proc-arg 5 "GParamBoolean" "gboolean" "metallic" "Metallic" "Make surfaces look metallic" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "antialiasing" "_Lissage" "Apply antialiasing" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "new-image" "Create new ima_ge" "Create a new image" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "transparent-background" "Trans_parent background" "Make background transparent" 3 0) + (proc-arg 6 "GParamDouble" "gdouble" "distance" "_Distance" "Distance of observer from surface" 3 0 2 0.25))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/jigsaw/jigsaw" 1769438854 + (proc-def "plug-in-jigsaw" 1 + "Ajoute une trame de puzzle à l’image" + "Jigsaw puzzle look" + "Nigel Wetten" + "Nigel Wetten" + "May 2000" + "_Puzzle…" + 1 + (menu-path "/Filters/Render/Pattern") + (icon icon-name -1 "") + "RGB*" + 1 + 8 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "x" "_Horizontal" "Nombre de pièces se recouvrant" 3 1 20 5) + (proc-arg 1 "GParamInt" "gint" "y" "_Vertical" "Nombre de pièces descendantes" 3 1 20 5) + (proc-arg 4 "GimpParamChoice" "gchararray" "style" "_Jigsaw Style" "The style/shape of the jigsaw puzzle" 3 "square" 2 "square" 0 "Square" "" "curved" 1 "Curved" "") + (proc-arg 1 "GParamInt" "gint" "blend-lines" "_Blend width" "Degré d’inclinaison du bord de chaque pièce" 3 0 10 3) + (proc-arg 6 "GParamDouble" "gdouble" "blend-amount" "Hi_ghlight" "Importance de l’éclairage sur le bord de chaque pièce" 3 0 1 0.5))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/imagemap/imagemap" 1769438854 + (proc-def "plug-in-imagemap" 1 + "Crée une image cliquable pour le Web" + "" + "Maurits Rijk" + "Maurits Rijk" + "1998-2005" + "_Image cliquable web…" + 1 + (menu-path "/Filters/Web") + (icon icon-name -1 "") + "*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/ifs-compose/ifs-compose" 1769438854 + (proc-def "plug-in-ifscompose" 1 + "Crée une fractale IFS (Iterated Function System)" + "Interactively create an Iterated Function System fractal. Use the window on the upper left to adjustthe component transformations of the fractal. The operation that is performed is selected by the buttons underneath the window, or from a menu popped up by the right mouse button. The fractal will be rendered with a transparent background if the current image has an alpha channel." + "Owen Taylor" + "Owen Taylor" + "1997" + "Fra_ctale IFS…" + 1 + (menu-path "/Filters/Render/Fractals") + (icon icon-name -1 "") + "*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/hot/hot" 1769438854 + (proc-def "plug-in-hot" 1 + "Cherche et corrige les pixels qui pourraient être trop lumineux" + "hot scans an image for pixels that will give unsave values of chrominance or composite signal amplitude when encoded into an NTSC or PAL signal. Three actions can be performed on these 'hot' pixels. (0) reduce luminance, (1) reduce saturation, or (2) Blacken." + "Eric L. Hernes, Alan Wm Paeth" + "Eric L. Hernes" + "1997" + "Ô_ter les « pixels chauds »…" + 1 + (menu-path "/Colors/[Modify]") + (icon icon-name -1 "") + "RGB" + 1 + 6 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 4 "GimpParamChoice" "gchararray" "mode" "_Mode" "Signal mode" 3 "ntsc" 2 "ntsc" 0 "NTSC" "" "pal" 1 "PAL" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "action" "_Action" "Action" 3 "reduce-luminance" 3 "reduce-luminance" 0 "Reduce Luminance" "" "reduce-saturation" 1 "Reduce Saturation" "" "blacken" 2 "Blacken" "") + (proc-arg 5 "GParamBoolean" "gboolean" "new-layer" "Créer un n_ouveau calque" "Create a new layer" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/histogram-export/histogram-export.py" 1769438854 + (proc-def "python-fu-histogram-export" 1 + "Exporte l’histogramme de l’image vers un fichier texte (CSV)" + "\nExports the image histogram to a text file,\nso that it can be used by other programs\nand loaded into spreadsheets.\n\nThe resulting file is a CSV file (Comma Separated\nValues), which can be imported\ndirectly in most spreadsheet programs.\n\nThe first two columns are the bucket boundaries,\nfollowed by the selected columns. The histogram\nrefers to the selected image area, and\ncan use either Sample Average data or data\nfrom the current drawable only.;\n\nThe output is in \"weighted pixels\" - meaning\nall fully transparent pixels are not counted.\n\nCheck the gimp-histogram call\n" + "João S. O. Bueno" + "(c) GPL V3.0 or later" + "2014" + "_Exporter l’histogramme…" + 1 + (menu-path "/Colors/Info/") + (icon icon-name -1 "") + "*" + 5 + 7 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 13 "GimpParamFile" "GFile" "file" "Histogram File" "Histogram export file" 3 1 0 "") + (proc-arg 6 "GParamDouble" "gdouble" "bucket-size" "_Taille de compartiment" "Bucket Size" 3 0.001 1 0.01) + (proc-arg 5 "GParamBoolean" "gboolean" "sample-average" "_Moyenne de l’échantillon" "Sample Average" 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "output-format" "Output _format" "Format de sortie" 3 "percent" 3 "pixel-count" 0 "Pixel Count" "" "normalized" 1 "Normalisé" "" "percent" 2 "Pourcentage" ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/help/help" 1769438854 + (proc-def "extension-gimp-help" 2 + "" + "" + "Sven Neumann , Michael Natterer , Henrik Brix Andersen " + "Sven Neumann, Michael Natterer & Henrik Brix Andersen" + "1999-2008" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 0 + (proc-arg 0 "GParamBoxed" "GStrv" "domain-names" "Domain Names" "Domain names" 3) + (proc-arg 0 "GParamBoxed" "GStrv" "domain-uris" "Domain URIs" "Domain URIs" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/guillotine/guillotine" 1769438854 + (proc-def "plug-in-guillotine" 1 + "Découper l’image en plusieurs sous-images en utilisant les guides" + "This function takes an image and slices it along its guides, creating new images. The original image is not modified." + "Adam D. Moss (adam@foxbox.org)" + "Adam D. Moss (adam@foxbox.org)" + "1998" + "Découper en utilisant les g_uides" + 1 + (menu-path "/Image/[Crop]") + (icon icon-name -1 "") + "*" + 13 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "images" "Output images" "Output images" 3 "GimpImage"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/grid/grid" 1769438854 + (proc-def "plug-in-grid" 1 + "Trace une grille sur l’image" + "Draws a grid using the specified colors. The grid origin is the upper left corner." + "Tim Newsome" + "Tim Newsome, Sven Neumann, Tom Rathborne, TC" + "1997 - 2000" + "G_rille (ancien)…" + 1 + (menu-path "/Filters/Render/Pattern") + (icon icon-name -1 "") + "*" + 1 + 15 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "hwidth" "H width" "Horizontal width" 3 0 524288 1) + (proc-arg 1 "GParamInt" "gint" "hspace" "H space" "Horizontal spacing" 3 1 524288 16) + (proc-arg 1 "GParamInt" "gint" "hoffset" "H offset" "Horizontal offset" 3 0 524288 8) + (proc-arg 8 "GimpParamColor" "GeglColor" "hcolor" "H color" "Horizontal color" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0) + (proc-arg 1 "GParamInt" "gint" "vwidth" "V width" "Vertical width" 3 0 524288 1) + (proc-arg 1 "GParamInt" "gint" "vspace" "V space" "Vertical spacing" 3 1 524288 16) + (proc-arg 1 "GParamInt" "gint" "voffset" "V offset" "Vertical offset" 3 0 524288 8) + (proc-arg 8 "GimpParamColor" "GeglColor" "vcolor" "V color" "Vertical color" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0) + (proc-arg 1 "GParamInt" "gint" "iwidth" "I width" "Intersection width" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "ispace" "I space" "Intersection spacing" 3 1 524288 2) + (proc-arg 1 "GParamInt" "gint" "ioffset" "I offset" "Intersection offset" 3 0 524288 6) + (proc-arg 8 "GimpParamColor" "GeglColor" "icolor" "I color" "Intersection color" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/gradients-save-as-css/gradients-save-as-css.py" 1769438854 + (proc-def "python-fu-gradient-save-as-css" 1 + "Creates a new palette from a given gradient" + "Creates a new palette from a given gradient" + "Joao S. O. Bueno" + "(c) GPL V3.0 or later" + "2011" + "Save Gradient as CSS..." + 1 + (menu-path "/Gradients Menu") + (icon icon-name -1 "") + "" + 2147483647 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 12 "GimpParamGradient" "GimpGradient" "gradient" "_Gradient to use" "" 3 1 1 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "_File" "" 3 1 0 ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/gradient-map/gradient-map" 1769438854 + (proc-def "plug-in-gradmap" 1 + "Recolore l’image en utilisant les couleurs du dégradé actif" + "This plug-in maps the contents of the specified drawable with active gradient. It calculates luminosity of each pixel and replaces the pixel by the sample of active gradient at the position proportional to that luminosity. Complete black pixel becomes the leftmost color of the gradient, and complete white becomes the rightmost. Works on both Grayscale and RGB image with/without alpha channel." + "Eiichi Takamori" + "Eiichi Takamori" + "1997" + "Application de _dégradé" + 1 + (menu-path "/Colors/Map") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable")) + (proc-def "plug-in-palettemap" 1 + "Recolore l’image en utilisant les couleurs de la palette active" + "This plug-in maps the contents of the specified drawable with the active palette. It calculates luminosity of each pixel and replaces the pixel by the palette sample at the corresponding index. A complete black pixel becomes the lowest palette entry, and complete white becomes the highest. Works on both Grayscale and RGB image with/without alpha channel." + "Bill Skaggs" + "Bill Skaggs" + "2004" + "Application de _palette" + 1 + (menu-path "/Colors/Map") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/gradient-flare/gradient-flare" 1769438854 + (proc-def "plug-in-gflare" 1 + "Produit un effet d’éblouissement en utilisant des dégradés" + "This plug-in produces a lense flare effect using custom gradients. In interactive call, the user can edit their own favorite lense flare (GFlare) and render it. Edited gflare is saved automatically to the folder in gflare-path, if it is defined in gimprc. In non-interactive call, the user can only render one of GFlare which has been stored in gflare-path already." + "Eiichi Takamori" + "Eiichi Takamori, and a lot of GIMP people" + "1997" + "Éblouissement _graduel…" + 1 + (menu-path "/Filters/Light and Shadow/[Light]") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 14 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 7 "GParamString" "gchararray" "gflare-name" "GFlare name" "Name of the GFlare to render" 3 "Default") + (proc-arg 1 "GParamInt" "gint" "center-x" "Center X" "X coordinate of center of GFlare" 3 -524288 524288 128) + (proc-arg 1 "GParamInt" "gint" "center-y" "Center Y" "Y coordinate of center of GFlare" 3 -524288 524288 128) + (proc-arg 6 "GParamDouble" "gdouble" "radius" "Radi_us" "Radius of GFlare (pixel)" 3 1 524288 100) + (proc-arg 6 "GParamDouble" "gdouble" "rotation" "Ro_tation" "Rotation of GFlare (degree)" 3 0 360 0) + (proc-arg 6 "GParamDouble" "gdouble" "hue" "_Hue rotation" "Hue rotation of GFlare (degree)" 3 0 360 0) + (proc-arg 6 "GParamDouble" "gdouble" "vector-angle" "Vector _angle" "Vector angle for second flares (degree)" 3 0 360 60) + (proc-arg 6 "GParamDouble" "gdouble" "vector-length" "Vector len_gth" "Vector length for second flares (percentage of Radius)" 3 0 10000 400) + (proc-arg 5 "GParamBoolean" "gboolean" "use-asupsample" "Ada_ptive supersampling" "Use adaptive supersampling while rendering" 3 0) + (proc-arg 1 "GParamInt" "gint" "asupsample-max-depth" "_Max depth" "Max depth for adaptive supersampling" 3 0 10 3) + (proc-arg 6 "GParamDouble" "gdouble" "asupsample-threshold" "Threshol_d" "Threshold for adaptive supersampling" 3 0 1 0.20000000000000001))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/gimpressionist/gimpressionist" 1769438854 + (proc-def "plug-in-gimpressionist" 1 + "Exécute diverses opérations artistiques" + "Performs various artistic operations on an image" + "Vidar Madsen " + "Vidar Madsen" + "v1.0, November 2003" + "_GIMPressionniste…" + 1 + (menu-path "/Filters/Artistic") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 7 "GParamString" "gchararray" "preset" "Preset" "Preset Name" 3 ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/gfig/gfig" 1769438854 + (proc-def "plug-in-gfig" 1 + "Créer des formes géométriques" + "Draw Vector Graphics and paint them onto your images. Gfig allows you to draw many types of objects including Lines, Circles, Ellipses, Curves, Polygons, pointed stars, Bezier curves, and Spirals. Objects can be painted using Brushes or other tools or filled using colors or patterns. Gfig objects can also be used to create selections." + "Andy Thomas" + "Andy Thomas" + "1997" + "Figures _géométriques (GFig)…" + 1 + (menu-path "/Filters/Render") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/fractal-explorer/fractal-explorer" 1769438854 + (proc-def "plug-in-fractalexplorer" 1 + "Rendu d’art fractal" + "No help yet." + "Daniel Cotting (cotting@multimania.com, www.multimania.com/cotting)" + "Daniel Cotting (cotting@multimania.com, www.multimania.com/cotting)" + "December, 1998" + "E_xplorateur de fractales…" + 1 + (menu-path "/Filters/Render/Fractals") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 23 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 4 "GimpParamChoice" "gchararray" "fractal-type" "Fr_actal Type" "Type of Fractal Pattern" 3 "mandelbrot" 9 "mandelbrot" 0 "Mandelbrot" "" "julia" 1 "Julia" "" "barnsley-1" 2 "Barnsley 1" "" "barnsley-2" 3 "Barnsley 2" "" "barnsley-3" 4 "Barnsley 3" "" "spider" 5 "Araignée" "" "man-o-war" 6 "Man-o-War" "" "lambda" 7 "Lambda" "" "sierpinski" 8 "Sierpinski" "") + (proc-arg 6 "GParamDouble" "gdouble" "xmin" "Lef_t" "X min fractal image delimiter" 3 -3 3 -2) + (proc-arg 6 "GParamDouble" "gdouble" "xmax" "Ri_ght" "X max fractal image delimiter" 3 -3 3 2) + (proc-arg 6 "GParamDouble" "gdouble" "ymin" "To_p" "Y min fractal image delimiter" 3 -3 3 -1.5) + (proc-arg 6 "GParamDouble" "gdouble" "ymax" "_Bottom" "Y max fractal image delimiter" 3 -3 3 1.5) + (proc-arg 6 "GParamDouble" "gdouble" "iter" "Iteratio_ns" "Iteration value" 3 1 1000 50) + (proc-arg 6 "GParamDouble" "gdouble" "cx" "C_X" "cx value" 3 -2.5 2.5 -0.75) + (proc-arg 6 "GParamDouble" "gdouble" "cy" "C_Y" "cy value" 3 -2.5 2.5 -0.20000000000000001) + (proc-arg 4 "GimpParamChoice" "gchararray" "color-mode" "Color mode" "Apply specified color map or active gradient to final image" 3 "colormap" 2 "colormap" 0 "Comme indiqué ci-dessus" "" "gradient" 1 "Appliquer le dégradé actif à l’image finale" "") + (proc-arg 6 "GParamDouble" "gdouble" "red-stretch" "Red stretch" "Red stretching factor" 3 0 1 1) + (proc-arg 6 "GParamDouble" "gdouble" "green-stretch" "Green stretch" "Green stretching factor" 3 0 1 1) + (proc-arg 6 "GParamDouble" "gdouble" "blue-stretch" "Blue stretch" "Blue stretching factor" 3 0 1 1) + (proc-arg 4 "GimpParamChoice" "gchararray" "red-mode" "_Red" "Red application mode" 3 "red-cos" 3 "red-sin" 0 "Sinus" "" "red-cos" 1 "Cosinus" "" "red-none" 2 "Aucun" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "green-mode" "_Green" "Green application mode" 3 "green-cos" 3 "green-sin" 0 "Sinus" "" "green-cos" 1 "Cosinus" "" "green-none" 2 "Aucun" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "blue-mode" "_Blue" "Blue application mode" 3 "blue-sin" 3 "blue-sin" 0 "Sinus" "" "blue-cos" 1 "Cosinus" "" "blue-none" 2 "Aucun" "") + (proc-arg 5 "GParamBoolean" "gboolean" "red-invert" "In_version" "Red inversion mode" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "green-invert" "I_nversion" "Green inversion mode" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "blue-invert" "_Inversion" "Blue inversion mode" 3 0) + (proc-arg 1 "GParamInt" "gint" "n-colors" "_Number of colors" "Number of Colors for mapping" 3 2 8192 512) + (proc-arg 5 "GParamBoolean" "gboolean" "use-loglog-smoothing" "_Use log log smoothing" "Utilise un lissage en log log pour éviter les bandes dans le résultat." 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/foggify/foggify.py" 1769438854 + (proc-def "python-fu-foggify" 1 + "Ajouter un calque de brouillard" + "Adds a layer of fog to the image." + "James Henstridge" + "James Henstridge" + "1999,2007" + "_Brouillard…" + 1 + (menu-path "/Filters/Decor") + (icon icon-name -1 "") + "RGB*, GRAY*" + 5 + 7 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 7 "GParamString" "gchararray" "name" "_Nom de calque" "Nom de calque" 3 "Nuages") + (proc-arg 8 "GimpParamColor" "GeglColor" "color" "_Couleur de brouillard" "Couleur de brouillard" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "RGBA float" 0) + (proc-arg 6 "GParamDouble" "gdouble" "turbulence" "_Turbulence" "Turbulence" 3 0 7 1) + (proc-arg 6 "GParamDouble" "gdouble" "opacity" "O_pacité" "Opacité" 3 0 100 100))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/flame/flame" 1769438854 + (proc-def "plug-in-flame" 1 + "Création de flammes fractales cosmiques" + "Create cosmic recursive fractal flames" + "Scott Draves" + "Scott Draves" + "1997" + "_Flammes…" + 1 + (menu-path "/Filters/Render/Fractals") + (icon icon-name -1 "") + "RGB*" + 1 + 12 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 6 "GParamDouble" "gdouble" "brightness" "_Luminosité" "" 3 0 5 1) + (proc-arg 6 "GParamDouble" "gdouble" "contrast" "Co_ntrast" "" 3 0 5 1) + (proc-arg 6 "GParamDouble" "gdouble" "gamma" "_Gamma" "" 3 1 5 1) + (proc-arg 6 "GParamDouble" "gdouble" "sample-density" "Sample _density" "" 3 0.10000000000000001 20 5) + (proc-arg 1 "GParamInt" "gint" "spatial-oversample" "Spa_tial oversample" "" 3 1 4 2) + (proc-arg 6 "GParamDouble" "gdouble" "spatial-filter-radius" "Spatial _filter radius" "" 3 0 4 0.75) + (proc-arg 6 "GParamDouble" "gdouble" "zoom" "_Zoom" "" 3 -4 4 0) + (proc-arg 6 "GParamDouble" "gdouble" "x" "_X" "" 3 -2 2 0) + (proc-arg 6 "GParamDouble" "gdouble" "y" "_Y" "" 3 -2 2 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/film/film" 1769438854 + (proc-def "plug-in-film" 1 + "Combine plusieurs images sur un film" + "Compose several images to a roll film" + "Peter Kirchgessner" + "Peter Kirchgessner (peter@kirchgessner.net)" + "1997" + "_Film…" + 1 + (menu-path "/Filters/Combine") + (icon icon-name -1 "") + "*" + 13 + 18 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "film-height" "Film _height" "Height of film (0: fit to images)" 3 0 524288 0) + (proc-arg 8 "GimpParamColor" "GeglColor" "film-color" "_Film color" "Color of the film" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0) + (proc-arg 1 "GParamInt" "gint" "number-start" "Start _index" "Start index for numbering" 3 0 2147483647 1) + (proc-arg 12 "GimpParamFont" "GimpFont" "number-font" "Number _font" "Font for drawing numbers" 3 0 1 0) + (proc-arg 8 "GimpParamColor" "GeglColor" "number-color" "_Number color" "Color for numbers" 3 1 32 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A double" 0) + (proc-arg 5 "GParamBoolean" "gboolean" "at-top" "En _haut" "Draw numbers at top" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "at-bottom" "En _bas" "Draw numbers at bottom" 3 1) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "images" "Images" "Images to be used for film" 3 "GimpImage") + (proc-arg 6 "GParamDouble" "gdouble" "picture-height" "Image _height" "As fraction of the strip height" 3 0 1 0.69499999999999995) + (proc-arg 6 "GParamDouble" "gdouble" "picture-spacing" "Image s_pacing" "The spacing between 2 images, as fraction of the strip height" 3 0 1 0.040000000000000001) + (proc-arg 6 "GParamDouble" "gdouble" "hole-offset" "Hole offse_t" "The offset from the edge of film, as fraction of the strip height" 3 0 1 0.058000000000000003) + (proc-arg 6 "GParamDouble" "gdouble" "hole-width" "Hole _width" "The width of the holes, as fraction of the strip height" 3 0 1 0.051999999999999998) + (proc-arg 6 "GParamDouble" "gdouble" "hole-height" "Hole hei_ght" "The height of the holes, as fraction of the strip height" 3 0 1 0.081000000000000003) + (proc-arg 6 "GParamDouble" "gdouble" "hole-spacing" "Hole _distance" "The distance between holes, as fraction of the strip height" 3 0 1 0.081000000000000003) + (proc-arg 6 "GParamDouble" "gdouble" "number-height" "_Number height" "The height of drawn numbers, as fraction of the strip height" 3 0 1 0.051999999999999998) + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image" "New image" "Output image" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-xwd/file-xwd" 1769438854 + (proc-def "file-xwd-load" 1 + "Loads files in the XWD (X Window Dump) format" + "Loads files in the XWD (X Window Dump) format. XWD image files are produced by the program xwd. Xwd is an X Window System window dumping utility." + "Peter Kirchgessner" + "Peter Kirchgessner" + "1996" + "Dump X window" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "xwd") + (magics "4,long,0x00000007") + (mime-types "image/x-xwindowdump")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-xwd-export" 1 + "Exports files in the XWD (X Window Dump) format" + "XWD exporting handles all image types except those with alpha channels." + "Peter Kirchgessner" + "Peter Kirchgessner" + "1996" + "Dump X window" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "xwd") + (mime-types "image/x-xwindowdump") + (handles-remote)) + "RGB, GRAY, INDEXED" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-xpm/file-xpm" 1769438854 + (proc-def "file-xpm-load" 1 + "Load files in XPM (X11 Pixmap) format." + "Load files in XPM (X11 Pixmap) format. XPM is a portable image format designed to be included in C source code. XLib provides utility functions to read this format. Newer code should however be using gdk-pixbuf-csource instead. XPM supports colored images, unlike the XBM format which XPM was designed to replace." + "Spencer Kimball & Peter Mattis & Ray Lehtiniemi" + "Spencer Kimball & Peter Mattis" + "1997" + "Image pixmap X" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "xpm") + (magics "0, string,/*\\040XPM\\040*/") + (mime-types "image/x-pixmap")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-xpm-export" 1 + "Export files in XPM (X11 Pixmap) format." + "Export files in XPM (X11 Pixmap) format. XPM is a portable image format designed to be included in C source code. XLib provides utility functions to read this format. Newer code should however be using gdk-pixbuf-csource instead. XPM supports colored images, unlike the XBM format which XPM was designed to replace." + "Spencer Kimball & Peter Mattis & Ray Lehtiniemi & Nathan Summers" + "Spencer Kimball & Peter Mattis" + "1997" + "Image pixmap X" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "xpm") + (mime-types "image/x-pixmap")) + "*" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 1 "GParamInt" "gint" "threshold" "_Seuil" "Alpha threshold" 3 0 255 127))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-xmc/file-xmc" 1769438854 + (proc-def "file-xmc-load-thumb" 1 + "Loads only first frame of X11 Mouse Cursor's animation sequence which nominal size is the closest of thumb-size to be used as a thumbnail" + "" + "Takeshi Matsuyama " + "Takeshi Matsuyama" + "26 May 2009" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-xmc-load" 1 + "Loads files of X11 Mouse Cursor file format" + "This plug-in loads X11 Mouse Cursor (XMC) files." + "Takeshi Matsuyama " + "Takeshi Matsuyama" + "26 May 2009" + "Curseur de souris X11" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "xmc") + (magics "0,string,Xcur") + (mime-types "image/x-xcursor") + (thumb-loader "file-xmc-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-xmc-export" 1 + "Exports files of X11 cursor file" + "This plug-in exports X11 Mouse Cursor (XMC) files" + "Takeshi Matsuyama " + "Takeshi Matsuyama" + "26 May 2009" + "Curseur de souris X11" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "xmc") + (mime-types "image/x-xcursor")) + "RGBA" + 2147483647 + 14 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 1 "GParamInt" "gint" "hot-spot-x" "Hot spot _X" "X-coordinate of hot spot (use -1, -1 to keep original hot spot)" 3 -1 524288 -1) + (proc-arg 1 "GParamInt" "gint" "hot-spot-y" "Hot spot _Y" "Y-coordinate of hot spot (use -1, -1 to keep original hot spot)" 3 -1 524288 -1) + (proc-arg 5 "GParamBoolean" "gboolean" "crop" "_Auto Crop all frames" "Remove the empty borders of all frames." 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "size" "Si_ze where unspecified" "Default frame size if unspecified" 3 "size-32px" 8 "size-12px" 12 "12px" "" "size-16px" 16 "16px" "" "size-24px" 24 "24px" "" "size-32px" 32 "32px" "" "size-36px" 36 "36px" "" "size-40px" 40 "40px" "" "size-48px" 48 "48px" "" "size-64px" 64 "64px" "") + (proc-arg 5 "GParamBoolean" "gboolean" "size-replace" "_Use default size for all frames" "Use default size for all frames" 3 0) + (proc-arg 1 "GParamInt" "gint" "delay" "_Delay where unspecified" "Default time span in milliseconds in which each frame is rendered" 3 5 2147483647 50) + (proc-arg 5 "GParamBoolean" "gboolean" "delay-replace" "Use default delay for all _frames" "Use default delay for all frames" 3 0) + (proc-arg 7 "GParamString" "gchararray" "xmc-copyright" "C_opyright" "Copyright information" 3 "") + (proc-arg 7 "GParamString" "gchararray" "xmc-license" "Lice_nse" "License information" 3 "") + (proc-arg 7 "GParamString" "gchararray" "gimp-comment" "Co_mment" "Optional comment" 3 "Created with GIMP"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-xbm/file-xbm" 1769438854 + (proc-def "file-xbm-load" 1 + "Load a file in X10 or X11 bitmap (XBM) file format" + "Load a file in X10 or X11 bitmap (XBM) file format. XBM is a lossless format for flat black-and-white (two color indexed) images." + "Gordon Matzigkeit" + "Gordon Matzigkeit" + "1998" + "Image bitmap X" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "xbm,icon,bitmap") + (mime-types "image/x-xbitmap")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-xbm-export" 1 + "Export a file in X10 or X11 bitmap (XBM) file format" + "X10 or X11 bitmap (XBM) file format. XBM is a lossless format for flat black-and-white (two color indexed) images." + "Gordon Matzigkeit" + "Gordon Matzigkeit" + "1998" + "Image bitmap X" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "xbm,icon,bitmap") + (mime-types "image/x-xbitmap") + (handles-remote)) + "INDEXED" + 2147483647 + 13 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "include-comment" "_Insérer un commentaire" "Insérer un commentaire au début du fichier." 3 0) + (proc-arg 7 "GParamString" "gchararray" "gimp-comment" "Co_mment" "Image description (maximum 72 bytes)" 3 "Created with GIMP") + (proc-arg 5 "GParamBoolean" "gboolean" "x10-format" "Format bitmap _X10" "Export in X10 format" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "use-hot-spot" "Write hot spot _values" "Write hotspot information" 3 0) + (proc-arg 1 "GParamInt" "gint" "hot-spot-x" "Hot s_pot X" "X coordinate of hotspot" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "hot-spot-y" "Hot spot _Y" "Y coordinate of hotspot" 3 0 524288 0) + (proc-arg 7 "GParamString" "gchararray" "prefix" "I_dentifier prefix" "Identifier prefix [determined from filename]" 3 "bitmap") + (proc-arg 5 "GParamBoolean" "gboolean" "write-mask" "Write extra mask _file" "Write extra mask file" 3 0) + (proc-arg 7 "GParamString" "gchararray" "mask-suffix" "Mas_k file extensions" "Suffix of the mask file" 3 "-mask"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-wmf/file-wmf" 1769438854 + (proc-def "file-wmf-load-thumb" 1 + "Loads a small preview from a WMF image" + "" + "Dom Lachowicz " + "Dom Lachowicz " + "(c) 2003 - Version 0.3.0" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-wmf-load" 1 + "Loads files in the WMF file format" + "Loads files in the WMF file format" + "Dom Lachowicz " + "Dom Lachowicz " + "(c) 2003 - Version 0.3.0" + "Fichier Microsoft WMF" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "wmf,apm") + (magics "0,string,\\327\\315\\306\\232,0,string,\\1\\0\\11\\0") + (mime-types "image/x-wmf") + (handles-vector) + (thumb-loader "file-wmf-load-thumb")) + "" + 2147483647 + 6 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "width" "_Width (pixels)" "Width (in pixels) to load the image in. (0 for the corresponding width per native ratio)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "height" "_Height (pixels)" "Height (in pixels) to load the image in. (0 for the corresponding height per native ratio)" 3 0 524288 0) + (proc-arg 5 "GParamBoolean" "gboolean" "keep-ratio" "_Keep aspect ratio" "Force dimensions with aspect ratio" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "prefer-native-dimensions" "_Prefer native dimensions" "Load and use dimensions from source file" 3 0) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-webp/file-webp" 1769438854 + (proc-def "file-webp-load" 1 + "Loads images in the WebP file format" + "Loads images in the WebP file format" + "Nathan Osman, Ben Touchette" + "(C) 2015-2016 Nathan Osman, (C) 2016 Ben Touchette" + "2015,2016" + "Image WebP" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "webp") + (magics "8,string,WEBP") + (mime-types "image/webp")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-webp-export" 1 + "Saves files in the WebP image format" + "Saves files in the WebP image format" + "Nathan Osman, Ben Touchette" + "(C) 2015-2016 Nathan Osman, (C) 2016 Ben Touchette" + "2015,2016" + "Image WebP" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "webp") + (mime-types "image/webp")) + "*" + 2147483647 + 20 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "preset" "Source _type" "WebP encoder preset" 3 "default" 6 "default" 0 "Par défaut" "" "picture" 1 "Picture" "" "photo" 2 "Photo" "" "drawing" 3 "Drawing" "" "icon" 4 "Icon" "" "text" 5 "Text" "") + (proc-arg 5 "GParamBoolean" "gboolean" "lossless" "_Sans perte" "Use lossless encoding" 3 0) + (proc-arg 6 "GParamDouble" "gdouble" "quality" "Image _quality" "Quality of the image" 3 0 100 90) + (proc-arg 6 "GParamDouble" "gdouble" "alpha-quality" "Alpha q_uality" "Quality of the image's alpha channel" 3 0 100 100) + (proc-arg 5 "GParamBoolean" "gboolean" "use-sharp-yuv" "Use Sharp YU_V" "Use sharper (but slower) RGB→YUV conversion" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "animation-loop" "Boucler _indéfiniment" "Loop animation infinitely" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "minimize-size" "_Minimiser la taille de la sortie (plus lent)" "Minimize output file size" 3 1) + (proc-arg 1 "GParamInt" "gint" "keyframe-distance" "Distance maximale entre les images-_clés" "Maximum distance between keyframes" 3 0 2147483647 50) + (proc-arg 1 "GParamInt" "gint" "default-delay" "_Délai par défaut entre les images" "Default delay (in milliseconds) to use when timestamps for frames are not available or forced." 3 0 2147483647 200) + (proc-arg 5 "GParamBoolean" "gboolean" "force-delay" "Ut_iliser le délai par défaut pour toutes les images" "Force default delay on all frames" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "animation" "Enregistrer l’a_nimation" "Use layers for animation" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-exif" "Save _Exif" "Save Exif (Exchangeable image file format) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-iptc" "Save _IPTC" "Save IPTC (International Press Telecommunications Council) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-xmp" "Save _XMP" "Save XMP (Extensible Metadata Platform) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-color-profile" "Save color _profile" "Save the ICC color profile as metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-thumbnail" "Save _thumbnail" "Save a smaller representation of the image as metadata" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-wbmp/file-wbmp" 1769438854 + (proc-def "file-wbmp-load" 1 + "Loads files of Wireless BMP file format" + "Loads files of Wireless BMP file format" + "Kevin Toyle" + "Kevin Toyle" + "2022" + "Wireless BMP image" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "wbmp") + (mime-types "image/vnd.wap.wbmp")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-tiff/file-tiff" 1769438854 + (proc-def "file-tiff-load" 1 + "Loads files of the TIFF and BigTIFF file formats" + "Loads files of the Tag Image File Format (TIFF) and its 64-bit offsets variant (BigTIFF)" + "Spencer Kimball, Peter Mattis & Nick Lamb" + "Nick Lamb " + "1995-1996,1998-2003" + "Image TIFF ou BigTIFF" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "tif,tiff") + (magics "0,string,II*\\0,0,string,MM\\0*") + (mime-types "image/tiff") + (handles-remote)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-tiff-export" 1 + "Exports files in the TIFF or BigTIFF file formats" + "Exports files in the Tag Image File Format (TIFF) or its 64-bit offsets variant (BigTIFF) able to support much bigger file sizes" + "Spencer Kimball & Peter Mattis" + "Spencer Kimball & Peter Mattis" + "1995-1996,2000-2003" + "Image TIFF ou BigTIFF" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "tif,tiff") + (mime-types "image/tiff") + (handles-remote)) + "*" + 2147483647 + 14 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "bigtiff" "Export in _BigTIFF variant file format" "The BigTIFF variant file format uses 64-bit offsets, hence supporting over 4GiB files and bigger" 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "compression" "Co_mpression" "Compression type" 3 "none" 7 "none" 0 "None" "" "lzw" 1 "LZW" "" "packbits" 2 "Pack Bits" "" "adobe_deflate" 3 "Deflate" "" "jpeg" 4 "JPEG" "" "ccittfax3" 5 "CCITT Group 3 fax" "" "ccittfax4" 6 "CCITT Group 4 fax" "") + (proc-arg 5 "GParamBoolean" "gboolean" "save-transparent-pixels" "Save color _values from transparent pixels" "Keep the color data masked by an alpha channel intact (do not store premultiplied components)" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "cmyk" "Export as CMY_K" "Create a CMYK TIFF image using the soft-proofing color profile" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-exif" "Save _Exif" "Save Exif (Exchangeable image file format) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-iptc" "Save _IPTC" "Save IPTC (International Press Telecommunications Council) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-xmp" "Save _XMP" "Save XMP (Extensible Metadata Platform) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-color-profile" "Save color _profile" "Save the ICC color profile as metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-thumbnail" "Save _thumbnail" "Save a smaller representation of the image as metadata" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "include-comment" "Save c_omment" "Save a comment as metadata" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-tga/file-tga" 1769438854 + (proc-def "file-tga-load" 1 + "Loads files of Targa file format" + "FIXME: write help for tga_load" + "Raphael FRANCOIS, Gordon Matzigkeit" + "Raphael FRANCOIS, Gordon Matzigkeit" + "1997,2000,2007" + "Image TarGA" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "tga,vda,icb,vst") + (magics "-18&,string,TRUEVISION-XFILE.,-1,byte,0") + (mime-types "image/x-tga")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-tga-export" 1 + "Exports files in the Targa file format" + "FIXME: write help for tga_export" + "Raphael FRANCOIS, Gordon Matzigkeit" + "Raphael FRANCOIS, Gordon Matzigkeit" + "1997,2000" + "Image TarGA" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "tga") + (mime-types "image/x-tga")) + "*" + 2147483647 + 6 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "rle" "_Use RLE compression" "Use RLE compression" 3 1) + (proc-arg 4 "GimpParamChoice" "gchararray" "origin" "Ori_gin" "Image origin" 3 "bottom-left" 2 "bottom-left" 1 "En bas à gauche" "" "top-left" 0 "En haut à gauche" ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-svg/file-svg" 1769438854 + (proc-def "file-svg-load" 1 + "Loads files in the SVG file format" + "Renders SVG files to raster graphics using librsvg." + "Dom Lachowicz, Sven Neumann" + "Dom Lachowicz " + "2.5.0" + "Image SVG" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "svg") + (magics "0,string," + "Copyright 1997-1998 by Michael Sweet" + "1.1.1 - 17 May 1998" + "Image Silicon Graphic IRIS" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "sgi,rgb,rgba,bw,icon") + (magics "0,short,474") + (mime-types "image/x-sgi")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-sgi-export" 1 + "Exports files in SGI image file format" + "This plug-in exports SGI image files." + "Michael Sweet " + "Copyright 1997-1998 by Michael Sweet" + "1.1.1 - 17 May 1998" + "Image Silicon Graphic IRIS" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (save-proc + (extensions "sgi,rgb,rgba,bw,icon") + (mime-types "image/x-sgi")) + "*" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "compression" "Compression _type" "Compression level" 3 "rle" 3 "none" 0 "Aucune compression" "" "rle" 1 "Compression RLE" "" "arle" 2 "RLE agressif (non pris en charge par SGI)" ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-raw-placeholder/file-raw-placeholder" 1769438854 + (proc-def "file-raw-placeholder-canon-load" 1 + "Load files in the Canon raw formats via placeholder" + "This plug-in loads files in Canon's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "cr2,crw,cr3") + (magics "0,string,II*\\0\\020\\0\\0\\0CR,0,string,II\\024\\0\\0\\0HEAPCCDR,4,string,ftypcrx ") + (mime-types "image/x-canon-cr2,image/x-canon-crw,image/x-canon-cr3") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-nikon-load" 1 + "Load files in the Nikon raw formats via placeholder" + "This plug-in loads files in Nikon's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "nef,nrw") + (mime-types "image/x-nikon-nef,image/x-nikon-nrw") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-hasselblad-load" 1 + "Load files in the Hasselblad raw formats via placeholder" + "This plug-in loads files in Hasselblad's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "3fr,fff") + (mime-types "image/x-hasselblad-3fr,image/x-hasselblad-fff") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-sony-load" 1 + "Load files in the Sony raw formats via placeholder" + "This plug-in loads files in Sony's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "arw,srf,sr2") + (mime-types "image/x-sony-arw,image/x-sony-srf,image/x-sony-sr2") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-bay-load" 1 + "Load files in the BAY raw format via placeholder" + "This plug-in loads files in Casio's raw BAY format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "bay") + (mime-types "image/x-casio-bay") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-cine-load" 1 + "Load files in the CINE raw format via placeholder" + "This plug-in loads files in Phantom Software's raw CINE format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "cine,cin") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-sinar-load" 1 + "Load files in the Sinar raw formats via placeholder" + "This plug-in loads files in Sinar's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "cs1,ia,sti") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-kodak-load" 1 + "Load files in the Kodak raw formats via placeholder" + "This plug-in loads files in Kodak's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "dc2,dcr,kdc,k25,kc2") + (mime-types "image/x-kodak-dc2,image/x-kodak-dcr,image/x-kodak-kdc,image/x-kodak-k25,image/x-kodak-kc2") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-dng-load" 1 + "Load files in the DNG raw format via placeholder" + "This plug-in loads files in the Adobe Digital Negative DNG format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "dng") + (mime-types "image/x-adobe-dng") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-erf-load" 1 + "Load files in the ERF raw format via placeholder" + "This plug-in loads files in Epson's raw ERF format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "erf") + (mime-types "image/x-epson-erf") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-phaseone-load" 1 + "Load files in the Phase One raw formats via placeholder" + "This plug-in loads files in Phase One's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "cap,iiq") + (mime-types "image/x-phaseone-cap,image/x-phaseone-iiq") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-minolta-load" 1 + "Load files in the Minolta raw formats via placeholder" + "This plug-in loads files in Minolta's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "mdc,mrw") + (mime-types "image/x-minolta-mdc,image/x-minolta-mrw") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-mef-load" 1 + "Load files in the MEF raw format via placeholder" + "This plug-in loads files in Mamiya's raw MEF format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "mef") + (mime-types "image/x-mamiya-mef") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-mos-load" 1 + "Load files in the MOS raw format via placeholder" + "This plug-in loads files in Leaf's raw MOS format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "mos") + (mime-types "image/x-leaf-mos") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-orf-load" 1 + "Load files in the ORF raw format via placeholder" + "This plug-in loads files in Olympus' raw ORF format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "orf") + (magics "0,string,IIRO,0,string,MMOR,0,string,IIRS") + (mime-types "image/x-olympus-orf") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-pef-load" 1 + "Load files in the PEF raw format via placeholder" + "This plug-in loads files in Pentax' raw PEF format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "pef,raw") + (mime-types "image/x-pentax-pef,image/x-pentax-raw") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-pxn-load" 1 + "Load files in the PXN raw format via placeholder" + "This plug-in loads files in Logitech's raw PXN format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "pxn") + (mime-types "image/x-pxn") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-qtk-load" 1 + "Load files in the QTK raw format via placeholder" + "This plug-in loads files in Apple's QuickTake QTK raw format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "qtk") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-raf-load" 1 + "Load files in the RAF raw format via placeholder" + "This plug-in loads files in Fujifilm's raw RAF format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "raf") + (magics "0,string,FUJIFILMCCD-RAW") + (mime-types "image/x-fuji-raf") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-panasonic-load" 1 + "Load files in the Panasonic raw formats via placeholder" + "This plug-in loads files in Panasonic's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "raw,rw2") + (magics "0,string,IIU\\0") + (mime-types "image/x-panasonic-raw,image/x-panasonic-rw2") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-rdc-load" 1 + "Load files in the RDC raw format via placeholder" + "This plug-in loads files in Digital Foto Maker's raw RDC format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "rdc") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-rwl-load" 1 + "Load files in the RWL raw format via placeholder" + "This plug-in loads files in Leica's raw RWL format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "rwl") + (mime-types "image/x-leica-rwl") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-srw-load" 1 + "Load files in the SRW raw format via placeholder" + "This plug-in loads files in Samsung's raw SRW format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "srw") + (mime-types "image/x-samsung-srw") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-x3f-load" 1 + "Load files in the X3F raw format via placeholder" + "This plug-in loads files in Sigma's raw X3F format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "x3f") + (magics "0,string,FOVb") + (mime-types "image/x-sigma-x3f") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-ari-load" 1 + "Load files in the ARI raw format via placeholder" + "This plug-in loads files in Arriflex' raw ARI format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "ari") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-raw-data/file-raw-data" 1769438854 + (proc-def "file-raw-load" 1 + "Load raw images, specifying image information" + "Load raw images, specifying image information" + "timecop, pg@futureware.at" + "timecop, pg@futureware.at" + "Aug 2004" + "Données d’image Raw" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "data")) + "" + 2147483647 + 12 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "width" "_Largeur" "Image width in number of pixels" 3 1 524288 350) + (proc-arg 1 "GParamInt" "gint" "height" "_Hauteur" "Image height in number of pixels" 3 1 524288 350) + (proc-arg 1 "GParamInt" "gint" "offset" "O_ffset" "Offset to beginning of image in raw data" 3 0 524288 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "pixel-format" "Pi_xel format" "The layout of pixel data, such as components and their order" 3 "rgb-8bpc" 19 "rgb-8bpc" 0 "RGB 8-bit" "" "rgb-16bpc" 1 "RGB 16-bit" "" "rgb-32bpc" 2 "RGB 32-bit" "" "rgba-8bpc" 3 "RGBA 8-bit" "" "rgba-16bpc" 4 "RGBA 16-bit" "" "rgba-32bpc" 5 "RGBA 32-bit" "" "rgb565" 6 "RGB565" "" "bgr565" 7 "BGR565" "" "grayscale-1bpp" 8 "N&B 1 bit" "" "grayscale-2bpp" 9 "Grayscale 2-bit" "" "grayscale-4bpp" 10 "Grayscale 4-bit" "" "grayscale-8bpp" 11 "Grayscale 8-bit" "" "grayscale-16bpp" 12 "Grayscale 16-bit" "" "grayscale-32bpp" 13 "Grayscale 32-bit" "" "grayscale-alpha-8bpc" 14 "Grayscale-Alpha 8-bit" "" "grayscale-alpha-16bpc" 15 "Grayscale-Alpha 16-bit" "" "grayscale-alpha-32bpc" 16 "Grayscale-Alpha 32-bit" "" "indexed" 17 "Indexé" "" "indexed-alpha" 18 "Alpha indexé" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "data-type" "_Data type" "Data type used to represent pixel values" 3 "unsigned" 3 "unsigned" 0 "Unsigned Integer" "" "signed" 1 "Signed Integer" "" "float" 2 "Floating Point" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "endianness" "_Endianness" "Order of sequences of bytes" 3 "little-endian" 2 "little-endian" 0 "Little Endian" "" "big-endian" 1 "Big Endian" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "planar-configuration" "Planar confi_guration" "How color pixel data are stored" 3 "contiguous" 2 "contiguous" 0 "Contiguous" "" "planar" 1 "Planar" "") + (proc-arg 1 "GParamInt" "gint" "palette-offset" "Palette Offse_t" "Offset to beginning of data in the palette file" 3 0 524288 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "palette-type" "Palette's la_yout" "The layout for the palette's color channels" 3 "rgb" 2 "rgb" 0 "R, V, B (normal)" "" "bgr" 1 "B, V, R, X (style BMP)" "") + (proc-arg 13 "GimpParamFile" "GFile" "palette-file" "_Palette File" "The file containing palette data" 3 0 1 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-hgt-load" 1 + "Load HGT data as images" + "Load Digital Elevation Model data in HGT format from the Shuttle Radar Topography Mission as images. Though the output image will be RGB, all colors are grayscale by default and the contrast will be quite low on most earth relief. Therefore you will likely want to remap elevation to colors as a second step, for instance with the \"Gradient Map\" plug-in." + "" + "" + "2017-12-09" + "Données du modèle d’élévation numérique" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "hgt")) + "" + 2147483647 + 6 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 4 "GimpParamChoice" "gchararray" "sample-spacing" "Sa_mple spacing" "The sample spacing of the data." 3 "auto-detect" 3 "auto-detect" 0 "Auto-Detect" "" "srtm-1" 1 "SRTM-1 (1 arc second)" "" "srtm-3" 2 "SRTM-3 (3 arc seconds)" "") + (proc-arg 1 "GParamInt" "gint" "palette-offset" "Palette Offse_t" "Offset to beginning of data in the palette file" 3 0 524288 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "palette-type" "Palette's la_yout" "The layout for the palette's color channels" 3 "rgb" 2 "rgb" 0 "R, V, B (normal)" "" "bgr" 1 "B, V, R, X (style BMP)" "") + (proc-arg 13 "GimpParamFile" "GFile" "palette-file" "_Palette File" "The file containing palette data" 3 0 1 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-export" 1 + "Dump images to disk in raw format" + "Dump images to disk in raw format" + "Björn Kautler, Bjoern@Kautler.net" + "Björn Kautler, Bjoern@Kautler.net" + "April 2014" + "Données d’image Raw" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "data,raw")) + "INDEXED, GRAY, RGB, RGBA" + 2147483647 + 6 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "planar-configuration" "Planar configuration" "How color pixel data are stored" 3 "contiguous" 2 "contiguous" 0 "Contiguous" "" "planar" 1 "Planar" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "palette-type" "Palette's la_yout" "The layout for the palette's color channels" 3 "rgb" 2 "rgb" 0 "R, V, B (normal)" "" "bgr" 1 "B, V, R, X (style BMP)" ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-qoi/file-qoi" 1769438854 + (proc-def "file-qoi-load" 1 + "Load file in the QOI file format" + "Load file in the QOI file format (Quite OK Image)" + "Alex S." + "Alex S." + "2023" + "Quite OK Image" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "qoi") + (magics "0,string,qoif") + (mime-types "image/qoi")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-qoi-export" 1 + "Export image in the QOI file format" + "Export image in the QOI file format (Quite OK Image)" + "Alex S." + "Alex S." + "2023" + "Quite OK Image" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "qoi") + (mime-types "image/qoi")) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-psp/file-psp" 1769438854 + (proc-def "file-psp-load" 1 + "Loads images from the Paint Shop Pro PSP file format" + "This plug-in loads and exports images in Paint Shop Pro's native PSP format. Vector layers aren't handled. Exporting isn't yet implemented." + "Tor Lillqvist" + "Tor Lillqvist" + "1999" + "Image Paint Shop Pro" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "psp,tub,pspimage,psptube") + (magics "0,string,Paint\\040Shop\\040Pro\\040Image\\040File\n\032") + (mime-types "image/x-psp")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-psd/file-psd" 1769438854 + (proc-def "file-psd-load-thumb" 1 + "Loads thumbnails from the Photoshop PSD file format" + "This plug-in loads thumbnail images from Adobe Photoshop (TM) native PSD format files." + "John Marshall" + "John Marshall" + "2007" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-psd-load" 1 + "Loads images from the Photoshop PSD and PSB file formats" + "This plug-in loads images in Adobe Photoshop (TM) native PSD and PSB format." + "John Marshall" + "John Marshall" + "2007" + "Image Photoshop" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "psd, psb") + (magics "0,string,8BPS") + (mime-types "image/x-psd") + (thumb-loader "file-psd-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-psd-load-merged" 1 + "Loads images from the Photoshop PSD and PSB file formats" + "This plug-in loads the merged image data in Adobe Photoshop (TM) native PSD and PSB format." + "Ell" + "Ell" + "2018" + "Image Photoshop (fusionnée)" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "psd, psb") + (magics "0,string,8BPS") + (priority 1) + (mime-types "image/x-psd") + (priority 1) + (thumb-loader "file-psd-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-psd-export" 1 + "Saves files in the Photoshop (TM) PSD file format" + "This plug-in saves files of Adobe Photoshop (TM) native PSD format. These files may be of any image type supported by GIMP, with or without layers, layer masks, aux channels and guides." + "Monigotes" + "Monigotes" + "2000" + "Image Photoshop" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "psd") + (mime-types "image/x-psd")) + "*" + 2147483647 + 14 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "clippingpath" "Assign a Clipping _Path" "Select a path to be the clipping path" 3 0) + (proc-arg 7 "GParamString" "gchararray" "clippingpathname" "Clipping Path _Name" "Clipping path name\n(ignored if no clipping path)" 3 "") + (proc-arg 6 "GParamDouble" "gdouble" "clippingpathflatness" "Path _Flatness" "Clipping path flatness in device pixels\n(ignored if no clipping path)" 3 0 100 0.20000000000000001) + (proc-arg 5 "GParamBoolean" "gboolean" "cmyk" "Export as _CMYK" "Export a CMYK PSD image using the soft-proofing color profile" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "duotone" "Export as _Duotone" "Export as a Duotone PSD file if Duotone color space information was attached to the image when originally imported." 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-exif" "Save _Exif" "Save Exif (Exchangeable image file format) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-iptc" "Save _IPTC" "Save IPTC (International Press Telecommunications Council) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-xmp" "Save _XMP" "Save XMP (Extensible Metadata Platform) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-color-profile" "Save color _profile" "Save the ICC color profile as metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-thumbnail" "Save _thumbnail" "Save a smaller representation of the image as metadata" 3 1)) + (proc-def "file-psd-load-metadata" 1 + "Loads Photoshop-format metadata from other file formats." + "Loads Photoshop-format metadata from other file formats." + "John Marshall" + "John Marshall" + "2007" + "" + 0 + (icon icon-name -1 "") + (load-proc) + "" + 2147483647 + 6 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "size" "Metadata size" "" 3 0 2147483647 0) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "image" "The image" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "metadata-type" "Metadata type" "If the metadata contains image or layer PSD resources." 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "cmyk" "CMYK" "If the layer metadata needs to be converted from CMYK colorspace." 3 0) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-ps/file-ps" 1769438854 + (proc-def "file-ps-load-thumb" 1 + "Loads a small preview from a PostScript or PDF document" + "" + "Peter Kirchgessner " + "Peter Kirchgessner" + "v1.17 19-Sep-2004" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-ps-load" 1 + "Load PostScript documents" + "Load PostScript documents" + "Peter Kirchgessner " + "Peter Kirchgessner" + "v1.17 19-Sep-2004" + "Document PostScript" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "ps") + (magics "0,string,%!,0,long,0xc5d0d3c6") + (mime-types "application/postscript") + (handles-vector) + (thumb-loader "file-ps-load-thumb")) + "" + 2147483647 + 11 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "width" "_Width (pixels)" "Width (in pixels) to load the image in. (0 for the corresponding width per native ratio)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "height" "_Height (pixels)" "Height (in pixels) to load the image in. (0 for the corresponding height per native ratio)" 3 0 524288 0) + (proc-arg 5 "GParamBoolean" "gboolean" "keep-ratio" "_Keep aspect ratio" "Force dimensions with aspect ratio" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "prefer-native-dimensions" "_Prefer native dimensions" "Load and use dimensions from source file" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "check-bbox" "Try _Bounding Box" "FALSE: Use width/height, TRUE: Use BoundingBox" 3 1) + (proc-arg 7 "GParamString" "gchararray" "pages" "_Pages" "Pages to load (e.g.: 1,3,5-7)" 3 "1") + (proc-arg 4 "GimpParamChoice" "gchararray" "coloring" "Colorin_g" "Import color format" 3 "rgb" 4 "bw" 4 "N/B" "" "grayscale" 5 "Gris" "" "rgb" 6 "Couleur" "" "automatic" 7 "Automatique" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "text-alpha-bits" "Te_xt anti-aliasing" "Text anti-aliasing strength" 3 "none" 3 "none" 1 "Aucun" "" "weak" 2 "Faible" "" "strong" 4 "Fort" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "graphic-alpha-bits" "Gra_phic anti-aliasing" "Graphic anti-aliasing strength" 3 "none" 3 "none" 1 "Aucun" "" "weak" 2 "Faible" "" "strong" 4 "Fort" "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-eps-load" 1 + "Load Encapsulated PostScript images" + "Load Encapsulated PostScript images" + "Peter Kirchgessner " + "Peter Kirchgessner" + "v1.17 19-Sep-2004" + "Image PostScript encapsulé" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "eps") + (magics "0,string,%!,0,long,0xc5d0d3c6") + (mime-types "image/x-eps") + (handles-vector) + (thumb-loader "file-ps-load-thumb")) + "" + 2147483647 + 11 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "width" "_Width (pixels)" "Width (in pixels) to load the image in. (0 for the corresponding width per native ratio)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "height" "_Height (pixels)" "Height (in pixels) to load the image in. (0 for the corresponding height per native ratio)" 3 0 524288 0) + (proc-arg 5 "GParamBoolean" "gboolean" "keep-ratio" "_Keep aspect ratio" "Force dimensions with aspect ratio" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "prefer-native-dimensions" "_Prefer native dimensions" "Load and use dimensions from source file" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "check-bbox" "Try _Bounding Box" "FALSE: Use width/height, TRUE: Use BoundingBox" 3 1) + (proc-arg 7 "GParamString" "gchararray" "pages" "_Pages" "Pages to load (e.g.: 1,3,5-7)" 3 "1") + (proc-arg 4 "GimpParamChoice" "gchararray" "coloring" "Colorin_g" "Import color format" 3 "rgb" 4 "bw" 4 "N/B" "" "grayscale" 5 "Gris" "" "rgb" 6 "Couleur" "" "automatic" 7 "Automatique" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "text-alpha-bits" "Te_xt anti-aliasing" "Text anti-aliasing strength" 3 "none" 3 "none" 1 "Aucun" "" "weak" 2 "Faible" "" "strong" 4 "Fort" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "graphic-alpha-bits" "Gra_phic anti-aliasing" "Graphic anti-aliasing strength" 3 "none" 3 "none" 1 "Aucun" "" "weak" 2 "Faible" "" "strong" 4 "Fort" "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-ps-export" 1 + "Export image as PostScript document" + "PostScript exporting handles all image types except those with alpha channels." + "Peter Kirchgessner " + "Peter Kirchgessner" + "v1.17 19-Sep-2004" + "Document PostScript" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "ps") + (mime-types "application/postscript") + (handles-remote)) + "RGB, GRAY, INDEXED" + 2147483647 + 15 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 6 "GParamDouble" "gdouble" "width" "_Largeur" "Width of the image in PostScript file (0: use input image size)" 3 0 524288 287) + (proc-arg 6 "GParamDouble" "gdouble" "height" "_Hauteur" "Height of the image in PostScript file (0: use input image size)" 3 0 524288 200) + (proc-arg 6 "GParamDouble" "gdouble" "x-offset" "_X offset" "X-offset to image from lower left corner" 3 -524288 524288 5) + (proc-arg 6 "GParamDouble" "gdouble" "y-offset" "Y o_ffset" "Y-offset to image from lower left corner" 3 -524288 524288 5) + (proc-arg 4 "GimpParamChoice" "gchararray" "unit" "_Unit" "Unit of measure for offset values" 3 "inch" 2 "inch" 0 "Inch" "" "millimeter" 1 "Millimeter" "") + (proc-arg 5 "GParamBoolean" "gboolean" "keep-ratio" "Proportions _fixes" "If enabled, aspect ratio will be maintained on export. Otherwise, the width and height values will be used." 3 1) + (proc-arg 1 "GParamInt" "gint" "rotation" "Rotation" "0, 90, 180, 270" 3 0 270 0) + (proc-arg 5 "GParamBoolean" "gboolean" "level" "PostScript Level _2" "If enabled, export in PostScript Level 2 format. Otherwise, export in PostScript Level 1 format." 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "eps-flag" "Encapsula_ted PostScript" "If enabled, export as Encapsulated PostScript. Otherwise, export as PostScript." 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "show-preview" "A_perçu" "Show Preview" 3 0) + (proc-arg 1 "GParamInt" "gint" "preview" "Preview Si_ze" "Maximum size of preview. Set to 0 for no preview." 3 0 524288 256)) + (proc-def "file-eps-export" 1 + "Export image as Encapsulated PostScript image" + "PostScript exporting handles all image types except those with alpha channels." + "Peter Kirchgessner " + "Peter Kirchgessner" + "v1.17 19-Sep-2004" + "Encapsulated PostScript" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "eps") + (mime-types "application/x-eps") + (handles-remote)) + "RGB, GRAY, INDEXED" + 2147483647 + 15 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 6 "GParamDouble" "gdouble" "width" "_Largeur" "Width of the image in PostScript file (0: use input image size)" 3 0 524288 287) + (proc-arg 6 "GParamDouble" "gdouble" "height" "_Hauteur" "Height of the image in PostScript file (0: use input image size)" 3 0 524288 200) + (proc-arg 6 "GParamDouble" "gdouble" "x-offset" "_X offset" "X-offset to image from lower left corner" 3 -524288 524288 5) + (proc-arg 6 "GParamDouble" "gdouble" "y-offset" "Y o_ffset" "Y-offset to image from lower left corner" 3 -524288 524288 5) + (proc-arg 4 "GimpParamChoice" "gchararray" "unit" "_Unit" "Unit of measure for offset values" 3 "inch" 2 "inch" 0 "Inch" "" "millimeter" 1 "Millimeter" "") + (proc-arg 5 "GParamBoolean" "gboolean" "keep-ratio" "Proportions _fixes" "If enabled, aspect ratio will be maintained on export. Otherwise, the width and height values will be used." 3 1) + (proc-arg 1 "GParamInt" "gint" "rotation" "Rotation" "0, 90, 180, 270" 3 0 270 0) + (proc-arg 5 "GParamBoolean" "gboolean" "level" "PostScript Level _2" "If enabled, export in PostScript Level 2 format. Otherwise, export in PostScript Level 1 format." 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "eps-flag" "Encapsula_ted PostScript" "If enabled, export as Encapsulated PostScript. Otherwise, export as PostScript." 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "show-preview" "A_perçu" "Show Preview" 3 0) + (proc-arg 1 "GParamInt" "gint" "preview" "Preview Si_ze" "Maximum size of preview. Set to 0 for no preview." 3 0 524288 256))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-pnm/file-pnm" 1769438854 + (proc-def "file-pnm-load" 1 + "Loads files in the PNM file format" + "This plug-in loads files in the various Netpbm portable file formats." + "Erik Nygren" + "Erik Nygren" + "1996" + "Image PNM" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "pnm,ppm,pgm,pbm,pfm,pam") + (magics "0,string,P1,0,string,P2,0,string,P3,0,string,P4,0,string,P5,0,string,P6,0,string,P7,0,string,PF,0,string,Pf") + (mime-types "image/x-portable-anymap") + (handles-remote)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-pnm-export" 1 + "Exports files in the PNM file format" + "PNM export handles all image types without transparency." + "Erik Nygren" + "Erik Nygren" + "1996" + "Image PNM" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "pnm") + (mime-types "image/x-portable-anymap") + (handles-remote)) + "RGB, GRAY, INDEXED" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "raw" "_Data formatting" "Whether to export ASCII or raw output" 3 "raw-output" 2 "ascii-output" 0 "ASCII" "" "raw-output" 1 "Raw" "")) + (proc-def "file-pbm-export" 1 + "Exports files in the PBM file format" + "PBM exporting produces mono images without transparency." + "Erik Nygren" + "Erik Nygren" + "1996" + "Image PBM" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "pbm") + (mime-types "image/x-portable-bitmap") + (handles-remote)) + "RGB, GRAY, INDEXED" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "raw" "_Data formatting" "Whether to export ASCII or raw output" 3 "raw-output" 2 "ascii-output" 0 "ASCII" "" "raw-output" 1 "Raw" "")) + (proc-def "file-pgm-export" 1 + "Exports files in the PGM file format" + "PGM exporting produces grayscale images without transparency." + "Erik Nygren" + "Erik Nygren" + "1996" + "Image PGM" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "pgm") + (mime-types "image/x-portable-graymap") + (handles-remote)) + "RGB, GRAY, INDEXED" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "raw" "_Data formatting" "Whether to export ASCII or raw output" 3 "raw-output" 2 "ascii-output" 0 "ASCII" "" "raw-output" 1 "Raw" "")) + (proc-def "file-ppm-export" 1 + "Exports files in the PPM file format" + "PPM export handles RGB images without transparency." + "Erik Nygren" + "Erik Nygren" + "1996" + "Image PPM" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "ppm") + (mime-types "image/x-portable-pixmap") + (handles-remote)) + "RGB, GRAY, INDEXED" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "raw" "_Data formatting" "Whether to export ASCII or raw output" 3 "raw-output" 2 "ascii-output" 0 "ASCII" "" "raw-output" 1 "Raw" "")) + (proc-def "file-pam-export" 1 + "Exports files in the PAM file format" + "PAM export handles RGB images with or without transparency." + "Jörg Walter" + "Jörg Walter" + "2009" + "PAM image" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "pam") + (mime-types "image/x-portable-arbitrarymap") + (handles-remote)) + "RGB*, GRAY*, INDEXED*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3)) + (proc-def "file-pfm-export" 1 + "Exports files in the PFM file format" + "PFM export handles all images without transparency." + "Mukund Sivaraman" + "Mukund Sivaraman" + "2015" + "Image PFM" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "pfm") + (mime-types "image/x-portable-floatmap") + (handles-remote)) + "RGB, GRAY, INDEXED" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-png/file-png" 1769438854 + (proc-def "file-png-load" 1 + "Loads files in PNG file format" + "This plug-in loads Portable Network Graphics (PNG) files." + "Michael Sweet , Daniel Skarda <0rfelyus@atrey.karlin.mff.cuni.cz>" + "Michael Sweet , Daniel Skarda <0rfelyus@atrey.karlin.mff.cuni.cz>, Nick Lamb " + "1.3.4 - 03 September 2002" + "Image PNG" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "png") + (magics "0,string,PNG\r\n\032\n") + (mime-types "image/png")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-png-export" 1 + "Exports files in PNG file format" + "This plug-in exports Portable Network Graphics (PNG) files." + "Michael Sweet , Daniel Skarda <0rfelyus@atrey.karlin.mff.cuni.cz>" + "Michael Sweet , Daniel Skarda <0rfelyus@atrey.karlin.mff.cuni.cz>, Nick Lamb " + "1.3.4 - 03 September 2002" + "Image PNG" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "png") + (mime-types "image/png")) + "*" + 2147483647 + 19 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "interlaced" "_Interlacing (Adam7)" "Use Adam7 interlacing" 3 0) + (proc-arg 1 "GParamInt" "gint" "compression" "Co_mpression level" "Deflate Compression factor (0..9)" 3 0 9 9) + (proc-arg 5 "GParamBoolean" "gboolean" "bkgd" "Enregistrer la couleur d’_arrière-plan" "Write bKGD chunk (PNG metadata)" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "offs" "Save layer o_ffset" "Write oFFs chunk (PNG metadata)" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "phys" "Save resol_ution" "Write pHYs chunk (PNG metadata)" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "time" "Enregistrer la da_te de création" "Write tIME chunk (PNG metadata)" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "save-transparent" "Save color _values from transparent pixels" "Preserve color of completely transparent pixels" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "optimize-palette" "_Optimize for smallest possible palette size" "When checked, save as 1, 2, 4, or 8-bit depending on number of colors used. When unchecked, always save as 8-bit" 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "format" "_Pixel format" "PNG export format" 3 "auto" 9 "auto" 0 "Automatique" "" "rgb8" 1 "RVB 8bpc" "" "gray8" 2 "GRIS 8bpc" "" "rgba8" 3 "RVBA 8bpc" "" "graya8" 4 "GRISA 8bpc" "" "rgb16" 5 "RVB 16bpc" "" "gray16" 6 "GRIS 16bpc" "" "rgba16" 7 "RVBA 16bpc" "" "graya16" 8 "GRISA 16bpc" "") + (proc-arg 5 "GParamBoolean" "gboolean" "include-exif" "Save _Exif" "Save Exif (Exchangeable image file format) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-iptc" "Save _IPTC" "Save IPTC (International Press Telecommunications Council) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-xmp" "Save _XMP" "Save XMP (Extensible Metadata Platform) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-color-profile" "Save color _profile" "Save the ICC color profile as metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-thumbnail" "Save _thumbnail" "Save a smaller representation of the image as metadata" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "include-comment" "Save c_omment" "Save a comment as metadata" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-pix/file-pix" 1769438854 + (proc-def "file-pix-load" 1 + "Loads files of the Alias|Wavefront or Esm Software Pix file format" + "Loads files of the Alias|Wavefront or Esm Software Pix file format" + "Michael Taylor" + "Michael Taylor" + "1997" + "Image Alias Pix" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "pix,matte,mask,alpha,als") + (magics "0,string,Esm Software PIX file") + (handles-remote)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-pix-export" 1 + "Export file in the Alias|Wavefront pix/matte file format" + "Export file in the Alias|Wavefront pix/matte file format" + "Michael Taylor" + "Michael Taylor" + "1997" + "Image Alias Pix" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "pix,matte,mask,alpha,als") + (handles-remote)) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-pdf-load/file-pdf-load" 1769438854 + (proc-def "file-pdf-load-thumb" 1 + "Loads a preview from a PDF file." + "Loads a small preview of the first page of the PDF format file. Uses the embedded thumbnail if present." + "Nathan Summers" + "Nathan Summers" + "2005" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-pdf-load" 1 + "Load file in PDF format" + "Loads files in Adobe's Portable Document Format. PDF is designed to be easily processed by a variety of different platforms, and is a distant cousin of PostScript." + "Nathan Summers, Lionel N." + "Nathan Summers, Lionel N." + "2005, 2017" + "PDF (Portable Document Format)" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "pdf") + (magics "0, string,%PDF-") + (mime-types "application/pdf") + (handles-vector) + (thumb-loader "file-pdf-load-thumb")) + "" + 2147483647 + 11 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "width" "_Width (pixels)" "Width (in pixels) to load the image in. (0 for the corresponding width per native ratio)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "height" "_Height (pixels)" "Height (in pixels) to load the image in. (0 for the corresponding height per native ratio)" 3 0 524288 0) + (proc-arg 5 "GParamBoolean" "gboolean" "keep-ratio" "_Keep aspect ratio" "Force dimensions with aspect ratio" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "prefer-native-dimensions" "_Prefer native dimensions" "Load and use dimensions from source file" 3 0) + (proc-arg 7 "GParamString" "gchararray" "password" "PDF password" "The password to decrypt the encrypted PDF file" 3 "") + (proc-arg 5 "GParamBoolean" "gboolean" "reverse-order" "Load in re_verse order" "Load PDF pages in reverse order" 3 0) + (proc-arg 0 "GimpParamInt32Array" "GimpInt32Array" "pages" "Pages" "The pages to load in the expected order" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "antialias" "Utiliser le _lissage" "Render texts with anti-aliasing" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "white-background" "_Fill transparent areas with white" "Render all pages as opaque by filling the background in white" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-pdf-export/file-pdf-export" 1769438854 + (proc-def "file-pdf-export" 1 + "Save files in PDF format" + "Saves files in Adobe's Portable Document Format. PDF is designed to be easily processed by a variety of different platforms, and is a distant cousin of PostScript." + "Barak Itkin, Lionel N., Jehan" + "Copyright Barak Itkin, Lionel N., Jehan" + "August 2009, 2017" + "PDF (Portable Document Format)" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "pdf") + (mime-types "application/pdf")) + "*" + 2147483647 + 12 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "vectorize" "Convertir si possible les images _bitmaps en images vectorielles" "Convert bitmaps to vector graphics where possible" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "ignore-hidden" "O_mit hidden layers and layers with zero opacity" "Non-visible layers will not be exported" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "apply-masks" "_Apply layer masks" "Apply layer masks before saving (Keeping the mask will not change the output, only the PDF structure)" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "layers-as-pages" "La_yers as pages" "Layers as pages (bottom layers first)." 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "reverse-order" "Re_verse order" "Reverse the pages order (top layers first)." 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "root-layers-only" "Roo_t layers only" "Only the root layers are considered pages" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "convert-text-layers" "Convert te_xt layers to image" "Convert text layers to raster graphics" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "fill-background-color" "_Fill transparent areas with background color" "Fill transparent areas with background color if layer has an alpha channel" 3 1)) + (proc-def "file-pdf-export-multi" 1 + "Save files in PDF format" + "Saves files in Adobe's Portable Document Format. PDF is designed to be easily processed by a variety of different platforms, and is a distant cousin of PostScript." + "Barak Itkin" + "Copyright Barak Itkin" + "August 2009" + "_Créer un PDF multipage…" + 0 + (icon icon-name -1 "") + "*" + 2147483647 + 7 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "images" "Images" "Input image for each page (An image can appear more than once)" 3 "GimpImage") + (proc-arg 5 "GParamBoolean" "gboolean" "vectorize" "Convertir si possible les images _bitmaps en images vectorielles" "Convert bitmaps to vector graphics where possible" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "ignore-hidden" "O_mit hidden layers and layers with zero opacity" "Non-visible layers will not be exported" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "apply-masks" "_Apply layer masks" "Apply layer masks before saving (Keeping the mask will not change the output, only the PDF structure)" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "fill-background-color" "_Fill transparent areas with background color" "Fill transparent areas with background color if layer has an alpha channel" 3 1) + (proc-arg 7 "GParamString" "gchararray" "uri" "Save to" "The URI of the file to save to" 3 ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-pcx/file-pcx" 1769438854 + (proc-def "file-pcx-load" 1 + "Loads files in Zsoft PCX file format" + "FIXME: write help for pcx_load" + "Francisco Bustamante & Nick Lamb" + "Nick Lamb " + "January 1997" + "Image ZSoft PCX" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "pcx,pcc") + (magics "0&,byte,10,2&,byte,1,3&,byte,>0,3,byte,<9") + (mime-types "image/x-pcx")) + "" + 2147483647 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 4 "GimpParamChoice" "gchararray" "override-palette" "_Palette Options" "Whether to use the built-in palette or a black and white palette for 1 bit images." 3 "use-built-in-palette" 2 "use-built-in-palette" 0 "Use PCX image's built-in palette" "" "use-bw-palette" 1 "Use black and white palette" "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-dcx-load" 1 + "Loads files in Zsoft DCX file format" + "FIXME: write help for dcx_load" + "Francisco Bustamante, Nick Lamb, Alex S." + "Alex S." + "2023" + "ZSoft DCX image" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "dcx") + (magics "0,string,h:") + (mime-types "image/x-dcx")) + "" + 2147483647 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 4 "GimpParamChoice" "gchararray" "override-palette" "_Palette Options" "Whether to use the built-in palette or a black and white palette for 1 bit images." 3 "use-built-in-palette" 2 "use-built-in-palette" 0 "Use PCX image's built-in palette" "" "use-bw-palette" 1 "Use black and white palette" "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-pcx-export" 1 + "Exports files in ZSoft PCX file format" + "FIXME: write help for pcx_export" + "Francisco Bustamante & Nick Lamb" + "Nick Lamb " + "January 1997" + "Image ZSoft PCX" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "pcx,pcc") + (mime-types "image/x-pcx")) + "INDEXED, RGB, GRAY" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-pat/file-pat" 1769438854 + (proc-def "file-pat-export" 1 + "Exports GIMP pattern file (.PAT)" + "New GIMP patterns can be created by exporting them in the appropriate place with this plug-in." + "Tim Newsome" + "Tim Newsome" + "1997" + "Motif GIMP" + 0 + (icon icon-name -1 "gimp-pattern") + (save-proc + (extensions "pat") + (mime-types "image/x-gimp-pat") + (handles-remote)) + "*" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 7 "GParamString" "gchararray" "description" "_Description" "Short description of the pattern" 3 "GIMP Pattern"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-openraster/file-openraster.py" 1769438854 + (proc-def "file-openraster-load-thumb" 1 + "loads a thumbnail from an OpenRaster (.ora) file" + "loads a thumbnail from an OpenRaster (.ora) file" + "Jon Nordby" + "Jon Nordby" + "2009" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-openraster-load" 1 + "load an OpenRaster (.ora) file" + "load an OpenRaster (.ora) file" + "Jon Nordby" + "Jon Nordby" + "2009" + "OpenRaster" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "ora") + (mime-types "image/openraster") + (thumb-loader "file-openraster-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-openraster-export" 1 + "export an OpenRaster (.ora) file" + "export an OpenRaster (.ora) file" + "Jon Nordby" + "Jon Nordby" + "2009" + "OpenRaster" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "ora")) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-mng/file-mng" 1769438854 + (proc-def "file-mng-export" 1 + "Saves images in the MNG file format" + "This plug-in saves images in the Multiple-image Network Graphics (MNG) format which can be used as a replacement for animated GIFs, and more." + "Mukund Sivaraman " + "Mukund Sivaraman " + "November 19, 2002" + "Animation MNG" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "mng") + (mime-types "image/x-mng")) + "*" + 2147483647 + 16 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "interlaced" "_Entrelacement" "Use interlacing" 3 0) + (proc-arg 1 "GParamInt" "gint" "png-compression" "_PNG compression level" "Niveau de compression PNG, choisissez un haut degré de compression pour des fichiers de petite taille" 3 0 9 9) + (proc-arg 6 "GParamDouble" "gdouble" "jpeg-quality" "JPEG compression _quality" "JPEG quality factor" 3 0 1 0.75) + (proc-arg 6 "GParamDouble" "gdouble" "jpeg-smoothing" "_JPEG smoothing factor" "JPEG smoothing factor" 3 0 1 0) + (proc-arg 5 "GParamBoolean" "gboolean" "loop" "L_oop" "(ANIMATED MNG) Loop infinitely" 3 1) + (proc-arg 1 "GParamInt" "gint" "default-delay" "Default fra_me delay" "(ANIMATED MNG) Default delay between frames in milliseconds" 3 1 2147483647 100) + (proc-arg 4 "GimpParamChoice" "gchararray" "default-chunks" "Default chunks t_ype" "(ANIMATED MNG) Default chunks type" 3 "png-delta" 4 "png-delta" 0 "PNG + delta PNG" "" "jng-delta" 1 "JNG + delta PNG" "" "all-png" 2 "Tout PNG" "" "all-jng" 3 "Tout JNG" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "default-dispose" "De_fault frame disposal" "(ANIMATED MNG) Default dispose type" 3 "combine" 2 "combine" 0 "Combiner" "" "replace" 1 "Remplacer" "") + (proc-arg 5 "GParamBoolean" "gboolean" "bkgd" "Enregistrer la couleur d’_arrière-plan" "Write bKGd (background color) chunk" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "gama" "Enregistrer le _gamma" "Write gAMA (gamma) chunk" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "phys" "Sa_ve resolution" "Write pHYs (image resolution) chunk" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "time" "Enregistrer la da_te de création" "Write tIME (creation time) chunk" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-jpegxl/file-jpegxl" 1769438854 + (proc-def "file-jpegxl-load" 1 + "Charge les fichiers au format JPEG XL" + "Charge les fichiers au format JPEG XL" + "Daniel Novomesky" + "(C) 2021 Daniel Novomesky" + "2021" + "Image JPEG XL" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "jxl") + (magics "0,string,\n,0,string,\\000\\000\\000\fJXL\\040\\015\\012\\012") + (mime-types "image/jxl")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-jpegxl-export" 1 + "Enregistre les fichiers au format JPEG XL" + "Enregistre les fichiers au format JPEG XL" + "Daniel Novomesky" + "(C) 2021 Daniel Novomesky" + "2021" + "Image JPEG XL" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "jxl") + (mime-types "image/jxl")) + "RGB*, GRAY*" + 2147483647 + 11 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "lossless" "_Sans perte" "Utiliser une compression sans perte" 3 0) + (proc-arg 6 "GParamDouble" "gdouble" "compression" "Co_mpression/maxError" "Max. butteraugli distance, lower = higher quality. Range: 0 .. 15. 1.0 = visually lossless." 3 0.10000000000000001 15 1) + (proc-arg 1 "GParamInt" "gint" "save-bit-depth" "Profondeur de _bits" "Profondeur de bits de l’image exportée" 3 8 16 8) + (proc-arg 4 "GimpParamChoice" "gchararray" "speed" "Effort/_Vitesse" "Réglage d’effort du codeur" 3 "squirrel" 9 "lightning" 1 "lightning (fastest)" "" "thunder" 2 "thunder" "" "falcon" 3 "falcon (faster)" "" "cheetah" 4 "cheetah" "" "hare" 5 "hare" "" "wombat" 6 "wombat" "" "squirrel" 7 "squirrel" "" "kitten" 8 "kitten" "" "tortoise" 9 "tortoise (slower)" "") + (proc-arg 5 "GParamBoolean" "gboolean" "cmyk" "Export as CMY_K" "Create a CMYK JPEG XL image using the soft-proofing color profile" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-exif" "Save Exi_f" "Toggle saving Exif data" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-xmp" "Save _XMP" "Toggle saving XMP data" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-jpeg/file-jpeg" 1769438854 + (proc-def "file-jpeg-load-thumb" 1 + "Loads a thumbnail from a JPEG image" + "Loads a thumbnail from a JPEG image, if one exists" + "Mukund Sivaraman , Sven Neumann " + "Mukund Sivaraman , Sven Neumann " + "November 15, 2004" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-jpeg-load" 1 + "Loads files in the JPEG file format" + "Loads files in the JPEG file format" + "Spencer Kimball, Peter Mattis & others" + "Spencer Kimball & Peter Mattis" + "1995-2007" + "Image JPEG" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "jpg,jpeg,jpe") + (magics "0,string,") + (mime-types "image/jpeg") + (thumb-loader "file-jpeg-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-jpeg-export" 1 + "Exports files in the JPEG file format" + "Exports files in the lossy, widely supported JPEG format" + "Spencer Kimball, Peter Mattis & others" + "Spencer Kimball & Peter Mattis" + "1995-2007" + "Image JPEG" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "jpg,jpeg,jpe") + (mime-types "image/jpeg")) + "RGB*, GRAY*" + 2147483647 + 19 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 6 "GParamDouble" "gdouble" "quality" "_Qualité" "Quality of exported image" 3 0 1 0.90000000000000002) + (proc-arg 6 "GParamDouble" "gdouble" "smoothing" "S_moothing" "Smoothing factor for exported image" 3 0 1 0) + (proc-arg 5 "GParamBoolean" "gboolean" "optimize" "Optimi_ze" "Use optimized tables during Huffman coding" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "progressive" "_Progressive" "Create progressive JPEG images" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "cmyk" "Export as CM_YK" "Create a CMYK JPEG image using the soft-proofing color profile" 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "sub-sampling" "_Sous-échantillonnage" "Sub-sampling type" 3 "sub-sampling-1x1" 4 "sub-sampling-1x1" 2 "4 :4 :4 (meilleure qualité)" "" "sub-sampling-2x1" 1 "4:2:2 (chroma halved horizontally)" "" "sub-sampling-1x2" 3 "4:4:0 (chroma halved vertically)" "" "sub-sampling-2x2" 0 "4 :2 :0 (quart de chrominance)" "") + (proc-arg 5 "GParamBoolean" "gboolean" "baseline" "Baseline" "Force creation of a baseline JPEG (non-baseline JPEGs can't be read by all decoders)" 3 1) + (proc-arg 1 "GParamInt" "gint" "restart" "Inter_valle (lignes MCU) :" "Interval of restart markers (in MCU rows, 0 = no restart markers)" 3 0 64 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "dct" "Méthode DC_T" "DCT method to use" 3 "integer" 3 "fixed" 1 "Entier rapide" "" "integer" 0 "Entier" "" "float" 2 "Virgule flottante" "") + (proc-arg 5 "GParamBoolean" "gboolean" "include-exif" "Save _Exif" "Save Exif (Exchangeable image file format) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-iptc" "Save _IPTC" "Save IPTC (International Press Telecommunications Council) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-xmp" "Save _XMP" "Save XMP (Extensible Metadata Platform) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-color-profile" "Save color _profile" "Save the ICC color profile as metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-thumbnail" "Save _thumbnail" "Save a smaller representation of the image as metadata" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "include-comment" "Save c_omment" "Save a comment as metadata" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-jp2-load/file-jp2-load" 1769438854 + (proc-def "file-jp2-load" 1 + "Loads JPEG 2000 images." + "The JPEG 2000 image loader." + "Aurimas Juška" + "Aurimas Juška, Florian Traverse" + "2009" + "Image JPEG 2000" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "jp2") + (magics "3,string,\fjP") + (mime-types "image/jp2")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-j2k-load" 1 + "Loads JPEG 2000 codestream." + "Loads JPEG 2000 codestream. If the color space is set to UNKNOWN (0), we will try to guess, which is only possible for few spaces (such as grayscale). Most such calls will fail. You are rather expected to know the color space of your data." + "Jehan" + "Jehan" + "2009" + "Codestream JPEG 2000" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "j2k,j2c,jpc") + (magics "0,string,OQ") + (mime-types "image/x-jp2-codestream")) + "" + 2147483647 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 4 "GimpParamChoice" "gchararray" "colorspace" "Color s_pace" "Color space" 3 "unknown" 6 "srgb" 1 "sRVB" "" "grayscale" 2 "Grayscale" "" "ycbcr" 3 "Y’CbCr" "" "xvycc" 4 "xvYCC" "" "cmyk" 5 "CMJN" "" "unknown" -1 "Inconnu" "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-ico/file-ico" 1769438854 + (proc-def "file-ico-load-thumb" 1 + "Loads a preview from a Windows ICO or CUR files" + "" + "Dom Lachowicz, Sven Neumann" + "Sven Neumann " + "2005" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-ani-load-thumb" 1 + "Loads a preview from a Windows ANI files" + "" + "Dom Lachowicz, Sven Neumann, James Huang, Alex S." + "Dom Lachowicz, Sven Neumann , James Huang, Alex S." + "2007-2022" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-ico-load" 1 + "Loads files of Windows ICO file format" + "Loads files of Windows ICO file format" + "Christian Kreibich " + "Christian Kreibich " + "2002" + "Icône Microsoft Windows" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (load-proc + (extensions "ico") + (mime-types "image/x-ico") + (thumb-loader "file-ico-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-cur-load" 1 + "Loads files of Windows CUR file format" + "Loads files of Windows CUR file format" + "Christian Kreibich , Nikc M." + "Christian Kreibich , Nikc M." + "2002-2022" + "Curseur Microsoft Windows" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (load-proc + (extensions "cur") + (mime-types "image/vnd.microsoft.icon") + (thumb-loader "file-ico-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-ani-load" 1 + "Loads files of Windows ANI file format" + "Loads files of Windows ANI file format" + "Christian Kreibich , James Huang, Alex S." + "Christian Kreibich , James Huang, Alex S." + "2007-2022" + "Microsoft Windows animated cursor" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (load-proc + (extensions "ani") + (magics "8,string,ACON") + (mime-types "application/x-navi-animation") + (thumb-loader "file-ani-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-ico-export" 1 + "Saves files in Windows ICO file format" + "Saves files in Windows ICO file format" + "Christian Kreibich " + "Christian Kreibich " + "2002" + "Icône Microsoft Windows" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (save-proc + (extensions "ico") + (mime-types "image/x-ico")) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3)) + (proc-def "file-cur-export" 1 + "Saves files in Windows CUR file format" + "Saves files in Windows CUR file format" + "Christian Kreibich , Nikc M." + "Christian Kreibich , Nikc M." + "2002-2022" + "Curseur Microsoft Windows" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (save-proc + (extensions "cur") + (mime-types "image/vnd.microsoft.icon")) + "*" + 2147483647 + 6 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 0 "GimpParamInt32Array" "GimpInt32Array" "hot-spot-x" "Hot spot X" "X coordinates of hot spot (one per layer)" 3) + (proc-arg 0 "GimpParamInt32Array" "GimpInt32Array" "hot-spot-y" "Hot spot Y" "Y coordinates of hot spot (one per layer)" 3)) + (proc-def "file-ani-export" 1 + "Saves files in Windows ANI file format" + "Saves files in Windows ANI file format" + "Christian Kreibich , James Huang, Alex S." + "Christian Kreibich , James Huang, Alex S." + "2007-2022" + "Microsoft Windows animated cursor" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (save-proc + (extensions "ani") + (mime-types "application/x-navi-animation")) + "*" + 2147483647 + 9 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 7 "GParamString" "gchararray" "cursor-name" "Cursor Name" "Cursor Name (Optional)" 3 "") + (proc-arg 7 "GParamString" "gchararray" "author-name" "Cursor Author" "Cursor Author (Optional)" 3 "") + (proc-arg 1 "GParamInt" "gint" "default-delay" "Default delay" "Default delay between frames in jiffies (1/60 of a second)" 3 0 2147483647 8) + (proc-arg 0 "GimpParamInt32Array" "GimpInt32Array" "hot-spot-x" "Hot spot X" "X coordinates of hot spot (one per layer)" 3) + (proc-arg 0 "GimpParamInt32Array" "GimpInt32Array" "hot-spot-y" "Hot spot Y" "Y coordinates of hot spot (one per layer)" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-icns/file-icns" 1769438854 + (proc-def "file-icns-load-thumb" 1 + "Loads a preview from an Apple Icon Image file" + "" + "Brion Vibber " + "Brion Vibber " + "2004" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-icns-load" 1 + "Loads files in Apple Icon Image format" + "Loads Apple Icon Image files." + "Brion Vibber " + "Brion Vibber " + "2004" + "Icns" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "icns") + (magics "0,string,icns") + (mime-types "image/x-icns") + (thumb-loader "file-icns-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-icns-export" 1 + "Saves files in Apple Icon Image file format" + "Saves files in Apple Icon Image file format" + "Brion Vibber " + "Brion Vibber " + "2004" + "Apple Icon Image" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (save-proc + (extensions "icns") + (mime-types "image/x-icns")) + "*" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "include-color-profile" "Save color _profile" "Save the ICC color profile as metadata" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-html-table/file-html-table" 1769438854 + (proc-def "file-html-table-export" 1 + "GIMP Table Magic" + "Allows you to draw an HTML table in GIMP. See help for more info." + "Daniel Dunbar" + "Daniel Dunbar" + "1998" + "Tableau HTML" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "html,htm") + (mime-types "text/html") + (handles-remote)) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-heif/file-heif" 1769438854 + (has-init)) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-header/file-header" 1769438854 + (proc-def "file-header-export" 1 + "Saves files as C unsigned character array" + "FIXME: write help" + "Spencer Kimball & Peter Mattis" + "Spencer Kimball & Peter Mattis" + "1997" + "En-tête de code source C" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "h") + (mime-types "image/x-chdr") + (handles-remote)) + "INDEXED, RGB" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-glob/file-glob" 1769438854 + (proc-def "file-glob" 1 + "Returns a list of matching filenames" + "This can be useful in scripts and other plug-ins (e.g., batch-conversion). See the glob(7) manpage for more info. Note however that this isn't a full-featured glob implementation. It only handles simple patterns like \"/home/foo/bar/*.jpg\"." + "Sven Neumann" + "Sven Neumann" + "2004" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 1 + (proc-arg 7 "GParamString" "gchararray" "pattern" "Pattern" "The glob pattern (in UTF-8 encoding)" 3 "") + (proc-arg 5 "GParamBoolean" "gboolean" "filename-encoding" "Filename encoding" "FALSE to return UTF-8 strings, TRUE to return strings in filename encoding" 3 0) + (proc-arg 0 "GParamBoxed" "GStrv" "files" "Files" "The list of matching filenames" 259))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-gih/file-gih" 1769438854 + (proc-def "file-gih-export" 1 + "Exports images in GIMP Brush Pipe format" + "This plug-in exports an image in the GIMP brush pipe format. For a colored brush pipe, RGBA layers are used, otherwise the layers should be grayscale masks. The image can be multi-layered, and additionally the layers can be divided into a rectangular array of brushes." + "Tor Lillqvist" + "Tor Lillqvist" + "1999" + "Brosse GIMP (animée)" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (save-proc + (extensions "gih") + (mime-types "image/x-gimp-gih") + (handles-remote)) + "RGB*, GRAY*" + 2147483647 + 11 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 1 "GParamInt" "gint" "spacing" "Spacing (_percent)" "Spacing of the brush" 3 1 1000 20) + (proc-arg 7 "GParamString" "gchararray" "description" "_Description" "Short description of the GIH brush pipe" 3 "GIMP Brush Pipe") + (proc-arg 1 "GParamInt" "gint" "cell-width" "Cell _width" "Width of the brush cells in pixels" 3 1 524288 1) + (proc-arg 1 "GParamInt" "gint" "cell-height" "Cell _height" "Height of the brush cells in pixels" 3 1 524288 1) + (proc-arg 1 "GParamInt" "gint" "num-cells" "_Number of cells" "Number of cells to cut up" 3 1 1000 1) + (proc-arg 0 "GParamBoxed" "GBytes" "ranks" "_Rank" "Ranks of the dimensions" 3) + (proc-arg 0 "GParamBoxed" "GStrv" "selection-modes" "Selection modes" "Selection modes" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-gif-load/file-gif-load" 1769438854 + (proc-def "file-gif-load-thumb" 1 + "Loads only the first frame of a GIF image, to be used as a thumbnail" + "" + "Sven Neumann" + "Sven Neumann" + "2006" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-gif-load" 1 + "Loads files of Compuserve GIF file format" + "" + "Spencer Kimball, Peter Mattis, Adam Moss, David Koblas" + "Spencer Kimball, Peter Mattis, Adam Moss, David Koblas" + "1995-2006" + "Image GIF" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "gif") + (magics "0,string,GIF8") + (mime-types "image/gif") + (thumb-loader "file-gif-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-gif-export/file-gif-export" 1769438854 + (proc-def "file-gif-export" 1 + "exports files in GIF file format" + "Export a file in GIF format, with possible animation, transparency, and comment. To export an animation, operate on a multi-layer file and give the 'as-animation' parameter as TRUE. The plug-in will interpret <50% alpha as transparent. When run non-interactively, the value for the comment is taken from the 'gimp-comment' parasite." + "Spencer Kimball, Peter Mattis, Adam Moss, David Koblas" + "Spencer Kimball, Peter Mattis, Adam Moss, David Koblas" + "1995-1997" + "Image GIF" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "gif") + (mime-types "image/gif") + (handles-remote)) + "INDEXED*, GRAY*" + 2147483647 + 12 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "interlace" "_Entrelacement" "Try to export as interlaced" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "loop" "Loop _Forever" "(animated gif) Loop infinitely" 3 1) + (proc-arg 1 "GParamInt" "gint" "number-of-repeats" "_Number of repeats" "(animated gif) Number of repeats (Ignored if 'loop' is TRUE)" 3 0 32766 0) + (proc-arg 1 "GParamInt" "gint" "default-delay" "_Delay between frames when unspecified" "(animated gif) Default delay between frames in milliseconds" 3 0 2147483647 100) + (proc-arg 4 "GimpParamChoice" "gchararray" "default-dispose" "Frame disposal _when unspecified" "(animated gif) Default disposal type" 3 "unspecified" 3 "unspecified" 0 "Peu importe" "" "combine" 1 "Calques cumulatifs (combiner)" "" "replace" 2 "Une image par calque (remplacer)" "") + (proc-arg 5 "GParamBoolean" "gboolean" "as-animation" "_As animation" "Export GIF as animation?" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "force-delay" "_Utiliser le délai saisi ci-dessus pour toutes les images" "(animated gif) Use specified delay for all frames" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "force-dispose" "Use dis_posal entered above for all frames" "(animated gif) Use specified disposal for all frames" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-gegl/file-gegl" 1769438854 + (proc-def "file-rgbe-load" 1 + "Load files in the RGBE file format" + "This procedure loads images in the RGBE format, using gegl:rgbe-load" + "" + "" + "" + "Radiance RVBE" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "hdr") + (magics "0,string,#?") + (mime-types "image/vnd.radiance")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-rgbe-export" 1 + "Saves files in the RGBE file format" + "This procedure exports images in the RGBE format, using gegl:rgbe-save" + "" + "" + "" + "Radiance RVBE" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "hdr") + (mime-types "image/vnd.radiance")) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3)) + (proc-def "file-exr-export" 1 + "Saves files in the OpenEXR file format" + "This procedure saves images in the OpenEXR format, using gegl:exr-save" + "" + "" + "" + "Image OpenEXR" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "exr") + (mime-types "image/x-exr")) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-gbr/file-gbr" 1769438854 + (proc-def "file-gbr-export" 1 + "Exports files in the GIMP brush file format" + "Exports files in the GIMP brush file format" + "Tim Newsome, Jens Lautenbacher, Sven Neumann" + "Tim Newsome, Jens Lautenbacher, Sven Neumann" + "1997-2000" + "Brosse GIMP" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (save-proc + (extensions "gbr") + (mime-types "image/x-gimp-gbr") + (handles-remote)) + "*" + 2147483647 + 6 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 1 "GParamInt" "gint" "spacing" "Sp_acing" "Spacing of the brush" 3 1 1000 10) + (proc-arg 7 "GParamString" "gchararray" "description" "_Description" "Short description of the brush" 3 "GIMP Brush"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-fli/file-fli" 1769438854 + (proc-def "file-fli-load" 1 + "Load FLI-movies" + "This is an experimental plug-in to handle FLI movies" + "Jens Ch. Restemeier" + "Jens Ch. Restemeier" + "1997" + "Animation Autodesk FLIC" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "fli,flc") + (mime-types "image/x-flic")) + "" + 2147483647 + 4 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "from-frame" "_From frame" "Load beginning from this frame" 3 -1 2147483647 -1) + (proc-arg 1 "GParamInt" "gint" "to-frame" "_To frame" "End loading with this frame" 3 -1 2147483647 -1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-fli-export" 1 + "Export FLI-movies" + "This is an experimental plug-in to handle FLI movies" + "Jens Ch. Restemeier" + "Jens Ch. Restemeier" + "1997" + "Animation Autodesk FLIC" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "fli,flc") + (mime-types "image/x-flic")) + "INDEXED, GRAY" + 2147483647 + 6 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 1 "GParamInt" "gint" "from-frame" "_From frame" "Export beginning from this frame" 3 -1 2147483647 -1) + (proc-arg 1 "GParamInt" "gint" "to-frame" "_To frame" "End exporting with this frame (or -1 for all frames)" 3 -1 2147483647 -1)) + (proc-def "file-fli-info" 1 + "Get information about a Fli movie" + "This is an experimental plug-in to handle FLI movies" + "Jens Ch. Restemeier" + "Jens Ch. Restemeier" + "1997" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 1 3 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The local file to get info about" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "width" "Width" "Width of one frame" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "height" "Height" "Height of one frame" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "frames" "Frames" "Number of frames" 3 0 2147483647 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-faxg3/file-faxg3" 1769438854 + (proc-def "file-faxg3-load" 1 + "Loads g3 fax files" + "This plug-in loads Fax G3 Image files." + "Jochen Friedrich" + "Jochen Friedrich, Gert Doering, Spencer Kimball & Peter Mattis" + "" + "Image fax G3" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "g3") + (magics "4,string,Research") + (mime-types "image/g3-fax")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-farbfeld/file-farbfeld" 1769438854 + (proc-def "file-farbfeld-load" 1 + "Load file in the Farbfeld file format" + "Load file in the Farbfeld file format" + "Alex S." + "Alex S." + "2023" + "Farbfeld" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "ff") + (magics "0,string,farbfeld")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-farbfeld-export" 1 + "Export image in the Farbfeld file format" + "Export image in the Farbfeld file format" + "Alex S." + "Alex S." + "2023" + "Farbfeld" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "ff")) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-exr/file-exr" 1769438854 + (proc-def "file-exr-load" 1 + "Loads files in the OpenEXR file format" + "This plug-in loads OpenEXR files. " + "Dominik Ernst , Mukund Sivaraman " + "Dominik Ernst , Mukund Sivaraman " + "" + "Image OpenEXR" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "exr") + (magics "0,long,0x762f3101") + (mime-types "image/x-exr")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-dicom/file-dicom" 1769438854 + (proc-def "file-dicom-load" 1 + "Loads files of the dicom file format" + "Load a file in the DICOM standard format. The standard is defined at http://medical.nema.org/. The plug-in currently only supports reading images with uncompressed pixel sections." + "Dov Grobgeld" + "Dov Grobgeld " + "2003" + "Image DICOM" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "dcm,dicom") + (magics "128,string,DICM") + (mime-types "image/x-dcm")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-dicom-export" 1 + "Save file in the DICOM file format" + "Save an image in the medical standard DICOM image formats. The standard is defined at http://medical.nema.org/. The file format is defined in section 10 of the standard. The files are saved uncompressed and the compulsory DICOM tags are filled with default dummy values." + "Dov Grobgeld" + "Dov Grobgeld " + "2003" + "Image DICOM (Digital Imaging and Communications in Medicine)" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "dcm,dicom") + (mime-types "image/x-dcm")) + "RGB, GRAY" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-desktop-link/file-desktop-link" 1769438854 + (proc-def "file-desktop-link-load" 1 + "Follows a link to an image in a .desktop file" + "Opens a .desktop file and if it is a link, it asks GIMP to open the file the link points to." + "Sven Neumann" + "Sven Neumann" + "2006" + "Raccourci de bureau" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "desktop")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-dds/file-dds" 1769438854 + (proc-def "file-dds-load" 1 + "Loads files in DDS image format" + "Loads files in DDS image format" + "Shawn Kirst" + "Shawn Kirst" + "2008" + "Image DDS" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "dds") + (magics "0,string,DDS") + (mime-types "image/dds")) + "" + 2147483647 + 4 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 5 "GParamBoolean" "gboolean" "load-mipmaps" "Load _mipmaps" "Load mipmaps if present" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "flip-image" "Flip image _vertically" "Flip the image vertically on import" 3 0) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-dds-export" 1 + "Saves files in DDS image format" + "Saves files in DDS image format" + "Shawn Kirst" + "Shawn Kirst" + "2008" + "Image DDS" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "dds") + (mime-types "image/dds")) + "INDEXED, GRAY, RGB" + 2147483647 + 19 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "compression-format" "Compressio_n" "Compression format" 3 "none" 11 "none" 0 "Aucun" "" "bc1" 1 "BC1 / DXT1" "" "bc2" 2 "BC2 / DXT3" "" "bc3, " 3 "BC3 / DXT5" "" "bc3n" 4 "BC3nm / DXT5nm" "" "bc4" 5 "BC4 / ATI1 (3Dc+)" "" "bc5" 6 "BC5 / ATI2 (3Dc)" "" "rxgb" 8 "RXGB (DXT5)" "" "aexp" 9 "Alpha Exponent (DXT5)" "" "ycocg" 10 "YCoCg (DXT5)" "" "ycocgs" 11 "YCoCg scaled (DXT5)" "") + (proc-arg 5 "GParamBoolean" "gboolean" "perceptual-metric" "Use percept_ual error metric" "Use a perceptual error metric during compression" 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "format" "_Format" "Pixel format" 3 "default" 15 "default" 0 "Par défaut" "" "rgb8" 1 "RGB8" "" "rgba8" 2 "RGBA8" "" "bgr8" 3 "BGR8" "" "abgr8, " 4 "ABGR8" "" "r5g6b5" 5 "R5G6B5" "" "rgba4" 6 "RGBA4" "" "rgb5a1" 7 "RGB5A1" "" "rgb10a2" 8 "RGB10A2" "" "r3g3b2" 9 "R3G3B2" "" "a8" 10 "A8" "" "l8" 11 "L8" "" "l8a8" 12 "L8A8" "" "aexp" 13 "AEXP" "" "ycocg" 14 "YCOCG" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "save-type" "Sav_e type" "How to save the image" 3 "layer" 5 "layer" 0 "Selected layer" "" "canvas" 4 "All visible layers" "" "cube" 1 "As cube map" "" "volume" 2 "As volume map" "" "array" 3 "As texture array" "") + (proc-arg 5 "GParamBoolean" "gboolean" "flip-image" "Flip image _vertically on export" "Flip the image vertically on export" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "transparent-color" "Set _transparent color" "Make an indexed color transparent" 3 0) + (proc-arg 1 "GParamInt" "gint" "transparent-index" "Transparent inde_x" "Index of transparent color or -1 to disable (for indexed images only)." 3 0 255 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "mipmaps" "_Mipmaps" "How to handle mipmaps" 3 "none" 3 "none" 0 "No mipmaps" "" "generate" 1 "Generate mipmaps" "" "existing" 2 "Use existing mipmaps" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "mipmap-filter" "F_ilter" "Filtering to use when generating mipmaps" 3 "default" 10 "default" 0 "Par défaut" "" "nearest" 1 "Nearest" "" "box" 2 "Parallélépipède rectangle (boîte)" "" "triangle" 3 "Triangle" "" "quadratic" 4 "Quadratic" "" "bspline" 5 "B-Spline" "" "mitchell" 6 "Mitchell" "" "catrom" 7 "Catmull-Rom" "" "lanczos" 8 "Lanczos" "" "kaiser" 9 "Kaiser" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "mipmap-wrap" "_Wrap mode" "Wrap mode to use when generating mipmaps" 3 "default" 4 "default" 0 "Par défaut" "" "mirror" 1 "Mirror" "" "repeat" 2 "Repeat" "" "clamp" 3 "Clamp" "") + (proc-arg 5 "GParamBoolean" "gboolean" "gamma-correct" "Appliquer une correction _gamma" "Use gamma correct mipmap filtering" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "srgb" "Use sRG_B colorspace" "Use sRGB colorspace for gamma correction" 3 0) + (proc-arg 6 "GParamDouble" "gdouble" "gamma" "_Gamma" "Gamma value to use for gamma correction (e.g. 2.2)" 3 0 10 0) + (proc-arg 5 "GParamBoolean" "gboolean" "preserve-alpha-coverage" "Preserve al_pha test coverage" "Preserve alpha test coverage for alpha channel maps" 3 0) + (proc-arg 6 "GParamDouble" "gdouble" "alpha-test-threshold" "Alp_ha test threshold" "Alpha test threshold value for which alpha test coverage should be preserved" 3 0 1 0.5))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-csource/file-csource" 1769438854 + (proc-def "file-csource-export" 1 + "Dump image data in RGB(A) format for C source" + "Dump image data in RGB(A) format for C source" + "Tim Janik" + "Tim Janik" + "1999" + "Code source C" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "c") + (mime-types "image/x-csrc") + (handles-remote)) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-compressor/file-compressor" 1769438854 + (proc-def "file-gz-load" 1 + "loads files compressed with gzip" + "This procedure loads files in the gzip compressed format." + "Daniel Risacher" + "Daniel Risacher, Spencer Kimball and Peter Mattis" + "1995-1997" + "archive gzip" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "xcf.gz,xcfgz") + (magics "0,string,\037") + (mime-types "application/x-gzip")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-gz-export" 1 + "saves files compressed with gzip" + "This procedure saves files in the gzip compressed format." + "Daniel Risacher" + "Daniel Risacher, Spencer Kimball and Peter Mattis" + "1995-1997" + "archive gzip" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "xcf.gz,xcfgz") + (mime-types "application/x-gzip")) + "RGB*, GRAY*, INDEXED*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3)) + (proc-def "file-bz2-load" 1 + "loads files compressed with bzip2" + "This procedure loads files in the bzip2 compressed format." + "Daniel Risacher" + "Daniel Risacher, Spencer Kimball and Peter Mattis" + "1995-1997" + "archive bzip" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "xcf.bz2,xcfbz2") + (magics "0,string,BZh") + (mime-types "application/x-bzip")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-bz2-export" 1 + "saves files compressed with bzip2" + "This procedure saves files in the bzip2 compressed format." + "Daniel Risacher" + "Daniel Risacher, Spencer Kimball and Peter Mattis" + "1995-1997" + "archive bzip" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "xcf.bz2,xcfbz2") + (mime-types "application/x-bzip")) + "RGB*, GRAY*, INDEXED*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3)) + (proc-def "file-xz-load" 1 + "loads files compressed with xz" + "This procedure loads files in the xz compressed format." + "Daniel Risacher" + "Daniel Risacher, Spencer Kimball and Peter Mattis" + "1995-1997" + "archive xz" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "xcf.xz,xcfxz") + (magics "0,string,7zXZ") + (mime-types "application/x-xz")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-xz-export" 1 + "saves files compressed with xz" + "This procedure saves files in the xz compressed format." + "Daniel Risacher" + "Daniel Risacher, Spencer Kimball and Peter Mattis" + "1995-1997" + "archive xz" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "xcf.xz,xcfxz") + (mime-types "application/x-xz")) + "RGB*, GRAY*, INDEXED*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-cel/file-cel" 1769438854 + (proc-def "file-cel-load" 1 + "Loads files in KISS CEL file format" + "This plug-in loads individual KISS cell files." + "Nick Lamb" + "Nick Lamb " + "May 1998" + "KISS CEL" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "cel") + (magics "0,string,KiSS\\040")) + "" + 2147483647 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 13 "GimpParamFile" "GFile" "palette-file" "_Palette file" "KCF file to load palette from" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-cel-export" 1 + "Exports files in KISS CEL file format" + "This plug-in exports individual KISS cell files." + "Nick Lamb" + "Nick Lamb " + "May 1998" + "KISS CEL" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "cel") + (handles-remote)) + "RGB*, INDEXED*" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 13 "GimpParamFile" "GFile" "palette-file" "_Palette file" "File to save palette to" 3 1 0 ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-bmp/file-bmp" 1769438854 + (proc-def "file-bmp-load" 1 + "Loads files of Windows BMP file format" + "Loads files of Windows BMP file format" + "Alexander Schulz" + "Alexander Schulz" + "1997" + "Image Windows BMP" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "bmp") + (magics "0,string,BM") + (mime-types "image/bmp")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-bmp-export" 1 + "Saves files in Windows BMP file format" + "Saves files in Windows BMP file format" + "Alexander Schulz" + "Alexander Schulz" + "1997" + "Image Windows BMP" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "bmp") + (mime-types "image/bmp")) + "INDEXED, GRAY, RGB*" + 2147483647 + 7 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "use-rle" "Ru_n-Length Encoded" "Use run-length-encoding compression (only valid for 4 and 8-bit indexed images)" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "write-color-space" "_Inscrire l’information d’espace couleur" "Whether or not to write BITMAPV5HEADER color space data" 3 1) + (proc-arg 4 "GimpParamChoice" "gchararray" "rgb-format" "R_GB format" "Export format for RGB images" 3 "rgb-888" 6 "rgb-565" 0 "16 bits (R5 V6 B5)" "" "rgba-5551" 1 "16 bits (A1 R5 V5 B5)" "" "rgb-555" 2 "16 bits (X1 R5 V5 B5)" "" "rgb-888" 3 "24 bits (R8 V8 B8)" "" "rgba-8888" 4 "32 bits (A8 R8 V8 B8)" "" "rgbx-8888" 5 "32 bits (X8 R8 V8 B8)" ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-aa/file-aa" 1769438854 + (proc-def "file-aa-export" 1 + "Saves grayscale image in various text formats" + "This plug-in uses aalib to save grayscale image as ascii art into a variety of text formats" + "Tim Newsome " + "Tim Newsome " + "1997" + "Art ASCII" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "txt,ansi,text") + (mime-types "text/plain")) + "*" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 1 "GParamInt" "gint" "file-type" "_Format" "File type to use" 3 0 11 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/destripe/destripe" 1769438854 + (proc-def "plug-in-destripe" 1 + "Supprime les traînées verticales sur l’image" + "This plug-in tries to remove vertical stripes from an image." + "Marc Lehmann " + "Marc Lehmann " + "0.2" + "Anti-_traînées…" + 1 + (menu-path "/Colors/Tone Mapping") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "avg-width" "_Largeur" "Averaging filter width" 3 2 100 36) + (proc-arg 5 "GParamBoolean" "gboolean" "create-histogram" "Créer un _histogramme" "Output a histogram" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/despeckle/despeckle" 1769438854 + (proc-def "plug-in-despeckle" 1 + "Supprime les bruits parasites de l’image" + "This plug-in selectively performs a median or adaptive box filter on an image." + "Michael Sweet " + "Copyright 1997-1998 by Michael Sweet" + "May 2010" + "Anti-_parasites…" + 1 + (menu-path "/Filters/Enhance") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 7 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "radius" "R_adius" "Filter box radius" 3 1 30 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "type" "_Filter Type" "Filter type" 3 "adaptive" 4 "median" 0 "Médian" "" "adaptive" 1 "Adaptatif" "" "recursive-median" 2 "Recursive-Median" "" "recursive-adaptive" 3 "Recursive-Adaptive" "") + (proc-arg 1 "GParamInt" "gint" "black" "_Black level" "Black level" 3 -1 255 7) + (proc-arg 1 "GParamInt" "gint" "white" "_White level" "White level" 3 0 256 248))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/depth-merge/depth-merge" 1769438854 + (proc-def "plug-in-depth-merge" 1 + "Combine deux images en utilisant les cartes de profondeur (z-buffers)" + "Taking as input two full-color, full-alpha images and two corresponding grayscale depth maps, this plug-in combines the images based on which is closer (has a lower depth map value) at each point." + "Sean Cier" + "Sean Cier" + "August 1998" + "_Superposer selon profondeur…" + 1 + (menu-path "/Filters/Combine") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 11 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "source-1" "Source _1" "Source 1" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "depth-map-1" "_Depth map 1" "Depth map 1" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "source-2" "Source _2" "Source 2" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "depth-map-2" "Depth _map 2" "Depth map 2" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "overlap" "O_verlap" "Overlap" 3 0 2 0) + (proc-arg 6 "GParamDouble" "gdouble" "offset" "O_ffset" "Depth relative offset" 3 -1 1 0) + (proc-arg 6 "GParamDouble" "gdouble" "scale-1" "Sc_ale 1" "Depth relative scale 1" 3 -1 1 1) + (proc-arg 6 "GParamDouble" "gdouble" "scale-2" "Scal_e 2" "Depth relative scale 2" 3 -1 1 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/decompose/decompose" 1769438854 + (proc-def "plug-in-decompose" 1 + "Décompose une image en composants séparés de canaux de couleur" + "This function creates new gray images with different channel information in each of them" + "Peter Kirchgessner" + "Peter Kirchgessner, Clarence Risher" + "1997" + "_Décomposer…" + 1 + (menu-path "/Colors/Components") + (icon icon-name -1 "") + "RGB*" + 1 + 6 4 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 4 "GimpParamChoice" "gchararray" "decompose-type" "Color _model" "The model to decompose to" 3 "rgb" 12 "rgb" 0 "RVB" "" "rgba" 1 "RVBA" "" "alpha" 2 "Alpha" "" "hsv" 3 "TSV" "" "hsl" 4 "TSL" "" "cmyk" 5 "CMJN" "" "lab" 6 "LAB" "" "lch" 7 "LCH" "" "ycbcr470" 8 "YCbCr ITU R470" "" "ycbcr709" 9 "YCbCr ITU R709" "" "ycbcr470f" 10 "YCbCr ITU R470 256" "" "ycbcr709f" 11 "YCbCr ITU R709 256" "") + (proc-arg 5 "GParamBoolean" "gboolean" "layers-mode" "Décomposer en ca_lques" "Create channels as layers in a single image" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "use-registration" "_Arrière-plan comme couleur de recalage" "When enabled, pixels in the foreground color will appear black in all output images. This can be used for things like crop marks that have to show up on all channels." 3 0) + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image-1" "New image 1" "Output gray image 1" 3 0) + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image-2" "New image 2" "Output gray image 2 (N/A for single channel extract)" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image-3" "New image 3" "Output gray image 3 (N/A for single channel extract)" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image-4" "New image 4" "Output gray image 4 (N/A for single channel extract)" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/curve-bend/curve-bend" 1769438854 + (proc-def "plug-in-curve-bend" 1 + "Déforme l’image en utilisant deux courbes de contrôle" + "This plug-in bends the active layer. If there is a current selection it is copied to floating selection and the curve_bend distortion is done on the floating selection. If work_on_copy parameter is TRUE, the curve_bend distortion is done on a copy of the active layer (or floating selection). The upper and lower edges are bent in shape of 2 spline curves. Both (upper and lower) curves are determined by up to 17 points or by 256 Y-Values if curve_type == 1 (freehand mode). If rotation is not 0, the layer is rotated before and rotated back after the bend operation. This enables bending in other directions than vertical. Bending usually changes the size of the handled layer. This plug-in sets the offsets of the handled layer to keep its center at the same position." + "Wolfgang Hofer (hof@hotbot.com)" + "Wolfgang Hofer" + "v1.3.18 (2003/08/26)" + "_Courber…" + 1 + (menu-path "/Filters/Distorts") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 15 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 6 "GParamDouble" "gdouble" "rotation" "Rotat_e" "Direction {angle 0 to 360 degree } of the bend effect" 3 0 360 0) + (proc-arg 5 "GParamBoolean" "gboolean" "smoothing" "_Adoucissement" "Smoothing" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "antialias" "_Lissage" "Antialias" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "work-on-copy" "Travailler sur une co_pie" "Copy the drawable and bend the copy" 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "curve-type" "Cur_ve Type" "Whether to use Smooth (17 points) or Freehand (256 points) to draw the curve" 3 "smooth" 2 "smooth" 0 "Smooth" "" "freehand" 1 "Freehand" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "curve-border" "Curve for _Border" "Choose the active border line to edit" 3 "upper" 2 "upper" 0 "Upper" "" "lower" 1 "Lower" "") + (proc-arg 0 "GimpParamDoubleArray" "GimpDoubleArray" "upper-point-x" "Upper point X" "Array of 17 x point coords { 0.0 <= x <= 1.0 or -1 for unused point }" 3) + (proc-arg 0 "GimpParamDoubleArray" "GimpDoubleArray" "upper-point-y" "Upper point Y" "Array of 17 y point coords { 0.0 <= y <= 1.0 or -1 for unused point }" 3) + (proc-arg 0 "GimpParamDoubleArray" "GimpDoubleArray" "lower-point-x" "Lower point X" "Array of 17 x point coords { 0.0 <= x <= 1.0 or -1 for unused point }" 3) + (proc-arg 0 "GimpParamDoubleArray" "GimpDoubleArray" "lower-point-y" "Lower point Y" "Array of 17 y point coords { 0.0 <= y <= 1.0 or -1 for unused point }" 3) + (proc-arg 0 "GParamBoxed" "GBytes" "upper-val-y" "Upper val Y" "Array of 256 y freehand coords { 0 <= y <= 255 }" 3) + (proc-arg 0 "GParamBoxed" "GBytes" "lower-val-y" "Lower val Y" "Array of 256 y freehand coords { 0 <= y <= 255 }" 3) + (proc-arg 9 "GimpParamLayer" "GimpLayer" "bent-layer" "Bent layer" "The transformed layer" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/crop-zealous/crop-zealous" 1769438854 + (proc-def "plug-in-zealouscrop" 1 + "Découpage automatique des espaces inutilisés sur les bords et au milieu" + "" + "Adam D. Moss" + "Adam D. Moss" + "1997" + "Découpage _futé" + 1 + (menu-path "/Image/[Crop]") + (icon icon-name -1 "") + "*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/contrast-retinex/contrast-retinex" 1769438854 + (proc-def "plug-in-retinex" 1 + "Améliore le contraste en utilisant la méthode Retinex" + "The Retinex Image Enhancement Algorithm is an automatic image enhancement method that enhances a digital image in terms of dynamic range compression, color independence from the spectral distribution of the scene illuminant, and color/lightness rendition." + "Fabien Pelisson" + "Fabien Pelisson" + "2003" + "_Retinex…" + 1 + (menu-path "/Colors/Tone Mapping") + (icon icon-name -1 "") + "RGB*" + 1 + 7 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "scale" "Scal_e" "Biggest scale value" 3 16 250 240) + (proc-arg 1 "GParamInt" "gint" "nscales" "Scale _division" "Number of scales" 3 0 8 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "scales-mode" "Le_vel" "Retinex distribution through scales" 3 "uniform" 3 "uniform" 0 "Identique" "" "low" 1 "Bas" "" "high" 2 "Haut" "") + (proc-arg 6 "GParamDouble" "gdouble" "cvar" "Dy_namic" "Variance value" 3 0 4 1.2))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/compose/compose" 1769438854 + (proc-def "plug-in-compose" 1 + "Crée une image en utilisant comme canaux de couleur de multiples images grises" + "This function creates a new image from multiple gray images" + "Peter Kirchgessner" + "Peter Kirchgessner (peter@kirchgessner.net)" + "1997" + "C_omposer…" + 1 + (menu-path "/Colors/Components") + (icon icon-name -1 "") + "GRAY*" + 13 + 7 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 9 "GimpParamImage" "GimpImage" "image-2" "Image 2" "Second input image" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image-3" "Image 3" "Third input image" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image-4" "Image 4" "Fourth input image" 3 1) + (proc-arg 4 "GimpParamChoice" "gchararray" "compose-type" "Color _model" "What to compose: \"RGB\", \"RGBA\", \"HSV\", \"HSL\", \"CMYK\", \"LAB\", \"LCH\", \"YCbCr_ITU_R470\", \"YCbCr_ITU_R709\", \"YCbCr_ITU_R470_256\", \"YCbCr_ITU_R709_256\"" 3 "rgb" 11 "rgb" 0 "RVB" "" "rgba" 1 "RVBA" "" "hsv" 2 "TSV" "" "hsl" 3 "TSL" "" "cmyk" 4 "CMJN" "" "lab" 5 "LAB" "" "lch" 6 "LCH" "" "ycbcr470" 7 "YCbCr ITU R470" "" "ycbcr709" 8 "YCbCr ITU R709" "" "ycbcr470f" 9 "YCbCr ITU R470 256" "" "ycbcr709f" 10 "YCbCr ITU R709 256" "") + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image" "New image" "Output image" 3 0)) + (proc-def "plug-in-drawable-compose" 1 + "Compose an image from multiple drawables of gray images" + "This function creates a new image from multiple drawables of gray images" + "Peter Kirchgessner" + "Peter Kirchgessner (peter@kirchgessner.net)" + "1998" + "" + 0 + (icon icon-name -1 "") + "GRAY*" + 1 + 7 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "drawable-2" "Drawable 2" "Second input drawable" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "drawable-3" "Drawable 3" "Third input drawable" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "drawable-4" "Drawable 4" "Fourth input drawable" 3 1) + (proc-arg 4 "GimpParamChoice" "gchararray" "compose-type" "Color _model" "What to compose: \"RGB\", \"RGBA\", \"HSV\", \"HSL\", \"CMYK\", \"LAB\", \"LCH\", \"YCbCr_ITU_R470\", \"YCbCr_ITU_R709\", \"YCbCr_ITU_R470_256\", \"YCbCr_ITU_R709_256\"" 3 "rgb" 11 "rgb" 0 "RVB" "" "rgba" 1 "RVBA" "" "hsv" 2 "TSV" "" "hsl" 3 "TSL" "" "cmyk" 4 "CMJN" "" "lab" 5 "LAB" "" "lch" 6 "LCH" "" "ycbcr470" 7 "YCbCr ITU R470" "" "ycbcr709" 8 "YCbCr ITU R709" "" "ycbcr470f" 9 "YCbCr ITU R470 256" "" "ycbcr709f" 10 "YCbCr ITU R709 256" "") + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image" "New image" "Output image" 3 0)) + (proc-def "plug-in-recompose" 1 + "Recompose une image précédemment décomposée" + "This function recombines the grayscale layers produced by Decompose into a single RGB or RGBA layer, and replaces the originally decomposed layer with the result." + "Bill Skaggs" + "Bill Skaggs" + "2004" + "R_ecomposer" + 1 + (menu-path "/Colors/Components") + (icon icon-name -1 "") + "GRAY*" + 13 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/colorxhtml/colorxhtml.py" 1769438854 + (proc-def "file-colorxhtml-export" 1 + "Enregistrer en texte HTML coloré" + "Saves the image as colored XHTML text (based on Perl version by Marc Lehmann)" + "Manish Singh and Carol Spears" + "(c) GPL V3.0 or later" + "2003" + "Texte HTML coloré" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "html,xhtml")) + "RGB" + 2147483647 + 8 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "source-file" "Rea_d characters from file" "Read characters from file, if true, or use text entry" 3 0) + (proc-arg 7 "GParamString" "gchararray" "characters" "Charac_ters" "Characters that will be used as colored pixels." 3 "foo") + (proc-arg 1 "GParamInt" "gint" "font-size" "_Taille de police en pixels" "Font size in pixels" 3 5 100 10) + (proc-arg 5 "GParamBoolean" "gboolean" "separate" "É_crire séparément un fichier CSS" "Write a separate CSS file" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/colormap-remap/colormap-remap" 1769438854 + (proc-def "plug-in-colormap-swap" 1 + "Échange deux couleurs dans la palette" + "This procedure takes an indexed image and lets you swap the positions of two colors in the colormap without visually changing the image." + "Mukund Sivaraman " + "Mukund Sivaraman " + "June 2006" + "É_changer des couleurs" + 0 + (icon icon-name -1 "gimp-colormap") + "INDEXED*" + 13 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "index1" "Index 1" "First index in the colormap" 3 0 255 0) + (proc-arg 1 "GParamInt" "gint" "index2" "Index 2" "Second (other) index in the colormap" 3 0 255 0)) + (proc-def "plug-in-colormap-remap" 1 + "Réorganise la palette des couleurs" + "This procedure takes an indexed image and lets you alter the positions of colors in the colormap without visually changing the image." + "Mukund Sivaraman " + "Mukund Sivaraman " + "June 2006" + "_Réorganiser la palette des couleurs…" + 2 + (menu-path "/Colors/Map/[Colormap]") + (menu-path "/Colormap Menu") + (icon icon-name -1 "gimp-colormap") + "INDEXED*" + 13 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 0 "GParamBoxed" "GBytes" "map" "Map" "Remap array for the colormap" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/cml-explorer/cml-explorer" 1769438854 + (proc-def "plug-in-cml-explorer" 1 + "Crée des motifs abstraits de Coupled-Map Lattice" + "Make an image of Coupled-Map Lattice (CML). CML is a kind of Cellular Automata on continuous (value) domain. In GIMP_RUN_NONINTERACTIVE, the name of a parameter file is passed as the 4th arg. You can control CML_explorer via parameter file." + "Shuji Narazaki (narazaki@InetQ.or.jp); http://www.inetq.or.jp/~narazaki/TheGIMP/" + "Shuji Narazaki" + "1997" + "Explorateur _CML…" + 1 + (menu-path "/Filters/Render/Pattern") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 13 "GimpParamFile" "GFile" "parameter-file" "Parameter File" "The parameter file from which CML_explorer makes an image. This argument is only used in non-interactive runs." 3 0 0 ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/checkerboard/checkerboard" 1769438854 + (proc-def "plug-in-checkerboard" 1 + "Crée un motif damier" + "More here later" + "Brent Burton & the Edward Blevins" + "Brent Burton & the Edward Blevins" + "1997" + "Da_mier (ancien)…" + 1 + (menu-path "/Filters/Render/Pattern") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 5 "GParamBoolean" "gboolean" "psychobilly" "_Boursouflure" "Render a psychobilly checkerboard" 3 0) + (proc-arg 1 "GParamInt" "gint" "check-size" "_Taille" "Size of the checks" 3 1 524288 10))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/busy-dialog/busy-dialog" 1769438854 + (proc-def "plug-in-busy-dialog" 1 + "Show a dialog while waiting for an operation to finish" + "Used by GIMP to display a dialog, containing a spinner and a custom message, while waiting for an ongoing operation to finish. Optionally, the dialog may provide a \"Cancel\" button, which can be used to cancel the operation." + "Ell" + "Ell" + "2018" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0) + (proc-arg 1 "GParamInt" "gint" "read-fd" "The read file descriptor" "The read file descriptor" 515 -2147483648 2147483647 0) + (proc-arg 1 "GParamInt" "gint" "write-fd" "The write file descriptor" "The write file descriptor" 515 -2147483648 2147483647 0) + (proc-arg 7 "GParamString" "gchararray" "message" "The message" "The message" 515 "") + (proc-arg 5 "GParamBoolean" "gboolean" "cancelable" "Whether the dialog is cancelable" "Whether the dialog is cancelable" 515 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/border-average/border-average" 1769438854 + (proc-def "plug-in-borderaverage" 1 + "Fixe l’arrière-plan à la couleur moyenne du bord de l’image" + "" + "Philipp Klaus" + "Internet Access AG" + "1998" + "Moyenne du _bord…" + 1 + (menu-path "/Colors/Info") + (icon icon-name -1 "") + "RGB*" + 1 + 5 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "thickness" "_Thickness" "Border size to take in count" 3 0 2147483647 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "bucket-exponent" "Bucket Si_ze" "Bits for bucket size" 3 "levels-16" 9 "levels-1" 0 "1" "" "levels-2" 1 "2" "" "levels-4" 2 "4" "" "levels-8" 3 "8" "" "levels-16" 4 "16" "" "levels-32" 5 "32" "" "levels-64" 6 "64" "" "levels-128" 7 "128" "" "levels-256" 8 "256" "") + (proc-arg 8 "GimpParamColor" "GeglColor" "borderaverage" "The average color of the specified border." "The average color of the specified border." 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/blinds/blinds" 1769438854 + (proc-def "plug-in-blinds" 1 + "Simule une image peinte sur les stores d’une fenêtre" + "More here later" + "Andy Thomas" + "Andy Thomas" + "1997" + "_Fenêtre avec stores…" + 1 + (menu-path "/Filters/Distorts") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 7 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "angle-displacement" "_Displacement" "Angle of Displacement" 3 0 90 30) + (proc-arg 1 "GParamInt" "gint" "num-segments" "_Number of segments" "Number of segments in blinds" 3 1 1024 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "orientation" "Orient_ation" "The orientation" 3 "horizontal" 2 "horizontal" 0 "Horizontal" "" "vertical" 1 "Vertical" "") + (proc-arg 5 "GParamBoolean" "gboolean" "bg-transparent" "_Transparent" "Background transparent" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/animation-play/animation-play" 1769438854 + (proc-def "plug-in-animationplay" 1 + "Preview a GIMP layer-based animation" + "" + "Adam D. Moss " + "Adam D. Moss " + "1997, 1998..." + "_Playback..." + 1 + (menu-path "/Filters/Animation/") + (icon icon-name -1 "media-playback-start") + "*" + 13 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/animation-optimize/animation-optimize" 1769438854 + (proc-def "plug-in-animationoptimize" 1 + "Modifie l’image pour réduire sa taille en enregistrant une animation GIF" + "This procedure applies various optimizations to a GIMP layer-based animation in an attempt to reduce the final file size. If a frame of theanimation can use the 'combine' mode, this procedure attempts to maximize the number of adjacent pixels having the same color, whichimproves the compression for some image formats such as GIF or MNG." + "Adam D. Moss " + "Adam D. Moss " + "1997-2003" + "Optimiser (pour _GIF)" + 1 + (menu-path "/Filters/Animation") + (icon icon-name -1 "") + "*" + 13 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 9 "GimpParamImage" "GimpImage" "result" "Result" "Resulting image" 3 0)) + (proc-def "plug-in-animationoptimize-diff" 1 + "Réduit la taille du fichier lorsqu’il est possible de combiner les calques" + "This procedure applies various optimizations to a GIMP layer-based animation in an attempt to reduce the final file size. If a frame of the animation can use the 'combine' mode, this procedure uses a simple difference between the frames." + "Adam D. Moss " + "Adam D. Moss " + "1997-2003" + "_Optimiser (différence)" + 1 + (menu-path "/Filters/Animation") + (icon icon-name -1 "") + "*" + 13 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 9 "GimpParamImage" "GimpImage" "result" "Result" "Resulting image" 3 0)) + (proc-def "plug-in-animationunoptimize" 1 + "Supprime l’optimisation pour rendre l’édition plus facile" + "This procedure 'simplifies' a GIMP layer-based animation that has been optimized for animation. This makes editing the animation much easier." + "Adam D. Moss " + "Adam D. Moss " + "1997-2003" + "_Désoptimiser" + 1 + (menu-path "/Filters/Animation") + (icon icon-name -1 "") + "*" + 13 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 9 "GimpParamImage" "GimpImage" "result" "Result" "Resulting image" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/align-layers/align-layers" 1769438854 + (proc-def "plug-in-align-layers" 1 + "Aligner tous les calques visibles de l’image" + "Align visible layers" + "Shuji Narazaki " + "Shuji Narazaki" + "1997" + "Aligner les calques _visibles…" + 1 + (menu-path "/Image/[Arrange]") + (icon icon-name -1 "") + "*" + 13 + 10 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 4 "GimpParamChoice" "gchararray" "horizontal-style" "_Horizontal style" "" 3 "none" 5 "none" 0 "Aucun" "" "collect" 1 "Rassembler" "" "fill-left-to-right" 2 "Remplir (de gauche à droite)" "" "fill-right-to-left" 3 "Remplir (de droite à gauche)" "" "snap-to-grid" 4 "Accrocher à la grille" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "horizontal-base" "Hori_zontal base" "" 3 "left-edge" 3 "left-edge" 0 "Bord gauche" "" "center" 1 "Centrer" "" "right-edge" 2 "Bord droit" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "vertical-style" "_Vertical style" "" 3 "none" 5 "none" 0 "Aucun" "" "collect" 1 "Rassembler" "" "fill-left-to-right" 2 "Remplir (de haut en bas)" "" "fill-right-to-left" 3 "Remplir (de bas en haut)" "" "snap-to-grid" 4 "Accrocher à la grille" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "vertical-base" "Ver_tical base" "" 3 "top-edge" 3 "top-edge" 0 "Bord haut" "" "center" 1 "Centrer" "" "bottom-edge" 2 "Bord bas" "") + (proc-arg 1 "GParamInt" "gint" "grid-size" "_Grille" "Grille" 3 1 200 10) + (proc-arg 5 "GParamBoolean" "gboolean" "ignore-bottom-layer" "Ignore the _bottom layer even if visible" "Ignore the bottom layer even if visible" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "use-bottom-layer" "_Utiliser le calque le plus bas (invisible) comme base" "Use the (invisible) bottom layer as the base" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/extensions/org.gimp.extension.goat-exercises/goat-exercise-gjs.js" 1769438854 + (proc-def "plug-in-goat-exercise-gjs" 1 + "Plug-in example in JavaScript (GJS)" + "Plug-in example in JavaScript (GJS)" + "Jehan" + "Jehan" + "2019" + "Plug-In Example in _JavaScript" + 1 + (menu-path "/Filters/Development/Plug-In Examples/") + (icon icon-name -1 "gimp-gegl") + "*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/extensions/org.gimp.extension.goat-exercises/goat-exercise-py3.py" 1769438854 + (proc-def "plug-in-goat-exercise-python" 1 + "Plug-in example in Python 3" + "Plug-in example in Python 3" + "Jehan" + "Jehan" + "2019" + "Plug-In Example in _Python 3" + 1 + (menu-path "/Filters/Development/Plug-In Examples/") + (icon icon-name -1 "gimp-gegl") + "*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/extensions/org.gimp.extension.goat-exercises/goat-exercise-vala" 1769438854 + (proc-def "plug-in-goat-exercise-vala" 1 + "Plug-in example in Vala" + "Plug-in example in Vala" + "Niels De Graef" + "Niels De Graef" + "2020" + "Plug-In Example in _Vala" + 1 + (menu-path "/Filters/Development/Plug-In Examples/") + (icon icon-name -1 "gimp-gegl") + "RGB*, INDEXED*, GRAY*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/extensions/org.gimp.extension.goat-exercises/goat-exercise-c" 1769438854 + (proc-def "plug-in-goat-exercise-c" 1 + "Plug-in example in C" + "Plug-in example in C" + "Øyvind Kolås " + "Øyvind Kolås " + "21 march 2012" + "Plug-In Example in _C" + 1 + (menu-path "/Filters/Development/Plug-In Examples/") + (icon icon-name -1 "gimp-gegl") + "*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) + +# end of pluginrc diff --git a/config/GIMP/3.0/profilerc b/config/GIMP/3.0/profilerc new file mode 100644 index 0000000..2a75c3e --- /dev/null +++ b/config/GIMP/3.0/profilerc @@ -0,0 +1,4 @@ +# GIMP color profile history + + +# end of color profile history diff --git a/config/GIMP/3.0/sessionrc b/config/GIMP/3.0/sessionrc new file mode 100644 index 0000000..2c41a45 --- /dev/null +++ b/config/GIMP/3.0/sessionrc @@ -0,0 +1,90 @@ +# GIMP sessionrc +# +# This file takes session-specific info (that is info, you want to keep +# between two GIMP sessions). You are not supposed to edit it manually, but +# of course you can do. The sessionrc will be entirely rewritten every time +# you quit GIMP. If this file isn't found, defaults are used. + +(session-info "toplevel" + (factory-entry "gimp-empty-image-window") + (position 200 100) + (size 640 480)) +(session-info "toplevel" + (factory-entry "gimp-single-image-window") + (position 0 0) + (size 1360 728) + (monitor 0) + (open-on-exit) + (aux-info + (left-docks-width "52") + (right-docks-width "341") + (maximized "yes")) + (gimp-toolbox + (side left)) + (gimp-dock + (side right) + (book + (current-page 0) + (dockable "gimp-layer-list" + (tab-style icon) + (preview-size 32) + (aux-info + (show-button-bar "true"))) + (dockable "gimp-tool-options" + (tab-style preview) + (aux-info + (show-button-bar "true")))))) +(session-info "toplevel" + (factory-entry "gimp-operation-tool-dialog") + (position 0 0) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-levels-tool-dialog") + (position 0 0) + (size 541 559) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-file-export-dialog") + (position 0 0) + (size 1100 686) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-file-open-dialog") + (position 0 0) + (size 1100 686) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-curves-tool-dialog") + (position 0 0) + (size 675 604) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-brightness-contrast-tool-dialog") + (position 0 0) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-preferences-dialog") + (position 0 0) + (size 1097 561) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-image-new-dialog") + (position 0 0) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-file-save-dialog") + (position 0 0) + (size 1100 686) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-toolbox-color-dialog") + (position 251 99) + (monitor 0)) + +(hide-docks no) +(single-window-mode yes) +(show-tabs yes) +(tabs-position 0) +(last-tip-shown 0) + +# end of sessionrc diff --git a/config/GIMP/3.0/shortcutsrc b/config/GIMP/3.0/shortcutsrc new file mode 100644 index 0000000..7ab2541 --- /dev/null +++ b/config/GIMP/3.0/shortcutsrc @@ -0,0 +1,1134 @@ +# GIMP shortcutsrc +# +# If you delete this file, all shortcuts will be reset to defaults. + +(file-version 1) + +# (action "filters-tile-paper") +# (action "context-foreground-red-minimum") +# (action "tools-warp-effect-pixel-size-set") +# (action "tools-airbrush-flow-decrease") +# (action "plug-in-blinds") +# (action "drawable-lock-position") +# (action "paths-lower") +# (action "plug-in-gfig") +# (action "tools-spacing-decrease-skip") +# (action "context-brush-hardness-decrease") +# (action "select-all" "a") +# (action "image-softproof-intent-perceptual") +# (action "file-save-a-copy") +# (action "help-help" "F1") +# (action "context-brush-spikes-decrease-skip") +# (action "script-fu-make-brush-elliptical") +# (action "view-new") +# (action "filters-value-propagate") +# (action "paths-raise-to-top") +# (action "context-brush-angle-increase-skip") +# (action "python-fu-console") +# (action "tools-force-decrease-percent") +# (action "context-palette-select-first") +# (action "plug-in-borderaverage") +# (action "layers-lower-to-bottom") +# (action "view-zoom-minimum") +# (action "context-palette-background-set") +# (action "filters-gegl-shuffle-search") +# (action "context-opacity-decrease-skip") +# (action "image-convert-float") +# (action "view-scroll-left-border") +# (action "view-show-all") +# (action "dialogs-dynamics-editor") +# (action "select-fill") +# (action "filters-gegl-selective-hue-saturation") +# (action "gimp-help-using-photography") +# (action "layers-select-next" "Page_Down") +# (action "plug-in-qbist") +# (action "layers-resize") +# (action "plug-in-cml-explorer") +# (action "view-show-canvas-boundary") +# (action "context-background-hue-increase") +# (action "context-colormap-background-previous-skip") +# (action "channels-duplicate") +# (action "context-font-select-last") +# (action "layers-blend-space-rgb-perceptual") +# (action "tools-transform-3d" "w") +# (action "paths-color-tag-yellow") +# (action "filters-pixelize") +# (action "tools-airbrush-rate-maximum") +# (action "filters-desaturate") +# (action "paths-select-top") +# (action "view-scroll-right-border") +# (action "filters-long-shadow") +# (action "script-fu-fuzzy-border") +# (action "filters-lens-blur") +# (action "filters-semi-flatten") +# (action "view-padding-color-in-show-all") +# (action "filters-gegl-brightness-contrast") +# (action "image-color-profile-assign") +# (action "context-foreground-green-decrease") +# (action "filters-levels") +# (action "view-show-grid") +# (action "tools-aspect-increase-skip") +# (action "context-brush-spacing-maximum") +# (action "context-swatch-foreground-previous" "9") +# (action "filters-color-exchange") +# (action "layers-color-tag-green") +# (action "context-brush-shape-square") +# (action "layers-mask-apply") +# (action "layers-edit-text") +# (action "layers-flatten-image") +# (action "filters-noise-cie-lch") +# (action "layers-merge-layers") +# (action "paths-selection-add") +# (action "filters-mosaic") +# (action "tools-airbrush-flow-set") +# (action "paths-color-tag-blue") +# (action "edit-named-copy-visible") +# (action "layers-raise") +# (action "layers-composite-space-rgb-perceptual") +# (action "context-swatch-foreground-set") +# (action "filters-engrave") +# (action "filters-median-blur") +# (action "windows-use-single-window-mode") +# (action "tools-color-average-radius-set") +# (action "filters-gegl-alpha-inpaint") +# (action "plug-in-smooth-palette") +# (action "paths-color-tag-violet") +# (action "layers-mask-disable") +# (action "context-brush-hardness-increase") +# (action "tools-curves") +# (action "tools-opacity-increase-skip" "greater") +# (action "view-zoom-out-skip") +# (action "tools-size-set") +# (action "filters-unsharp-mask") +# (action "context-foreground-red-decrease") +# (action "context-paint-mode-last") +# (action "context-background-green-decrease-skip") +# (action "view-scroll-top-border") +# (action "channels-delete") +# (action "context-swatch-background-previous-skip") +# (action "tools-force-maximum") +# (action "context-background-hue-minimum") +# (action "filters-wind") +# (action "plug-in-goat-exercise-vala") +# (action "channels-select-next") +# (action "edit-paste" "v" "Paste") +# (action "paths-color-tag-brown") +# (action "tools-airbrush-rate-decrease-skip") +# (action "plug-in-zealouscrop") +# (action "context-background-green-maximum") +# (action "view-snap-to-guides") +# (action "edit-undo" "z") +# (action "drawable-visible") +# (action "layers-opacity-increase-skip") +# (action "edit-strong-redo" "y") +# (action "channels-selection-replace") +# (action "plug-in-lighting") +# (action "edit-named-paste") +# (action "context-palette-foreground-next") +# (action "context-colormap-background-next") +# (action "context-background-saturation-maximum") +# (action "filters-grid") +# (action "filters-cartoon") +# (action "context-palette-background-previous-skip") +# (action "context-colormap-foreground-previous-skip") +# (action "context-tool-select-last") +# (action "context-brush-select-first") +# (action "file-save" "s") +# (action "context-background-red-increase-skip") +# (action "tools-size-decrease" "bracketleft") +# (action "edit-paste-into") +# (action "image-flip-horizontal") +# (action "view-flip-horizontally") +# (action "context-background-value-increase") +# (action "tools-size-decrease-percent") +# (action "plug-in-colormap-remap") +# (action "paths-paste") +# (action "context-brush-aspect-increase-skip") +# (action "context-brush-select-last") +# (action "context-foreground-green-increase") +# (action "select-save") +# (action "plug-in-ifscompose") +# (action "layers-blend-space-rgb-linear") +# (action "image-convert-double") +# (action "filters-fattal-2002") +# (action "script-fu-difference-clouds") +# (action "channels-color-tag-blue") +# (action "context-brush-aspect-minimum") +# (action "image-convert-half") +# (action "context-font-select-first") +# (action "paths-color-tag-orange") +# (action "view-scroll-page-down") +# (action "layers-composite-space-rgb-linear") +# (action "view-display-intent-perceptual") +# (action "dialogs-toolbox" "b") +# (action "paths-selection-to-path-advanced") +# (action "tools-angle-maximum") +# (action "tools-rotate-arbitrary") +# (action "layers-edit-attributes") +# (action "dialogs-welcome") +# (action "filters-invert-perceptual") +# (action "context-palette-background-last") +# (action "context-foreground-saturation-decrease-skip") +# (action "filters-lens-distortion") +# (action "view-scroll-horizontal") +# (action "filters-gegl-boxblur") +# (action "tools-hardness-decrease") +# (action "drawable-flip-vertical") +# (action "paths-select-bottom") +# (action "edit-paste-float") +# (action "filters-color-to-alpha") +# (action "filters-sinus") +# (action "paths-lower-to-bottom") +# (action "layers-new-group") +# (action "tools-angle-set-to-default") +# (action "view-display-filters") +# (action "context-brush-spacing-decrease") +# (action "view-zoom-selection") +# (action "tools-size-maximum") +# (action "select-stroke") +# (action "tools-spacing-set-to-default") +# (action "tools-airbrush-rate-increase") +# (action "view-close" "w") +# (action "view-padding-color-prefs") +# (action "tools-aspect-increase") +# (action "tools-mypaint-brush-hardness-set") +# (action "select-fill-last-values") +# (action "windows-tabs-position-right") +# (action "image-convert-perceptual") +# (action "tools-opacity-set-to-default") +# (action "context-swatch-foreground-previous-skip") +# (action "tools-rotate-image-arbitrary") +# (action "tools-hardness-maximum") +# (action "filters-snn-mean") +# (action "filters-noise-pick") +# (action "tools-opacity-increase" "greater") +# (action "dialogs-brushes" "b") +# (action "context-font-select-next") +# (action "image-convert-u16") +# (action "filters-video-degradation") +# (action "filters-sepia") +# (action "context-brush-aspect-decrease") +# (action "context-foreground-green-maximum") +# (action "context-foreground-green-increase-skip") +# (action "context-brush-spacing-set") +# (action "edit-fill-fg" "comma") +# (action "drawable-rotate-180") +# (action "plug-in-gflare") +# (action "gimp-palette-export-text") +# (action "tools-crop" "c") +# (action "file-gbr-export-internal") +# (action "tools-paintbrush-force-set") +# (action "layers-blend-space-rgb-non-linear") +# (action "tools-size-decrease-skip" "braceleft") +# (action "plug-in-goat-exercise-python") +# (action "tools-airbrush-flow-minimum") +# (action "plug-in-unit-editor") +# (action "view-open-display") +# (action "paths-color-tag-green") +# (action "context-background-saturation-decrease-skip") +# (action "context-palette-foreground-previous-skip") +# (action "context-opacity-decrease") +# (action "view-zoom-2-1" "2" "KP_2") +# (action "tools-hardness-decrease-skip") +# (action "context-foreground-red-increase-skip") +# (action "filters-stretch-contrast-hsv") +# (action "context-background-value-increase-skip") +# (action "view-flip-reset") +# (action "plug-in-pagecurl") +# (action "dialogs-patterns" "p") +# (action "tools-aspect-maximum") +# (action "layers-merge-layers-last-values") +# (action "filters-gegl-gray-component-replacement") +# (action "paths-lock-content") +# (action "dialogs-gradients" "g") +# (action "context-brush-spikes-maximum") +# (action "filters-kaleidoscope") +# (action "context-background-blue-minimum") +# (action "edit-paste-merged") +# (action "context-background-blue-decrease") +# (action "script-fu-guide-new-percent") +# (action "context-foreground-hue-decrease") +# (action "view-display-black-point-compensation") +# (action "view-padding-color-light-check") +# (action "view-navigation-window") +# (action "context-swatch-background-first") +# (action "context-palette-background-next-skip") +# (action "script-fu-circuit") +# (action "paths-selection-from-paths" "v") +# (action "filters-repeat" "f") +# (action "view-rotate-15") +# (action "context-colormap-background-next-skip") +# (action "filters-gegl-gluas") +# (action "view-zoom-fit-in" "j") +# (action "paths-stroke-last-values") +# (action "layers-composite-space-rgb-non-linear") +# (action "view-zoom-1-16" "parenleft" "KP_5") +# (action "context-brush-radius-set") +# (action "paths-edit") +# (action "filters-hue-chroma") +# (action "tools-hardness-set-to-default") +# (action "filters-illusion") +# (action "context-paint-mode-next") +# (action "view-rotate-180") +# (action "filters-dither") +# (action "filters-linear-sinusoid") +# (action "context-brush-spacing-increase") +# (action "select-flood") +# (action "plug-in-gimpressionist") +# (action "filters-difference-of-gaussians") +# (action "plug-in-curve-bend") +# (action "view-show-scrollbars") +# (action "paths-color-tag-gray") +# (action "python-fu-palette-to-gradient") +# (action "script-fu-reverse-layers") +# (action "layers-color-tag-red") +# (action "filters-shift") +# (action "filters-gegl-segment-kmeans") +# (action "edit-undo-clear") +# (action "tools-aspect-set") +# (action "filters-offset" "o") +# (action "filters-gegl-domain-transform") +# (action "view-show-statusbar") +# (action "layers-opacity-decrease") +# (action "view-snap-to-equidistance") +# (action "filters-component-extract") +# (action "plug-in-lic") +# (action "tools-by-color-select" "o") +# (action "script-fu-add-bevel") +# (action "script-fu-weave") +# (action "context-brush-radius-increase") +# (action "channels-color-tag-violet") +# (action "windows-hide-docks") +# (action "context-tool-select-next") +# (action "channels-new-last-values") +# (action "context-palette-background-first") +# (action "tools-angle-increase") +# (action "windows-show-tabs") +# (action "filters-noise-simplex") +# (action "tools-gradient" "g") +# (action "plug-in-warp") +# (action "edit-named-copy") +# (action "filters-gegl-aces-rrt") +# (action "tools-offset") +# (action "context-brush-select-next") +# (action "context-opacity-increase") +# (action "dialogs-mypaint-brushes") +# (action "tools-shear" "h") +# (action "tools-angle-set") +# (action "context-brush-radius-maximum") +# (action "layers-mask-add-last-values") +# (action "filters-gegl-box-blur") +# (action "script-fu-paste-as-pattern") +# (action "view-rotate-reset") +# (action "view-scroll-center" "j") +# (action "dialogs-layers" "l") +# (action "tools-force-decrease-skip") +# (action "view-reset" "exclam") +# (action "layers-mode-previous") +# (action "layers-edit") +# (action "plug-in-dbbrowser") +# (action "paths-edit-attributes") +# (action "script-fu-make-brush-rectangular-feathered") +# (action "context-background-value-minimum") +# (action "filters-noise-perlin") +# (action "filters-posterize") +# (action "context-brush-shape-circle") +# (action "layers-lower") +# (action "context-brush-radius-increase-less") +# (action "layers-new" "n") +# (action "image-softproof-intent-absolute-colorimetric") +# (action "tools-text" "t") +# (action "plug-in-nl-filter") +# (action "image-color-profile-save") +# (action "context-background-blue-increase") +# (action "context-palette-background-next") +# (action "context-brush-hardness-minimum") +# (action "tools-airbrush-rate-set") +# (action "gimp-help-concepts-usage") +# (action "image-softproof-intent-saturation") +# (action "context-background-hue-set") +# (action "context-foreground-hue-increase") +# (action "context-foreground-blue-decrease") +# (action "tools-force-increase-skip") +# (action "channels-selection-intersect") +# (action "tools-scale" "s") +# (action "file-save-as" "s") +# (action "file-save-and-close") +# (action "filters-vignette") +# (action "view-rotate-345") +# (action "context-pattern-select-last") +# (action "context-paint-mode-first") +# (action "plug-in-animationoptimize") +# (action "dialogs-templates") +# (action "channels-color-tag-gray") +# (action "context-background-green-increase") +# (action "image-resize") +# (action "filters-gegl-ctx-script") +# (action "script-fu-round-corners") +# (action "context-swatch-foreground-first") +# (action "tools-spacing-maximum") +# (action "channels-selection-add") +# (action "tools-hardness-set") +# (action "plug-in-spyrogimp") +# (action "view-rotate-other") +# (action "dialogs-dynamics") +# (action "tools-free-select" "f") +# (action "layers-duplicate" "d") +# (action "select-copy-float") +# (action "gimp-online-roadmap") +# (action "tools-object-2-last") +# (action "dialogs-gradient-editor") +# (action "tools-warp" "w") +# (action "filters-c2g") +# (action "filters-displace") +# (action "plug-in-screenshot") +# (action "tools-rect-select" "r") +# (action "filters-motion-blur-zoom") +# (action "windows-tabs-position-bottom") +# (action "image-convert-non-linear") +# (action "view-show-rulers" "r") +# (action "view-zoom-1-1" "1" "KP_1") +# (action "tools-angle-decrease-skip") +# (action "context-background-blue-set") +# (action "view-zoom-1-2" "eacute" "KP_2") +# (action "plug-in-metadata-editor") +# (action "channels-new") +# (action "view-dot-for-dot") +# (action "filters-shadows-highlights") +# (action "plug-in-sparkle") +# (action "tools-fuzzy-select" "u") +# (action "filters-edge-neon") +# (action "file-export" "e") +# (action "gimp-help-using-selections") +# (action "filters-noise-rgb") +# (action "filters-image-gradient") +# (action "tools-airbrush-rate-minimum") +# (action "tools-aspect-decrease-percent") +# (action "plug-in-film") +# (action "script-fu-guide-new") +# (action "context-palette-foreground-first") +# (action "view-zoom-1-4" "quotedbl" "KP_3") +# (action "view-snap-to-canvas") +# (action "filters-bump-map") +# (action "filters-slic") +# (action "filters-color-temperature") +# (action "script-fu-old-photo") +# (action "context-brush-spikes-decrease") +# (action "context-background-red-minimum") +# (action "debug-dump-keyboard-shortcuts") +# (action "select-invert" "i") +# (action "context-brush-radius-decrease-percent") +# (action "tools-hardness-decrease-percent") +# (action "view-padding-color-custom") +# (action "filters-recursive-transform") +# (action "tools-opacity-set") +# (action "context-foreground-value-minimum") +# (action "layers-raise-to-top") +# (action "filters-normal-map") +# (action "tools-measure" "m") +# (action "filters-gegl-alpha-clip") +# (action "layers-mask-add") +# (action "context-brush-spacing-minimum") +# (action "tools-spacing-increase-skip") +# (action "context-background-green-set") +# (action "context-background-value-set") +# (action "view-display-intent-relative-colorimetric") +# (action "context-foreground-blue-increase") +# (action "view-zoom-1-8" "apostrophe" "KP_4") +# (action "script-fu-paste-as-brush") +# (action "view-zoom-16-1" "5" "KP_5") +# (action "gimp-palette-export-css") +# (action "filters-emboss") +# (action "image-rotate-270") +# (action "tools-opacity-increase-percent") +# (action "context-brush-spikes-increase-skip") +# (action "image-scale") +# (action "script-fu-set-cmap") +# (action "channels-raise") +# (action "filters-noise-hurl") +# (action "context-brush-angle-maximum") +# (action "context-colormap-foreground-set") +# (action "image-convert-grayscale") +# (action "image-duplicate" "d") +# (action "dialogs-undo-history") +# (action "select-feather") +# (action "select-stroke-last-values") +# (action "script-fu-waves-anim") +# (action "image-crop-to-content") +# (action "context-background-value-decrease") +# (action "filters-oilify") +# (action "paths-copy") +# (action "select-grow") +# (action "context-opacity-increase-skip") +# (action "view-scroll-page-left") +# (action "plug-in-gradmap") +# (action "context-colors-default" "d") +# (action "context-palette-select-previous") +# (action "filters-gegl-bilateral-filter") +# (action "context-swatch-foreground-last") +# (action "layers-mask-selection-subtract") +# (action "context-background-red-set") +# (action "layers-scale") +# (action "script-fu-test-sphere-v3") +# (action "tools-levels") +# (action "tools-size-increase-percent") +# (action "filters-edge-laplace") +# (action "image-configure-grid") +# (action "tools-spacing-decrease-percent") +# (action "context-opacity-set") +# (action "image-convert-indexed") +# (action "context-foreground-red-maximum") +# (action "context-background-green-minimum") +# (action "script-fu-burn-in-anim") +# (action "plug-in-wavelet-decompose") +# (action "plug-in-jigsaw") +# (action "dialogs-selection-editor") +# (action "image-convert-rgb") +# (action "gimp-help-concepts-paths") +# (action "image-color-profile-discard") +# (action "plug-in-flame") +# (action "debug-mem-profile") +# (action "context-brush-spikes-increase") +# (action "image-color-profile-use-srgb") +# (action "python-fu-foggify") +# (action "tools-airbrush-rate-decrease") +# (action "script-fu-guides-from-selection") +# (action "view-zoom-maximum") +# (action "dialogs-tool-presets") +# (action "tools-aspect-decrease") +# (action "view-zoom-in" "plus" "KP_Add" "ZoomIn") +# (action "paths-selection-to-path") +# (action "context-background-blue-decrease-skip") +# (action "view-color-management-softproof") +# (action "tools-warp-effect-hardness-set") +# (action "tools-opacity-minimum") +# (action "filters-softglow") +# (action "filters-color-enhance") +# (action "tools-opacity-decrease" "less") +# (action "tools-force-set-to-default") +# (action "context-brush-hardness-decrease-skip") +# (action "edit-cut" "x" "Cut") +# (action "context-pattern-select-next") +# (action "layers-mask-selection-add") +# (action "context-background-green-increase-skip") +# (action "image-color-profile-convert") +# (action "filters-waterpixels") +# (action "context-palette-select-set") +# (action "python-fu-palette-to-gradient-repeating") +# (action "select-border") +# (action "context-foreground-hue-set") +# (action "dialogs-images") +# (action "script-fu-xach-effect") +# (action "dialogs-document-history") +# (action "dialogs-keyboard-shortcuts") +# (action "script-fu-clothify") +# (action "plug-in-animationplay") +# (action "tools-dodge-burn" "d") +# (action "tools-object-2-next") +# (action "context-palette-foreground-next-skip") +# (action "plug-in-reset-all") +# (action "layers-select-bottom" "End") +# (action "context-foreground-hue-minimum") +# (action "view-zoom-8-1" "4" "KP_4") +# (action "tools-airbrush-rate-increase-skip") +# (action "context-colormap-foreground-next-skip") +# (action "layers-visible") +# (action "context-swatch-background-next-skip") +# (action "plug-in-mail-image") +# (action "context-palette-background-previous") +# (action "layers-mode-first") +# (action "context-palette-foreground-set") +# (action "file-copy-location") +# (action "dialogs-action-search" "slash" "KP_Divide") +# (action "context-foreground-blue-minimum") +# (action "tools-size-minimum") +# (action "filters-convolution-matrix") +# (action "layers-mask-show") +# (action "layers-composite-mode-union") +# (action "plug-in-retinex") +# (action "edit-paste-merged-in-place") +# (action "edit-paste-float-in-place") +# (action "edit-copy" "c" "Copy") +# (action "tools-object-2-previous") +# (action "python-fu-palette-sort") +# (action "context-brush-hardness-set") +# (action "tools-ink-blob-angle-set") +# (action "context-tool-select-first") +# (action "filters-erode") +# (action "edit-fill-bg" "period") +# (action "image-print-size") +# (action "context-foreground-green-minimum") +# (action "filters-gegl-color-warp") +# (action "script-fu-unsharp-mask") +# (action "tools-handle-transform" "l") +# (action "filters-gaussian-blur") +# (action "context-colormap-background-previous") +# (action "image-merge-layers" "m") +# (action "filters-high-pass") +# (action "tools-move" "m") +# (action "context-pattern-select-previous") +# (action "context-background-hue-maximum") +# (action "script-fu-guides-remove") +# (action "context-foreground-saturation-increase-skip") +# (action "image-softproof-black-point-compensation") +# (action "channels-select-previous") +# (action "tools-flip" "f") +# (action "context-brush-angle-set") +# (action "edit-fill-pattern" "semicolon") +# (action "layers-composite-mode-clip-to-layer") +# (action "edit-paste-in-place" "v" "Paste") +# (action "tools-vector" "b") +# (action "script-fu-make-brush-elliptical-feathered") +# (action "tools-aspect-minimum") +# (action "view-snap-to-bbox") +# (action "quick-mask-configure") +# (action "tools-object-1-first") +# (action "gimp-palette-export-java") +# (action "plug-in-grid") +# (action "script-fu-lava") +# (action "channels-color-tag-red") +# (action "context-brush-radius-decrease-skip") +# (action "context-brush-spikes-minimum") +# (action "layers-opacity-opaque") +# (action "context-foreground-blue-decrease-skip") +# (action "context-foreground-blue-set") +# (action "tools-angle-decrease") +# (action "context-brush-radius-decrease") +# (action "tools-object-1-previous") +# (action "paths-export") +# (action "plug-in-animationoptimize-diff") +# (action "filters-dropshadow") +# (action "context-font-select-previous") +# (action "filters-maze") +# (action "plug-in-tile") +# (action "image-convert-u32") +# (action "paths-delete") +# (action "quick-mask-toggle" "q") +# (action "tools-paintbrush" "p") +# (action "layers-select-flattened-previous") +# (action "file-revert") +# (action "context-swatch-foreground-next" "0") +# (action "layers-anchor" "h") +# (action "context-foreground-saturation-maximum") +# (action "layers-opacity-set") +# (action "context-brush-aspect-maximum") +# (action "plug-in-goat-exercise-c") +# (action "quick-mask-invert-on") +# (action "layers-mask-selection-intersect") +# (action "image-softproof-intent-relative-colorimetric") +# (action "dialogs-dashboard") +# (action "drawable-levels-stretch") +# (action "layers-lock-content") +# (action "context-gradient-select-first") +# (action "tools-size-increase-skip" "braceright") +# (action "layers-mask-selection-replace") +# (action "script-fu-ripply-anim") +# (action "filters-supernova") +# (action "view-scroll-page-up") +# (action "context-background-saturation-increase-skip") +# (action "tools-hardness-increase-skip") +# (action "filters-focus-blur") +# (action "tools-eraser" "e") +# (action "dialogs-preferences") +# (action "channels-color-tag-yellow") +# (action "filters-brightness-contrast") +# (action "tools-size-set-to-default" "backslash") +# (action "drawable-lock-content") +# (action "dialogs-vectors") +# (action "view-scroll-down") +# (action "plug-in-palettemap") +# (action "tools-transform-preview-opacity-set") +# (action "filters-color-rotate") +# (action "view-padding-color-dark-check") +# (action "tools-ink-blob-aspect-set") +# (action "context-paint-mode-previous") +# (action "context-swatch-background-last") +# (action "channels-selection-subtract") +# (action "context-background-green-decrease") +# (action "context-colors-swap" "x") +# (action "filters-colorize") +# (action "image-resize-to-layers") +# (action "filters-gaussian-blur-selective") +# (action "view-rotate-set-absolute") +# (action "context-background-hue-decrease-skip") +# (action "file-gih-export-internal") +# (action "filters-waves") +# (action "tools-airbrush-flow-decrease-skip") +# (action "dialogs-device-status") +# (action "context-brush-radius-minimum") +# (action "view-scroll-page-right") +# (action "file-print-gtk") +# (action "debug-gtk-inspector") +# (action "filters-gegl-levels") +# (action "channels-lower") +# (action "dialogs-about") +# (action "filters-noise-reduction") +# (action "context-foreground-saturation-set") +# (action "filters-reinhard-2005") +# (action "plug-in-compose") +# (action "filters-panorama-projection") +# (action "layers-mask-delete") +# (action "filters-gegl-graph") +# (action "layers-composite-mode-auto") +# (action "filters-recent-01") +# (action "filters-noise-spread") +# (action "script-fu-sota-chrome-it") +# (action "windows-show-display-next" "Tab" "Forward") +# (action "filters-recent-02") +# (action "layers-color-tag-yellow") +# (action "gimp-online-docs-web-site") +# (action "context-foreground-green-set") +# (action "context-foreground-value-set") +# (action "context-background-saturation-increase") +# (action "filters-recent-03") +# (action "context-foreground-saturation-decrease") +# (action "dialogs-module-dialog") +# (action "plug-in-goat-exercise-gjs") +# (action "filters-invert-value") +# (action "view-color-management-enable") +# (action "view-show-layer-boundary") +# (action "context-gradient-select-last") +# (action "select-none" "a") +# (action "filters-recent-04") +# (action "channels-select-top") +# (action "tools-brightness-contrast") +# (action "view-show-selection" "t") +# (action "tools-aspect-increase-percent") +# (action "filters-recent-05") +# (action "context-background-red-increase") +# (action "context-background-blue-maximum") +# (action "filters-recent-06") +# (action "layers-alpha-remove") +# (action "context-foreground-value-decrease-skip") +# (action "plug-in-animationunoptimize") +# (action "tools-rotate" "r") +# (action "edit-strong-undo" "z") +# (action "layers-merge-down") +# (action "gimp-help-using-web") +# (action "image-convert-linear") +# (action "filters-gegl-voronoi-diagram") +# (action "tools-airbrush" "a") +# (action "filters-recent-07") +# (action "plug-in-spheredesigner") +# (action "script-fu-blend-anim") +# (action "layers-new-from-visible") +# (action "filters-recent-08") +# (action "tools-paintbrush-angle-set") +# (action "tools-force-increase-percent") +# (action "context-brush-spikes-set") +# (action "filters-variable-blur") +# (action "file-create-template") +# (action "filters-recent-09") +# (action "tools-mypaint-brush-radius-set") +# (action "dialogs-colors") +# (action "layers-color-tag-violet") +# (action "view-rotate-90") +# (action "edit-redo" "y") +# (action "tools-paintbrush-hardness-set") +# (action "tools-angle-decrease-percent") +# (action "context-brush-spacing-decrease-skip") +# (action "file-open-recent-01" "1") +# (action "context-brush-shape-diamond") +# (action "tools-threshold") +# (action "plug-in-despeckle") +# (action "filters-gegl-connected-components") +# (action "dialogs-palettes") +# (action "filters-polar-coordinates") +# (action "filters-mean-curvature-blur") +# (action "tools-zoom" "z") +# (action "windows-tabs-position-left") +# (action "filters-motion-blur-circular") +# (action "file-open-recent-02" "2") +# (action "paths-import") +# (action "dialogs-input-devices") +# (action "filters-gegl-bevel") +# (action "channels-color-tag-orange") +# (action "view-scroll-bottom-border") +# (action "context-foreground-hue-decrease-skip") +# (action "context-palette-foreground-previous") +# (action "file-open-recent-03" "3") +# (action "tools-paintbrush-spacing-set") +# (action "script-fu-coffee-stain") +# (action "plug-in-depth-merge") +# (action "tools-object-2-first") +# (action "layers-delete") +# (action "tools-object-1-last") +# (action "paths-duplicate") +# (action "filters-fractal-trace") +# (action "file-open-recent-04" "4") +# (action "edit-clear" "Delete") +# (action "file-quit" "q") +# (action "filters-checkerboard") +# (action "file-open-recent-05" "5") +# (action "tools-ink-blob-pixel-size-set") +# (action "layers-resize-to-image") +# (action "tools-ink-blob-size-set") +# (action "python-fu-histogram-export") +# (action "file-open-recent-06" "6") +# (action "layers-color-tag-none") +# (action "filters-red-eye-removal") +# (action "layers-mask-edit") +# (action "context-foreground-saturation-increase") +# (action "file-open-recent-07" "7") +# (action "view-scroll-up") +# (action "tools-spacing-increase-percent") +# (action "context-colormap-foreground-previous") +# (action "filters-little-planet") +# (action "layers-alpha-selection-replace") +# (action "plug-in-plug-in-details") +# (action "context-brush-angle-minimum") +# (action "file-open-recent-08" "8") +# (action "context-background-value-maximum") +# (action "layers-mask-add-button") +# (action "context-swatch-background-set") +# (action "filters-noise-slur") +# (action "image-rotate-180") +# (action "filters-edge-sobel") +# (action "tools-angle-increase-skip") +# (action "file-open-recent-09" "9") +# (action "tools-heal" "h") +# (action "gimp-help-using-simpleobjects") +# (action "filters-photocopy") +# (action "tools-spacing-decrease") +# (action "filters-channel-mixer") +# (action "dialogs-cursor") +# (action "file-pat-export-internal") +# (action "layers-lock-position") +# (action "plug-in-fractalexplorer") +# (action "layers-color-tag-orange") +# (action "image-resize-to-selection") +# (action "context-brush-hardness-maximum") +# (action "context-swatch-foreground-next-skip") +# (action "paths-visible") +# (action "channels-visible") +# (action "filters-gegl-bilateral-filter-fast") +# (action "select-sharpen") +# (action "context-gradient-select-set") +# (action "debug-dump-attached-data") +# (action "image-flip-vertical") +# (action "layers-text-along-vectors") +# (action "layers-text-to-vectors") +# (action "script-fu-make-brush-rectangular") +# (action "view-snap-to-grid") +# (action "tools-mypaint-brush" "y") +# (action "filters-newsprint") +# (action "context-swatch-background-next") +# (action "context-brush-angle-decrease-skip") +# (action "file-show-in-file-manager" "f") +# (action "dialogs-indexed-palette") +# (action "gimp-help-using-fileformats") +# (action "layers-composite-mode-intersection") +# (action "layers-alpha-selection-add") +# (action "dialogs-tool-options") +# (action "edit-copy-visible" "c" "Copy") +# (action "filters-distance-map") +# (action "gimp-online-bugs-features") +# (action "paths-lock-position") +# (action "dialogs-histogram") +# (action "channels-select-bottom") +# (action "filters-mantiuk-2006") +# (action "filters-gegl-gradient-map") +# (action "filters-gegl-color-assimilation-grid") +# (action "tools-force-minimum") +# (action "filters-tile-glass") +# (action "file-export-as" "e") +# (action "image-new" "n") +# (action "filters-dilate") +# (action "filters-invert-linear") +# (action "context-palette-select-last") +# (action "plug-in-decompose") +# (action "filters-plasma") +# (action "tools-aspect-decrease-skip") +# (action "context-gradient-select-next") +# (action "layers-select-previous" "Page_Up") +# (action "windows-tab-position") +# (action "script-fu-drop-shadow") +# (action "paths-selection-replace") +# (action "view-display-intent-saturation") +# (action "context-background-red-maximum") +# (action "context-background-saturation-minimum") +# (action "filters-gegl-negative-darkroom") +# (action "select-cut-float" "l") +# (action "dialogs-buffers") +# (action "tools-color-picker" "o") +# (action "tools-warp-effect-size-set") +# (action "filters-gegl-inner-glow") +# (action "context-foreground-value-maximum") +# (action "filters-bayer-matrix") +# (action "context-background-saturation-set") +# (action "tools-spacing-increase") +# (action "filters-gegl-demosaic-bimedian") +# (action "channels-color-tag-brown") +# (action "view-show-sample-points") +# (action "paths-stroke") +# (action "filters-recent-10") +# (action "view-zoom-out" "minus" "KP_Subtract" "ZoomOut") +# (action "filters-gegl-fractal-explorer") +# (action "tools-opacity-decrease-skip" "less") +# (action "view-scroll-right") +# (action "view-zoom-revert" "grave") +# (action "filters-diffraction-patterns") +# (action "tools-align" "q") +# (action "windows-show-display-previous" "Tab" "Back") +# (action "filters-tile-seamless") +# (action "gimp-palette-export-php") +# (action "tools-angle-minimum") +# (action "filters-curves") +# (action "layers-opacity-transparent") +# (action "channels-raise-to-top") +# (action "tools-airbrush-flow-increase") +# (action "context-background-blue-increase-skip") +# (action "filters-whirl-pinch") +# (action "context-brush-select-set") +# (action "help-context-help" "F1") +# (action "tools-pencil" "n") +# (action "context-brush-hardness-increase-skip") +# (action "filters-edge") +# (action "tools-object-1-next") +# (action "layers-opacity-decrease-skip") +# (action "dialogs-channels") +# (action "filters-apply-canvas") +# (action "tools-opacity-decrease-percent") +# (action "file-open" "o") +# (action "script-fu-gradient-example") +# (action "debug-benchmark-projection") +# (action "script-fu-perspective-shadow") +# (action "plug-in-script-fu-console") +# (action "view-snap-to-vectors") +# (action "context-background-red-decrease-skip") +# (action "view-scroll-left") +# (action "gimp-online-developer-web-site") +# (action "file-pdf-export-multi") +# (action "select-shrink") +# (action "view-zoom-fill") +# (action "plug-in-metadata-viewer") +# (action "context-dynamics-toggle") +# (action "plug-in-small-tiles") +# (action "filters-threshold-alpha") +# (action "layers-alpha-selection-intersect") +# (action "context-tool-select-previous") +# (action "context-brush-aspect-decrease-skip") +# (action "view-display-intent-absolute-colorimetric") +# (action "tools-hardness-minimum") +# (action "plug-in-colormap-swap") +# (action "script-fu-distress-selection") +# (action "filters-antialias") +# (action "tools-object-2-set") +# (action "tools-spacing-set") +# (action "layers-merge-down-button") +# (action "file-open-recent-10" "0") +# (action "channels-lower-to-bottom") +# (action "layers-color-tag-blue") +# (action "plug-in-align-layers") +# (action "filters-hue-saturation") +# (action "tools-ink" "k") +# (action "view-show-guides" "t") +# (action "script-fu-tile-blur") +# (action "filters-exposure") +# (action "windows-tabs-position-top") +# (action "filters-mono-mixer") +# (action "view-move-to-screen-wayland-1") +# (action "filters-threshold") +# (action "tools-force-decrease") +# (action "filters-gegl-color-overlay") +# (action "tools-perspective-clone") +# (action "filters-bloom") +# (action "tools-opacity-maximum") +# (action "dialogs-brush-editor") +# (action "paths-selection-subtract") +# (action "context-font-select-set") +# (action "context-foreground-saturation-minimum") +# (action "layers-new-last-values") +# (action "context-colormap-foreground-last") +# (action "paths-raise") +# (action "paths-fill-last-values") +# (action "drawable-flip-horizontal") +# (action "layers-select-flattened-next") +# (action "tools-clone" "c") +# (action "edit-named-cut") +# (action "view-color-management-reset") +# (action "layers-select-top" "Home") +# (action "view-fullscreen" "F11") +# (action "layers-blend-space-auto") +# (action "filters-stretch-contrast") +# (action "plug-in-imagemap") +# (action "filters-deinterlace") +# (action "filters-gegl-demosaic-simple") +# (action "context-brush-angle-decrease") +# (action "filters-noise-hsv") +# (action "tools-mypaint-brush-pixel-size-set") +# (action "channels-color-tag-green") +# (action "tools-cage" "g") +# (action "context-foreground-hue-maximum") +# (action "gimp-help-using-docks") +# (action "file-close-all" "w") +# (action "context-background-saturation-decrease") +# (action "tools-paintbrush-size-set") +# (action "filters-gegl-absolute") +# (action "file-overwrite") +# (action "context-foreground-red-increase") +# (action "filters-saturation") +# (action "layers-alpha-add") +# (action "context-foreground-blue-maximum") +# (action "gimp-help-main") +# (action "view-padding-color-theme") +# (action "context-foreground-green-decrease-skip") +# (action "image-flatten") +# (action "tools-force-set") +# (action "context-foreground-blue-increase-skip") +# (action "image-crop-to-selection") +# (action "tools-smudge" "s") +# (action "view-show-menubar") +# (action "tools-paintbrush-aspect-ratio-set") +# (action "tools-paintbrush-pixel-size-set") +# (action "layers-mode-last") +# (action "view-zoom-in-skip") +# (action "filters-motion-blur-linear") +# (action "paths-select-previous") +# (action "context-pattern-select-first") +# (action "context-background-value-decrease-skip") +# (action "dialogs-tips") +# (action "plug-in-checkerboard") +# (action "view-zoom") +# (action "context-background-red-decrease") +# (action "view-scroll-vertical") +# (action "context-palette-select-next") +# (action "paths-selection-intersect") +# (action "context-tool-select-set") +# (action "context-foreground-red-decrease-skip") +# (action "layers-merge-group") +# (action "file-open-location") +# (action "image-rotate-90") +# (action "tools-gegl") +# (action "file-open-as-layers" "o") +# (action "script-fu-line-nova") +# (action "context-brush-radius-increase-skip") +# (action "filters-gegl-local-threshold") +# (action "layers-alpha-selection-subtract") +# (action "tools-foreground-select-brush-size-set") +# (action "filters-noise-solid") +# (action "tools-size-increase" "bracketright") +# (action "dialogs-navigation") +# (action "filters-color-balance") +# (action "tools-unified-transform" "t") +# (action "filters-cubism") +# (action "tools-force-increase") +# (action "tools-by-color-select-short") +# (action "image-softproof-profile") +# (action "tools-angle-increase-percent") +# (action "dialogs-palette-editor") +# (action "edit-paste-into-in-place") +# (action "drawable-rotate-270") +# (action "view-zoom-other") +# (action "context-swatch-background-previous") +# (action "context-foreground-value-decrease") +# (action "filters-gegl-band-tune") +# (action "filters-gegl-styles") +# (action "context-foreground-red-set") +# (action "filters-alien-map") +# (action "drawable-equalize") +# (action "context-colormap-background-first") +# (action "tools-iscissors" "i") +# (action "debug-show-image-graph") +# (action "filters-gegl-denoise-dct") +# (action "context-background-hue-increase-skip") +# (action "dialogs-fonts") +# (action "context-brush-angle-increase") +# (action "tools-airbrush-flow-maximum") +# (action "tools-airbrush-flow-increase-skip") +# (action "paths-select-next") +# (action "tools-paint-select-pixel-size-set") +# (action "filters-lens-flare") +# (action "plug-in-sample-colorize") +# (action "tools-hardness-increase") +# (action "layers-crop-to-content") +# (action "context-gradient-select-previous") +# (action "view-flip-vertically") +# (action "channels-edit-attributes") +# (action "tools-ellipse-select" "e") +# (action "script-fu-spinning-globe") +# (action "plug-in-hot") +# (action "tools-bucket-fill" "b") +# (action "filters-apply-lens") +# (action "context-brush-aspect-set") +# (action "plug-in-destripe") +# (action "image-properties" "Return") +# (action "paths-merge-visible") +# (action "tools-spacing-minimum") +# (action "python-fu-palette-offset") +# (action "drawable-rotate-90") +# (action "filters-gegl-lens-correct") +# (action "context-brush-select-previous") +# (action "plug-in-map-object") +# (action "view-rotate-270") +# (action "script-fu-slide") +# (action "windows-display-0001") +# (action "tools-hardness-increase-percent") +# (action "context-brush-radius-increase-percent") +# (action "script-fu-addborder") +# (action "dialogs-sample-points") +# (action "context-brush-aspect-increase") +# (action "paths-color-tag-none") +# (action "channels-lock-position") +# (action "filters-noise-cell") +# (action "context-opacity-opaque") +# (action "filters-gegl-unpremultiply") +# (action "script-fu-selection-rounded-rectangle") +# (action "plug-in-guillotine") +# (action "context-brush-radius-decrease-less") +# (action "context-opacity-transparent") +# (action "plug-in-script-fu-server") +# (action "channels-lock-content") +# (action "tools-perspective" "p") +# (action "context-foreground-value-increase-skip") +# (action "paths-new-last-values") +# (action "filters-spherize") +# (action "view-zoom-4-1" "3" "KP_3") +# (action "context-colormap-background-set") +# (action "filters-gegl-vibrance") +# (action "context-colormap-foreground-next") +# (action "paths-color-tag-red") +# (action "quick-mask-invert-off") +# (action "context-foreground-value-increase") +# (action "filters-ripple") +# (action "layers-color-tag-gray") +# (action "context-brush-spacing-increase-skip") +# (action "filters-stress") +# (action "tools-foreground-select") +# (action "image-convert-u8") +# (action "paths-fill") +# (action "gimp-palette-export-python") +# (action "context-foreground-hue-increase-skip") +# (action "tools-aspect-set-to-default") +# (action "context-background-hue-decrease") +# (action "context-pattern-select-set") +# (action "filters-reshow" "f") +# (action "context-colormap-foreground-first") +# (action "layers-mode-next") +# (action "plug-in-recompose") +# (action "gimp-online-main-web-site") +# (action "context-colormap-background-last") +# (action "layers-color-tag-brown") +# (action "context-palette-foreground-last") +# (action "python-fu-gradient-save-as-css") +# (action "tools-object-1-set") +# (action "view-shrink-wrap" "j") +# (action "paths-new") +# (action "layers-composite-mode-clip-to-backdrop") +# (action "dialogs-symmetry") +# (action "layers-crop-to-selection") +# (action "filters-rgb-clip") +# (action "channels-color-tag-none") +# (action "tools-convolve" "u") +# (action "view-softproof-gamut-check") +# (action "dialogs-error-console") +# (action "layers-composite-space-auto") +# (action "layers-opacity-increase") +# (action "script-fu-carve-it") +# (action "layers-text-discard") +# (action "filters-spiral") +# (action "layers-lock-alpha") +# (action "edit-paste-as-new-image" "v" "Paste") +# (action "script-fu-font-map") + +# end of shortcutsrc diff --git a/config/GIMP/3.0/tags.xml b/config/GIMP/3.0/tags.xml new file mode 100644 index 0000000..758eeed --- /dev/null +++ b/config/GIMP/3.0/tags.xml @@ -0,0 +1,4002 @@ + + + + + round + + + + fuzzy + round + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/GIMP/3.0/templaterc b/config/GIMP/3.0/templaterc new file mode 100644 index 0000000..e66dd29 --- /dev/null +++ b/config/GIMP/3.0/templaterc @@ -0,0 +1,638 @@ +# GIMP templaterc +# +# This file will be entirely rewritten each time you exit. + +(GimpTemplate "A0 (300 ppi)" + (width 9933) + (height 14043) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "A1 (300 ppi)" + (width 7016) + (height 9933) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "A2 (300 ppi)" + (width 4960) + (height 7016) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "A3 (300 ppi)" + (width 3508) + (height 4960) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "A4 (300 ppi)" + (width 2480) + (height 3508) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "A5 (300 ppi)" + (width 1748) + (height 2480) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "A6 (300 ppi)" + (width 1240) + (height 1748) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "A7 (300 ppi)" + (width 874) + (height 1240) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "B4 (300 ppi)" + (width 2953) + (height 4169) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "B5 (300 ppi)" + (width 2079) + (height 2953) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "B5-Japan (300 ppi)" + (width 2150) + (height 3035) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "US Letter (300 ppi)" + (width 2550) + (height 3300) + (unit inches) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "US Legal (300 ppi)" + (width 2550) + (height 4200) + (unit inches) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "88.9×50.8 US Business Card" + (icon-name "gimp-business-card") + (width 1050) + (height 600) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "85×55 Western Europe Business Card" + (icon-name "gimp-business-card") + (width 1004) + (height 650) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "90×50 Eastern Europe Business Card" + (icon-name "gimp-business-card") + (width 1063) + (height 591) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "90×55 Business Card (AU, IN etc.)" + (icon-name "gimp-business-card") + (width 1063) + (height 650) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Toilet paper (US, 300 ppi)" + (icon-name "gimp-toilet-paper") + (width 1350) + (height 1350) + (unit inches) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "CD cover (300 ppi)" + (icon-name "media-optical") + (width 1417) + (height 1417) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Web profile / avatar / icon 512×512" + (icon-name "gimp-web") + (width 512) + (height 512) + (unit pixels) + (xresolution 150) + (yresolution 150) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Web banner leaderboard 728×90" + (icon-name "gimp-web") + (width 728) + (height 90) + (unit pixels) + (xresolution 72) + (yresolution 72) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Web banner half page 300×600" + (icon-name "gimp-web") + (width 300) + (height 600) + (unit pixels) + (xresolution 72) + (yresolution 72) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Web banner medium rectangle 300×250" + (icon-name "gimp-web") + (width 300) + (height 250) + (unit pixels) + (xresolution 72) + (yresolution 72) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Web banner wide skyscraper 160×600" + (icon-name "gimp-web") + (width 160) + (height 600) + (unit pixels) + (xresolution 72) + (yresolution 72) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Web banner mobile leaderboard 320×50" + (icon-name "gimp-web") + (width 320) + (height 50) + (unit pixels) + (xresolution 72) + (yresolution 72) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 4:3 - 1024×768 (XGA)" + (icon-name "gimp-display") + (width 1024) + (height 768) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 4:3 - 1152×864 (XGA+)" + (icon-name "gimp-display") + (width 1152) + (height 864) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 4:3 - 1600×1200 (UXGA)" + (icon-name "gimp-display") + (width 1600) + (height 1200) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 4:3 - 2048×1536 (QXGA)" + (icon-name "gimp-display") + (width 2048) + (height 1536) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 16:10 - 1680×1050 (WSXGA+)" + (icon-name "gimp-display") + (width 1680) + (height 1050) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 16:10 - 1920×1200 (WUXGA)" + (icon-name "gimp-display") + (width 1920) + (height 1200) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 16:10 - 2560×1600 (WQXGA)" + (icon-name "gimp-display") + (width 2560) + (height 1600) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 16:10 - 3840×2400 (WQUXGA)" + (icon-name "gimp-display") + (width 3840) + (height 2400) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 16:9 - 1280×720 (HD 720p)" + (icon-name "gimp-video") + (width 1280) + (height 720) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 16:9 - 1920×1080 (Full HD 1080p)" + (icon-name "gimp-video") + (width 1920) + (height 1080) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 16:9 - 3840×2160 (4K UHD)" + (icon-name "gimp-video") + (width 3840) + (height 2160) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 16:9 - 7680×4320 (8K UHD)" + (icon-name "gimp-video") + (width 7680) + (height 4320) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 17:9 - 2048×1080 (DCI 2K)" + (icon-name "gimp-video") + (width 2048) + (height 1080) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 17:9 - 4096×2160 (DCI 4K)" + (icon-name "gimp-video") + (width 4096) + (height 2160) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Phone - 18.5:9 - 1440×2960" + (icon-name "gimp-smartphone") + (width 1440) + (height 2960) + (unit pixels) + (xresolution 500) + (yresolution 500) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Phone - 19:9 - 1440×3040" + (icon-name "gimp-smartphone") + (width 1440) + (height 3040) + (unit pixels) + (xresolution 500) + (yresolution 500) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Phone - 19.5:9 - 1440×3120" + (icon-name "gimp-smartphone") + (width 1440) + (height 3120) + (unit pixels) + (xresolution 500) + (yresolution 500) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Phone - 20:9 - 1440×3200" + (icon-name "gimp-smartphone") + (width 1440) + (height 3200) + (unit pixels) + (xresolution 500) + (yresolution 500) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) + +# end of templaterc diff --git a/config/GIMP/3.0/theme.css b/config/GIMP/3.0/theme.css new file mode 100644 index 0000000..4ebe31d --- /dev/null +++ b/config/GIMP/3.0/theme.css @@ -0,0 +1,16 @@ +/* GIMP theme.css + * + * This file is written on GIMP startup and on every theme change. + * It is NOT supposed to be edited manually. Edit your personal + * gimp.css file instead (/home/afoucaultc/.config/GIMP/3.0/gimp.css). + */ + +@import url("file:///usr/share/gimp/3.0/themes/Default/gimp-dark.css"); +@import url("file:///etc/gimp/3.0/gimp.css"); + +* { -gtk-icon-style: symbolic; } + +/* prefer-dark-theme */ + + +/* end of theme.css */ diff --git a/config/GIMP/3.0/tool-options/gimp-airbrush-tool b/config/GIMP/3.0/tool-options/gimp-airbrush-tool new file mode 100644 index 0000000..b85737a --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-airbrush-tool @@ -0,0 +1,15 @@ +# GIMP gimp-airbrush-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(gradient "Standard") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-airbrush-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-align-tool b/config/GIMP/3.0/tool-options/gimp-align-tool new file mode 100644 index 0000000..521b3bf --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-align-tool @@ -0,0 +1,4 @@ +# GIMP gimp-align-tool options + + +# end of gimp-align-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-brightness-contrast-tool b/config/GIMP/3.0/tool-options/gimp-brightness-contrast-tool new file mode 100644 index 0000000..16bc2d3 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-brightness-contrast-tool @@ -0,0 +1,4 @@ +# GIMP gimp-brightness-contrast-tool options + + +# end of gimp-brightness-contrast-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-bucket-fill-tool b/config/GIMP/3.0/tool-options/gimp-bucket-fill-tool new file mode 100644 index 0000000..292ce9b --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-bucket-fill-tool @@ -0,0 +1,11 @@ +# GIMP gimp-bucket-fill-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(pattern "Pine") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-bucket-fill-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-by-color-select-tool b/config/GIMP/3.0/tool-options/gimp-by-color-select-tool new file mode 100644 index 0000000..434e5db --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-by-color-select-tool @@ -0,0 +1,4 @@ +# GIMP gimp-by-color-select-tool options + + +# end of gimp-by-color-select-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-cage-tool b/config/GIMP/3.0/tool-options/gimp-cage-tool new file mode 100644 index 0000000..70074a2 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-cage-tool @@ -0,0 +1,4 @@ +# GIMP gimp-cage-tool options + + +# end of gimp-cage-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-clone-tool b/config/GIMP/3.0/tool-options/gimp-clone-tool new file mode 100644 index 0000000..dcd1490 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-clone-tool @@ -0,0 +1,14 @@ +# GIMP gimp-clone-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-clone-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-color-picker-tool b/config/GIMP/3.0/tool-options/gimp-color-picker-tool new file mode 100644 index 0000000..ec2b890 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-color-picker-tool @@ -0,0 +1,8 @@ +# GIMP gimp-color-picker-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-color-picker-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-convolve-tool b/config/GIMP/3.0/tool-options/gimp-convolve-tool new file mode 100644 index 0000000..b4555cc --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-convolve-tool @@ -0,0 +1,14 @@ +# GIMP gimp-convolve-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-convolve-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-crop-tool b/config/GIMP/3.0/tool-options/gimp-crop-tool new file mode 100644 index 0000000..9789402 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-crop-tool @@ -0,0 +1,11 @@ +# GIMP gimp-crop-tool options + +(aspect-denominator 523) +(aspect-numerator 541) +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(pattern "Pine") + +# end of gimp-crop-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-curves-tool b/config/GIMP/3.0/tool-options/gimp-curves-tool new file mode 100644 index 0000000..b7a332b --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-curves-tool @@ -0,0 +1,4 @@ +# GIMP gimp-curves-tool options + + +# end of gimp-curves-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-dodge-burn-tool b/config/GIMP/3.0/tool-options/gimp-dodge-burn-tool new file mode 100644 index 0000000..45b5f8a --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-dodge-burn-tool @@ -0,0 +1,13 @@ +# GIMP gimp-dodge-burn-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-dodge-burn-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-ellipse-select-tool b/config/GIMP/3.0/tool-options/gimp-ellipse-select-tool new file mode 100644 index 0000000..5b00a25 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-ellipse-select-tool @@ -0,0 +1,4 @@ +# GIMP gimp-ellipse-select-tool options + + +# end of gimp-ellipse-select-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-eraser-tool b/config/GIMP/3.0/tool-options/gimp-eraser-tool new file mode 100644 index 0000000..9c760c9 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-eraser-tool @@ -0,0 +1,13 @@ +# GIMP gimp-eraser-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-eraser-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-flip-tool b/config/GIMP/3.0/tool-options/gimp-flip-tool new file mode 100644 index 0000000..07b1c5c --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-flip-tool @@ -0,0 +1,6 @@ +# GIMP gimp-flip-tool options + +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-flip-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-foreground-select-tool b/config/GIMP/3.0/tool-options/gimp-foreground-select-tool new file mode 100644 index 0000000..ea2c582 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-foreground-select-tool @@ -0,0 +1,8 @@ +# GIMP gimp-foreground-select-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-foreground-select-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-free-select-tool b/config/GIMP/3.0/tool-options/gimp-free-select-tool new file mode 100644 index 0000000..86b6ab3 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-free-select-tool @@ -0,0 +1,4 @@ +# GIMP gimp-free-select-tool options + + +# end of gimp-free-select-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-fuzzy-select-tool b/config/GIMP/3.0/tool-options/gimp-fuzzy-select-tool new file mode 100644 index 0000000..a0f7bdb --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-fuzzy-select-tool @@ -0,0 +1,4 @@ +# GIMP gimp-fuzzy-select-tool options + + +# end of gimp-fuzzy-select-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-gegl-tool b/config/GIMP/3.0/tool-options/gimp-gegl-tool new file mode 100644 index 0000000..f085e5f --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-gegl-tool @@ -0,0 +1,4 @@ +# GIMP gimp-gegl-tool options + + +# end of gimp-gegl-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-gradient-tool b/config/GIMP/3.0/tool-options/gimp-gradient-tool new file mode 100644 index 0000000..b84a5d3 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-gradient-tool @@ -0,0 +1,11 @@ +# GIMP gimp-gradient-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(gradient "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-gradient-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-handle-transform-tool b/config/GIMP/3.0/tool-options/gimp-handle-transform-tool new file mode 100644 index 0000000..8192227 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-handle-transform-tool @@ -0,0 +1,6 @@ +# GIMP gimp-handle-transform-tool options + +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-handle-transform-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-heal-tool b/config/GIMP/3.0/tool-options/gimp-heal-tool new file mode 100644 index 0000000..6b55ee6 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-heal-tool @@ -0,0 +1,14 @@ +# GIMP gimp-heal-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-heal-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-ink-tool b/config/GIMP/3.0/tool-options/gimp-ink-tool new file mode 100644 index 0000000..6e292ea --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-ink-tool @@ -0,0 +1,11 @@ +# GIMP gimp-ink-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(pattern "Pine") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-ink-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-iscissors-tool b/config/GIMP/3.0/tool-options/gimp-iscissors-tool new file mode 100644 index 0000000..fb42baf --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-iscissors-tool @@ -0,0 +1,4 @@ +# GIMP gimp-iscissors-tool options + + +# end of gimp-iscissors-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-levels-tool b/config/GIMP/3.0/tool-options/gimp-levels-tool new file mode 100644 index 0000000..04c0f93 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-levels-tool @@ -0,0 +1,4 @@ +# GIMP gimp-levels-tool options + + +# end of gimp-levels-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-measure-tool b/config/GIMP/3.0/tool-options/gimp-measure-tool new file mode 100644 index 0000000..ec7cff3 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-measure-tool @@ -0,0 +1,4 @@ +# GIMP gimp-measure-tool options + + +# end of gimp-measure-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-move-tool b/config/GIMP/3.0/tool-options/gimp-move-tool new file mode 100644 index 0000000..b9721a8 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-move-tool @@ -0,0 +1,4 @@ +# GIMP gimp-move-tool options + + +# end of gimp-move-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-mypaint-brush-tool b/config/GIMP/3.0/tool-options/gimp-mypaint-brush-tool new file mode 100644 index 0000000..17d0d2f --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-mypaint-brush-tool @@ -0,0 +1,14 @@ +# GIMP gimp-mypaint-brush-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(mybrush "100% Opaque") +(pattern "Pine") +(brush-size 51) +(brush-hardness 0.5) +(radius 3.0099999904632568) +(hardness 0.94999998807907104) + +# end of gimp-mypaint-brush-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-offset-tool b/config/GIMP/3.0/tool-options/gimp-offset-tool new file mode 100644 index 0000000..8670636 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-offset-tool @@ -0,0 +1,6 @@ +# GIMP gimp-offset-tool options + +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-offset-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-operation-tool b/config/GIMP/3.0/tool-options/gimp-operation-tool new file mode 100644 index 0000000..79f1589 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-operation-tool @@ -0,0 +1,8 @@ +# GIMP gimp-operation-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-operation-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-paintbrush-tool b/config/GIMP/3.0/tool-options/gimp-paintbrush-tool new file mode 100644 index 0000000..adbb334 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-paintbrush-tool @@ -0,0 +1,15 @@ +# GIMP gimp-paintbrush-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(gradient "Standard") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-paintbrush-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-pencil-tool b/config/GIMP/3.0/tool-options/gimp-pencil-tool new file mode 100644 index 0000000..16a63b1 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-pencil-tool @@ -0,0 +1,15 @@ +# GIMP gimp-pencil-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(gradient "Standard") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-pencil-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-perspective-clone-tool b/config/GIMP/3.0/tool-options/gimp-perspective-clone-tool new file mode 100644 index 0000000..f8171eb --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-perspective-clone-tool @@ -0,0 +1,14 @@ +# GIMP gimp-perspective-clone-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-perspective-clone-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-perspective-tool b/config/GIMP/3.0/tool-options/gimp-perspective-tool new file mode 100644 index 0000000..4a3c437 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-perspective-tool @@ -0,0 +1,6 @@ +# GIMP gimp-perspective-tool options + +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-perspective-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-rect-select-tool b/config/GIMP/3.0/tool-options/gimp-rect-select-tool new file mode 100644 index 0000000..25bc900 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-rect-select-tool @@ -0,0 +1,4 @@ +# GIMP gimp-rect-select-tool options + + +# end of gimp-rect-select-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-rotate-tool b/config/GIMP/3.0/tool-options/gimp-rotate-tool new file mode 100644 index 0000000..5c502db --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-rotate-tool @@ -0,0 +1,6 @@ +# GIMP gimp-rotate-tool options + +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-rotate-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-scale-tool b/config/GIMP/3.0/tool-options/gimp-scale-tool new file mode 100644 index 0000000..510917a --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-scale-tool @@ -0,0 +1,7 @@ +# GIMP gimp-scale-tool options + +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(interpolation linear) + +# end of gimp-scale-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-shear-tool b/config/GIMP/3.0/tool-options/gimp-shear-tool new file mode 100644 index 0000000..b1cf8f8 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-shear-tool @@ -0,0 +1,4 @@ +# GIMP gimp-shear-tool options + + +# end of gimp-shear-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-smudge-tool b/config/GIMP/3.0/tool-options/gimp-smudge-tool new file mode 100644 index 0000000..629fa9e --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-smudge-tool @@ -0,0 +1,15 @@ +# GIMP gimp-smudge-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(gradient "Standard") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-smudge-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-text-tool b/config/GIMP/3.0/tool-options/gimp-text-tool new file mode 100644 index 0000000..bc9b635 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-text-tool @@ -0,0 +1,8 @@ +# GIMP gimp-text-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(palette "Standard") +(font "Monospace") + +# end of gimp-text-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-threshold-tool b/config/GIMP/3.0/tool-options/gimp-threshold-tool new file mode 100644 index 0000000..f114556 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-threshold-tool @@ -0,0 +1,4 @@ +# GIMP gimp-threshold-tool options + + +# end of gimp-threshold-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-transform-3d-tool b/config/GIMP/3.0/tool-options/gimp-transform-3d-tool new file mode 100644 index 0000000..63c59e0 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-transform-3d-tool @@ -0,0 +1,6 @@ +# GIMP gimp-transform-3d-tool options + +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-transform-3d-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-unified-transform-tool b/config/GIMP/3.0/tool-options/gimp-unified-transform-tool new file mode 100644 index 0000000..a085029 --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-unified-transform-tool @@ -0,0 +1,6 @@ +# GIMP gimp-unified-transform-tool options + +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-unified-transform-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-vector-tool b/config/GIMP/3.0/tool-options/gimp-vector-tool new file mode 100644 index 0000000..8583d6e --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-vector-tool @@ -0,0 +1,13 @@ +# GIMP gimp-vector-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(gradient "Standard") +(palette "Standard") + +# end of gimp-vector-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-warp-tool b/config/GIMP/3.0/tool-options/gimp-warp-tool new file mode 100644 index 0000000..e837f9e --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-warp-tool @@ -0,0 +1,4 @@ +# GIMP gimp-warp-tool options + + +# end of gimp-warp-tool options diff --git a/config/GIMP/3.0/tool-options/gimp-zoom-tool b/config/GIMP/3.0/tool-options/gimp-zoom-tool new file mode 100644 index 0000000..316363e --- /dev/null +++ b/config/GIMP/3.0/tool-options/gimp-zoom-tool @@ -0,0 +1,4 @@ +# GIMP gimp-zoom-tool options + + +# end of gimp-zoom-tool options diff --git a/config/GIMP/3.0/toolrc b/config/GIMP/3.0/toolrc new file mode 100644 index 0000000..81bb052 --- /dev/null +++ b/config/GIMP/3.0/toolrc @@ -0,0 +1,185 @@ +# GIMP toolrc + +(file-version 1) + +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-move-tool") + (children + (GimpToolInfo "gimp-move-tool" + (icon-name "gimp-tool-move") + (visible yes)) + (GimpToolInfo "gimp-align-tool" + (icon-name "gimp-tool-align") + (visible yes)))) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-rect-select-tool") + (children + (GimpToolInfo "gimp-rect-select-tool" + (icon-name "gimp-tool-rect-select") + (visible yes)) + (GimpToolInfo "gimp-ellipse-select-tool" + (icon-name "gimp-tool-ellipse-select") + (visible yes)))) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-free-select-tool") + (children + (GimpToolInfo "gimp-free-select-tool" + (icon-name "gimp-tool-free-select") + (visible yes)) + (GimpToolInfo "gimp-iscissors-tool" + (icon-name "gimp-tool-iscissors") + (visible yes)) + (GimpToolInfo "gimp-foreground-select-tool" + (icon-name "gimp-tool-foreground-select") + (visible yes)))) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-fuzzy-select-tool") + (children + (GimpToolInfo "gimp-fuzzy-select-tool" + (icon-name "gimp-tool-fuzzy-select") + (visible yes)) + (GimpToolInfo "gimp-by-color-select-tool" + (icon-name "gimp-tool-by-color-select") + (visible yes)))) +(GimpToolInfo "gimp-crop-tool" + (icon-name "gimp-tool-crop") + (visible yes)) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-unified-transform-tool") + (children + (GimpToolInfo "gimp-unified-transform-tool" + (icon-name "gimp-tool-unified-transform") + (visible yes)) + (GimpToolInfo "gimp-rotate-tool" + (icon-name "gimp-tool-rotate") + (visible yes)) + (GimpToolInfo "gimp-scale-tool" + (icon-name "gimp-tool-scale") + (visible yes)) + (GimpToolInfo "gimp-shear-tool" + (icon-name "gimp-tool-shear") + (visible yes)) + (GimpToolInfo "gimp-flip-tool" + (icon-name "gimp-tool-flip") + (visible yes)) + (GimpToolInfo "gimp-perspective-tool" + (icon-name "gimp-tool-perspective") + (visible yes)) + (GimpToolInfo "gimp-transform-3d-tool" + (icon-name "gimp-tool-transform-3d") + (visible yes)) + (GimpToolInfo "gimp-handle-transform-tool" + (icon-name "gimp-tool-handle-transform") + (visible yes)))) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-warp-tool") + (children + (GimpToolInfo "gimp-warp-tool" + (icon-name "gimp-tool-warp") + (visible yes)) + (GimpToolInfo "gimp-cage-tool" + (icon-name "gimp-tool-cage") + (visible yes)))) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-bucket-fill-tool") + (children + (GimpToolInfo "gimp-bucket-fill-tool" + (icon-name "gimp-tool-bucket-fill") + (visible yes)) + (GimpToolInfo "gimp-gradient-tool" + (icon-name "gimp-tool-gradient") + (visible yes)))) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-paintbrush-tool") + (children + (GimpToolInfo "gimp-paintbrush-tool" + (icon-name "gimp-tool-paintbrush") + (visible yes)) + (GimpToolInfo "gimp-pencil-tool" + (icon-name "gimp-tool-pencil") + (visible yes)) + (GimpToolInfo "gimp-airbrush-tool" + (icon-name "gimp-tool-airbrush") + (visible yes)) + (GimpToolInfo "gimp-ink-tool" + (icon-name "gimp-tool-ink") + (visible yes)) + (GimpToolInfo "gimp-mypaint-brush-tool" + (icon-name "gimp-tool-mypaint-brush") + (visible yes)))) +(GimpToolInfo "gimp-eraser-tool" + (icon-name "gimp-tool-eraser") + (visible yes)) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-clone-tool") + (children + (GimpToolInfo "gimp-clone-tool" + (icon-name "gimp-tool-clone") + (visible yes)) + (GimpToolInfo "gimp-perspective-clone-tool" + (icon-name "gimp-tool-perspective-clone") + (visible yes)) + (GimpToolInfo "gimp-heal-tool" + (icon-name "gimp-tool-heal") + (visible yes)))) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-smudge-tool") + (children + (GimpToolInfo "gimp-smudge-tool" + (icon-name "gimp-tool-smudge") + (visible yes)) + (GimpToolInfo "gimp-convolve-tool" + (icon-name "gimp-tool-blur") + (visible yes)) + (GimpToolInfo "gimp-dodge-burn-tool" + (icon-name "gimp-tool-dodge") + (visible yes)))) +(GimpToolInfo "gimp-vector-tool" + (icon-name "gimp-tool-path") + (visible yes)) +(GimpToolInfo "gimp-text-tool" + (icon-name "gimp-tool-text") + (visible yes)) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-color-picker-tool") + (children + (GimpToolInfo "gimp-color-picker-tool" + (icon-name "gimp-tool-color-picker") + (visible yes)) + (GimpToolInfo "gimp-measure-tool" + (icon-name "gimp-tool-measure") + (visible yes)))) +(GimpToolInfo "gimp-zoom-tool" + (icon-name "gimp-tool-zoom") + (visible yes)) +(GimpToolInfo "gimp-brightness-contrast-tool" + (icon-name "gimp-tool-brightness-contrast") + (visible no)) +(GimpToolInfo "gimp-threshold-tool" + (icon-name "gimp-tool-threshold") + (visible no)) +(GimpToolInfo "gimp-levels-tool" + (icon-name "gimp-tool-levels") + (visible no)) +(GimpToolInfo "gimp-curves-tool" + (icon-name "gimp-tool-curves") + (visible no)) +(GimpToolInfo "gimp-offset-tool" + (icon-name "gimp-tool-offset") + (visible no)) +(GimpToolInfo "gimp-gegl-tool" + (icon-name "gimp-gegl") + (visible no)) + +# end of toolrc diff --git a/config/GIMP/3.0/unitrc b/config/GIMP/3.0/unitrc new file mode 100644 index 0000000..0fdcbf6 --- /dev/null +++ b/config/GIMP/3.0/unitrc @@ -0,0 +1,39 @@ +# GIMP units +# +# This file contains the user unit database. You can edit this list with the +# unit editor. You are not supposed to edit it manually, but of course you +# can do. +# This file will be entirely rewritten each time you exit. + +(unit-info "centimeters" + (factor 2.54) + (digits 2) + (symbol "cm") + (abbreviation "cm")) +(unit-info "meters" + (factor 0.025399999999999999) + (digits 4) + (symbol "m") + (abbreviation "m")) +(unit-info "feet" + (factor 0.083333000000000004) + (digits 4) + (symbol "'") + (abbreviation "ft")) +(unit-info "yards" + (factor 0.027778000000000001) + (digits 4) + (symbol "yd") + (abbreviation "yd")) +(unit-info "typogr. points" + (factor 72.269999999999996) + (digits 0) + (symbol "tpt") + (abbreviation "tpt")) +(unit-info "typogr. picas" + (factor 6.0225) + (digits 1) + (symbol "tpc") + (abbreviation "tpc")) + +# end of units diff --git a/config/GIMP/3.2/action-history b/config/GIMP/3.2/action-history new file mode 100644 index 0000000..4f5212e --- /dev/null +++ b/config/GIMP/3.2/action-history @@ -0,0 +1,104 @@ +# GIMP action-history + +(history-item "layers-visible" 5) +(history-item "layers-lock-alpha" 1) +(history-item "drawable-visible" 4) +(history-item "filters-color-balance" 1) +(history-item "layers-edit-text" 2) +(history-item "image-new" 1) +(history-item "filters-hue-chroma" 0) +(history-item "dockable-show-button-bar" 0) +(history-item "dockable-preview-size-tiny" 0) +(history-item "dockable-preview-size-medium" 0) +(history-item "dockable-tab-style-icon" 0) +(history-item "dockable-tab-style-preview" 0) +(history-item "dockable-view-type-list" 0) +(history-item "dock-show-image-menu" 0) +(history-item "dock-auto-follow-active" 0) +(history-item "dock-move-to-screen-wayland-1" 0) +(history-item "layers-blend-space-auto" 0) +(history-item "layers-composite-space-auto" 0) +(history-item "layers-composite-mode-auto" 0) +(history-item "drawable-lock-content" 0) +(history-item "drawable-lock-position" 0) +(history-item "image-convert-non-linear" 0) +(history-item "image-color-profile-use-srgb" 0) +(history-item "view-color-management-enable" 0) +(history-item "view-show-selection" 0) +(history-item "view-show-layer-boundary" 0) +(history-item "view-show-canvas-boundary" 0) +(history-item "view-show-guides" 0) +(history-item "view-show-sample-points" 0) +(history-item "view-show-rulers" 0) +(history-item "view-show-scrollbars" 0) +(history-item "file-export" 0) +(history-item "file-quit" 0) +(history-item "layers-lock-content" 0) +(history-item "layers-lock-position" 0) +(history-item "view-dot-for-dot" 0) +(history-item "view-display-black-point-compensation" 0) +(history-item "view-snap-to-guides" 0) +(history-item "view-show-menubar" 0) +(history-item "view-show-statusbar" 0) +(history-item "edit-clear" 0) +(history-item "file-overwrite" 0) +(history-item "layers-new" 0) +(history-item "file-save" 0) +(history-item "file-export-as" 0) +(history-item "tools-move" 0) +(history-item "file-open" 0) +(history-item "filters-brightness-contrast" 0) +(history-item "layers-alpha-selection-replace" 0) +(history-item "select-grow" 0) +(history-item "edit-paste" 0) +(history-item "layers-delete" 0) +(history-item "edit-copy" 0) +(history-item "edit-paste-as-new-image" 0) +(history-item "filters-color-temperature" 0) +(history-item "filters-noise-cie-lch" 0) +(history-item "filters-exposure" 0) +(history-item "filters-curves" 0) +(history-item "layers-alpha-remove" 0) +(history-item "filters-saturation" 0) +(history-item "tools-rect-select" 0) +(history-item "filters-hue-saturation" 0) +(history-item "filters-invert-value" 0) +(history-item "filters-fattal-2002" 0) +(history-item "plug-in-despeckle" 0) +(history-item "filters-cubism" 0) +(history-item "plug-in-gimpressionist" 0) +(history-item "file-open-as-layers" 0) +(history-item "layers-merge-down" 0) +(history-item "filters-invert-perceptual" 0) +(history-item "select-feather" 0) +(history-item "select-invert" 0) +(history-item "tools-unified-transform" 0) +(history-item "filters-alien-map" 0) +(history-item "dockable-close-tab" 0) +(history-item "tools-ellipse-select" 0) +(history-item "file-save-as" 0) +(history-item "tools-align" 0) +(history-item "image-convert-rgb" 0) +(history-item "image-convert-indexed" 0) +(history-item "dialogs-preferences" 0) +(history-item "select-all" 0) +(history-item "dockable-preview-size-large" 0) +(history-item "dockable-view-type-grid" 0) +(history-item "tools-scale" 0) +(history-item "quick-mask-invert-on" 0) +(history-item "quick-mask-invert-off" 0) +(history-item "paths-lock-content" 0) +(history-item "paths-lock-position" 0) +(history-item "channels-lock-content" 0) +(history-item "channels-lock-position" 0) +(history-item "image-softproof-black-point-compensation" 0) +(history-item "dockable-detach-tab" 0) +(history-item "tool-options-reset" 0) +(history-item "image-softproof-intent-perceptual" 0) +(history-item "image-softproof-intent-relative-colorimetric" 0) +(history-item "image-convert-u8" 0) +(history-item "image-convert-linear" 0) +(history-item "windows-show-tabs" 0) +(history-item "windows-use-single-window-mode" 0) + +# end of action-history diff --git a/config/GIMP/3.2/colorrc b/config/GIMP/3.2/colorrc new file mode 100644 index 0000000..686846d --- /dev/null +++ b/config/GIMP/3.2/colorrc @@ -0,0 +1,17 @@ +# GIMP colorrc +# +# This file holds a list of recently used colors. + +(color-history + (color "HSV float" 12 "\0\0\0\0\0\0\0\0\0\0\0\0" 0) + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0) + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0) + (color "HSVA float" 16 "\63\330\21\77\74\332\240\76\202P\61\76\0\0\200\77" 0) + (color "R'G'B'A u8" 4 "\0\0\370\377" 0) + (color "R'G'B'A double" 32 "\0\0\0\140\42\27\267\77\0\0\0\340\223\222\342\77\0\0\0\340\72\72\352\77\0\0\0\0\0\0\360\77" 0) + (color "HSV float" 12 "\63\330\21\77\330\345O\77\355\235\325\76" 0) + (color "R'G'B'A u8" 4 "\377\377\0\377" 0) + (color "R'G'B'A u8" 4 "\272\321\236\377" 0) + (color "R'G'B'A u8" 4 "\336\357\370\377" 0)) + +# end of colorrc diff --git a/config/GIMP/3.2/contextrc b/config/GIMP/3.2/contextrc new file mode 100644 index 0000000..12bf976 --- /dev/null +++ b/config/GIMP/3.2/contextrc @@ -0,0 +1,18 @@ +# GIMP user context + +(tool "gimp-move-tool") +(paint-info "gimp-paintbrush") +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(mybrush "100% Opaque") +(pattern "Pine") +(gradient "Standard") +(palette "Standard") +(font "Monospace") +(tool-preset "Core Pointer") + +# end of user context diff --git a/config/GIMP/3.2/controllerrc b/config/GIMP/3.2/controllerrc new file mode 100644 index 0000000..d1e8c9f --- /dev/null +++ b/config/GIMP/3.2/controllerrc @@ -0,0 +1,40 @@ +# GIMP controllerrc +# +# This file will be entirely rewritten each time you exit. + +(GimpControllerInfo "Main Mouse Wheel" + (icon-name "gimp-controller-wheel") + (enabled yes) + (debug-events no) + (controller "GimpControllerWheel") + (mapping + (map "scroll-down-shift-primary" "tools-aspect-decrease") + (map "scroll-up-shift-alt" "tools-angle-increase") + (map "scroll-up-alt" "tools-opacity-increase") + (map "scroll-down-shift-alt" "tools-angle-decrease") + (map "scroll-down-primary-alt" "tools-size-decrease") + (map "scroll-up-shift-primary-alt" "tools-spacing-increase") + (map "scroll-down-alt" "tools-opacity-decrease") + (map "scroll-up-primary-alt" "tools-size-increase") + (map "scroll-up-shift-primary" "tools-aspect-increase") + (map "scroll-down-shift-primary-alt" "tools-spacing-decrease"))) +(GimpControllerInfo "Main Keyboard" + (icon-name "gimp-controller-keyboard") + (enabled yes) + (debug-events no) + (controller "GimpControllerKeyboard") + (mapping + (map "cursor-right-alt" "tools-size-increase") + (map "cursor-left-shift" "view-scroll-page-left") + (map "cursor-right-shift" "view-scroll-page-right") + (map "cursor-up-shift" "view-scroll-page-up") + (map "cursor-up-primary" "view-scroll-top-border") + (map "cursor-down-primary" "view-scroll-bottom-border") + (map "cursor-up-alt" "tools-size-increase-skip") + (map "cursor-left-alt" "tools-size-decrease") + (map "cursor-down-shift" "view-scroll-page-down") + (map "cursor-right-primary" "view-scroll-right-border") + (map "cursor-left-primary" "view-scroll-left-border") + (map "cursor-down-alt" "tools-size-decrease-skip"))) + +# end of controllerrc diff --git a/config/GIMP/3.2/devicerc b/config/GIMP/3.2/devicerc new file mode 100644 index 0000000..d2e86e8 --- /dev/null +++ b/config/GIMP/3.2/devicerc @@ -0,0 +1,123 @@ +# GIMP devicerc + +(GimpDeviceInfo "Core Pointer" + (icon-name "gimp-cursor") + (name "Core Pointer") + (tool-options "GimpMoveOptions" + (tool "gimp-move-tool")) + (use-fg-bg no) + (use-opacity-paint-mode no) + (use-brush no) + (use-dynamics no) + (use-mypaint-brush no) + (use-gradient no) + (use-pattern no) + (use-palette no) + (use-font no) + (mode screen) + (axes 2 x y) + (keys 0) + (pressure-curve + (curve-type smooth) + (points 0) + (point-types 0) + (n-samples 256) + (samples 256 0 0.0039215686274509803 0.0078431372549019607 0.011764705882352941 0.015686274509803921 0.019607843137254902 0.023529411764705882 0.027450980392156862 0.031372549019607843 0.035294117647058823 0.039215686274509803 0.043137254901960784 0.047058823529411764 0.050980392156862744 0.054901960784313725 0.058823529411764705 0.062745098039215685 0.066666666666666666 0.070588235294117646 0.074509803921568626 0.078431372549019607 0.082352941176470587 0.086274509803921567 0.090196078431372548 0.094117647058823528 0.098039215686274508 0.10196078431372549 0.10588235294117647 0.10980392156862745 0.11372549019607843 0.11764705882352941 0.12156862745098039 0.12549019607843137 0.12941176470588237 0.13333333333333333 0.13725490196078433 0.14117647058823529 0.14509803921568629 0.14901960784313725 0.15294117647058825 0.15686274509803921 0.16078431372549021 0.16470588235294117 0.16862745098039217 0.17254901960784313 0.17647058823529413 0.1803921568627451 0.18431372549019609 0.18823529411764706 0.19215686274509805 0.19607843137254902 0.20000000000000001 0.20392156862745098 0.20784313725490197 0.21176470588235294 0.21568627450980393 0.2196078431372549 0.22352941176470589 0.22745098039215686 0.23137254901960785 0.23529411764705882 0.23921568627450981 0.24313725490196078 0.24705882352941178 0.25098039215686274 0.25490196078431371 0.25882352941176473 0.2627450980392157 0.26666666666666666 0.27058823529411763 0.27450980392156865 0.27843137254901962 0.28235294117647058 0.28627450980392155 0.29019607843137257 0.29411764705882354 0.29803921568627451 0.30196078431372547 0.30588235294117649 0.30980392156862746 0.31372549019607843 0.31764705882352939 0.32156862745098042 0.32549019607843138 0.32941176470588235 0.33333333333333331 0.33725490196078434 0.3411764705882353 0.34509803921568627 0.34901960784313724 0.35294117647058826 0.35686274509803922 0.36078431372549019 0.36470588235294116 0.36862745098039218 0.37254901960784315 0.37647058823529411 0.38039215686274508 0.3843137254901961 0.38823529411764707 0.39215686274509803 0.396078431372549 0.40000000000000002 0.40392156862745099 0.40784313725490196 0.41176470588235292 0.41568627450980394 0.41960784313725491 0.42352941176470588 0.42745098039215684 0.43137254901960786 0.43529411764705883 0.4392156862745098 0.44313725490196076 0.44705882352941179 0.45098039215686275 0.45490196078431372 0.45882352941176469 0.46274509803921571 0.46666666666666667 0.47058823529411764 0.47450980392156861 0.47843137254901963 0.4823529411764706 0.48627450980392156 0.49019607843137253 0.49411764705882355 0.49803921568627452 0.50196078431372548 0.50588235294117645 0.50980392156862742 0.51372549019607838 0.51764705882352946 0.52156862745098043 0.52549019607843139 0.52941176470588236 0.53333333333333333 0.53725490196078429 0.54117647058823526 0.54509803921568623 0.5490196078431373 0.55294117647058827 0.55686274509803924 0.5607843137254902 0.56470588235294117 0.56862745098039214 0.5725490196078431 0.57647058823529407 0.58039215686274515 0.58431372549019611 0.58823529411764708 0.59215686274509804 0.59607843137254901 0.59999999999999998 0.60392156862745094 0.60784313725490191 0.61176470588235299 0.61568627450980395 0.61960784313725492 0.62352941176470589 0.62745098039215685 0.63137254901960782 0.63529411764705879 0.63921568627450975 0.64313725490196083 0.6470588235294118 0.65098039215686276 0.65490196078431373 0.6588235294117647 0.66274509803921566 0.66666666666666663 0.6705882352941176 0.67450980392156867 0.67843137254901964 0.68235294117647061 0.68627450980392157 0.69019607843137254 0.69411764705882351 0.69803921568627447 0.70196078431372544 0.70588235294117652 0.70980392156862748 0.71372549019607845 0.71764705882352942 0.72156862745098038 0.72549019607843135 0.72941176470588232 0.73333333333333328 0.73725490196078436 0.74117647058823533 0.74509803921568629 0.74901960784313726 0.75294117647058822 0.75686274509803919 0.76078431372549016 0.76470588235294112 0.7686274509803922 0.77254901960784317 0.77647058823529413 0.7803921568627451 0.78431372549019607 0.78823529411764703 0.792156862745098 0.79607843137254897 0.80000000000000004 0.80392156862745101 0.80784313725490198 0.81176470588235294 0.81568627450980391 0.81960784313725488 0.82352941176470584 0.82745098039215681 0.83137254901960789 0.83529411764705885 0.83921568627450982 0.84313725490196079 0.84705882352941175 0.85098039215686272 0.85490196078431369 0.85882352941176465 0.86274509803921573 0.8666666666666667 0.87058823529411766 0.87450980392156863 0.8784313725490196 0.88235294117647056 0.88627450980392153 0.8901960784313725 0.89411764705882357 0.89803921568627454 0.90196078431372551 0.90588235294117647 0.90980392156862744 0.9137254901960784 0.91764705882352937 0.92156862745098034 0.92549019607843142 0.92941176470588238 0.93333333333333335 0.93725490196078431 0.94117647058823528 0.94509803921568625 0.94901960784313721 0.95294117647058818 0.95686274509803926 0.96078431372549022 0.96470588235294119 0.96862745098039216 0.97254901960784312 0.97647058823529409 0.98039215686274506 0.98431372549019602 0.9882352941176471 0.99215686274509807 0.99607843137254903 1)) + (pad-actions)) +(GimpDeviceInfo "Wayland Pointer" + (icon-name "gimp-cursor") + (name "Wayland Pointer") + (tool-options "GimpPaintOptions" + (tool "gimp-paintbrush-tool") + (brush "2. Hardness 050") + (dynamics "Pressure Size") + (pattern "Pine") + (gradient "Standard") + (palette "Standard") + (brush-size 51) + (brush-hardness 0.5)) + (use-fg-bg yes) + (use-opacity-paint-mode no) + (use-brush yes) + (use-dynamics yes) + (use-mypaint-brush no) + (use-gradient yes) + (use-pattern yes) + (use-palette yes) + (use-font no) + (mode disabled) + (axes 2 x y) + (keys 0) + (pressure-curve + (curve-type smooth) + (points 0) + (point-types 0) + (n-samples 256) + (samples 256 0 0.0039215686274509803 0.0078431372549019607 0.011764705882352941 0.015686274509803921 0.019607843137254902 0.023529411764705882 0.027450980392156862 0.031372549019607843 0.035294117647058823 0.039215686274509803 0.043137254901960784 0.047058823529411764 0.050980392156862744 0.054901960784313725 0.058823529411764705 0.062745098039215685 0.066666666666666666 0.070588235294117646 0.074509803921568626 0.078431372549019607 0.082352941176470587 0.086274509803921567 0.090196078431372548 0.094117647058823528 0.098039215686274508 0.10196078431372549 0.10588235294117647 0.10980392156862745 0.11372549019607843 0.11764705882352941 0.12156862745098039 0.12549019607843137 0.12941176470588237 0.13333333333333333 0.13725490196078433 0.14117647058823529 0.14509803921568629 0.14901960784313725 0.15294117647058825 0.15686274509803921 0.16078431372549021 0.16470588235294117 0.16862745098039217 0.17254901960784313 0.17647058823529413 0.1803921568627451 0.18431372549019609 0.18823529411764706 0.19215686274509805 0.19607843137254902 0.20000000000000001 0.20392156862745098 0.20784313725490197 0.21176470588235294 0.21568627450980393 0.2196078431372549 0.22352941176470589 0.22745098039215686 0.23137254901960785 0.23529411764705882 0.23921568627450981 0.24313725490196078 0.24705882352941178 0.25098039215686274 0.25490196078431371 0.25882352941176473 0.2627450980392157 0.26666666666666666 0.27058823529411763 0.27450980392156865 0.27843137254901962 0.28235294117647058 0.28627450980392155 0.29019607843137257 0.29411764705882354 0.29803921568627451 0.30196078431372547 0.30588235294117649 0.30980392156862746 0.31372549019607843 0.31764705882352939 0.32156862745098042 0.32549019607843138 0.32941176470588235 0.33333333333333331 0.33725490196078434 0.3411764705882353 0.34509803921568627 0.34901960784313724 0.35294117647058826 0.35686274509803922 0.36078431372549019 0.36470588235294116 0.36862745098039218 0.37254901960784315 0.37647058823529411 0.38039215686274508 0.3843137254901961 0.38823529411764707 0.39215686274509803 0.396078431372549 0.40000000000000002 0.40392156862745099 0.40784313725490196 0.41176470588235292 0.41568627450980394 0.41960784313725491 0.42352941176470588 0.42745098039215684 0.43137254901960786 0.43529411764705883 0.4392156862745098 0.44313725490196076 0.44705882352941179 0.45098039215686275 0.45490196078431372 0.45882352941176469 0.46274509803921571 0.46666666666666667 0.47058823529411764 0.47450980392156861 0.47843137254901963 0.4823529411764706 0.48627450980392156 0.49019607843137253 0.49411764705882355 0.49803921568627452 0.50196078431372548 0.50588235294117645 0.50980392156862742 0.51372549019607838 0.51764705882352946 0.52156862745098043 0.52549019607843139 0.52941176470588236 0.53333333333333333 0.53725490196078429 0.54117647058823526 0.54509803921568623 0.5490196078431373 0.55294117647058827 0.55686274509803924 0.5607843137254902 0.56470588235294117 0.56862745098039214 0.5725490196078431 0.57647058823529407 0.58039215686274515 0.58431372549019611 0.58823529411764708 0.59215686274509804 0.59607843137254901 0.59999999999999998 0.60392156862745094 0.60784313725490191 0.61176470588235299 0.61568627450980395 0.61960784313725492 0.62352941176470589 0.62745098039215685 0.63137254901960782 0.63529411764705879 0.63921568627450975 0.64313725490196083 0.6470588235294118 0.65098039215686276 0.65490196078431373 0.6588235294117647 0.66274509803921566 0.66666666666666663 0.6705882352941176 0.67450980392156867 0.67843137254901964 0.68235294117647061 0.68627450980392157 0.69019607843137254 0.69411764705882351 0.69803921568627447 0.70196078431372544 0.70588235294117652 0.70980392156862748 0.71372549019607845 0.71764705882352942 0.72156862745098038 0.72549019607843135 0.72941176470588232 0.73333333333333328 0.73725490196078436 0.74117647058823533 0.74509803921568629 0.74901960784313726 0.75294117647058822 0.75686274509803919 0.76078431372549016 0.76470588235294112 0.7686274509803922 0.77254901960784317 0.77647058823529413 0.7803921568627451 0.78431372549019607 0.78823529411764703 0.792156862745098 0.79607843137254897 0.80000000000000004 0.80392156862745101 0.80784313725490198 0.81176470588235294 0.81568627450980391 0.81960784313725488 0.82352941176470584 0.82745098039215681 0.83137254901960789 0.83529411764705885 0.83921568627450982 0.84313725490196079 0.84705882352941175 0.85098039215686272 0.85490196078431369 0.85882352941176465 0.86274509803921573 0.8666666666666667 0.87058823529411766 0.87450980392156863 0.8784313725490196 0.88235294117647056 0.88627450980392153 0.8901960784313725 0.89411764705882357 0.89803921568627454 0.90196078431372551 0.90588235294117647 0.90980392156862744 0.9137254901960784 0.91764705882352937 0.92156862745098034 0.92549019607843142 0.92941176470588238 0.93333333333333335 0.93725490196078431 0.94117647058823528 0.94509803921568625 0.94901960784313721 0.95294117647058818 0.95686274509803926 0.96078431372549022 0.96470588235294119 0.96862745098039216 0.97254901960784312 0.97647058823529409 0.98039215686274506 0.98431372549019602 0.9882352941176471 0.99215686274509807 0.99607843137254903 1)) + (pad-actions)) +(GimpDeviceInfo "Wayland Finger Scrolling" + (name "Wayland Finger Scrolling") + (tool-options "GimpPaintOptions" + (tool "gimp-paintbrush-tool") + (foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\77" 0)) + (background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + (brush "2. Hardness 050") + (dynamics "Pressure Size") + (pattern "Pine") + (gradient "Standard") + (palette "Standard") + (brush-size 51) + (brush-hardness 0.5)) + (use-fg-bg no) + (use-opacity-paint-mode yes) + (use-brush no) + (use-dynamics no) + (use-mypaint-brush no) + (use-gradient no) + (use-pattern yes) + (use-palette no) + (use-font no) + (mode disabled) + (axes 2 x y) + (keys 0) + (pressure-curve + (curve-type smooth) + (points 0) + (point-types 0) + (n-samples 256) + (samples 256 0 0.0039215686274509803 0.0078431372549019607 0.011764705882352941 0.015686274509803921 0.019607843137254902 0.023529411764705882 0.027450980392156862 0.031372549019607843 0.035294117647058823 0.039215686274509803 0.043137254901960784 0.047058823529411764 0.050980392156862744 0.054901960784313725 0.058823529411764705 0.062745098039215685 0.066666666666666666 0.070588235294117646 0.074509803921568626 0.078431372549019607 0.082352941176470587 0.086274509803921567 0.090196078431372548 0.094117647058823528 0.098039215686274508 0.10196078431372549 0.10588235294117647 0.10980392156862745 0.11372549019607843 0.11764705882352941 0.12156862745098039 0.12549019607843137 0.12941176470588237 0.13333333333333333 0.13725490196078433 0.14117647058823529 0.14509803921568629 0.14901960784313725 0.15294117647058825 0.15686274509803921 0.16078431372549021 0.16470588235294117 0.16862745098039217 0.17254901960784313 0.17647058823529413 0.1803921568627451 0.18431372549019609 0.18823529411764706 0.19215686274509805 0.19607843137254902 0.20000000000000001 0.20392156862745098 0.20784313725490197 0.21176470588235294 0.21568627450980393 0.2196078431372549 0.22352941176470589 0.22745098039215686 0.23137254901960785 0.23529411764705882 0.23921568627450981 0.24313725490196078 0.24705882352941178 0.25098039215686274 0.25490196078431371 0.25882352941176473 0.2627450980392157 0.26666666666666666 0.27058823529411763 0.27450980392156865 0.27843137254901962 0.28235294117647058 0.28627450980392155 0.29019607843137257 0.29411764705882354 0.29803921568627451 0.30196078431372547 0.30588235294117649 0.30980392156862746 0.31372549019607843 0.31764705882352939 0.32156862745098042 0.32549019607843138 0.32941176470588235 0.33333333333333331 0.33725490196078434 0.3411764705882353 0.34509803921568627 0.34901960784313724 0.35294117647058826 0.35686274509803922 0.36078431372549019 0.36470588235294116 0.36862745098039218 0.37254901960784315 0.37647058823529411 0.38039215686274508 0.3843137254901961 0.38823529411764707 0.39215686274509803 0.396078431372549 0.40000000000000002 0.40392156862745099 0.40784313725490196 0.41176470588235292 0.41568627450980394 0.41960784313725491 0.42352941176470588 0.42745098039215684 0.43137254901960786 0.43529411764705883 0.4392156862745098 0.44313725490196076 0.44705882352941179 0.45098039215686275 0.45490196078431372 0.45882352941176469 0.46274509803921571 0.46666666666666667 0.47058823529411764 0.47450980392156861 0.47843137254901963 0.4823529411764706 0.48627450980392156 0.49019607843137253 0.49411764705882355 0.49803921568627452 0.50196078431372548 0.50588235294117645 0.50980392156862742 0.51372549019607838 0.51764705882352946 0.52156862745098043 0.52549019607843139 0.52941176470588236 0.53333333333333333 0.53725490196078429 0.54117647058823526 0.54509803921568623 0.5490196078431373 0.55294117647058827 0.55686274509803924 0.5607843137254902 0.56470588235294117 0.56862745098039214 0.5725490196078431 0.57647058823529407 0.58039215686274515 0.58431372549019611 0.58823529411764708 0.59215686274509804 0.59607843137254901 0.59999999999999998 0.60392156862745094 0.60784313725490191 0.61176470588235299 0.61568627450980395 0.61960784313725492 0.62352941176470589 0.62745098039215685 0.63137254901960782 0.63529411764705879 0.63921568627450975 0.64313725490196083 0.6470588235294118 0.65098039215686276 0.65490196078431373 0.6588235294117647 0.66274509803921566 0.66666666666666663 0.6705882352941176 0.67450980392156867 0.67843137254901964 0.68235294117647061 0.68627450980392157 0.69019607843137254 0.69411764705882351 0.69803921568627447 0.70196078431372544 0.70588235294117652 0.70980392156862748 0.71372549019607845 0.71764705882352942 0.72156862745098038 0.72549019607843135 0.72941176470588232 0.73333333333333328 0.73725490196078436 0.74117647058823533 0.74509803921568629 0.74901960784313726 0.75294117647058822 0.75686274509803919 0.76078431372549016 0.76470588235294112 0.7686274509803922 0.77254901960784317 0.77647058823529413 0.7803921568627451 0.78431372549019607 0.78823529411764703 0.792156862745098 0.79607843137254897 0.80000000000000004 0.80392156862745101 0.80784313725490198 0.81176470588235294 0.81568627450980391 0.81960784313725488 0.82352941176470584 0.82745098039215681 0.83137254901960789 0.83529411764705885 0.83921568627450982 0.84313725490196079 0.84705882352941175 0.85098039215686272 0.85490196078431369 0.85882352941176465 0.86274509803921573 0.8666666666666667 0.87058823529411766 0.87450980392156863 0.8784313725490196 0.88235294117647056 0.88627450980392153 0.8901960784313725 0.89411764705882357 0.89803921568627454 0.90196078431372551 0.90588235294117647 0.90980392156862744 0.9137254901960784 0.91764705882352937 0.92156862745098034 0.92549019607843142 0.92941176470588238 0.93333333333333335 0.93725490196078431 0.94117647058823528 0.94509803921568625 0.94901960784313721 0.95294117647058818 0.95686274509803926 0.96078431372549022 0.96470588235294119 0.96862745098039216 0.97254901960784312 0.97647058823529409 0.98039215686274506 0.98431372549019602 0.9882352941176471 0.99215686274509807 0.99607843137254903 1)) + (pad-actions)) +(GimpDeviceInfo "Wayland Wheel Scrolling" + (name "Wayland Wheel Scrolling") + (tool-options "GimpPaintOptions" + (tool "gimp-paintbrush-tool") + (brush "2. Hardness 050") + (dynamics "Pressure Size") + (pattern "Pine") + (gradient "Standard") + (palette "Standard") + (brush-size 51) + (brush-hardness 0.5)) + (use-fg-bg no) + (use-opacity-paint-mode no) + (use-brush no) + (use-dynamics no) + (use-mypaint-brush no) + (use-gradient no) + (use-pattern no) + (use-palette no) + (use-font no) + (mode disabled) + (axes 2 x y) + (keys 0) + (pressure-curve + (curve-type smooth) + (points 0) + (point-types 0) + (n-samples 256) + (samples 256 0 0.0039215686274509803 0.0078431372549019607 0.011764705882352941 0.015686274509803921 0.019607843137254902 0.023529411764705882 0.027450980392156862 0.031372549019607843 0.035294117647058823 0.039215686274509803 0.043137254901960784 0.047058823529411764 0.050980392156862744 0.054901960784313725 0.058823529411764705 0.062745098039215685 0.066666666666666666 0.070588235294117646 0.074509803921568626 0.078431372549019607 0.082352941176470587 0.086274509803921567 0.090196078431372548 0.094117647058823528 0.098039215686274508 0.10196078431372549 0.10588235294117647 0.10980392156862745 0.11372549019607843 0.11764705882352941 0.12156862745098039 0.12549019607843137 0.12941176470588237 0.13333333333333333 0.13725490196078433 0.14117647058823529 0.14509803921568629 0.14901960784313725 0.15294117647058825 0.15686274509803921 0.16078431372549021 0.16470588235294117 0.16862745098039217 0.17254901960784313 0.17647058823529413 0.1803921568627451 0.18431372549019609 0.18823529411764706 0.19215686274509805 0.19607843137254902 0.20000000000000001 0.20392156862745098 0.20784313725490197 0.21176470588235294 0.21568627450980393 0.2196078431372549 0.22352941176470589 0.22745098039215686 0.23137254901960785 0.23529411764705882 0.23921568627450981 0.24313725490196078 0.24705882352941178 0.25098039215686274 0.25490196078431371 0.25882352941176473 0.2627450980392157 0.26666666666666666 0.27058823529411763 0.27450980392156865 0.27843137254901962 0.28235294117647058 0.28627450980392155 0.29019607843137257 0.29411764705882354 0.29803921568627451 0.30196078431372547 0.30588235294117649 0.30980392156862746 0.31372549019607843 0.31764705882352939 0.32156862745098042 0.32549019607843138 0.32941176470588235 0.33333333333333331 0.33725490196078434 0.3411764705882353 0.34509803921568627 0.34901960784313724 0.35294117647058826 0.35686274509803922 0.36078431372549019 0.36470588235294116 0.36862745098039218 0.37254901960784315 0.37647058823529411 0.38039215686274508 0.3843137254901961 0.38823529411764707 0.39215686274509803 0.396078431372549 0.40000000000000002 0.40392156862745099 0.40784313725490196 0.41176470588235292 0.41568627450980394 0.41960784313725491 0.42352941176470588 0.42745098039215684 0.43137254901960786 0.43529411764705883 0.4392156862745098 0.44313725490196076 0.44705882352941179 0.45098039215686275 0.45490196078431372 0.45882352941176469 0.46274509803921571 0.46666666666666667 0.47058823529411764 0.47450980392156861 0.47843137254901963 0.4823529411764706 0.48627450980392156 0.49019607843137253 0.49411764705882355 0.49803921568627452 0.50196078431372548 0.50588235294117645 0.50980392156862742 0.51372549019607838 0.51764705882352946 0.52156862745098043 0.52549019607843139 0.52941176470588236 0.53333333333333333 0.53725490196078429 0.54117647058823526 0.54509803921568623 0.5490196078431373 0.55294117647058827 0.55686274509803924 0.5607843137254902 0.56470588235294117 0.56862745098039214 0.5725490196078431 0.57647058823529407 0.58039215686274515 0.58431372549019611 0.58823529411764708 0.59215686274509804 0.59607843137254901 0.59999999999999998 0.60392156862745094 0.60784313725490191 0.61176470588235299 0.61568627450980395 0.61960784313725492 0.62352941176470589 0.62745098039215685 0.63137254901960782 0.63529411764705879 0.63921568627450975 0.64313725490196083 0.6470588235294118 0.65098039215686276 0.65490196078431373 0.6588235294117647 0.66274509803921566 0.66666666666666663 0.6705882352941176 0.67450980392156867 0.67843137254901964 0.68235294117647061 0.68627450980392157 0.69019607843137254 0.69411764705882351 0.69803921568627447 0.70196078431372544 0.70588235294117652 0.70980392156862748 0.71372549019607845 0.71764705882352942 0.72156862745098038 0.72549019607843135 0.72941176470588232 0.73333333333333328 0.73725490196078436 0.74117647058823533 0.74509803921568629 0.74901960784313726 0.75294117647058822 0.75686274509803919 0.76078431372549016 0.76470588235294112 0.7686274509803922 0.77254901960784317 0.77647058823529413 0.7803921568627451 0.78431372549019607 0.78823529411764703 0.792156862745098 0.79607843137254897 0.80000000000000004 0.80392156862745101 0.80784313725490198 0.81176470588235294 0.81568627450980391 0.81960784313725488 0.82352941176470584 0.82745098039215681 0.83137254901960789 0.83529411764705885 0.83921568627450982 0.84313725490196079 0.84705882352941175 0.85098039215686272 0.85490196078431369 0.85882352941176465 0.86274509803921573 0.8666666666666667 0.87058823529411766 0.87450980392156863 0.8784313725490196 0.88235294117647056 0.88627450980392153 0.8901960784313725 0.89411764705882357 0.89803921568627454 0.90196078431372551 0.90588235294117647 0.90980392156862744 0.9137254901960784 0.91764705882352937 0.92156862745098034 0.92549019607843142 0.92941176470588238 0.93333333333333335 0.93725490196078431 0.94117647058823528 0.94509803921568625 0.94901960784313721 0.95294117647058818 0.95686274509803926 0.96078431372549022 0.96470588235294119 0.96862745098039216 0.97254901960784312 0.97647058823529409 0.98039215686274506 0.98431372549019602 0.9882352941176471 0.99215686274509807 0.99607843137254903 1)) + (pad-actions)) + +# end of devicerc diff --git a/config/GIMP/3.2/dockrc b/config/GIMP/3.2/dockrc new file mode 100644 index 0000000..bb1944b --- /dev/null +++ b/config/GIMP/3.2/dockrc @@ -0,0 +1,4 @@ +# recently closed docks + + +# end of recently closed docks diff --git a/config/GIMP/3.2/extensionrc b/config/GIMP/3.2/extensionrc new file mode 100644 index 0000000..072796c --- /dev/null +++ b/config/GIMP/3.2/extensionrc @@ -0,0 +1,6 @@ +# GIMP extensionrc + +(GimpExtension "org.gimp.extension.goat-exercises" + (active yes)) + +# end of extensionrc diff --git a/config/GIMP/3.2/filters/GimpBrightnessContrastConfig.settings b/config/GIMP/3.2/filters/GimpBrightnessContrastConfig.settings new file mode 100644 index 0000000..ecac4f3 --- /dev/null +++ b/config/GIMP/3.2/filters/GimpBrightnessContrastConfig.settings @@ -0,0 +1,44 @@ +# settings + +(GimpBrightnessContrastConfig "2026-03-11 21:48:50" + (time 1773262130) + (brightness -0.14173228346456693) + (contrast 0.07874015748031496)) +(GimpBrightnessContrastConfig "2026-03-11 21:29:07" + (time 1773260947) + (brightness -0.44094488188976377) + (contrast 0.40944881889763779)) +(GimpBrightnessContrastConfig "2026-03-11 20:53:05" + (time 1773258785) + (brightness 0.2125984251968504) + (contrast -0.031496062992125984)) +(GimpBrightnessContrastConfig "2026-03-11 20:51:35" + (time 1773258695) + (brightness 0) + (contrast 0.46456692913385828)) +(GimpBrightnessContrastConfig "2026-03-11 20:46:44" + (time 1773258404) + (brightness 0) + (contrast 0.30708661417322836)) +(GimpBrightnessContrastConfig "2026-03-11 20:33:17" + (time 1773257597) + (brightness 0.023622047244094488) + (contrast 0.44094488188976377)) +(GimpBrightnessContrastConfig "2026-02-10 12:24:49" + (time 1770722689) + (brightness 0) + (contrast 0.34645669291338582)) +(GimpBrightnessContrastConfig "2026-02-10 10:35:32" + (time 1770716132) + (brightness 0) + (contrast 0.33070866141732286)) +(GimpBrightnessContrastConfig "2026-02-03 14:30:38" + (time 1770125438) + (brightness 0) + (contrast 0.6692913385826772)) +(GimpBrightnessContrastConfig "2026-02-03 14:20:12" + (time 1770124812) + (brightness 0) + (contrast 1)) + +# end of settings diff --git a/config/GIMP/3.2/filters/GimpColorBalanceConfig.settings b/config/GIMP/3.2/filters/GimpColorBalanceConfig.settings new file mode 100644 index 0000000..73ba0f7 --- /dev/null +++ b/config/GIMP/3.2/filters/GimpColorBalanceConfig.settings @@ -0,0 +1,154 @@ +# settings + +(GimpColorBalanceConfig "2026-03-11 21:47:31" + (time 1773262051) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red 0.027000000000000003) + (magenta-green -0.80700000000000005) + (yellow-blue -0.625) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-03-11 21:44:02" + (time 1773261842) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red 1) + (magenta-green -0.80900000000000005) + (yellow-blue -1) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-03-11 21:28:50" + (time 1773260930) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red 0.38900000000000001) + (magenta-green -0.184) + (yellow-blue -0.094) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-03-11 21:15:19" + (time 1773260119) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red -0.97599999999999998) + (magenta-green 0) + (yellow-blue 0) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-03-11 20:32:39" + (time 1773257559) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red -0.40100000000000002) + (magenta-green 0.46600000000000003) + (yellow-blue 0.36200000000000004) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-03-11 19:52:31" + (time 1773255151) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red 0.17000000000000001) + (magenta-green 0.35600000000000004) + (yellow-blue -0.79900000000000004) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-02-10 10:41:39" + (time 1770716499) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red -0.0090000000000000011) + (magenta-green -0.39399999999999996) + (yellow-blue 0) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-01-31 13:08:20" + (time 1769861300) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red -0.10800000000000001) + (magenta-green -0.311) + (yellow-blue 0) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-01-31 13:05:08" + (time 1769861108) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) +(GimpColorBalanceConfig "2026-01-31 13:05:05" + (time 1769861105) + (range shadows) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (range midtones) + (cyan-red -0.501) + (magenta-green -0.45700000000000002) + (yellow-blue -0.57100000000000006) + (range highlights) + (cyan-red 0) + (magenta-green 0) + (yellow-blue 0) + (preserve-luminosity yes)) + +# end of settings diff --git a/config/GIMP/3.2/filters/GimpGegl-gegl-alien-map-config.settings b/config/GIMP/3.2/filters/GimpGegl-gegl-alien-map-config.settings new file mode 100644 index 0000000..75f56da --- /dev/null +++ b/config/GIMP/3.2/filters/GimpGegl-gegl-alien-map-config.settings @@ -0,0 +1,16 @@ +# settings + +(GimpGegl-gegl-alien-map-config "2026-02-10 10:37:27" + (time 1770716247) + (color-model rgb) + (cpn-1-frequency 1.024) + (cpn-2-frequency 0.88400000000000001) + (cpn-3-frequency 0.75) + (cpn-1-phaseshift 0) + (cpn-2-phaseshift 15.16) + (cpn-3-phaseshift 0) + (cpn-1-keep no) + (cpn-2-keep no) + (cpn-3-keep no)) + +# end of settings diff --git a/config/GIMP/3.2/filters/GimpGegl-gegl-color-temperature-config.settings b/config/GIMP/3.2/filters/GimpGegl-gegl-color-temperature-config.settings new file mode 100644 index 0000000..b3205b2 --- /dev/null +++ b/config/GIMP/3.2/filters/GimpGegl-gegl-color-temperature-config.settings @@ -0,0 +1,24 @@ +# settings + +(GimpGegl-gegl-color-temperature-config "2026-03-11 21:00:48" + (time 1773259248) + (original-temperature 2704.6999999999998) + (intended-temperature 6500)) +(GimpGegl-gegl-color-temperature-config "2026-03-11 20:30:39" + (time 1773257439) + (original-temperature 3237.8000000000002) + (intended-temperature 12000)) +(GimpGegl-gegl-color-temperature-config "2026-02-10 12:25:08" + (time 1770722708) + (original-temperature 2724.0999999999999) + (intended-temperature 6500)) +(GimpGegl-gegl-color-temperature-config "2026-02-10 10:35:51" + (time 1770716151) + (original-temperature 4918.1999999999998) + (intended-temperature 6500)) +(GimpGegl-gegl-color-temperature-config "2026-01-31 12:17:03" + (time 1769858223) + (original-temperature 4596.1999999999998) + (intended-temperature 6722.8000000000002)) + +# end of settings diff --git a/config/GIMP/3.2/filters/GimpGegl-gegl-exposure-config.settings b/config/GIMP/3.2/filters/GimpGegl-gegl-exposure-config.settings new file mode 100644 index 0000000..5dabe26 --- /dev/null +++ b/config/GIMP/3.2/filters/GimpGegl-gegl-exposure-config.settings @@ -0,0 +1,16 @@ +# settings + +(GimpGegl-gegl-exposure-config "2026-03-11 20:59:38" + (time 1773259178) + (black-level -0.085999999999999993) + (exposure -0.46500000000000002)) +(GimpGegl-gegl-exposure-config "2026-03-11 20:56:49" + (time 1773259009) + (black-level 0.037999999999999999) + (exposure -3.8300000000000001)) +(GimpGegl-gegl-exposure-config "2026-01-31 13:06:10" + (time 1769861170) + (black-level 0.10000000000000001) + (exposure 0)) + +# end of settings diff --git a/config/GIMP/3.2/filters/GimpGegl-gegl-hue-chroma-config.settings b/config/GIMP/3.2/filters/GimpGegl-gegl-hue-chroma-config.settings new file mode 100644 index 0000000..dae6c14 --- /dev/null +++ b/config/GIMP/3.2/filters/GimpGegl-gegl-hue-chroma-config.settings @@ -0,0 +1,54 @@ +# settings + +(GimpGegl-gegl-hue-chroma-config "2026-03-11 21:50:58" + (time 1773262258) + (hue 55.270000000000003) + (chroma -71.25) + (lightness 0)) +(GimpGegl-gegl-hue-chroma-config "2026-03-11 21:46:33" + (time 1773261993) + (hue 40.170000000000002) + (chroma 2.1299999999999999) + (lightness -5.8700000000000001)) +(GimpGegl-gegl-hue-chroma-config "2026-03-11 21:45:39" + (time 1773261939) + (hue 45.920000000000002) + (chroma -5.4299999999999997) + (lightness 0)) +(GimpGegl-gegl-hue-chroma-config "2026-03-11 21:29:44" + (time 1773260984) + (hue -88.109999999999999) + (chroma 0) + (lightness 0)) +(GimpGegl-gegl-hue-chroma-config "2026-03-11 20:52:32" + (time 1773258752) + (hue 121.78) + (chroma 11.949999999999999) + (lightness 100)) +(GimpGegl-gegl-hue-chroma-config "2026-03-11 20:49:37" + (time 1773258577) + (hue 93.049999999999997) + (chroma 0) + (lightness 0)) +(GimpGegl-gegl-hue-chroma-config "2026-03-11 20:47:45" + (time 1773258465) + (hue -40.509999999999998) + (chroma 0) + (lightness 0)) +(GimpGegl-gegl-hue-chroma-config "2026-03-11 20:46:10" + (time 1773258370) + (hue 67.280000000000001) + (chroma 3.6699999999999999) + (lightness 0.48999999999999999)) +(GimpGegl-gegl-hue-chroma-config "2026-03-11 20:35:15" + (time 1773257715) + (hue -3.8900000000000001) + (chroma 10.710000000000001) + (lightness 100)) +(GimpGegl-gegl-hue-chroma-config "2026-02-10 12:24:58" + (time 1770722698) + (hue -90.430000000000007) + (chroma 0) + (lightness 0)) + +# end of settings diff --git a/config/GIMP/3.2/filters/GimpGegl-gegl-noise-cie-lch-config.settings b/config/GIMP/3.2/filters/GimpGegl-gegl-noise-cie-lch-config.settings new file mode 100644 index 0000000..3c5934a --- /dev/null +++ b/config/GIMP/3.2/filters/GimpGegl-gegl-noise-cie-lch-config.settings @@ -0,0 +1,25 @@ +# settings + +(GimpGegl-gegl-noise-cie-lch-config "2026-03-11 20:29:31" + (time 1773257371) + (holdness 5) + (lightness-distance 40) + (chroma-distance 40) + (hue-distance 3) + (seed 0)) +(GimpGegl-gegl-noise-cie-lch-config "2026-03-11 20:19:03" + (time 1773256743) + (holdness 5) + (lightness-distance 69.510000000000005) + (chroma-distance 0) + (hue-distance 12.699999999999999) + (seed 0)) +(GimpGegl-gegl-noise-cie-lch-config "2026-03-11 20:13:43" + (time 1773256423) + (holdness 2) + (lightness-distance 40) + (chroma-distance 40) + (hue-distance 3) + (seed 0)) + +# end of settings diff --git a/config/GIMP/3.2/filters/GimpGegl-gegl-saturation-config.settings b/config/GIMP/3.2/filters/GimpGegl-gegl-saturation-config.settings new file mode 100644 index 0000000..da426a7 --- /dev/null +++ b/config/GIMP/3.2/filters/GimpGegl-gegl-saturation-config.settings @@ -0,0 +1,32 @@ +# settings + +(GimpGegl-gegl-saturation-config "2026-03-11 20:14:08" + (time 1773256448) + (scale 2.0840000000000001) + (colorspace Native)) +(GimpGegl-gegl-saturation-config "2026-02-10 10:46:36" + (time 1770716796) + (scale 0) + (colorspace Native)) +(GimpGegl-gegl-saturation-config "2026-02-10 10:37:46" + (time 1770716266) + (scale 2.1309999999999998) + (colorspace Native)) +(GimpGegl-gegl-saturation-config "2026-02-10 10:35:16" + (time 1770716116) + (scale 0) + (colorspace Native)) +(GimpGegl-gegl-saturation-config "2026-02-03 14:30:49" + (time 1770125449) + (scale 2.1520000000000001) + (colorspace Native)) +(GimpGegl-gegl-saturation-config "2026-02-03 14:10:30" + (time 1770124230) + (scale 1.593) + (colorspace Native)) +(GimpGegl-gegl-saturation-config "2026-02-03 13:41:19" + (time 1770122479) + (scale 2.27) + (colorspace Native)) + +# end of settings diff --git a/config/GIMP/3.2/filters/GimpGegl-gimp-colorize-config.settings b/config/GIMP/3.2/filters/GimpGegl-gimp-colorize-config.settings new file mode 100644 index 0000000..1adf2f2 --- /dev/null +++ b/config/GIMP/3.2/filters/GimpGegl-gimp-colorize-config.settings @@ -0,0 +1,11 @@ +# settings + +(GimpGegl-gimp-colorize-config "2026-01-31 13:08:07" + (time 1769861287) + (hue 0.1052) + (saturation 0.5) + (lightness 0) + (color + (color "HSL float" 12 "\31s\327\75\0\0\0\77\0\0\0\77" 0))) + +# end of settings diff --git a/config/GIMP/3.2/filters/GimpHueSaturationConfig.settings b/config/GIMP/3.2/filters/GimpHueSaturationConfig.settings new file mode 100644 index 0000000..5f9d343 --- /dev/null +++ b/config/GIMP/3.2/filters/GimpHueSaturationConfig.settings @@ -0,0 +1,35 @@ +# settings + +(GimpHueSaturationConfig "2026-03-11 20:51:09" + (time 1773258669) + (range all) + (hue -0.43333333333333335) + (saturation 0) + (lightness -0.17699999999999999) + (range red) + (hue 0) + (saturation 0) + (lightness 0) + (range yellow) + (hue 0) + (saturation 0) + (lightness 0) + (range green) + (hue 0) + (saturation 0) + (lightness 0) + (range cyan) + (hue 0) + (saturation 0) + (lightness 0) + (range blue) + (hue 0) + (saturation 0) + (lightness 0) + (range magenta) + (hue 0) + (saturation 0) + (lightness 0) + (overlap 0)) + +# end of settings diff --git a/config/GIMP/3.2/filters/GimpLevelsConfig.settings b/config/GIMP/3.2/filters/GimpLevelsConfig.settings new file mode 100644 index 0000000..e8d4d6b --- /dev/null +++ b/config/GIMP/3.2/filters/GimpLevelsConfig.settings @@ -0,0 +1,39 @@ +# settings + +(GimpLevelsConfig "2026-01-31 12:58:54" + (time 1769860734) + (trc non-linear) + (clamp-input no) + (clamp-output no) + (channel value) + (low-input 0) + (high-input 1) + (gamma 1) + (low-output 0) + (high-output 1) + (channel red) + (low-input 0) + (high-input 1) + (gamma 1) + (low-output 0) + (high-output 1) + (channel green) + (low-input 0) + (high-input 1) + (gamma 1) + (low-output 0) + (high-output 1) + (channel blue) + (low-input 0) + (high-input 1) + (gamma 1) + (low-output 0) + (high-output 1) + (channel alpha) + (low-input 0) + (high-input 1) + (gamma 1) + (low-output 0) + (high-output 1)) + +# end of settings diff --git a/config/GIMP/3.2/gimprc b/config/GIMP/3.2/gimprc new file mode 100644 index 0000000..0133d05 --- /dev/null +++ b/config/GIMP/3.2/gimprc @@ -0,0 +1,39 @@ +# GIMP gimprc +# +# This is your personal gimprc file. Any variable defined in this file takes +# precedence over the value defined in the system-wide gimprc: +# /etc/gimp/3.0/gimprc +# Most values can be set within GIMP by changing some options in the +# Preferences dialog. + +(language "fr") +(prev-language "American English") +(config-version "3.2.0") +(import-raw-plug-in "${gimp_plug_in_dir}/plug-ins/file-raw-placeholder/file-raw-placeholder") +(monitor-xresolution 102) +(monitor-yresolution 103) +(selection-grow-radius 3) +(fill-options + (style fg-color) + (custom-style solid-color) + (antialias yes) + (feather no) + (feather-radius 10)) +(stroke-options + (style fg-color) + (custom-style solid-color) + (antialias yes) + (feather no) + (feather-radius 10) + (method line) + (width 6) + (unit pixels) + (cap-style butt) + (join-style miter) + (miter-limit 10) + (dash-offset 0) + (dash-info 0) + (emulate-brush-dynamics no)) + + +# end of gimprc diff --git a/config/GIMP/3.2/internal-data/custom.ggr b/config/GIMP/3.2/internal-data/custom.ggr new file mode 100644 index 0000000..65023c2 --- /dev/null +++ b/config/GIMP/3.2/internal-data/custom.ggr @@ -0,0 +1,4 @@ +GIMP Gradient +Name: Personnalisé +1 +0 0.5 1 0 0 0 1 1 1 1 1 0 0 1 3 diff --git a/config/GIMP/3.2/modifiersrc b/config/GIMP/3.2/modifiersrc new file mode 100644 index 0000000..aad0e8b --- /dev/null +++ b/config/GIMP/3.2/modifiersrc @@ -0,0 +1,7 @@ +# GIMP modifiersrc +# +# This file stores modifiers configuration. You are not supposed to edit it +# manually, but of course you can do. The modifiersrc will be entirely +# rewritten every time you quit GIMP. If this file isn't found, defaults are +# used. + diff --git a/config/GIMP/3.2/parasiterc b/config/GIMP/3.2/parasiterc new file mode 100644 index 0000000..6cfb1be --- /dev/null +++ b/config/GIMP/3.2/parasiterc @@ -0,0 +1,6 @@ +# GIMP parasiterc +# +# This file will be entirely rewritten each time you exit. + + +# end of parasiterc diff --git a/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-file-jpeg-export.last b/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-file-jpeg-export.last new file mode 100644 index 0000000..e9f0c19 --- /dev/null +++ b/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-file-jpeg-export.last @@ -0,0 +1,27 @@ +# settings + +(quality 0.90000000000000002) +(smoothing 0) +(optimize yes) +(progressive yes) +(cmyk no) +(sub-sampling "sub-sampling-1x1") +(baseline yes) +(restart 16) +(dct "integer") +(include-exif no) +(include-iptc no) +(include-xmp no) +(include-color-profile no) +(include-thumbnail no) +(include-comment no) +(use-original-quality no) +(original-quality 90) +(original-sub-sampling 0) +(original-num-quant-tables 0) +(show-preview no) +(use-arithmetic-coding no) +(use-restart no) +(gimp-comment "Created with GIMP") + +# end of settings diff --git a/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-file-jpeg-load.last b/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-file-jpeg-load.last new file mode 100644 index 0000000..3013a25 --- /dev/null +++ b/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-file-jpeg-load.last @@ -0,0 +1,4 @@ +# settings + + +# end of settings diff --git a/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-file-png-export.last b/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-file-png-export.last new file mode 100644 index 0000000..b1f4d44 --- /dev/null +++ b/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-file-png-export.last @@ -0,0 +1,20 @@ +# settings + +(interlaced no) +(compression 1) +(bkgd no) +(offs no) +(phys yes) +(time yes) +(save-transparent no) +(optimize-palette no) +(format "rgb8") +(include-exif no) +(include-iptc no) +(include-xmp no) +(include-color-profile no) +(include-thumbnail no) +(include-comment no) +(gimp-comment "Created with GIMP") + +# end of settings diff --git a/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-file-png-load.last b/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-file-png-load.last new file mode 100644 index 0000000..3013a25 --- /dev/null +++ b/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-file-png-load.last @@ -0,0 +1,4 @@ +# settings + + +# end of settings diff --git a/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-plug-in-busy-dialog.last b/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-plug-in-busy-dialog.last new file mode 100644 index 0000000..8f12bac --- /dev/null +++ b/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-plug-in-busy-dialog.last @@ -0,0 +1,5 @@ +# settings + +(run-mode interactive) + +# end of settings diff --git a/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-plug-in-despeckle.last b/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-plug-in-despeckle.last new file mode 100644 index 0000000..7c5868d --- /dev/null +++ b/config/GIMP/3.2/plug-in-settings/GimpProcedureConfigRun-plug-in-despeckle.last @@ -0,0 +1,8 @@ +# settings + +(radius 1) +(type "adaptive") +(black 255) +(white 0) + +# end of settings diff --git a/config/GIMP/3.2/pluginrc b/config/GIMP/3.2/pluginrc new file mode 100644 index 0000000..645989a --- /dev/null +++ b/config/GIMP/3.2/pluginrc @@ -0,0 +1,5063 @@ +# GIMP pluginrc +# +# This file can safely be removed and will be automatically regenerated by +# querying the installed plug-ins. + +(protocol-version 279) +(file-version 15) + +(plug-in-def "${gimp_plug_in_dir}/plug-ins/palette-export-as-kpl/palette-export-as-kpl.py" 1773502278 + (proc-def "python-fu-palette-export-as-kpl" 1 + "Export palette as Krita .kpl" + "Export palette as Krita .kpl" + "Alx Sa" + "(c) GPL V3.0 or later" + "2025" + "_Krita palette..." + 1 + (menu-path "/Palettes Menu/Export as") + (icon icon-name -1 "") + "" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 12 "GimpParamPalette" "GimpPalette" "palette" "_Palette to export" "" 3 1 1 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "_File (.kpl)" "" 3 1 0 "") + (proc-arg 7 "GParamString" "gchararray" "comment" "Commen_t" "Optional comment" 3 "") + (proc-arg 5 "GParamBoolean" "gboolean" "read-only" "Re_ad only" "The palette will be locked on import" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/filter-browser/filter-browser" 1773502278 + (proc-def "plug-in-gegl-filter-browser" 1 + "Display information about available GEGL operations (i.e., filters)." + "Shows a list of all GEGL operations, their details and what parameters they are configured with. The list contains operations provided by GEGL itself, GIMP and plug-ins loaded by GEGL." + "Ondřej Míchal" + "Ondřej Míchal" + "2025" + "_GEGL Filter Browser" + 1 + (menu-path "/Help/[Programming]") + (icon icon-name -1 "gimp-plugin") + "" + 2147483647 + 1 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-tim/file-tim" 1773502278 + (proc-def "file-tim-load" 1 + "Load file in the TIM file format" + "Load file in the Sony Playstation TIM file format" + "Andrew Kieschnick" + "Andrew Kieschnick " + "1998" + "Playstation TIM image" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "tim")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-tim-export" 1 + "Saves files in the TIM file format" + "Saves files in the Playstation TIM file format" + "Andrew Kieschnick" + "Andrew Kieschnick " + "1998" + "Playstation TIM image" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "tim")) + "RGB*, GRAY*, INDEXED*" + 2147483647 + 9 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "type" "_Type" "Type of TIM texture to export" 3 "pal-8bpp" 4 "pal-4bpp" 8 "4BPP (Indexed)" "" "pal-8bpp" 9 "8BPP (Indexed)" "" "rgb-16bpp" 2 "16BPP (RGB)" "" "rgb-24bpp" 3 "24BPP (RGB)" "") + (proc-arg 1 "GParamInt" "gint" "origin-x" "Image _X" "Origin X coordinate" 3 0 65535 0) + (proc-arg 1 "GParamInt" "gint" "origin-y" "Image _Y" "Origin Y coordinate" 3 0 65535 0) + (proc-arg 1 "GParamInt" "gint" "palette-x" "_Palette X" "Palette X coordinate" 3 0 65535 0) + (proc-arg 1 "GParamInt" "gint" "palette-y" "P_alette Y" "Palette Y coordinate" 3 0 511 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-seattle-filmworks/file-seattle-filmworks" 1773502278 + (proc-def "file-seattle-filmworks-load" 1 + "Load file in the Seattle FilmWorks file format" + "Load file in the Seattle FilmWorks file format" + "Alex S." + "Alex S." + "2025" + "Seattle FilmWorks Image" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "sfw") + (magics "0,string,SFW93A,0,string,SFW94A") + (mime-types "image/x-seattle-filmcamera")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-pvr/file-pvr" 1773502278 + (proc-def "file-pvr-load" 1 + "Load file in the PVR file format" + "Load file in the PowerVR texture file format" + "Per Hedbor" + "Per Hedbor" + "2000" + "PVR Image" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "pvr") + (magics "0,string,GBIX,0,string,PVRT")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-paa/file-paa" 1773502278 + (proc-def "file-paa-load" 1 + "Load file in the PAA file format" + "Load file in the Bohemia Interactive PAA file format" + "Gruppe Adler" + "Gruppe Adler" + "2020" + "PAA Image" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "paa")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-jp2/file-jp2" 1773502278 + (proc-def "file-jp2-load" 1 + "Loads JPEG 2000 images." + "The JPEG 2000 image loader." + "Aurimas Juška" + "Aurimas Juška, Florian Traverse" + "2009" + "Image JPEG 2000" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "jp2") + (magics "3,string,\fjP") + (mime-types "image/jp2")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-j2k-load" 1 + "Loads JPEG 2000 codestream." + "Loads JPEG 2000 codestream. If the color space is set to UNKNOWN (0), we will try to guess, which is only possible for few spaces (such as grayscale). Most such calls will fail. You are rather expected to know the color space of your data." + "Jehan" + "Jehan" + "2009" + "Codestream JPEG 2000" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "j2k,j2c,jpc") + (magics "0,string,OQ") + (mime-types "image/x-jp2-codestream")) + "" + 2147483647 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 4 "GimpParamChoice" "gchararray" "colorspace" "Color s_pace" "Color space" 3 "unknown" 6 "srgb" 1 "sRVB" "" "grayscale" 2 "Grayscale" "" "ycbcr" 3 "Y’CbCr" "" "xvycc" 4 "xvYCC" "" "cmyk" 5 "CMJN" "" "unknown" -1 "Inconnu" "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-jp2-export" 1 + "Exports files in JPEG 2000 file format" + "Exports files in JPEG 2000 file format" + "Advance Software" + "Advance Software" + "2025" + "Image JPEG 2000" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "jp2") + (mime-types "image/jp2")) + "GRAY, RGB*" + 2147483647 + 11 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 6 "GParamDouble" "gdouble" "quality" "_Qualité" "Quality of exported image" 3 1 100 90) + (proc-arg 5 "GParamBoolean" "gboolean" "ict" "IC_T compression" "Use Irreversible Color Transformation compression" 3 0) + (proc-arg 1 "GParamInt" "gint" "resolution" "_Number of resolutions" "Equivalent to the number of DWT decompositions plus one" 3 1 12 6) + (proc-arg 4 "GimpParamChoice" "gchararray" "progression-order" "Pro_gression order" "" 3 "lrcp" 5 "lrcp" 0 "LRCP" "" "rlcp" 1 "RLCP" "" "rpcl" 2 "RPCL" "" "pcrl" 3 "PCRL" "" "cprl" 4 "CPRL" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "compliance" "Co_mpliance profile" "Set to ensure compliance with Digital Cinema Specifications" 3 "standard" 4 "standard" 0 "Standard Profile" "" "cinema-2k-24" 1 "Cinema2K (24 FPS)" "" "cinema-2k-48" 2 "Cinema2K (48 FPS)" "" "cinema-4k-24" 3 "Cinema4K (24 FPS)" "") + (proc-arg 5 "GParamBoolean" "gboolean" "cmyk" "E_xport as CMYK" "Create a CMYK JPEG 2000 image using the soft-proofing color profile" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-comment" "Save c_omment" "Save a comment as metadata" 3 0)) + (proc-def "file-j2k-export" 1 + "Exports files in JPEG 2000 codestream format" + "Exports files in JPEG 2000 codestream format" + "Advance Software" + "Advance Software" + "2025" + "Codestream JPEG 2000" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "j2k,j2c,jpc") + (mime-types "image/x-jp2-codestream")) + "GRAY, RGB*" + 2147483647 + 10 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 6 "GParamDouble" "gdouble" "quality" "_Qualité" "Quality of exported image" 3 1 100 90) + (proc-arg 5 "GParamBoolean" "gboolean" "ict" "IC_T compression" "Use Irreversible Color Transformation compression" 3 0) + (proc-arg 1 "GParamInt" "gint" "resolution" "_Number of Resolutions" "Equivalent to the number of DWT decompositions plus one" 3 1 12 6) + (proc-arg 4 "GimpParamChoice" "gchararray" "progression-order" "Pro_gression order" "" 3 "lrcp" 5 "lrcp" 0 "LRCP" "" "rlcp" 1 "RLCP" "" "rpcl" 2 "RPCL" "" "pcrl" 3 "PCRL" "" "cprl" 4 "CPRL" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "compliance" "Co_mpliance profile" "Set to ensure compliance with Digital Cinema Specifications" 3 "standard" 4 "standard" 0 "Standard Profile" "" "cinema-2k-24" 1 "Cinema2K (24 FPS)" "" "cinema-2k-48" 2 "Cinema2K (48 FPS)" "" "cinema-4k-24" 3 "Cinema4K (24 FPS)" "") + (proc-arg 5 "GParamBoolean" "gboolean" "cmyk" "E_xport as CMYK" "Create a CMYK JPEG 2000 image using the soft-proofing color profile" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/web-browser/web-browser" 1773502278 + (proc-def "plug-in-web-browser" 1 + "Open an URL in the user specified web browser" + "Opens the given URL in the user specified web browser." + "Henrik Brix Andersen " + "2003" + "2003/09/16" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 1 0 + (proc-arg 7 "GParamString" "gchararray" "url" "URL" "URL to open" 3 "https://www.gimp.org/"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/wavelet-decompose/wavelet-decompose" 1773502278 + (proc-def "plug-in-wavelet-decompose" 1 + "Décomposition en ondelettes" + "Compute and render wavelet scales" + "Miroslav Talasek " + "Miroslav Talasek " + "19 January 2017" + "_Wavelet Decompose..." + 1 + (menu-path "/Filters/Enhance") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 6 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "scales" "Scal_es" "Number of scales" 3 1 7 5) + (proc-arg 5 "GParamBoolean" "gboolean" "create-group" "Create a layer group to store the _decomposition" "Créer un groupe de calques pour stocker la décomposition" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "create-masks" "_Add a layer mask to each scales layer" "Add a layer mask to each scales layer" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/warp/warp" 1773502278 + (proc-def "plug-in-warp" 1 + "Tourbillonne ou salit l’image de différentes façons" + "Smears an image along vector paths calculated as the gradient of a separate control matrix. The effect can look like brushstrokes of acrylic or watercolor paint, in some cases." + "John P. Beale" + "John P. Beale" + "1997" + "Déca_ler…" + 1 + (menu-path "/Filters/Map") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 17 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 6 "GParamDouble" "gdouble" "amount" "Step si_ze" "Pixel displacement multiplier" 3 -1.7976931348623157e+308 1.7976931348623157e+308 10) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "warp-map" "Dis_placement Map" "Displacement control map" 3 1) + (proc-arg 1 "GParamInt" "gint" "iter" "I_terations" "Iteration count" 3 1 100 5) + (proc-arg 6 "GParamDouble" "gdouble" "dither" "_Dither size" "Random dither amount" 3 0 100 0) + (proc-arg 6 "GParamDouble" "gdouble" "angle" "Rotatio_n angle" "Angle of gradient vector rotation" 3 0 360 90) + (proc-arg 4 "GimpParamChoice" "gchararray" "wrap-type" "On ed_ges" "Wrap type" 3 "wrap" 4 "wrap" 0 "Enrouler" "" "smear" 1 "Étaler" "" "black" 2 "Noir" "" "color" 3 "Foreground Color" "") + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "mag-map" "_Magnitude Map" "Magnitude control map" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "mag-use" "_Use magnitude map" "Utiliser la carte de force" 3 0) + (proc-arg 1 "GParamInt" "gint" "substeps" "Su_bsteps" "Substeps between image updates" 3 1 100 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "grad-map" "Gradient Ma_p" "Gradient control map" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "grad-scale" "Gradient s_cale" "Scaling factor for gradient map (0=don't use)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 0) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "vector-map" "_Vector Map" "Fixed vector control map" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "vector-scale" "Vector magn_itude" "Scaling factor for fixed vector map (0=don't use)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 0) + (proc-arg 6 "GParamDouble" "gdouble" "vector-angle" "Ang_le" "Angle for fixed vector map" 3 0 360 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/van-gogh-lic/van-gogh-lic" 1773502278 + (proc-def "plug-in-lic" 1 + "Effets spéciaux que personne ne comprend" + "No help yet" + "Tom Bech & Federico Mena Quintero" + "Tom Bech & Federico Mena Quintero" + "Version 0.14, September 24 1997" + "_Van Gogh (LIC)…" + 1 + (menu-path "/Filters/Artistic") + (icon icon-name -1 "") + "RGB*" + 1 + 12 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 4 "GimpParamChoice" "gchararray" "effect-channel" "E_ffect Channel" "Canal d’effet" 3 "brightness" 3 "hue" 0 "Teinte" "" "saturation" 1 "Saturation" "" "brightness" 2 "Brightness" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "effect-operator" "Effect O_perator" "Opérateur d’effet" 3 "gradient" 2 "derivative" 0 "Derivative" "" "gradient" 1 "Gradient" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "effect-convolve" "Con_volve" "Convolution" 3 "with-source-image" 2 "with-white-noise" 0 "With white noise" "" "with-source-image" 1 "With source image" "") + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "effect-image" "Effect i_mage" "Effect image" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "filter-length" "Fil_ter length" "Filter length" 3 0.10000000000000001 64 5) + (proc-arg 6 "GParamDouble" "gdouble" "noise-magnitude" "_Noise magnitude" "Noise magnitude" 3 1 5 2) + (proc-arg 6 "GParamDouble" "gdouble" "integration-steps" "Inte_gration steps" "Integration steps" 3 1 40 25) + (proc-arg 6 "GParamDouble" "gdouble" "min-value" "Minimum v_alue" "Minimum value" 3 -100 0 -25) + (proc-arg 6 "GParamDouble" "gdouble" "max-value" "Ma_ximum value" "Maximum value" 3 0 100 25))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/unit-editor/unit-editor" 1773502278 + (proc-def "plug-in-unit-editor" 1 + "Crée ou modifie les unités utilisées par GIMP" + "The GIMP unit editor" + "Michael Natterer " + "Michael Natterer " + "2000" + "U_nités" + 1 + (menu-path "/Edit/[Preferences]") + (icon icon-name -1 "gimp-tool-measure") + "" + 2147483647 + 1 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/tile-small/tile-small" 1773502278 + (proc-def "plug-in-small-tiles" 1 + "Refait une image avec des versions plus petites de l’original" + "More here later" + "Andy Thomas" + "Andy Thomas" + "1997" + "Petits ra_ccords…" + 1 + (menu-path "/Filters/Map") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "num-tiles" "_n²" "Number of tiles to make" 3 2 6 2))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/tile/tile" 1773502278 + (proc-def "plug-in-tile" 1 + "Crée un tableau de copies de l’image" + "This function creates a new image with a single layer sized to the specified 'new_width' and 'new_height' parameters. The specified drawable is tiled into this layer. The new layer will have the same type as the specified drawable and the new image will have a corresponding base type." + "Spencer Kimball & Peter Mattis" + "Spencer Kimball & Peter Mattis" + "1996-1997" + "_Raccorder…" + 1 + (menu-path "/Filters/Map") + (icon icon-name -1 "") + "*" + 1 + 6 2 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "new-width" "New _width" "New (tiled) image width" 3 1 524288 1) + (proc-arg 1 "GParamInt" "gint" "new-height" "New _height" "New (tiled) image height" 3 1 524288 1) + (proc-arg 5 "GParamBoolean" "gboolean" "new-image" "New _image" "Create a new image" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image" "New image" "Output image (NULL if new-image == FALSE)" 3 1) + (proc-arg 9 "GimpParamLayer" "GimpLayer" "new-layer" "New layer" "Output layer (NULL if new-image == FALSE)" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/test-sphere-v3/test-sphere-v3.scm" 1773502278 + (proc-def "script-fu-test-sphere-v3" 1 + "Plug-in example in Scheme" + "" + "Spencer Kimball, Sven Neumann" + "Spencer Kimball" + "1996, 1998" + "Plug-In Example in _Scheme" + 1 + (menu-path "/Filters/Development/Plug-In Examples") + (icon icon-name -1 "") + "*" + 5 + 26 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "adjustment" "Radius (in pixels)" "Radius (in pixels)" 3 1 5000 100) + (proc-arg 6 "GParamDouble" "gdouble" "adjustment-2" "Lighting (degrees)" "Lighting (degrees)" 3 0 360 45) + (proc-arg 5 "GParamBoolean" "gboolean" "toggle" "Shadow" "Shadow" 3 1) + (proc-arg 8 "GimpParamColor" "GeglColor" "color" "Background color" "Background color" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0) + (proc-arg 8 "GimpParamColor" "GeglColor" "color-2" "Sphere color" "Sphere color" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0) + (proc-arg 12 "GimpParamBrush" "GimpBrush" "brush" "Brush" "Brush" 3 0 0 21) + (proc-arg 7 "GParamString" "gchararray" "string" "Text" "Text" 3 "Tiny-Fu rocks!") + (proc-arg 7 "GParamString" "gchararray" "text" "Multi-line text" "Multi-line text" 3 "Hello,\nWorld!") + (proc-arg 12 "GimpParamPattern" "GimpPattern" "pattern" "Pattern" "Pattern" 3 0 0 1984) + (proc-arg 12 "GimpParamGradient" "GimpGradient" "gradient" "Gradient" "Gradient" 3 0 0 2087) + (proc-arg 5 "GParamBoolean" "gboolean" "toggle-2" "Gradient reverse" "Gradient reverse" 3 0) + (proc-arg 12 "GimpParamFont" "GimpFont" "font" "Font" "Font" 3 0 1 0) + (proc-arg 1 "GParamInt" "gint" "adjustment-3" "Font size (pixels)" "Font size (pixels)" 3 1 1000 50) + (proc-arg 12 "GimpParamPalette" "GimpPalette" "palette" "Palette" "Palette" 3 0 0 2033) + (proc-arg 13 "GimpParamFile" "GFile" "filename" "Environment map" "Environment map" 259 0 1 "file:///usr/share/gimp/3.0/scripts/images/beavis.jpg") + (proc-arg 1 "GParamInt" "gint" "option" "Orientation" "Orientation" 3 0 1 0) + (proc-arg 3 "GParamEnum" "GimpInterpolationType" "enum" "Interpolation" "Interpolation" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "dirname" "Output directory" "Output directory" 259 2 1 "file:///var/tmp") + (proc-arg 9 "GimpParamImage" "GimpImage" "otherImage" "Image" "Image" 3 1) + (proc-arg 9 "GimpParamLayer" "GimpLayer" "layer" "Layer" "Layer" 3 1) + (proc-arg 9 "GimpParamChannel" "GimpChannel" "channel" "Channel" "Channel" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "drawable" "Drawable" "Drawable" 3 1) + (proc-arg 9 "GimpParamPath" "GimpPath" "vectors" "Vectors" "Vectors" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/spyro-plus/spyro-plus.py" 1773502278 + (proc-def "plug-in-spyrogimp" 1 + "Dessine des courbes spiroïdales en utilisant les paramètres et sélection définis dans l’outil actif." + "Uses current tool settings to draw Spyrograph patterns. The size and location of the pattern is based on the current selection." + "Elad Shahar" + "Elad Shahar" + "2018" + "Spyrogimp…" + 1 + (menu-path "/Filters/Render/") + (icon icon-name -1 "") + "*" + 1 + 16 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 4 "GimpParamChoice" "gchararray" "curve-type" "Type de courbe" "Type de courbe" 3 "spyrograph" 4 "spyrograph" 0 "Spyrographe" "" "epitrochoid" 1 "Épitrochoïde" "" "sine" 2 "Sinus" "" "lissajous" 3 "Lissajous" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "shape" "Forme" "Forme" 3 "circle" 7 "circle" 0 "Cercle" "" "rack" 1 "rack" "" "frame" 2 "frame" "" "selection" 3 "Sélection" "" "polygon-star" 4 "Étoile-polygone" "" "sine" 5 "Sinus" "" "bumps" 6 "Bosses" "") + (proc-arg 1 "GParamInt" "gint" "sides" "Si_des" "Number of sides of fixed gear (3 or greater). Only used by some shapes." 3 3 2147483647 3) + (proc-arg 6 "GParamDouble" "gdouble" "morph" "_Morph" "Morph shape of fixed gear, between 0 and 1. Only used by some shapes." 3 0 1 0) + (proc-arg 1 "GParamInt" "gint" "fixed-teeth" "Fi_xed gear teeth" "Number of teeth for fixed gear." 3 0 2147483647 96) + (proc-arg 1 "GParamInt" "gint" "moving-teeth" "Mo_ving gear teeth" "Number of teeth for fixed gear." 3 0 2147483647 36) + (proc-arg 6 "GParamDouble" "gdouble" "hole-percent" "_Hole radius (%)" "Location of hole in moving gear in percent, where 100 means that the hole is at the edge of the gear, and 0 means the hole is at the center" 3 0 100 100) + (proc-arg 1 "GParamInt" "gint" "margin" "Margin (_px)" "Margin from selection, in pixels" 3 0 2147483647 0) + (proc-arg 5 "GParamBoolean" "gboolean" "equal-w-h" "Égaliser largeur et hauteur" "Égaliser largeur et hauteur" 3 0) + (proc-arg 6 "GParamDouble" "gdouble" "pattern-rotation" "_Rotation" "Pattern rotation, in degrees" 3 -360 360 0) + (proc-arg 6 "GParamDouble" "gdouble" "shape-rotation" "_Rotation" "Shape rotation of fixed gear, in degrees" 3 -360 360 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "tool" "Outil" "Outil" 3 "preview" 7 "preview" 0 "Aperçu" "" "paintbrush" 1 "Brosse" "" "pencil" 2 "Crayon" "" "airbrush" 3 "Aérographe" "" "stroke" 4 "Coup de pinceau" "" "ink" 5 "Encre" "" "mypaintbrush" 6 "Brosse MyPaint" "") + (proc-arg 5 "GParamBoolean" "gboolean" "long-gradient" "Long _Gradient" "Whether to apply a long gradient to match the length of the pattern. Only applicable to some of the tools." 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/sphere-designer/sphere-designer" 1773502278 + (proc-def "plug-in-spheredesigner" 1 + "Crée une image d’une sphère texturée" + "This plug-in can be used to create textured and/or bumpmapped spheres, and uses a small lightweight raytracer to perform the task with good quality" + "Vidar Madsen" + "Vidar Madsen" + "1999" + "Créateur de sphè_re…" + 1 + (menu-path "/Filters/Render") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/sparkle/sparkle" 1773502278 + (proc-def "plug-in-sparkle" 1 + "Transforme les taches lumineuses en pointes étoilées" + "Uses a percentage based luminosity threshold to find candidate pixels for adding some sparkles (spikes)." + "John Beale, & (ported to GIMP v0.54) Michael J. Hammel & ted to GIMP v1.0) & Seth Burgess & Spencer Kimball" + "John Beale" + "Version 1.27, September 2003" + "É_tinceler…" + 1 + (menu-path "/Filters/Light and Shadow/[Light]") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 16 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 6 "GParamDouble" "gdouble" "lum-threshold" "Lu_minosity threshold" "Ajuste le seuil de luminosité" 3 0 0.10000000000000001 0.01) + (proc-arg 6 "GParamDouble" "gdouble" "flare-inten" "_Flare intensity" "Ajuste l’intensité de l’éblouissement" 3 0 1 0.5) + (proc-arg 1 "GParamInt" "gint" "spike-len" "Spi_ke length" "Adjust the spike length (in pixels)" 3 1 100 20) + (proc-arg 1 "GParamInt" "gint" "spike-points" "Spike _points" "Ajuste le nombre de pointes" 3 1 16 4) + (proc-arg 1 "GParamInt" "gint" "spike-angle" "Spike angle (-_1: random)" "Ajuste l’angle des pointes (-1 signifie qu’un angle aléatoire est choisi)" 3 -1 360 15) + (proc-arg 6 "GParamDouble" "gdouble" "density" "Spike _density" "Ajuste la densité des pointes" 3 0 1 1) + (proc-arg 6 "GParamDouble" "gdouble" "transparency" "_Transparency" "Ajuste l’opacité des pointes" 3 0 1 0) + (proc-arg 6 "GParamDouble" "gdouble" "random-hue" "Random _hue" "Ajuste l’influence du hasard sur la teinte" 3 0 1 0) + (proc-arg 6 "GParamDouble" "gdouble" "random-saturation" "R_andom saturation" "Ajuste l’influence du hasard sur la saturation" 3 0 1 0) + (proc-arg 5 "GParamBoolean" "gboolean" "preserve-luminosity" "Preserve l_uminosity" "La luminosité doit-elle être préservée ?" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "inverse" "In_verser" "L’effet doit-il être inversé ?" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "border" "Add _border" "Trace une bordure de pointes autour de l’image" 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "color-type" "_Color Type" "Color of sparkles" 3 "natural-color" 3 "natural-color" 0 "Natural color" "" "foreground-color" 1 "Couleur de premier plan" "" "background-color" 2 "Background color" ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/smooth-palette/smooth-palette" 1773502278 + (proc-def "plug-in-smooth-palette" 1 + "Déduit une palette lissée depuis l’image" + "help!" + "Scott Draves" + "Scott Draves" + "1997" + "_Palette lissée…" + 1 + (menu-path "/Colors/Info") + (icon icon-name -1 "") + "RGB*" + 1 + 7 2 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "width" "_Largeur" "Width" 3 2 524288 256) + (proc-arg 1 "GParamInt" "gint" "height" "_Hauteur" "Height" 3 2 524288 64) + (proc-arg 1 "GParamInt" "gint" "n-tries" "Search _depth" "Search depth" 3 1 1024 50) + (proc-arg 5 "GParamBoolean" "gboolean" "show-image" "Afficher l’image" "Afficher l’image" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image" "New image" "Output image" 3 0) + (proc-arg 9 "GimpParamLayer" "GimpLayer" "new-layer" "New layer" "Output layer" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/selection-to-path/selection-to-path" 1773502278 + (proc-def "plug-in-sel2path" 1 + "Converts a selection to a path" + "Converts a selection to a path" + "Andy Thomas" + "Andy Thomas" + "1999" + "" + 0 + (icon icon-name -1 "") + "*" + 13 + 23 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 6 "GParamDouble" "gdouble" "align-threshold" "_Align Threshold" "Si deux points d’extrémité sont plus proches que ce seuil, ils sont égalisés." 3 0.20000000000000001 2 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "corner-always-threshold" "Corner Al_ways Threshold" "Si l’angle défini par un point, ainsi que ses prédécesseurs et successeurs, est plus petit que ce seuil, c’est un coin, même s’il se situe à l’intérieur des pixels « environnement de coin » d’un point avec un angle plus petit." 3 30 180 60) + (proc-arg 1 "GParamInt" "gint" "corner-surround" "Corner _Surround" "Nombre de points à prendre en considération pour déterminer si un point est un coin ou non." 3 3 8 4) + (proc-arg 6 "GParamDouble" "gdouble" "corner-threshold" "Cor_ner Threshold" "Si c’est un point, et que ses prédécesseurs et successeurs forment un angle plus petit que ce seuil, c’est un coin." 3 0 180 100) + (proc-arg 6 "GParamDouble" "gdouble" "error-threshold" "Error Thres_hold" "Taux d’erreur au-delà duquel l’ajustement d’une spline devient inacceptable. Si un ajustement d’un pixel se situe au-delà de cette valeur, l’algorithme recommence." 3 0.20000000000000001 10 0.40000000000000002) + (proc-arg 1 "GParamInt" "gint" "filter-alternative-surround" "_Filter Alternative Surround" "Autre nombre de points adjacents à prendre en considération lors du filtrage." 3 1 10 1) + (proc-arg 6 "GParamDouble" "gdouble" "filter-epsilon" "Filter E_psilon" "Si les angles entre les vecteurs produits par les points filter_surround et filter_alternative_surround diffèrent d’une valeur supérieure à celle-ci, utiliser celle de filter_alternative_surround." 3 5 40 10) + (proc-arg 1 "GParamInt" "gint" "filter-iteration-count" "Filter Iteration Co_unt" "C’est le nombre d’applications du filtre pour lisser les points de données. L’augmentation forte de ce nombre, à 50 ou plus, peut améliorer grandement les résultats. Mais si aucun point qui « devrait » être un coin n’est trouvé, la courbe prendra un aspect erratique autour de ce point." 3 4 70 4) + (proc-arg 6 "GParamDouble" "gdouble" "filter-percent" "Filt_er Percent" "Pour produire le nouveau point, utiliser l’ancien point ajusté de ce pourcentage de ses voisins." 3 0 1 0.33000000000000002) + (proc-arg 1 "GParamInt" "gint" "filter-secondary-surround" "Filter Secondar_y Surround" "Nombre de points adjacents à prendre en considération si les points de « filter_surround » définissent une ligne droite." 3 3 10 3) + (proc-arg 1 "GParamInt" "gint" "filter-surround" "Filter Surroun_d" "Nombre de points adjacents à prendre en considération lors du filtrage." 3 2 10 2) + (proc-arg 5 "GParamBoolean" "gboolean" "keep-knees" "_Keep Knees" "Indique s’il faut ou non supprimer les points « coudes » après avoir défini le contour." 3 0) + (proc-arg 6 "GParamDouble" "gdouble" "line-reversion-threshold" "_Line Reversion Threshold" "Si une spline est plus proche d’une ligne droite que cette valeur, elle reste ligne droite, même si autrement elle aurait dû être transformée en courbe. Ceci est pondéré par le carré de la longueur de la courbe pour que les courtes courbes aient plus de chances d’être refaites." 3 0.01 0.20000000000000001 0.01) + (proc-arg 6 "GParamDouble" "gdouble" "line-threshold" "L_ine Threshold" "Nombre de pixels (en moyenne) qu’une spline peut diverger de la ligne déterminée par ses extrémités avant d’être transformée en ligne droite." 3 0.20000000000000001 4 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "reparametrize-improvement" "Reparametri_ze Improvement" "Si le reparamétrage n’améliore pas de ce pourcentage l’adaptation, l’algorithme renonce à le faire. Importance de l’erreur au-delà de laquelle il est inutile de poursuivre le reparamétrage." 3 0 1 0.01) + (proc-arg 6 "GParamDouble" "gdouble" "reparametrize-threshold" "Repara_metrize Threshold" "Taux de l’erreur pour laquelle le reparamétrage devient sans intérêt. Cela survient, par exemple, quand l’algorithme essaie d’adapter le contour de la bordure d’un « O » à une simple spline. L’adaptation initiale n’est pas assez bonne pour que l’itération de Newton-Raphson puisse l’améliorer. Il vaudrait peut-être mieux détecter les cas où l’algorithme ne trouve aucun coin." 3 1 50 1) + (proc-arg 6 "GParamDouble" "gdouble" "subdivide-search" "Subdi_vide Search" "Pourcentage de la courbe au-delà du plus mauvais point imposant la recherche d’un meilleur endroit pour subdiviser." 3 0.050000000000000003 1 0.10000000000000001) + (proc-arg 1 "GParamInt" "gint" "subdivide-surround" "Su_bdivide Surround" "Nombre de points à prendre en considération pour savoir si un point donné convient à la subdivision." 3 2 10 4) + (proc-arg 6 "GParamDouble" "gdouble" "subdivide-threshold" "Subdivide Th_reshold" "De combien de pixels un point peut diverger de la ligne droite et demeurer le meilleur endroit pour subdiviser." 3 0.01 1 0.029999999999999999) + (proc-arg 1 "GParamInt" "gint" "tangent-surround" "_Tangent Surround" "Nombre de points à étudier de chaque côté d’un point lors du calcul de la tangente approximative en ce point." 3 2 10 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/script-fu-server/script-fu-server" 1773502278 + (proc-def "plug-in-script-fu-server" 1 + "Serveur pour les opérations Script-Fu distantes" + "Provides a server for remote script-fu operation. NOTE that for security reasons this procedure's API was changed in an incompatible way since GIMP 2.8.12. You now have to pass the IP to listen on as first parameter. Calling this procedure with the old API will fail on purpose." + "Spencer Kimball & Peter Mattis" + "Spencer Kimball & Peter Mattis" + "1997" + "_Démarrer le serveur…" + 1 + (menu-path "/Filters/Development/Script-Fu") + (icon icon-name -1 "") + "" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0) + (proc-arg 7 "GParamString" "gchararray" "ip" "IP" "The IP on which to listen for requests" 3 "") + (proc-arg 1 "GParamInt" "gint" "port" "Port" "The port on which to listen for requests" 3 0 2147483647 0) + (proc-arg 7 "GParamString" "gchararray" "logfile" "Log File" "The file to log activity to" 3 ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/script-fu/script-fu" 1773502278 + (proc-def "extension-script-fu" 2 + "A scheme interpreter for scripting GIMP operations" + "More help here later" + "Spencer Kimball & Peter Mattis" + "Spencer Kimball & Peter Mattis" + "1997" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 0 0) + (proc-def "plug-in-script-fu-console" 1 + "Console interactive pour le développement de Script-Fu" + "Provides an interface which allows interactive scheme development." + "Spencer Kimball & Peter Mattis" + "Spencer Kimball & Peter Mattis" + "1997" + "_Console Script-Fu" + 1 + (menu-path "/Filters/Development/Script-Fu") + (icon icon-name -1 "") + "" + 2147483647 + 1 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0)) + (proc-def "plug-in-script-fu-text-console" 1 + "Provides a text console mode for script-fu development" + "Provides an interface which allows interactive scheme development." + "Spencer Kimball & Peter Mattis" + "Spencer Kimball & Peter Mattis" + "1997" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 1 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0)) + (proc-def "plug-in-script-fu-eval" 1 + "Evaluate scheme code" + "Evaluate the code under the scheme interpreter (primarily for batch mode)" + "Manish Singh" + "Manish Singh" + "1998" + "" + 0 + (icon icon-name -1 "") + (batch-interpreter "Script-fu (scheme)") + "" + 2147483647 + 2 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 7 "GParamString" "gchararray" "script" "Batch commands in the target language" "Batch commands in the target language, which will be run by the interpreter" 3 ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/screenshot/screenshot" 1773502278 + (proc-def "plug-in-screenshot" 1 + "Crée une image depuis une région de l’écran" + "The plug-in takes screenshots of an interactively selected window or of the desktop, either the whole desktop or an interactively selected region. When called non-interactively, it may grab the root window or use the window-id passed as a parameter. The last four parameters are optional and can be used to specify the corners of the region to be grabbed.On Mac OS X, when called non-interactively, the plug-inonly can take screenshots of the entire root window.Grabbing a window or a region is not supportednon-interactively. To grab a region or a particularwindow, you need to use the interactive mode." + "Sven Neumann , Henrik Brix Andersen ,Simone Karin Lehmann" + "1998 - 2008" + "v1.1 (2008/04)" + "_Capture d’écran…" + 1 + (menu-path "/File/Create") + (icon pixbuf 1192 "\211PNG\15\12\32\12\0\0\0\15IHDR\0\0\0\26\0\0\0\26\10\6\0\0\0\304\264l\73\0\0\4oIDATx\234\235UKl\33U\24\75\63\36\217\75\266\343\46\216\23\307i\276\135\264\251\232\12\24\41\22\25\51\233F\42\242\52\53\100e\221H\54\40JYd\305\206\256\21l\350\212\25\12\22\12\5\242J\25\13\52\2\64iUP\76D\245rB\22\362Eq\234\346c\307\377\357x\74\63\334g\217\53\53\264R\350\225\256\336\357\352\334\373\316\75oF\300\377\260\261\261\61\63\15\356\362zppp\377y\261\34Nh\36O\175\237\44\331\176\222\44\311T\336\213\307\343\351BA\351\15\6C\276\27\6\346y\176qzf\372bOw\317\323\275\273w\177L\135\275\372\346\32M\137\71\36\57\340\204\46\10\202\355\301\203\373\10\4vJ\33\72\60u\177\322\316q\234\240\353\372\177\343qB\63\231L\266\361\361\361\75\257\267\341ecm\336\333\333\137\247\204vEQN\6\134\137\137\347\245\301C\336M\374\275\177\241\363BU\173\173\233G\226\345tkK\333\242\311\304\353\46A\200\325\52i\33\353\233u\4\374\210\250\62\273\335\265\237P\374m\206\301\35\3\352\15\207\43\37\322\325\270\376\376\327k\57\137\356\253\362z\275\341\32W\265\175n\176\256\352\367\207\17\341r\325\22\240\5v\207\35\251T\12\347\317w\252\311D\362\267\346\346f\347\317\23\23\236\371\371\371\367\10\174\222\43\320\76\2\373\312\341p\64\136\173\367\232\320\323\323\215\246\246\46X\54\42r\271\34fff\221\227\25\344U\271\270\317\361\74L\344\274\251\44\216\303\203\175\310\331\34\74\15\15\260\210R\346\372\360u\306\202E\70\72\12\177q\347\207\73\55\316\52\7\322\351\64\276\271u\13\205B\1g\316\264\43x\30\304\320\7\303\140\315\31\277\375\35\246\356\335\203\315\341\204\40Z\40\232M\20\5\36\365\36\17\66\66\67\361\370\261\17\227\56\275f\43\213e\62\31\10\304M\325\37s\263t\245\16\354Sv\342\22\215\215\247\61\61\61\201\335\100\0\243\243\243\260\331\44\204\42at\276\332\13\233d\205\222\315\342\340\340\0\207\241\60\216\42\353\310R\305\21\72g\324T\66O\317R\140\54\36\247\212\63\364\20\74\360\371\174\360o\373\231v\361\367\352\62Z\333\332\321v\266\23\351h\30\133\313O\40\347\363\200\246C\321T\270\335n\4v\2\10\207\243\310\21\316S\140\326\50\235D\251S\340\352\352jq\63\221H\26\371\245k\25\301\255\366SX\133Z\44\16\315\370ki\31A\272\331\251\352\32tt\234\303\372\372\6\232\232\333\20\217DP\241f\256\44\67\35\317\65\235\204\223I\247\260\273\367\4\376\255\55\50r\16\311d\22\61\272z\62\36EcK\53\266w\374\220lv\212K\263\176\60\245Q\71\206U\362Si\26\253\204\177\210\226\40q\52\232\5\366\175\300\320\320\20ZZZ\240\251\52\240\26\250\331\52lUN\243\276\42\260\300\227\252\322\301\72\371\54\223\254\326\242Jd\342\317\42\212\30\36\36FWW\27\6\6\6PWW\7\273\335\16z\326P\24\342\275\364\264\31\260X\2\246\65\343\364\270\361\74\321\220I\27\347VJ\340\367\373\213\215M\44\22p\72\235\244\236F\324TW\227H\345xdsY\250\252\306\60\5\23q\362\351\225\53o\230R\304c\231\16Y\316\243\321\173\32\365u\36\245\265\265\65W\343r\213\321X\264X\65\323\64\3\217F\243\30\31\31\301\362\312\12i\271\1\252\222W\243\341\10\27\215FVr\71\371k\216\336\367\100\54\26\277y\343\306\307\56U\53h\224\231\13\205\216\370\205\205\5evf\66\302\12\267X\54\316s\27\137\262\12t\311H\50X\254\336\345r\341\354\271\16\254QC\175\177\76\322\263\351t\230b\227\35\16\373g\251Tz\272Htm\255\253\237\236\365M\326\53r\366\227P\50\340K\12\330\240\271\235\271U\222\76\177\353\355wD\246w\225\32F\37\67\230I\176S\277\376\2gu\315\267\273\376\355I\212\133\42\17\220\307\70\203l\336\0\224\312\100\306\134\64\222\61Y\232\5\263\371\173Q\24\35f\62M\323t\45\257\344\250\75\37\311\271\354\26\235\357\221\207\310\223\214\315\362\37\344x\202\262\213\6\250\140\234\225\343tc\315F\271\302\231\2\330\307Y\173\326\257\251\62I\345\274\174\246\31\243Z\1\256\33\373\232\61\307\277C\217\376L\255\371\221\364\0\0\0\0IEND\256B\140\202") + "" + 2147483647 + 8 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 4 "GimpParamChoice" "gchararray" "shoot-type" "Shoot _area" "The shoot type" 3 "window" 3 "window" 0 "Take a screenshot of a single window" "" "screen" 1 "Take a screenshot of the entire screen" "" "region" 2 "Select a region to grab" "") + (proc-arg 1 "GParamInt" "gint" "x1" "X1" "Region left x coord for SHOOT-WINDOW" 3 -2147483648 2147483647 0) + (proc-arg 1 "GParamInt" "gint" "y1" "Y1" "Region top y coord for SHOOT-WINDOW" 3 -2147483648 2147483647 0) + (proc-arg 1 "GParamInt" "gint" "x2" "X2" "Region right x coord for SHOOT-WINDOW" 3 -2147483648 2147483647 0) + (proc-arg 1 "GParamInt" "gint" "y2" "Y2" "Region bottom y coord for SHOOT-WINDOW" 3 -2147483648 2147483647 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-pointer" "Inclure le _pointeur de la souris" "Your pointing device's cursor will be part of the image" 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "color-profile" "Color _Profile" "" 3 "monitor" 2 "monitor" 0 "Tag image with monitor profile" "" "srgb" 1 "Convert image with sRGB" "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/sample-colorize/sample-colorize" 1773502278 + (proc-def "plug-in-sample-colorize" 1 + "Colorie l’image en utilisant un échantillon d’image comme guide" + "This plug-in colorizes the contents of the specified (gray) layer with the help of a sample (color) layer. It analyzes all colors in the sample layer. The sample colors are sorted by brightness (== intensity) and amount and stored in a sample colortable (where brightness is the index) The pixels of the destination layer are remapped with the help of the sample colortable. If use_subcolors is TRUE, the remapping process uses all sample colors of the corresponding brightness-intensity and distributes the subcolors according to their amount in the sample (If the sample has 5 green, 3 yellow, and 1 red pixel of the intensity value 105, the destination pixels at intensity value 105 are randomly painted in green, yellow and red in a relation of 5:3:1 If use_subcolors is FALSE only one sample color per intensity is used. (green will be used in this example) The brightness intensity value is transformed at the remapping process according to the levels: out_lo, out_hi, in_lo, in_high and gamma The in_low / in_high levels specify an initial mapping of the intensity. The gamma value determines how intensities are interpolated between the in_lo and in_high levels. A gamma value of 1.0 results in linear interpolation. Higher gamma values results in more high-level intensities Lower gamma values results in more low-level intensities The out_low/out_high levels constrain the resulting intensity index The intensity index is used to pick the corresponding color in the sample colortable. If hold_inten is FALSE the picked color is used 1:1 as resulting remap_color. If hold_inten is TRUE The brightness of the picked color is adjusted back to the original intensity value (only hue and saturation are taken from the picked sample color) (or to the input level, if orig_inten is set FALSE) Works on both Grayscale and RGB image with/without alpha channel. (the image with the dst_drawable is converted to RGB if necessary) The sample_drawable should be of type RGB or RGBA" + "Wolfgang Hofer" + "hof@hotbot.com" + "02/2000" + "C_olorier à partir d’un échantillon…" + 1 + (menu-path "/Colors/Map") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 13 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "sample-drawable" "Sample drawable" "Sample drawable (should be of Type RGB or RGBA)" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "hold-inten" "Garder l’_intensité" "Hold brightness intensity levels" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "orig-inten" "I_ntensité d’origine" "TRUE: hold brightness of original intensity levels, FALSE: Hold Intensity of input levels" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "rnd-subcolors" "Utilis_er les sous-couleurs" "TRUE: Use all subcolors of same intensity, FALSE: Use only one color per intensity" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "guess-missing" "Smooth sam_ples" "TRUE: guess samplecolors for the missing intensity values, FALSE: use only colors found in the sample" 3 1) + (proc-arg 1 "GParamInt" "gint" "in-low" "_Low" "Intensity of lowest input" 3 0 254 0) + (proc-arg 1 "GParamInt" "gint" "in-high" "_High" "Intensity of highest input" 3 1 255 255) + (proc-arg 6 "GParamDouble" "gdouble" "gamma" "Ga_mma" "Gamma adjustment factor, 1.0 is linear" 3 0.10000000000000001 10 1) + (proc-arg 1 "GParamInt" "gint" "out-low" "Lo_w" "Lowest sample color intensity" 3 0 254 0) + (proc-arg 1 "GParamInt" "gint" "out-high" "Hi_gh" "Highest sample color intensity" 3 1 255 255))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/qbist/qbist" 1773502278 + (proc-def "plug-in-qbist" 1 + "Génère une grande variété de motifs abstraits" + "This Plug-in is based on an article by Jörn Loviscach (appeared in c't 10/95, page 326). It generates modern art pictures from a random genetic formula." + "Jörn Loviscach, Jens Ch. Restemeier" + "Jörn Loviscach, Jens Ch. Restemeier" + "January 2001, 1.12" + "_Qbiste…" + 1 + (menu-path "/Filters/Render/Pattern") + (icon icon-name -1 "") + "RGB*" + 1 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 5 "GParamBoolean" "gboolean" "anti-aliasing" "_Anti-aliasing" "Enable anti-aliasing using an oversampling algorithm" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/python-eval/python-eval.py" 1773502278 + (proc-def "python-fu-eval" 1 + "Evaluate Python code" + "Evaluate python code under the python interpreter (primarily for batch mode)" + "Manish Singh" + "Manish Singh" + "2006" + "" + 0 + (icon icon-name -1 "") + (batch-interpreter "Python 3") + "" + 2147483647 + 2 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 7 "GParamString" "gchararray" "script" "Batch commands in the target language" "Batch commands in the target language, which will be run by the interpreter" 3 ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/python-console/python-console.py" 1773502278 + (proc-def "python-fu-console" 1 + "Interpréteur interactif GIMP Python" + "Type in commands and see results" + "James Henstridge" + "James Henstridge" + "1997-1999" + "_Console Python" + 1 + (menu-path "/Filters/Development/Python-Fu") + (icon icon-name -1 "") + "" + 2147483647 + 1 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/procedure-browser/procedure-browser" 1773502278 + (proc-def "plug-in-dbbrowser" 1 + "Dresse la liste des procédures disponibles dans la PDB" + "" + "Thomas Noel" + "Thomas Noel" + "23th june 1997" + "Navigateur de _procédures" + 1 + (menu-path "/Help/[Programming]") + (icon icon-name -1 "") + "" + 2147483647 + 1 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/print/print" 1773502278 + (proc-def "file-print-gtk" 1 + "Imprime l’image" + "Print the image using the GTK+ Print API." + "Bill Skaggs, Sven Neumann, Stefan Röllin" + "Bill Skaggs " + "2006 - 2008" + "_Imprimer…" + 1 + (menu-path "/File/[Send]") + (icon icon-name -1 "document-print") + "*" + 13 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/plugin-browser/plugin-browser" 1773502278 + (proc-def "plug-in-plug-in-details" 1 + "Affiche des informations sur les greffons" + "Allows one to browse the plug-in menus system. You can search for plug-in names, sort by name or menu location and you can view a tree representation of the plug-in menus. Can also be of help to find where new plug-ins have installed themselves in the menus." + "Andy Thomas" + "Andy Thomas" + "1999" + "Navigateur de _greffons" + 1 + (menu-path "/Help/[Programming]") + (icon icon-name -1 "gimp-plugin") + "" + 2147483647 + 1 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/palette-to-gradient/palette-to-gradient.py" 1773502278 + (proc-def "python-fu-palette-to-gradient" 1 + "Créer un dégradé en utilisant les couleurs issues de la palette" + "Create a new gradient using colors from the palette." + "Carol Spears, reproduced from previous work by Adrian Likins and Jeff Trefftz" + "Carol Spears" + "2006" + "Palette vers _dégradé" + 1 + (menu-path "/Palettes Menu") + (icon icon-name -1 "") + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 12 "GimpParamPalette" "GimpPalette" "palette" "_Palette" "Palette" 3 1 1 0) + (proc-arg 12 "GimpParamGradient" "GimpGradient" "new-gradient" "The newly created gradient" "The newly created gradient" 3 1 0 0)) + (proc-def "python-fu-palette-to-gradient-repeating" 1 + "Créé un dégradé répétitif en utilisant les couleurs de la palette" + "Create a new repeating gradient using colors from the palette." + "Carol Spears, reproduced from previous work by Adrian Likins and Jeff Trefftz" + "Carol Spears" + "2006" + "Palette vers dégradé _répétitif" + 1 + (menu-path "/Palettes Menu") + (icon icon-name -1 "") + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 12 "GimpParamPalette" "GimpPalette" "palette" "_Palette" "Palette" 3 1 1 0) + (proc-arg 12 "GimpParamGradient" "GimpGradient" "new-gradient" "The newly created gradient" "The newly created gradient" 3 1 0 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/palette-sort/palette-sort.py" 1773502278 + (proc-def "python-fu-palette-sort" 1 + "Trier les couleurs dans une palette" + "\nSorts a palette, or part of a palette.\nSorts the given palette when it is editable, otherwise creates a new sorted palette.\nThe default is a 1D sort, but you can also sort over two color channels\nor create a 2D sorted palette with sorted rows.\nYou can optionally install colormath (https://pypi.python.org/pypi/colormath/1.0.8)\nto GIMP's Python to get even more channels to choose from.\n" + "João S. O. Bueno, Carol Spears, David Gowers" + "João S. O. Bueno, Carol Spears, David Gowers" + "2006-2014" + "_Trier la palette…" + 1 + (menu-path "/Palettes Menu") + (icon icon-name -1 "") + "" + 2147483647 + 11 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0) + (proc-arg 12 "GimpParamPalette" "GimpPalette" "palette" "_Palette" "Palette" 3 1 1 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "selections" "Select_ions" "Selections" 3 "all" 4 "all" 0 "Tous" "" "slice-array" 1 "Tranche / Tableau" "" "auto-slice" 2 "Auto-partitionnement (PP->AP)" "" "partitioned" 3 "Partitionné" "") + (proc-arg 7 "GParamString" "gchararray" "slice-expr" "_Expression de tranche" "\n Format is 'start:nrows,length' . All items are optional.\n\n The empty string selects all items, as does ':'\n ':4,' makes a 4-row selection out of all colors (length auto-determined)\n ':4' also.\n ':1,4' selects the first 4 colors\n ':,4' selects rows of 4 colors (nrows auto-determined)\n ':3,4' selects 3 rows of 4 colors\n '4:' selects a single row of all colors after 4, inclusive.\n '3:,4' selects rows of 4 colors, starting at 3 (nrows auto-determined)\n '2:3,4' selects 3 rows of 4 colors (12 colors total), beginning at index 2.\n '4' is illegal (ambiguous)\n" 3 "") + (proc-arg 4 "GimpParamChoice" "gchararray" "channel1" "Channel _to sort" "Channel to sort" 3 "luma" 16 "red" 0 "Rouge" "" "green" 1 "Vert" "" "blue" 2 "Bleu" "" "luma" 3 "Luma (Y)" "" "hue" 4 "Teinte" "" "saturation" 5 "Saturation" "" "value" 6 "Valeur" "" "saturation-hsl" 7 "Saturation (TSL)" "" "lightness-hsl" 8 "Luminosité (TSL)" "" "index" 9 "Index" "" "random" 10 "Aléatoire" "" "lightness-lab" 11 "Luminosité (LAB)" "" "a-color" 12 "Couleur-a" "" "b-color" 13 "Couleur-b" "" "chroma-lchab" 14 "Chroma (LCHab)" "" "hue-lchab" 15 "Teinte (LCHab)" "") + (proc-arg 5 "GParamBoolean" "gboolean" "ascending1" "_Ascendant" "Ascending" 3 1) + (proc-arg 4 "GimpParamChoice" "gchararray" "channel2" "Secondary C_hannel to sort" "Secondary Channel to sort" 3 "saturation" 16 "red" 0 "Rouge" "" "green" 1 "Vert" "" "blue" 2 "Bleu" "" "luma" 3 "Luma (Y)" "" "hue" 4 "Teinte" "" "saturation" 5 "Saturation" "" "value" 6 "Valeur" "" "saturation-hsl" 7 "Saturation (TSL)" "" "lightness-hsl" 8 "Luminosité (TSL)" "" "index" 9 "Index" "" "random" 10 "Aléatoire" "" "lightness-lab" 11 "Luminosité (LAB)" "" "a-color" 12 "Couleur-a" "" "b-color" 13 "Couleur-b" "" "chroma-lchab" 14 "Chroma (LCHab)" "" "hue-lchab" 15 "Teinte (LCHab)" "") + (proc-arg 5 "GParamBoolean" "gboolean" "ascending2" "Ascen_ding" "Ascending" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "quantize" "_Quantification" "Quantization" 3 0 1 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "pchannel" "Partitionin_g channel" "Partitioning channel" 3 "luma" 16 "red" 0 "Rouge" "" "green" 1 "Vert" "" "blue" 2 "Bleu" "" "luma" 3 "Luma (Y)" "" "hue" 4 "Teinte" "" "saturation" 5 "Saturation" "" "value" 6 "Valeur" "" "saturation-hsl" 7 "Saturation (TSL)" "" "lightness-hsl" 8 "Luminosité (TSL)" "" "index" 9 "Index" "" "random" 10 "Aléatoire" "" "lightness-lab" 11 "Luminosité (LAB)" "" "a-color" 12 "Couleur-a" "" "b-color" 13 "Couleur-b" "" "chroma-lchab" 14 "Chroma (LCHab)" "" "hue-lchab" 15 "Teinte (LCHab)" "") + (proc-arg 6 "GParamDouble" "gdouble" "pquantize" "Q_uantification de partition" "Partition quantization" 3 0 1 0) + (proc-arg 12 "GimpParamPalette" "GimpPalette" "new-palette" "Palette" "Palette" 3 1 0 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/palette-offset/palette-offset.py" 1773502278 + (proc-def "python-fu-palette-offset" 1 + "Décaler les couleurs d’une palette" + "\nOffset the colors in the palette.\nOffsets and returns the given palette when it is editable,\notherwise copies the given palette and returns it.\n" + "Joao S. O. Bueno Calligaris, Carol Spears" + "(c) Joao S. O. Bueno Calligaris" + "2004, 2006" + "_Décalage de palette…" + 1 + (menu-path "/Palettes Menu") + (icon icon-name -1 "") + "" + 2147483647 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 12 "GimpParamPalette" "GimpPalette" "palette" "_Palette" "Palette" 3 1 1 0) + (proc-arg 1 "GParamInt" "gint" "amount" "O_ffset" "Décalage" 3 1 2147483647 1) + (proc-arg 12 "GimpParamPalette" "GimpPalette" "new-palette" "The edited palette" "The newly created palette when read-only, otherwise the input palette" 3 1 0 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/pagecurl/pagecurl" 1773502278 + (proc-def "plug-in-pagecurl" 1 + "Crée un coin de page dans un coin de l’image" + "This plug-in creates a pagecurl-effect." + "Federico Mena Quintero and Simon Budig" + "Federico Mena Quintero and Simon Budig" + "July 2004, 1.0" + "Coin de p_age…" + 1 + (menu-path "/Filters/Distorts") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 8 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 4 "GimpParamChoice" "gchararray" "colors" "Couleurs" "" 3 "fg-bg" 3 "fg-bg" 0 "Couleurs de premier / arrière-plan" "" "current-gradient" 1 "Dégradé actif" "" "current-gradient-reversed" 2 "Dégradé actif (inversé)" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "edge" "Locatio_n" "Corner which is curled" 3 "lower-right" 4 "upper-left" 3 "Supérieur gauche" "" "upper-right" 4 "Supérieur droit" "" "lower-left" 2 "Inférieur gauche" "" "lower-right" 1 "Inférieur droit" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "orientation" "_Orientation" "" 3 "vertical" 2 "vertical" 0 "Vertical" "" "horizontal" 1 "Horizontal" "") + (proc-arg 5 "GParamBoolean" "gboolean" "shade" "Sh_ade" "Shade the region under the curl" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "opacity" "Opaci_ty" "Opacity" 3 0 1 0) + (proc-arg 9 "GimpParamLayer" "GimpLayer" "curl-layer" "Curl layer" "The new layer with the curl." 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/nl-filter/nl-filter" 1773502278 + (proc-def "plug-in-nl-filter" 1 + "Le couteau suisse des filtres non linéaires" + "This is the pnmnlfilt, in GIMP's clothing. See the pnmnlfilt manpage for details." + "Graeme W. Gill, GIMP 0.99 plug-in by Eric L. Hernes" + "Graeme W. Gill, Eric L. Hernes" + "1997" + "_Filtre NL…" + 1 + (menu-path "/Filters/Enhance") + (icon icon-name -1 "") + "RGB, GRAY" + 1 + 6 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 6 "GParamDouble" "gdouble" "alpha" "_Alpha" "The amount of the filter to apply" 3 0 1 0.29999999999999999) + (proc-arg 6 "GParamDouble" "gdouble" "radius" "Ra_dius" "The filter radius" 3 0.33333333333333331 1 0.33333333333333331) + (proc-arg 4 "GimpParamChoice" "gchararray" "filter" "_Filter" "The Filter to Run" 3 "alpha-trim" 3 "alpha-trim" 0 "Alpha trimmed mean" "" "optimal-estimation" 1 "Optimal estimation" "" "edge-enhancement" 2 "Edge enhancement" ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/metadata-viewer/metadata-viewer" 1773502278 + (proc-def "plug-in-metadata-viewer" 1 + "Affiche les métadonnées (Exif, IPTC, XMP)" + "View metadata information attached to the current image. This can include Exif, IPTC and/or XMP information." + "Hartmut Kuhse, Michael Natterer, Ben Touchette" + "Hartmut Kuhse, Michael Natterer, Ben Touchette" + "2013, 2017" + "_Afficher les métadonnées" + 1 + (menu-path "/Image/Metadata") + (icon icon-name -1 "") + "*" + 5 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/metadata-editor/metadata-editor" 1773502278 + (proc-def "plug-in-metadata-editor" 1 + "Modifie les métadonnées (IPTC, EXIF, XMP)" + "Edit metadata information attached to the current image. Some or all of this metadata will be saved in the file, depending on the output file format." + "Ben Touchette" + "Ben Touchette" + "2017" + "_Modifier les métadonnées" + 1 + (menu-path "/Image/Metadata") + (icon icon-name -1 "") + "*" + 5 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 0 "GParamBoxed" "GBytes" "parent-handle" "Parent's window handle" "The opaque handle of the window to set this plug-in's dialog transient to" 515))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/map-object/map-object" 1773502278 + (proc-def "plug-in-map-object" 1 + "Plaque une image sur un objet (plan, sphère, boite ou cylindre)" + "No help yet" + "Tom Bech & Federico Mena Quintero" + "Tom Bech & Federico Mena Quintero" + "Version 1.2.0, July 16 1998" + "_Plaquer sur un objet…" + 1 + (menu-path "/Filters/Map") + (icon icon-name -1 "") + "RGB*" + 1 + 53 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 4 "GimpParamChoice" "gchararray" "map-type" "Map _to" "Type of mapping" 3 "map-plane" 4 "map-plane" 0 "Plan" "" "map-sphere" 1 "Sphère" "" "map-box" 2 "Parallélépipède rectangle (boîte)" "" "map-cylinder" 3 "Cylindre" "") + (proc-arg 6 "GParamDouble" "gdouble" "viewpoint-x" "X" "Position of viewpoint (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "viewpoint-y" "Y" "Position of viewpoint (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "viewpoint-z" "Z" "Position of viewpoint (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 2) + (proc-arg 6 "GParamDouble" "gdouble" "position-x" "Position X" "Object position (x,y,z)" 3 -1 2 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "position-y" "Position Y" "Object position (x,y,z)" 3 -1 2 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "position-z" "Position Z" "Object position (x,y,z)" 3 -1 2 0) + (proc-arg 6 "GParamDouble" "gdouble" "first-axis-x" "X" "First axis of object (x,y,z)" 3 -1 2 1) + (proc-arg 6 "GParamDouble" "gdouble" "first-axis-y" "Y" "First axis of object (x,y,z)" 3 -1 2 0) + (proc-arg 6 "GParamDouble" "gdouble" "first-axis-z" "Z" "First axis of object (x,y,z)" 3 -1 2 0) + (proc-arg 6 "GParamDouble" "gdouble" "second-axis-x" "X" "Second axis of object (x,y,z)" 3 -1 2 0) + (proc-arg 6 "GParamDouble" "gdouble" "second-axis-y" "Y" "Second axis of object (x,y,z)" 3 -1 2 1) + (proc-arg 6 "GParamDouble" "gdouble" "second-axis-z" "Z" "Second axis of object (x,y,z)" 3 -1 2 0) + (proc-arg 6 "GParamDouble" "gdouble" "rotation-angle-x" "Angle X" "Rotation about X axis in degrees" 3 -360 360 0) + (proc-arg 6 "GParamDouble" "gdouble" "rotation-angle-y" "Angle Y" "Rotation about Y axis in degrees" 3 -360 360 0) + (proc-arg 6 "GParamDouble" "gdouble" "rotation-angle-z" "Angle Z" "Rotation about Z axis in degrees" 3 -360 360 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "light-type" "Light source type" "Type of lightsource" 3 "point-light" 3 "point-light" 0 "Lumière ponctuelle" "" "directional-light" 1 "Lumière directionnelle" "" "no-light" 2 "Pas de lumière" "") + (proc-arg 8 "GimpParamColor" "GeglColor" "light-color" "Light source _color" "Light source color" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0) + (proc-arg 6 "GParamDouble" "gdouble" "light-position-x" "Light position X" "Light source position (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 -0.5) + (proc-arg 6 "GParamDouble" "gdouble" "light-position-y" "Light position Y" "Light source position (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 -0.5) + (proc-arg 6 "GParamDouble" "gdouble" "light-position-z" "Light position Z" "Light source position (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 2) + (proc-arg 6 "GParamDouble" "gdouble" "light-direction-x" "Light direction X" "Light source direction (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 -1) + (proc-arg 6 "GParamDouble" "gdouble" "light-direction-y" "Light direction Y" "Light source direction (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 -1) + (proc-arg 6 "GParamDouble" "gdouble" "light-direction-z" "Light direction Z" "Light source direction (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 1) + (proc-arg 6 "GParamDouble" "gdouble" "ambient-intensity" "Ambie_nt" "Material ambient intensity" 3 0 1 0.29999999999999999) + (proc-arg 6 "GParamDouble" "gdouble" "diffuse-intensity" "D_iffuse" "Material diffuse intensity" 3 0 1 1) + (proc-arg 6 "GParamDouble" "gdouble" "diffuse-reflectivity" "Di_ffuse" "Material diffuse reflectivity" 3 0 1 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "specular-reflectivity" "Spec_ular" "Material specular reflectivity" 3 0 1 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "highlight" "Highligh_t" "Material highlight (note, it's exponential)" 3 0 1.7976931348623157e+308 27) + (proc-arg 5 "GParamBoolean" "gboolean" "antialiasing" "Antialia_sing" "Apply antialiasing" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "depth" "_Depth" "Qualité de l’anticrénelage. Plus elle est élevée, meilleur est l’anticrénelage mais plus élevé est le temps de calcul" 3 1 5 3) + (proc-arg 6 "GParamDouble" "gdouble" "threshold" "Thr_eshold" "Arrête lorsque les différences entre pixels sont plus petites que cette valeur" 3 0.001 1000 0.25) + (proc-arg 5 "GParamBoolean" "gboolean" "tiled" "_Tile source image" "Carreler avec l’image source" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "new-image" "Create _new image" "Create a new image" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "new-layer" "Create ne_w layer" "Crée un nouveau calque lors de l’application du filtre" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "transparent-background" "Transparent bac_kground" "Make background transparent" 3 0) + (proc-arg 6 "GParamDouble" "gdouble" "sphere-radius" "Radi_us" "Sphere radius" 3 0 1.7976931348623157e+308 0.25) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "box-front-drawable" "Fro_nt" "Box front face (set this to NULL if not used)" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "box-back-drawable" "B_ack" "Box back face" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "box-top-drawable" "To_p" "Box top face" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "box-bottom-drawable" "Bo_ttom" "Box bottom face" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "box-left-drawable" "Le_ft" "Box left face" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "box-right-drawable" "Ri_ght" "Box right face" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "x-scale" "Scale X" "Box X size" 3 0 1.7976931348623157e+308 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "y-scale" "Scale Y" "Box Y size" 3 0 1.7976931348623157e+308 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "z-scale" "Scale Z" "Box Z size" 3 0 1.7976931348623157e+308 0.5) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "cyl-top-drawable" "_Top" "Cylinder top face (set this to NULL if not used)" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "cyl-bottom-drawable" "_Bottom" "Cylinder bottom face (set this to NULL if not used)" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "cylinder-radius" "Radi_us" "Rayon du cylindre" 3 0 1.7976931348623157e+308 0.25) + (proc-arg 6 "GParamDouble" "gdouble" "cylinder-length" "Cylin_der length" "Longueur du cylindre" 3 0 1.7976931348623157e+308 0.25))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/mail/mail" 1773502278 + (has-init)) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/lighting/lighting" 1773502278 + (proc-def "plug-in-lighting" 1 + "Applique différents effets de lumière à l’image" + "No help yet" + "Tom Bech & Federico Mena Quintero" + "Tom Bech & Federico Mena Quintero" + "Version 0.2.0, March 15 1998" + "_Effets d’éclairage…" + 1 + (menu-path "/Filters/Light and Shadow/[Light]") + (icon icon-name -1 "") + "RGB*" + 1 + 28 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "bump-drawable" "B_ump map image" "Bumpmap drawable (set to NULL if disabled)" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "env-drawable" "Enviro_nment map image" "Environmentmap drawable (set to NULL if disabled)" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "do-bumpmap" "Enable bump mappi_ng" "Enable bumpmapping" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "do-envmap" "Enable en_vironment mapping" "Enable envmapping" 3 1) + (proc-arg 4 "GimpParamChoice" "gchararray" "bumpmap-type" "Cur_ve" "Type of mapping" 3 "bumpmap-linear" 4 "bumpmap-linear" 0 "Linéaire" "" "bumpmap-log" 1 "Logarithmique" "" "bumpmap-sinusoidal" 2 "Sinusoïdal" "" "bumpmap-spherical" 3 "Sphérique" "") + (proc-arg 6 "GParamDouble" "gdouble" "bumpmap-max-height" "Ma_ximum height" "The maximum height of the bumpmap" 3 0 3.4028234663852886e+38 0.10000000000000001) + (proc-arg 4 "GimpParamChoice" "gchararray" "light-type-1" "Type" "Type of light source" 3 "light-point" 4 "light-none" 3 "Aucun" "" "light-directional" 1 "Directionnel" "" "light-point" 0 "Point" "" "light-spot" 2 "Spot" "") + (proc-arg 8 "GimpParamColor" "GeglColor" "light-color-1" "Couleur" "Light source color" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0) + (proc-arg 6 "GParamDouble" "gdouble" "light-intensity-1" "Intensity" "Light source intensity" 3 0 100 1) + (proc-arg 6 "GParamDouble" "gdouble" "light-position-x-1" "Light position X" "Light source position (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 -1) + (proc-arg 6 "GParamDouble" "gdouble" "light-position-y-1" "Light position Y" "Light source position (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 -1) + (proc-arg 6 "GParamDouble" "gdouble" "light-position-z-1" "Light position Z" "Light source position (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 1) + (proc-arg 6 "GParamDouble" "gdouble" "light-direction-x-1" "Light direction X" "Light source direction (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 -1) + (proc-arg 6 "GParamDouble" "gdouble" "light-direction-y-1" "Light direction Y" "Light source direction (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 -1) + (proc-arg 6 "GParamDouble" "gdouble" "light-direction-z-1" "Light direction Z" "Light source direction (x,y,z)" 3 -1.7976931348623157e+308 1.7976931348623157e+308 1) + (proc-arg 6 "GParamDouble" "gdouble" "ambient-intensity" "Ambient intensity" "Material ambient intensity (Glowing)" 3 0 1 0.20000000000000001) + (proc-arg 6 "GParamDouble" "gdouble" "diffuse-intensity" "Diffuse intensity" "Material diffuse intensity (Bright)" 3 0 1 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "diffuse-reflectivity" "Diffuse reflectivity" "Material diffuse reflectivity" 3 0 1 0.40000000000000002) + (proc-arg 6 "GParamDouble" "gdouble" "specular-reflectivity" "Specular reflectivity" "Material specular reflectivity" 3 0 1 0.5) + (proc-arg 6 "GParamDouble" "gdouble" "highlight" "Highlight" "Material highlight (note, it's exponential) (Polished)" 3 0 1.7976931348623157e+308 27) + (proc-arg 5 "GParamBoolean" "gboolean" "metallic" "Metallic" "Make surfaces look metallic" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "antialiasing" "_Lissage" "Apply antialiasing" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "new-image" "Create new ima_ge" "Create a new image" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "transparent-background" "Trans_parent background" "Make background transparent" 3 0) + (proc-arg 6 "GParamDouble" "gdouble" "distance" "_Distance" "Distance of observer from surface" 3 0 2 0.25))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/jigsaw/jigsaw" 1773502278 + (proc-def "plug-in-jigsaw" 1 + "Ajoute une trame de puzzle à l’image" + "Jigsaw puzzle look" + "Nigel Wetten" + "Nigel Wetten" + "May 2000" + "_Puzzle…" + 1 + (menu-path "/Filters/Render/Pattern") + (icon icon-name -1 "") + "RGB*" + 1 + 8 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "x" "_Horizontal" "Nombre de pièces se recouvrant" 3 1 20 5) + (proc-arg 1 "GParamInt" "gint" "y" "_Vertical" "Nombre de pièces descendantes" 3 1 20 5) + (proc-arg 4 "GimpParamChoice" "gchararray" "style" "_Jigsaw Style" "The style/shape of the jigsaw puzzle" 3 "square" 2 "square" 0 "Square" "" "curved" 1 "Curved" "") + (proc-arg 1 "GParamInt" "gint" "blend-lines" "_Blend width" "Degré d’inclinaison du bord de chaque pièce" 3 0 10 3) + (proc-arg 6 "GParamDouble" "gdouble" "blend-amount" "Hi_ghlight" "Importance de l’éclairage sur le bord de chaque pièce" 3 0 1 0.5))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/imagemap/imagemap" 1773502278 + (proc-def "plug-in-imagemap" 1 + "Crée une image cliquable pour le Web" + "" + "Maurits Rijk" + "Maurits Rijk" + "1998-2005" + "_Image cliquable web…" + 1 + (menu-path "/Filters/Web") + (icon icon-name -1 "") + "*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/ifs-compose/ifs-compose" 1773502278 + (proc-def "plug-in-ifscompose" 1 + "Crée une fractale IFS (Iterated Function System)" + "Interactively create an Iterated Function System fractal. Use the window on the upper left to adjustthe component transformations of the fractal. The operation that is performed is selected by the buttons underneath the window, or from a menu popped up by the right mouse button. The fractal will be rendered with a transparent background if the current image has an alpha channel." + "Owen Taylor" + "Owen Taylor" + "1997" + "Fra_ctale IFS…" + 1 + (menu-path "/Filters/Render/Fractals") + (icon icon-name -1 "") + "*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/hot/hot" 1773502278 + (proc-def "plug-in-hot" 1 + "Cherche et corrige les pixels qui pourraient être trop lumineux" + "hot scans an image for pixels that will give unsave values of chrominance or composite signal amplitude when encoded into an NTSC or PAL signal. Three actions can be performed on these 'hot' pixels. (0) reduce luminance, (1) reduce saturation, or (2) Blacken." + "Eric L. Hernes, Alan Wm Paeth" + "Eric L. Hernes" + "1997" + "Ô_ter les « pixels chauds »…" + 1 + (menu-path "/Colors/[Modify]") + (icon icon-name -1 "") + "RGB" + 1 + 6 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 4 "GimpParamChoice" "gchararray" "mode" "_Mode" "Signal mode" 3 "ntsc" 2 "ntsc" 0 "NTSC" "" "pal" 1 "PAL" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "action" "_Action" "Action" 3 "reduce-luminance" 3 "reduce-luminance" 0 "Reduce luminance" "" "reduce-saturation" 1 "Reduce saturation" "" "blacken" 2 "Blacken" "") + (proc-arg 5 "GParamBoolean" "gboolean" "new-layer" "Créer un n_ouveau calque" "Create a new layer" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/histogram-export/histogram-export.py" 1773502278 + (proc-def "python-fu-histogram-export" 1 + "Exporte l’histogramme de l’image vers un fichier texte (CSV)" + "\nExports the image histogram to a text file,\nso that it can be used by other programs\nand loaded into spreadsheets.\n\nThe resulting file is a CSV file (Comma Separated\nValues), which can be imported\ndirectly in most spreadsheet programs.\n\nThe first two columns are the bucket boundaries,\nfollowed by the selected columns. The histogram\nrefers to the selected image area, and\ncan use either Sample Average data or data\nfrom the current drawable only.;\n\nThe output is in \"weighted pixels\" - meaning\nall fully transparent pixels are not counted.\n\nCheck the gimp-histogram call\n" + "João S. O. Bueno" + "(c) GPL V3.0 or later" + "2014" + "_Export Histogram..." + 1 + (menu-path "/Colors/Info/") + (icon icon-name -1 "") + "*" + 5 + 7 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 13 "GimpParamFile" "GFile" "file" "Histogram file" "Histogram export file" 3 1 0 "") + (proc-arg 6 "GParamDouble" "gdouble" "bucket-size" "_Bucket size" "Bucket size" 3 0.001 1 0.01) + (proc-arg 5 "GParamBoolean" "gboolean" "sample-average" "Sample _average" "Sample average" 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "output-format" "Output _Format" "Format de sortie" 3 "percent" 3 "pixel-count" 0 "Nombre de pixels" "" "normalized" 1 "Normalisé" "" "percent" 2 "Pourcentage" ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/help/help" 1773502278 + (proc-def "extension-gimp-help" 2 + "" + "" + "Sven Neumann , Michael Natterer , Henrik Brix Andersen " + "Sven Neumann, Michael Natterer & Henrik Brix Andersen" + "1999-2008" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 0 + (proc-arg 0 "GParamBoxed" "GStrv" "domain-names" "Domain Names" "Domain names" 3) + (proc-arg 0 "GParamBoxed" "GStrv" "domain-uris" "Domain URIs" "Domain URIs" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/guillotine/guillotine" 1773502278 + (proc-def "plug-in-guillotine" 1 + "Découper l’image en plusieurs sous-images en utilisant les guides" + "This function takes an image and slices it along its guides, creating new images. The original image is not modified." + "Adam D. Moss (adam@foxbox.org)" + "Adam D. Moss (adam@foxbox.org)" + "1998" + "Découper en utilisant les g_uides" + 1 + (menu-path "/Image/[Crop]") + (icon icon-name -1 "") + "*" + 13 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "images" "Output images" "Output images" 3 "GimpImage"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/grid/grid" 1773502278 + (proc-def "plug-in-grid" 1 + "Trace une grille sur l’image" + "Draws a grid using the specified colors. The grid origin is the upper left corner." + "Tim Newsome" + "Tim Newsome, Sven Neumann, Tom Rathborne, TC" + "1997 - 2000" + "G_rille (ancien)…" + 1 + (menu-path "/Filters/Render/Pattern") + (icon icon-name -1 "") + "*" + 1 + 15 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "hwidth" "Horizontal width" "Horizontal width" 3 0 524288 1) + (proc-arg 1 "GParamInt" "gint" "hspace" "Horizontal spacing" "Horizontal spacing" 3 1 524288 16) + (proc-arg 1 "GParamInt" "gint" "hoffset" "Horizontal offset" "Horizontal offset" 3 0 524288 8) + (proc-arg 8 "GimpParamColor" "GeglColor" "hcolor" "Horizontal color" "Horizontal color" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0) + (proc-arg 1 "GParamInt" "gint" "vwidth" "Vertical width" "Vertical width" 3 0 524288 1) + (proc-arg 1 "GParamInt" "gint" "vspace" "Vertical spacing" "Vertical spacing" 3 1 524288 16) + (proc-arg 1 "GParamInt" "gint" "voffset" "Vertical offset" "Vertical offset" 3 0 524288 8) + (proc-arg 8 "GimpParamColor" "GeglColor" "vcolor" "Vertical color" "Vertical color" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0) + (proc-arg 1 "GParamInt" "gint" "iwidth" "Intersection width" "Intersection width" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "ispace" "Intersection spacing" "Intersection spacing" 3 1 524288 2) + (proc-arg 1 "GParamInt" "gint" "ioffset" "Intersection offset" "Intersection offset" 3 0 524288 6) + (proc-arg 8 "GimpParamColor" "GeglColor" "icolor" "Intersection color" "Intersection color" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/gradients-save-as-css/gradients-save-as-css.py" 1773502278 + (proc-def "python-fu-gradient-save-as-css" 1 + "Creates a new palette from a given gradient" + "Creates a new palette from a given gradient" + "Joao S. O. Bueno" + "(c) GPL V3.0 or later" + "2011" + "Save Gradient as CSS..." + 1 + (menu-path "/Gradients Menu") + (icon icon-name -1 "") + "" + 2147483647 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 12 "GimpParamGradient" "GimpGradient" "gradient" "_Gradient to use" "" 3 1 1 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "_File" "" 3 1 0 ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/gradient-map/gradient-map" 1773502278 + (proc-def "plug-in-gradmap" 1 + "Recolore l’image en utilisant les couleurs du dégradé actif" + "This plug-in maps the contents of the specified drawable with active gradient. It calculates luminosity of each pixel and replaces the pixel by the sample of active gradient at the position proportional to that luminosity. Complete black pixel becomes the leftmost color of the gradient, and complete white becomes the rightmost. Works on both Grayscale and RGB image with/without alpha channel." + "Eiichi Takamori" + "Eiichi Takamori" + "1997" + "Application de _dégradé" + 1 + (menu-path "/Colors/Map") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable")) + (proc-def "plug-in-palettemap" 1 + "Recolore l’image en utilisant les couleurs de la palette active" + "This plug-in maps the contents of the specified drawable with the active palette. It calculates luminosity of each pixel and replaces the pixel by the palette sample at the corresponding index. A complete black pixel becomes the lowest palette entry, and complete white becomes the highest. Works on both Grayscale and RGB image with/without alpha channel." + "Bill Skaggs" + "Bill Skaggs" + "2004" + "Application de _palette" + 1 + (menu-path "/Colors/Map") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/gradient-flare/gradient-flare" 1773502278 + (proc-def "plug-in-gflare" 1 + "Produit un effet d’éblouissement en utilisant des dégradés" + "This plug-in produces a lense flare effect using custom gradients. In interactive call, the user can edit their own favorite lense flare (GFlare) and render it. Edited gflare is saved automatically to the folder in gflare-path, if it is defined in gimprc. In non-interactive call, the user can only render one of GFlare which has been stored in gflare-path already." + "Eiichi Takamori" + "Eiichi Takamori, and a lot of GIMP people" + "1997" + "Éblouissement _graduel…" + 1 + (menu-path "/Filters/Light and Shadow/[Light]") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 14 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 7 "GParamString" "gchararray" "gflare-name" "GFlare name" "Name of the GFlare to render" 3 "Default") + (proc-arg 1 "GParamInt" "gint" "center-x" "Center X" "X coordinate of center of GFlare" 3 -524288 524288 128) + (proc-arg 1 "GParamInt" "gint" "center-y" "Center Y" "Y coordinate of center of GFlare" 3 -524288 524288 128) + (proc-arg 6 "GParamDouble" "gdouble" "radius" "Radi_us" "Radius of GFlare (pixel)" 3 1 524288 100) + (proc-arg 6 "GParamDouble" "gdouble" "rotation" "Ro_tation" "Rotation of GFlare (degree)" 3 0 360 0) + (proc-arg 6 "GParamDouble" "gdouble" "hue" "_Hue rotation" "Hue rotation of GFlare (degree)" 3 0 360 0) + (proc-arg 6 "GParamDouble" "gdouble" "vector-angle" "Vector _angle" "Vector angle for second flares (degree)" 3 0 360 60) + (proc-arg 6 "GParamDouble" "gdouble" "vector-length" "Vector len_gth" "Vector length for second flares (percentage of Radius)" 3 0 10000 400) + (proc-arg 5 "GParamBoolean" "gboolean" "use-asupsample" "Ada_ptive supersampling" "Use adaptive supersampling while rendering" 3 0) + (proc-arg 1 "GParamInt" "gint" "asupsample-max-depth" "_Max depth" "Max depth for adaptive supersampling" 3 0 10 3) + (proc-arg 6 "GParamDouble" "gdouble" "asupsample-threshold" "Threshol_d" "Threshold for adaptive supersampling" 3 0 1 0.20000000000000001))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/gimpressionist/gimpressionist" 1773502278 + (proc-def "plug-in-gimpressionist" 1 + "Exécute diverses opérations artistiques" + "Performs various artistic operations on an image" + "Vidar Madsen " + "Vidar Madsen" + "v1.0, November 2003" + "_GIMPressionniste…" + 1 + (menu-path "/Filters/Artistic") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 7 "GParamString" "gchararray" "preset" "Preset" "Preset Name" 3 ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/gfig/gfig" 1773502278 + (proc-def "plug-in-gfig" 1 + "Créer des formes géométriques" + "Draw Vector Graphics and paint them onto your images. Gfig allows you to draw many types of objects including Lines, Circles, Ellipses, Curves, Polygons, pointed stars, Bezier curves, and Spirals. Objects can be painted using Brushes or other tools or filled using colors or patterns. Gfig objects can also be used to create selections." + "Andy Thomas" + "Andy Thomas" + "1997" + "Figures _géométriques (GFig)…" + 1 + (menu-path "/Filters/Render") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/fractal-explorer/fractal-explorer" 1773502278 + (proc-def "plug-in-fractalexplorer" 1 + "Rendu d’art fractal" + "No help yet." + "Daniel Cotting (cotting@multimania.com, www.multimania.com/cotting)" + "Daniel Cotting (cotting@multimania.com, www.multimania.com/cotting)" + "December, 1998" + "E_xplorateur de fractales…" + 1 + (menu-path "/Filters/Render/Fractals") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 23 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 4 "GimpParamChoice" "gchararray" "fractal-type" "Fr_actal type" "Type of fractal pattern" 3 "mandelbrot" 9 "mandelbrot" 0 "Mandelbrot" "" "julia" 1 "Julia" "" "barnsley-1" 2 "Barnsley 1" "" "barnsley-2" 3 "Barnsley 2" "" "barnsley-3" 4 "Barnsley 3" "" "spider" 5 "Araignée" "" "man-o-war" 6 "Man-o-War" "" "lambda" 7 "Lambda" "" "sierpinski" 8 "Sierpinski" "") + (proc-arg 6 "GParamDouble" "gdouble" "xmin" "Lef_t" "X min fractal image delimiter" 3 -3 3 -2) + (proc-arg 6 "GParamDouble" "gdouble" "xmax" "Ri_ght" "X max fractal image delimiter" 3 -3 3 2) + (proc-arg 6 "GParamDouble" "gdouble" "ymin" "To_p" "Y min fractal image delimiter" 3 -3 3 -1.5) + (proc-arg 6 "GParamDouble" "gdouble" "ymax" "_Bottom" "Y max fractal image delimiter" 3 -3 3 1.5) + (proc-arg 6 "GParamDouble" "gdouble" "iter" "Iteratio_ns" "Iteration value" 3 1 1000 50) + (proc-arg 6 "GParamDouble" "gdouble" "cx" "C_X" "CX value" 3 -2.5 2.5 -0.75) + (proc-arg 6 "GParamDouble" "gdouble" "cy" "C_Y" "CY value" 3 -2.5 2.5 -0.20000000000000001) + (proc-arg 4 "GimpParamChoice" "gchararray" "color-mode" "Mode couleur" "Apply specified color map or active gradient to final image" 3 "colormap" 2 "colormap" 0 "Comme indiqué ci-dessus" "" "gradient" 1 "Appliquer le dégradé actif à l’image finale" "") + (proc-arg 6 "GParamDouble" "gdouble" "red-stretch" "Red stretch" "Red stretching factor" 3 0 1 1) + (proc-arg 6 "GParamDouble" "gdouble" "green-stretch" "Green stretch" "Green stretching factor" 3 0 1 1) + (proc-arg 6 "GParamDouble" "gdouble" "blue-stretch" "Blue stretch" "Blue stretching factor" 3 0 1 1) + (proc-arg 4 "GimpParamChoice" "gchararray" "red-mode" "_Red" "Red application mode" 3 "red-cos" 3 "red-sin" 0 "Sinus" "" "red-cos" 1 "Cosinus" "" "red-none" 2 "Aucun" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "green-mode" "_Green" "Green application mode" 3 "green-cos" 3 "green-sin" 0 "Sinus" "" "green-cos" 1 "Cosinus" "" "green-none" 2 "Aucun" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "blue-mode" "_Blue" "Blue application mode" 3 "blue-sin" 3 "blue-sin" 0 "Sinus" "" "blue-cos" 1 "Cosinus" "" "blue-none" 2 "Aucun" "") + (proc-arg 5 "GParamBoolean" "gboolean" "red-invert" "In_version" "Red inversion mode" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "green-invert" "I_nversion" "Green inversion mode" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "blue-invert" "_Inversion" "Blue inversion mode" 3 0) + (proc-arg 1 "GParamInt" "gint" "n-colors" "_Number of colors" "Number of Colors for mapping" 3 2 8192 512) + (proc-arg 5 "GParamBoolean" "gboolean" "use-loglog-smoothing" "_Use log log smoothing" "Utilise un lissage en log log pour éviter les bandes dans le résultat." 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/foggify/foggify.py" 1773502278 + (proc-def "python-fu-foggify" 1 + "Ajouter un calque de brouillard" + "Adds a layer of fog to the image." + "James Henstridge" + "James Henstridge" + "1999,2007" + "_Brouillard…" + 1 + (menu-path "/Filters/Decor") + (icon icon-name -1 "") + "RGB*, GRAY*" + 5 + 7 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 7 "GParamString" "gchararray" "name" "_Nom de calque" "Nom de calque" 3 "Nuages") + (proc-arg 8 "GimpParamColor" "GeglColor" "color" "_Couleur de brouillard" "Couleur de brouillard" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "RGBA float" 0) + (proc-arg 6 "GParamDouble" "gdouble" "turbulence" "_Turbulence" "Turbulence" 3 0 7 1) + (proc-arg 6 "GParamDouble" "gdouble" "opacity" "O_pacité" "Opacité" 3 0 100 100))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/flame/flame" 1773502278 + (proc-def "plug-in-flame" 1 + "Création de flammes fractales cosmiques" + "Create cosmic recursive fractal flames" + "Scott Draves" + "Scott Draves" + "1997" + "_Flammes…" + 1 + (menu-path "/Filters/Render/Fractals") + (icon icon-name -1 "") + "RGB*" + 1 + 12 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 6 "GParamDouble" "gdouble" "brightness" "_Luminosité" "" 3 0 5 1) + (proc-arg 6 "GParamDouble" "gdouble" "contrast" "Co_ntrast" "" 3 0 5 1) + (proc-arg 6 "GParamDouble" "gdouble" "gamma" "_Gamma" "" 3 1 5 1) + (proc-arg 6 "GParamDouble" "gdouble" "sample-density" "Sample _density" "" 3 0.10000000000000001 20 5) + (proc-arg 1 "GParamInt" "gint" "spatial-oversample" "Spa_tial oversample" "" 3 1 4 2) + (proc-arg 6 "GParamDouble" "gdouble" "spatial-filter-radius" "Spatial _filter radius" "" 3 0 4 0.75) + (proc-arg 6 "GParamDouble" "gdouble" "zoom" "_Zoom" "" 3 -4 4 0) + (proc-arg 6 "GParamDouble" "gdouble" "x" "_X" "" 3 -2 2 0) + (proc-arg 6 "GParamDouble" "gdouble" "y" "_Y" "" 3 -2 2 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/film/film" 1773502278 + (proc-def "plug-in-film" 1 + "Combine plusieurs images sur un film" + "Compose several images to a roll film" + "Peter Kirchgessner" + "Peter Kirchgessner (peter@kirchgessner.net)" + "1997" + "_Film…" + 1 + (menu-path "/Filters/Combine") + (icon icon-name -1 "") + "*" + 13 + 18 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "film-height" "Film _height" "Height of film (0: fit to images)" 3 0 524288 0) + (proc-arg 8 "GimpParamColor" "GeglColor" "film-color" "_Film color" "Color of the film" 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0) + (proc-arg 1 "GParamInt" "gint" "number-start" "Start _index" "Start index for numbering" 3 0 2147483647 1) + (proc-arg 12 "GimpParamFont" "GimpFont" "number-font" "Number _font" "Font for drawing numbers" 3 0 1 0) + (proc-arg 8 "GimpParamColor" "GeglColor" "number-color" "_Number color" "Color for numbers" 3 1 32 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A double" 0) + (proc-arg 5 "GParamBoolean" "gboolean" "at-top" "En _haut" "Draw numbers at top" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "at-bottom" "En _bas" "Draw numbers at bottom" 3 1) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "images" "Images" "Images to be used for film" 3 "GimpImage") + (proc-arg 6 "GParamDouble" "gdouble" "picture-height" "Image _height" "As fraction of the strip height" 3 0 1 0.69499999999999995) + (proc-arg 6 "GParamDouble" "gdouble" "picture-spacing" "Image s_pacing" "The spacing between 2 images, as fraction of the strip height" 3 0 1 0.040000000000000001) + (proc-arg 6 "GParamDouble" "gdouble" "hole-offset" "Hole offse_t" "The offset from the edge of film, as fraction of the strip height" 3 0 1 0.058000000000000003) + (proc-arg 6 "GParamDouble" "gdouble" "hole-width" "Hole _width" "The width of the holes, as fraction of the strip height" 3 0 1 0.051999999999999998) + (proc-arg 6 "GParamDouble" "gdouble" "hole-height" "Hole hei_ght" "The height of the holes, as fraction of the strip height" 3 0 1 0.081000000000000003) + (proc-arg 6 "GParamDouble" "gdouble" "hole-spacing" "Hole _distance" "The distance between holes, as fraction of the strip height" 3 0 1 0.081000000000000003) + (proc-arg 6 "GParamDouble" "gdouble" "number-height" "_Number height" "The height of drawn numbers, as fraction of the strip height" 3 0 1 0.051999999999999998) + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image" "New image" "Output image" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-xwd/file-xwd" 1773502278 + (proc-def "file-xwd-load" 1 + "Loads files in the XWD (X Window Dump) format" + "Loads files in the XWD (X Window Dump) format. XWD image files are produced by the program xwd. Xwd is an X Window System window dumping utility." + "Peter Kirchgessner" + "Peter Kirchgessner" + "1996" + "Dump X window" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "xwd") + (magics "4,long,0x00000007") + (mime-types "image/x-xwindowdump")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-xwd-export" 1 + "Exports files in the XWD (X Window Dump) format" + "XWD exporting handles all image types except those with alpha channels." + "Peter Kirchgessner" + "Peter Kirchgessner" + "1996" + "Dump X window" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "xwd") + (mime-types "image/x-xwindowdump") + (handles-remote)) + "RGB, GRAY, INDEXED" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-xpm/file-xpm" 1773502278 + (proc-def "file-xpm-load" 1 + "Load files in XPM (X11 Pixmap) format." + "Load files in XPM (X11 Pixmap) format. XPM is a portable image format designed to be included in C source code. XLib provides utility functions to read this format. Newer code should however be using gdk-pixbuf-csource instead. XPM supports colored images, unlike the XBM format which XPM was designed to replace." + "Spencer Kimball & Peter Mattis & Ray Lehtiniemi" + "Spencer Kimball & Peter Mattis" + "1997" + "Image pixmap X" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "xpm") + (magics "0, string,/*\\040XPM\\040*/") + (mime-types "image/x-pixmap")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-xpm-export" 1 + "Export files in XPM (X11 Pixmap) format." + "Export files in XPM (X11 Pixmap) format. XPM is a portable image format designed to be included in C source code. XLib provides utility functions to read this format. Newer code should however be using gdk-pixbuf-csource instead. XPM supports colored images, unlike the XBM format which XPM was designed to replace." + "Spencer Kimball & Peter Mattis & Ray Lehtiniemi & Nathan Summers" + "Spencer Kimball & Peter Mattis" + "1997" + "Image pixmap X" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "xpm") + (mime-types "image/x-pixmap")) + "*" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 1 "GParamInt" "gint" "threshold" "_Seuil" "Alpha threshold" 3 0 255 127))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-xmc/file-xmc" 1773502278 + (proc-def "file-xmc-load-thumb" 1 + "Loads only first frame of X11 Mouse Cursor's animation sequence which nominal size is the closest of thumb-size to be used as a thumbnail" + "" + "Takeshi Matsuyama " + "Takeshi Matsuyama" + "26 May 2009" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-xmc-load" 1 + "Loads files of X11 Mouse Cursor file format" + "This plug-in loads X11 Mouse Cursor (XMC) files." + "Takeshi Matsuyama " + "Takeshi Matsuyama" + "26 May 2009" + "Curseur de souris X11" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "xmc") + (magics "0,string,Xcur") + (mime-types "image/x-xcursor") + (thumb-loader "file-xmc-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-xmc-export" 1 + "Exports files of X11 cursor file" + "This plug-in exports X11 Mouse Cursor (XMC) files" + "Takeshi Matsuyama " + "Takeshi Matsuyama" + "26 May 2009" + "Curseur de souris X11" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "xmc") + (mime-types "image/x-xcursor")) + "RGBA" + 2147483647 + 14 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 1 "GParamInt" "gint" "hot-spot-x" "Hot spot _X" "X-coordinate of hot spot (use -1, -1 to keep original hot spot)" 3 -1 524288 -1) + (proc-arg 1 "GParamInt" "gint" "hot-spot-y" "Hot spot _Y" "Y-coordinate of hot spot (use -1, -1 to keep original hot spot)" 3 -1 524288 -1) + (proc-arg 5 "GParamBoolean" "gboolean" "crop" "_Auto Crop all frames" "Remove the empty borders of all frames." 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "size" "Si_ze where unspecified" "Default frame size if unspecified" 3 "size-32px" 8 "size-12px" 12 "12px" "" "size-16px" 16 "16px" "" "size-24px" 24 "24px" "" "size-32px" 32 "32px" "" "size-36px" 36 "36px" "" "size-40px" 40 "40px" "" "size-48px" 48 "48px" "" "size-64px" 64 "64px" "") + (proc-arg 5 "GParamBoolean" "gboolean" "size-replace" "_Use default size for all frames" "Use default size for all frames" 3 0) + (proc-arg 1 "GParamInt" "gint" "delay" "_Delay where unspecified" "Default time span in milliseconds in which each frame is rendered" 3 5 2147483647 50) + (proc-arg 5 "GParamBoolean" "gboolean" "delay-replace" "Use default delay for all _frames" "Use default delay for all frames" 3 0) + (proc-arg 7 "GParamString" "gchararray" "xmc-copyright" "C_opyright" "Copyright information" 3 "") + (proc-arg 7 "GParamString" "gchararray" "xmc-license" "Lice_nse" "License information" 3 "") + (proc-arg 7 "GParamString" "gchararray" "gimp-comment" "Co_mment" "Optional comment" 3 "Created with GIMP"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-xbm/file-xbm" 1773502278 + (proc-def "file-xbm-load" 1 + "Load a file in X10 or X11 bitmap (XBM) file format" + "Load a file in X10 or X11 bitmap (XBM) file format. XBM is a lossless format for flat black-and-white (two color indexed) images." + "Gordon Matzigkeit" + "Gordon Matzigkeit" + "1998" + "Image bitmap X" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "xbm,icon,bitmap") + (mime-types "image/x-xbitmap")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-xbm-export" 1 + "Export a file in X10 or X11 bitmap (XBM) file format" + "X10 or X11 bitmap (XBM) file format. XBM is a lossless format for flat black-and-white (two color indexed) images." + "Gordon Matzigkeit" + "Gordon Matzigkeit" + "1998" + "Image bitmap X" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "xbm,icon,bitmap") + (mime-types "image/x-xbitmap") + (handles-remote)) + "INDEXED" + 2147483647 + 13 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "include-comment" "_Insérer un commentaire" "Insérer un commentaire au début du fichier." 3 0) + (proc-arg 7 "GParamString" "gchararray" "gimp-comment" "Co_mment" "Image description (maximum 72 bytes)" 3 "Created with GIMP") + (proc-arg 5 "GParamBoolean" "gboolean" "x10-format" "Format bitmap _X10" "Export in X10 format" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "use-hot-spot" "Write hot spot _values" "Write hotspot information" 3 0) + (proc-arg 1 "GParamInt" "gint" "hot-spot-x" "Hot s_pot X" "X coordinate of hotspot" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "hot-spot-y" "Hot spot _Y" "Y coordinate of hotspot" 3 0 524288 0) + (proc-arg 7 "GParamString" "gchararray" "prefix" "I_dentifier prefix" "Identifier prefix [determined from filename]" 3 "bitmap") + (proc-arg 5 "GParamBoolean" "gboolean" "write-mask" "Write extra mask _file" "Write extra mask file" 3 0) + (proc-arg 7 "GParamString" "gchararray" "mask-suffix" "Mas_k file extensions" "Suffix of the mask file" 3 "-mask"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-wmf/file-wmf" 1773502278 + (proc-def "file-wmf-load-thumb" 1 + "Loads a small preview from a WMF image" + "" + "Dom Lachowicz " + "Dom Lachowicz " + "(c) 2003 - Version 0.3.0" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-wmf-load" 1 + "Loads files in the WMF file format" + "Loads files in the WMF file format" + "Dom Lachowicz " + "Dom Lachowicz " + "(c) 2003 - Version 0.3.0" + "Fichier Microsoft WMF" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "wmf,apm") + (magics "0,string,\\327\\315\\306\\232,0,string,\\1\\0\\11\\0") + (mime-types "image/x-wmf") + (handles-vector) + (thumb-loader "file-wmf-load-thumb")) + "" + 2147483647 + 6 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "width" "_Width (pixels)" "Width (in pixels) to load the image in. (0 for the corresponding width per native ratio)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "height" "_Height (pixels)" "Height (in pixels) to load the image in. (0 for the corresponding height per native ratio)" 3 0 524288 0) + (proc-arg 5 "GParamBoolean" "gboolean" "keep-ratio" "_Keep aspect ratio" "Force dimensions with aspect ratio" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "prefer-native-dimensions" "_Prefer native dimensions" "Load and use dimensions from source file" 3 0) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-webp/file-webp" 1773502278 + (proc-def "file-webp-load" 1 + "Loads images in the WebP file format" + "Loads images in the WebP file format" + "Nathan Osman, Ben Touchette" + "(C) 2015-2016 Nathan Osman, (C) 2016 Ben Touchette" + "2015,2016" + "Image WebP" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "webp") + (magics "8,string,WEBP") + (mime-types "image/webp")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-webp-export" 1 + "Saves files in the WebP image format" + "Saves files in the WebP image format" + "Nathan Osman, Ben Touchette" + "(C) 2015-2016 Nathan Osman, (C) 2016 Ben Touchette" + "2015,2016" + "Image WebP" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "webp") + (mime-types "image/webp")) + "*" + 2147483647 + 20 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "preset" "Source _type" "WebP encoder preset" 3 "default" 6 "default" 0 "Par défaut" "" "picture" 1 "Picture" "" "photo" 2 "Photo" "" "drawing" 3 "Drawing" "" "icon" 4 "Icon" "" "text" 5 "Text" "") + (proc-arg 5 "GParamBoolean" "gboolean" "lossless" "_Sans perte" "Use lossless encoding" 3 0) + (proc-arg 6 "GParamDouble" "gdouble" "quality" "Image _quality" "Quality of the image" 3 0 100 90) + (proc-arg 6 "GParamDouble" "gdouble" "alpha-quality" "Alpha q_uality" "Quality of the image's alpha channel" 3 0 100 100) + (proc-arg 5 "GParamBoolean" "gboolean" "use-sharp-yuv" "Use Sharp YU_V" "Use sharper (but slower) RGB→YUV conversion" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "animation-loop" "Boucler _indéfiniment" "Loop animation infinitely" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "minimize-size" "_Minimiser la taille de la sortie (plus lent)" "Minimize output file size" 3 1) + (proc-arg 1 "GParamInt" "gint" "keyframe-distance" "Distance maximale entre les images-_clés" "Maximum distance between keyframes" 3 0 2147483647 50) + (proc-arg 1 "GParamInt" "gint" "default-delay" "_Délai par défaut entre les images" "Default delay (in milliseconds) to use when timestamps for frames are not available or forced." 3 0 2147483647 200) + (proc-arg 5 "GParamBoolean" "gboolean" "force-delay" "Ut_iliser le délai par défaut pour toutes les images" "Force default delay on all frames" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "animation" "Enregistrer l’a_nimation" "Use layers for animation" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-exif" "Save _Exif" "Save Exif (Exchangeable image file format) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-iptc" "Save _IPTC" "Save IPTC (International Press Telecommunications Council) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-xmp" "Save _XMP" "Save XMP (Extensible Metadata Platform) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-color-profile" "Save color _profile" "Save the ICC color profile as metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-thumbnail" "Save _thumbnail" "Save a smaller representation of the image as metadata" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-wbmp/file-wbmp" 1773502278 + (proc-def "file-wbmp-load" 1 + "Loads files of Wireless BMP file format" + "Loads files of Wireless BMP file format" + "Kevin Toyle" + "Kevin Toyle" + "2022" + "Wireless BMP image" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "wbmp") + (mime-types "image/vnd.wap.wbmp")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-otb-load" 1 + "Loads files in Nokia Over The Air Bitmap file format" + "Loads files in Nokia Over The Air Bitmap file format" + "Alx Sa" + "Alx Sa" + "2025" + "Nokia Over The Air Bitmap image" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "otb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-tiff/file-tiff" 1773502278 + (proc-def "file-tiff-load" 1 + "Loads files of the TIFF and BigTIFF file formats" + "Loads files of the Tag Image File Format (TIFF) and its 64-bit offsets variant (BigTIFF)" + "Spencer Kimball, Peter Mattis & Nick Lamb" + "Nick Lamb " + "1995-1996,1998-2003" + "Image TIFF ou BigTIFF" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "tif,tiff") + (magics "0,string,II*\\0,0,string,MM\\0*") + (mime-types "image/tiff") + (handles-remote)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-tiff-export" 1 + "Exports files in the TIFF or BigTIFF file formats" + "Exports files in the Tag Image File Format (TIFF) or its 64-bit offsets variant (BigTIFF) able to support much bigger file sizes" + "Spencer Kimball & Peter Mattis" + "Spencer Kimball & Peter Mattis" + "1995-1996,2000-2003" + "Image TIFF ou BigTIFF" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "tif,tiff") + (mime-types "image/tiff") + (handles-remote)) + "*" + 2147483647 + 14 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "bigtiff" "Export in _BigTIFF variant file format" "The BigTIFF variant file format uses 64-bit offsets, hence supporting over 4GiB files and bigger" 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "compression" "Co_mpression" "Compression type" 3 "none" 7 "none" 0 "None" "" "lzw" 1 "LZW" "" "packbits" 2 "Pack Bits" "" "adobe_deflate" 3 "Deflate" "" "jpeg" 4 "JPEG" "" "ccittfax3" 5 "CCITT Group 3 fax" "" "ccittfax4" 6 "CCITT Group 4 fax" "") + (proc-arg 5 "GParamBoolean" "gboolean" "save-transparent-pixels" "Save color _values from transparent pixels" "Keep the color data masked by an alpha channel intact (do not store premultiplied components)" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "cmyk" "Export as CMY_K" "Create a CMYK TIFF image using the soft-proofing color profile" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-exif" "Save _Exif" "Save Exif (Exchangeable image file format) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-iptc" "Save _IPTC" "Save IPTC (International Press Telecommunications Council) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-xmp" "Save _XMP" "Save XMP (Extensible Metadata Platform) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-color-profile" "Save color _profile" "Save the ICC color profile as metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-thumbnail" "Save _thumbnail" "Save a smaller representation of the image as metadata" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "include-comment" "Save c_omment" "Save a comment as metadata" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-tga/file-tga" 1773502278 + (proc-def "file-tga-load" 1 + "Loads files of Targa file format" + "FIXME: write help for tga_load" + "Raphael FRANCOIS, Gordon Matzigkeit" + "Raphael FRANCOIS, Gordon Matzigkeit" + "1997,2000,2007" + "Image TarGA" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "tga,vda,icb,vst") + (magics "-18&,string,TRUEVISION-XFILE.,-1,byte,0") + (mime-types "image/x-tga")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-tga-export" 1 + "Exports files in the Targa file format" + "FIXME: write help for tga_export" + "Raphael FRANCOIS, Gordon Matzigkeit" + "Raphael FRANCOIS, Gordon Matzigkeit" + "1997,2000" + "Image TarGA" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "tga") + (mime-types "image/x-tga")) + "*" + 2147483647 + 6 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "rle" "_Use RLE compression" "Use RLE compression" 3 1) + (proc-arg 4 "GimpParamChoice" "gchararray" "origin" "Ori_gin" "Image origin" 3 "bottom-left" 2 "bottom-left" 1 "En bas à gauche" "" "top-left" 0 "En haut à gauche" ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-svg/file-svg" 1773502278 + (proc-def "file-svg-load" 1 + "Loads files in SVG file format" + "Renders SVG files to raster graphics using librsvg." + "Dom Lachowicz, Sven Neumann" + "Dom Lachowicz " + "2.5.0" + "Image SVG" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "svg") + (magics "0,string, for SVG" 3 "") + (proc-arg 4 "GimpParamChoice" "gchararray" "raster-export-format" "Em_bed raster layers as" "" 3 "png" 3 "png" 1 "PNG (always)" "" "jpeg" 2 "JPEG (for opaque images, PNG otherwise)" "" "none" 0 "Do not export raster layers" ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-sunras/file-sunras" 1773502278 + (proc-def "file-sunras-load" 1 + "Load file of the SunRaster file format" + "Load file of the SunRaster file format" + "Peter Kirchgessner" + "Peter Kirchgessner" + "1996" + "Image Raster SUN" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "im1,im8,im24,im32,rs,ras,sun") + (magics "0,long,0x59a66a95") + (mime-types "image/x-sun-raster")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-sunras-export" 1 + "Export file in the SunRaster file format" + "SUNRAS exporting handles all image types except those with alpha channels." + "Peter Kirchgessner" + "Peter Kirchgessner" + "1996" + "Image Raster SUN" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "im1,im8,im24,im32,rs,ras,sun") + (mime-types "image/x-sun-raster")) + "RGB, GRAY, INDEXED" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "rle" "_Data Formatting" "Use standard or Run-Length Encoded output" 3 "rle" 2 "standard" 0 "Standard" "" "rle" 1 "Run-Length Encoding" ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-sgi/file-sgi" 1773502278 + (proc-def "file-sgi-load" 1 + "Loads files in SGI image file format" + "This plug-in loads SGI image files." + "Michael Sweet " + "Copyright 1997-1998 by Michael Sweet" + "1.1.1 - 17 May 1998" + "Image Silicon Graphic IRIS" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "sgi,rgb,rgba,bw,icon") + (magics "0,short,474") + (mime-types "image/x-sgi")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-sgi-export" 1 + "Exports files in SGI image file format" + "This plug-in exports SGI image files." + "Michael Sweet " + "Copyright 1997-1998 by Michael Sweet" + "1.1.1 - 17 May 1998" + "Image Silicon Graphic IRIS" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (save-proc + (extensions "sgi,rgb,rgba,bw,icon") + (mime-types "image/x-sgi")) + "*" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "compression" "Compression _type" "Compression level" 3 "rle" 3 "none" 0 "Aucune compression" "" "rle" 1 "Compression RLE" "" "arle" 2 "RLE agressif (non pris en charge par SGI)" ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-raw-placeholder/file-raw-placeholder" 1773502278 + (proc-def "file-raw-placeholder-canon-load" 1 + "Load files in the Canon raw formats via placeholder" + "This plug-in loads files in Canon's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "cr2,crw,cr3") + (magics "0,string,II*\\0\\020\\0\\0\\0CR,0,string,II\\024\\0\\0\\0HEAPCCDR,4,string,ftypcrx ") + (mime-types "image/x-canon-cr2,image/x-canon-crw,image/x-canon-cr3") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-nikon-load" 1 + "Load files in the Nikon raw formats via placeholder" + "This plug-in loads files in Nikon's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "nef,nrw") + (mime-types "image/x-nikon-nef,image/x-nikon-nrw") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-hasselblad-load" 1 + "Load files in the Hasselblad raw formats via placeholder" + "This plug-in loads files in Hasselblad's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "3fr,fff") + (mime-types "image/x-hasselblad-3fr,image/x-hasselblad-fff") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-sony-load" 1 + "Load files in the Sony raw formats via placeholder" + "This plug-in loads files in Sony's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "arw,srf,sr2") + (mime-types "image/x-sony-arw,image/x-sony-srf,image/x-sony-sr2") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-bay-load" 1 + "Load files in the BAY raw format via placeholder" + "This plug-in loads files in Casio's raw BAY format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "bay") + (mime-types "image/x-casio-bay") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-cine-load" 1 + "Load files in the CINE raw format via placeholder" + "This plug-in loads files in Phantom Software's raw CINE format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "cine,cin") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-sinar-load" 1 + "Load files in the Sinar raw formats via placeholder" + "This plug-in loads files in Sinar's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "cs1,ia,sti") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-kodak-load" 1 + "Load files in the Kodak raw formats via placeholder" + "This plug-in loads files in Kodak's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "dc2,dcr,kdc,k25,kc2") + (mime-types "image/x-kodak-dc2,image/x-kodak-dcr,image/x-kodak-kdc,image/x-kodak-k25,image/x-kodak-kc2") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-dng-load" 1 + "Load files in the DNG raw format via placeholder" + "This plug-in loads files in the Adobe Digital Negative DNG format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "dng") + (mime-types "image/x-adobe-dng") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-erf-load" 1 + "Load files in the ERF raw format via placeholder" + "This plug-in loads files in Epson's raw ERF format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "erf") + (mime-types "image/x-epson-erf") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-phaseone-load" 1 + "Load files in the Phase One raw formats via placeholder" + "This plug-in loads files in Phase One's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "cap,iiq") + (mime-types "image/x-phaseone-cap,image/x-phaseone-iiq") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-minolta-load" 1 + "Load files in the Minolta raw formats via placeholder" + "This plug-in loads files in Minolta's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "mdc,mrw") + (mime-types "image/x-minolta-mdc,image/x-minolta-mrw") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-mef-load" 1 + "Load files in the MEF raw format via placeholder" + "This plug-in loads files in Mamiya's raw MEF format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "mef") + (mime-types "image/x-mamiya-mef") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-mos-load" 1 + "Load files in the MOS raw format via placeholder" + "This plug-in loads files in Leaf's raw MOS format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "mos") + (mime-types "image/x-leaf-mos") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-orf-load" 1 + "Load files in the ORF raw format via placeholder" + "This plug-in loads files in Olympus' raw ORF format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "orf") + (magics "0,string,IIRO,0,string,MMOR,0,string,IIRS") + (mime-types "image/x-olympus-orf") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-pef-load" 1 + "Load files in the PEF raw format via placeholder" + "This plug-in loads files in Pentax' raw PEF format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "pef,raw") + (mime-types "image/x-pentax-pef,image/x-pentax-raw") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-pxn-load" 1 + "Load files in the PXN raw format via placeholder" + "This plug-in loads files in Logitech's raw PXN format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "pxn") + (mime-types "image/x-pxn") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-qtk-load" 1 + "Load files in the QTK raw format via placeholder" + "This plug-in loads files in Apple's QuickTake QTK raw format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "qtk") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-raf-load" 1 + "Load files in the RAF raw format via placeholder" + "This plug-in loads files in Fujifilm's raw RAF format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "raf") + (magics "0,string,FUJIFILMCCD-RAW") + (mime-types "image/x-fuji-raf") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-panasonic-load" 1 + "Load files in the Panasonic raw formats via placeholder" + "This plug-in loads files in Panasonic's raw formats by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "raw,rw2") + (magics "0,string,IIU\\0") + (mime-types "image/x-panasonic-raw,image/x-panasonic-rw2") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-rdc-load" 1 + "Load files in the RDC raw format via placeholder" + "This plug-in loads files in Digital Foto Maker's raw RDC format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "rdc") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-rwl-load" 1 + "Load files in the RWL raw format via placeholder" + "This plug-in loads files in Leica's raw RWL format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "rwl") + (mime-types "image/x-leica-rwl") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-srw-load" 1 + "Load files in the SRW raw format via placeholder" + "This plug-in loads files in Samsung's raw SRW format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "srw") + (mime-types "image/x-samsung-srw") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-x3f-load" 1 + "Load files in the X3F raw format via placeholder" + "This plug-in loads files in Sigma's raw X3F format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "x3f") + (magics "0,string,FOVb") + (mime-types "image/x-sigma-x3f") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-placeholder-ari-load" 1 + "Load files in the ARI raw format via placeholder" + "This plug-in loads files in Arriflex' raw ARI format by calling placeholder." + "Tobias Ellinghaus" + "Tobias Ellinghaus" + "2016" + "" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "ari") + (handles-raw)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-raw-data/file-raw-data" 1773502278 + (proc-def "file-raw-load" 1 + "Load raw images, specifying image information" + "Load raw images, specifying image information" + "timecop, pg@futureware.at" + "timecop, pg@futureware.at" + "Aug 2004" + "Données d’image Raw" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "data")) + "" + 2147483647 + 12 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "width" "_Largeur" "Image width in number of pixels" 3 1 524288 350) + (proc-arg 1 "GParamInt" "gint" "height" "_Hauteur" "Image height in number of pixels" 3 1 524288 350) + (proc-arg 1 "GParamInt" "gint" "offset" "O_ffset" "Offset to beginning of image in raw data" 3 0 524288 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "pixel-format" "Pi_xel format" "The layout of pixel data, such as components and their order" 3 "rgb-8bpc" 19 "rgb-8bpc" 0 "RGB 8-bit" "" "rgb-16bpc" 1 "RGB 16-bit" "" "rgb-32bpc" 2 "RGB 32-bit" "" "rgba-8bpc" 3 "RGBA 8-bit" "" "rgba-16bpc" 4 "RGBA 16-bit" "" "rgba-32bpc" 5 "RGBA 32-bit" "" "rgb565" 6 "RGB565" "" "bgr565" 7 "BGR565" "" "grayscale-1bpp" 8 "N&B 1 bit" "" "grayscale-2bpp" 9 "Grayscale 2-bit" "" "grayscale-4bpp" 10 "Grayscale 4-bit" "" "grayscale-8bpp" 11 "Grayscale 8-bit" "" "grayscale-16bpp" 12 "Grayscale 16-bit" "" "grayscale-32bpp" 13 "Grayscale 32-bit" "" "grayscale-alpha-8bpc" 14 "Grayscale-Alpha 8-bit" "" "grayscale-alpha-16bpc" 15 "Grayscale-Alpha 16-bit" "" "grayscale-alpha-32bpc" 16 "Grayscale-Alpha 32-bit" "" "indexed" 17 "Indexé" "" "indexed-alpha" 18 "Alpha indexé" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "data-type" "_Data type" "Data type used to represent pixel values" 3 "unsigned" 3 "unsigned" 0 "Unsigned Integer" "" "signed" 1 "Signed Integer" "" "float" 2 "Floating Point" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "endianness" "_Endianness" "Order of sequences of bytes" 3 "little-endian" 2 "little-endian" 0 "Little Endian" "" "big-endian" 1 "Big Endian" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "planar-configuration" "Planar confi_guration" "How color pixel data are stored" 3 "contiguous" 2 "contiguous" 0 "Contiguous" "" "planar" 1 "Planar" "") + (proc-arg 1 "GParamInt" "gint" "palette-offset" "Palette Offse_t" "Offset to beginning of data in the palette file" 3 0 524288 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "palette-type" "Palette's la_yout" "The layout for the palette's color channels" 3 "rgb" 2 "rgb" 0 "R, V, B (normal)" "" "bgr" 1 "B, V, R, X (style BMP)" "") + (proc-arg 13 "GimpParamFile" "GFile" "palette-file" "_Palette File" "The file containing palette data" 3 0 1 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-hgt-load" 1 + "Load HGT data as images" + "Load Digital Elevation Model data in HGT format from the Shuttle Radar Topography Mission as images. Though the output image will be RGB, all colors are grayscale by default and the contrast will be quite low on most earth relief. Therefore you will likely want to remap elevation to colors as a second step, for instance with the \"Gradient Map\" plug-in." + "" + "" + "2017-12-09" + "Données du modèle d’élévation numérique" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "hgt")) + "" + 2147483647 + 6 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 4 "GimpParamChoice" "gchararray" "sample-spacing" "Sa_mple spacing" "The sample spacing of the data." 3 "auto-detect" 3 "auto-detect" 0 "Auto-Detect" "" "srtm-1" 1 "SRTM-1 (1 arc second)" "" "srtm-3" 2 "SRTM-3 (3 arc seconds)" "") + (proc-arg 1 "GParamInt" "gint" "palette-offset" "Palette Offse_t" "Offset to beginning of data in the palette file" 3 0 524288 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "palette-type" "Palette's la_yout" "The layout for the palette's color channels" 3 "rgb" 2 "rgb" 0 "R, V, B (normal)" "" "bgr" 1 "B, V, R, X (style BMP)" "") + (proc-arg 13 "GimpParamFile" "GFile" "palette-file" "_Palette File" "The file containing palette data" 3 0 1 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-hrz-load" 1 + "Load HRZ data as images" + "" + "Albert Cahalan" + "Albert Cahalan" + "1997" + "Slow-scan television data" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "hrz")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-raw-export" 1 + "Dump images to disk in raw format" + "Dump images to disk in raw format" + "Björn Kautler, Bjoern@Kautler.net" + "Björn Kautler, Bjoern@Kautler.net" + "April 2014" + "Données d’image Raw" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "data,raw")) + "INDEXED, GRAY, RGB, RGBA" + 2147483647 + 6 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "planar-configuration" "Planar configuration" "How color pixel data are stored" 3 "contiguous" 2 "contiguous" 0 "Contiguous" "" "planar" 1 "Planar" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "palette-type" "Palette's la_yout" "The layout for the palette's color channels" 3 "rgb" 2 "rgb" 0 "R, V, B (normal)" "" "bgr" 1 "B, V, R, X (style BMP)" ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-qoi/file-qoi" 1773502278 + (proc-def "file-qoi-load" 1 + "Load file in the QOI file format" + "Load file in the QOI file format (Quite OK Image)" + "Alex S." + "Alex S." + "2023" + "Quite OK Image" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "qoi") + (magics "0,string,qoif") + (mime-types "image/qoi")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-qoi-export" 1 + "Export image in the QOI file format" + "Export image in the QOI file format (Quite OK Image)" + "Alex S." + "Alex S." + "2023" + "Quite OK Image" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "qoi") + (mime-types "image/qoi")) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-psp/file-psp" 1773502278 + (proc-def "file-psp-load" 1 + "Loads images from the Paint Shop Pro PSP file format" + "This plug-in loads and exports images in Paint Shop Pro's native PSP format. Vector layers aren't handled. Exporting isn't yet implemented." + "Tor Lillqvist" + "Tor Lillqvist" + "1999" + "Image Paint Shop Pro" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "psp,tub,pspimage,psptube") + (magics "0,string,Paint\\040Shop\\040Pro\\040Image\\040File\n\032") + (mime-types "image/x-psp")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-psd/file-psd" 1773502278 + (proc-def "file-psd-load-thumb" 1 + "Loads thumbnails from the Photoshop PSD file format" + "This plug-in loads thumbnail images from Adobe Photoshop (TM) native PSD format files." + "John Marshall" + "John Marshall" + "2007" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-psd-load" 1 + "Loads images from the Photoshop PSD and PSB file formats" + "This plug-in loads images in Adobe Photoshop (TM) native PSD and PSB format." + "John Marshall" + "John Marshall" + "2007" + "Image Photoshop" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "psd, psb") + (magics "0,string,8BPS") + (mime-types "image/x-psd") + (thumb-loader "file-psd-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-psd-load-merged" 1 + "Loads images from the Photoshop PSD and PSB file formats" + "This plug-in loads the merged image data in Adobe Photoshop (TM) native PSD and PSB format." + "Ell" + "Ell" + "2018" + "Image Photoshop (fusionnée)" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "psd, psb") + (magics "0,string,8BPS") + (priority 1) + (mime-types "image/x-psd") + (priority 1) + (thumb-loader "file-psd-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-psd-export" 1 + "Saves files in the Photoshop (TM) PSD file format" + "This plug-in saves files of Adobe Photoshop (TM) native PSD format. These files may be of any image type supported by GIMP, with or without layers, layer masks, aux channels and guides." + "Monigotes" + "Monigotes" + "2000" + "Image Photoshop" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "psd") + (mime-types "image/x-psd")) + "*" + 2147483647 + 14 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "clippingpath" "Assign a Clipping _Path" "Select a path to be the clipping path" 3 0) + (proc-arg 7 "GParamString" "gchararray" "clippingpathname" "Clipping Path _Name" "Clipping path name\n(ignored if no clipping path)" 3 "") + (proc-arg 6 "GParamDouble" "gdouble" "clippingpathflatness" "Path _Flatness" "Clipping path flatness in device pixels\n(ignored if no clipping path)" 3 0 100 0.20000000000000001) + (proc-arg 5 "GParamBoolean" "gboolean" "cmyk" "Export as _CMYK" "Export a CMYK PSD image using the soft-proofing color profile" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "duotone" "Export as _Duotone" "Export as a Duotone PSD file if Duotone color space information was attached to the image when originally imported." 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-exif" "Save _Exif" "Save Exif (Exchangeable image file format) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-iptc" "Save _IPTC" "Save IPTC (International Press Telecommunications Council) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-xmp" "Save _XMP" "Save XMP (Extensible Metadata Platform) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-color-profile" "Save color _profile" "Save the ICC color profile as metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-thumbnail" "Save _thumbnail" "Save a smaller representation of the image as metadata" 3 1)) + (proc-def "file-psb-export" 1 + "Saves files in the Photoshop (TM) Large PSB file format" + "This plug-in saves files of Adobe Photoshop (TM) Large native PSB format. These files may be of any image type supported by GIMP, with or without layers, layer masks, aux channels and guides." + "Monigotes" + "Monigotes" + "2000" + "Photoshop Large image" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "psb") + (mime-types "image/x-psb")) + "*" + 2147483647 + 9 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "clippingpath" "Assign a Clipping _Path" "Select a path to be the clipping path" 3 0) + (proc-arg 7 "GParamString" "gchararray" "clippingpathname" "Clipping Path _Name" "Clipping path name\n(ignored if no clipping path)" 3 "") + (proc-arg 6 "GParamDouble" "gdouble" "clippingpathflatness" "Path _Flatness" "Clipping path flatness in device pixels\n(ignored if no clipping path)" 3 0 100 0.20000000000000001) + (proc-arg 5 "GParamBoolean" "gboolean" "cmyk" "Export as _CMYK" "Export a CMYK PSD image using the soft-proofing color profile" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "duotone" "Export as _Duotone" "Export as a Duotone PSD file if Duotone color space information was attached to the image when originally imported." 3 0)) + (proc-def "file-psd-load-metadata" 1 + "Loads Photoshop-format metadata from other file formats." + "Loads Photoshop-format metadata from other file formats." + "John Marshall" + "John Marshall" + "2007" + "" + 0 + (icon icon-name -1 "") + (load-proc) + "" + 2147483647 + 6 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "size" "Metadata size" "" 3 0 2147483647 0) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "image" "The image" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "metadata-type" "Metadata type" "If the metadata contains image or layer PSD resources." 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "cmyk" "CMYK" "If the layer metadata needs to be converted from CMYK colorspace." 3 0) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-ps/file-ps" 1773502278 + (proc-def "file-ps-load-thumb" 1 + "Loads a small preview from a PostScript or PDF document" + "" + "Peter Kirchgessner " + "Peter Kirchgessner" + "v1.17 19-Sep-2004" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-ps-load" 1 + "Load PostScript documents" + "Load PostScript documents" + "Peter Kirchgessner " + "Peter Kirchgessner" + "v1.17 19-Sep-2004" + "Document PostScript" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "ps") + (magics "0,string,%!,0,long,0xc5d0d3c6") + (mime-types "application/postscript") + (handles-vector) + (thumb-loader "file-ps-load-thumb")) + "" + 2147483647 + 11 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "width" "_Width (pixels)" "Width (in pixels) to load the image in. (0 for the corresponding width per native ratio)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "height" "_Height (pixels)" "Height (in pixels) to load the image in. (0 for the corresponding height per native ratio)" 3 0 524288 0) + (proc-arg 5 "GParamBoolean" "gboolean" "keep-ratio" "_Keep aspect ratio" "Force dimensions with aspect ratio" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "prefer-native-dimensions" "_Prefer native dimensions" "Load and use dimensions from source file" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "check-bbox" "Try _Bounding Box" "FALSE: Use width/height, TRUE: Use BoundingBox" 3 1) + (proc-arg 7 "GParamString" "gchararray" "pages" "_Pages" "Pages to load (e.g.: 1,3,5-7)" 3 "1") + (proc-arg 4 "GimpParamChoice" "gchararray" "coloring" "Colorin_g" "Import color format" 3 "rgb" 4 "bw" 4 "N/B" "" "grayscale" 5 "Gris" "" "rgb" 6 "Couleur" "" "automatic" 7 "Automatique" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "text-alpha-bits" "Te_xt anti-aliasing" "Text anti-aliasing strength" 3 "none" 3 "none" 1 "Aucun" "" "weak" 2 "Faible" "" "strong" 4 "Fort" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "graphic-alpha-bits" "Gra_phic anti-aliasing" "Graphic anti-aliasing strength" 3 "none" 3 "none" 1 "Aucun" "" "weak" 2 "Faible" "" "strong" 4 "Fort" "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-eps-load" 1 + "Load Encapsulated PostScript images" + "Load Encapsulated PostScript images" + "Peter Kirchgessner " + "Peter Kirchgessner" + "v1.17 19-Sep-2004" + "Image PostScript encapsulé" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "eps") + (magics "0,string,%!,0,long,0xc5d0d3c6") + (mime-types "image/x-eps") + (handles-vector) + (thumb-loader "file-ps-load-thumb")) + "" + 2147483647 + 11 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "width" "_Width (pixels)" "Width (in pixels) to load the image in. (0 for the corresponding width per native ratio)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "height" "_Height (pixels)" "Height (in pixels) to load the image in. (0 for the corresponding height per native ratio)" 3 0 524288 0) + (proc-arg 5 "GParamBoolean" "gboolean" "keep-ratio" "_Keep aspect ratio" "Force dimensions with aspect ratio" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "prefer-native-dimensions" "_Prefer native dimensions" "Load and use dimensions from source file" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "check-bbox" "Try _Bounding Box" "FALSE: Use width/height, TRUE: Use BoundingBox" 3 1) + (proc-arg 7 "GParamString" "gchararray" "pages" "_Pages" "Pages to load (e.g.: 1,3,5-7)" 3 "1") + (proc-arg 4 "GimpParamChoice" "gchararray" "coloring" "Colorin_g" "Import color format" 3 "rgb" 4 "bw" 4 "N/B" "" "grayscale" 5 "Gris" "" "rgb" 6 "Couleur" "" "automatic" 7 "Automatique" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "text-alpha-bits" "Te_xt anti-aliasing" "Text anti-aliasing strength" 3 "none" 3 "none" 1 "Aucun" "" "weak" 2 "Faible" "" "strong" 4 "Fort" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "graphic-alpha-bits" "Gra_phic anti-aliasing" "Graphic anti-aliasing strength" 3 "none" 3 "none" 1 "Aucun" "" "weak" 2 "Faible" "" "strong" 4 "Fort" "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-ps-export" 1 + "Export image as PostScript document" + "PostScript exporting handles all image types except those with alpha channels." + "Peter Kirchgessner " + "Peter Kirchgessner" + "v1.17 19-Sep-2004" + "Document PostScript" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "ps") + (mime-types "application/postscript") + (handles-remote)) + "RGB, GRAY, INDEXED" + 2147483647 + 15 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 6 "GParamDouble" "gdouble" "width" "_Largeur" "Width of the image in PostScript file (0: use input image size)" 3 0 524288 287) + (proc-arg 6 "GParamDouble" "gdouble" "height" "_Hauteur" "Height of the image in PostScript file (0: use input image size)" 3 0 524288 200) + (proc-arg 6 "GParamDouble" "gdouble" "x-offset" "_X offset" "X-offset to image from lower left corner" 3 -524288 524288 5) + (proc-arg 6 "GParamDouble" "gdouble" "y-offset" "Y o_ffset" "Y-offset to image from lower left corner" 3 -524288 524288 5) + (proc-arg 4 "GimpParamChoice" "gchararray" "unit" "_Unit" "Unit of measure for offset values" 3 "millimeter" 2 "inch" 0 "Inch" "" "millimeter" 1 "Millimeter" "") + (proc-arg 5 "GParamBoolean" "gboolean" "keep-ratio" "Proportions _fixes" "If enabled, aspect ratio will be maintained on export. Otherwise, the width and height values will be used." 3 1) + (proc-arg 1 "GParamInt" "gint" "rotation" "Rotation" "0, 90, 180, 270" 3 0 270 0) + (proc-arg 5 "GParamBoolean" "gboolean" "level" "PostScript Level _2" "If enabled, export in PostScript Level 2 format. Otherwise, export in PostScript Level 1 format." 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "eps-flag" "Encapsula_ted PostScript" "If enabled, export as Encapsulated PostScript. Otherwise, export as PostScript." 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "show-preview" "A_perçu" "Show Preview" 3 0) + (proc-arg 1 "GParamInt" "gint" "preview" "Preview Si_ze" "Maximum size of preview. Set to 0 for no preview." 3 0 524288 256)) + (proc-def "file-eps-export" 1 + "Export image as Encapsulated PostScript image" + "PostScript exporting handles all image types except those with alpha channels." + "Peter Kirchgessner " + "Peter Kirchgessner" + "v1.17 19-Sep-2004" + "Encapsulated PostScript" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "eps") + (mime-types "application/x-eps") + (handles-remote)) + "RGB, GRAY, INDEXED" + 2147483647 + 15 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 6 "GParamDouble" "gdouble" "width" "_Largeur" "Width of the image in PostScript file (0: use input image size)" 3 0 524288 287) + (proc-arg 6 "GParamDouble" "gdouble" "height" "_Hauteur" "Height of the image in PostScript file (0: use input image size)" 3 0 524288 200) + (proc-arg 6 "GParamDouble" "gdouble" "x-offset" "_X offset" "X-offset to image from lower left corner" 3 -524288 524288 5) + (proc-arg 6 "GParamDouble" "gdouble" "y-offset" "Y o_ffset" "Y-offset to image from lower left corner" 3 -524288 524288 5) + (proc-arg 4 "GimpParamChoice" "gchararray" "unit" "_Unit" "Unit of measure for offset values" 3 "millimeter" 2 "inch" 0 "Inch" "" "millimeter" 1 "Millimeter" "") + (proc-arg 5 "GParamBoolean" "gboolean" "keep-ratio" "Proportions _fixes" "If enabled, aspect ratio will be maintained on export. Otherwise, the width and height values will be used." 3 1) + (proc-arg 1 "GParamInt" "gint" "rotation" "Rotation" "0, 90, 180, 270" 3 0 270 0) + (proc-arg 5 "GParamBoolean" "gboolean" "level" "PostScript Level _2" "If enabled, export in PostScript Level 2 format. Otherwise, export in PostScript Level 1 format." 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "eps-flag" "Encapsula_ted PostScript" "If enabled, export as Encapsulated PostScript. Otherwise, export as PostScript." 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "show-preview" "A_perçu" "Show Preview" 3 0) + (proc-arg 1 "GParamInt" "gint" "preview" "Preview Si_ze" "Maximum size of preview. Set to 0 for no preview." 3 0 524288 256))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-pnm/file-pnm" 1773502278 + (proc-def "file-pnm-load" 1 + "Loads files in the PNM file format" + "This plug-in loads files in the various Netpbm portable file formats." + "Erik Nygren" + "Erik Nygren" + "1996" + "Image PNM" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "pnm,ppm,pgm,pbm,pfm,pam") + (magics "0,string,P1,0,string,P2,0,string,P3,0,string,P4,0,string,P5,0,string,P6,0,string,P7,0,string,PF,0,string,Pf") + (mime-types "image/x-portable-anymap") + (handles-remote)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-pnm-export" 1 + "Exports files in the PNM file format" + "PNM export handles all image types without transparency." + "Erik Nygren" + "Erik Nygren" + "1996" + "Image PNM" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "pnm") + (mime-types "image/x-portable-anymap") + (handles-remote)) + "RGB, GRAY, INDEXED" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "raw" "_Data formatting" "Whether to export ASCII or raw output" 3 "raw-output" 2 "ascii-output" 0 "ASCII" "" "raw-output" 1 "Raw" "")) + (proc-def "file-pbm-export" 1 + "Exports files in the PBM file format" + "PBM exporting produces mono images without transparency." + "Erik Nygren" + "Erik Nygren" + "1996" + "Image PBM" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "pbm") + (mime-types "image/x-portable-bitmap") + (handles-remote)) + "RGB, GRAY, INDEXED" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "raw" "_Data formatting" "Whether to export ASCII or raw output" 3 "raw-output" 2 "ascii-output" 0 "ASCII" "" "raw-output" 1 "Raw" "")) + (proc-def "file-pgm-export" 1 + "Exports files in the PGM file format" + "PGM exporting produces grayscale images without transparency." + "Erik Nygren" + "Erik Nygren" + "1996" + "Image PGM" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "pgm") + (mime-types "image/x-portable-graymap") + (handles-remote)) + "RGB, GRAY, INDEXED" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "raw" "_Data formatting" "Whether to export ASCII or raw output" 3 "raw-output" 2 "ascii-output" 0 "ASCII" "" "raw-output" 1 "Raw" "")) + (proc-def "file-ppm-export" 1 + "Exports files in the PPM file format" + "PPM export handles RGB images without transparency." + "Erik Nygren" + "Erik Nygren" + "1996" + "Image PPM" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "ppm") + (mime-types "image/x-portable-pixmap") + (handles-remote)) + "RGB, GRAY, INDEXED" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "raw" "_Data formatting" "Whether to export ASCII or raw output" 3 "raw-output" 2 "ascii-output" 0 "ASCII" "" "raw-output" 1 "Raw" "")) + (proc-def "file-pam-export" 1 + "Exports files in the PAM file format" + "PAM export handles RGB images with or without transparency." + "Jörg Walter" + "Jörg Walter" + "2009" + "PAM image" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "pam") + (mime-types "image/x-portable-arbitrarymap") + (handles-remote)) + "RGB*, GRAY*, INDEXED*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3)) + (proc-def "file-pfm-export" 1 + "Exports files in the PFM file format" + "PFM export handles all images without transparency." + "Mukund Sivaraman" + "Mukund Sivaraman" + "2015" + "Image PFM" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "pfm") + (mime-types "image/x-portable-floatmap") + (handles-remote)) + "RGB, GRAY, INDEXED" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-png/file-png" 1773502278 + (proc-def "file-png-load" 1 + "Loads files in PNG file format" + "This plug-in loads Portable Network Graphics (PNG) files." + "Michael Sweet , Daniel Skarda <0rfelyus@atrey.karlin.mff.cuni.cz>" + "Michael Sweet , Daniel Skarda <0rfelyus@atrey.karlin.mff.cuni.cz>, Nick Lamb " + "1.3.4 - 03 September 2002" + "Image PNG" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "png") + (magics "0,string,PNG\r\n\032\n") + (mime-types "image/png")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-apng-load" 1 + "Loads files in APNG file format" + "This plug-in loads Animated Portable Network Graphics (APNG) files." + "Alx Sa" + "Alx Sa" + "2025" + "APNG image" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "apng") + (mime-types "image/apng")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-png-export" 1 + "Exports files in PNG file format" + "This plug-in exports Portable Network Graphics (PNG) files." + "Michael Sweet , Daniel Skarda <0rfelyus@atrey.karlin.mff.cuni.cz>" + "Michael Sweet , Daniel Skarda <0rfelyus@atrey.karlin.mff.cuni.cz>, Nick Lamb " + "1.3.4 - 03 September 2002" + "Image PNG" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "png") + (mime-types "image/png")) + "*" + 2147483647 + 19 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "interlaced" "_Interlacing (Adam7)" "Use Adam7 interlacing" 3 0) + (proc-arg 1 "GParamInt" "gint" "compression" "Co_mpression level" "Deflate Compression factor (0..9)" 3 0 9 9) + (proc-arg 5 "GParamBoolean" "gboolean" "bkgd" "Enregistrer la couleur d’_arrière-plan" "Write bKGD chunk (PNG metadata)" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "offs" "Save layer o_ffset" "Write oFFs chunk (PNG metadata)" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "phys" "Save resol_ution" "Write pHYs chunk (PNG metadata)" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "time" "Enregistrer la da_te de création" "Write tIME chunk (PNG metadata)" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "save-transparent" "Save color _values from transparent pixels" "Preserve color of completely transparent pixels" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "optimize-palette" "_Optimize for smallest possible palette size" "When checked, save as 1, 2, 4, or 8-bit depending on number of colors used. When unchecked, always save as 8-bit" 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "format" "_Pixel format" "PNG export format" 3 "auto" 9 "auto" 0 "Automatique" "" "rgb8" 1 "RVB 8bpc" "" "gray8" 2 "GRIS 8bpc" "" "rgba8" 3 "RVBA 8bpc" "" "graya8" 4 "GRISA 8bpc" "" "rgb16" 5 "RVB 16bpc" "" "gray16" 6 "GRIS 16bpc" "" "rgba16" 7 "RVBA 16bpc" "" "graya16" 8 "GRISA 16bpc" "") + (proc-arg 5 "GParamBoolean" "gboolean" "include-exif" "Save _Exif" "Save Exif (Exchangeable image file format) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-iptc" "Save _IPTC" "Save IPTC (International Press Telecommunications Council) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-xmp" "Save _XMP" "Save XMP (Extensible Metadata Platform) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-color-profile" "Save color _profile" "Save the ICC color profile as metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-thumbnail" "Save _thumbnail" "Save a smaller representation of the image as metadata" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "include-comment" "Save c_omment" "Save a comment as metadata" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-pix/file-pix" 1773502278 + (proc-def "file-pix-load" 1 + "Loads files of the Alias|Wavefront or Esm Software Pix file format" + "Loads files of the Alias|Wavefront or Esm Software Pix file format" + "Michael Taylor" + "Michael Taylor" + "1997" + "Image Alias Pix" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "pix,matte,mask,alpha,als") + (magics "0,string,Esm Software PIX file") + (handles-remote)) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-pix-export" 1 + "Export file in the Alias|Wavefront pix/matte file format" + "Export file in the Alias|Wavefront pix/matte file format" + "Michael Taylor" + "Michael Taylor" + "1997" + "Image Alias Pix" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "pix,matte,mask,alpha,als") + (handles-remote)) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-pdf-load/file-pdf-load" 1773502278 + (proc-def "file-pdf-load-thumb" 1 + "Loads a preview from a PDF file." + "Loads a small preview of the first page of the PDF format file. Uses the embedded thumbnail if present." + "Nathan Summers" + "Nathan Summers" + "2005" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-pdf-load" 1 + "Load file in PDF format" + "Loads files in Adobe's Portable Document Format. PDF is designed to be easily processed by a variety of different platforms, and is a distant cousin of PostScript." + "Nathan Summers, Lionel N." + "Nathan Summers, Lionel N." + "2005, 2017" + "PDF (Portable Document Format)" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "pdf") + (magics "0, string,%PDF-") + (mime-types "application/pdf") + (handles-vector) + (thumb-loader "file-pdf-load-thumb")) + "" + 2147483647 + 11 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "width" "_Width (pixels)" "Width (in pixels) to load the image in. (0 for the corresponding width per native ratio)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "height" "_Height (pixels)" "Height (in pixels) to load the image in. (0 for the corresponding height per native ratio)" 3 0 524288 0) + (proc-arg 5 "GParamBoolean" "gboolean" "keep-ratio" "_Keep aspect ratio" "Force dimensions with aspect ratio" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "prefer-native-dimensions" "_Prefer native dimensions" "Load and use dimensions from source file" 3 0) + (proc-arg 7 "GParamString" "gchararray" "password" "PDF password" "The password to decrypt the encrypted PDF file" 3 "") + (proc-arg 5 "GParamBoolean" "gboolean" "reverse-order" "Load in re_verse order" "Load PDF pages in reverse order" 3 0) + (proc-arg 0 "GimpParamInt32Array" "GimpInt32Array" "pages" "Pages" "The pages to load in the expected order" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "antialias" "Utiliser le _lissage" "Render texts with anti-aliasing" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "white-background" "_Fill transparent areas with white" "Render all pages as opaque by filling the background in white" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-pdf-export/file-pdf-export" 1773502278 + (proc-def "file-pdf-export" 1 + "Save files in PDF format" + "Saves files in Adobe's Portable Document Format. PDF is designed to be easily processed by a variety of different platforms, and is a distant cousin of PostScript." + "Barak Itkin, Lionel N., Jehan" + "Copyright Barak Itkin, Lionel N., Jehan" + "August 2009, 2017" + "PDF (Portable Document Format)" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "pdf") + (mime-types "application/pdf")) + "*" + 2147483647 + 12 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "vectorize" "Convertir si possible les images _bitmaps en images vectorielles" "Convert bitmaps to vector graphics where possible" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "ignore-hidden" "O_mit hidden layers and layers with zero opacity" "Non-visible layers will not be exported" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "apply-masks" "_Apply layer masks" "Apply layer masks before saving (Keeping the mask will not change the output, only the PDF structure)" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "layers-as-pages" "La_yers as pages" "Layers as pages (bottom layers first)." 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "reverse-order" "Re_verse order" "Reverse the pages order (top layers first)." 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "root-layers-only" "Roo_t layers only" "Only the root layers are considered pages" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "convert-text-layers" "Convert te_xt layers to image" "Convert text layers to raster graphics" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "fill-background-color" "_Fill transparent areas with background color" "Fill transparent areas with background color if layer has an alpha channel" 3 1)) + (proc-def "file-pdf-export-multi" 1 + "Save files in PDF format" + "Saves files in Adobe's Portable Document Format. PDF is designed to be easily processed by a variety of different platforms, and is a distant cousin of PostScript." + "Barak Itkin" + "Copyright Barak Itkin" + "August 2009" + "_Créer un PDF multipage…" + 0 + (icon icon-name -1 "") + "*" + 2147483647 + 7 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "images" "Images" "Input image for each page (An image can appear more than once)" 3 "GimpImage") + (proc-arg 5 "GParamBoolean" "gboolean" "vectorize" "Convertir si possible les images _bitmaps en images vectorielles" "Convert bitmaps to vector graphics where possible" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "ignore-hidden" "O_mit hidden layers and layers with zero opacity" "Non-visible layers will not be exported" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "apply-masks" "_Apply layer masks" "Apply layer masks before saving (Keeping the mask will not change the output, only the PDF structure)" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "fill-background-color" "_Fill transparent areas with background color" "Fill transparent areas with background color if layer has an alpha channel" 3 1) + (proc-arg 7 "GParamString" "gchararray" "uri" "Save to" "The URI of the file to save to" 3 ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-pcx/file-pcx" 1773502278 + (proc-def "file-pcx-load" 1 + "Loads files in Zsoft PCX file format" + "FIXME: write help for pcx_load" + "Francisco Bustamante & Nick Lamb" + "Nick Lamb " + "January 1997" + "Image ZSoft PCX" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "pcx,pcc") + (magics "0&,byte,10,2&,byte,1,3&,byte,>0,3,byte,<9") + (mime-types "image/x-pcx")) + "" + 2147483647 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 4 "GimpParamChoice" "gchararray" "override-palette" "_Palette Options" "Whether to use the built-in palette or a black and white palette for 1 bit images." 3 "use-built-in-palette" 2 "use-built-in-palette" 0 "Use PCX image's built-in palette" "" "use-bw-palette" 1 "Use black and white palette" "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-dcx-load" 1 + "Loads files in Zsoft DCX file format" + "FIXME: write help for dcx_load" + "Francisco Bustamante, Nick Lamb, Alex S." + "Alex S." + "2023" + "ZSoft DCX image" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "dcx") + (magics "0,string,h:") + (mime-types "image/x-dcx")) + "" + 2147483647 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 4 "GimpParamChoice" "gchararray" "override-palette" "_Palette Options" "Whether to use the built-in palette or a black and white palette for 1 bit images." 3 "use-built-in-palette" 2 "use-built-in-palette" 0 "Use PCX image's built-in palette" "" "use-bw-palette" 1 "Use black and white palette" "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-pcx-export" 1 + "Exports files in ZSoft PCX file format" + "FIXME: write help for pcx_export" + "Francisco Bustamante & Nick Lamb" + "Nick Lamb " + "January 1997" + "Image ZSoft PCX" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "pcx,pcc") + (mime-types "image/x-pcx")) + "INDEXED, RGB, GRAY" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-pat/file-pat" 1773502278 + (proc-def "file-pat-export" 1 + "Exports GIMP pattern file (.PAT)" + "New GIMP patterns can be created by exporting them in the appropriate place with this plug-in." + "Tim Newsome" + "Tim Newsome" + "1997" + "Motif GIMP" + 0 + (icon icon-name -1 "gimp-pattern") + (save-proc + (extensions "pat") + (mime-types "image/x-gimp-pat") + (handles-remote)) + "*" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 7 "GParamString" "gchararray" "description" "_Description" "Short description of the pattern" 3 "GIMP Pattern"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-openraster/file-openraster.py" 1773502278 + (proc-def "file-openraster-load-thumb" 1 + "loads a thumbnail from an OpenRaster (.ora) file" + "loads a thumbnail from an OpenRaster (.ora) file" + "Jon Nordby" + "Jon Nordby" + "2009" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-openraster-load" 1 + "load an OpenRaster (.ora) file" + "load an OpenRaster (.ora) file" + "Jon Nordby" + "Jon Nordby" + "2009" + "OpenRaster" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "ora") + (mime-types "image/openraster") + (thumb-loader "file-openraster-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-openraster-export" 1 + "export an OpenRaster (.ora) file" + "export an OpenRaster (.ora) file" + "Jon Nordby" + "Jon Nordby" + "2009" + "OpenRaster" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "ora")) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-mng/file-mng" 1773502278 + (proc-def "file-mng-export" 1 + "Saves images in the MNG file format" + "This plug-in saves images in the Multiple-image Network Graphics (MNG) format which can be used as a replacement for animated GIFs, and more." + "Mukund Sivaraman " + "Mukund Sivaraman " + "November 19, 2002" + "Animation MNG" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "mng") + (mime-types "image/x-mng")) + "*" + 2147483647 + 16 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "interlaced" "_Entrelacement" "Use interlacing" 3 0) + (proc-arg 1 "GParamInt" "gint" "png-compression" "_PNG compression level" "Niveau de compression PNG, choisissez un haut degré de compression pour des fichiers de petite taille" 3 0 9 9) + (proc-arg 6 "GParamDouble" "gdouble" "jpeg-quality" "JPEG compression _quality" "JPEG quality factor" 3 0 1 0.75) + (proc-arg 6 "GParamDouble" "gdouble" "jpeg-smoothing" "_JPEG smoothing factor" "JPEG smoothing factor" 3 0 1 0) + (proc-arg 5 "GParamBoolean" "gboolean" "loop" "L_oop" "(ANIMATED MNG) Loop infinitely" 3 1) + (proc-arg 1 "GParamInt" "gint" "default-delay" "Default fra_me delay" "(ANIMATED MNG) Default delay between frames in milliseconds" 3 1 2147483647 100) + (proc-arg 4 "GimpParamChoice" "gchararray" "default-chunks" "Default chunks t_ype" "(ANIMATED MNG) Default chunks type" 3 "png-delta" 4 "png-delta" 0 "PNG + delta PNG" "" "jng-delta" 1 "JNG + delta PNG" "" "all-png" 2 "Tout PNG" "" "all-jng" 3 "Tout JNG" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "default-dispose" "De_fault frame disposal" "(ANIMATED MNG) Default dispose type" 3 "combine" 2 "combine" 0 "Combiner" "" "replace" 1 "Remplacer" "") + (proc-arg 5 "GParamBoolean" "gboolean" "bkgd" "Enregistrer la couleur d’_arrière-plan" "Write bKGd (background color) chunk" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "gama" "Enregistrer le _gamma" "Write gAMA (gamma) chunk" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "phys" "Sa_ve resolution" "Write pHYs (image resolution) chunk" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "time" "Enregistrer la da_te de création" "Write tIME (creation time) chunk" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-jpegxl/file-jpegxl" 1773502278 + (proc-def "file-jpegxl-load" 1 + "Charge les fichiers au format JPEG XL" + "Charge les fichiers au format JPEG XL" + "Daniel Novomesky" + "(C) 2021 Daniel Novomesky" + "2021" + "Image JPEG XL" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "jxl") + (magics "0,string,\n,0,string,\\000\\000\\000\fJXL\\040\\015\\012\\012") + (mime-types "image/jxl")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-jpegxl-export" 1 + "Enregistre les fichiers au format JPEG XL" + "Enregistre les fichiers au format JPEG XL" + "Daniel Novomesky" + "(C) 2021 Daniel Novomesky" + "2021" + "Image JPEG XL" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "jxl") + (mime-types "image/jxl")) + "RGB*, GRAY*" + 2147483647 + 11 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "lossless" "_Sans perte" "Utiliser une compression sans perte" 3 0) + (proc-arg 6 "GParamDouble" "gdouble" "compression" "Co_mpression/maxError" "Max. butteraugli distance, lower = higher quality. Range: 0 .. 15. 1.0 = visually lossless." 3 0.10000000000000001 15 1) + (proc-arg 1 "GParamInt" "gint" "save-bit-depth" "Profondeur de _bits" "Profondeur de bits de l’image exportée" 3 8 16 8) + (proc-arg 4 "GimpParamChoice" "gchararray" "speed" "Effort/_Vitesse" "Réglage d’effort du codeur" 3 "squirrel" 9 "lightning" 1 "lightning (fastest)" "" "thunder" 2 "thunder" "" "falcon" 3 "falcon (faster)" "" "cheetah" 4 "cheetah" "" "hare" 5 "hare" "" "wombat" 6 "wombat" "" "squirrel" 7 "squirrel" "" "kitten" 8 "kitten" "" "tortoise" 9 "tortoise (slower)" "") + (proc-arg 5 "GParamBoolean" "gboolean" "cmyk" "Export as CMY_K" "Create a CMYK JPEG XL image using the soft-proofing color profile" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-exif" "Save Exi_f" "Toggle saving Exif data" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-xmp" "Save _XMP" "Toggle saving XMP data" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-jpeg/file-jpeg" 1773502278 + (proc-def "file-jpeg-load-thumb" 1 + "Loads a thumbnail from a JPEG image" + "Loads a thumbnail from a JPEG image, if one exists" + "Mukund Sivaraman , Sven Neumann " + "Mukund Sivaraman , Sven Neumann " + "November 15, 2004" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-jpeg-load" 1 + "Loads files in the JPEG file format" + "Loads files in the JPEG file format" + "Spencer Kimball, Peter Mattis & others" + "Spencer Kimball & Peter Mattis" + "1995-2007" + "Image JPEG" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "jpg,jpeg,jpe") + (magics "0,string,") + (mime-types "image/jpeg") + (thumb-loader "file-jpeg-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-jpeg-export" 1 + "Exports files in the JPEG file format" + "Exports files in the lossy, widely supported JPEG format" + "Spencer Kimball, Peter Mattis & others" + "Spencer Kimball & Peter Mattis" + "1995-2007" + "Image JPEG" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "jpg,jpeg,jpe") + (mime-types "image/jpeg")) + "RGB*, GRAY*" + 2147483647 + 19 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 6 "GParamDouble" "gdouble" "quality" "_Qualité" "Quality of exported image" 3 0 1 0.90000000000000002) + (proc-arg 6 "GParamDouble" "gdouble" "smoothing" "S_moothing" "Smoothing factor for exported image" 3 0 1 0) + (proc-arg 5 "GParamBoolean" "gboolean" "optimize" "Optimi_ze" "Use optimized tables during Huffman coding" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "progressive" "_Progressive" "Create progressive JPEG images" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "cmyk" "Export as CM_YK" "Create a CMYK JPEG image using the soft-proofing color profile" 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "sub-sampling" "_Sous-échantillonnage" "Sub-sampling type" 3 "sub-sampling-1x1" 4 "sub-sampling-1x1" 2 "4 :4 :4 (meilleure qualité)" "" "sub-sampling-2x1" 1 "4:2:2 (chroma halved horizontally)" "" "sub-sampling-1x2" 3 "4:4:0 (chroma halved vertically)" "" "sub-sampling-2x2" 0 "4 :2 :0 (quart de chrominance)" "") + (proc-arg 5 "GParamBoolean" "gboolean" "baseline" "Baseline" "Force creation of a baseline JPEG (non-baseline JPEGs can't be read by all decoders)" 3 1) + (proc-arg 1 "GParamInt" "gint" "restart" "Inter_valle (lignes MCU) :" "Interval of restart markers (in MCU rows, 0 = no restart markers)" 3 0 64 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "dct" "Méthode DC_T" "DCT method to use" 3 "integer" 3 "fixed" 1 "Entier rapide" "" "integer" 0 "Entier" "" "float" 2 "Virgule flottante" "") + (proc-arg 5 "GParamBoolean" "gboolean" "include-exif" "Save _Exif" "Save Exif (Exchangeable image file format) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-iptc" "Save _IPTC" "Save IPTC (International Press Telecommunications Council) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-xmp" "Save _XMP" "Save XMP (Extensible Metadata Platform) metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-color-profile" "Save color _profile" "Save the ICC color profile as metadata" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "include-thumbnail" "Save _thumbnail" "Save a smaller representation of the image as metadata" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "include-comment" "Save c_omment" "Save a comment as metadata" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-ico/file-ico" 1773502278 + (proc-def "file-ico-load-thumb" 1 + "Loads a preview from a Windows ICO or CUR files" + "" + "Dom Lachowicz, Sven Neumann" + "Sven Neumann " + "2005" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-ani-load-thumb" 1 + "Loads a preview from a Windows ANI files" + "" + "Dom Lachowicz, Sven Neumann, James Huang, Alex S." + "Dom Lachowicz, Sven Neumann , James Huang, Alex S." + "2007-2022" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-ico-load" 1 + "Loads files of Windows ICO file format" + "Loads files of Windows ICO file format" + "Christian Kreibich " + "Christian Kreibich " + "2002" + "Icône Microsoft Windows" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (load-proc + (extensions "ico") + (mime-types "image/x-ico") + (thumb-loader "file-ico-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-cur-load" 1 + "Loads files of Windows CUR file format" + "Loads files of Windows CUR file format" + "Christian Kreibich , Nikc M." + "Christian Kreibich , Nikc M." + "2002-2022" + "Curseur Microsoft Windows" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (load-proc + (extensions "cur") + (mime-types "image/vnd.microsoft.icon") + (thumb-loader "file-ico-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-ani-load" 1 + "Loads files of Windows ANI file format" + "Loads files of Windows ANI file format" + "Christian Kreibich , James Huang, Alex S." + "Christian Kreibich , James Huang, Alex S." + "2007-2022" + "Microsoft Windows animated cursor" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (load-proc + (extensions "ani") + (magics "8,string,ACON") + (mime-types "application/x-navi-animation") + (thumb-loader "file-ani-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-ico-export" 1 + "Saves files in Windows ICO file format" + "Saves files in Windows ICO file format" + "Christian Kreibich " + "Christian Kreibich " + "2002" + "Icône Microsoft Windows" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (save-proc + (extensions "ico") + (mime-types "image/x-ico")) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3)) + (proc-def "file-cur-export" 1 + "Saves files in Windows CUR file format" + "Saves files in Windows CUR file format" + "Christian Kreibich , Nikc M." + "Christian Kreibich , Nikc M." + "2002-2022" + "Curseur Microsoft Windows" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (save-proc + (extensions "cur") + (mime-types "image/vnd.microsoft.icon")) + "*" + 2147483647 + 6 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 0 "GimpParamInt32Array" "GimpInt32Array" "hot-spot-x" "Hot spot X" "X coordinates of hot spot (one per layer)" 3) + (proc-arg 0 "GimpParamInt32Array" "GimpInt32Array" "hot-spot-y" "Hot spot Y" "Y coordinates of hot spot (one per layer)" 3)) + (proc-def "file-ani-export" 1 + "Saves files in Windows ANI file format" + "Saves files in Windows ANI file format" + "Christian Kreibich , James Huang, Alex S." + "Christian Kreibich , James Huang, Alex S." + "2007-2022" + "Microsoft Windows animated cursor" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (save-proc + (extensions "ani") + (mime-types "application/x-navi-animation")) + "*" + 2147483647 + 9 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 7 "GParamString" "gchararray" "cursor-name" "Cursor Name" "Cursor Name (Optional)" 3 "") + (proc-arg 7 "GParamString" "gchararray" "author-name" "Cursor Author" "Cursor Author (Optional)" 3 "") + (proc-arg 1 "GParamInt" "gint" "default-delay" "Default delay" "Default delay between frames in jiffies (1/60 of a second)" 3 0 2147483647 8) + (proc-arg 0 "GimpParamInt32Array" "GimpInt32Array" "hot-spot-x" "Hot spot X" "X coordinates of hot spot (one per layer)" 3) + (proc-arg 0 "GimpParamInt32Array" "GimpInt32Array" "hot-spot-y" "Hot spot Y" "Y coordinates of hot spot (one per layer)" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-icns/file-icns" 1773502278 + (proc-def "file-icns-load-thumb" 1 + "Loads a preview from an Apple Icon Image file" + "" + "Brion Vibber " + "Brion Vibber " + "2004" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-icns-load" 1 + "Loads files in Apple Icon Image format" + "Loads Apple Icon Image files." + "Brion Vibber " + "Brion Vibber " + "2004" + "Icns" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "icns") + (magics "0,string,icns") + (mime-types "image/x-icns") + (thumb-loader "file-icns-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-icns-export" 1 + "Saves files in Apple Icon Image file format" + "Saves files in Apple Icon Image file format" + "Brion Vibber " + "Brion Vibber " + "2004" + "Apple Icon Image" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (save-proc + (extensions "icns") + (mime-types "image/x-icns")) + "*" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "include-color-profile" "Save color _profile" "Save the ICC color profile as metadata" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-html-table/file-html-table" 1773502278 + (proc-def "file-html-table-export" 1 + "GIMP Table Magic" + "Allows you to draw an HTML table in GIMP. See help for more info." + "Daniel Dunbar" + "Daniel Dunbar" + "1998" + "Tableau HTML" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "html,htm") + (mime-types "text/html") + (handles-remote)) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-heif/file-heif" 1773502278 + (has-init)) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-header/file-header" 1773502278 + (proc-def "file-header-export" 1 + "Saves files as C unsigned character array" + "FIXME: write help" + "Spencer Kimball & Peter Mattis" + "Spencer Kimball & Peter Mattis" + "1997" + "En-tête de code source C" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "h") + (mime-types "image/x-chdr") + (handles-remote)) + "INDEXED, RGB" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-glob/file-glob" 1773502278 + (proc-def "file-glob" 1 + "Returns a list of matching filenames" + "This can be useful in scripts and other plug-ins (e.g., batch-conversion). See the glob(7) manpage for more info. Note however that this isn't a full-featured glob implementation. It only handles simple patterns like \"/home/foo/bar/*.jpg\"." + "Sven Neumann" + "Sven Neumann" + "2004" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 1 + (proc-arg 7 "GParamString" "gchararray" "pattern" "Pattern" "The glob pattern (in UTF-8 encoding)" 3 "") + (proc-arg 5 "GParamBoolean" "gboolean" "filename-encoding" "Filename encoding" "FALSE to return UTF-8 strings, TRUE to return strings in filename encoding" 3 0) + (proc-arg 0 "GParamBoxed" "GStrv" "files" "Files" "The list of matching filenames" 259))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-gih/file-gih" 1773502278 + (proc-def "file-gih-export" 1 + "Exports images in GIMP Brush Pipe format" + "This plug-in exports an image in the GIMP brush pipe format. For a colored brush pipe, RGBA layers are used, otherwise the layers should be grayscale masks. The image can be multi-layered, and additionally the layers can be divided into a rectangular array of brushes." + "Tor Lillqvist" + "Tor Lillqvist" + "1999" + "Brosse GIMP (animée)" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (save-proc + (extensions "gih") + (mime-types "image/x-gimp-gih") + (handles-remote)) + "RGB*, GRAY*" + 2147483647 + 11 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 1 "GParamInt" "gint" "spacing" "Spacing (_percent)" "Spacing of the brush" 3 1 1000 20) + (proc-arg 7 "GParamString" "gchararray" "description" "_Description" "Short description of the GIH brush pipe" 3 "GIMP Brush Pipe") + (proc-arg 1 "GParamInt" "gint" "cell-width" "Cell _width" "Width of the brush cells in pixels" 3 1 524288 1) + (proc-arg 1 "GParamInt" "gint" "cell-height" "Cell _height" "Height of the brush cells in pixels" 3 1 524288 1) + (proc-arg 1 "GParamInt" "gint" "num-cells" "_Number of cells" "Number of cells to cut up" 3 1 1000 1) + (proc-arg 0 "GParamBoxed" "GBytes" "ranks" "_Rank" "Ranks of the dimensions" 3) + (proc-arg 0 "GParamBoxed" "GStrv" "selection-modes" "Selection modes" "Selection modes" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-gif-load/file-gif-load" 1773502278 + (proc-def "file-gif-load-thumb" 1 + "Loads only the first frame of a GIF image, to be used as a thumbnail" + "" + "Sven Neumann" + "Sven Neumann" + "2006" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-gif-load" 1 + "Loads files of Compuserve GIF file format" + "" + "Spencer Kimball, Peter Mattis, Adam Moss, David Koblas" + "Spencer Kimball, Peter Mattis, Adam Moss, David Koblas" + "1995-2006" + "Image GIF" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "gif") + (magics "0,string,GIF8") + (mime-types "image/gif") + (thumb-loader "file-gif-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-jif-load-thumb" 1 + "Loads only the first frame of a Jeff's Image Format image, to be used as a thumbnail" + "" + "Alx Sa" + "Alx Sa" + "2025" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 2 5 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load the thumbnail from" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "thumb-size" "Thumb Size" "Preferred thumbnail size" 3 16 2014 256) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Thumbnail image" 3 1) + (proc-arg 1 "GParamInt" "gint" "image-width" "Image width" "Width of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "image-height" "Image height" "Height of the full-sized image (0 for unknown)" 3 0 524288 0) + (proc-arg 3 "GParamEnum" "GimpImageType" "image-type" "Image type" "Type of the image" 3 0) + (proc-arg 1 "GParamInt" "gint" "num-layers" "Num layers" "Number of layers in the image" 3 1 2147483647 1)) + (proc-def "file-jif-load" 1 + "Loads files of Jeff's Image Format file format" + "" + "Alx Sa" + "Alx Sa" + "2025" + "Jeff's Image Format" + 0 + (icon icon-name -1 "") + (load-proc + (magics "0,string,JIF99a") + (thumb-loader "file-jif-load-thumb")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-gif-export/file-gif-export" 1773502278 + (proc-def "file-gif-export" 1 + "exports files in GIF file format" + "Export a file in GIF format, with possible animation, transparency, and comment. To export an animation, operate on a multi-layer file and give the 'as-animation' parameter as TRUE. The plug-in will interpret <50% alpha as transparent. When run non-interactively, the value for the comment is taken from the 'gimp-comment' parasite." + "Spencer Kimball, Peter Mattis, Adam Moss, David Koblas" + "Spencer Kimball, Peter Mattis, Adam Moss, David Koblas" + "1995-1997" + "Image GIF" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "gif") + (mime-types "image/gif") + (handles-remote)) + "INDEXED*, GRAY*" + 2147483647 + 12 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "interlace" "_Entrelacement" "Try to export as interlaced" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "loop" "Loop _Forever" "(animated gif) Loop infinitely" 3 1) + (proc-arg 1 "GParamInt" "gint" "number-of-repeats" "_Number of repeats" "(animated gif) Number of repeats (Ignored if 'loop' is TRUE)" 3 0 32766 0) + (proc-arg 1 "GParamInt" "gint" "default-delay" "_Delay between frames when unspecified" "(animated gif) Default delay between frames in milliseconds" 3 0 2147483647 100) + (proc-arg 4 "GimpParamChoice" "gchararray" "default-dispose" "Frame disposal _when unspecified" "(animated gif) Default disposal type" 3 "unspecified" 3 "unspecified" 0 "Peu importe" "" "combine" 1 "Calques cumulatifs (combiner)" "" "replace" 2 "Une image par calque (remplacer)" "") + (proc-arg 5 "GParamBoolean" "gboolean" "as-animation" "_As animation" "Export GIF as animation?" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "force-delay" "_Utiliser le délai saisi ci-dessus pour toutes les images" "(animated gif) Use specified delay for all frames" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "force-dispose" "Use dis_posal entered above for all frames" "(animated gif) Use specified disposal for all frames" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-gegl/file-gegl" 1773502278 + (proc-def "file-rgbe-load" 1 + "Load files in the RGBE file format" + "This procedure loads images in the RGBE format, using gegl:rgbe-load" + "" + "" + "" + "Radiance RVBE" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "hdr") + (magics "0,string,#?") + (mime-types "image/vnd.radiance")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-rgbe-export" 1 + "Saves files in the RGBE file format" + "This procedure exports images in the RGBE format, using gegl:rgbe-save" + "" + "" + "" + "Radiance RVBE" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "hdr") + (mime-types "image/vnd.radiance")) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3)) + (proc-def "file-exr-export" 1 + "Saves files in the OpenEXR file format" + "This procedure saves images in the OpenEXR format, using gegl:exr-save" + "" + "" + "" + "Image OpenEXR" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "exr") + (mime-types "image/x-exr")) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-gbr/file-gbr" 1773502278 + (proc-def "file-gbr-export" 1 + "Exports files in the GIMP brush file format" + "Exports files in the GIMP brush file format" + "Tim Newsome, Jens Lautenbacher, Sven Neumann" + "Tim Newsome, Jens Lautenbacher, Sven Neumann" + "1997-2000" + "Brosse GIMP" + 0 + (icon icon-name -1 "gimp-tool-paintbrush") + (save-proc + (extensions "gbr") + (mime-types "image/x-gimp-gbr") + (handles-remote)) + "*" + 2147483647 + 6 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 1 "GParamInt" "gint" "spacing" "Sp_acing" "Spacing of the brush" 3 1 1000 10) + (proc-arg 7 "GParamString" "gchararray" "description" "_Description" "Short description of the brush" 3 "GIMP Brush"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-fli/file-fli" 1773502278 + (proc-def "file-fli-load" 1 + "Load FLI-movies" + "This is an experimental plug-in to handle FLI movies" + "Jens Ch. Restemeier" + "Jens Ch. Restemeier" + "1997" + "Animation Autodesk FLIC" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "fli,flc") + (mime-types "image/x-flic")) + "" + 2147483647 + 4 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "from-frame" "_From frame" "Load beginning from this frame" 3 -1 2147483647 -1) + (proc-arg 1 "GParamInt" "gint" "to-frame" "_To frame" "End loading with this frame" 3 -1 2147483647 -1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-fli-export" 1 + "Export FLI-movies" + "This is an experimental plug-in to handle FLI movies" + "Jens Ch. Restemeier" + "Jens Ch. Restemeier" + "1997" + "Animation Autodesk FLIC" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "fli,flc") + (mime-types "image/x-flic")) + "INDEXED, GRAY" + 2147483647 + 6 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 1 "GParamInt" "gint" "from-frame" "_From frame" "Export beginning from this frame" 3 -1 2147483647 -1) + (proc-arg 1 "GParamInt" "gint" "to-frame" "_To frame" "End exporting with this frame (or -1 for all frames)" 3 -1 2147483647 -1)) + (proc-def "file-fli-info" 1 + "Get information about a Fli movie" + "This is an experimental plug-in to handle FLI movies" + "Jens Ch. Restemeier" + "Jens Ch. Restemeier" + "1997" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 1 3 + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The local file to get info about" 3 0 0 "") + (proc-arg 1 "GParamInt" "gint" "width" "Width" "Width of one frame" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "height" "Height" "Height of one frame" 3 0 524288 0) + (proc-arg 1 "GParamInt" "gint" "frames" "Frames" "Number of frames" 3 0 2147483647 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-faxg3/file-faxg3" 1773502278 + (proc-def "file-faxg3-load" 1 + "Loads g3 fax files" + "This plug-in loads Fax G3 Image files." + "Jochen Friedrich" + "Jochen Friedrich, Gert Doering, Spencer Kimball & Peter Mattis" + "" + "Image fax G3" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "g3") + (magics "4,string,Research") + (mime-types "image/g3-fax")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-farbfeld/file-farbfeld" 1773502278 + (proc-def "file-farbfeld-load" 1 + "Load file in the Farbfeld file format" + "Load file in the Farbfeld file format" + "Alex S." + "Alex S." + "2023" + "Farbfeld" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "ff") + (magics "0,string,farbfeld")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-farbfeld-export" 1 + "Export image in the Farbfeld file format" + "Export image in the Farbfeld file format" + "Alex S." + "Alex S." + "2023" + "Farbfeld" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "ff")) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-exr/file-exr" 1773502278 + (proc-def "file-exr-load" 1 + "Loads files in the OpenEXR file format" + "This plug-in loads OpenEXR files. " + "Dominik Ernst , Mukund Sivaraman " + "Dominik Ernst , Mukund Sivaraman " + "" + "Image OpenEXR" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "exr") + (magics "0,long,0x762f3101") + (mime-types "image/x-exr")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-dicom/file-dicom" 1773502278 + (proc-def "file-dicom-load" 1 + "Loads files of the dicom file format" + "Load a file in the DICOM standard format. The standard is defined at http://medical.nema.org/. The plug-in currently only supports reading images with uncompressed pixel sections." + "Dov Grobgeld" + "Dov Grobgeld " + "2003" + "Image DICOM" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "dcm,dicom") + (magics "128,string,DICM") + (mime-types "image/x-dcm")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-dicom-export" 1 + "Save file in the DICOM file format" + "Save an image in the medical standard DICOM image formats. The standard is defined at http://medical.nema.org/. The file format is defined in section 10 of the standard. The files are saved uncompressed and the compulsory DICOM tags are filled with default dummy values." + "Dov Grobgeld" + "Dov Grobgeld " + "2003" + "Image DICOM (Digital Imaging and Communications in Medicine)" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "dcm,dicom") + (mime-types "image/x-dcm")) + "RGB, GRAY" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-desktop-link/file-desktop-link" 1773502278 + (proc-def "file-desktop-link-load" 1 + "Follows a link to an image in a .desktop file" + "Opens a .desktop file and if it is a link, it asks GIMP to open the file the link points to." + "Sven Neumann" + "Sven Neumann" + "2006" + "Raccourci de bureau" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "desktop")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-dds/file-dds" 1773502278 + (proc-def "file-dds-load" 1 + "Loads files in DDS image format" + "Loads files in DDS image format" + "Shawn Kirst" + "Shawn Kirst" + "2008" + "Image DDS" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "dds") + (magics "0,string,DDS") + (mime-types "image/dds")) + "" + 2147483647 + 4 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 5 "GParamBoolean" "gboolean" "load-mipmaps" "Load _mipmaps" "Load mipmaps if present" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "flip-image" "Flip image _vertically" "Flip the image vertically on import" 3 0) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-dds-export" 1 + "Saves files in DDS image format" + "Saves files in DDS image format" + "Shawn Kirst" + "Shawn Kirst" + "2008" + "Image DDS" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "dds") + (mime-types "image/dds")) + "INDEXED, GRAY, RGB" + 2147483647 + 19 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "compression-format" "Compressio_n" "Compression format" 3 "none" 12 "none" 0 "Aucun" "" "bc1" 1 "BC1 / DXT1" "" "bc2" 2 "BC2 / DXT3" "" "bc3, " 3 "BC3 / DXT5" "" "bc3n" 4 "BC3nm / DXT5nm" "" "bc4" 5 "BC4 / ATI1 (3Dc+)" "" "bc5" 6 "BC5 / ATI2 (3Dc)" "" "bc7" 8 "BC7" "" "rxgb" 9 "RXGB (DXT5)" "" "aexp" 10 "Alpha Exponent (DXT5)" "" "ycocg" 11 "YCoCg (DXT5)" "" "ycocgs" 12 "YCoCg scaled (DXT5)" "") + (proc-arg 5 "GParamBoolean" "gboolean" "perceptual-metric" "Use percept_ual error metric" "Use a perceptual error metric during compression" 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "format" "_Format" "Pixel format" 3 "default" 15 "default" 0 "Par défaut" "" "rgb8" 1 "RGB8" "" "rgba8" 2 "RGBA8" "" "bgr8" 3 "BGR8" "" "abgr8, " 4 "ABGR8" "" "r5g6b5" 5 "R5G6B5" "" "rgba4" 6 "RGBA4" "" "rgb5a1" 7 "RGB5A1" "" "rgb10a2" 8 "RGB10A2" "" "r3g3b2" 9 "R3G3B2" "" "a8" 10 "A8" "" "l8" 11 "L8" "" "l8a8" 12 "L8A8" "" "aexp" 13 "AEXP" "" "ycocg" 14 "YCOCG" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "save-type" "Sav_e type" "How to save the image" 3 "layer" 5 "layer" 0 "Selected layer" "" "canvas" 4 "All visible layers" "" "cube" 1 "As cube map" "" "volume" 2 "As volume map" "" "array" 3 "As texture array" "") + (proc-arg 5 "GParamBoolean" "gboolean" "flip-image" "Flip image _vertically on export" "Flip the image vertically on export" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "transparent-color" "Set _transparent color" "Make an indexed color transparent" 3 0) + (proc-arg 1 "GParamInt" "gint" "transparent-index" "Transparent inde_x" "Index of transparent color or -1 to disable (for indexed images only)." 3 0 255 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "mipmaps" "_Mipmaps" "How to handle mipmaps" 3 "none" 3 "none" 0 "No mipmaps" "" "generate" 1 "Generate mipmaps" "" "existing" 2 "Use existing mipmaps" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "mipmap-filter" "F_ilter" "Filtering to use when generating mipmaps" 3 "default" 10 "default" 0 "Par défaut" "" "nearest" 1 "Nearest" "" "box" 2 "Parallélépipède rectangle (boîte)" "" "triangle" 3 "Triangle" "" "quadratic" 4 "Quadratic" "" "bspline" 5 "B-Spline" "" "mitchell" 6 "Mitchell" "" "catrom" 7 "Catmull-Rom" "" "lanczos" 8 "Lanczos" "" "kaiser" 9 "Kaiser" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "mipmap-wrap" "_Wrap mode" "Wrap mode to use when generating mipmaps" 3 "default" 4 "default" 0 "Par défaut" "" "mirror" 1 "Mirror" "" "repeat" 2 "Repeat" "" "clamp" 3 "Clamp" "") + (proc-arg 5 "GParamBoolean" "gboolean" "gamma-correct" "Appliquer une correction _gamma" "Use gamma correct mipmap filtering" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "srgb" "Use sRG_B colorspace" "Use sRGB colorspace for gamma correction" 3 0) + (proc-arg 6 "GParamDouble" "gdouble" "gamma" "_Gamma" "Gamma value to use for gamma correction (e.g. 2.2)" 3 0 10 0) + (proc-arg 5 "GParamBoolean" "gboolean" "preserve-alpha-coverage" "Preserve al_pha test coverage" "Preserve alpha test coverage for alpha channel maps" 3 0) + (proc-arg 6 "GParamDouble" "gdouble" "alpha-test-threshold" "Alp_ha test threshold" "Alpha test threshold value for which alpha test coverage should be preserved" 3 0 1 0.5))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-csource/file-csource" 1773502278 + (proc-def "file-csource-export" 1 + "Dump image data in RGB(A) format for C source" + "Dump image data in RGB(A) format for C source" + "Tim Janik" + "Tim Janik" + "1999" + "Code source C" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "c") + (mime-types "image/x-csrc") + (handles-remote)) + "*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-compressor/file-compressor" 1773502278 + (proc-def "file-gz-load" 1 + "Loads files compressed with gzip" + "This procedure loads files in the gzip compressed format." + "Daniel Risacher" + "Daniel Risacher, Spencer Kimball and Peter Mattis" + "1995-1997" + "archive gzip" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "xcf.gz,xcfgz") + (meta-extensions "gz") + (magics "0,string,\037") + (mime-types "application/x-gzip")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-gz-export" 1 + "Exports files compressed with gzip" + "This procedure exports files in the gzip compressed format." + "Daniel Risacher" + "Daniel Risacher, Spencer Kimball and Peter Mattis" + "1995-1997" + "archive gzip" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "xcf.gz,xcfgz") + (meta-extensions "gz") + (mime-types "application/x-gzip")) + "RGB*, GRAY*, INDEXED*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3)) + (proc-def "file-bz2-load" 1 + "Loads files compressed with bzip2" + "This procedure loads files in the bzip2 compressed format." + "Daniel Risacher" + "Daniel Risacher, Spencer Kimball and Peter Mattis" + "1995-1997" + "archive bzip" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "xcf.bz2,xcfbz2") + (meta-extensions "bz2") + (magics "0,string,BZh") + (mime-types "application/x-bzip")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-bz2-export" 1 + "Exports files compressed with bzip2" + "This procedure exports files in the bzip2 compressed format." + "Daniel Risacher" + "Daniel Risacher, Spencer Kimball and Peter Mattis" + "1995-1997" + "archive bzip" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "xcf.bz2,xcfbz2") + (meta-extensions "bz2") + (mime-types "application/x-bzip")) + "RGB*, GRAY*, INDEXED*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3)) + (proc-def "file-xz-load" 1 + "Loads files compressed with xz" + "This procedure loads files in the xz compressed format." + "Daniel Risacher" + "Daniel Risacher, Spencer Kimball and Peter Mattis" + "1995-1997" + "archive xz" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "xcf.xz,xcfxz") + (meta-extensions "xz") + (magics "0,string,7zXZ") + (mime-types "application/x-xz")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-xz-export" 1 + "Exports files compressed with xz" + "This procedure exports files in the xz compressed format." + "Daniel Risacher" + "Daniel Risacher, Spencer Kimball and Peter Mattis" + "1995-1997" + "archive xz" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "xcf.xz,xcfxz") + (meta-extensions "xz") + (mime-types "application/x-xz")) + "RGB*, GRAY*, INDEXED*" + 2147483647 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3)) + (proc-def "file-zip-load" 1 + "Loads files compressed with zip" + "This procedure loads files in the zip compressed format." + "Daniel Risacher" + "Daniel Risacher, Spencer Kimball and Peter Mattis" + "1995-1997" + "zip archive" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "hgt.zip") + (meta-extensions "zip") + (magics "0,string,PK\003\004") + (mime-types "application/zip")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-cel/file-cel" 1773502278 + (proc-def "file-cel-load" 1 + "Loads files in KISS CEL file format" + "This plug-in loads individual KISS cell files." + "Nick Lamb" + "Nick Lamb " + "May 1998" + "KISS CEL" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "cel") + (magics "0,string,KiSS\\040")) + "" + 2147483647 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 13 "GimpParamFile" "GFile" "palette-file" "_Palette file" "KCF file to load palette from" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-cel-export" 1 + "Exports files in KISS CEL file format" + "This plug-in exports individual KISS cell files." + "Nick Lamb" + "Nick Lamb " + "May 1998" + "KISS CEL" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "cel") + (handles-remote)) + "RGB*, INDEXED*" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 13 "GimpParamFile" "GFile" "palette-file" "_Palette file" "File to save palette to" 3 1 0 ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-bmp/file-bmp" 1773502278 + (proc-def "file-bmp-load" 1 + "Loads files of Windows BMP file format" + "Loads files of Windows BMP file format" + "Alexander Schulz" + "Alexander Schulz" + "1997" + "Image Windows BMP" + 0 + (icon icon-name -1 "") + (load-proc + (extensions "bmp") + (magics "0,string,BM") + (mime-types "image/bmp")) + "" + 2147483647 + 2 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to load" 3 0 0 "") + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "Output image" 3 1)) + (proc-def "file-bmp-export" 1 + "Saves files in Windows BMP file format" + "Saves files in Windows BMP file format" + "Alexander Schulz" + "Alexander Schulz" + "1997" + "Image Windows BMP" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "bmp") + (mime-types "image/bmp")) + "INDEXED, GRAY, RGB*" + 2147483647 + 7 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "use-rle" "Ru_n-Length Encoded" "Use run-length-encoding compression (only valid for 4 and 8-bit indexed images)" 3 0) + (proc-arg 5 "GParamBoolean" "gboolean" "write-color-space" "_Inscrire l’information d’espace couleur" "Whether or not to write BITMAPV5HEADER color space data" 3 1) + (proc-arg 4 "GimpParamChoice" "gchararray" "rgb-format" "R_GB format" "Export format for RGB images" 3 "rgb-888" 6 "rgb-565" 0 "16 bits (R5 V6 B5)" "" "rgba-5551" 1 "16 bits (A1 R5 V5 B5)" "" "rgb-555" 2 "16 bits (X1 R5 V5 B5)" "" "rgb-888" 3 "24 bits (R8 V8 B8)" "" "rgba-8888" 4 "32 bits (A8 R8 V8 B8)" "" "rgbx-8888" 5 "32 bits (X8 R8 V8 B8)" ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/file-aa/file-aa" 1773502278 + (proc-def "file-aa-export" 1 + "Saves grayscale image in various text formats" + "This plug-in uses aalib to save grayscale image as ascii art into a variety of text formats" + "Tim Newsome " + "Tim Newsome " + "1997" + "Art ASCII" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "txt,ansi,text") + (mime-types "text/plain")) + "*" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 1 "GParamInt" "gint" "file-type" "_Format" "File type to use" 3 0 11 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/destripe/destripe" 1773502278 + (proc-def "plug-in-destripe" 1 + "Supprime les traînées verticales sur l’image" + "This plug-in tries to remove vertical stripes from an image." + "Marc Lehmann " + "Marc Lehmann " + "0.2" + "Anti-_traînées…" + 1 + (menu-path "/Colors/Tone Mapping") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "avg-width" "_Largeur" "Averaging filter width" 3 2 100 36) + (proc-arg 5 "GParamBoolean" "gboolean" "create-histogram" "Créer un _histogramme" "Output a histogram" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/despeckle/despeckle" 1773502278 + (proc-def "plug-in-despeckle" 1 + "Supprime les bruits parasites de l’image" + "This plug-in selectively performs a median or adaptive box filter on an image." + "Michael Sweet " + "Copyright 1997-1998 by Michael Sweet" + "May 2010" + "Anti-_parasites…" + 1 + (menu-path "/Filters/Enhance") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 7 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "radius" "R_adius" "Filter box radius" 3 1 30 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "type" "_Filter type" "Filter type" 3 "adaptive" 4 "median" 0 "Médian" "" "adaptive" 1 "Adaptatif" "" "recursive-median" 2 "Recursive-Median" "" "recursive-adaptive" 3 "Recursive-Adaptive" "") + (proc-arg 1 "GParamInt" "gint" "black" "_Black level" "Black level" 3 -1 255 7) + (proc-arg 1 "GParamInt" "gint" "white" "_White level" "White level" 3 0 256 248))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/depth-merge/depth-merge" 1773502278 + (proc-def "plug-in-depth-merge" 1 + "Combine deux images en utilisant les cartes de profondeur (z-buffers)" + "Taking as input two full-color, full-alpha images and two corresponding grayscale depth maps, this plug-in combines the images based on which is closer (has a lower depth map value) at each point." + "Sean Cier" + "Sean Cier" + "August 1998" + "_Superposer selon profondeur…" + 1 + (menu-path "/Filters/Combine") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 11 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "source-1" "Source _1" "Source 1" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "depth-map-1" "_Depth map 1" "Depth map 1" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "source-2" "Source _2" "Source 2" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "depth-map-2" "Depth _map 2" "Depth map 2" 3 1) + (proc-arg 6 "GParamDouble" "gdouble" "overlap" "O_verlap" "Overlap" 3 0 2 0) + (proc-arg 6 "GParamDouble" "gdouble" "offset" "O_ffset" "Depth relative offset" 3 -1 1 0) + (proc-arg 6 "GParamDouble" "gdouble" "scale-1" "Sc_ale 1" "Depth relative scale 1" 3 -1 1 1) + (proc-arg 6 "GParamDouble" "gdouble" "scale-2" "Scal_e 2" "Depth relative scale 2" 3 -1 1 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/decompose/decompose" 1773502278 + (proc-def "plug-in-decompose" 1 + "Décompose une image en composants séparés de canaux de couleur" + "This function creates new gray images with different channel information in each of them" + "Peter Kirchgessner" + "Peter Kirchgessner, Clarence Risher" + "1997" + "_Décomposer…" + 1 + (menu-path "/Colors/Components") + (icon icon-name -1 "") + "RGB*" + 1 + 6 4 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 4 "GimpParamChoice" "gchararray" "decompose-type" "Color _model" "The model to decompose to" 3 "rgb" 12 "rgb" 0 "RVB" "" "rgba" 1 "RVBA" "" "alpha" 2 "Alpha" "" "hsv" 3 "TSV" "" "hsl" 4 "TSL" "" "cmyk" 5 "CMJN" "" "lab" 6 "LAB" "" "lch" 7 "LCH" "" "ycbcr470" 8 "YCbCr ITU R470" "" "ycbcr709" 9 "YCbCr ITU R709" "" "ycbcr470f" 10 "YCbCr ITU R470 256" "" "ycbcr709f" 11 "YCbCr ITU R709 256" "") + (proc-arg 5 "GParamBoolean" "gboolean" "layers-mode" "Décomposer en ca_lques" "Create channels as layers in a single image" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "use-registration" "_Arrière-plan comme couleur de recalage" "When enabled, pixels in the foreground color will appear black in all output images. This can be used for things like crop marks that have to show up on all channels." 3 0) + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image-1" "New image 1" "Output gray image 1" 3 0) + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image-2" "New image 2" "Output gray image 2 (N/A for single channel extract)" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image-3" "New image 3" "Output gray image 3 (N/A for single channel extract)" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image-4" "New image 4" "Output gray image 4 (N/A for single channel extract)" 3 1))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/curve-bend/curve-bend" 1773502278 + (proc-def "plug-in-curve-bend" 1 + "Déforme l’image en utilisant deux courbes de contrôle" + "This plug-in bends the active layer. If there is a current selection it is copied to floating selection and the curve_bend distortion is done on the floating selection. If work_on_copy parameter is TRUE, the curve_bend distortion is done on a copy of the active layer (or floating selection). The upper and lower edges are bent in shape of 2 spline curves. Both (upper and lower) curves are determined by up to 17 points or by 256 Y-Values if curve_type == 1 (freehand mode). If rotation is not 0, the layer is rotated before and rotated back after the bend operation. This enables bending in other directions than vertical. Bending usually changes the size of the handled layer. This plug-in sets the offsets of the handled layer to keep its center at the same position." + "Wolfgang Hofer (hof@hotbot.com)" + "Wolfgang Hofer" + "v1.3.18 (2003/08/26)" + "_Courber…" + 1 + (menu-path "/Filters/Distorts") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 15 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 6 "GParamDouble" "gdouble" "rotation" "Rotat_e" "Direction {angle 0 to 360 degree } of the bend effect" 3 0 360 0) + (proc-arg 5 "GParamBoolean" "gboolean" "smoothing" "_Adoucissement" "Smoothing" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "antialias" "_Lissage" "Antialias" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "work-on-copy" "Travailler sur une co_pie" "Copy the drawable and bend the copy" 3 0) + (proc-arg 4 "GimpParamChoice" "gchararray" "curve-type" "Cur_ve Type" "Whether to use Smooth (17 points) or Freehand (256 points) to draw the curve" 3 "smooth" 2 "smooth" 0 "Smooth" "" "freehand" 1 "Freehand" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "curve-border" "Curve for _Border" "Choose the active border line to edit" 3 "upper" 2 "upper" 0 "Upper" "" "lower" 1 "Lower" "") + (proc-arg 0 "GimpParamDoubleArray" "GimpDoubleArray" "upper-point-x" "Upper point X" "Array of 17 x point coords { 0.0 <= x <= 1.0 or -1 for unused point }" 3) + (proc-arg 0 "GimpParamDoubleArray" "GimpDoubleArray" "upper-point-y" "Upper point Y" "Array of 17 y point coords { 0.0 <= y <= 1.0 or -1 for unused point }" 3) + (proc-arg 0 "GimpParamDoubleArray" "GimpDoubleArray" "lower-point-x" "Lower point X" "Array of 17 x point coords { 0.0 <= x <= 1.0 or -1 for unused point }" 3) + (proc-arg 0 "GimpParamDoubleArray" "GimpDoubleArray" "lower-point-y" "Lower point Y" "Array of 17 y point coords { 0.0 <= y <= 1.0 or -1 for unused point }" 3) + (proc-arg 0 "GParamBoxed" "GBytes" "upper-val-y" "Upper val Y" "Array of 256 y freehand coords { 0 <= y <= 255 }" 3) + (proc-arg 0 "GParamBoxed" "GBytes" "lower-val-y" "Lower val Y" "Array of 256 y freehand coords { 0 <= y <= 255 }" 3) + (proc-arg 9 "GimpParamLayer" "GimpLayer" "bent-layer" "Bent layer" "The transformed layer" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/crop-zealous/crop-zealous" 1773502278 + (proc-def "plug-in-zealouscrop" 1 + "Découpage automatique des espaces inutilisés sur les bords et au milieu" + "" + "Adam D. Moss" + "Adam D. Moss" + "1997" + "Découpage _futé" + 1 + (menu-path "/Image/[Crop]") + (icon icon-name -1 "") + "*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/contrast-retinex/contrast-retinex" 1773502278 + (proc-def "plug-in-retinex" 1 + "Améliore le contraste en utilisant la méthode Retinex" + "The Retinex Image Enhancement Algorithm is an automatic image enhancement method that enhances a digital image in terms of dynamic range compression, color independence from the spectral distribution of the scene illuminant, and color/lightness rendition." + "Fabien Pelisson" + "Fabien Pelisson" + "2003" + "_Retinex…" + 1 + (menu-path "/Colors/Tone Mapping") + (icon icon-name -1 "") + "RGB*" + 1 + 7 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "scale" "Scal_e" "Biggest scale value" 3 16 250 240) + (proc-arg 1 "GParamInt" "gint" "nscales" "Scale _division" "Number of scales" 3 0 8 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "scales-mode" "Le_vel" "Retinex distribution through scales" 3 "uniform" 3 "uniform" 0 "Identique" "" "low" 1 "Bas" "" "high" 2 "Haut" "") + (proc-arg 6 "GParamDouble" "gdouble" "cvar" "Dy_namic" "Variance value" 3 0 4 1.2))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/compose/compose" 1773502278 + (proc-def "plug-in-compose" 1 + "Crée une image en utilisant comme canaux de couleur de multiples images grises" + "This function creates a new image from multiple gray images" + "Peter Kirchgessner" + "Peter Kirchgessner (peter@kirchgessner.net)" + "1997" + "C_omposer…" + 1 + (menu-path "/Colors/Components") + (icon icon-name -1 "") + "GRAY*" + 13 + 7 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 9 "GimpParamImage" "GimpImage" "image-2" "Image 2" "Second input image" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image-3" "Image 3" "Third input image" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image-4" "Image 4" "Fourth input image" 3 1) + (proc-arg 4 "GimpParamChoice" "gchararray" "compose-type" "Color _model" "What to compose: \"RGB\", \"RGBA\", \"HSV\", \"HSL\", \"CMYK\", \"LAB\", \"LCH\", \"YCbCr_ITU_R470\", \"YCbCr_ITU_R709\", \"YCbCr_ITU_R470_256\", \"YCbCr_ITU_R709_256\"" 3 "rgb" 11 "rgb" 0 "RVB" "" "rgba" 1 "RVBA" "" "hsv" 2 "TSV" "" "hsl" 3 "TSL" "" "cmyk" 4 "CMJN" "" "lab" 5 "LAB" "" "lch" 6 "LCH" "" "ycbcr470" 7 "YCbCr ITU R470" "" "ycbcr709" 8 "YCbCr ITU R709" "" "ycbcr470f" 9 "YCbCr ITU R470 256" "" "ycbcr709f" 10 "YCbCr ITU R709 256" "") + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image" "New image" "Output image" 3 0)) + (proc-def "plug-in-drawable-compose" 1 + "Compose an image from multiple drawables of gray images" + "This function creates a new image from multiple drawables of gray images" + "Peter Kirchgessner" + "Peter Kirchgessner (peter@kirchgessner.net)" + "1998" + "" + 0 + (icon icon-name -1 "") + "GRAY*" + 1 + 7 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "drawable-2" "Drawable 2" "Second input drawable" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "drawable-3" "Drawable 3" "Third input drawable" 3 1) + (proc-arg 9 "GimpParamDrawable" "GimpDrawable" "drawable-4" "Drawable 4" "Fourth input drawable" 3 1) + (proc-arg 4 "GimpParamChoice" "gchararray" "compose-type" "Color _model" "What to compose: \"RGB\", \"RGBA\", \"HSV\", \"HSL\", \"CMYK\", \"LAB\", \"LCH\", \"YCbCr_ITU_R470\", \"YCbCr_ITU_R709\", \"YCbCr_ITU_R470_256\", \"YCbCr_ITU_R709_256\"" 3 "rgb" 11 "rgb" 0 "RVB" "" "rgba" 1 "RVBA" "" "hsv" 2 "TSV" "" "hsl" 3 "TSL" "" "cmyk" 4 "CMJN" "" "lab" 5 "LAB" "" "lch" 6 "LCH" "" "ycbcr470" 7 "YCbCr ITU R470" "" "ycbcr709" 8 "YCbCr ITU R709" "" "ycbcr470f" 9 "YCbCr ITU R470 256" "" "ycbcr709f" 10 "YCbCr ITU R709 256" "") + (proc-arg 9 "GimpParamImage" "GimpImage" "new-image" "New image" "Output image" 3 0)) + (proc-def "plug-in-recompose" 1 + "Recompose une image précédemment décomposée" + "This function recombines the grayscale layers produced by Decompose into a single RGB or RGBA layer, and replaces the originally decomposed layer with the result." + "Bill Skaggs" + "Bill Skaggs" + "2004" + "R_ecomposer" + 1 + (menu-path "/Colors/Components") + (icon icon-name -1 "") + "GRAY*" + 13 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/colorxhtml/colorxhtml.py" 1773502278 + (proc-def "file-colorxhtml-export" 1 + "Enregistrer en texte HTML coloré" + "Saves the image as colored XHTML text (based on Perl version by Marc Lehmann)" + "Manish Singh and Carol Spears" + "(c) GPL V3.0 or later" + "2003" + "Texte HTML coloré" + 0 + (icon icon-name -1 "") + (save-proc + (extensions "html,xhtml")) + "RGB" + 2147483647 + 8 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The image to export" 3 0) + (proc-arg 13 "GimpParamFile" "GFile" "file" "File" "The file to export to" 3 1 0 "") + (proc-arg 11 "GimpParamExportOptions" "GimpExportOptions" "options" "Options" "Export options" 3) + (proc-arg 5 "GParamBoolean" "gboolean" "source-file" "Rea_d characters from file" "Read characters from file, if true, or use text entry" 3 0) + (proc-arg 7 "GParamString" "gchararray" "characters" "Charac_ters" "Characters that will be used as colored pixels." 3 "foo") + (proc-arg 1 "GParamInt" "gint" "font-size" "_Taille de police en pixels" "Font size in pixels" 3 5 100 10) + (proc-arg 5 "GParamBoolean" "gboolean" "separate" "É_crire séparément un fichier CSS" "Write a separate CSS file" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/colormap-remap/colormap-remap" 1773502278 + (proc-def "plug-in-colormap-swap" 1 + "Échange deux couleurs dans la palette" + "This procedure takes an indexed image and lets you swap the positions of two colors in the colormap without visually changing the image." + "Mukund Sivaraman " + "Mukund Sivaraman " + "June 2006" + "É_changer des couleurs" + 0 + (icon icon-name -1 "gimp-colormap") + "INDEXED*" + 13 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "index1" "Index 1" "First index in the colormap" 3 0 255 0) + (proc-arg 1 "GParamInt" "gint" "index2" "Index 2" "Second (other) index in the colormap" 3 0 255 0)) + (proc-def "plug-in-colormap-remap" 1 + "Réorganise la palette des couleurs" + "This procedure takes an indexed image and lets you alter the positions of colors in the colormap without visually changing the image." + "Mukund Sivaraman " + "Mukund Sivaraman " + "June 2006" + "_Réorganiser la palette des couleurs…" + 2 + (menu-path "/Colors/Map/[Colormap]") + (menu-path "/Colormap Menu") + (icon icon-name -1 "gimp-colormap") + "INDEXED*" + 13 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 0 "GParamBoxed" "GBytes" "map" "Map" "Remap array for the colormap" 3))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/cml-explorer/cml-explorer" 1773502278 + (proc-def "plug-in-cml-explorer" 1 + "Crée des motifs abstraits de Coupled-Map Lattice" + "Make an image of Coupled-Map Lattice (CML). CML is a kind of Cellular Automata on continuous (value) domain. In GIMP_RUN_NONINTERACTIVE, the name of a parameter file is passed as the 4th arg. You can control CML_explorer via parameter file." + "Shuji Narazaki (narazaki@InetQ.or.jp); http://www.inetq.or.jp/~narazaki/TheGIMP/" + "Shuji Narazaki" + "1997" + "Explorateur _CML…" + 1 + (menu-path "/Filters/Render/Pattern") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 4 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 13 "GimpParamFile" "GFile" "parameter-file" "Parameter File" "The parameter file from which CML_explorer makes an image. This argument is only used in non-interactive runs." 3 0 0 ""))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/checkerboard/checkerboard" 1773502278 + (proc-def "plug-in-checkerboard" 1 + "Crée un motif damier" + "More here later" + "Brent Burton & the Edward Blevins" + "Brent Burton & the Edward Blevins" + "1997" + "Da_mier (ancien)…" + 1 + (menu-path "/Filters/Render/Pattern") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 5 "GParamBoolean" "gboolean" "psychobilly" "_Boursouflure" "Render a psychobilly checkerboard" 3 0) + (proc-arg 1 "GParamInt" "gint" "check-size" "_Taille" "Size of the checks" 3 1 524288 10))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/busy-dialog/busy-dialog" 1773502278 + (proc-def "plug-in-busy-dialog" 1 + "Show a dialog while waiting for an operation to finish" + "Used by GIMP to display a dialog, containing a spinner and a custom message, while waiting for an ongoing operation to finish. Optionally, the dialog may provide a \"Cancel\" button, which can be used to cancel the operation." + "Ell" + "Ell" + "2018" + "" + 0 + (icon icon-name -1 "") + "" + 2147483647 + 5 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 0) + (proc-arg 1 "GParamInt" "gint" "read-fd" "The read file descriptor" "The read file descriptor" 515 -2147483648 2147483647 0) + (proc-arg 1 "GParamInt" "gint" "write-fd" "The write file descriptor" "The write file descriptor" 515 -2147483648 2147483647 0) + (proc-arg 7 "GParamString" "gchararray" "message" "The message" "The message" 515 "") + (proc-arg 5 "GParamBoolean" "gboolean" "cancelable" "Whether the dialog is cancelable" "Whether the dialog is cancelable" 515 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/border-average/border-average" 1773502278 + (proc-def "plug-in-borderaverage" 1 + "Fixe l’arrière-plan à la couleur moyenne du bord de l’image" + "" + "Philipp Klaus" + "Internet Access AG" + "1998" + "Moyenne du _bord…" + 1 + (menu-path "/Colors/Info") + (icon icon-name -1 "") + "RGB*" + 1 + 5 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "thickness" "_Thickness" "Border size to take in count" 3 0 2147483647 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "bucket-exponent" "Bucket si_ze" "Bits for bucket size" 3 "levels-16" 9 "levels-1" 0 "1" "" "levels-2" 1 "2" "" "levels-4" 2 "4" "" "levels-8" 3 "8" "" "levels-16" 4 "16" "" "levels-32" 5 "32" "" "levels-64" 6 "64" "" "levels-128" 7 "128" "" "levels-256" 8 "256" "") + (proc-arg 8 "GimpParamColor" "GeglColor" "borderaverage" "The average color of the specified border." "The average color of the specified border." 3 1 16 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "R'G'B'A float" 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/blinds/blinds" 1773502278 + (proc-def "plug-in-blinds" 1 + "Simule une image peinte sur les stores d’une fenêtre" + "More here later" + "Andy Thomas" + "Andy Thomas" + "1997" + "_Fenêtre avec stores…" + 1 + (menu-path "/Filters/Distorts") + (icon icon-name -1 "") + "RGB*, GRAY*" + 1 + 7 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 1 "GParamInt" "gint" "angle-displacement" "_Displacement" "Angle of Displacement" 3 0 90 30) + (proc-arg 1 "GParamInt" "gint" "num-segments" "_Number of segments" "Number of segments in blinds" 3 1 1024 3) + (proc-arg 4 "GimpParamChoice" "gchararray" "orientation" "Orient_ation" "The orientation" 3 "horizontal" 2 "horizontal" 0 "Horizontal" "" "vertical" 1 "Vertical" "") + (proc-arg 5 "GParamBoolean" "gboolean" "bg-transparent" "_Transparent" "Background transparent" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/animation-play/animation-play" 1773502278 + (proc-def "plug-in-animationplay" 1 + "Preview a GIMP layer-based animation" + "" + "Adam D. Moss " + "Adam D. Moss " + "1997, 1998..." + "_Playback..." + 1 + (menu-path "/Filters/Animation/") + (icon icon-name -1 "media-playback-start") + "*" + 13 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/animation-optimize/animation-optimize" 1773502278 + (proc-def "plug-in-animationoptimize" 1 + "Modifie l’image pour réduire sa taille en enregistrant une animation GIF" + "This procedure applies various optimizations to a GIMP layer-based animation in an attempt to reduce the final file size. If a frame of theanimation can use the 'combine' mode, this procedure attempts to maximize the number of adjacent pixels having the same color, whichimproves the compression for some image formats such as GIF or MNG." + "Adam D. Moss " + "Adam D. Moss " + "1997-2003" + "Optimiser (pour _GIF)" + 1 + (menu-path "/Filters/Animation") + (icon icon-name -1 "") + "*" + 13 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 9 "GimpParamImage" "GimpImage" "result" "Result" "Resulting image" 3 0)) + (proc-def "plug-in-animationoptimize-diff" 1 + "Réduit la taille du fichier lorsqu’il est possible de combiner les calques" + "This procedure applies various optimizations to a GIMP layer-based animation in an attempt to reduce the final file size. If a frame of the animation can use the 'combine' mode, this procedure uses a simple difference between the frames." + "Adam D. Moss " + "Adam D. Moss " + "1997-2003" + "_Optimiser (différence)" + 1 + (menu-path "/Filters/Animation") + (icon icon-name -1 "") + "*" + 13 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 9 "GimpParamImage" "GimpImage" "result" "Result" "Resulting image" 3 0)) + (proc-def "plug-in-animationunoptimize" 1 + "Supprime l’optimisation pour rendre l’édition plus facile" + "This procedure 'simplifies' a GIMP layer-based animation that has been optimized for animation. This makes editing the animation much easier." + "Adam D. Moss " + "Adam D. Moss " + "1997-2003" + "_Désoptimiser" + 1 + (menu-path "/Filters/Animation") + (icon icon-name -1 "") + "*" + 13 + 3 1 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 9 "GimpParamImage" "GimpImage" "result" "Result" "Resulting image" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/plug-ins/align-layers/align-layers" 1773502278 + (proc-def "plug-in-align-layers" 1 + "Aligner tous les calques visibles de l’image" + "Align visible layers" + "Shuji Narazaki " + "Shuji Narazaki" + "1997" + "Aligner les calques _visibles…" + 1 + (menu-path "/Image/[Arrange]") + (icon icon-name -1 "") + "*" + 13 + 10 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable") + (proc-arg 4 "GimpParamChoice" "gchararray" "horizontal-style" "_Horizontal style" "" 3 "none" 5 "none" 0 "Aucun" "" "collect" 1 "Rassembler" "" "fill-left-to-right" 2 "Remplir (de gauche à droite)" "" "fill-right-to-left" 3 "Remplir (de droite à gauche)" "" "snap-to-grid" 4 "Accrocher à la grille" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "horizontal-base" "Hori_zontal base" "" 3 "left-edge" 3 "left-edge" 0 "Bord gauche" "" "center" 1 "Centrer" "" "right-edge" 2 "Bord droit" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "vertical-style" "_Vertical style" "" 3 "none" 5 "none" 0 "Aucun" "" "collect" 1 "Rassembler" "" "fill-left-to-right" 2 "Remplir (de haut en bas)" "" "fill-right-to-left" 3 "Remplir (de bas en haut)" "" "snap-to-grid" 4 "Accrocher à la grille" "") + (proc-arg 4 "GimpParamChoice" "gchararray" "vertical-base" "Ver_tical base" "" 3 "top-edge" 3 "top-edge" 0 "Bord haut" "" "center" 1 "Centrer" "" "bottom-edge" 2 "Bord bas" "") + (proc-arg 1 "GParamInt" "gint" "grid-size" "_Grille" "Grille" 3 1 200 10) + (proc-arg 5 "GParamBoolean" "gboolean" "ignore-bottom-layer" "Ignore the _bottom layer even if visible" "Ignore the bottom layer even if visible" 3 1) + (proc-arg 5 "GParamBoolean" "gboolean" "use-bottom-layer" "_Utiliser le calque le plus bas (invisible) comme base" "Use the (invisible) bottom layer as the base" 3 0))) +(plug-in-def "${gimp_plug_in_dir}/extensions/org.gimp.extension.goat-exercises/goat-exercise-gjs.js" 1773502278 + (proc-def "plug-in-goat-exercise-gjs" 1 + "Plug-in example in JavaScript (GJS)" + "Plug-in example in JavaScript (GJS)" + "Jehan" + "Jehan" + "2019" + "Plug-In Example in _JavaScript" + 1 + (menu-path "/Filters/Development/Plug-In Examples/") + (icon icon-name -1 "gimp-gegl") + "*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/extensions/org.gimp.extension.goat-exercises/goat-exercise-py3.py" 1773502278 + (proc-def "plug-in-goat-exercise-python" 1 + "Plug-in example in Python 3" + "Plug-in example in Python 3" + "Jehan" + "Jehan" + "2019" + "Plug-In Example in _Python 3" + 1 + (menu-path "/Filters/Development/Plug-In Examples/") + (icon icon-name -1 "gimp-gegl") + "*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/extensions/org.gimp.extension.goat-exercises/goat-exercise-vala" 1773502278 + (proc-def "plug-in-goat-exercise-vala" 1 + "Plug-in example in Vala" + "Plug-in example in Vala" + "Niels De Graef" + "Niels De Graef" + "2020" + "Plug-In Example in _Vala" + 1 + (menu-path "/Filters/Development/Plug-In Examples/") + (icon icon-name -1 "gimp-gegl") + "RGB*, INDEXED*, GRAY*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) +(plug-in-def "${gimp_plug_in_dir}/extensions/org.gimp.extension.goat-exercises/goat-exercise-c" 1773502278 + (proc-def "plug-in-goat-exercise-c" 1 + "Plug-in example in C" + "Plug-in example in C" + "Øyvind Kolås " + "Øyvind Kolås " + "21 march 2012" + "Plug-In Example in _C" + 1 + (menu-path "/Filters/Development/Plug-In Examples/") + (icon icon-name -1 "gimp-gegl") + "*" + 1 + 3 0 + (proc-arg 3 "GParamEnum" "GimpRunMode" "run-mode" "Run mode" "The run mode" 3 1) + (proc-arg 9 "GimpParamImage" "GimpImage" "image" "Image" "The input image" 3 0) + (proc-arg 10 "GimpParamCoreObjectArray" "GimpCoreObjectArray" "drawables" "Drawables" "The input drawables" 259 "GimpDrawable"))) + +# end of pluginrc diff --git a/config/GIMP/3.2/profilerc b/config/GIMP/3.2/profilerc new file mode 100644 index 0000000..2a75c3e --- /dev/null +++ b/config/GIMP/3.2/profilerc @@ -0,0 +1,4 @@ +# GIMP color profile history + + +# end of color profile history diff --git a/config/GIMP/3.2/sessionrc b/config/GIMP/3.2/sessionrc new file mode 100644 index 0000000..cd94355 --- /dev/null +++ b/config/GIMP/3.2/sessionrc @@ -0,0 +1,90 @@ +# GIMP sessionrc +# +# This file takes session-specific info (that is info, you want to keep +# between two GIMP sessions). You are not supposed to edit it manually, but +# of course you can do. The sessionrc will be entirely rewritten every time +# you quit GIMP. If this file isn't found, defaults are used. + +(session-info "toplevel" + (factory-entry "gimp-empty-image-window") + (position 200 100) + (size 640 480)) +(session-info "toplevel" + (factory-entry "gimp-single-image-window") + (position 0 0) + (size 1360 728) + (monitor 0) + (open-on-exit) + (aux-info + (left-docks-width "52") + (right-docks-width "341") + (maximized "yes")) + (gimp-toolbox + (side left)) + (gimp-dock + (side right) + (book + (current-page 0) + (dockable "gimp-layer-list" + (tab-style icon) + (preview-size 32) + (aux-info + (show-button-bar "true"))) + (dockable "gimp-tool-options" + (tab-style preview) + (aux-info + (show-button-bar "true")))))) +(session-info "toplevel" + (factory-entry "gimp-operation-tool-dialog") + (position 0 0) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-levels-tool-dialog") + (position 0 0) + (size 541 559) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-file-export-dialog") + (position 0 0) + (size 1674 471) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-file-open-dialog") + (position 0 0) + (size 980 453) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-curves-tool-dialog") + (position 0 0) + (size 675 604) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-brightness-contrast-tool-dialog") + (position 0 0) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-preferences-dialog") + (position 0 0) + (size 1097 561) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-image-new-dialog") + (position 0 0) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-file-save-dialog") + (position 0 0) + (size 1100 686) + (monitor 0)) +(session-info "toplevel" + (factory-entry "gimp-toolbox-color-dialog") + (position 338 99) + (monitor 0)) + +(hide-docks no) +(single-window-mode yes) +(show-tabs yes) +(tabs-position 0) +(last-tip-shown 0) + +# end of sessionrc diff --git a/config/GIMP/3.2/shortcutsrc b/config/GIMP/3.2/shortcutsrc new file mode 100644 index 0000000..5636d24 --- /dev/null +++ b/config/GIMP/3.2/shortcutsrc @@ -0,0 +1,1141 @@ +# GIMP shortcutsrc +# +# If you delete this file, all shortcuts will be reset to defaults. + +(file-version 1) + +# (action "filters-tile-paper") +# (action "context-foreground-red-minimum") +# (action "tools-warp-effect-pixel-size-set") +# (action "tools-airbrush-flow-decrease") +# (action "plug-in-blinds") +# (action "drawable-lock-position") +# (action "paths-lower") +# (action "plug-in-gfig") +# (action "tools-spacing-decrease-skip") +# (action "context-brush-hardness-decrease") +# (action "select-all" "a") +# (action "image-softproof-intent-perceptual") +# (action "file-save-a-copy") +# (action "help-help" "F1") +# (action "context-brush-spikes-decrease-skip") +# (action "script-fu-make-brush-elliptical") +# (action "view-new") +# (action "filters-value-propagate") +# (action "paths-raise-to-top") +# (action "context-brush-angle-increase-skip") +# (action "python-fu-console") +# (action "tools-force-decrease-percent") +# (action "context-palette-select-first") +# (action "plug-in-borderaverage") +# (action "layers-lower-to-bottom") +# (action "view-zoom-minimum") +# (action "context-palette-background-set") +# (action "filters-gegl-shuffle-search") +# (action "context-opacity-decrease-skip") +# (action "image-convert-float") +# (action "view-scroll-left-border") +# (action "view-show-all") +# (action "dialogs-dynamics-editor") +# (action "tools-swap" "x") +# (action "select-fill") +# (action "gimp-help-using-photography") +# (action "layers-select-next" "Page_Down") +# (action "plug-in-qbist") +# (action "filters-gegl-selective-hue-saturation") +# (action "tools-airbrush-rate-maximum") +# (action "layers-resize") +# (action "plug-in-cml-explorer") +# (action "view-show-canvas-boundary") +# (action "context-background-hue-increase") +# (action "channels-duplicate") +# (action "context-font-select-last") +# (action "context-colormap-background-previous-skip") +# (action "layers-blend-space-rgb-perceptual") +# (action "tools-transform-3d" "w") +# (action "paths-color-tag-yellow") +# (action "filters-pixelize") +# (action "filters-desaturate") +# (action "paths-select-top") +# (action "view-scroll-right-border") +# (action "filters-long-shadow") +# (action "script-fu-fuzzy-border") +# (action "paths-to-vector-layer") +# (action "filters-lens-blur") +# (action "filters-semi-flatten") +# (action "view-padding-color-in-show-all") +# (action "filters-gegl-brightness-contrast") +# (action "image-color-profile-assign") +# (action "context-foreground-green-decrease") +# (action "filters-levels") +# (action "view-show-grid") +# (action "tools-aspect-increase-skip") +# (action "context-brush-spacing-maximum") +# (action "context-swatch-foreground-previous" "9") +# (action "filters-color-exchange") +# (action "plug-in-gegl-filter-browser") +# (action "layers-color-tag-green") +# (action "context-brush-shape-square") +# (action "layers-mask-apply") +# (action "layers-edit-text") +# (action "layers-flatten-image") +# (action "filters-noise-cie-lch") +# (action "layers-merge-layers") +# (action "paths-selection-add") +# (action "filters-mosaic") +# (action "tools-airbrush-flow-set") +# (action "paths-color-tag-blue") +# (action "edit-named-copy-visible") +# (action "layers-raise") +# (action "layers-composite-space-rgb-perceptual") +# (action "context-swatch-foreground-set") +# (action "filters-engrave") +# (action "filters-median-blur") +# (action "windows-use-single-window-mode") +# (action "tools-color-average-radius-set") +# (action "filters-gegl-alpha-inpaint") +# (action "plug-in-smooth-palette") +# (action "paths-color-tag-violet") +# (action "layers-mask-disable") +# (action "context-brush-hardness-increase") +# (action "tools-curves") +# (action "tools-opacity-increase-skip" "greater") +# (action "view-zoom-out-skip") +# (action "tools-size-set") +# (action "filters-unsharp-mask") +# (action "context-foreground-red-decrease") +# (action "context-paint-mode-last") +# (action "context-background-green-decrease-skip") +# (action "view-scroll-top-border") +# (action "channels-delete") +# (action "context-swatch-background-previous-skip") +# (action "tools-force-maximum") +# (action "context-background-hue-minimum") +# (action "filters-wind") +# (action "plug-in-goat-exercise-vala") +# (action "channels-select-next") +# (action "edit-paste" "v" "Paste") +# (action "paths-color-tag-brown") +# (action "tools-airbrush-rate-decrease-skip") +# (action "plug-in-zealouscrop") +# (action "context-background-green-maximum") +# (action "view-snap-to-guides") +# (action "layers-edit-vector") +# (action "edit-undo" "z") +# (action "drawable-visible") +# (action "layers-opacity-increase-skip") +# (action "edit-strong-redo" "y") +# (action "channels-selection-replace") +# (action "plug-in-lighting") +# (action "edit-named-paste") +# (action "context-palette-foreground-next") +# (action "context-colormap-background-next") +# (action "context-background-saturation-maximum") +# (action "filters-grid") +# (action "filters-cartoon") +# (action "context-palette-background-previous-skip") +# (action "context-colormap-foreground-previous-skip") +# (action "context-tool-select-last") +# (action "context-brush-select-first") +# (action "file-save" "s") +# (action "context-background-red-increase-skip") +# (action "tools-size-decrease" "bracketleft") +# (action "edit-paste-into") +# (action "image-flip-horizontal") +# (action "view-flip-horizontally") +# (action "context-background-value-increase") +# (action "tools-size-decrease-percent") +# (action "plug-in-colormap-remap") +# (action "paths-paste") +# (action "context-brush-aspect-increase-skip") +# (action "context-brush-select-last") +# (action "context-foreground-green-increase") +# (action "select-save") +# (action "plug-in-ifscompose") +# (action "layers-blend-space-rgb-linear") +# (action "image-convert-double") +# (action "filters-fattal-2002") +# (action "script-fu-difference-clouds") +# (action "channels-color-tag-blue") +# (action "context-brush-aspect-minimum") +# (action "image-convert-half") +# (action "context-font-select-first") +# (action "paths-color-tag-orange") +# (action "view-scroll-page-down") +# (action "layers-composite-space-rgb-linear") +# (action "view-display-intent-perceptual") +# (action "dialogs-toolbox" "b") +# (action "paths-selection-to-path-advanced") +# (action "tools-angle-maximum") +# (action "tools-rotate-arbitrary") +# (action "layers-edit-attributes") +# (action "dialogs-welcome") +# (action "filters-invert-perceptual") +# (action "context-palette-background-last") +# (action "context-foreground-saturation-decrease-skip") +# (action "filters-lens-distortion") +# (action "view-scroll-horizontal") +# (action "filters-gegl-boxblur") +# (action "tools-hardness-decrease") +# (action "drawable-flip-vertical") +# (action "paths-select-bottom") +# (action "edit-paste-float") +# (action "filters-color-to-alpha") +# (action "filters-sinus") +# (action "paths-lower-to-bottom") +# (action "layers-new-group") +# (action "tools-angle-set-to-default") +# (action "view-display-filters") +# (action "context-brush-spacing-decrease") +# (action "view-zoom-selection") +# (action "tools-size-maximum") +# (action "select-stroke") +# (action "tools-spacing-set-to-default") +# (action "tools-airbrush-rate-increase") +# (action "view-close" "w") +# (action "view-padding-color-prefs") +# (action "tools-aspect-increase") +# (action "tools-mypaint-brush-hardness-set") +# (action "select-fill-last-values") +# (action "windows-tabs-position-right") +# (action "image-convert-perceptual") +# (action "tools-opacity-set-to-default") +# (action "context-swatch-foreground-previous-skip") +# (action "tools-rotate-image-arbitrary") +# (action "tools-hardness-maximum") +# (action "filters-snn-mean") +# (action "filters-noise-pick") +# (action "tools-opacity-increase" "greater") +# (action "dialogs-brushes" "b") +# (action "context-font-select-next") +# (action "image-convert-u16") +# (action "filters-video-degradation") +# (action "filters-sepia") +# (action "context-brush-aspect-decrease") +# (action "context-foreground-green-maximum") +# (action "context-foreground-green-increase-skip") +# (action "context-brush-spacing-set") +# (action "edit-fill-fg" "comma") +# (action "drawable-rotate-180") +# (action "plug-in-gflare") +# (action "gimp-palette-export-text") +# (action "tools-crop" "c") +# (action "file-gbr-export-internal") +# (action "tools-paintbrush-force-set") +# (action "layers-blend-space-rgb-non-linear") +# (action "tools-size-decrease-skip" "braceleft") +# (action "plug-in-goat-exercise-python") +# (action "tools-airbrush-flow-minimum") +# (action "plug-in-unit-editor") +# (action "view-open-display") +# (action "paths-color-tag-green") +# (action "context-background-saturation-decrease-skip") +# (action "context-palette-foreground-previous-skip") +# (action "context-opacity-decrease") +# (action "view-zoom-2-1" "2" "KP_2") +# (action "tools-hardness-decrease-skip") +# (action "context-foreground-red-increase-skip") +# (action "filters-stretch-contrast-hsv") +# (action "context-background-value-increase-skip") +# (action "view-flip-reset") +# (action "plug-in-pagecurl") +# (action "dialogs-patterns" "p") +# (action "tools-aspect-maximum") +# (action "layers-merge-layers-last-values") +# (action "filters-gegl-gray-component-replacement") +# (action "paths-lock-content") +# (action "dialogs-gradients" "g") +# (action "context-brush-spikes-maximum") +# (action "filters-kaleidoscope") +# (action "context-background-blue-minimum") +# (action "edit-paste-merged") +# (action "context-background-blue-decrease") +# (action "script-fu-guide-new-percent") +# (action "context-foreground-hue-decrease") +# (action "view-display-black-point-compensation") +# (action "view-padding-color-light-check") +# (action "view-navigation-window") +# (action "context-swatch-background-first") +# (action "context-palette-background-next-skip") +# (action "script-fu-circuit") +# (action "paths-selection-from-paths" "v") +# (action "filters-repeat" "f") +# (action "view-rotate-15") +# (action "context-colormap-background-next-skip") +# (action "tools-hardness-set-to-default") +# (action "view-zoom-fit-in" "j") +# (action "paths-stroke-last-values") +# (action "layers-composite-space-rgb-non-linear") +# (action "view-zoom-1-16" "parenleft" "KP_5") +# (action "context-brush-radius-set") +# (action "paths-edit") +# (action "filters-hue-chroma") +# (action "filters-illusion") +# (action "context-paint-mode-next") +# (action "view-rotate-180") +# (action "filters-dither") +# (action "filters-gegl-gluas") +# (action "filters-linear-sinusoid") +# (action "context-brush-spacing-increase") +# (action "select-flood") +# (action "plug-in-gimpressionist") +# (action "filters-difference-of-gaussians") +# (action "plug-in-curve-bend") +# (action "view-show-scrollbars") +# (action "paths-color-tag-gray") +# (action "python-fu-palette-to-gradient") +# (action "script-fu-reverse-layers") +# (action "layers-color-tag-red") +# (action "filters-shift") +# (action "filters-gegl-segment-kmeans") +# (action "edit-undo-clear") +# (action "tools-aspect-set") +# (action "filters-offset" "o") +# (action "filters-gegl-domain-transform") +# (action "view-show-statusbar") +# (action "layers-opacity-decrease") +# (action "view-snap-to-equidistance") +# (action "filters-component-extract") +# (action "plug-in-lic") +# (action "tools-by-color-select" "o") +# (action "script-fu-add-bevel") +# (action "script-fu-weave") +# (action "context-brush-radius-increase") +# (action "channels-color-tag-violet") +# (action "windows-hide-docks") +# (action "context-tool-select-next") +# (action "tools-angle-increase") +# (action "context-palette-background-first") +# (action "channels-new-last-values") +# (action "windows-show-tabs") +# (action "filters-noise-simplex") +# (action "tools-gradient" "g") +# (action "plug-in-warp") +# (action "edit-named-copy") +# (action "filters-gegl-aces-rrt") +# (action "tools-offset") +# (action "context-brush-select-next") +# (action "context-opacity-increase") +# (action "dialogs-mypaint-brushes") +# (action "tools-shear" "h") +# (action "tools-angle-set") +# (action "context-brush-radius-maximum") +# (action "layers-mask-add-last-values") +# (action "filters-gegl-box-blur") +# (action "script-fu-paste-as-pattern") +# (action "view-rotate-reset") +# (action "view-scroll-center" "j") +# (action "dialogs-layers" "l") +# (action "tools-force-decrease-skip") +# (action "view-reset" "exclam") +# (action "layers-mode-previous") +# (action "layers-edit") +# (action "plug-in-dbbrowser") +# (action "paths-edit-attributes") +# (action "script-fu-make-brush-rectangular-feathered") +# (action "context-background-value-minimum") +# (action "filters-noise-perlin") +# (action "filters-posterize") +# (action "context-brush-shape-circle") +# (action "layers-lower") +# (action "context-brush-radius-increase-less") +# (action "layers-new" "n") +# (action "image-softproof-intent-absolute-colorimetric") +# (action "tools-text" "t") +# (action "plug-in-nl-filter") +# (action "image-color-profile-save") +# (action "context-background-blue-increase") +# (action "context-palette-background-next") +# (action "gimp-help-concepts-usage") +# (action "tools-airbrush-rate-set") +# (action "context-brush-hardness-minimum") +# (action "image-softproof-intent-saturation") +# (action "context-background-hue-set") +# (action "context-foreground-hue-increase") +# (action "context-foreground-blue-decrease") +# (action "tools-force-increase-skip") +# (action "channels-selection-intersect") +# (action "tools-scale" "s") +# (action "file-save-as" "s") +# (action "file-save-and-close") +# (action "filters-vignette") +# (action "view-rotate-345") +# (action "context-pattern-select-last") +# (action "context-paint-mode-first") +# (action "plug-in-animationoptimize") +# (action "dialogs-templates") +# (action "channels-color-tag-gray") +# (action "context-background-green-increase") +# (action "image-resize") +# (action "filters-gegl-ctx-script") +# (action "script-fu-round-corners") +# (action "context-swatch-foreground-first") +# (action "tools-spacing-maximum") +# (action "channels-selection-add") +# (action "tools-hardness-set") +# (action "plug-in-spyrogimp") +# (action "view-rotate-other") +# (action "dialogs-dynamics") +# (action "layers-duplicate" "d") +# (action "tools-free-select" "f") +# (action "select-copy-float") +# (action "gimp-online-roadmap") +# (action "tools-object-2-last") +# (action "dialogs-gradient-editor") +# (action "tools-warp" "w") +# (action "filters-c2g") +# (action "filters-displace") +# (action "plug-in-screenshot") +# (action "tools-rect-select" "r") +# (action "filters-motion-blur-zoom") +# (action "windows-tabs-position-bottom") +# (action "image-convert-non-linear") +# (action "view-show-rulers" "r") +# (action "view-zoom-1-1" "1" "KP_1") +# (action "tools-angle-decrease-skip") +# (action "context-background-blue-set") +# (action "view-zoom-1-2" "eacute" "KP_2") +# (action "plug-in-metadata-editor") +# (action "channels-new") +# (action "view-dot-for-dot") +# (action "filters-shadows-highlights") +# (action "plug-in-sparkle") +# (action "tools-fuzzy-select" "u") +# (action "filters-edge-neon") +# (action "file-export" "e") +# (action "gimp-help-using-selections") +# (action "filters-noise-rgb") +# (action "filters-image-gradient") +# (action "tools-airbrush-rate-minimum") +# (action "tools-aspect-decrease-percent") +# (action "plug-in-film") +# (action "script-fu-guide-new") +# (action "context-palette-foreground-first") +# (action "view-zoom-1-4" "quotedbl" "KP_3") +# (action "view-snap-to-canvas") +# (action "filters-bump-map") +# (action "filters-slic") +# (action "filters-color-temperature") +# (action "script-fu-old-photo") +# (action "context-brush-spikes-decrease") +# (action "context-background-red-minimum") +# (action "debug-dump-keyboard-shortcuts") +# (action "select-invert" "i") +# (action "context-brush-radius-decrease-percent") +# (action "tools-hardness-decrease-percent") +# (action "view-padding-color-custom") +# (action "filters-recursive-transform") +# (action "tools-opacity-set") +# (action "context-foreground-value-minimum") +# (action "layers-raise-to-top") +# (action "filters-normal-map") +# (action "tools-measure" "m") +# (action "filters-gegl-alpha-clip") +# (action "layers-mask-add") +# (action "context-brush-spacing-minimum") +# (action "tools-spacing-increase-skip") +# (action "context-background-green-set") +# (action "context-background-value-set") +# (action "view-display-intent-relative-colorimetric") +# (action "context-foreground-blue-increase") +# (action "view-zoom-1-8" "apostrophe" "KP_4") +# (action "script-fu-paste-as-brush") +# (action "view-zoom-16-1" "5" "KP_5") +# (action "gimp-palette-export-css") +# (action "filters-emboss") +# (action "image-rotate-270") +# (action "tools-opacity-increase-percent") +# (action "context-brush-spikes-increase-skip") +# (action "image-scale") +# (action "script-fu-set-cmap") +# (action "channels-raise") +# (action "filters-noise-hurl") +# (action "context-brush-angle-maximum") +# (action "context-colormap-foreground-set") +# (action "image-convert-grayscale") +# (action "image-duplicate" "d") +# (action "dialogs-undo-history") +# (action "select-feather") +# (action "select-stroke-last-values") +# (action "script-fu-waves-anim") +# (action "image-crop-to-content") +# (action "context-background-value-decrease") +# (action "filters-oilify") +# (action "paths-copy") +# (action "select-grow") +# (action "context-opacity-increase-skip") +# (action "view-scroll-page-left") +# (action "plug-in-gradmap") +# (action "context-colors-default" "d") +# (action "context-palette-select-previous") +# (action "filters-gegl-bilateral-filter") +# (action "context-swatch-foreground-last") +# (action "layers-mask-selection-subtract") +# (action "context-background-red-set") +# (action "layers-scale") +# (action "script-fu-test-sphere-v3") +# (action "tools-levels") +# (action "tools-size-increase-percent") +# (action "filters-edge-laplace") +# (action "image-configure-grid") +# (action "tools-spacing-decrease-percent") +# (action "context-opacity-set") +# (action "image-convert-indexed") +# (action "context-foreground-red-maximum") +# (action "context-background-green-minimum") +# (action "script-fu-burn-in-anim") +# (action "plug-in-wavelet-decompose") +# (action "plug-in-jigsaw") +# (action "dialogs-selection-editor") +# (action "image-convert-rgb") +# (action "gimp-help-concepts-paths") +# (action "image-color-profile-discard") +# (action "plug-in-flame") +# (action "debug-mem-profile") +# (action "context-brush-spikes-increase") +# (action "image-color-profile-use-srgb") +# (action "python-fu-foggify") +# (action "tools-airbrush-rate-decrease") +# (action "script-fu-guides-from-selection") +# (action "view-zoom-maximum") +# (action "dialogs-tool-presets") +# (action "tools-aspect-decrease") +# (action "view-zoom-in" "plus" "KP_Add" "ZoomIn") +# (action "paths-selection-to-path") +# (action "context-background-blue-decrease-skip") +# (action "view-color-management-softproof") +# (action "tools-warp-effect-hardness-set") +# (action "tools-opacity-minimum") +# (action "filters-softglow") +# (action "filters-color-enhance") +# (action "tools-opacity-decrease" "less") +# (action "tools-force-set-to-default") +# (action "context-brush-hardness-decrease-skip") +# (action "edit-cut" "x" "Cut") +# (action "context-pattern-select-next") +# (action "layers-mask-selection-add") +# (action "context-background-green-increase-skip") +# (action "image-color-profile-convert") +# (action "filters-waterpixels") +# (action "context-palette-select-set") +# (action "python-fu-palette-to-gradient-repeating") +# (action "select-border") +# (action "context-foreground-hue-set") +# (action "dialogs-images") +# (action "script-fu-xach-effect") +# (action "dialogs-document-history") +# (action "dialogs-keyboard-shortcuts") +# (action "script-fu-clothify") +# (action "plug-in-animationplay") +# (action "tools-dodge-burn" "d") +# (action "tools-object-2-next") +# (action "context-palette-foreground-next-skip") +# (action "plug-in-reset-all") +# (action "layers-select-bottom" "End") +# (action "context-foreground-hue-minimum") +# (action "view-zoom-8-1" "4" "KP_4") +# (action "tools-airbrush-rate-increase-skip") +# (action "context-colormap-foreground-next-skip") +# (action "layers-visible") +# (action "context-swatch-background-next-skip") +# (action "plug-in-mail-image") +# (action "context-palette-background-previous") +# (action "layers-mode-first") +# (action "context-palette-foreground-set") +# (action "file-copy-location") +# (action "dialogs-action-search" "slash" "KP_Divide") +# (action "context-foreground-blue-minimum") +# (action "tools-size-minimum") +# (action "filters-convolution-matrix") +# (action "layers-mask-show") +# (action "layers-composite-mode-union") +# (action "plug-in-retinex") +# (action "edit-paste-merged-in-place") +# (action "edit-paste-float-in-place") +# (action "edit-copy" "c" "Copy") +# (action "tools-object-2-previous") +# (action "python-fu-palette-sort") +# (action "context-brush-hardness-set") +# (action "tools-ink-blob-angle-set") +# (action "context-tool-select-first") +# (action "filters-erode") +# (action "edit-fill-bg" "period") +# (action "image-print-size") +# (action "context-foreground-green-minimum") +# (action "filters-gegl-color-warp") +# (action "script-fu-unsharp-mask") +# (action "tools-handle-transform" "l") +# (action "filters-gaussian-blur") +# (action "context-colormap-background-previous") +# (action "image-merge-layers" "m") +# (action "filters-high-pass") +# (action "tools-move" "m") +# (action "context-pattern-select-previous") +# (action "context-background-hue-maximum") +# (action "script-fu-guides-remove") +# (action "context-foreground-saturation-increase-skip") +# (action "image-softproof-black-point-compensation") +# (action "channels-select-previous") +# (action "tools-flip" "f") +# (action "context-brush-angle-set") +# (action "edit-fill-pattern" "semicolon") +# (action "layers-composite-mode-clip-to-layer") +# (action "edit-paste-in-place" "v" "Paste") +# (action "script-fu-make-brush-elliptical-feathered") +# (action "tools-aspect-minimum") +# (action "quick-mask-configure") +# (action "view-snap-to-bbox") +# (action "tools-object-1-first") +# (action "gimp-palette-export-java") +# (action "plug-in-grid") +# (action "script-fu-lava") +# (action "channels-color-tag-red") +# (action "context-brush-radius-decrease-skip") +# (action "context-brush-spikes-minimum") +# (action "layers-opacity-opaque") +# (action "context-foreground-blue-decrease-skip") +# (action "context-foreground-blue-set") +# (action "tools-angle-decrease") +# (action "context-brush-radius-decrease") +# (action "tools-object-1-previous") +# (action "paths-export") +# (action "tools-path" "b") +# (action "plug-in-animationoptimize-diff") +# (action "filters-dropshadow") +# (action "context-font-select-previous") +# (action "filters-maze") +# (action "plug-in-tile") +# (action "image-convert-u32") +# (action "paths-delete") +# (action "quick-mask-toggle" "q") +# (action "tools-paintbrush" "p") +# (action "layers-select-flattened-previous") +# (action "file-revert") +# (action "context-swatch-foreground-next" "0") +# (action "layers-anchor" "h") +# (action "context-foreground-saturation-maximum") +# (action "layers-opacity-set") +# (action "context-brush-aspect-maximum") +# (action "plug-in-goat-exercise-c") +# (action "quick-mask-invert-on") +# (action "layers-mask-selection-intersect") +# (action "image-softproof-intent-relative-colorimetric") +# (action "dialogs-dashboard") +# (action "drawable-levels-stretch") +# (action "layers-lock-content") +# (action "context-gradient-select-first") +# (action "tools-size-increase-skip" "braceright") +# (action "layers-mask-selection-replace") +# (action "script-fu-ripply-anim") +# (action "filters-supernova") +# (action "view-scroll-page-up") +# (action "context-background-saturation-increase-skip") +# (action "tools-hardness-increase-skip") +# (action "filters-focus-blur") +# (action "tools-eraser" "e") +# (action "dialogs-preferences") +# (action "channels-color-tag-yellow") +# (action "filters-brightness-contrast") +# (action "tools-size-set-to-default" "backslash") +# (action "drawable-lock-content") +# (action "view-scroll-down") +# (action "plug-in-palettemap") +# (action "tools-transform-preview-opacity-set") +# (action "filters-color-rotate") +# (action "view-padding-color-dark-check") +# (action "tools-ink-blob-aspect-set") +# (action "context-paint-mode-previous") +# (action "context-swatch-background-last") +# (action "channels-selection-subtract") +# (action "context-background-green-decrease") +# (action "context-colors-swap" "x") +# (action "filters-colorize") +# (action "image-resize-to-layers") +# (action "filters-gaussian-blur-selective") +# (action "view-rotate-set-absolute") +# (action "context-background-hue-decrease-skip") +# (action "file-gih-export-internal") +# (action "layers-text-along-path") +# (action "filters-waves") +# (action "tools-airbrush-flow-decrease-skip") +# (action "dialogs-device-status") +# (action "context-brush-radius-minimum") +# (action "view-scroll-page-right") +# (action "file-print-gtk") +# (action "debug-gtk-inspector") +# (action "filters-gegl-levels") +# (action "channels-lower") +# (action "dialogs-about") +# (action "filters-noise-reduction") +# (action "context-foreground-saturation-set") +# (action "filters-reinhard-2005") +# (action "plug-in-compose") +# (action "filters-panorama-projection") +# (action "layers-mask-delete") +# (action "filters-gegl-graph") +# (action "layers-composite-mode-auto") +# (action "filters-recent-01") +# (action "filters-noise-spread") +# (action "script-fu-sota-chrome-it") +# (action "windows-show-display-next" "Tab" "Forward") +# (action "filters-recent-02") +# (action "layers-color-tag-yellow") +# (action "gimp-online-docs-web-site") +# (action "context-foreground-green-set") +# (action "context-foreground-value-set") +# (action "context-background-saturation-increase") +# (action "filters-recent-03") +# (action "context-foreground-saturation-decrease") +# (action "dialogs-module-dialog") +# (action "plug-in-goat-exercise-gjs") +# (action "filters-invert-value") +# (action "view-color-management-enable") +# (action "view-show-layer-boundary") +# (action "context-gradient-select-last") +# (action "select-none" "a") +# (action "filters-recent-04") +# (action "channels-select-top") +# (action "tools-brightness-contrast") +# (action "view-show-selection" "t") +# (action "tools-aspect-increase-percent") +# (action "filters-recent-05") +# (action "context-background-red-increase") +# (action "context-background-blue-maximum") +# (action "filters-recent-06") +# (action "layers-alpha-remove") +# (action "context-foreground-value-decrease-skip") +# (action "plug-in-animationunoptimize") +# (action "tools-rotate" "r") +# (action "edit-strong-undo" "z") +# (action "layers-merge-down") +# (action "gimp-help-using-web") +# (action "image-convert-linear") +# (action "filters-gegl-voronoi-diagram") +# (action "tools-airbrush" "a") +# (action "filters-recent-07") +# (action "plug-in-spheredesigner") +# (action "script-fu-blend-anim") +# (action "layers-new-from-visible") +# (action "filters-recent-08") +# (action "tools-paintbrush-angle-set") +# (action "tools-force-increase-percent") +# (action "context-brush-spikes-set") +# (action "filters-variable-blur") +# (action "file-create-template") +# (action "filters-recent-09") +# (action "tools-mypaint-brush-radius-set") +# (action "dialogs-colors") +# (action "layers-color-tag-violet") +# (action "view-rotate-90") +# (action "edit-redo" "y") +# (action "tools-paintbrush-hardness-set") +# (action "tools-angle-decrease-percent") +# (action "context-brush-spacing-decrease-skip") +# (action "file-open-recent-01" "1") +# (action "context-brush-shape-diamond") +# (action "tools-threshold") +# (action "plug-in-despeckle") +# (action "filters-gegl-connected-components") +# (action "dialogs-palettes") +# (action "filters-polar-coordinates") +# (action "filters-mean-curvature-blur") +# (action "tools-zoom" "z") +# (action "windows-tabs-position-left") +# (action "filters-motion-blur-circular") +# (action "file-open-recent-02" "2") +# (action "paths-import") +# (action "dialogs-input-devices") +# (action "filters-gegl-bevel") +# (action "channels-color-tag-orange") +# (action "view-scroll-bottom-border") +# (action "context-foreground-hue-decrease-skip") +# (action "context-palette-foreground-previous") +# (action "file-open-recent-03" "3") +# (action "tools-paintbrush-spacing-set") +# (action "script-fu-coffee-stain") +# (action "plug-in-depth-merge") +# (action "tools-object-2-first") +# (action "layers-delete") +# (action "tools-object-1-last") +# (action "paths-duplicate") +# (action "filters-fractal-trace") +# (action "file-open-recent-04" "4") +# (action "edit-clear" "Delete") +# (action "file-quit" "q") +# (action "filters-checkerboard") +# (action "file-open-recent-05" "5") +# (action "tools-ink-blob-pixel-size-set") +# (action "view-snap-to-path") +# (action "layers-resize-to-image") +# (action "tools-ink-blob-size-set") +# (action "python-fu-histogram-export") +# (action "file-open-recent-06" "6") +# (action "layers-color-tag-none") +# (action "filters-red-eye-removal") +# (action "layers-mask-edit") +# (action "context-foreground-saturation-increase") +# (action "file-open-recent-07" "7") +# (action "view-scroll-up") +# (action "tools-spacing-increase-percent") +# (action "context-colormap-foreground-previous") +# (action "filters-little-planet") +# (action "layers-alpha-selection-replace") +# (action "plug-in-plug-in-details") +# (action "context-brush-angle-minimum") +# (action "file-open-recent-08" "8") +# (action "context-swatch-background-set") +# (action "context-background-value-maximum") +# (action "layers-mask-add-button") +# (action "image-rotate-180") +# (action "filters-noise-slur") +# (action "filters-edge-sobel") +# (action "tools-angle-increase-skip") +# (action "file-open-recent-09" "9") +# (action "tools-heal" "h") +# (action "gimp-help-using-simpleobjects") +# (action "filters-photocopy") +# (action "tools-spacing-decrease") +# (action "filters-channel-mixer") +# (action "dialogs-cursor") +# (action "file-pat-export-internal") +# (action "layers-lock-position") +# (action "plug-in-fractalexplorer") +# (action "layers-color-tag-orange") +# (action "image-resize-to-selection") +# (action "context-brush-hardness-maximum") +# (action "context-swatch-foreground-next-skip") +# (action "paths-visible") +# (action "channels-visible") +# (action "filters-gegl-bilateral-filter-fast") +# (action "select-sharpen") +# (action "context-gradient-select-set") +# (action "debug-dump-attached-data") +# (action "image-flip-vertical") +# (action "view-snap-to-grid") +# (action "script-fu-make-brush-rectangular") +# (action "filters-newsprint") +# (action "tools-mypaint-brush" "y") +# (action "context-swatch-background-next") +# (action "context-brush-angle-decrease-skip") +# (action "file-show-in-file-manager" "f") +# (action "dialogs-indexed-palette") +# (action "gimp-help-using-fileformats") +# (action "layers-composite-mode-intersection") +# (action "layers-alpha-selection-add") +# (action "dialogs-tool-options") +# (action "edit-copy-visible" "c" "Copy") +# (action "filters-distance-map") +# (action "gimp-online-bugs-features") +# (action "paths-lock-position") +# (action "dialogs-histogram") +# (action "channels-select-bottom") +# (action "filters-mantiuk-2006") +# (action "filters-gegl-gradient-map") +# (action "filters-gegl-color-assimilation-grid") +# (action "tools-force-minimum") +# (action "filters-tile-glass") +# (action "file-export-as" "e") +# (action "image-new" "n") +# (action "filters-dilate") +# (action "filters-invert-linear") +# (action "context-palette-select-last") +# (action "layers-rasterize") +# (action "plug-in-decompose") +# (action "filters-plasma") +# (action "tools-aspect-decrease-skip") +# (action "context-gradient-select-next") +# (action "layers-select-previous" "Page_Up") +# (action "windows-tab-position") +# (action "script-fu-drop-shadow") +# (action "paths-selection-replace") +# (action "view-display-intent-saturation") +# (action "context-background-red-maximum") +# (action "context-background-saturation-minimum") +# (action "filters-gegl-negative-darkroom") +# (action "select-cut-float" "l") +# (action "dialogs-buffers") +# (action "tools-color-picker" "o") +# (action "tools-warp-effect-size-set") +# (action "filters-gegl-inner-glow") +# (action "context-foreground-value-maximum") +# (action "filters-bayer-matrix") +# (action "context-background-saturation-set") +# (action "tools-spacing-increase") +# (action "filters-gegl-demosaic-bimedian") +# (action "view-show-sample-points") +# (action "channels-color-tag-brown") +# (action "paths-stroke") +# (action "filters-recent-10") +# (action "view-zoom-out" "minus" "KP_Subtract" "ZoomOut") +# (action "filters-gegl-fractal-explorer") +# (action "tools-opacity-decrease-skip" "less") +# (action "view-scroll-right") +# (action "view-zoom-revert" "grave") +# (action "filters-diffraction-patterns") +# (action "tools-align" "q") +# (action "windows-show-display-previous" "Tab" "Back") +# (action "filters-tile-seamless") +# (action "gimp-palette-export-php") +# (action "tools-angle-minimum") +# (action "filters-curves") +# (action "channels-raise-to-top") +# (action "layers-opacity-transparent") +# (action "tools-airbrush-flow-increase") +# (action "context-background-blue-increase-skip") +# (action "filters-whirl-pinch") +# (action "context-brush-select-set") +# (action "help-context-help" "F1") +# (action "tools-pencil" "n") +# (action "context-brush-hardness-increase-skip") +# (action "filters-edge") +# (action "tools-object-1-next") +# (action "layers-opacity-decrease-skip") +# (action "dialogs-channels") +# (action "filters-apply-canvas") +# (action "tools-opacity-decrease-percent") +# (action "file-open" "o") +# (action "script-fu-gradient-example") +# (action "debug-benchmark-projection") +# (action "script-fu-perspective-shadow") +# (action "plug-in-script-fu-console") +# (action "filters-hue-saturation") +# (action "context-background-red-decrease-skip") +# (action "view-scroll-left") +# (action "gimp-online-developer-web-site") +# (action "file-pdf-export-multi") +# (action "select-shrink") +# (action "view-zoom-fill") +# (action "plug-in-metadata-viewer") +# (action "context-dynamics-toggle") +# (action "plug-in-small-tiles") +# (action "filters-threshold-alpha") +# (action "layers-alpha-selection-intersect") +# (action "context-tool-select-previous") +# (action "context-brush-aspect-decrease-skip") +# (action "view-display-intent-absolute-colorimetric") +# (action "tools-hardness-minimum") +# (action "plug-in-colormap-swap") +# (action "script-fu-distress-selection") +# (action "filters-antialias") +# (action "tools-object-2-set") +# (action "tools-spacing-set") +# (action "layers-merge-down-button") +# (action "file-open-recent-10" "0") +# (action "channels-lower-to-bottom") +# (action "layers-color-tag-blue") +# (action "plug-in-align-layers") +# (action "tools-ink" "k") +# (action "view-show-guides" "t") +# (action "script-fu-tile-blur") +# (action "filters-exposure") +# (action "windows-tabs-position-top") +# (action "filters-mono-mixer") +# (action "view-move-to-screen-wayland-1") +# (action "filters-threshold") +# (action "tools-force-decrease") +# (action "filters-gegl-color-overlay") +# (action "tools-perspective-clone") +# (action "filters-bloom") +# (action "tools-opacity-maximum") +# (action "dialogs-brush-editor") +# (action "paths-selection-subtract") +# (action "context-font-select-set") +# (action "context-foreground-saturation-minimum") +# (action "layers-new-last-values") +# (action "context-colormap-foreground-last") +# (action "paths-raise") +# (action "paths-fill-last-values") +# (action "drawable-flip-horizontal") +# (action "layers-select-flattened-next") +# (action "tools-clone" "c") +# (action "edit-named-cut") +# (action "view-color-management-reset") +# (action "layers-select-top" "Home") +# (action "view-fullscreen" "F11") +# (action "layers-blend-space-auto") +# (action "filters-stretch-contrast") +# (action "plug-in-imagemap") +# (action "filters-deinterlace") +# (action "filters-gegl-demosaic-simple") +# (action "context-brush-angle-decrease") +# (action "filters-noise-hsv") +# (action "tools-mypaint-brush-pixel-size-set") +# (action "channels-color-tag-green") +# (action "tools-cage" "g") +# (action "context-foreground-hue-maximum") +# (action "gimp-help-using-docks") +# (action "file-close-all" "w") +# (action "context-background-saturation-decrease") +# (action "tools-paintbrush-size-set") +# (action "filters-gegl-absolute") +# (action "file-overwrite") +# (action "context-foreground-red-increase") +# (action "filters-saturation") +# (action "layers-alpha-add") +# (action "context-foreground-blue-maximum") +# (action "gimp-help-main") +# (action "tools-force-set") +# (action "context-foreground-green-decrease-skip") +# (action "image-flatten") +# (action "context-foreground-blue-increase-skip") +# (action "view-padding-color-theme") +# (action "tools-smudge" "s") +# (action "view-show-menubar") +# (action "image-crop-to-selection") +# (action "tools-paintbrush-aspect-ratio-set") +# (action "tools-paintbrush-pixel-size-set") +# (action "layers-mode-last") +# (action "view-zoom-in-skip") +# (action "filters-motion-blur-linear") +# (action "paths-select-previous") +# (action "context-pattern-select-first") +# (action "context-background-value-decrease-skip") +# (action "dialogs-tips") +# (action "plug-in-checkerboard") +# (action "view-zoom") +# (action "context-background-red-decrease") +# (action "view-scroll-vertical") +# (action "context-palette-select-next") +# (action "paths-selection-intersect") +# (action "context-tool-select-set") +# (action "context-foreground-red-decrease-skip") +# (action "layers-merge-group") +# (action "file-open-location") +# (action "image-rotate-90") +# (action "tools-gegl") +# (action "file-open-as-layers" "o") +# (action "script-fu-line-nova") +# (action "context-brush-radius-increase-skip") +# (action "filters-gegl-local-threshold") +# (action "layers-alpha-selection-subtract") +# (action "tools-foreground-select-brush-size-set") +# (action "dialogs-paths") +# (action "filters-noise-solid") +# (action "tools-size-increase" "bracketright") +# (action "dialogs-navigation") +# (action "filters-color-balance") +# (action "tools-unified-transform" "t") +# (action "filters-cubism") +# (action "tools-force-increase") +# (action "tools-by-color-select-short") +# (action "image-softproof-profile") +# (action "tools-angle-increase-percent") +# (action "dialogs-palette-editor") +# (action "edit-paste-into-in-place") +# (action "drawable-rotate-270") +# (action "view-zoom-other") +# (action "context-swatch-background-previous") +# (action "context-foreground-value-decrease") +# (action "filters-gegl-band-tune") +# (action "filters-gegl-styles") +# (action "context-foreground-red-set") +# (action "filters-alien-map") +# (action "drawable-equalize") +# (action "context-colormap-background-first") +# (action "tools-iscissors" "i") +# (action "debug-show-image-graph") +# (action "filters-gegl-denoise-dct") +# (action "context-background-hue-increase-skip") +# (action "dialogs-fonts") +# (action "context-brush-angle-increase") +# (action "tools-airbrush-flow-maximum") +# (action "tools-airbrush-flow-increase-skip") +# (action "paths-select-next") +# (action "tools-paint-select-pixel-size-set") +# (action "filters-lens-flare") +# (action "plug-in-sample-colorize") +# (action "tools-hardness-increase") +# (action "layers-crop-to-content") +# (action "context-gradient-select-previous") +# (action "view-flip-vertically") +# (action "channels-edit-attributes") +# (action "tools-ellipse-select" "e") +# (action "script-fu-spinning-globe") +# (action "plug-in-hot") +# (action "tools-bucket-fill" "b") +# (action "filters-apply-lens") +# (action "context-brush-aspect-set") +# (action "plug-in-destripe") +# (action "image-properties" "Return") +# (action "paths-merge-visible") +# (action "tools-spacing-minimum") +# (action "python-fu-palette-offset") +# (action "drawable-rotate-90") +# (action "filters-gegl-lens-correct") +# (action "python-fu-palette-export-as-kpl") +# (action "context-brush-select-previous") +# (action "plug-in-map-object") +# (action "view-rotate-270") +# (action "script-fu-slide") +# (action "windows-display-0001") +# (action "tools-hardness-increase-percent") +# (action "context-brush-radius-increase-percent") +# (action "script-fu-addborder") +# (action "file-open-as-link-layers" "o") +# (action "context-brush-aspect-increase") +# (action "paths-color-tag-none") +# (action "channels-lock-position") +# (action "dialogs-sample-points") +# (action "context-opacity-opaque") +# (action "filters-noise-cell") +# (action "filters-gegl-unpremultiply") +# (action "script-fu-selection-rounded-rectangle") +# (action "plug-in-guillotine") +# (action "context-brush-radius-decrease-less") +# (action "context-opacity-transparent") +# (action "plug-in-script-fu-server") +# (action "channels-lock-content") +# (action "tools-perspective" "p") +# (action "context-foreground-value-increase-skip") +# (action "paths-new-last-values") +# (action "filters-spherize") +# (action "view-zoom-4-1" "3" "KP_3") +# (action "context-colormap-background-set") +# (action "filters-gegl-vibrance") +# (action "context-colormap-foreground-next") +# (action "paths-color-tag-red") +# (action "quick-mask-invert-off") +# (action "context-foreground-value-increase") +# (action "filters-ripple") +# (action "layers-color-tag-gray") +# (action "context-brush-spacing-increase-skip") +# (action "filters-stress") +# (action "tools-foreground-select") +# (action "image-convert-u8") +# (action "paths-fill") +# (action "gimp-palette-export-python") +# (action "context-foreground-hue-increase-skip") +# (action "tools-aspect-set-to-default") +# (action "layers-text-to-path") +# (action "context-background-hue-decrease") +# (action "context-pattern-select-set") +# (action "filters-reshow" "f") +# (action "context-colormap-foreground-first") +# (action "layers-mode-next") +# (action "plug-in-recompose") +# (action "gimp-online-main-web-site") +# (action "context-colormap-background-last") +# (action "layers-color-tag-brown") +# (action "context-palette-foreground-last") +# (action "python-fu-gradient-save-as-css") +# (action "tools-object-1-set") +# (action "view-shrink-wrap" "j") +# (action "paths-new") +# (action "layers-composite-mode-clip-to-backdrop") +# (action "dialogs-symmetry") +# (action "layers-crop-to-selection") +# (action "filters-rgb-clip") +# (action "channels-color-tag-none") +# (action "tools-convolve" "u") +# (action "view-softproof-gamut-check") +# (action "dialogs-error-console") +# (action "layers-composite-space-auto") +# (action "layers-opacity-increase") +# (action "script-fu-carve-it") +# (action "layers-revert-rasterize") +# (action "filters-spiral") +# (action "layers-lock-alpha") +# (action "edit-paste-as-new-image" "v" "Paste") +# (action "script-fu-font-map") + +# end of shortcutsrc diff --git a/config/GIMP/3.2/tags.xml b/config/GIMP/3.2/tags.xml new file mode 100644 index 0000000..487b82f --- /dev/null +++ b/config/GIMP/3.2/tags.xml @@ -0,0 +1,4059 @@ + + + + + round + + + + fuzzy + round + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/GIMP/3.2/templaterc b/config/GIMP/3.2/templaterc new file mode 100644 index 0000000..e66dd29 --- /dev/null +++ b/config/GIMP/3.2/templaterc @@ -0,0 +1,638 @@ +# GIMP templaterc +# +# This file will be entirely rewritten each time you exit. + +(GimpTemplate "A0 (300 ppi)" + (width 9933) + (height 14043) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "A1 (300 ppi)" + (width 7016) + (height 9933) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "A2 (300 ppi)" + (width 4960) + (height 7016) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "A3 (300 ppi)" + (width 3508) + (height 4960) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "A4 (300 ppi)" + (width 2480) + (height 3508) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "A5 (300 ppi)" + (width 1748) + (height 2480) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "A6 (300 ppi)" + (width 1240) + (height 1748) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "A7 (300 ppi)" + (width 874) + (height 1240) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "B4 (300 ppi)" + (width 2953) + (height 4169) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "B5 (300 ppi)" + (width 2079) + (height 2953) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "B5-Japan (300 ppi)" + (width 2150) + (height 3035) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "US Letter (300 ppi)" + (width 2550) + (height 3300) + (unit inches) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "US Legal (300 ppi)" + (width 2550) + (height 4200) + (unit inches) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "88.9×50.8 US Business Card" + (icon-name "gimp-business-card") + (width 1050) + (height 600) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "85×55 Western Europe Business Card" + (icon-name "gimp-business-card") + (width 1004) + (height 650) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "90×50 Eastern Europe Business Card" + (icon-name "gimp-business-card") + (width 1063) + (height 591) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "90×55 Business Card (AU, IN etc.)" + (icon-name "gimp-business-card") + (width 1063) + (height 650) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Toilet paper (US, 300 ppi)" + (icon-name "gimp-toilet-paper") + (width 1350) + (height 1350) + (unit inches) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "CD cover (300 ppi)" + (icon-name "media-optical") + (width 1417) + (height 1417) + (unit millimeters) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Web profile / avatar / icon 512×512" + (icon-name "gimp-web") + (width 512) + (height 512) + (unit pixels) + (xresolution 150) + (yresolution 150) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Web banner leaderboard 728×90" + (icon-name "gimp-web") + (width 728) + (height 90) + (unit pixels) + (xresolution 72) + (yresolution 72) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Web banner half page 300×600" + (icon-name "gimp-web") + (width 300) + (height 600) + (unit pixels) + (xresolution 72) + (yresolution 72) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Web banner medium rectangle 300×250" + (icon-name "gimp-web") + (width 300) + (height 250) + (unit pixels) + (xresolution 72) + (yresolution 72) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Web banner wide skyscraper 160×600" + (icon-name "gimp-web") + (width 160) + (height 600) + (unit pixels) + (xresolution 72) + (yresolution 72) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Web banner mobile leaderboard 320×50" + (icon-name "gimp-web") + (width 320) + (height 50) + (unit pixels) + (xresolution 72) + (yresolution 72) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 4:3 - 1024×768 (XGA)" + (icon-name "gimp-display") + (width 1024) + (height 768) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 4:3 - 1152×864 (XGA+)" + (icon-name "gimp-display") + (width 1152) + (height 864) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 4:3 - 1600×1200 (UXGA)" + (icon-name "gimp-display") + (width 1600) + (height 1200) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 4:3 - 2048×1536 (QXGA)" + (icon-name "gimp-display") + (width 2048) + (height 1536) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 16:10 - 1680×1050 (WSXGA+)" + (icon-name "gimp-display") + (width 1680) + (height 1050) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 16:10 - 1920×1200 (WUXGA)" + (icon-name "gimp-display") + (width 1920) + (height 1200) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 16:10 - 2560×1600 (WQXGA)" + (icon-name "gimp-display") + (width 2560) + (height 1600) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 16:10 - 3840×2400 (WQUXGA)" + (icon-name "gimp-display") + (width 3840) + (height 2400) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 16:9 - 1280×720 (HD 720p)" + (icon-name "gimp-video") + (width 1280) + (height 720) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 16:9 - 1920×1080 (Full HD 1080p)" + (icon-name "gimp-video") + (width 1920) + (height 1080) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 16:9 - 3840×2160 (4K UHD)" + (icon-name "gimp-video") + (width 3840) + (height 2160) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 16:9 - 7680×4320 (8K UHD)" + (icon-name "gimp-video") + (width 7680) + (height 4320) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 17:9 - 2048×1080 (DCI 2K)" + (icon-name "gimp-video") + (width 2048) + (height 1080) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Display - 17:9 - 4096×2160 (DCI 4K)" + (icon-name "gimp-video") + (width 4096) + (height 2160) + (unit pixels) + (xresolution 300) + (yresolution 300) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Phone - 18.5:9 - 1440×2960" + (icon-name "gimp-smartphone") + (width 1440) + (height 2960) + (unit pixels) + (xresolution 500) + (yresolution 500) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Phone - 19:9 - 1440×3040" + (icon-name "gimp-smartphone") + (width 1440) + (height 3040) + (unit pixels) + (xresolution 500) + (yresolution 500) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Phone - 19.5:9 - 1440×3120" + (icon-name "gimp-smartphone") + (width 1440) + (height 3120) + (unit pixels) + (xresolution 500) + (yresolution 500) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) +(GimpTemplate "Phone - 20:9 - 1440×3200" + (icon-name "gimp-smartphone") + (width 1440) + (height 3200) + (unit pixels) + (xresolution 500) + (yresolution 500) + (resolution-unit inches) + (image-type rgb) + (precision u8-non-linear) + (color-profile NULL) + (simulation-profile NULL) + (simulation-bpc no) + (simulation-intent relative-colorimetric) + (fill-type background)) + +# end of templaterc diff --git a/config/GIMP/3.2/theme.css b/config/GIMP/3.2/theme.css new file mode 100644 index 0000000..98f9ebd --- /dev/null +++ b/config/GIMP/3.2/theme.css @@ -0,0 +1,16 @@ +/* GIMP theme.css + * + * This file is written on GIMP startup and on every theme change. + * It is NOT supposed to be edited manually. Edit your personal + * gimp.css file instead (/home/afoucaultc/.config/GIMP/3.2/gimp.css). + */ + +@import url("file:///usr/share/gimp/3.0/themes/Default/gimp-dark.css"); +@import url("file:///etc/gimp/3.0/gimp.css"); + +* { -gtk-icon-style: symbolic; } + +/* prefer-dark-theme */ + + +/* end of theme.css */ diff --git a/config/GIMP/3.2/tool-options/gimp-airbrush-tool b/config/GIMP/3.2/tool-options/gimp-airbrush-tool new file mode 100644 index 0000000..5a259a8 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-airbrush-tool @@ -0,0 +1,15 @@ +# GIMP gimp-airbrush-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(gradient "Standard") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-airbrush-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-align-tool b/config/GIMP/3.2/tool-options/gimp-align-tool new file mode 100644 index 0000000..521b3bf --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-align-tool @@ -0,0 +1,4 @@ +# GIMP gimp-align-tool options + + +# end of gimp-align-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-brightness-contrast-tool b/config/GIMP/3.2/tool-options/gimp-brightness-contrast-tool new file mode 100644 index 0000000..16bc2d3 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-brightness-contrast-tool @@ -0,0 +1,4 @@ +# GIMP gimp-brightness-contrast-tool options + + +# end of gimp-brightness-contrast-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-bucket-fill-tool b/config/GIMP/3.2/tool-options/gimp-bucket-fill-tool new file mode 100644 index 0000000..d32a98d --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-bucket-fill-tool @@ -0,0 +1,11 @@ +# GIMP gimp-bucket-fill-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(pattern "Pine") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-bucket-fill-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-by-color-select-tool b/config/GIMP/3.2/tool-options/gimp-by-color-select-tool new file mode 100644 index 0000000..434e5db --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-by-color-select-tool @@ -0,0 +1,4 @@ +# GIMP gimp-by-color-select-tool options + + +# end of gimp-by-color-select-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-cage-tool b/config/GIMP/3.2/tool-options/gimp-cage-tool new file mode 100644 index 0000000..70074a2 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-cage-tool @@ -0,0 +1,4 @@ +# GIMP gimp-cage-tool options + + +# end of gimp-cage-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-clone-tool b/config/GIMP/3.2/tool-options/gimp-clone-tool new file mode 100644 index 0000000..e2ec462 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-clone-tool @@ -0,0 +1,14 @@ +# GIMP gimp-clone-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-clone-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-color-picker-tool b/config/GIMP/3.2/tool-options/gimp-color-picker-tool new file mode 100644 index 0000000..29ff36f --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-color-picker-tool @@ -0,0 +1,8 @@ +# GIMP gimp-color-picker-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-color-picker-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-convolve-tool b/config/GIMP/3.2/tool-options/gimp-convolve-tool new file mode 100644 index 0000000..67207e9 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-convolve-tool @@ -0,0 +1,14 @@ +# GIMP gimp-convolve-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-convolve-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-crop-tool b/config/GIMP/3.2/tool-options/gimp-crop-tool new file mode 100644 index 0000000..3b019c7 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-crop-tool @@ -0,0 +1,9 @@ +# GIMP gimp-crop-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(pattern "Pine") + +# end of gimp-crop-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-curves-tool b/config/GIMP/3.2/tool-options/gimp-curves-tool new file mode 100644 index 0000000..b7a332b --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-curves-tool @@ -0,0 +1,4 @@ +# GIMP gimp-curves-tool options + + +# end of gimp-curves-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-dodge-burn-tool b/config/GIMP/3.2/tool-options/gimp-dodge-burn-tool new file mode 100644 index 0000000..0f8fcaf --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-dodge-burn-tool @@ -0,0 +1,13 @@ +# GIMP gimp-dodge-burn-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-dodge-burn-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-ellipse-select-tool b/config/GIMP/3.2/tool-options/gimp-ellipse-select-tool new file mode 100644 index 0000000..5b00a25 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-ellipse-select-tool @@ -0,0 +1,4 @@ +# GIMP gimp-ellipse-select-tool options + + +# end of gimp-ellipse-select-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-eraser-tool b/config/GIMP/3.2/tool-options/gimp-eraser-tool new file mode 100644 index 0000000..c59e4bf --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-eraser-tool @@ -0,0 +1,13 @@ +# GIMP gimp-eraser-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-eraser-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-flip-tool b/config/GIMP/3.2/tool-options/gimp-flip-tool new file mode 100644 index 0000000..07b1c5c --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-flip-tool @@ -0,0 +1,6 @@ +# GIMP gimp-flip-tool options + +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-flip-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-foreground-select-tool b/config/GIMP/3.2/tool-options/gimp-foreground-select-tool new file mode 100644 index 0000000..6aac752 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-foreground-select-tool @@ -0,0 +1,8 @@ +# GIMP gimp-foreground-select-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-foreground-select-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-free-select-tool b/config/GIMP/3.2/tool-options/gimp-free-select-tool new file mode 100644 index 0000000..86b6ab3 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-free-select-tool @@ -0,0 +1,4 @@ +# GIMP gimp-free-select-tool options + + +# end of gimp-free-select-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-fuzzy-select-tool b/config/GIMP/3.2/tool-options/gimp-fuzzy-select-tool new file mode 100644 index 0000000..a0f7bdb --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-fuzzy-select-tool @@ -0,0 +1,4 @@ +# GIMP gimp-fuzzy-select-tool options + + +# end of gimp-fuzzy-select-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-gegl-tool b/config/GIMP/3.2/tool-options/gimp-gegl-tool new file mode 100644 index 0000000..f085e5f --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-gegl-tool @@ -0,0 +1,4 @@ +# GIMP gimp-gegl-tool options + + +# end of gimp-gegl-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-gradient-tool b/config/GIMP/3.2/tool-options/gimp-gradient-tool new file mode 100644 index 0000000..fc0dd3d --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-gradient-tool @@ -0,0 +1,11 @@ +# GIMP gimp-gradient-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(gradient "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-gradient-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-handle-transform-tool b/config/GIMP/3.2/tool-options/gimp-handle-transform-tool new file mode 100644 index 0000000..8192227 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-handle-transform-tool @@ -0,0 +1,6 @@ +# GIMP gimp-handle-transform-tool options + +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-handle-transform-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-heal-tool b/config/GIMP/3.2/tool-options/gimp-heal-tool new file mode 100644 index 0000000..11383a1 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-heal-tool @@ -0,0 +1,14 @@ +# GIMP gimp-heal-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-heal-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-ink-tool b/config/GIMP/3.2/tool-options/gimp-ink-tool new file mode 100644 index 0000000..1ca90cc --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-ink-tool @@ -0,0 +1,11 @@ +# GIMP gimp-ink-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(pattern "Pine") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-ink-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-iscissors-tool b/config/GIMP/3.2/tool-options/gimp-iscissors-tool new file mode 100644 index 0000000..fb42baf --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-iscissors-tool @@ -0,0 +1,4 @@ +# GIMP gimp-iscissors-tool options + + +# end of gimp-iscissors-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-levels-tool b/config/GIMP/3.2/tool-options/gimp-levels-tool new file mode 100644 index 0000000..04c0f93 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-levels-tool @@ -0,0 +1,4 @@ +# GIMP gimp-levels-tool options + + +# end of gimp-levels-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-measure-tool b/config/GIMP/3.2/tool-options/gimp-measure-tool new file mode 100644 index 0000000..ec7cff3 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-measure-tool @@ -0,0 +1,4 @@ +# GIMP gimp-measure-tool options + + +# end of gimp-measure-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-move-tool b/config/GIMP/3.2/tool-options/gimp-move-tool new file mode 100644 index 0000000..b9721a8 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-move-tool @@ -0,0 +1,4 @@ +# GIMP gimp-move-tool options + + +# end of gimp-move-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-mypaint-brush-tool b/config/GIMP/3.2/tool-options/gimp-mypaint-brush-tool new file mode 100644 index 0000000..46cb2ae --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-mypaint-brush-tool @@ -0,0 +1,16 @@ +# GIMP gimp-mypaint-brush-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(mybrush "100% Opaque") +(pattern "Pine") +(brush-size 51) +(brush-hardness 0.5) +(radius 3.0099999904632568) +(hardness 0.94999998807907104) +(pigment 1) +(posterizenum 0.05000000074505806) + +# end of gimp-mypaint-brush-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-offset-tool b/config/GIMP/3.2/tool-options/gimp-offset-tool new file mode 100644 index 0000000..8670636 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-offset-tool @@ -0,0 +1,6 @@ +# GIMP gimp-offset-tool options + +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-offset-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-operation-tool b/config/GIMP/3.2/tool-options/gimp-operation-tool new file mode 100644 index 0000000..df20fe0 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-operation-tool @@ -0,0 +1,8 @@ +# GIMP gimp-operation-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-operation-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-paintbrush-tool b/config/GIMP/3.2/tool-options/gimp-paintbrush-tool new file mode 100644 index 0000000..120a896 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-paintbrush-tool @@ -0,0 +1,15 @@ +# GIMP gimp-paintbrush-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(gradient "Standard") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-paintbrush-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-path-tool b/config/GIMP/3.2/tool-options/gimp-path-tool new file mode 100644 index 0000000..87ff69c --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-path-tool @@ -0,0 +1,13 @@ +# GIMP gimp-path-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(gradient "Standard") +(palette "Standard") + +# end of gimp-path-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-pencil-tool b/config/GIMP/3.2/tool-options/gimp-pencil-tool new file mode 100644 index 0000000..d26e78d --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-pencil-tool @@ -0,0 +1,15 @@ +# GIMP gimp-pencil-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(gradient "Standard") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-pencil-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-perspective-clone-tool b/config/GIMP/3.2/tool-options/gimp-perspective-clone-tool new file mode 100644 index 0000000..411e119 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-perspective-clone-tool @@ -0,0 +1,14 @@ +# GIMP gimp-perspective-clone-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-perspective-clone-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-perspective-tool b/config/GIMP/3.2/tool-options/gimp-perspective-tool new file mode 100644 index 0000000..4a3c437 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-perspective-tool @@ -0,0 +1,6 @@ +# GIMP gimp-perspective-tool options + +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-perspective-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-rect-select-tool b/config/GIMP/3.2/tool-options/gimp-rect-select-tool new file mode 100644 index 0000000..25bc900 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-rect-select-tool @@ -0,0 +1,4 @@ +# GIMP gimp-rect-select-tool options + + +# end of gimp-rect-select-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-rotate-tool b/config/GIMP/3.2/tool-options/gimp-rotate-tool new file mode 100644 index 0000000..5c502db --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-rotate-tool @@ -0,0 +1,6 @@ +# GIMP gimp-rotate-tool options + +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-rotate-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-scale-tool b/config/GIMP/3.2/tool-options/gimp-scale-tool new file mode 100644 index 0000000..8423901 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-scale-tool @@ -0,0 +1,6 @@ +# GIMP gimp-scale-tool options + +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-scale-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-shear-tool b/config/GIMP/3.2/tool-options/gimp-shear-tool new file mode 100644 index 0000000..b1cf8f8 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-shear-tool @@ -0,0 +1,4 @@ +# GIMP gimp-shear-tool options + + +# end of gimp-shear-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-smudge-tool b/config/GIMP/3.2/tool-options/gimp-smudge-tool new file mode 100644 index 0000000..411693d --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-smudge-tool @@ -0,0 +1,15 @@ +# GIMP gimp-smudge-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) +(brush "2. Hardness 050") +(dynamics "Pressure Size") +(pattern "Pine") +(gradient "Standard") +(palette "Standard") +(brush-size 51) +(brush-hardness 0.5) + +# end of gimp-smudge-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-text-tool b/config/GIMP/3.2/tool-options/gimp-text-tool new file mode 100644 index 0000000..6215990 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-text-tool @@ -0,0 +1,8 @@ +# GIMP gimp-text-tool options + +(foreground + (color "HSVA float" 16 "\0\0\0\0\0\0\0\0\0\0\200\77\0\0\200\77" 0)) +(palette "Standard") +(font "Monospace") + +# end of gimp-text-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-threshold-tool b/config/GIMP/3.2/tool-options/gimp-threshold-tool new file mode 100644 index 0000000..f114556 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-threshold-tool @@ -0,0 +1,4 @@ +# GIMP gimp-threshold-tool options + + +# end of gimp-threshold-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-transform-3d-tool b/config/GIMP/3.2/tool-options/gimp-transform-3d-tool new file mode 100644 index 0000000..63c59e0 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-transform-3d-tool @@ -0,0 +1,6 @@ +# GIMP gimp-transform-3d-tool options + +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-transform-3d-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-unified-transform-tool b/config/GIMP/3.2/tool-options/gimp-unified-transform-tool new file mode 100644 index 0000000..a085029 --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-unified-transform-tool @@ -0,0 +1,6 @@ +# GIMP gimp-unified-transform-tool options + +(background + (color "HSVA float" 16 "\51\376\15\77\305N\227\76R\232i\77\0\0\200\77" 0)) + +# end of gimp-unified-transform-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-warp-tool b/config/GIMP/3.2/tool-options/gimp-warp-tool new file mode 100644 index 0000000..e837f9e --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-warp-tool @@ -0,0 +1,4 @@ +# GIMP gimp-warp-tool options + + +# end of gimp-warp-tool options diff --git a/config/GIMP/3.2/tool-options/gimp-zoom-tool b/config/GIMP/3.2/tool-options/gimp-zoom-tool new file mode 100644 index 0000000..316363e --- /dev/null +++ b/config/GIMP/3.2/tool-options/gimp-zoom-tool @@ -0,0 +1,4 @@ +# GIMP gimp-zoom-tool options + + +# end of gimp-zoom-tool options diff --git a/config/GIMP/3.2/toolrc b/config/GIMP/3.2/toolrc new file mode 100644 index 0000000..873d75d --- /dev/null +++ b/config/GIMP/3.2/toolrc @@ -0,0 +1,185 @@ +# GIMP toolrc + +(file-version 1) + +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-move-tool") + (children + (GimpToolInfo "gimp-move-tool" + (icon-name "gimp-tool-move") + (visible yes)) + (GimpToolInfo "gimp-align-tool" + (icon-name "gimp-tool-align") + (visible yes)))) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-rect-select-tool") + (children + (GimpToolInfo "gimp-rect-select-tool" + (icon-name "gimp-tool-rect-select") + (visible yes)) + (GimpToolInfo "gimp-ellipse-select-tool" + (icon-name "gimp-tool-ellipse-select") + (visible yes)))) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-free-select-tool") + (children + (GimpToolInfo "gimp-free-select-tool" + (icon-name "gimp-tool-free-select") + (visible yes)) + (GimpToolInfo "gimp-iscissors-tool" + (icon-name "gimp-tool-iscissors") + (visible yes)) + (GimpToolInfo "gimp-foreground-select-tool" + (icon-name "gimp-tool-foreground-select") + (visible yes)))) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-fuzzy-select-tool") + (children + (GimpToolInfo "gimp-fuzzy-select-tool" + (icon-name "gimp-tool-fuzzy-select") + (visible yes)) + (GimpToolInfo "gimp-by-color-select-tool" + (icon-name "gimp-tool-by-color-select") + (visible yes)))) +(GimpToolInfo "gimp-crop-tool" + (icon-name "gimp-tool-crop") + (visible yes)) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-unified-transform-tool") + (children + (GimpToolInfo "gimp-unified-transform-tool" + (icon-name "gimp-tool-unified-transform") + (visible yes)) + (GimpToolInfo "gimp-rotate-tool" + (icon-name "gimp-tool-rotate") + (visible yes)) + (GimpToolInfo "gimp-scale-tool" + (icon-name "gimp-tool-scale") + (visible yes)) + (GimpToolInfo "gimp-shear-tool" + (icon-name "gimp-tool-shear") + (visible yes)) + (GimpToolInfo "gimp-flip-tool" + (icon-name "gimp-tool-flip") + (visible yes)) + (GimpToolInfo "gimp-perspective-tool" + (icon-name "gimp-tool-perspective") + (visible yes)) + (GimpToolInfo "gimp-transform-3d-tool" + (icon-name "gimp-tool-transform-3d") + (visible yes)) + (GimpToolInfo "gimp-handle-transform-tool" + (icon-name "gimp-tool-handle-transform") + (visible yes)))) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-warp-tool") + (children + (GimpToolInfo "gimp-warp-tool" + (icon-name "gimp-tool-warp") + (visible yes)) + (GimpToolInfo "gimp-cage-tool" + (icon-name "gimp-tool-cage") + (visible yes)))) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-bucket-fill-tool") + (children + (GimpToolInfo "gimp-bucket-fill-tool" + (icon-name "gimp-tool-bucket-fill") + (visible yes)) + (GimpToolInfo "gimp-gradient-tool" + (icon-name "gimp-tool-gradient") + (visible yes)))) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-paintbrush-tool") + (children + (GimpToolInfo "gimp-paintbrush-tool" + (icon-name "gimp-tool-paintbrush") + (visible yes)) + (GimpToolInfo "gimp-pencil-tool" + (icon-name "gimp-tool-pencil") + (visible yes)) + (GimpToolInfo "gimp-airbrush-tool" + (icon-name "gimp-tool-airbrush") + (visible yes)) + (GimpToolInfo "gimp-ink-tool" + (icon-name "gimp-tool-ink") + (visible yes)) + (GimpToolInfo "gimp-mypaint-brush-tool" + (icon-name "gimp-tool-mypaint-brush") + (visible yes)))) +(GimpToolInfo "gimp-eraser-tool" + (icon-name "gimp-tool-eraser") + (visible yes)) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-clone-tool") + (children + (GimpToolInfo "gimp-clone-tool" + (icon-name "gimp-tool-clone") + (visible yes)) + (GimpToolInfo "gimp-perspective-clone-tool" + (icon-name "gimp-tool-perspective-clone") + (visible yes)) + (GimpToolInfo "gimp-heal-tool" + (icon-name "gimp-tool-heal") + (visible yes)))) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-smudge-tool") + (children + (GimpToolInfo "gimp-smudge-tool" + (icon-name "gimp-tool-smudge") + (visible yes)) + (GimpToolInfo "gimp-convolve-tool" + (icon-name "gimp-tool-blur") + (visible yes)) + (GimpToolInfo "gimp-dodge-burn-tool" + (icon-name "gimp-tool-dodge") + (visible yes)))) +(GimpToolInfo "gimp-path-tool" + (icon-name "gimp-tool-path") + (visible yes)) +(GimpToolInfo "gimp-text-tool" + (icon-name "gimp-tool-text") + (visible yes)) +(GimpToolGroup "tool group" + (visible yes) + (active-tool "gimp-color-picker-tool") + (children + (GimpToolInfo "gimp-color-picker-tool" + (icon-name "gimp-tool-color-picker") + (visible yes)) + (GimpToolInfo "gimp-measure-tool" + (icon-name "gimp-tool-measure") + (visible yes)))) +(GimpToolInfo "gimp-zoom-tool" + (icon-name "gimp-tool-zoom") + (visible yes)) +(GimpToolInfo "gimp-brightness-contrast-tool" + (icon-name "gimp-tool-brightness-contrast") + (visible no)) +(GimpToolInfo "gimp-threshold-tool" + (icon-name "gimp-tool-threshold") + (visible no)) +(GimpToolInfo "gimp-levels-tool" + (icon-name "gimp-tool-levels") + (visible no)) +(GimpToolInfo "gimp-curves-tool" + (icon-name "gimp-tool-curves") + (visible no)) +(GimpToolInfo "gimp-offset-tool" + (icon-name "gimp-tool-offset") + (visible no)) +(GimpToolInfo "gimp-gegl-tool" + (icon-name "gimp-gegl") + (visible no)) + +# end of toolrc diff --git a/config/GIMP/3.2/unitrc b/config/GIMP/3.2/unitrc new file mode 100644 index 0000000..0fdcbf6 --- /dev/null +++ b/config/GIMP/3.2/unitrc @@ -0,0 +1,39 @@ +# GIMP units +# +# This file contains the user unit database. You can edit this list with the +# unit editor. You are not supposed to edit it manually, but of course you +# can do. +# This file will be entirely rewritten each time you exit. + +(unit-info "centimeters" + (factor 2.54) + (digits 2) + (symbol "cm") + (abbreviation "cm")) +(unit-info "meters" + (factor 0.025399999999999999) + (digits 4) + (symbol "m") + (abbreviation "m")) +(unit-info "feet" + (factor 0.083333000000000004) + (digits 4) + (symbol "'") + (abbreviation "ft")) +(unit-info "yards" + (factor 0.027778000000000001) + (digits 4) + (symbol "yd") + (abbreviation "yd")) +(unit-info "typogr. points" + (factor 72.269999999999996) + (digits 0) + (symbol "tpt") + (abbreviation "tpt")) +(unit-info "typogr. picas" + (factor 6.0225) + (digits 1) + (symbol "tpc") + (abbreviation "tpc")) + +# end of units diff --git a/config/Typora/.org.chromium.Chromium.U59phO b/config/Typora/.org.chromium.Chromium.U59phO new file mode 100644 index 0000000..2f4fff2 --- /dev/null +++ b/config/Typora/.org.chromium.Chromium.U59phO @@ -0,0 +1 @@ +{"sts":[{"expiry":1810110202.908661,"host":"1PLIjm3kQPQW4cJb6E24uRsQPnrWHtm+crYMNKC5TJc=","mode":"force-https","sts_include_subdomains":false,"sts_observed":1778574202.908664},{"expiry":1808297514.942949,"host":"9p2HyjfRHTY1k11+vvkfYT9BeB1pfXOFjikz3LqAlIQ=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1776761514.94296}],"version":2} \ No newline at end of file diff --git a/config/Typora/Cache/Cache_Data/86e900be1c63d201_0 b/config/Typora/Cache/Cache_Data/86e900be1c63d201_0 new file mode 100644 index 0000000..dc6bedd Binary files /dev/null and b/config/Typora/Cache/Cache_Data/86e900be1c63d201_0 differ diff --git a/config/Typora/Cache/Cache_Data/ad2d9a956510fa69_0 b/config/Typora/Cache/Cache_Data/ad2d9a956510fa69_0 new file mode 100644 index 0000000..8ac1fbd Binary files /dev/null and b/config/Typora/Cache/Cache_Data/ad2d9a956510fa69_0 differ diff --git a/config/Typora/Cache/Cache_Data/d5d96c1136523c15_0 b/config/Typora/Cache/Cache_Data/d5d96c1136523c15_0 new file mode 100644 index 0000000..f0b9f43 Binary files /dev/null and b/config/Typora/Cache/Cache_Data/d5d96c1136523c15_0 differ diff --git a/config/Typora/Cache/Cache_Data/e50d4c815f349bdf_0 b/config/Typora/Cache/Cache_Data/e50d4c815f349bdf_0 new file mode 100644 index 0000000..1c603bc Binary files /dev/null and b/config/Typora/Cache/Cache_Data/e50d4c815f349bdf_0 differ diff --git a/config/Typora/Cache/Cache_Data/index b/config/Typora/Cache/Cache_Data/index new file mode 100644 index 0000000..79bd403 Binary files /dev/null and b/config/Typora/Cache/Cache_Data/index differ diff --git a/config/Typora/Cache/Cache_Data/index-dir/the-real-index b/config/Typora/Cache/Cache_Data/index-dir/the-real-index new file mode 100644 index 0000000..afde015 Binary files /dev/null and b/config/Typora/Cache/Cache_Data/index-dir/the-real-index differ diff --git a/config/Typora/Code Cache/js/index b/config/Typora/Code Cache/js/index new file mode 100644 index 0000000..79bd403 Binary files /dev/null and b/config/Typora/Code Cache/js/index differ diff --git a/config/Typora/Code Cache/js/index-dir/the-real-index b/config/Typora/Code Cache/js/index-dir/the-real-index new file mode 100644 index 0000000..06739af Binary files /dev/null and b/config/Typora/Code Cache/js/index-dir/the-real-index differ diff --git a/config/Typora/Code Cache/wasm/index b/config/Typora/Code Cache/wasm/index new file mode 100644 index 0000000..79bd403 Binary files /dev/null and b/config/Typora/Code Cache/wasm/index differ diff --git a/config/Typora/Code Cache/wasm/index-dir/the-real-index b/config/Typora/Code Cache/wasm/index-dir/the-real-index new file mode 100644 index 0000000..85a47bf Binary files /dev/null and b/config/Typora/Code Cache/wasm/index-dir/the-real-index differ diff --git a/config/Typora/Cookies b/config/Typora/Cookies new file mode 100644 index 0000000..403b7f0 Binary files /dev/null and b/config/Typora/Cookies differ diff --git a/config/Typora/Cookies-journal b/config/Typora/Cookies-journal new file mode 100644 index 0000000..e69de29 diff --git a/config/Typora/Crashpad/client_id b/config/Typora/Crashpad/client_id new file mode 100644 index 0000000..ae05d4e --- /dev/null +++ b/config/Typora/Crashpad/client_id @@ -0,0 +1 @@ +1d4d5488-d7eb-4280-b18a-fcddfc4bcf4a \ No newline at end of file diff --git a/config/Typora/DIPS b/config/Typora/DIPS new file mode 100644 index 0000000..b75b6ec Binary files /dev/null and b/config/Typora/DIPS differ diff --git a/config/Typora/DIPS-shm b/config/Typora/DIPS-shm new file mode 100644 index 0000000..c340536 Binary files /dev/null and b/config/Typora/DIPS-shm differ diff --git a/config/Typora/DIPS-wal b/config/Typora/DIPS-wal new file mode 100644 index 0000000..865beaa Binary files /dev/null and b/config/Typora/DIPS-wal differ diff --git a/config/Typora/DawnGraphiteCache/data_0 b/config/Typora/DawnGraphiteCache/data_0 new file mode 100644 index 0000000..d76fb77 Binary files /dev/null and b/config/Typora/DawnGraphiteCache/data_0 differ diff --git a/config/Typora/DawnGraphiteCache/data_1 b/config/Typora/DawnGraphiteCache/data_1 new file mode 100644 index 0000000..43d1cdc Binary files /dev/null and b/config/Typora/DawnGraphiteCache/data_1 differ diff --git a/config/Typora/DawnGraphiteCache/data_2 b/config/Typora/DawnGraphiteCache/data_2 new file mode 100644 index 0000000..c7e2eb9 Binary files /dev/null and b/config/Typora/DawnGraphiteCache/data_2 differ diff --git a/config/Typora/DawnGraphiteCache/data_3 b/config/Typora/DawnGraphiteCache/data_3 new file mode 100644 index 0000000..5eec973 Binary files /dev/null and b/config/Typora/DawnGraphiteCache/data_3 differ diff --git a/config/Typora/DawnGraphiteCache/index b/config/Typora/DawnGraphiteCache/index new file mode 100644 index 0000000..f952ee8 Binary files /dev/null and b/config/Typora/DawnGraphiteCache/index differ diff --git a/config/Typora/DawnWebGPUCache/data_0 b/config/Typora/DawnWebGPUCache/data_0 new file mode 100644 index 0000000..d76fb77 Binary files /dev/null and b/config/Typora/DawnWebGPUCache/data_0 differ diff --git a/config/Typora/DawnWebGPUCache/data_1 b/config/Typora/DawnWebGPUCache/data_1 new file mode 100644 index 0000000..8838d7b Binary files /dev/null and b/config/Typora/DawnWebGPUCache/data_1 differ diff --git a/config/Typora/DawnWebGPUCache/data_2 b/config/Typora/DawnWebGPUCache/data_2 new file mode 100644 index 0000000..c7e2eb9 Binary files /dev/null and b/config/Typora/DawnWebGPUCache/data_2 differ diff --git a/config/Typora/DawnWebGPUCache/data_3 b/config/Typora/DawnWebGPUCache/data_3 new file mode 100644 index 0000000..5eec973 Binary files /dev/null and b/config/Typora/DawnWebGPUCache/data_3 differ diff --git a/config/Typora/DawnWebGPUCache/index b/config/Typora/DawnWebGPUCache/index new file mode 100644 index 0000000..2e1292e Binary files /dev/null and b/config/Typora/DawnWebGPUCache/index differ diff --git a/config/Typora/Dictionaries/en-US-10-1.bdic b/config/Typora/Dictionaries/en-US-10-1.bdic new file mode 100644 index 0000000..a453358 Binary files /dev/null and b/config/Typora/Dictionaries/en-US-10-1.bdic differ diff --git a/config/Typora/GPUCache/data_0 b/config/Typora/GPUCache/data_0 new file mode 100644 index 0000000..2394187 Binary files /dev/null and b/config/Typora/GPUCache/data_0 differ diff --git a/config/Typora/GPUCache/data_1 b/config/Typora/GPUCache/data_1 new file mode 100644 index 0000000..072f9f5 Binary files /dev/null and b/config/Typora/GPUCache/data_1 differ diff --git a/config/Typora/GPUCache/data_2 b/config/Typora/GPUCache/data_2 new file mode 100644 index 0000000..7bb8448 Binary files /dev/null and b/config/Typora/GPUCache/data_2 differ diff --git a/config/Typora/GPUCache/data_3 b/config/Typora/GPUCache/data_3 new file mode 100644 index 0000000..5eec973 Binary files /dev/null and b/config/Typora/GPUCache/data_3 differ diff --git a/config/Typora/GPUCache/index b/config/Typora/GPUCache/index new file mode 100644 index 0000000..d1ab78f Binary files /dev/null and b/config/Typora/GPUCache/index differ diff --git a/config/Typora/JKbCHpc0ye b/config/Typora/JKbCHpc0ye new file mode 100644 index 0000000..c680496 --- /dev/null +++ b/config/Typora/JKbCHpc0ye @@ -0,0 +1 @@ +7b22534c6963656e7365223a227759697743336c4a6b344d4e2f546c5957494b71366c4f37716c70754c645a325655396f595a70525351696b6277454e3549595945564e555033447651753831547a61316547672f547647373836626f6e62304d2b6e4477494b726953574c775a6f336976396f4273704a57566d687538746f374d4f797a2b694e624b68576f6a7450412f42394d7338514e4737313837594d75347a48585363322b75556c38394f7a693932306271563279744a3654516c7166482f6c7378454e4551554b476e76617448674c6251554d2b58356a306135736856306d713551693667385a32796b485878354c564c744f7562504f4b4338715354737670386d6e7451784d5833374f5461442b3063616c4e306831434e79746a4c63364569457a4546377572432f6a4934566b55444c6156544b732f4e547230786944345971426e4b4846774d74544838596f4d4861477a7631496d6578316a53513d3d233023322f31352f32303236227d \ No newline at end of file diff --git a/config/Typora/Local Storage/leveldb/000003.log b/config/Typora/Local Storage/leveldb/000003.log new file mode 100644 index 0000000..e69de29 diff --git a/config/Typora/Local Storage/leveldb/CURRENT b/config/Typora/Local Storage/leveldb/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/config/Typora/Local Storage/leveldb/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/config/Typora/Local Storage/leveldb/LOCK b/config/Typora/Local Storage/leveldb/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/config/Typora/Local Storage/leveldb/LOG b/config/Typora/Local Storage/leveldb/LOG new file mode 100644 index 0000000..6d1d67e --- /dev/null +++ b/config/Typora/Local Storage/leveldb/LOG @@ -0,0 +1,2 @@ +2026/05/12-10:23:19.092 232a Creating DB /home/afoucaultc/.config/Typora/Local Storage/leveldb since it was missing. +2026/05/12-10:23:19.483 232a Reusing MANIFEST /home/afoucaultc/.config/Typora/Local Storage/leveldb/MANIFEST-000001 diff --git a/config/Typora/Local Storage/leveldb/LOG.old b/config/Typora/Local Storage/leveldb/LOG.old new file mode 100644 index 0000000..0fca9e0 --- /dev/null +++ b/config/Typora/Local Storage/leveldb/LOG.old @@ -0,0 +1,3 @@ +2026/04/08-13:57:45.489 59e3 Reusing MANIFEST /home/afoucaultc/.config/Typora/Local Storage/leveldb/MANIFEST-000001 +2026/04/08-13:57:45.490 59e3 Recovering log #3 +2026/04/08-13:57:45.490 59e3 Reusing old log /home/afoucaultc/.config/Typora/Local Storage/leveldb/000003.log diff --git a/config/Typora/Local Storage/leveldb/MANIFEST-000001 b/config/Typora/Local Storage/leveldb/MANIFEST-000001 new file mode 100644 index 0000000..18e5cab Binary files /dev/null and b/config/Typora/Local Storage/leveldb/MANIFEST-000001 differ diff --git a/config/Typora/Network Persistent State b/config/Typora/Network Persistent State new file mode 100644 index 0000000..614a72b --- /dev/null +++ b/config/Typora/Network Persistent State @@ -0,0 +1 @@ +{"net":{"http_server_properties":{"servers":[{"anonymization":[],"server":"https://pinpoint.us-west-2.amazonaws.com","supports_spdy":true},{"anonymization":[],"server":"https://img.shields.io","supports_spdy":true},{"anonymization":[],"server":"https://cognito-identity.us-west-2.amazonaws.com","supports_spdy":true},{"anonymization":[],"server":"https://store.typora.io","supports_spdy":true}],"version":5},"network_qualities":{"CAISABiAgICA+P////8B":"4G","CAYSABiAgICA+P////8B":"Offline"}}} \ No newline at end of file diff --git a/config/Typora/Preferences b/config/Typora/Preferences new file mode 100644 index 0000000..6b93730 --- /dev/null +++ b/config/Typora/Preferences @@ -0,0 +1 @@ +{"partition":{"per_host_zoom_levels":{"12706807416172865791":{}}},"spellcheck":{"dictionaries":["en-US"],"dictionary":""}} \ No newline at end of file diff --git a/config/Typora/Session Storage/000003.log b/config/Typora/Session Storage/000003.log new file mode 100644 index 0000000..8a198c2 Binary files /dev/null and b/config/Typora/Session Storage/000003.log differ diff --git a/config/Typora/Session Storage/CURRENT b/config/Typora/Session Storage/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/config/Typora/Session Storage/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/config/Typora/Session Storage/LOCK b/config/Typora/Session Storage/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/config/Typora/Session Storage/LOG b/config/Typora/Session Storage/LOG new file mode 100644 index 0000000..e03d37d --- /dev/null +++ b/config/Typora/Session Storage/LOG @@ -0,0 +1,2 @@ +2026/05/04-12:51:27.069 68f0 Creating DB /home/afoucaultc/.config/Typora/Session Storage since it was missing. +2026/05/04-12:51:27.246 68f0 Reusing MANIFEST /home/afoucaultc/.config/Typora/Session Storage/MANIFEST-000001 diff --git a/config/Typora/Session Storage/LOG.old b/config/Typora/Session Storage/LOG.old new file mode 100644 index 0000000..94c6479 --- /dev/null +++ b/config/Typora/Session Storage/LOG.old @@ -0,0 +1,3 @@ +2026/04/08-14:03:30.012 59e4 Reusing MANIFEST /home/afoucaultc/.config/Typora/Session Storage/MANIFEST-000001 +2026/04/08-14:03:30.012 59e4 Recovering log #3 +2026/04/08-14:03:30.118 59e4 Reusing old log /home/afoucaultc/.config/Typora/Session Storage/000003.log diff --git a/config/Typora/Session Storage/MANIFEST-000001 b/config/Typora/Session Storage/MANIFEST-000001 new file mode 100644 index 0000000..18e5cab Binary files /dev/null and b/config/Typora/Session Storage/MANIFEST-000001 differ diff --git a/config/Typora/Shared Dictionary/cache/index b/config/Typora/Shared Dictionary/cache/index new file mode 100644 index 0000000..79bd403 Binary files /dev/null and b/config/Typora/Shared Dictionary/cache/index differ diff --git a/config/Typora/Shared Dictionary/cache/index-dir/the-real-index b/config/Typora/Shared Dictionary/cache/index-dir/the-real-index new file mode 100644 index 0000000..ba794b7 Binary files /dev/null and b/config/Typora/Shared Dictionary/cache/index-dir/the-real-index differ diff --git a/config/Typora/Shared Dictionary/db b/config/Typora/Shared Dictionary/db new file mode 100644 index 0000000..1126782 Binary files /dev/null and b/config/Typora/Shared Dictionary/db differ diff --git a/config/Typora/Shared Dictionary/db-journal b/config/Typora/Shared Dictionary/db-journal new file mode 100644 index 0000000..e69de29 diff --git a/config/Typora/SharedStorage b/config/Typora/SharedStorage new file mode 100644 index 0000000..7ee7c11 Binary files /dev/null and b/config/Typora/SharedStorage differ diff --git a/config/Typora/SharedStorage-wal b/config/Typora/SharedStorage-wal new file mode 100644 index 0000000..e69de29 diff --git a/config/Typora/SingletonCookie b/config/Typora/SingletonCookie new file mode 120000 index 0000000..82e863d --- /dev/null +++ b/config/Typora/SingletonCookie @@ -0,0 +1 @@ +16387796476675153355 \ No newline at end of file diff --git a/config/Typora/SingletonLock b/config/Typora/SingletonLock new file mode 120000 index 0000000..92ef642 --- /dev/null +++ b/config/Typora/SingletonLock @@ -0,0 +1 @@ +archlinux-8992 \ No newline at end of file diff --git a/config/Typora/SingletonSocket b/config/Typora/SingletonSocket new file mode 120000 index 0000000..d28f469 --- /dev/null +++ b/config/Typora/SingletonSocket @@ -0,0 +1 @@ +/tmp/scoped_dir5LNuoA/SingletonSocket \ No newline at end of file diff --git a/config/Typora/T9ToEagTYy b/config/Typora/T9ToEagTYy new file mode 100644 index 0000000..f976fa0 --- /dev/null +++ b/config/Typora/T9ToEagTYy @@ -0,0 +1 @@ +7b22534c6963656e7365223a22746e7158744248636e3641706567494467696e337a5a413136317354634a784d676668647a655949424a76344377346a665357757664542b345069306255446377554c7878513565744d34777735764e62727a66664a503731682f32524f44676c71704e7045306639762f61766135332b4d343539716c6a42782b464f6f7332796358782f7848767550563144416c566978644a3156666f6b596b612b384b344f6e6332686e4a62742b765741335977713064684c39334f4550695974524f6d6f3037736f796e7a79527934344f7472614f722f506f4a555633624a4564625a52704678316542364e4c737a7a6b697830313439684353645139666e7875676b536d45314e74424371346f324b53616c756b564b6d46346d6d6535632b455077694370674a5169356b37436d613251744d4f7a5466745270716d5946516e3662447061583370627249516c5272767242784d677757773d3d233023352f31322f32303236227d \ No newline at end of file diff --git a/config/Typora/TransportSecurity b/config/Typora/TransportSecurity new file mode 100644 index 0000000..2975227 --- /dev/null +++ b/config/Typora/TransportSecurity @@ -0,0 +1 @@ +{"sts":[{"expiry":1809427783.995301,"host":"1PLIjm3kQPQW4cJb6E24uRsQPnrWHtm+crYMNKC5TJc=","mode":"force-https","sts_include_subdomains":false,"sts_observed":1777891783.995304},{"expiry":1808297514.942949,"host":"9p2HyjfRHTY1k11+vvkfYT9BeB1pfXOFjikz3LqAlIQ=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1776761514.94296}],"version":2} \ No newline at end of file diff --git a/config/Typora/Trust Tokens b/config/Typora/Trust Tokens new file mode 100644 index 0000000..c7d2144 Binary files /dev/null and b/config/Typora/Trust Tokens differ diff --git a/config/Typora/Trust Tokens-journal b/config/Typora/Trust Tokens-journal new file mode 100644 index 0000000..e69de29 diff --git a/config/Typora/backups/1 b/config/Typora/backups/1 new file mode 100644 index 0000000..9bd3140 --- /dev/null +++ b/config/Typora/backups/1 @@ -0,0 +1,434 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Rotor radius $r_{rot}$ | 0.5 | m | +| Input theoretical speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | deg | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ (hub + blades) | 54000 | kg | +| Output mass $m_{out}$ (rotor) | 10000 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e6 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 2.8e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numerical model, wind model and errors + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/backups/2 b/config/Typora/backups/2 new file mode 100644 index 0000000..e69de29 diff --git a/config/Typora/backups/sum b/config/Typora/backups/sum new file mode 100644 index 0000000..16a8b68 --- /dev/null +++ b/config/Typora/backups/sum @@ -0,0 +1 @@ +{"innormalQuit":true,"windows":[{"id":1,"path":"/home/afoucaultc/workspace/cesi/uncertainties/files/revue_code_cpg.md","untitledId":1778574203553,"type":"","useCRLF":false,"hasUnsaved":false,"scrollPos":2842,"syncDate":1778574238284,"mountFolder":"/home/afoucaultc/workspace/cesi/uncertainties/files","bound":{"fullscreen":false,"maximized":true}}]} \ No newline at end of file diff --git a/config/Typora/conf/conf.default.json b/config/Typora/conf/conf.default.json new file mode 100644 index 0000000..2bcd144 --- /dev/null +++ b/config/Typora/conf/conf.default.json @@ -0,0 +1,27 @@ +/** For advanced users. */ +{ + "defaultFontFamily": { + "standard": null, //String - Defaults to "Times New Roman". + "serif": null, // String - Defaults to "Times New Roman". + "sansSerif": null, // String - Defaults to "Arial". + "monospace": null // String - Defaults to "Courier New". + }, + "autoHideMenuBar": false, //Boolean - Auto hide the menu bar unless the `Alt` key is pressed. Default is false. + + // Array - Search Service user can access from context menu after a range of text is selected. Each item is formatted as [caption, url] + "searchService": [ + ["Search with Google", "https://google.com/search?q=%s"] + ], + + // Custom key binding, which will override the default ones. + // see https://support.typora.io/Shortcut-Keys/#windows--linux for detail + "keyBinding": { + // for example: + // "Always on Top": "Ctrl+Shift+P" + // All other options are the menu items 'text label' displayed from each typora menu + }, + + "monocolorEmoji": false, //default false. Only work for Windows + "maxFetchCountOnFileList": 500, + "flags": [] // default [], append Chrome launch flags, e.g: [["disable-gpu"], ["host-rules", "MAP * 127.0.0.1"]] +} diff --git a/config/Typora/conf/conf.user.json b/config/Typora/conf/conf.user.json new file mode 100644 index 0000000..2bcd144 --- /dev/null +++ b/config/Typora/conf/conf.user.json @@ -0,0 +1,27 @@ +/** For advanced users. */ +{ + "defaultFontFamily": { + "standard": null, //String - Defaults to "Times New Roman". + "serif": null, // String - Defaults to "Times New Roman". + "sansSerif": null, // String - Defaults to "Arial". + "monospace": null // String - Defaults to "Courier New". + }, + "autoHideMenuBar": false, //Boolean - Auto hide the menu bar unless the `Alt` key is pressed. Default is false. + + // Array - Search Service user can access from context menu after a range of text is selected. Each item is formatted as [caption, url] + "searchService": [ + ["Search with Google", "https://google.com/search?q=%s"] + ], + + // Custom key binding, which will override the default ones. + // see https://support.typora.io/Shortcut-Keys/#windows--linux for detail + "keyBinding": { + // for example: + // "Always on Top": "Ctrl+Shift+P" + // All other options are the menu items 'text label' displayed from each typora menu + }, + + "monocolorEmoji": false, //default false. Only work for Windows + "maxFetchCountOnFileList": 500, + "flags": [] // default [], append Chrome launch flags, e.g: [["disable-gpu"], ["host-rules", "MAP * 127.0.0.1"]] +} diff --git a/config/Typora/draftsRecover/2026-3-19 .typora_readme 122640.md b/config/Typora/draftsRecover/2026-3-19 .typora_readme 122640.md new file mode 100644 index 0000000..3ad0bbd --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 .typora_readme 122640.md @@ -0,0 +1,309 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2 \approx \varepsilon +> $$ + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 104658.md b/config/Typora/draftsRecover/2026-3-19 README 104658.md new file mode 100644 index 0000000..acbca9e --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 104658.md @@ -0,0 +1,246 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!CAUTION] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [ ] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + + + +### Energy + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = \bma{0} +$$ + + + + + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 104724.md b/config/Typora/draftsRecover/2026-3-19 README 104724.md new file mode 100644 index 0000000..cc97645 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 104724.md @@ -0,0 +1,249 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!CAUTION] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [ ] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + + + +### Energy + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +za +\end{bmatrix} +$$ + + + + + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 104753.md b/config/Typora/draftsRecover/2026-3-19 README 104753.md new file mode 100644 index 0000000..1140542 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 104753.md @@ -0,0 +1,249 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!CAUTION] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [ ] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + + + +### Energy + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 & 0 & T_{in} & 0 & 0& 0& 0& 0 +\end{bmatrix} +$$ + + + + + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 104825.md b/config/Typora/draftsRecover/2026-3-19 README 104825.md new file mode 100644 index 0000000..d9ee583 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 104825.md @@ -0,0 +1,249 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!CAUTION] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [ ] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + + + +### Energy + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 & 0& 0& T_{out}& 0 +\end{bmatrix} +$$ + + + + + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 104843.md b/config/Typora/draftsRecover/2026-3-19 README 104843.md new file mode 100644 index 0000000..86e8613 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 104843.md @@ -0,0 +1,249 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!CAUTION] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [ ] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + + + + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 105011.md b/config/Typora/draftsRecover/2026-3-19 README 105011.md new file mode 100644 index 0000000..3d3d708 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 105011.md @@ -0,0 +1,250 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!ATT] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [ ] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + + + + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 105400.md b/config/Typora/draftsRecover/2026-3-19 README 105400.md new file mode 100644 index 0000000..fb24549 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 105400.md @@ -0,0 +1,246 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 105540.md b/config/Typora/draftsRecover/2026-3-19 README 105540.md new file mode 100644 index 0000000..97284e8 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 105540.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Parameter | Value | +| ---------------- | ----- | +| Newmark $\gamma$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 105607.md b/config/Typora/draftsRecover/2026-3-19 README 105607.md new file mode 100644 index 0000000..985e831 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 105607.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Parameter | Value | +| ---------------- | ----- | +| Newmark $\gamma$ | | +| Newmark $\beta$ | | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 105638.md b/config/Typora/draftsRecover/2026-3-19 README 105638.md new file mode 100644 index 0000000..cb18998 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 105638.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Parameter | Value | +| ---------------- | ----- | +| Newmark $\gamma$ | | +| Newmark $\beta$ | | +| **Gear** | | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 105713.md b/config/Typora/draftsRecover/2026-3-19 README 105713.md new file mode 100644 index 0000000..0901c2f --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 105713.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark | Value | +| ---------------- | ----- | +| Newmark $\gamma$ | | +| Newmark $\beta$ | | +| **Gears** | | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| $d_{i1}$ | | +| $d_{i_2}$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 105746.md b/config/Typora/draftsRecover/2026-3-19 README 105746.md new file mode 100644 index 0000000..996899e --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 105746.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark | Value | +| ---------------- | ----- | +| Newmark $\gamma$ | | +| Newmark $\beta$ | | +| **Gears** | | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| $d_{i1}$ | | +| $d_{i_2}$ | | +| $N_1$ | | +| $\alpha$ | | +| $\rho_{steel}$ | | +| **Masses** | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 105811.md b/config/Typora/draftsRecover/2026-3-19 README 105811.md new file mode 100644 index 0000000..fc0a813 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 105811.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark | Value | +| ---------------- | --------- | +| Newmark $\gamma$ | | +| Newmark $\beta$ | | +| **Gears** | **Value** | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| $d_{i1}$ | | +| $d_{i_2}$ | | +| $N_1$ | | +| $\alpha$ | | +| $\rho_{steel}$ | | +| **Masses** | **Value** | +| $$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 105824.md b/config/Typora/draftsRecover/2026-3-19 README 105824.md new file mode 100644 index 0000000..6801125 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 105824.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark | Value | +| ---------------- | --------- | +| Newmark $\gamma$ | | +| Newmark $\beta$ | | +| **Gears** | **Value** | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| $d_{i1}$ | | +| $d_{i_2}$ | | +| $N_1$ | | +| $\alpha$ | | +| $\rho_{steel}$ | | +| **Masses** | **Value** | +| $m_{input}$ | | +| $m_{pinion}$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 105845.md b/config/Typora/draftsRecover/2026-3-19 README 105845.md new file mode 100644 index 0000000..bbd7d10 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 105845.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark | Value | +| ---------------- | --------- | +| Newmark $\gamma$ | | +| Newmark $\beta$ | | +| **Gears** | **Value** | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| $d_{i1}$ | | +| $d_{i_2}$ | | +| $N_1$ | | +| $\alpha$ | | +| $\rho_{steel}$ | | +| **Masses** | **Value** | +| $m_{in}$ | | +| $m_{12}$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 105912.md b/config/Typora/draftsRecover/2026-3-19 README 105912.md new file mode 100644 index 0000000..84b7ecb --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 105912.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark | Value | +| ---------------- | --------- | +| Newmark $\gamma$ | | +| Newmark $\beta$ | | +| **Gears** | **Value** | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| $d_{i1}$ | | +| $d_{i_2}$ | | +| $N_1$ | | +| $\alpha$ | | +| $\rho_{steel}$ | | +| **Masses** | **Value** | +| $m_{in}$ | | +| $m_{pinion12}$ | | +| $m_{pinion21}$ | | +| $m_{pinio}$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 105943.md b/config/Typora/draftsRecover/2026-3-19 README 105943.md new file mode 100644 index 0000000..930578d --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 105943.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark | Value | +| ---------------- | --------- | +| Newmark $\gamma$ | | +| Newmark $\beta$ | | +| **Gears** | **Value** | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| $d_{i1}$ | | +| $d_{i_2}$ | | +| $N_1$ | | +| $\alpha$ | | +| $\rho_{steel}$ | | +| **Masses** | **Value** | +| $m_{in}$ | | +| $m_{pinion12}$ | | +| $m_{pinion21}$ | | +| $m_{out}$ | | +| **Stiffness** | | +| $k_x=k_{x}$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110000.md b/config/Typora/draftsRecover/2026-3-19 README 110000.md new file mode 100644 index 0000000..282e58b --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110000.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark | Value | +| --------------------- | --------- | +| Newmark $\gamma$ | | +| Newmark $\beta$ | | +| **Gears** | **Value** | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| $d_{i1}$ | | +| $d_{i_2}$ | | +| $N_1$ | | +| $\alpha$ | | +| $\rho_{steel}$ | | +| **Masses** | **Value** | +| $m_{in}$ | | +| $m_{pinion12}$ | | +| $m_{pinion21}$ | | +| $m_{out}$ | | +| **Stiffness** | | +| $k_x=k_{x_1}=k_{x_2}$ | | +| $k_y=k_{y_1}=k_{y_2}$ | | +| $k_x=k_{x_1}=k_{x_2}$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110027.md b/config/Typora/draftsRecover/2026-3-19 README 110027.md new file mode 100644 index 0000000..dbef512 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110027.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark | Value | +| ------------------------------------ | --------- | +| Newmark $\gamma$ | | +| Newmark $\beta$ | | +| **Gears** | **Value** | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| $d_{i1}$ | | +| $d_{i_2}$ | | +| $N_1$ | | +| $\alpha$ | | +| $\rho_{steel}$ | | +| **Masses** | **Value** | +| $m_{in}$ | | +| $m_{pinion12}$ | | +| $m_{pinion21}$ | | +| $m_{out}$ | | +| **Stiffness** | | +| $k_x=k_{x_1}=k_{x_2}$ | | +| $k_y=k_{y_1}=k_{y_2}$ | | +| $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | +| $k_{mesh__{mean}}$$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110102.md b/config/Typora/draftsRecover/2026-3-19 README 110102.md new file mode 100644 index 0000000..28e4ac5 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110102.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark | Value | +| ------------------------------------ | --------- | +| Newmark $\gamma$ | | +| Newmark $\beta$ | | +| **Gears** | **Value** | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| $d_{i1}$ | | +| $d_{i_2}$ | | +| $N_1$ | | +| $\alpha$ | | +| $\rho_{steel}$ | | +| **Masses** | **Value** | +| $m_{in}$ | | +| $m_{pinion12}$ | | +| $m_{pinion21}$ | | +| $m_{out}$ | | +| **Stiffness** | | +| $k_x=k_{x_1}=k_{x_2}$ | | +| $k_y=k_{y_1}=k_{y_2}$ | | +| $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | +| $k_{mesh_{mean}}$ | | +| **Damping** | | +| $\eta$ | | +| $\beta$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110121.md b/config/Typora/draftsRecover/2026-3-19 README 110121.md new file mode 100644 index 0000000..43276b9 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110121.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | +| ------------------------------------ | --------- | +| $\gamma$ | | +| $\beta$ | | +| **Gears** | **Value** | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| $d_{i1}$ | | +| $d_{i_2}$ | | +| $N_1$ | | +| $\alpha$ | | +| $\rho_{steel}$ | | +| **Masses** | **Value** | +| $m_{in}$ | | +| $m_{pinion12}$ | | +| $m_{pinion21}$ | | +| $m_{out}$ | | +| **Stiffness** | | +| $k_x=k_{x_1}=k_{x_2}$ | | +| $k_y=k_{y_1}=k_{y_2}$ | | +| $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | +| $k_{mesh_{mean}}$ | | +| **Damping** | | +| $\eta$ | | +| $\beta$ | | +| **Wind excitat** | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110144.md b/config/Typora/draftsRecover/2026-3-19 README 110144.md new file mode 100644 index 0000000..dc7774f --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110144.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | +| ------------------------------------ | --------- | +| $\gamma$ | | +| $\beta$ | | +| **Gears** | **Value** | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| $d_{i1}$ | | +| $d_{i_2}$ | | +| $N_1$ | | +| $\alpha$ | | +| $\rho_{steel}$ | | +| **Masses** | **Value** | +| $m_{in}$ | | +| $m_{pinion12}$ | | +| $m_{pinion21}$ | | +| $m_{out}$ | | +| **Stiffness** | | +| $k_x=k_{x_1}=k_{x_2}$ | | +| $k_y=k_{y_1}=k_{y_2}$ | | +| $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | +| $k_{mesh_{mean}}$ | | +| **Damping** | | +| Mass related $\eta$ | | +| Stiffness relat$\beta$ | | +| **Wind excitation** | | +| Blade radius $r_{blade}$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110212.md b/config/Typora/draftsRecover/2026-3-19 README 110212.md new file mode 100644 index 0000000..912db20 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110212.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | +| ------------------------------------- | --------- | +| $\gamma$ | | +| $\beta$ | | +| **Gears** | **Value** | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| $d_{i1}$ | | +| $d_{i_2}$ | | +| $N_1$ | | +| $\alpha$ | | +| $\rho_{steel}$ | | +| **Masses** | **Value** | +| $m_{in}$ | | +| $m_{pinion12}$ | | +| $m_{pinion21}$ | | +| $m_{out}$ | | +| **Stiffness** | | +| Flexion k_x=k_{x_1}=k_{x_2}$ | | +| $k_y=k_{y_1}=k_{y_2}$ | | +| $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | +| Mean mesh stiffness $k_{mesh_{mean}}$ | | +| **Damping** | | +| Mass related $\eta$ | | +| Stiffness related $\beta$ | | +| **Wind excitation** | | +| Blade radius $r_{blade}$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110228.md b/config/Typora/draftsRecover/2026-3-19 README 110228.md new file mode 100644 index 0000000..d310eab --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110228.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | +| ------------------------------------------- | --------- | +| $\gamma$ | | +| $\beta$ | | +| **Gears** | **Value** | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| $d_{i1}$ | | +| $d_{i_2}$ | | +| $N_1$ | | +| $\alpha$ | | +| $\rho_{steel}$ | | +| **Masses** | **Value** | +| $m_{in}$ | | +| $m_{pinion12}$ | | +| $m_{pinion21}$ | | +| $m_{out}$ | | +| **Stiffness** | | +| Flexion $x$ : k_x=k_{x_1}=k_{x_2}$ | | +| Flexion $y$ : k_y=k_{y_1}=k_{y_2}$ | | +| Torsion$k_\theta=k_{\theta_1}=k_{\theta_2}$ | | +| Mean mesh stiffness $k_{mesh_{mean}}$ | | +| **Damping** | | +| Mass related $\eta$ | | +| Stiffness related $\beta$ | | +| **Wind excitation** | | +| Blade radius $r_{blade}$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110301.md b/config/Typora/draftsRecover/2026-3-19 README 110301.md new file mode 100644 index 0000000..6f01c18 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110301.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | +| -------------------------------------------------- | --------- | +| $\gamma$ | | +| $\beta$ | | +| **Gears** | **Value** | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| $d_{i1}$ | | +| $d_{i_2}$ | | +| $N_1$ | | +| $\alpha$ | | +| $\rho_{steel}$ | | +| **Masses** | **Value** | +| $m_{in}$ | | +| $m_{pinion12}$ | | +| | | +| Output mass $m_{out}$ | | +| **Stiffness** | | +| Flexion $x$ : k_x=k_{x_1}=k_{x_2}$ | | +| Flexion $y$ : k_y=k_{y_1}=k_{y_2}$ | | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | +| Mean mesh stiffness $k_{mesh_{mean}}$ | | +| **Damping** | | +| Mass related $\eta$ | | +| Stiffness related $\beta$ | | +| **Wind excitation** | | +| Blade radius $r_{blade}$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110335.md b/config/Typora/draftsRecover/2026-3-19 README 110335.md new file mode 100644 index 0000000..ff092af --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110335.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | +| -------------------------------------------------- | --------- | +| $\gamma$ | | +| $\beta$ | | +| **Gears** | **Value** | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| $d_{i1}$ | | +| $d_{i_2}$ | | +| Inpu$N_1$ | | +| Contact angle $\alpha$ | | +| Steel density $\rho_{steel}$ | | +| **Masses** | **Value** | +| Input mass $m_{in}$ | | +| Output mass $m_{out}$ | | +| **Stiffness** | | +| Flexion $x$ : k_x=k_{x_1}=k_{x_2}$ | | +| Flexion $y$ : k_y=k_{y_1}=k_{y_2}$ | | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | +| Mean mesh stiffness $k_{mesh_{mean}}$ | | +| **Damping** | | +| Mass related $\eta$ | | +| Stiffness related $\beta$ | | +| **Wind excitation** | | +| Blade radius $r_{blade}$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110349.md b/config/Typora/draftsRecover/2026-3-19 README 110349.md new file mode 100644 index 0000000..0ca8b52 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110349.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | +| -------------------------------------------------- | --------- | +| $\gamma$ | | +| $\beta$ | | +| **Gears** | **Value** | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| $b$ | | +| $d_{i1}$ | | +| Internal diameter pinion 2 $d_{i_2}$ | | +| Input speed $N_1$ | | +| Contact angle $\alpha$ | | +| Steel density $\rho_{steel}$ | | +| **Masses** | **Value** | +| Input mass $m_{in}$ | | +| Output mass $m_{out}$ | | +| **Stiffness** | | +| Flexion $x$ : k_x=k_{x_1}=k_{x_2}$ | | +| Flexion $y$ : k_y=k_{y_1}=k_{y_2}$ | | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | +| Mean mesh stiffness $k_{mesh_{mean}}$ | | +| **Damping** | | +| Mass related $\eta$ | | +| Stiffness related $\beta$ | | +| **Wind excitation** | | +| Blade radius $r_{blade}$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110407.md b/config/Typora/draftsRecover/2026-3-19 README 110407.md new file mode 100644 index 0000000..4f1ef87 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110407.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | +| -------------------------------------------------- | --------- | +| $\gamma$ | | +| $\beta$ | | +| **Gears** | **Value** | +| $Z1$ | | +| $Z2$ | | +| $m_0$ | | +| Pini$b$ | | +| Internal diameter pinion 1 $d_{i1}$ | | +| Internal diameter pinion 2 $d_{i_2}$ | | +| Input speed $N_1$ | | +| Contact angle $\alpha$ | | +| Steel density $\rho_{steel}$ | | +| **Masses** | **Value** | +| Input mass $m_{in}$ | | +| Output mass $m_{out}$ | | +| **Stiffness** | | +| Flexion $x$ : k_x=k_{x_1}=k_{x_2}$ | | +| Flexion $y$ : k_y=k_{y_1}=k_{y_2}$ | | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | +| Mean mesh stiffness $k_{mesh_{mean}}$ | | +| **Damping** | | +| Mass related $\eta$ | | +| Stiffness related $\beta$ | | +| **Wind excitation** | | +| Blade radius $r_{blade}$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110430.md b/config/Typora/draftsRecover/2026-3-19 README 110430.md new file mode 100644 index 0000000..74d8c91 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110430.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | +| -------------------------------------------------- | --------- | +| $\gamma$ | | +| $\beta$ | | +| **Gears** | **Value** | +| $Z1$ | | +| Pinion 2 tooth number $Z2$ | | +| Pinion modulus $m_0$ | | +| Pinion width $b$ | | +| Internal diameter pinion 1 $d_{i1}$ | | +| Internal diameter pinion 2 $d_{i_2}$ | | +| Input speed $N_1$ | | +| Contact angle $\alpha$ | | +| Steel density $\rho_{steel}$ | | +| **Masses** | **Value** | +| Input mass $m_{in}$ | | +| Output mass $m_{out}$ | | +| **Stiffness** | | +| Flexion $x$ : k_x=k_{x_1}=k_{x_2}$ | | +| Flexion $y$ : k_y=k_{y_1}=k_{y_2}$ | | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | +| Mean mesh stiffness $k_{mesh_{mean}}$ | | +| **Damping** | | +| Mass related $\eta$ | | +| Stiffness related $\beta$ | | +| **Wind excitation** | | +| Blade radius $r_{blade}$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110519.md b/config/Typora/draftsRecover/2026-3-19 README 110519.md new file mode 100644 index 0000000..6497f6a --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110519.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | +| -------------------------------------------------- | --------- | +| $\gamma$ | | +| $\beta$ | | +| **Gears** | **Value** | +| Pinon 1 tooth number $Z1$ | | +| Pinion 2 tooth number $Z2$ | | +| Pinion modulus $m_0$ | | +| Pinion width $b$ | | +| Internal diameter pinion 1 $d_{i1}$ | | +| Internal diameter pinion 2 $d_{i_2}$ | | +| Input speed $N_1$ | | +| Contact angle $\alpha$ | | +| Steel density $\rho_{steel}$ | | +| **Masses** | **Value** | +| Input mass $m_{in}$ | | +| Output mass $m_{out}$ | | +| **Stiffness** | | +| Flexion $x$ : k_x=k_{x_1}=k_{x_2}$ | | +| Flexion $y$ : k_y=k_{y_1}=k_{y_2}$ | | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | +| Mean mesh stiffness $k_{mesh_{mean}}$ | | +| **Damping** | | +| Mass related $\eta$ | | +| Stiffness related $\beta$ | | +| **Wind excitation** | | +| Blade radius $r_{blade}$ | | +| Air density $rho_{air}$ | | +| Wind | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110549.md b/config/Typora/draftsRecover/2026-3-19 README 110549.md new file mode 100644 index 0000000..6621d42 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110549.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | +| -------------------------------------------------- | --------- | +| $\gamma$ | | +| $\beta$ | | +| **Gears** | **Value** | +| Pinon 1 tooth number $Z1$ | | +| Pinion 2 tooth number $Z2$ | | +| Pinion modulus $m_0$ | | +| Pinion width $b$ | | +| Internal diameter pinion 1 $d_{i1}$ | | +| Internal diameter pinion 2 $d_{i_2}$ | | +| Input speed $N_1$ | | +| Contact angle $\alpha$ | | +| Steel density $\rho_{steel}$ | | +| **Masses** | **Value** | +| Input mass $m_{in}$ | | +| Output mass $m_{out}$ | | +| **Stiffness** | | +| Flexion $x$ : k_x=k_{x_1}=k_{x_2}$ | | +| Flexion $y$ : k_y=k_{y_1}=k_{y_2}$ | | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | +| Mean mesh stiffness $k_{mesh_{mean}}$ | | +| **Damping** | | +| Mass related $\eta$ | | +| Stiffness related $\beta$ | | +| **Wind excitation** | | +| Blade radius $r_{blade}$ | | +| Air density $\rho_{air}$ | | +| Wind speed (mean) $v_{wind_{mean}}$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110612.md b/config/Typora/draftsRecover/2026-3-19 README 110612.md new file mode 100644 index 0000000..2da6703 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110612.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | +| -------------------------------------------------- | --------- | +| $\gamma$ | | +| $\beta$ | | +| **Gears** | **Value** | +| Pinon 1 tooth number $Z1$ | | +| Pinion 2 tooth number $Z2$ | | +| Pinion modulus $m_0$ | | +| Pinion width $b$ | | +| Internal diameter pinion 1 $d_{i1}$ | | +| Internal diameter pinion 2 $d_{i_2}$ | | +| Input speed $N_1$ | | +| Contact angle $\alpha$ | | +| Steel density $\rho_{steel}$ | | +| **Masses** | **Value** | +| Input mass $m_{in}$ | | +| Output mass $m_{out}$ | | +| **Stiffness** | | +| Flexion $x$ : k_x=k_{x_1}=k_{x_2}$ | | +| Flexion $y$ : k_y=k_{y_1}=k_{y_2}$ | | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | +| Mean mesh stiffness $k_{mesh_{mean}}$ | | +| **Damping** | | +| Mass related $\eta$ | | +| Stiffness related $\beta$ | | +| **Wind excitation** | | +| Blade radius $r_{blade}$ | | +| Air density $\rho_{air}$ | | +| Wind speed (mean) $v_{wind_{mean}}$ | | +| Fluctuating external torque $T_{fluct}$ | | +| Fluctuating external frequency $$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110643.md b/config/Typora/draftsRecover/2026-3-19 README 110643.md new file mode 100644 index 0000000..b5bcf01 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110643.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | +| -------------------------------------------------- | --------- | +| $\gamma$ | | +| $\beta$ | | +| **Gears** | **Value** | +| Pinon 1 tooth number $Z1$ | | +| Pinion 2 tooth number $Z2$ | | +| Pinion modulus $m_0$ | | +| Pinion width $b$ | | +| Internal diameter pinion 1 $d_{i1}$ | | +| Internal diameter pinion 2 $d_{i_2}$ | | +| Input speed $N_1$ | | +| Contact angle $\alpha$ | | +| Steel density $\rho_{steel}$ | | +| **Masses** | **Value** | +| Input mass $m_{in}$ | | +| Output mass $m_{out}$ | | +| **Stiffness** | | +| Flexion $x$ : k_x=k_{x_1}=k_{x_2}$ | | +| Flexion $y$ : k_y=k_{y_1}=k_{y_2}$ | | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | +| Mean mesh stiffness $k_{mesh_{mean}}$ | | +| **Damping** | **Value** | +| Mass related $\eta$ | | +| Stiffness related $\beta$ | | +| **Wind excitation** | **Value** | +| Blade radius $r_{blade}$ | | +| Air density $\rho_{air}$ | | +| Wind speed (mean) $v_{wind_{mean}}$ | | +| Fluctuating external torque $T_{fluct}$ | | +| Fluctuating external frequency $f_{fluct}$ | | +| Performance efficiency | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110710.md b/config/Typora/draftsRecover/2026-3-19 README 110710.md new file mode 100644 index 0000000..51134d2 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110710.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | +| -------------------------------------------------- | --------- | +| $\gamma$ | 0.7 | +| $\beta$ | 0.3 | +| **Gears** | **Value** | +| Pinon 1 tooth number $Z1$ | 72 | +| Pinion 2 tooth number $Z2$ | 18 | +| Pinion modulus $m_0$ | 0.016 | +| Pinion width $b$ | 0.1 | +| Internal diameter pinion 1 $d_{i1}$ | | +| Internal diameter pinion 2 $d_{i_2}$ | | +| Input speed $N_1$ | | +| Contact angle $\alpha$ | | +| Steel density $\rho_{steel}$ | | +| **Masses** | **Value** | +| Input mass $m_{in}$ | | +| Output mass $m_{out}$ | | +| **Stiffness** | | +| Flexion $x$ : k_x=k_{x_1}=k_{x_2}$ | | +| Flexion $y$ : k_y=k_{y_1}=k_{y_2}$ | | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | +| Mean mesh stiffness $k_{mesh_{mean}}$ | | +| **Damping** | **Value** | +| Mass related $\eta$ | | +| Stiffness related $\beta$ | | +| **Wind excitation** | **Value** | +| Blade radius $r_{blade}$ | | +| Air density $\rho_{air}$ | | +| Wind speed (mean) $v_{wind_{mean}}$ | | +| Fluctuating external torque $T_{fluct}$ | | +| Fluctuating external frequency $f_{fluct}$ | | +| Performance efficiency $cp$ | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110735.md b/config/Typora/draftsRecover/2026-3-19 README 110735.md new file mode 100644 index 0000000..d7d96fa --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110735.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | **UNit** | +| -------------------------------------------------- | --------- | -------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | | +| Pinion width $b$ | 0.1 | | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | | +| Input speed $N_1$ | 17 | | +| Contact angle $\alpha$ | 20° | | +| Steel density $\rho_{steel}$ | 7860 | | +| **Masses** | **Value** | | +| Input mass $m_{in}$ | | | +| Output mass $m_{out}$ | | | +| **Stiffness** | | | +| Flexion $x$ : k_x=k_{x_1}=k_{x_2}$ | | | +| Flexion $y$ : k_y=k_{y_1}=k_{y_2}$ | | | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | | +| Mean mesh stiffness $k_{mesh_{mean}}$ | | | +| **Damping** | **Value** | | +| Mass related $\eta$ | | | +| Stiffness related $\beta$ | | | +| **Wind excitation** | **Value** | | +| Blade radius $r_{blade}$ | | | +| Air density $\rho_{air}$ | | | +| Wind speed (mean) $v_{wind_{mean}}$ | | | +| Fluctuating external torque $T_{fluct}$ | | | +| Fluctuating external frequency $f_{fluct}$ | | | +| Performance efficiency $cp$ | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110802.md b/config/Typora/draftsRecover/2026-3-19 README 110802.md new file mode 100644 index 0000000..4ac335f --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110802.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | **Unit** | +| -------------------------------------------------- | --------- | -------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | | +| Pinion width $b$ | 0.1 | | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | ° | +| Steel density $\rho_{steel}$ | 7860 | kg/m2 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | | | +| Output mass $m_{out}$ | | | +| **Stiffness** | | | +| Flexion $x$ : k_x=k_{x_1}=k_{x_2}$ | | | +| Flexion $y$ : k_y=k_{y_1}=k_{y_2}$ | | | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | | +| Mean mesh stiffness $k_{mesh_{mean}}$ | | | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | | | +| Stiffness related $\beta$ | | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | | | +| Air density $\rho_{air}$ | | | +| Wind speed (mean) $v_{wind_{mean}}$ | | | +| Fluctuating external torque $T_{fluct}$ | | | +| Fluctuating external frequency $f_{fluct}$ | | | +| Performance efficiency $cp$ | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110841.md b/config/Typora/draftsRecover/2026-3-19 README 110841.md new file mode 100644 index 0000000..afe140b --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110841.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | **Unit** | +| -------------------------------------------------- | --------- | -------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m2 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion $x$ : $k_x=k_{x_1}=k_{x_2}$ | | | +| Flexion $y$ : k_y=k_{y_1}=k_{y_2}$ | | | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | | | +| Mean mesh stiffness $k_{mesh_{mean}}$ | | | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | | | +| Stiffness related $\beta$ | | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | | | +| Air density $\rho_{air}$ | | | +| Wind speed (mean) $v_{wind_{mean}}$ | | | +| Fluctuating external torque $T_{fluct}$ | | | +| Fluctuating external frequency $f_{fluct}$ | | | +| Performance efficiency $cp$ | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 110905.md b/config/Typora/draftsRecover/2026-3-19 README 110905.md new file mode 100644 index 0000000..da300eb --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 110905.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | **Unit** | +| -------------------------------------------------- | --------- | -------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m2 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion $x$ : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | kg/m | +| Flexion $y$ : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | | | +| Stiffness related $\beta$ | | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | | | +| Air density $\rho_{air}$ | | | +| Wind speed (mean) $v_{wind_{mean}}$ | | | +| Fluctuating external torque $T_{fluct}$ | | | +| Fluctuating external frequency $f_{fluct}$ | | | +| Performance efficiency $cp$ | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 111410.md b/config/Typora/draftsRecover/2026-3-19 README 111410.md new file mode 100644 index 0000000..6f01e26 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 111410.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | **Unit** | +| -------------------------------------------------- | --------- | -------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m2 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion $x$ : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion $y$ : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/m | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | | | +| Stiffness related $\beta$ | | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | | | +| Air density $\rho_{air}$ | | | +| Wind speed (mean) $v_{wind_{mean}}$ | | | +| Fluctuating external torque $T_{fluct}$ | | | +| Fluctuating external frequency $f_{fluct}$ | | | +| Performance efficiency $cp$ | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 111450.md b/config/Typora/draftsRecover/2026-3-19 README 111450.md new file mode 100644 index 0000000..39e13da --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 111450.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | **Unit** | +| -------------------------------------------------- | --------- | -------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m2 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion $x$ : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion $y$ : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/ | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | | | +| Air density $\rho_{air}$ | | | +| Wind speed (mean) $v_{wind_{mean}}$ | | | +| Fluctuating external torque $T_{fluct}$ | | | +| Fluctuating external frequency $f_{fluct}$ | | | +| Performance efficiency $cp$ | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 111507.md b/config/Typora/draftsRecover/2026-3-19 README 111507.md new file mode 100644 index 0000000..4c7c57c --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 111507.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | **Unit** | +| -------------------------------------------------- | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m2 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion $x$ : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion $y$ : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | | +| Wind speed (mean) $v_{wind_{mean}}$ | | | +| Fluctuating external torque $T_{fluct}$ | | | +| Fluctuating external frequency $f_{fluct}$ | | | +| Performance efficiency $cp$ | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 111537.md b/config/Typora/draftsRecover/2026-3-19 README 111537.md new file mode 100644 index 0000000..36db35a --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 111537.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | **Unit** | +| -------------------------------------------------- | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion $x$ : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion $y$ : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | | +| Performance efficiency $cp$ | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 111705.md b/config/Typora/draftsRecover/2026-3-19 README 111705.md new file mode 100644 index 0000000..bfe575e --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 111705.md @@ -0,0 +1,277 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +| Newmark parameters | Value | **Unit** | +| -------------------------------------------------- | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion $x$ : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion $y$ : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion $z$ : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 111754.md b/config/Typora/draftsRecover/2026-3-19 README 111754.md new file mode 100644 index 0000000..f39ac3c --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 111754.md @@ -0,0 +1,275 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ---------------------------------------------- | --------- | --------------- | +| \gamma | 0.7 | | +| \beta | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number Z1 | 72 | | +| Pinion 2 tooth number Z2 | 18 | | +| Pinion modulus m_0 | 0.016 | m | +| Pinion width b | 0.1 | m | +| Internal diameter pinion 1 d_{i1} | 0.5 | m | +| Internal diameter pinion 2 d_{i_2} | 0.3 | m | +| Input speed N_1 | 17 | m/s | +| Contact angle \alpha | 20 | degree | +| Steel density \rho_{steel} | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass m_{in} | 54000 | kg | +| Output mass m_{out} | 10 | kg | +| **Stiffness** | | | +| Flexion x : k_x=k_{x_1}=k_{x_2} | 1e8 | N/m | +| Flexion y : k_y=k_{y_1}=k_{y_2} | 1e8 | N/m | +| Torsion z : k_\theta=k_{\theta_1}=k_{\theta_2} | 1e5 | N/m | +| Mean mesh stiffness k_{mesh_{mean}} | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related \eta | 5e-2 | N/(m/s)/(kg) | +| Stiffness related \beta | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius r_{blade} | 6 | m | +| Air density \rho_{air} | 1.225 | kg/m3 | +| Wind speed (mean) v_{wind_{mean}} | 10 | m/s | +| Fluctuating external torque T_{fluct} | 50 | N | +| Fluctuating external frequency f_{fluct} | 6 | Hz | +| Performance efficiency cp | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness m** + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 111821.md b/config/Typora/draftsRecover/2026-3-19 README 111821.md new file mode 100644 index 0000000..7ecacd9 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 111821.md @@ -0,0 +1,277 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ---------------------------------------------- | --------- | --------------- | +| \gamma | 0.7 | | +| \beta | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number Z1 | 72 | | +| Pinion 2 tooth number Z2 | 18 | | +| Pinion modulus m_0 | 0.016 | m | +| Pinion width b | 0.1 | m | +| Internal diameter pinion 1 d_{i1} | 0.5 | m | +| Internal diameter pinion 2 d_{i_2} | 0.3 | m | +| Input speed N_1 | 17 | m/s | +| Contact angle \alpha | 20 | degree | +| Steel density \rho_{steel} | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass m_{in} | 54000 | kg | +| Output mass m_{out} | 10 | kg | +| **Stiffness** | | | +| Flexion x : k_x=k_{x_1}=k_{x_2} | 1e8 | N/m | +| Flexion y : k_y=k_{y_1}=k_{y_2} | 1e8 | N/m | +| Torsion z : k_\theta=k_{\theta_1}=k_{\theta_2} | 1e5 | N/m | +| Mean mesh stiffness k_{mesh_{mean}} | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related \eta | 5e-2 | N/(m/s)/(kg) | +| Stiffness related \beta | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius r_{blade} | 6 | m | +| Air density \rho_{air} | 1.225 | kg/m3 | +| Wind speed (mean) v_{wind_{mean}} | 10 | m/s | +| Fluctuating external torque T_{fluct} | 50 | N | +| Fluctuating external frequency f_{fluct} | 6 | Hz | +| Performance efficiency cp | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal, + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 111842.md b/config/Typora/draftsRecover/2026-3-19 README 111842.md new file mode 100644 index 0000000..d28d344 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 111842.md @@ -0,0 +1,277 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ---------------------------------------------- | --------- | --------------- | +| \gamma | 0.7 | | +| \beta | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number Z1 | 72 | | +| Pinion 2 tooth number Z2 | 18 | | +| Pinion modulus m_0 | 0.016 | m | +| Pinion width b | 0.1 | m | +| Internal diameter pinion 1 d_{i1} | 0.5 | m | +| Internal diameter pinion 2 d_{i_2} | 0.3 | m | +| Input speed N_1 | 17 | m/s | +| Contact angle \alpha | 20 | degree | +| Steel density \rho_{steel} | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass m_{in} | 54000 | kg | +| Output mass m_{out} | 10 | kg | +| **Stiffness** | | | +| Flexion x : k_x=k_{x_1}=k_{x_2} | 1e8 | N/m | +| Flexion y : k_y=k_{y_1}=k_{y_2} | 1e8 | N/m | +| Torsion z : k_\theta=k_{\theta_1}=k_{\theta_2} | 1e5 | N/m | +| Mean mesh stiffness k_{mesh_{mean}} | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related \eta | 5e-2 | N/(m/s)/(kg) | +| Stiffness related \beta | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius r_{blade} | 6 | m | +| Air density \rho_{air} | 1.225 | kg/m3 | +| Wind speed (mean) v_{wind_{mean}} | 10 | m/s | +| Fluctuating external torque T_{fluct} | 50 | N | +| Fluctuating external frequency f_{fluct} | 6 | Hz | +| Performance efficiency cp | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal, with $T_{high}=\epsilon-1$ + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 111907.md b/config/Typora/draftsRecover/2026-3-19 README 111907.md new file mode 100644 index 0000000..4bf0902 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 111907.md @@ -0,0 +1,277 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ---------------------------------------------- | --------- | --------------- | +| \gamma | 0.7 | | +| \beta | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number Z1 | 72 | | +| Pinion 2 tooth number Z2 | 18 | | +| Pinion modulus m_0 | 0.016 | m | +| Pinion width b | 0.1 | m | +| Internal diameter pinion 1 d_{i1} | 0.5 | m | +| Internal diameter pinion 2 d_{i_2} | 0.3 | m | +| Input speed N_1 | 17 | m/s | +| Contact angle \alpha | 20 | degree | +| Steel density \rho_{steel} | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass m_{in} | 54000 | kg | +| Output mass m_{out} | 10 | kg | +| **Stiffness** | | | +| Flexion x : k_x=k_{x_1}=k_{x_2} | 1e8 | N/m | +| Flexion y : k_y=k_{y_1}=k_{y_2} | 1e8 | N/m | +| Torsion z : k_\theta=k_{\theta_1}=k_{\theta_2} | 1e5 | N/m | +| Mean mesh stiffness k_{mesh_{mean}} | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related \eta | 5e-2 | N/(m/s)/(kg) | +| Stiffness related \beta | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius r_{blade} | 6 | m | +| Air density \rho_{air} | 1.225 | kg/m3 | +| Wind speed (mean) v_{wind_{mean}} | 10 | m/s | +| Fluctuating external torque T_{fluct} | 50 | N | +| Fluctuating external frequency f_{fluct} | 6 | Hz | +| Performance efficiency cp | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal, with $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}$ + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 112025.md b/config/Typora/draftsRecover/2026-3-19 README 112025.md new file mode 100644 index 0000000..77c32c5 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 112025.md @@ -0,0 +1,277 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ---------------------------------------------- | --------- | --------------- | +| \gamma | 0.7 | | +| \beta | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number Z1 | 72 | | +| Pinion 2 tooth number Z2 | 18 | | +| Pinion modulus m_0 | 0.016 | m | +| Pinion width b | 0.1 | m | +| Internal diameter pinion 1 d_{i1} | 0.5 | m | +| Internal diameter pinion 2 d_{i_2} | 0.3 | m | +| Input speed N_1 | 17 | m/s | +| Contact angle \alpha | 20 | degree | +| Steel density \rho_{steel} | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass m_{in} | 54000 | kg | +| Output mass m_{out} | 10 | kg | +| **Stiffness** | | | +| Flexion x : k_x=k_{x_1}=k_{x_2} | 1e8 | N/m | +| Flexion y : k_y=k_{y_1}=k_{y_2} | 1e8 | N/m | +| Torsion z : k_\theta=k_{\theta_1}=k_{\theta_2} | 1e5 | N/m | +| Mean mesh stiffness k_{mesh_{mean}} | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related \eta | 5e-2 | N/(m/s)/(kg) | +| Stiffness related \beta | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius r_{blade} | 6 | m | +| Air density \rho_{air} | 1.225 | kg/m3 | +| Wind speed (mean) v_{wind_{mean}} | 10 | m/s | +| Fluctuating external torque T_{fluct} | 50 | N | +| Fluctuating external frequency f_{fluct} | 6 | Hz | +| Performance efficiency cp | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal, with $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(\varepsilon)*T_{mesh}$ + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 112050.md b/config/Typora/draftsRecover/2026-3-19 README 112050.md new file mode 100644 index 0000000..5a92521 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 112050.md @@ -0,0 +1,277 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ---------------------------------------------- | --------- | --------------- | +| \gamma | 0.7 | | +| \beta | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number Z1 | 72 | | +| Pinion 2 tooth number Z2 | 18 | | +| Pinion modulus m_0 | 0.016 | m | +| Pinion width b | 0.1 | m | +| Internal diameter pinion 1 d_{i1} | 0.5 | m | +| Internal diameter pinion 2 d_{i_2} | 0.3 | m | +| Input speed N_1 | 17 | m/s | +| Contact angle \alpha | 20 | degree | +| Steel density \rho_{steel} | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass m_{in} | 54000 | kg | +| Output mass m_{out} | 10 | kg | +| **Stiffness** | | | +| Flexion x : k_x=k_{x_1}=k_{x_2} | 1e8 | N/m | +| Flexion y : k_y=k_{y_1}=k_{y_2} | 1e8 | N/m | +| Torsion z : k_\theta=k_{\theta_1}=k_{\theta_2} | 1e5 | N/m | +| Mean mesh stiffness k_{mesh_{mean}} | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related \eta | 5e-2 | N/(m/s)/(kg) | +| Stiffness related \beta | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius r_{blade} | 6 | m | +| Air density \rho_{air} | 1.225 | kg/m3 | +| Wind speed (mean) v_{wind_{mean}} | 10 | m/s | +| Fluctuating external torque T_{fluct} | 50 | N | +| Fluctuating external frequency f_{fluct} | 6 | Hz | +| Performance efficiency cp | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal, with $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 112109.md b/config/Typora/draftsRecover/2026-3-19 README 112109.md new file mode 100644 index 0000000..96ebf41 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 112109.md @@ -0,0 +1,277 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ---------------------------------------------- | --------- | --------------- | +| \gamma | 0.7 | | +| \beta | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number Z1 | 72 | | +| Pinion 2 tooth number Z2 | 18 | | +| Pinion modulus m_0 | 0.016 | m | +| Pinion width b | 0.1 | m | +| Internal diameter pinion 1 d_{i1} | 0.5 | m | +| Internal diameter pinion 2 d_{i_2} | 0.3 | m | +| Input speed N_1 | 17 | m/s | +| Contact angle \alpha | 20 | degree | +| Steel density \rho_{steel} | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass m_{in} | 54000 | kg | +| Output mass m_{out} | 10 | kg | +| **Stiffness** | | | +| Flexion x : k_x=k_{x_1}=k_{x_2} | 1e8 | N/m | +| Flexion y : k_y=k_{y_1}=k_{y_2} | 1e8 | N/m | +| Torsion z : k_\theta=k_{\theta_1}=k_{\theta_2} | 1e5 | N/m | +| Mean mesh stiffness k_{mesh_{mean}} | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related \eta | 5e-2 | N/(m/s)/(kg) | +| Stiffness related \beta | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius r_{blade} | 6 | m | +| Air density \rho_{air} | 1.225 | kg/m3 | +| Wind speed (mean) v_{wind_{mean}} | 10 | m/s | +| Fluctuating external torque T_{fluct} | 50 | N | +| Fluctuating external frequency f_{fluct} | 6 | Hz | +| Performance efficiency cp | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal, with $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 112128.md b/config/Typora/draftsRecover/2026-3-19 README 112128.md new file mode 100644 index 0000000..d44a634 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 112128.md @@ -0,0 +1,277 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ---------------------------------------------- | --------- | --------------- | +| \gamma | 0.7 | | +| \beta | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number Z1 | 72 | | +| Pinion 2 tooth number Z2 | 18 | | +| Pinion modulus m_0 | 0.016 | m | +| Pinion width b | 0.1 | m | +| Internal diameter pinion 1 d_{i1} | 0.5 | m | +| Internal diameter pinion 2 d_{i_2} | 0.3 | m | +| Input speed N_1 | 17 | m/s | +| Contact angle \alpha | 20 | degree | +| Steel density \rho_{steel} | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass m_{in} | 54000 | kg | +| Output mass m_{out} | 10 | kg | +| **Stiffness** | | | +| Flexion x : k_x=k_{x_1}=k_{x_2} | 1e8 | N/m | +| Flexion y : k_y=k_{y_1}=k_{y_2} | 1e8 | N/m | +| Torsion z : k_\theta=k_{\theta_1}=k_{\theta_2} | 1e5 | N/m | +| Mean mesh stiffness k_{mesh_{mean}} | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related \eta | 5e-2 | N/(m/s)/(kg) | +| Stiffness related \beta | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius r_{blade} | 6 | m | +| Air density \rho_{air} | 1.225 | kg/m3 | +| Wind speed (mean) v_{wind_{mean}} | 10 | m/s | +| Fluctuating external torque T_{fluct} | 50 | N | +| Fluctuating external frequency f_{fluct} | 6 | Hz | +| Performance efficiency cp | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal, with $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 112148.md b/config/Typora/draftsRecover/2026-3-19 README 112148.md new file mode 100644 index 0000000..703ab7e --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 112148.md @@ -0,0 +1,277 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ---------------------------------------------- | --------- | --------------- | +| \gamma | 0.7 | | +| \beta | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number Z1 | 72 | | +| Pinion 2 tooth number Z2 | 18 | | +| Pinion modulus m_0 | 0.016 | m | +| Pinion width b | 0.1 | m | +| Internal diameter pinion 1 d_{i1} | 0.5 | m | +| Internal diameter pinion 2 d_{i_2} | 0.3 | m | +| Input speed N_1 | 17 | m/s | +| Contact angle \alpha | 20 | degree | +| Steel density \rho_{steel} | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass m_{in} | 54000 | kg | +| Output mass m_{out} | 10 | kg | +| **Stiffness** | | | +| Flexion x : k_x=k_{x_1}=k_{x_2} | 1e8 | N/m | +| Flexion y : k_y=k_{y_1}=k_{y_2} | 1e8 | N/m | +| Torsion z : k_\theta=k_{\theta_1}=k_{\theta_2} | 1e5 | N/m | +| Mean mesh stiffness k_{mesh_{mean}} | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related \eta | 5e-2 | N/(m/s)/(kg) | +| Stiffness related \beta | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius r_{blade} | 6 | m | +| Air density \rho_{air} | 1.225 | kg/m3 | +| Wind speed (mean) v_{wind_{mean}} | 10 | m/s | +| Fluctuating external torque T_{fluct} | 50 | N | +| Fluctuating external frequency f_{fluct} | 6 | Hz | +| Performance efficiency cp | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value (one t, with $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 112223.md b/config/Typora/draftsRecover/2026-3-19 README 112223.md new file mode 100644 index 0000000..b6cb862 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 112223.md @@ -0,0 +1,277 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ---------------------------------------------- | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1 | 17 | m/s | +| Contact angle \alpha | 20 | degree | +| Steel density \rho_{steel} | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass m_{in} | 54000 | kg | +| Output mass m_{out} | 10 | kg | +| **Stiffness** | | | +| Flexion x : k_x=k_{x_1}=k_{x_2} | 1e8 | N/m | +| Flexion y : k_y=k_{y_1}=k_{y_2} | 1e8 | N/m | +| Torsion z : k_\theta=k_{\theta_1}=k_{\theta_2} | 1e5 | N/m | +| Mean mesh stiffness k_{mesh_{mean}} | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related \eta | 5e-2 | N/(m/s)/(kg) | +| Stiffness related \beta | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius r_{blade} | 6 | m | +| Air density \rho_{air} | 1.225 | kg/m3 | +| Wind speed (mean) v_{wind_{mean}} | 10 | m/s | +| Fluctuating external torque T_{fluct} | 50 | N | +| Fluctuating external frequency f_{fluct} | 6 | Hz | +| Performance efficiency cp | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value (one tooth in contact, , with $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 112242.md b/config/Typora/draftsRecover/2026-3-19 README 112242.md new file mode 100644 index 0000000..b1c0d3a --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 112242.md @@ -0,0 +1,277 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related \eta | 5e-2 | N/(m/s)/(kg) | +| Stiffness related \beta | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius r_{blade} | 6 | m | +| Air density \rho_{air} | 1.225 | kg/m3 | +| Wind speed (mean) v_{wind_{mean}} | 10 | m/s | +| Fluctuating external torque T_{fluct} | 50 | N | +| Fluctuating external frequency f_{fluct} | 6 | Hz | +| Performance efficiency cp | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value (one tooth in contact, , with $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 112302.md b/config/Typora/draftsRecover/2026-3-19 README 112302.md new file mode 100644 index 0000000..001b718 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 112302.md @@ -0,0 +1,277 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency f_{fluct} | 6 | Hz | +| Performance efficiency cp | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value (one tooth in contact, , with $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 112342.md b/config/Typora/draftsRecover/2026-3-19 README 112342.md new file mode 100644 index 0000000..ee2f6a0 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 112342.md @@ -0,0 +1,277 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) , with $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 112401.md b/config/Typora/draftsRecover/2026-3-19 README 112401.md new file mode 100644 index 0000000..4375603 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 112401.md @@ -0,0 +1,277 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its dou , with $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 112419.md b/config/Typora/draftsRecover/2026-3-19 README 112419.md new file mode 100644 index 0000000..1a12416 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 112419.md @@ -0,0 +1,277 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by ith $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 112505.md b/config/Typora/draftsRecover/2026-3-19 README 112505.md new file mode 100644 index 0000000..6a15e7e --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 112505.md @@ -0,0 +1,279 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> $T_{mesh}=1/(Z_1)$ + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 112525.md b/config/Typora/draftsRecover/2026-3-19 README 112525.md new file mode 100644 index 0000000..13eaa79 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 112525.md @@ -0,0 +1,279 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> $T_{mesh}=1/f_{mesh=1/(Z1*N1/60)$ + +## TO FIX + +> [!ATTENTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 112612.md b/config/Typora/draftsRecover/2026-3-19 README 112612.md new file mode 100644 index 0000000..7b7b989 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 112612.md @@ -0,0 +1,282 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 113027.md b/config/Typora/draftsRecover/2026-3-19 README 113027.md new file mode 100644 index 0000000..a2202a6 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 113027.md @@ -0,0 +1,282 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approxi + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 113045.md b/config/Typora/draftsRecover/2026-3-19 README 113045.md new file mode 100644 index 0000000..07152d2 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 113045.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c1 +> $$ +> + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 113138.md b/config/Typora/draftsRecover/2026-3-19 README 113138.md new file mode 100644 index 0000000..3e44b1b --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 113138.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=(1+(1/Z1))/(\pi *cos(\alpha)*((sin(\alpha)/2+\sqrt{sin(alp)}))) +> $$ +> + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 113219.md b/config/Typora/draftsRecover/2026-3-19 README 113219.md new file mode 100644 index 0000000..488587d --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 113219.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{(1+(1/Z1))/(\pi *cos(\alpha)*((sin(\alpha)/2+\sqrt{sin(\alpha)^2/4+1/(Z1^2)+1/Z1}))) +> $$ +> + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 113523.md b/config/Typora/draftsRecover/2026-3-19 README 113523.md new file mode 100644 index 0000000..f5bbc00 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 113523.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{(\pi *cos(\alpha)*(\frasin(\alpha)/2+\sqrt{sin(\alpha)^2/4+1/(Z1^2)+1/Z1})))} +> $$ +> + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 113609.md b/config/Typora/draftsRecover/2026-3-19 README 113609.md new file mode 100644 index 0000000..79f905d --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 113609.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{(\pi cos(\alpha)(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{/4+1/(Z1^2)+1/Z1})))} +> $$ +> + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 113629.md b/config/Typora/draftsRecover/2026-3-19 README 113629.md new file mode 100644 index 0000000..1293696 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 113629.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{(\pi cos(\alpha)(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+1/Z1})))} +> $$ +> + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 113659.md b/config/Typora/draftsRecover/2026-3-19 README 113659.md new file mode 100644 index 0000000..c89322e --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 113659.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{(\pi cos(\alpha)(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}} +> $$ +> + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 113758.md b/config/Typora/draftsRecover/2026-3-19 README 113758.md new file mode 100644 index 0000000..4642fd4 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 113758.md @@ -0,0 +1,286 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} +> $$ +> + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 113836.md b/config/Typora/draftsRecover/2026-3-19 README 113836.md new file mode 100644 index 0000000..b74158a --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 113836.md @@ -0,0 +1,288 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 113937.md b/config/Typora/draftsRecover/2026-3-19 README 113937.md new file mode 100644 index 0000000..f13cb3f --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 113937.md @@ -0,0 +1,292 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114002.md b/config/Typora/draftsRecover/2026-3-19 README 114002.md new file mode 100644 index 0000000..bf463c3 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114002.md @@ -0,0 +1,294 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time** + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114100.md b/config/Typora/draftsRecover/2026-3-19 README 114100.md new file mode 100644 index 0000000..3eeaaa3 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114100.md @@ -0,0 +1,294 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114126.md b/config/Typora/draftsRecover/2026-3-19 README 114126.md new file mode 100644 index 0000000..2ebf54a --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114126.md @@ -0,0 +1,294 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114147.md b/config/Typora/draftsRecover/2026-3-19 README 114147.md new file mode 100644 index 0000000..2b82e1d --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114147.md @@ -0,0 +1,294 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114212.md b/config/Typora/draftsRecover/2026-3-19 README 114212.md new file mode 100644 index 0000000..449a940 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114212.md @@ -0,0 +1,294 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114227.md b/config/Typora/draftsRecover/2026-3-19 README 114227.md new file mode 100644 index 0000000..4d478ce --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114227.md @@ -0,0 +1,294 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)*T_{mesh}$ and $T_{low}=(2-\varepsilon)*T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs*n_$ + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114310.md b/config/Typora/draftsRecover/2026-3-19 README 114310.md new file mode 100644 index 0000000..0506aaa --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114310.md @@ -0,0 +1,294 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1*\dot{x}_1^2+ + \frac{1}{2}m_1*\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2*\dot{x_2}^2+ + \frac{1}{2}m_2*\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114358.md b/config/Typora/draftsRecover/2026-3-19 README 114358.md new file mode 100644 index 0000000..fc41f9e --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114358.md @@ -0,0 +1,296 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114417.md b/config/Typora/draftsRecover/2026-3-19 README 114417.md new file mode 100644 index 0000000..3c0b5cd --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114417.md @@ -0,0 +1,296 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** speed is initialized at its “stable” + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114438.md b/config/Typora/draftsRecover/2026-3-19 README 114438.md new file mode 100644 index 0000000..a47644e --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114438.md @@ -0,0 +1,298 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** speed is initialized at its “stable” value. + +> before any + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114452.md b/config/Typora/draftsRecover/2026-3-19 README 114452.md new file mode 100644 index 0000000..c3032d3 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114452.md @@ -0,0 +1,298 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** speed is initialized at its “stable” value. + +> if no auimplementation + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114508.md b/config/Typora/draftsRecover/2026-3-19 README 114508.md new file mode 100644 index 0000000..b7f7304 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114508.md @@ -0,0 +1,298 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by starting + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114521.md b/config/Typora/draftsRecover/2026-3-19 README 114521.md new file mode 100644 index 0000000..6b23bde --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114521.md @@ -0,0 +1,298 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing th + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114536.md b/config/Typora/draftsRecover/2026-3-19 README 114536.md new file mode 100644 index 0000000..cf3205f --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114536.md @@ -0,0 +1,298 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the stabi + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114645.md b/config/Typora/draftsRecover/2026-3-19 README 114645.md new file mode 100644 index 0000000..db01b9a --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114645.md @@ -0,0 +1,298 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds at the + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114700.md b/config/Typora/draftsRecover/2026-3-19 README 114700.md new file mode 100644 index 0000000..45da289 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114700.md @@ -0,0 +1,298 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initia” + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114726.md b/config/Typora/draftsRecover/2026-3-19 README 114726.md new file mode 100644 index 0000000..8e5da64 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114726.md @@ -0,0 +1,300 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) +> +> + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114740.md b/config/Typora/draftsRecover/2026-3-19 README 114740.md new file mode 100644 index 0000000..b43194a --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114740.md @@ -0,0 +1,300 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114800.md b/config/Typora/draftsRecover/2026-3-19 README 114800.md new file mode 100644 index 0000000..f40f644 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114800.md @@ -0,0 +1,300 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed, ) + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114818.md b/config/Typora/draftsRecover/2026-3-19 README 114818.md new file mode 100644 index 0000000..bf9be5c --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114818.md @@ -0,0 +1,302 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a Newmakr + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114838.md b/config/Typora/draftsRecover/2026-3-19 README 114838.md new file mode 100644 index 0000000..f428d59 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114838.md @@ -0,0 +1,302 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a Newmark scheme is used to compute the + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114911.md b/config/Typora/draftsRecover/2026-3-19 README 114911.md new file mode 100644 index 0000000..e7176ad --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114911.md @@ -0,0 +1,303 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [x] Auto speed initial +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114915.md b/config/Typora/draftsRecover/2026-3-19 README 114915.md new file mode 100644 index 0000000..14ffa96 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114915.md @@ -0,0 +1,303 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [x] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114916.md b/config/Typora/draftsRecover/2026-3-19 README 114916.md new file mode 100644 index 0000000..ac4cf3e --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114916.md @@ -0,0 +1,303 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 114917.md b/config/Typora/draftsRecover/2026-3-19 README 114917.md new file mode 100644 index 0000000..ac4cf3e --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 114917.md @@ -0,0 +1,303 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +K(t)= K_e(t) +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 115220.md b/config/Typora/draftsRecover/2026-3-19 README 115220.md new file mode 100644 index 0000000..d28788a --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 115220.md @@ -0,0 +1,303 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +\frac{K(t)}{K_e(t)= \\ +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 115226.md b/config/Typora/draftsRecover/2026-3-19 README 115226.md new file mode 100644 index 0000000..d28788a --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 115226.md @@ -0,0 +1,303 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +\frac{K(t)}{K_e(t)= \\ +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 115227.md b/config/Typora/draftsRecover/2026-3-19 README 115227.md new file mode 100644 index 0000000..0f21f84 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 115227.md @@ -0,0 +1,303 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +\frac{K(t)}{K_e(t)}= \\ +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 115233.md b/config/Typora/draftsRecover/2026-3-19 README 115233.md new file mode 100644 index 0000000..0f21f84 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 115233.md @@ -0,0 +1,303 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +\frac{K(t)}{K_e(t)}= \\ +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 115250.md b/config/Typora/draftsRecover/2026-3-19 README 115250.md new file mode 100644 index 0000000..0f21f84 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 115250.md @@ -0,0 +1,303 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +\frac{K(t)}{K_e(t)}= \\ +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 115253.md b/config/Typora/draftsRecover/2026-3-19 README 115253.md new file mode 100644 index 0000000..0f21f84 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 115253.md @@ -0,0 +1,303 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +\frac{K(t)}{K_e(t)}= \\ +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 115256.md b/config/Typora/draftsRecover/2026-3-19 README 115256.md new file mode 100644 index 0000000..9fa813c --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 115256.md @@ -0,0 +1,303 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 README 115257.md b/config/Typora/draftsRecover/2026-3-19 README 115257.md new file mode 100644 index 0000000..9fa813c --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 README 115257.md @@ -0,0 +1,303 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** +$$ +C = \eta M+\beta K_{mean} +$$ +**Forces** +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2\approx \epsilon +> $$ +> + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 typora_readme 122102.md b/config/Typora/draftsRecover/2026-3-19 typora_readme 122102.md new file mode 100644 index 0000000..aedfb40 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 typora_readme 122102.md @@ -0,0 +1,318 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- + +> [!BUG] +> Some equation has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 typora_readme 122104.md b/config/Typora/draftsRecover/2026-3-19 typora_readme 122104.md new file mode 100644 index 0000000..d0e2626 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 typora_readme 122104.md @@ -0,0 +1,306 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- + +> [!BUG] +> Some equation has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex + +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 typora_readme 122132.md b/config/Typora/draftsRecover/2026-3-19 typora_readme 122132.md new file mode 100644 index 0000000..a0d223b --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 typora_readme 122132.md @@ -0,0 +1,317 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- + +> [!BUG] +> Some equation has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2 \approx \varepsilon +> $$ +> + +$$ + +$$ + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 typora_readme 122500.md b/config/Typora/draftsRecover/2026-3-19 typora_readme 122500.md new file mode 100644 index 0000000..7a84dca --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 typora_readme 122500.md @@ -0,0 +1,312 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- + +> [!INFO] +> Some equation has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2 \approx \varepsilon +> $$ + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 typora_readme 122502.md b/config/Typora/draftsRecover/2026-3-19 typora_readme 122502.md new file mode 100644 index 0000000..8103ce9 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 typora_readme 122502.md @@ -0,0 +1,312 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- + +> [!] +> Some equation has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2 \approx \varepsilon +> $$ + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 typora_readme 122503.md b/config/Typora/draftsRecover/2026-3-19 typora_readme 122503.md new file mode 100644 index 0000000..d90091a --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 typora_readme 122503.md @@ -0,0 +1,314 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- + +> [!NOTE] +> Some equation has been put in latex block code as they didnt show properly on gitlab +> +> + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2 \approx \varepsilon +> $$ + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 typora_readme 122508.md b/config/Typora/draftsRecover/2026-3-19 typora_readme 122508.md new file mode 100644 index 0000000..3235c38 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 typora_readme 122508.md @@ -0,0 +1,312 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- + +> [!NOTE] +> Some equation has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2 \approx \varepsilon +> $$ + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 typora_readme 122511.md b/config/Typora/draftsRecover/2026-3-19 typora_readme 122511.md new file mode 100644 index 0000000..825063d --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 typora_readme 122511.md @@ -0,0 +1,311 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- + +> [! + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2 \approx \varepsilon +> $$ + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-19 typora_readme 122513.md b/config/Typora/draftsRecover/2026-3-19 typora_readme 122513.md new file mode 100644 index 0000000..3ad0bbd --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-19 typora_readme 122513.md @@ -0,0 +1,309 @@ +--- +Author: Antoine Foucault-Castelli +Date: 17/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.0 +--- + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [ ] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : +> $$ +> c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +> c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +> c_{12}=c_1+c_2 \approx \varepsilon +> $$ + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 075207.md b/config/Typora/draftsRecover/2026-3-20 README 075207.md new file mode 100644 index 0000000..4b130a6 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 075207.md @@ -0,0 +1,322 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 19/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [x] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 075213.md b/config/Typora/draftsRecover/2026-3-20 README 075213.md new file mode 100644 index 0000000..44a216c --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 075213.md @@ -0,0 +1,324 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 19/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [x] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 075234.md b/config/Typora/draftsRecover/2026-3-20 README 075234.md new file mode 100644 index 0000000..0900a94 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 075234.md @@ -0,0 +1,327 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 19/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [x] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| Errors | Value | Unit | +| Profile e | | | +| | | | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 082011.md b/config/Typora/draftsRecover/2026-3-20 README 082011.md new file mode 100644 index 0000000..b55f782 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 082011.md @@ -0,0 +1,327 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 19/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [x] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| Errors | Value | Unit | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 110155.md b/config/Typora/draftsRecover/2026-3-20 README 110155.md new file mode 100644 index 0000000..b55f782 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 110155.md @@ -0,0 +1,327 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 19/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [x] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| Errors | Value | Unit | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 110811.md b/config/Typora/draftsRecover/2026-3-20 README 110811.md new file mode 100644 index 0000000..6547a63 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 110811.md @@ -0,0 +1,326 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 19/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [x] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| Errors | Value | Unit | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 111444.md b/config/Typora/draftsRecover/2026-3-20 README 111444.md new file mode 100644 index 0000000..6547a63 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 111444.md @@ -0,0 +1,326 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 19/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [x] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| Errors | Value | Unit | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 112733.md b/config/Typora/draftsRecover/2026-3-20 README 112733.md new file mode 100644 index 0000000..30ea6bc --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 112733.md @@ -0,0 +1,325 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 19/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [x] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| Errors | Value | Unit | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 113126.md b/config/Typora/draftsRecover/2026-3-20 README 113126.md new file mode 100644 index 0000000..30ea6bc --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 113126.md @@ -0,0 +1,325 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 19/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [x] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| Errors | Value | Unit | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 113145.md b/config/Typora/draftsRecover/2026-3-20 README 113145.md new file mode 100644 index 0000000..30ea6bc --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 113145.md @@ -0,0 +1,325 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 19/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [x] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| Errors | Value | Unit | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 113257.md b/config/Typora/draftsRecover/2026-3-20 README 113257.md new file mode 100644 index 0000000..30ea6bc --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 113257.md @@ -0,0 +1,325 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 19/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [x] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| Errors | Value | Unit | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 113352.md b/config/Typora/draftsRecover/2026-3-20 README 113352.md new file mode 100644 index 0000000..30ea6bc --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 113352.md @@ -0,0 +1,325 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 19/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [x] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| Errors | Value | Unit | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 115525.md b/config/Typora/draftsRecover/2026-3-20 README 115525.md new file mode 100644 index 0000000..65e1ff3 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 115525.md @@ -0,0 +1,325 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 19/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [ ] Errors/defects implementation + - [x] profile error + - [ ] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| Errors | Value | Unit | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +m \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 140828.md b/config/Typora/draftsRecover/2026-3-20 README 140828.md new file mode 100644 index 0000000..4151e7b --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 140828.md @@ -0,0 +1,332 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| Errors | Value | Unit | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** error profile is implemented as : + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 140831.md b/config/Typora/draftsRecover/2026-3-20 README 140831.md new file mode 100644 index 0000000..c09d00f --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 140831.md @@ -0,0 +1,332 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | Unit | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** error profile is implemented as : + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 140946.md b/config/Typora/draftsRecover/2026-3-20 README 140946.md new file mode 100644 index 0000000..8e1ae72 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 140946.md @@ -0,0 +1,336 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** error profile is implemented as : +$$ +ep(t) = e_{12}+\sum ^{+\infty +$$ + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141011.md b/config/Typora/draftsRecover/2026-3-20 README 141011.md new file mode 100644 index 0000000..53fd5f2 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141011.md @@ -0,0 +1,336 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** error profile is implemented as : +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) +$$ + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141220.md b/config/Typora/draftsRecover/2026-3-20 README 141220.md new file mode 100644 index 0000000..1fc7d4d --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141220.md @@ -0,0 +1,337 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** error profile is implemented as : +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \đra +$$ + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141300.md b/config/Typora/draftsRecover/2026-3-20 README 141300.md new file mode 100644 index 0000000..95d10cf --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141300.md @@ -0,0 +1,338 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** error profile is implemented as : +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\} +$$ + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141340.md b/config/Typora/draftsRecover/2026-3-20 README 141340.md new file mode 100644 index 0000000..c021ed7 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141340.md @@ -0,0 +1,341 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** error profile is implemented as : +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} + +\end +$$ + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141358.md b/config/Typora/draftsRecover/2026-3-20 README 141358.md new file mode 100644 index 0000000..e6c8ff3 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141358.md @@ -0,0 +1,341 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** error profile is implemented as : +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) +\end{bmatrix} +$$ + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141424.md b/config/Typora/draftsRecover/2026-3-20 README 141424.md new file mode 100644 index 0000000..831f5ae --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141424.md @@ -0,0 +1,341 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** error profile is implemented as : +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ r +\end{bmatrix} +$$ + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141449.md b/config/Typora/draftsRecover/2026-3-20 README 141449.md new file mode 100644 index 0000000..070b7f2 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141449.md @@ -0,0 +1,341 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** error profile is implemented as : +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) 0 +\end{bmatrix} +$$ + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141519.md b/config/Typora/draftsRecover/2026-3-20 README 141519.md new file mode 100644 index 0000000..13f9a0a --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141519.md @@ -0,0 +1,341 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** error profile is implemented as ($+\infty$ is approxim: +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141538.md b/config/Typora/draftsRecover/2026-3-20 README 141538.md new file mode 100644 index 0000000..217f81c --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141538.md @@ -0,0 +1,341 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** error profile is implemented as ($+\infty$ is approximated at $1000$) : +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141558.md b/config/Typora/draftsRecover/2026-3-20 README 141558.md new file mode 100644 index 0000000..c4a61d0 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141558.md @@ -0,0 +1,345 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141616.md b/config/Typora/draftsRecover/2026-3-20 README 141616.md new file mode 100644 index 0000000..603964e --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141616.md @@ -0,0 +1,345 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141646.md b/config/Typora/draftsRecover/2026-3-20 README 141646.md new file mode 100644 index 0000000..8e8f993 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141646.md @@ -0,0 +1,347 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ : + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141713.md b/config/Typora/draftsRecover/2026-3-20 README 141713.md new file mode 100644 index 0000000..fa89a52 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141713.md @@ -0,0 +1,351 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$ : + $$ + \alpha' + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141746.md b/config/Typora/draftsRecover/2026-3-20 README 141746.md new file mode 100644 index 0000000..83f629d --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141746.md @@ -0,0 +1,351 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$ : + $$ + \alpha'=acos(\frac{rb_1+rb_2}{E+a}) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141823.md b/config/Typora/draftsRecover/2026-3-20 README 141823.md new file mode 100644 index 0000000..f9c3c46 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141823.md @@ -0,0 +1,351 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox` + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141836.md b/config/Typora/draftsRecover/2026-3-20 README 141836.md new file mode 100644 index 0000000..a029fd8 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141836.md @@ -0,0 +1,351 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only cha + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141859.md b/config/Typora/draftsRecover/2026-3-20 README 141859.md new file mode 100644 index 0000000..0fd71fd --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141859.md @@ -0,0 +1,351 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of . + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141918.md b/config/Typora/draftsRecover/2026-3-20 README 141918.md new file mode 100644 index 0000000..a96e454 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141918.md @@ -0,0 +1,351 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the pr. + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 141935.md b/config/Typora/draftsRecover/2026-3-20 README 141935.md new file mode 100644 index 0000000..ecf1317 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 141935.md @@ -0,0 +1,351 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phase. + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-20 README 144210.md b/config/Typora/draftsRecover/2026-3-20 README 144210.md new file mode 100644 index 0000000..008c477 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-20 README 144210.md @@ -0,0 +1,351 @@ +--- +Author: Antoine Foucault-Castelli +Date: 19/03/2026 +Update: 20/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 4.1 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +main.m +func.m + time_sampling + inertia + gearbox_geometry + mesh_stiffness + wind_excitation + mass_matrix + stiffness_matrix + stiffness_update + damping_matrix + forces_matrix + initialization + newmark + error_profile_excitation + force_error_profile +parameters.m +display.m + disp_xy(t,x,i) + speed_xy(t,v,i) + acc_xy(t,v,i) + disp_theta(t,x,i) + speed_theta(t,v,i) + acc_theta(t,a,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt) + plot_x(t,x,i) + plot_fep(t,F_ep,i) +only_display.m +display_update.m +printer.m +``` + +`main.m` is the launcher for the full code compilation +`func` is the function class, containing every function used in the code +`parameters` is the model parameters document +`display` is the displayer for figures +`only_display` to skip non-needed full compilation +`display_update` to update a single graph if needed +`printer` prints all images in `../../print/` (only linux/mac) + +## How does it work ? +**For Matlab under windows :** +open matlab and launch main.m + +> [!WARNING] +> remove `graphics_toolkit("gnuplot")` which is only useful for Octave visualization + +**For Octave/Linux :** + +```bash +cd [path_to_cloned]/code/versions/[current_version]/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [ ] ODE45 ? +- [x] Displays from last version (in class) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [ ] README + - [x] Maths + - [ ] Images + - [ ] Source(s) +- [ ] Random models implementation +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [ ] Auto speed initialization +- [ ] Tests + - [ ] different speed + - [ ] different blade radii +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass related $\eta$ | 5e-2 | N/(m/s)/(kg) | +| Stiffness related $\beta$ | 1e-6 | N/(m/s)/(N/rad) | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 10 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error | 50e-6 | m | +| Center distance error | 10e-3 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 094615.md b/config/Typora/draftsRecover/2026-3-31 README 094615.md new file mode 100644 index 0000000..ccf937a --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 094615.md @@ -0,0 +1,391 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> UNTESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 094616.md b/config/Typora/draftsRecover/2026-3-31 README 094616.md new file mode 100644 index 0000000..8a0fe1c --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 094616.md @@ -0,0 +1,391 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> UNTESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 094653.md b/config/Typora/draftsRecover/2026-3-31 README 094653.md new file mode 100644 index 0000000..4513218 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 094653.md @@ -0,0 +1,391 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%k +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> UNTESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 094909.md b/config/Typora/draftsRecover/2026-3-31 README 094909.md new file mode 100644 index 0000000..9a70328 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 094909.md @@ -0,0 +1,392 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ +Ec = \frac{1}{2}m_1\dot{x}_1^2+ + \frac{1}{2}m_1\dot{y}_1^2+ + \frac{1}{2}I_{11}\dot{\theta}_{11}^2+ + \frac{1}{2}I_{12}\dot{\theta}_{12}^2+ + \frac{1}{2}m_2\dot{x_2}^2+ + \frac{1}{2}m_2\dot{y_2}^2+ + \frac{1}{2}I_{22}\dot{\theta}_{22}^2+ + \frac{1}{2}I_{21}\dot{\theta}_{21}^2 +\\ +Ep = \frac{1}{2}k_{x_1}x_{1}^2+ + \frac{1}{2}k_{y_1}y_{1}^2+ + \frac{1}{2}k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + \frac{1}{2}k_{x_2}x_{2}^2+ + \frac{1}{2}k_{y_2}y_{2}^2+ + \frac{1}{2}k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + \frac{1}{2}K_e(t)\delta_1^2(t) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 095023.md b/config/Typora/draftsRecover/2026-3-31 README 095023.md new file mode 100644 index 0000000..c5b96b2 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 095023.md @@ -0,0 +1,404 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep_1}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{x}_1}\right)=m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{y}_1}\right)=m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{11}}\right)=I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})=Cm \\ +&\frac{\partial Ep_1}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec_1}{\partial \dot{\theta}_{12}}\right)=I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)=0 \\ + +&\frac{\partial Ep_1}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{x}_2}\right)=m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{y}_2}\right)=m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)=0 \\ +&\frac{\partial Ep_1}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{22}}\right)=I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})=-Cr \\ +&\frac{\partial Ep_1}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec_2}{\partial \dot{\theta}_{21}}\right)=I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 095117.md b/config/Typora/draftsRecover/2026-3-31 README 095117.md new file mode 100644 index 0000000..e21b866 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 095117.md @@ -0,0 +1,412 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+C\{\dot{q}\}+([Ks]+[K(t)])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +\frac{K(t)}{K_e(t)}= +\begin{bmatrix} + sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & r_1.sin(\alpha) & -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & r_2.sin(\alpha) \\ + sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & r_1.cos(\alpha) & -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1.sin(\alpha) & r_1.cos(\alpha) & 0 & r_1^2 & -r_1.sin(\alpha) & -r_1.cos(\alpha) & 0 & r_1.r_2 \\ + -sin(\alpha)^2 & -sin(\alpha).cos(\alpha) & 0 & -r_1.sin(\alpha) & sin(\alpha)^2 & sin(\alpha).cos(\alpha) & 0 & -r_2.sin(\alpha) \\ + -sin(\alpha).cos(\alpha) & -cos(\alpha)^2 & 0 & -r_1.cos(\alpha) & sin(\alpha).cos(\alpha) & cos(\alpha)^2 & 0 & -r_2.cos(\alpha) \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_2.sin(\alpha) & r_2.cos(\alpha) & 0 & r_1.r_2 & -r_2.sin(\alpha) & -r_2.cos(\alpha) & 0 & r_2^2 \\ +\end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 095204.md b/config/Typora/draftsRecover/2026-3-31 README 095204.md new file mode 100644 index 0000000..21cb52e --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 095204.md @@ -0,0 +1,412 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 095235.md b/config/Typora/draftsRecover/2026-3-31 README 095235.md new file mode 100644 index 0000000..84569e6 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 095235.md @@ -0,0 +1,425 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} \\ +\text{with} \\ + s_1 \sin(\alpha)$ \\ + s_2 &$\cos(\alpha)$ \\ + s_3 &$\sin^2(\alpha)$ \\ + s_4 &$\cos^2(\alpha)$ \\ + s_5 &$\sin(\alpha)\cos(\alpha)$ \\ + s_6 &$r_1\cos(\alpha)$ \\ + s_7 &$r_1\sin(\alpha)$ \\ + s_8 &$r_2\cos(\alpha)$ \\ + s_9 &$r_2\sin(\alpha)$ \\ + s_{10} &$r_1^2$ \\ + s_{11} &$r_2^2$ \\ + s_{12} &$r_1r_2$ +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 095310.md b/config/Typora/draftsRecover/2026-3-31 README 095310.md new file mode 100644 index 0000000..91cd7c1 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 095310.md @@ -0,0 +1,425 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} \\ +\text{with} \\ + $s_1 \sin(\alpha)$ \\ + $s_2 \cos(\alpha)$ \\ + $s_3 \sin^2(\alpha)$ \\ + $s_4 \cos^2(\alpha)$ \\ + $s_5 \sin(\alpha)\cos(\alpha)$ \\ + $s_6 r_1\cos(\alpha)$ \\ + $s_7 r_1\sin(\alpha)$ \\ + $s_8 r_2\cos(\alpha)$ \\ + $s_9 r_2\sin(\alpha)$ \\ + $s_{10} r_1^2$ \\ + $s_{11} r_2^2$ \\ + $s_{12} r_1r_2$ +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 095345.md b/config/Typora/draftsRecover/2026-3-31 README 095345.md new file mode 100644 index 0000000..11ce702 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 095345.md @@ -0,0 +1,425 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} \\ +\text{with} \\ + s_1 \sin(\alpha) + s_2 \cos(\alpha) \\ + s_3 \sin^2(\alpha) \\ + s_4 \cos^2(\alpha) \\ + s_5 \sin(\alpha)\cos(\alpha) \\ + s_6 r_1\cos(\alpha) \\ + s_7 r_1\sin(\alpha) \\ + s_8 r_2\cos(\alpha) \\ + s_9 r_2\sin(\alpha) \\ + s_{10} r_1^2 \\ + s_{11} r_2^2 \\ + s_{12} r_1r_2 +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 095412.md b/config/Typora/draftsRecover/2026-3-31 README 095412.md new file mode 100644 index 0000000..0e864ee --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 095412.md @@ -0,0 +1,425 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} \\ +\text{with} \\ + s_1 \sin(\alpha) \hspace{1cm} + s_2 \cos(\alpha) \\ + s_3 \sin^2(\alpha) \hspace{1cm} + s_4 \cos^2(\alpha) \\ + s_5 \sin(\alpha)\cos(\alpha) \hspace{1cm} + s_6 r_1\cos(\alpha) \\ + s_7 r_1\sin(\alpha) \hspace{1cm} + s_8 r_2\cos(\alpha) \\ + s_9 r_2\sin(\alpha) \hspace{1cm} + s_{10} r_1^2 \\ + s_{11} r_2^2 \hspace{1cm} + s_{12} r_1r_2 +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 095442.md b/config/Typora/draftsRecover/2026-3-31 README 095442.md new file mode 100644 index 0000000..09ddcf8 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 095442.md @@ -0,0 +1,424 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} \\ +\text{with} \\ + s_1 =\sin(\alpha) \hspace{1cm} + s_2 =\cos(\alpha) \hspace{1cm} + s_3 =\sin^2(\alpha) \hspace{1cm} + s_4 =\cos^2(\alpha) \hspace{1cm} + s_5 =\sin(\alpha)\cos(\alpha) \hspace{1cm} + s_6 =r_1\cos(\alpha) \hspace{1cm} + s_7 =r_1\sin(\alpha) \hsp\hspace{1cm}\\ + s_9 =r_2\sin(\alpha) \hspace{1cm} + s_{10} =r_1^2 \\ + s_{11} =r_2^2 \hspace{1cm} + s_{12} =r_1r_2 +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 095519.md b/config/Typora/draftsRecover/2026-3-31 README 095519.md new file mode 100644 index 0000000..edb69a5 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 095519.md @@ -0,0 +1,424 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} \\ +\text{with} \\ + s_1 =\sin(\alpha) \hspace{1cm} + s_2 =\cos(\alpha) \hspace{1cm} + s_3 =\sin^2(\alpha) \hspace{1cm} + s_4 =\cos^2(\alpha) \hspace{1cm} + s_5 =\sin(\alpha)\cos(\alpha) \hspace{1cm} + s_6 =r_1\cos(\alpha) \hspace{1cm} + s_7 =r_1\sin(\alpha) \hsp\hspace{1cm}\\ + s_9 =r_2\sin(\alpha) \hspace{1cm} + s_{10} =r_1^2 \hspace{1cm} + s_{11} =r_2^2 \hspace{1cm} + s_{12} =r_1r_2 +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 095541.md b/config/Typora/draftsRecover/2026-3-31 README 095541.md new file mode 100644 index 0000000..9f7421f --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 095541.md @@ -0,0 +1,424 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} \\ +\text{with} \\ + s_1 =\sin(\alpha) \hspace{1cm} + s_2 =\cos(\alpha) \hspace{1cm} + s_3 =\sin^2(\alpha) \\ + s_4 =\cos^2(\alpha) \hspace{1cm} + s_5 =\sin(\alpha)\cos(\alpha) \hspace{1cm} + s_6 =r_1\cos(\alpha) \\ + s_7 =r_1\sin(\alpha) \hspace{1cm} + s_9 =r_2\sin(\alpha) \hspace{1cm} + s_{10} =r_1^2 \hspace{1cm} + s_{11} =r_2^2 \hspace{1cm} + s_{12} =r_1r_2 +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 095643.md b/config/Typora/draftsRecover/2026-3-31 README 095643.md new file mode 100644 index 0000000..2ec2ab4 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 095643.md @@ -0,0 +1,425 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix} +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} \\ +\text{with} \\ + s_1 =\sin(\alpha) \hspace{1cm} + s_2 =\cos(\alpha) \hspace{1cm} + s_3 =\sin^2(\alpha) \\ + s_4 =\cos^2(\alpha) \hspace{1cm} + s_5 =\sin(\alpha)\cos(\alpha) \hspace{1cm} + s_6 =r_1\cos(\alpha) \\ + s_7 =r_1\sin(\alpha) \hspace{1cm} + s_8 =r_2\cos(\alpha) \hspace{1cm} + s_9 =r_2\sin(\alpha) \\ + s_{10} =r_1^2 \hspace{1cm} + s_{11} =r_2^2 \hspace{1cm} + s_{12} =r_1r_2 +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 095716.md b/config/Typora/draftsRecover/2026-3-31 README 095716.md new file mode 100644 index 0000000..401b935 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 095716.md @@ -0,0 +1,425 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix}\\ + \text{with} \\ + s_1 =\sin(\alpha) \hspace{1cm} + s_2 =\cos(\alpha) \hspace{1cm} + s_3 =\sin^2(\alpha) \\ + s_4 =\cos^2(\alpha) \hspace{1cm} + s_5 =\sin(\alpha)\cos(\alpha) \hspace{1cm} + s_6 =r_1\cos(\alpha) \\ + s_7 =r_1\sin(\alpha) \hspace{1cm} + s_8 =r_2\cos(\alpha) \hspace{1cm} + s_9 =r_2\sin(\alpha) \\ + s_{10} =r_1^2 \hspace{1cm} + s_{11} =r_2^2 \hspace{1cm} + s_{12} =r_1r_2 +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{in} \\ 0 \\ 0\\ 0\\ T_{out}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 095823.md b/config/Typora/draftsRecover/2026-3-31 README 095823.md new file mode 100644 index 0000000..b487e74 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 095823.md @@ -0,0 +1,427 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix}\\ + \text{with} \\ + s_1 =\sin(\alpha) \hspace{1cm} + s_2 =\cos(\alpha) \hspace{1cm} + s_3 =\sin^2(\alpha) \\ + s_4 =\cos^2(\alpha) \hspace{1cm} + s_5 =\sin(\alpha)\cos(\alpha) \hspace{1cm} + s_6 =r_1\cos(\alpha) \\ + s_7 =r_1\sin(\alpha) \hspace{1cm} + s_8 =r_2\cos(\alpha) \hspace{1cm} + s_9 =r_2\sin(\alpha) \\ + s_{10} =r_1^2 \hspace{1cm} + s_{11} =r_2^2 \hspace{1cm} + s_{12} =r_1r_2 +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ 0\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) +> +> + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 095908.md b/config/Typora/draftsRecover/2026-3-31 README 095908.md new file mode 100644 index 0000000..831985a --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 095908.md @@ -0,0 +1,432 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix}\\ + \text{with} \\ + s_1 =\sin(\alpha) \hspace{1cm} + s_2 =\cos(\alpha) \hspace{1cm} + s_3 =\sin^2(\alpha) \\ + s_4 =\cos^2(\alpha) \hspace{1cm} + s_5 =\sin(\alpha)\cos(\alpha) \hspace{1cm} + s_6 =r_1\cos(\alpha) \\ + s_7 =r_1\sin(\alpha) \hspace{1cm} + s_8 =r_2\cos(\alpha) \hspace{1cm} + s_9 =r_2\sin(\alpha) \\ + s_{10} =r_1^2 \hspace{1cm} + s_{11} =r_2^2 \hspace{1cm} + s_{12} =r_1r_2 +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ 0\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 095959.md b/config/Typora/draftsRecover/2026-3-31 README 095959.md new file mode 100644 index 0000000..269ea0b --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 095959.md @@ -0,0 +1,432 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix}\\ + \text{with} \\ + s_1 =\sin(\alpha) \hspace{1cm} + s_2 =\cos(\alpha) \hspace{1cm} + s_3 =\sin^2(\alpha) \\ + s_4 =\cos^2(\alpha) \hspace{1cm} + s_5 =\sin(\alpha)\cos(\alpha) \hspace{1cm} + s_6 =r_1\cos(\alpha) \\ + s_7 =r_1\sin(\alpha) \hspace{1cm} + s_8 =r_2\cos(\alpha) \hspace{1cm} + s_9 =r_2\sin(\alpha) \\ + s_{10} =r_1^2 \hspace{1cm} + s_{11} =r_2^2 \hspace{1cm} + s_{12} =r_1r_2 +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ 0\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational time : `44sec for fs=2500` / `n_periods = 10` +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 100000.md b/config/Typora/draftsRecover/2026-3-31 README 100000.md new file mode 100644 index 0000000..7251909 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 100000.md @@ -0,0 +1,432 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix}\\ + \text{with} \\ + s_1 =\sin(\alpha) \hspace{1cm} + s_2 =\cos(\alpha) \hspace{1cm} + s_3 =\sin^2(\alpha) \\ + s_4 =\cos^2(\alpha) \hspace{1cm} + s_5 =\sin(\alpha)\cos(\alpha) \hspace{1cm} + s_6 =r_1\cos(\alpha) \\ + s_7 =r_1\sin(\alpha) \hspace{1cm} + s_8 =r_2\cos(\alpha) \hspace{1cm} + s_9 =r_2\sin(\alpha) \\ + s_{10} =r_1^2 \hspace{1cm} + s_{11} =r_2^2 \hspace{1cm} + s_{12} =r_1r_2 +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ 0\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +Example of computational tim +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 100015.md b/config/Typora/draftsRecover/2026-3-31 README 100015.md new file mode 100644 index 0000000..1b745c2 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 100015.md @@ -0,0 +1,432 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix}\\ + \text{with} \\ + s_1 =\sin(\alpha) \hspace{1cm} + s_2 =\cos(\alpha) \hspace{1cm} + s_3 =\sin^2(\alpha) \\ + s_4 =\cos^2(\alpha) \hspace{1cm} + s_5 =\sin(\alpha)\cos(\alpha) \hspace{1cm} + s_6 =r_1\cos(\alpha) \\ + s_7 =r_1\sin(\alpha) \hspace{1cm} + s_8 =r_2\cos(\alpha) \hspace{1cm} + s_9 =r_2\sin(\alpha) \\ + s_{10} =r_1^2 \hspace{1cm} + s_{11} =r_2^2 \hspace{1cm} + s_{12} =r_1r_2 +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ 0\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +For the computational speed, here’s m +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 100017.md b/config/Typora/draftsRecover/2026-3-31 README 100017.md new file mode 100644 index 0000000..8ca9e0c --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 100017.md @@ -0,0 +1,432 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix}\\ + \text{with} \\ + s_1 =\sin(\alpha) \hspace{1cm} + s_2 =\cos(\alpha) \hspace{1cm} + s_3 =\sin^2(\alpha) \\ + s_4 =\cos^2(\alpha) \hspace{1cm} + s_5 =\sin(\alpha)\cos(\alpha) \hspace{1cm} + s_6 =r_1\cos(\alpha) \\ + s_7 =r_1\sin(\alpha) \hspace{1cm} + s_8 =r_2\cos(\alpha) \hspace{1cm} + s_9 =r_2\sin(\alpha) \\ + s_{10} =r_1^2 \hspace{1cm} + s_{11} =r_2^2 \hspace{1cm} + s_{12} =r_1r_2 +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ 0\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +For the computational speed, here’s my machi +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 100018.md b/config/Typora/draftsRecover/2026-3-31 README 100018.md new file mode 100644 index 0000000..669381b --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 100018.md @@ -0,0 +1,432 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix}\\ + \text{with} \\ + s_1 =\sin(\alpha) \hspace{1cm} + s_2 =\cos(\alpha) \hspace{1cm} + s_3 =\sin^2(\alpha) \\ + s_4 =\cos^2(\alpha) \hspace{1cm} + s_5 =\sin(\alpha)\cos(\alpha) \hspace{1cm} + s_6 =r_1\cos(\alpha) \\ + s_7 =r_1\sin(\alpha) \hspace{1cm} + s_8 =r_2\cos(\alpha) \hspace{1cm} + s_9 =r_2\sin(\alpha) \\ + s_{10} =r_1^2 \hspace{1cm} + s_{11} =r_2^2 \hspace{1cm} + s_{12} =r_1r_2 +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ 0\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +For the computational speed, here’s my machine’s spec +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 100130.md b/config/Typora/draftsRecover/2026-3-31 README 100130.md new file mode 100644 index 0000000..5376d5c --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 100130.md @@ -0,0 +1,432 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix}\\ + \text{with} \\ + s_1 =\sin(\alpha) \hspace{1cm} + s_2 =\cos(\alpha) \hspace{1cm} + s_3 =\sin^2(\alpha) \\ + s_4 =\cos^2(\alpha) \hspace{1cm} + s_5 =\sin(\alpha)\cos(\alpha) \hspace{1cm} + s_6 =r_1\cos(\alpha) \\ + s_7 =r_1\sin(\alpha) \hspace{1cm} + s_8 =r_2\cos(\alpha) \hspace{1cm} + s_9 =r_2\sin(\alpha) \\ + s_{10} =r_1^2 \hspace{1cm} + s_{11} =r_2^2 \hspace{1cm} + s_{12} =r_1r_2 +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ 0\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +For the computational speed, here’s my machine’s spec : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.8-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 100138.md b/config/Typora/draftsRecover/2026-3-31 README 100138.md new file mode 100644 index 0000000..abb43e3 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 100138.md @@ -0,0 +1,432 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix}\\ + \text{with} \\ + s_1 =\sin(\alpha) \hspace{1cm} + s_2 =\cos(\alpha) \hspace{1cm} + s_3 =\sin^2(\alpha) \\ + s_4 =\cos^2(\alpha) \hspace{1cm} + s_5 =\sin(\alpha)\cos(\alpha) \hspace{1cm} + s_6 =r_1\cos(\alpha) \\ + s_7 =r_1\sin(\alpha) \hspace{1cm} + s_8 =r_2\cos(\alpha) \hspace{1cm} + s_9 =r_2\sin(\alpha) \\ + s_{10} =r_1^2 \hspace{1cm} + s_{11} =r_2^2 \hspace{1cm} + s_{12} =r_1r_2 +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ 0\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +For the computational speed, here’s my machine’s spec : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-3-31 README 100142.md b/config/Typora/draftsRecover/2026-3-31 README 100142.md new file mode 100644 index 0000000..6211d34 --- /dev/null +++ b/config/Typora/draftsRecover/2026-3-31 README 100142.md @@ -0,0 +1,432 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_displayer.m +>> displays the inputs and outputs of the model + disp_xy(t,x,i) + speed_xy(t,x,i) + acc_xy(t,x,i) + disp_theta(t,x,i) + speed_theta(t,x,i) + acc_theta(t,x,i) + mesh_stiffness(t,k_var,k_mean,i) + taero(t,T_aero,i) + rms_on_x(x) + spectral_on_x(x,i,tf,dt,f_mesh,N1,f_wind,ratio,maxf,labely) + multi_spectral_on_x(x,tf,dt,maxf) + plot_x(t,x,i) + plot_fep(t,Fep,i) +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_fft_analysis.m +>> purpose: fft analysis for every parameter +>> output: 6 graphs + print/_fft_analysis/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ +\frac{\partial Ep}{\partial q_i}+ + \frac{d}{dt}\left(\frac{Ec}{\dot{q}_i}\right)- + \frac{\partial Ec}{\partial q_i}+ + \frac{\partial D}{\partial \dot{q}_i} + =\frac{W}{\partial q_i} +\\ + Ec = \frac{1}{2}\left(m_1\dot{x}_1^2+ + m_1\dot{y}_1^2+ + I_{11}\dot{\theta}_{11}^2+ + I_{12}\dot{\theta}_{12}^2+ + m_2\dot{x_2}^2+ + m_2\dot{y_2}^2+ + I_{22}\dot{\theta}_{22}^2+ + I_{21}\dot{\theta}_{21}^2\right) +\\ + Ep = \frac{1}{2}\left( k_{x_1}x_{1}^2+ + k_{y_1}y_{1}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}x_{2}^2+ + k_{y_2}y_{2}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t)\delta_1^2(t)\right) +\\ + D= + \frac{1}{2}\left( + D_{x_1}\dot{x_1}^2+ + D_{y_1}\dot{x_1}^2+ + D_{\theta_{11}}\dot{\theta}_{11}^2+ + D_{\theta_{12}}\dot{\theta}_{12}^2+ + D_{x_2}\dot{x_2}^2+ + D_{y_2}\dot{y_2}^2+ + D_{\theta_{22}}\dot{\theta}_{22}^2+ + D_{\theta_{21}}\dot{\theta}_{21}^2 + \right) +$$ + +### Equations of movement + +$Ep$ and $Ec$ are separated between the two shaft (1 and 2) + +```latex +$$ +\begin{cases} +&\frac{\partial Ep}{\partial x_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_1}\right)+\frac{\partial D}{\partial \dot{x}_1} + =m_1\ddot{x}_1+k_{x1}x_1+sin(\alpha)K_e(t)\delta _1(t)+D_{x_1}\dot{x_1}^2=0 \\ +&\frac{\partial Ep}{\partial y_1}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_1}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_1\ddot{y}_1+k_{y1}y_1+cos(\alpha)K_e(t)\delta _1(t)+D_{y_1}\dot{y_1}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{11}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{11}}\right)+\frac{\partial D}{\partial \dot{\theta}_{11}} + =I_{11}\ddot{\theta}_{11}+k_{\theta 1}(\theta_{11}-\theta_{12})+D_{\theta_{11}}\dot{\theta}_{11}=T_{in} \\ +&\frac{\partial Ep}{\partial \theta_{12}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{12}}\right)+\frac{\partial D}{\partial \dot{\theta}_{12}} + =I_{12}\ddot{\theta}_{12}+k_{\theta 1}(\theta_{12}-\theta_{11})+K_e(t)r_{b12}\delta_1(t)+D_{\theta_{12}}\dot{\theta}_{12}=0 \\ + +&\frac{\partial Ep}{\partial x_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{x}_2}\right)+\frac{\partial D}{\partial \dot{x}_2} + =m_2\ddot{x}_2+k_{x2}x_2-sin(\alpha)K_e(t)\delta _1(t)+D_{x_2}\dot{x_2}^2=0 \\ +&\frac{\partial Ep}{\partial y_2}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{y}_2}\right)+\frac{\partial D}{\partial \dot{y}_2} + =m_2\ddot{y}_2+k_{y2}y_2-cos(\alpha)K_e(t)\delta _1(t)+D_{y_2}\dot{y_2}^2=0 \\ +&\frac{\partial Ep}{\partial \theta_{22}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{22}}\right)+\frac{\partial D}{\partial \dot{\theta}_{22}} + =I_{22}\ddot{\theta}_{22}-k_{\theta 2}(\theta_{21}-\theta_{22})+D_{\theta_{22}}\dot{\theta}_{22}=0 \\ +&\frac{\partial Ep}{\partial \theta_{21}}+\frac{d}{dt}\left(\frac{\partial Ec}{\partial \dot{\theta}_{21}}\right)+\frac{\partial D}{\partial \dot{\theta}_{21}} + =I_{21}\ddot{\theta}_{21}-k_{\theta 2}(\theta_{21}-\theta_{22})+K_e(t)r_{b21}\delta_1(t)+D_{\theta_{21}}\dot{\theta}_{21}=0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}+\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +[M]\{\ddot{q}\}+D\{\dot{q}\}+([K_{var}(t)]+[K_{cst}])\{q\}=\{F_0\} \\ +\{q\}=\{x_1,y_1,\theta_{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var}(t) = K_e(t) + \begin{bmatrix} + s_3 & s_5 & 0 & s_7 & -s_3 & -s_5 & 0 & s_9 \\ + s_5 & s_4 & 0 & s_6 & -s_5 & -s_4 & 0 & s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_7 & s_6 & 0 & s_{10} & -s_7 & -s_6 & 0 & s_{12} \\ + -s_3 & -s_5 & 0 & -s_7 & s_3 & s_5 & 0 & -s_9 \\ + -s_5 & -s_4 & 0 & -s_6 & s_5 & s_4 & 0 & -s_8 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + s_9 & s_8 & 0 & s_{12} & -s_9 & -s_8 & 0 & s_{11} + \end{bmatrix}\\ + \text{with} \\ + s_1 =\sin(\alpha) \hspace{1cm} + s_2 =\cos(\alpha) \hspace{1cm} + s_3 =\sin^2(\alpha) \\ + s_4 =\cos^2(\alpha) \hspace{1cm} + s_5 =\sin(\alpha)\cos(\alpha) \hspace{1cm} + s_6 =r_1\cos(\alpha) \\ + s_7 =r_1\sin(\alpha) \hspace{1cm} + s_8 =r_2\cos(\alpha) \hspace{1cm} + s_9 =r_2\sin(\alpha) \\ + s_{10} =r_1^2 \hspace{1cm} + s_{11} =r_2^2 \hspace{1cm} + s_{12} =r_1r_2 +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ 0\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 105359.md b/config/Typora/draftsRecover/2026-4-21 README_v2 105359.md new file mode 100644 index 0000000..97c0bf8 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 105359.md @@ -0,0 +1,135 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$,$y$,input $\theta$ and output $\theta$), as a lumped parameters model. + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i +$$ + +The different terms ($k$ and $m$) are regrouped in matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ +## Development machine specification +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 105406.md b/config/Typora/draftsRecover/2026-4-21 README_v2 105406.md new file mode 100644 index 0000000..5f803b1 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 105406.md @@ -0,0 +1,135 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$,$y$,input $\theta$ and output $\theta$), as a lumped parameters model. + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. + +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i +$$ + +The different terms ($k$ and $m$) are regrouped in matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ +## Development machine specification +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 105459.md b/config/Typora/draftsRecover/2026-4-21 README_v2 105459.md new file mode 100644 index 0000000..23b611e --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 105459.md @@ -0,0 +1,134 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. Th + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. + +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i +$$ + +The different terms ($k$ and $m$) are regrouped in matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ +## Development machine specification +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 105516.md b/config/Typora/draftsRecover/2026-4-21 README_v2 105516.md new file mode 100644 index 0000000..e3e01a9 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 105516.md @@ -0,0 +1,138 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +q +$$ + + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. + +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i +$$ + +The different terms ($k$ and $m$) are regrouped in matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ +## Development machine specification +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 105751.md b/config/Typora/draftsRecover/2026-4-21 README_v2 105751.md new file mode 100644 index 0000000..6d22642 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 105751.md @@ -0,0 +1,138 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\} +$$ + + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. + +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i +$$ + +The different terms ($k$ and $m$) are regrouped in matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ +## Development machine specification +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 105813.md b/config/Typora/draftsRecover/2026-4-21 README_v2 105813.md new file mode 100644 index 0000000..5ab4cfc --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 105813.md @@ -0,0 +1,138 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,\} +$$ + + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. + +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i +$$ + +The different terms ($k$ and $m$) are regrouped in matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ +## Development machine specification +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 105931.md b/config/Typora/draftsRecover/2026-4-21 README_v2 105931.md new file mode 100644 index 0000000..cd8eed8 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 105931.md @@ -0,0 +1,138 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21\} +$$ + + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. + +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i +$$ + +The different terms ($k$ and $m$) are regrouped in matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ +## Development machine specification +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 110146.md b/config/Typora/draftsRecover/2026-4-21 README_v2 110146.md new file mode 100644 index 0000000..cb30365 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 110146.md @@ -0,0 +1,136 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. + +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i +$$ + +The different terms ($k$ and $m$) are regrouped in matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ +## Development machine specification +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 110227.md b/config/Typora/draftsRecover/2026-4-21 README_v2 110227.md new file mode 100644 index 0000000..f76d65b --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 110227.md @@ -0,0 +1,139 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. + +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ +Where $K_cst$ + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 110247.md b/config/Typora/draftsRecover/2026-4-21 README_v2 110247.md new file mode 100644 index 0000000..5e4cedc --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 110247.md @@ -0,0 +1,139 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. + +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ +Where $K_{cst}$ represents the constant terms + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 110312.md b/config/Typora/draftsRecover/2026-4-21 README_v2 110312.md new file mode 100644 index 0000000..8278eaa --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 110312.md @@ -0,0 +1,139 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. + +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 110334.md b/config/Typora/draftsRecover/2026-4-21 README_v2 110334.md new file mode 100644 index 0000000..e1b22c6 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 110334.md @@ -0,0 +1,139 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. + +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K$ + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 110552.md b/config/Typora/draftsRecover/2026-4-21 README_v2 110552.md new file mode 100644 index 0000000..2a9aac8 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 110552.md @@ -0,0 +1,141 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. + +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + + + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 110630.md b/config/Typora/draftsRecover/2026-4-21 README_v2 110630.md new file mode 100644 index 0000000..8904127 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 110630.md @@ -0,0 +1,145 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + + + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 110657.md b/config/Typora/draftsRecover/2026-4-21 README_v2 110657.md new file mode 100644 index 0000000..f2dceca --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 110657.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + + + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + + + +### Forces + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 111603.md b/config/Typora/draftsRecover/2026-4-21 README_v2 111603.md new file mode 100644 index 0000000..19ed69c --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 111603.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + + + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + + + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 111642.md b/config/Typora/draftsRecover/2026-4-21 README_v2 111642.md new file mode 100644 index 0000000..834e917 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 111642.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + + + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 111708.md b/config/Typora/draftsRecover/2026-4-21 README_v2 111708.md new file mode 100644 index 0000000..aacd2e4 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 111708.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $Ke$ + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + + + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 111727.md b/config/Typora/draftsRecover/2026-4-21 README_v2 111727.md new file mode 100644 index 0000000..47b5964 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 111727.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. Mesh ) + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + + + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 111754.md b/config/Typora/draftsRecover/2026-4-21 README_v2 111754.md new file mode 100644 index 0000000..c5ca3de --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 111754.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=()$ + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + + + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 111821.md b/config/Typora/draftsRecover/2026-4-21 README_v2 111821.md new file mode 100644 index 0000000..d773bcb --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 111821.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(alpha)+(y_1-y_2)\cos(\alpha)$ + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + + + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 111858.md b/config/Typora/draftsRecover/2026-4-21 README_v2 111858.md new file mode 100644 index 0000000..8982148 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 111858.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+$ + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + + + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 111916.md b/config/Typora/draftsRecover/2026-4-21 README_v2 111916.md new file mode 100644 index 0000000..a793706 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 111916.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the deflection + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + + + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 111950.md b/config/Typora/draftsRecover/2026-4-21 README_v2 111950.md new file mode 100644 index 0000000..8bd6d10 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 111950.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112009.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112009.md new file mode 100644 index 0000000..586ee02 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112009.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of contact ratio $\epsilon$ + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112032.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112032.md new file mode 100644 index 0000000..70ac0e3 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112032.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of contact ratio $\varepsilon\approx c_{12}=\sum$ + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112052.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112052.md new file mode 100644 index 0000000..a1cec07 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112052.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of contact ratio $\varepsilon\approx c_{12}=\sum^2_{}$ + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112123.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112123.md new file mode 100644 index 0000000..2821809 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112123.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+1/Z_i)$ + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112153.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112153.md new file mode 100644 index 0000000..9a227d4 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112153.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+1/Z_i}{sin(\alpha)+}$ + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112226.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112226.md new file mode 100644 index 0000000..433e696 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112226.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+1/Z_i}{sin(\alpha)+\sqrt{0.25\sin(\alpha0)^2+}}$ + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112244.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112244.md new file mode 100644 index 0000000..fab37b9 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112244.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+1/Z_i}{sin(\alpha)+\sqrt{0.25\sin(\alpha0)^2+1/(Z_2^2)+Z_2}}$ + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112300.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112300.md new file mode 100644 index 0000000..af8ab5d --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112300.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+1/Z_i}{sin(\alpha)+\sqrt{0.25\sin(\alpha0)^2+1/(Z_2^2)+Z^{-1}}}$ + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112338.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112338.md new file mode 100644 index 0000000..6f6fd8d --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112338.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+1/Z_i}{0.5*sin(\alpha)+\sqrt{0.25\sin(\alpha0)^2+(Z_i^{-2})+Z_i^{-1}}}$ + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112434.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112434.md new file mode 100644 index 0000000..b76654c --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112434.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112450.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112450.md new file mode 100644 index 0000000..0679ae8 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112450.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $$ + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112543.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112543.md new file mode 100644 index 0000000..505c7e3 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112543.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. A high period + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112629.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112629.md new file mode 100644 index 0000000..3afa01c --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112629.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. A high period is defined as $T_{mesh}(\epsilon -1) + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112704.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112704.md new file mode 100644 index 0000000..0f7da00 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112704.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. A high period is defined as $T_{mesh}(\varepsilon -1)$ and a low period as $T_{mesh}$ + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112740.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112740.md new file mode 100644 index 0000000..e56c2cd --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112740.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. A high period is defined as $T_{mesh}(\varepsilon -1)$ and a lowperiod as $T_{mesh}(2-\varepsilon)$ + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112757.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112757.md new file mode 100644 index 0000000..64db7b5 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112757.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined $T_{mesh}(\varepsilon -1)$ and a period as $T_{mesh}(2-\varepsilon)$ + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112826.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112826.md new file mode 100644 index 0000000..0111576 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112826.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{mesh}(\varepsilon -1)$; and the two-teeth period is defined by a period $T_{mesh}(2-\varepsilon)$ + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 112956.md b/config/Typora/draftsRecover/2026-4-21 README_v2 112956.md new file mode 100644 index 0000000..280e3f5 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 112956.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh sticontact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 113014.md b/config/Typora/draftsRecover/2026-4-21 README_v2 113014.md new file mode 100644 index 0000000..4306d4e --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 113014.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 113052.md b/config/Typora/draftsRecover/2026-4-21 README_v2 113052.md new file mode 100644 index 0000000..6be1c48 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 113052.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 113114.md b/config/Typora/draftsRecover/2026-4-21 README_v2 113114.md new file mode 100644 index 0000000..589c08d --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 113114.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}(\frac{1+(2-\varepsilon)}{2})$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 113139.md b/config/Typora/draftsRecover/2026-4-21 README_v2 113139.md new file mode 100644 index 0000000..0f0728d --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 113139.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}(\frac{1+(2-\varepsilon)}{2\varepsilon(\varepsilon-1)})$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 113227.md b/config/Typora/draftsRecover/2026-4-21 README_v2 113227.md new file mode 100644 index 0000000..00645c3 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 113227.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(\frac{1+(2-\varepsilon)}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-)$ + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 113419.md b/config/Typora/draftsRecover/2026-4-21 README_v2 113419.md new file mode 100644 index 0000000..2c983ac --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 113419.md @@ -0,0 +1,151 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 113633.md b/config/Typora/draftsRecover/2026-4-21 README_v2 113633.md new file mode 100644 index 0000000..428919b --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 113633.md @@ -0,0 +1,153 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +It gives for example the results of Fi + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 113648.md b/config/Typora/draftsRecover/2026-4-21 README_v2 113648.md new file mode 100644 index 0000000..0b8afea --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 113648.md @@ -0,0 +1,153 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +[] + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 113715.md b/config/Typora/draftsRecover/2026-4-21 README_v2 113715.md new file mode 100644 index 0000000..5531369 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 113715.md @@ -0,0 +1,153 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](/images/kvar.png) + +### Forces + +The forces vector is + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 113804.md b/config/Typora/draftsRecover/2026-4-21 README_v2 113804.md new file mode 100644 index 0000000..212b3c1 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 113804.md @@ -0,0 +1,156 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input +- + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 113830.md b/config/Typora/draftsRecover/2026-4-21 README_v2 113830.md new file mode 100644 index 0000000..5313485 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 113830.md @@ -0,0 +1,157 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input +- output efficiency +- a brake on 2nd shaft + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 113928.md b/config/Typora/draftsRecover/2026-4-21 README_v2 113928.md new file mode 100644 index 0000000..98c5453 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 113928.md @@ -0,0 +1,164 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input + +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp)/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + + +- output efficiency +- a brake on 2nd shaft + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 113947.md b/config/Typora/draftsRecover/2026-4-21 README_v2 113947.md new file mode 100644 index 0000000..61859a5 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 113947.md @@ -0,0 +1,162 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_blade$) + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency +- a brake on 2nd shaft + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114007.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114007.md new file mode 100644 index 0000000..a05bcf2 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114007.md @@ -0,0 +1,162 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, ) + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency +- a brake on 2nd shaft + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114025.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114025.md new file mode 100644 index 0000000..0365a63 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114025.md @@ -0,0 +1,162 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the ) + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency +- a brake on 2nd shaft + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114045.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114045.md new file mode 100644 index 0000000..3b64b20 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114045.md @@ -0,0 +1,162 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$) + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency +- a brake on 2nd shaft + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114111.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114111.md new file mode 100644 index 0000000..3697749 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114111.md @@ -0,0 +1,169 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency + +$$ +T_{out} = eff +$$ + + + +- a brake on 2nd shaft + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114136.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114136.md new file mode 100644 index 0000000..9af5913 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114136.md @@ -0,0 +1,169 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + + + +- a brake on 2nd shaft + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114153.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114153.md new file mode 100644 index 0000000..5c91ca5 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114153.md @@ -0,0 +1,173 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a brake on 2nd shaft + +$$ +T_{brake} = cst +$$ + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114212.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114212.md new file mode 100644 index 0000000..d92b77e --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114212.md @@ -0,0 +1,169 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, t + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114242.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114242.md new file mode 100644 index 0000000..a9bd79c --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114242.md @@ -0,0 +1,175 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\cmatrix{ + +} +$$ + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114308.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114308.md new file mode 100644 index 0000000..3a3ef42 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114308.md @@ -0,0 +1,175 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +0 & 0 & 0 & +\end{bmatrix} +$$ + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114515.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114515.md new file mode 100644 index 0000000..a2623e8 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114515.md @@ -0,0 +1,175 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 & 0 & 0 & 0 & T_{out}+T_{brake} & 0 +\end{bmatrix} +$$ + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114556.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114556.md new file mode 100644 index 0000000..d51ffc0 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114556.md @@ -0,0 +1,175 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ +## Numér + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114613.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114613.md new file mode 100644 index 0000000..992635d --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114613.md @@ -0,0 +1,178 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +## Numerical computation + +Numerical computation is done using a Newmark’s Sch + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114646.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114646.md new file mode 100644 index 0000000..0c7df2f --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114646.md @@ -0,0 +1,178 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +## Numerical computation + +Numerical computation is done using a Newmark’s scheme, with mean acceleration parameters ($$) + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114701.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114701.md new file mode 100644 index 0000000..939ddac --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114701.md @@ -0,0 +1,178 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +## Numerical computation + +Numerical computation is done using a Newmark’s scheme, with mean acceleration parameters ($\gamma=1/2$ and $\bet) + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114720.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114720.md new file mode 100644 index 0000000..6853fbc --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114720.md @@ -0,0 +1,178 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +## Numerical computation + +Numerical computation is done using a Newmark’s scheme, with mean acceleration parameters ($\gamma=1/2$ and $\beta=1/4$). Convergence is verified and the usual + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114746.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114746.md new file mode 100644 index 0000000..1c2858e --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114746.md @@ -0,0 +1,178 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +## Numerical computation + +Numerical computation is done using a Newmark’s scheme, with mean acceleration parameters ($\gamma=1/2$ and $\beta=1/4$). Convergence is verified and the usual sample rate $fs_{div}$ (assoc) + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114808.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114808.md new file mode 100644 index 0000000..96c79f9 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114808.md @@ -0,0 +1,178 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +## Numerical computation + +Numerical computation is done using a Newmark’s scheme, with mean acceleration parameters ($\gamma=1/2$ and $\beta=1/4$). Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11 + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114835.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114835.md new file mode 100644 index 0000000..50a471e --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114835.md @@ -0,0 +1,180 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +## Numerical computation + +Numerical computation is done using a Newmark’s scheme, with mean acceleration parameters ($\gamma=1/2$ and $\beta=1/4$). Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speeds + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114847.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114847.md new file mode 100644 index 0000000..41b7d59 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114847.md @@ -0,0 +1,180 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +## Numerical computation + +Numerical computation is done using a Newmark’s scheme, with mean acceleration parameters ($\gamma=1/2$ and $\beta=1/4$). Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its output v + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114915.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114915.md new file mode 100644 index 0000000..cb47ada --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114915.md @@ -0,0 +1,180 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +## Numerical computation + +Numerical computation is done using a Newmark’s scheme, with mean acceleration parameters ($\gamma=1/2$ and $\beta=1/4$). Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114937.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114937.md new file mode 100644 index 0000000..a47ceb4 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114937.md @@ -0,0 +1,180 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +## Numerical computation + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ , with mean acceleration parameters ($\gamma=1/2$ and $\beta=1/4$). Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 114958.md b/config/Typora/draftsRecover/2026-4-21 README_v2 114958.md new file mode 100644 index 0000000..566979c --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 114958.md @@ -0,0 +1,180 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +## Numerical computation + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for . Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 115028.md b/config/Typora/draftsRecover/2026-4-21 README_v2 115028.md new file mode 100644 index 0000000..6cdd3bc --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 115028.md @@ -0,0 +1,182 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +## Numerical computation + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 115150.md b/config/Typora/draftsRecover/2026-4-21 README_v2 115150.md new file mode 100644 index 0000000..57106a9 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 115150.md @@ -0,0 +1,185 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ +## + +## Numerical computation + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 115203.md b/config/Typora/draftsRecover/2026-4-21 README_v2 115203.md new file mode 100644 index 0000000..96d3ca4 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 115203.md @@ -0,0 +1,188 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + + + +## Numerical computation + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 115216.md b/config/Typora/draftsRecover/2026-4-21 README_v2 115216.md new file mode 100644 index 0000000..7e6acc7 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 115216.md @@ -0,0 +1,190 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error () + +## Numerical computation + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 115235.md b/config/Typora/draftsRecover/2026-4-21 README_v2 115235.md new file mode 100644 index 0000000..9babd32 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 115235.md @@ -0,0 +1,190 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a cosine ) + +## Numerical computation + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 115256.md b/config/Typora/draftsRecover/2026-4-21 README_v2 115256.md new file mode 100644 index 0000000..829bf81 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 115256.md @@ -0,0 +1,188 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +profile error (which adds a force depending on a multiple cosine profile)Numerical computation + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 115315.md b/config/Typora/draftsRecover/2026-4-21 README_v2 115315.md new file mode 100644 index 0000000..c41eee7 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 115315.md @@ -0,0 +1,191 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 115350.md b/config/Typora/draftsRecover/2026-4-21 README_v2 115350.md new file mode 100644 index 0000000..d61d275 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 115350.md @@ -0,0 +1,191 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 115745.md b/config/Typora/draftsRecover/2026-4-21 README_v2 115745.md new file mode 100644 index 0000000..e4f97cd --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 115745.md @@ -0,0 +1,226 @@ +| | | | +| ---- | ---- | ---- | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 115813.md b/config/Typora/draftsRecover/2026-4-21 README_v2 115813.md new file mode 100644 index 0000000..cb32d34 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 115813.md @@ -0,0 +1,226 @@ +| Gearbox | | | +| ------- | ---- | ---- | +| $Z1$ | | | +| $Z2$ | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 115844.md b/config/Typora/draftsRecover/2026-4-21 README_v2 115844.md new file mode 100644 index 0000000..3d98943 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 115844.md @@ -0,0 +1,226 @@ +| Gearbox | | | +| -------- | ---- | ---- | +| $Z1$ | | | +| $Z2$ | | | +| $m0$ | | | +| $b$ | | | +| $N1$ | | | +| $\alpha$ | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 115926.md b/config/Typora/draftsRecover/2026-4-21 README_v2 115926.md new file mode 100644 index 0000000..a89fada --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 115926.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | ---- | ---- | +| $Z1$ | | | +| $Z2$ | | | +| $m0$ | | | +| $b$ | | | +| $N1$ | | | +| $\alpha$ | | | +| $\rho_{steel}$ | | | +| $T_{brake}$ | | | +| **Masses** | | | +| $$ | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 115947.md b/config/Typora/draftsRecover/2026-4-21 README_v2 115947.md new file mode 100644 index 0000000..04d03e6 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 115947.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | ---- | ---- | +| $Z1$ | | | +| $Z2$ | | | +| $m0$ | | | +| $b$ | | | +| $N1$ | | | +| $\alpha$ | | | +| $\rho_{steel}$ | | | +| $T_{brake}$ | | | +| **Masses** | | | +| $m_{11}$ | | | +| $m_{22}$$ | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120001.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120001.md new file mode 100644 index 0000000..f2a32ec --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120001.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | ---- | ---- | +| $Z1$ | | | +| $Z2$ | | | +| $m0$ | | | +| $b$ | | | +| $N1$ | | | +| $\alpha$ | | | +| $\rho_{steel}$ | | | +| $T_{brake}$ | | | +| **Masses** | | | +| $m_{11}$ | | | +| $m_{22}$ | | | +| **Shaft** | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120038.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120038.md new file mode 100644 index 0000000..b33dfe2 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120038.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | ---- | ---- | +| $Z1$ | | | +| $Z2$ | | | +| $m0$ | | | +| $b$ | | | +| $N1$ | | | +| $\alpha$ | | | +| $\rho_{steel}$ | | | +| $T_{brake}$ | | | +| **Masses** | | | +| $m_{11}$ | | | +| $m_{22}$ | | | +| **Shafts** | | | +| $da1$ | | | +| $da2$ | | | +| $la1$ | | | +| $la2$ | | | +| $E_{steel}$ | | | +| $\nu_{steel}$ | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120101.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120101.md new file mode 100644 index 0000000..c603927 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120101.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | ---- | ---- | +| $Z1$ | | | +| $Z2$ | | | +| $m0$ | | | +| $b$ | | | +| $N1$ | | | +| $\alpha$ | | | +| $\rho_{steel}$ | | | +| $T_{brake}$ | | | +| **Masses** | | | +| $m_{11}$ | | | +| $m_{22}$ | | | +| **Shafts** | | | +| $da1$ | | | +| $da2$ | | | +| $la1$ | | | +| $la2$ | | | +| $E_{steel}$ | | | +| $\nu_{steel}$ | | | +| **Stiffnes** | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120135.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120135.md new file mode 100644 index 0000000..3d44151 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120135.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | ---- | ---- | +| $Z1$ | | | +| $Z2$ | | | +| $m0$ | | | +| $b$ | | | +| $N1$ | | | +| $\alpha$ | | | +| $\rho_{steel}$ | | | +| $T_{brake}$ | | | +| **Masses** | | | +| $m_{11}$ | | | +| $m_{22}$ | | | +| **Shafts** | | | +| $da1$ | | | +| $da2$ | | | +| $la1$ | | | +| $la2$ | | | +| $E_{steel}$ | | | +| $\nu_{steel}$ | | | +| **Stiffness** | | | +| $k_x$ | | | +| $k_y$ | | | +| **Wind** | | | +| $r_{blade}$ | | | +| $\rh$ | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120204.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120204.md new file mode 100644 index 0000000..fdfb148 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120204.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | ---- | ---- | +| $Z1$ | | | +| $Z2$ | | | +| $m0$ | | | +| $b$ | | | +| $N1$ | | | +| $\alpha$ | | | +| $\rho_{steel}$ | | | +| $T_{brake}$ | | | +| **Masses** | | | +| $m_{11}$ | | | +| $m_{22}$ | | | +| **Shafts** | | | +| $da1$ | | | +| $da2$ | | | +| $la1$ | | | +| $la2$ | | | +| $E_{steel}$ | | | +| $\nu_{steel}$ | | | +| **Stiffness** | | | +| $k_x$ | | | +| $k_y$ | | | +| **Wind** | | | +| $r_{blade}$ | | | +| $\rho _{air}$ | | | +| $v_{wind}$ | | | +| $T_{fluct}$ | | | +| $f_{fluct}$ | | | +| $Cp$ | | | +| | | | +| | | | +| | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120231.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120231.md new file mode 100644 index 0000000..91df37e --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120231.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | ------- | ---- | +| $Z1$ | Tooth n | | +| $Z2$ | | | +| $m0$ | | | +| $b$ | | | +| $N1$ | | | +| $\alpha$ | | | +| $\rho_{steel}$ | | | +| $T_{brake}$ | | | +| **Masses** | | | +| $m_{11}$ | | | +| $m_{22}$ | | | +| **Shafts** | | | +| $da1$ | | | +| $da2$ | | | +| $la1$ | | | +| $la2$ | | | +| $E_{steel}$ | | | +| $\nu_{steel}$ | | | +| **Stiffness** | | | +| $k_x$ | | | +| $k_y$ | | | +| **Wind** | | | +| $r_{blade}$ | | | +| $\rho _{air}$ | | | +| $v_{wind}$ | | | +| $T_{fluct}$ | | | +| $f_{fluct}$ | | | +| $Cp$ | | | +| **Defects** | | | +| $e12_{amp}$ | | | +| $gap$ | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120250.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120250.md new file mode 100644 index 0000000..1d65449 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120250.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | ----------- | ---- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulu | | +| $b$ | | | +| $N1$ | | | +| $\alpha$ | | | +| $\rho_{steel}$ | | | +| $T_{brake}$ | | | +| **Masses** | | | +| $m_{11}$ | | | +| $m_{22}$ | | | +| **Shafts** | | | +| $da1$ | | | +| $da2$ | | | +| $la1$ | | | +| $la2$ | | | +| $E_{steel}$ | | | +| $\nu_{steel}$ | | | +| **Stiffness** | | | +| $k_x$ | | | +| $k_y$ | | | +| **Wind** | | | +| $r_{blade}$ | | | +| $\rho _{air}$ | | | +| $v_{wind}$ | | | +| $T_{fluct}$ | | | +| $f_{fluct}$ | | | +| $Cp$ | | | +| **Defects** | | | +| $e12_{amp}$ | | | +| $gap$ | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120307.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120307.md new file mode 100644 index 0000000..ed78a74 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120307.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | ------------- | ----- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 | +| $b$ | Gear width | 0.1 | +| $N1$ | Inside diamet | | +| $\alpha$ | | | +| $\rho_{steel}$ | | | +| $T_{brake}$ | | | +| **Masses** | | | +| $m_{11}$ | | | +| $m_{22}$ | | | +| **Shafts** | | | +| $da1$ | | | +| $da2$ | | | +| $la1$ | | | +| $la2$ | | | +| $E_{steel}$ | | | +| $\nu_{steel}$ | | | +| **Stiffness** | | | +| $k_x$ | | | +| $k_y$ | | | +| **Wind** | | | +| $r_{blade}$ | | | +| $\rho _{air}$ | | | +| $v_{wind}$ | | | +| $T_{fluct}$ | | | +| $f_{fluct}$ | | | +| $Cp$ | | | +| **Defects** | | | +| $e12_{amp}$ | | | +| $gap$ | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120319.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120319.md new file mode 100644 index 0000000..3740bcd --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120319.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | ------------- | ----- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 | +| $b$ | Gear width | 0.1 | +| $N1$ | Shaft 1 speed | 17 RP | +| $\alpha$ | | | +| $\rho_{steel}$ | | | +| $T_{brake}$ | | | +| **Masses** | | | +| $m_{11}$ | | | +| $m_{22}$ | | | +| **Shafts** | | | +| $da1$ | | | +| $da2$ | | | +| $la1$ | | | +| $la2$ | | | +| $E_{steel}$ | | | +| $\nu_{steel}$ | | | +| **Stiffness** | | | +| $k_x$ | | | +| $k_y$ | | | +| **Wind** | | | +| $r_{blade}$ | | | +| $\rho _{air}$ | | | +| $v_{wind}$ | | | +| $T_{fluct}$ | | | +| $f_{fluct}$ | | | +| $Cp$ | | | +| **Defects** | | | +| $e12_{amp}$ | | | +| $gap$ | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120347.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120347.md new file mode 100644 index 0000000..56cc7cf --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120347.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | ------------- | ------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel densit | | +| $T_{brake}$ | | | +| **Masses** | | | +| $m_{11}$ | | | +| $m_{22}$ | | | +| **Shafts** | | | +| $da1$ | | | +| $da2$ | | | +| $la1$ | | | +| $la2$ | | | +| $E_{steel}$ | | | +| $\nu_{steel}$ | | | +| **Stiffness** | | | +| $k_x$ | | | +| $k_y$ | | | +| **Wind** | | | +| $r_{blade}$ | | | +| $\rho _{air}$ | | | +| $v_{wind}$ | | | +| $T_{fluct}$ | | | +| $f_{fluct}$ | | | +| $Cp$ | | | +| **Defects** | | | +| $e12_{amp}$ | | | +| $gap$ | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120403.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120403.md new file mode 100644 index 0000000..0f38d6f --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120403.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | ------------- | ---------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | 500 | 500 Nm | +| **Masses** | | | +| $m_{11}$ | | | +| $m_{22}$ | | | +| **Shafts** | | | +| $da1$ | | | +| $da2$ | | | +| $la1$ | | | +| $la2$ | | | +| $E_{steel}$ | | | +| $\nu_{steel}$ | | | +| **Stiffness** | | | +| $k_x$ | | | +| $k_y$ | | | +| **Wind** | | | +| $r_{blade}$ | | | +| $\rho _{air}$ | | | +| $v_{wind}$ | | | +| $T_{fluct}$ | | | +| $f_{fluct}$ | | | +| $Cp$ | | | +| **Defects** | | | +| $e12_{amp}$ | | | +| $gap$ | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120441.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120441.md new file mode 100644 index 0000000..5875cfb --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120441.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | ------------- | ---------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Mass | 2000 kg | +| $m_{22}$ | | 500 kg | +| **Shafts** | | | +| $da1$ | | | +| $da2$ | | | +| $la1$ | | | +| $la2$ | | | +| $E_{steel}$ | | | +| $\nu_{steel}$ | | | +| **Stiffness** | | | +| $k_x$ | | | +| $k_y$ | | | +| **Wind** | | | +| $r_{blade}$ | | | +| $\rho _{air}$ | | | +| $v_{wind}$ | | | +| $T_{fluct}$ | | | +| $f_{fluct}$ | | | +| $Cp$ | | | +| **Defects** | | | +| $e12_{amp}$ | | | +| $gap$ | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120457.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120457.md new file mode 100644 index 0000000..8031a80 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120457.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | --------------------- | ---------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and rotor mass | 2000 kg | +| $m_{22}$ | Output rotor ma | 500 kg | +| **Shafts** | | | +| $da1$ | | | +| $da2$ | | | +| $la1$ | | | +| $la2$ | | | +| $E_{steel}$ | | | +| $\nu_{steel}$ | | | +| **Stiffness** | | | +| $k_x$ | | | +| $k_y$ | | | +| **Wind** | | | +| $r_{blade}$ | | | +| $\rho _{air}$ | | | +| $v_{wind}$ | | | +| $T_{fluct}$ | | | +| $f_{fluct}$ | | | +| $Cp$ | | | +| **Defects** | | | +| $e12_{amp}$ | | | +| $gap$ | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120509.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120509.md new file mode 100644 index 0000000..8249711 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120509.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | --------------------------- | ---------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | | +| $da2$ | Shaft 2 | | +| $la1$ | | | +| $la2$ | | | +| $E_{steel}$ | | | +| $\nu_{steel}$ | | | +| **Stiffness** | | | +| $k_x$ | | | +| $k_y$ | | | +| **Wind** | | | +| $r_{blade}$ | | | +| $\rho _{air}$ | | | +| $v_{wind}$ | | | +| $T_{fluct}$ | | | +| $f_{fluct}$ | | | +| $Cp$ | | | +| **Defects** | | | +| $e12_{amp}$ | | | +| $gap$ | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120528.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120528.md new file mode 100644 index 0000000..5c64fb9 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120528.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | --------------------------- | ---------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 | +| $da2$ | Shaft 2 diameter | | +| $la1$ | Shaft 1 length | | +| $la2$ | Shaft 2 length | | +| $E_{steel}$ | | | +| $\nu_{steel}$ | | | +| **Stiffness** | | | +| $k_x$ | | | +| $k_y$ | | | +| **Wind** | | | +| $r_{blade}$ | | | +| $\rho _{air}$ | | | +| $v_{wind}$ | | | +| $T_{fluct}$ | | | +| $f_{fluct}$ | | | +| $Cp$ | | | +| **Defects** | | | +| $e12_{amp}$ | | | +| $gap$ | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120549.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120549.md new file mode 100644 index 0000000..7012035 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120549.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | --------------------------- | ---------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | | 2.1e11 M | +| $\nu_{steel}$ | | | +| **Stiffness** | | | +| $k_x$ | | | +| $k_y$ | | | +| **Wind** | | | +| $r_{blade}$ | | | +| $\rho _{air}$ | | | +| $v_{wind}$ | | | +| $T_{fluct}$ | | | +| $f_{fluct}$ | | | +| $Cp$ | | | +| **Defects** | | | +| $e12_{amp}$ | | | +| $gap$ | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120609.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120609.md new file mode 100644 index 0000000..a961e03 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120609.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | --------------------------- | ---------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | Young modulus of steel | 2.1e11 MPa | +| $\nu_{steel}$ | Poisson ratio of steel | | +| **Stiffness** | | | +| $k_x$ | | | +| $k_y$ | | | +| **Wind** | | | +| $r_{blade}$ | | | +| $\rho _{air}$ | | | +| $v_{wind}$ | | | +| $T_{fluct}$ | | | +| $f_{fluct}$ | | | +| $Cp$ | | | +| **Defects** | | | +| $e12_{amp}$ | | | +| $gap$ | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120631.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120631.md new file mode 100644 index 0000000..420c6db --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120631.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | ---------------------------- | ---------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | Young modulus of steel | 2.1e11 MPa | +| $\nu_{steel}$ | Poisson ratio of steel | 0.3 | +| **Stiffness** | | | +| $k_x$ | $x$ stiffness | | +| $k_y$ | $y$ translationnal stiffness | | +| **Wind** | | | +| $r_{blade}$ | | | +| $\rho _{air}$ | | | +| $v_{wind}$ | | | +| $T_{fluct}$ | | | +| $f_{fluct}$ | | | +| $Cp$ | | | +| **Defects** | | | +| $e12_{amp}$ | | | +| $gap$ | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120645.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120645.md new file mode 100644 index 0000000..16d23e2 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120645.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | --------------------------- | ---------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | Young modulus of steel | 2.1e11 MPa | +| $\nu_{steel}$ | Poisson ratio of steel | 0.3 | +| **Stiffness** | | | +| $k_x$ | $x$ translation stiffness | 1e8 N/m | +| $k_y$ | $y$ translation stiffness | | +| **Wind** | | | +| $r_{blade}$ | | | +| $\rho _{air}$ | | | +| $v_{wind}$ | | | +| $T_{fluct}$ | | | +| $f_{fluct}$ | | | +| $Cp$ | | | +| **Defects** | | | +| $e12_{amp}$ | | | +| $gap$ | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120714.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120714.md new file mode 100644 index 0000000..d24adf2 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120714.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | --------------------------- | ---------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | Young modulus of steel | 2.1e11 MPa | +| $\nu_{steel}$ | Poisson ratio of steel | 0.3 | +| **Stiffness** | | | +| $k_x$ | $x$ translation stiffness | 1e8 N/m | +| $k_y$ | $y$ translation stiffness | 1e8 N/m | +| **Wind** | | | +| $r_{blade}$ | Blade radius | | +| $\rho _{air}$ | Air density | | +| $v_{wind}$ | Wind mean spee | | +| $T_{fluct}$ | | | +| $f_{fluct}$ | | | +| $Cp$ | | | +| **Defects** | | | +| $e12_{amp}$ | | | +| $gap$ | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120733.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120733.md new file mode 100644 index 0000000..adaeec8 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120733.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | --------------------------- | ---------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | Young modulus of steel | 2.1e11 MPa | +| $\nu_{steel}$ | Poisson ratio of steel | 0.3 | +| **Stiffness** | | | +| $k_x$ | $x$ translation stiffness | 1e8 N/m | +| $k_y$ | $y$ translation stiffness | 1e8 N/m | +| **Wind** | | | +| $r_{blade}$ | Blade radius | | +| $\rho _{air}$ | Air density | | +| $v_{wind}$ | Wind mean speed | | +| $T_{fluct}$ | Wind fluctuating torque | | +| $f_{fluct}$ | Fluctua | | +| $Cp$ | | | +| **Defects** | | | +| $e12_{amp}$ | | | +| $gap$ | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120746.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120746.md new file mode 100644 index 0000000..93573b7 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120746.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | --------------------------- | ---------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | Young modulus of steel | 2.1e11 MPa | +| $\nu_{steel}$ | Poisson ratio of steel | 0.3 | +| **Stiffness** | | | +| $k_x$ | $x$ translation stiffness | 1e8 N/m | +| $k_y$ | $y$ translation stiffness | 1e8 N/m | +| **Wind** | | | +| $r_{blade}$ | Blade radius | | +| $\rho _{air}$ | Air density | | +| $v_{wind}$ | Wind mean speed | | +| $T_{fluct}$ | Wind fluctuating torque | | +| $f_{fluct}$ | Fluctuation frequency | | +| $Cp$ | Performance coefficient | | +| **Defects** | | | +| $e12_{amp}$ | Amplitu | | +| $gap$ | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120814.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120814.md new file mode 100644 index 0000000..1ff82ec --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120814.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | --------------------------- | ------------ | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | Young modulus of steel | 2.1e11 MPa | +| $\nu_{steel}$ | Poisson ratio of steel | 0.3 | +| **Stiffness** | | | +| $k_x$ | $x$ translation stiffness | 1e8 N/m | +| $k_y$ | $y$ translation stiffness | 1e8 N/m | +| **Wind** | | | +| $r_{blade}$ | Blade radius | | +| $\rho _{air}$ | Air density | | +| $v_{wind}$ | Wind mean speed | | +| $T_{fluct}$ | Wind fluctuating torque | | +| $f_{fluct}$ | Fluctuation frequency | | +| $Cp$ | Performance coefficient | | +| **Defects** | | | +| $e12_{amp}$ | Max profile error amplitude | | +| $gap$ | Center distance error | around $\1mm | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120834.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120834.md new file mode 100644 index 0000000..cf569b3 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120834.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | --------------------------- | --------------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | Young modulus of steel | 2.1e11 MPa | +| $\nu_{steel}$ | Poisson ratio of steel | 0.3 | +| **Stiffness** | | | +| $k_x$ | $x$ translation stiffness | 1e8 N/m | +| $k_y$ | $y$ translation stiffness | 1e8 N/m | +| **Wind** | | | +| $r_{blade}$ | Blade radius | | +| $\rho _{air}$ | Air density | | +| $v_{wind}$ | Wind mean speed | | +| $T_{fluct}$ | Wind fluctuating torque | | +| $f_{fluct}$ | Fluctuation frequency | | +| $Cp$ | Performance coefficient | | +| **Defects** | | | +| $e12_{amp}$ | Max profile error amplitude | Around 50$\mu | +| $gap$ | Center distance error | around $\pm$1mm | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120857.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120857.md new file mode 100644 index 0000000..0296cd2 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120857.md @@ -0,0 +1,226 @@ +| **Gearbox** | | | +| -------------- | --------------------------- | ---------------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | Young modulus of steel | 2.1e11 MPa | +| $\nu_{steel}$ | Poisson ratio of steel | 0.3 | +| **Stiffness** | | | +| $k_x$ | $x$ translation stiffness | 1e8 N/m | +| $k_y$ | $y$ translation stiffness | 1e8 N/m | +| **Wind** | | | +| $r_{blade}$ | Blade radius | | +| $\rho _{air}$ | Air density | | +| $v_{wind}$ | Wind mean speed | | +| $T_{fluct}$ | Wind fluctuating torque | 3000 Nm | +| $f_{fluct}$ | Fluctuation frequency | 6 H | +| $Cp$ | Performance coefficient | 16/27 | +| **Defects** | | | +| $e12_{amp}$ | Max profile error amplitude | Around 50$\mu m$ | +| $gap$ | Center distance error | around $\pm$1mm | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 120924.md b/config/Typora/draftsRecover/2026-4-21 README_v2 120924.md new file mode 100644 index 0000000..e4f97cd --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 120924.md @@ -0,0 +1,226 @@ +| | | | +| ---- | ---- | ---- | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | +| | | | + +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + + + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 121126.md b/config/Typora/draftsRecover/2026-4-21 README_v2 121126.md new file mode 100644 index 0000000..5b36495 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 121126.md @@ -0,0 +1,224 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 (some pack) + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + +| **Gearbox** | | | +| -------------- | --------------------------- | ---------------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | Young modulus of steel | 2.1e11 MPa | +| $\nu_{steel}$ | Poisson ratio of steel | 0.3 | +| **Stiffness** | | | +| $k_x$ | $x$ translation stiffness | 1e8 N/m | +| $k_y$ | $y$ translation stiffness | 1e8 N/m | +| **Wind** | | | +| $r_{blade}$ | Blade radius | 6 m | +| $\rho _{air}$ | Air density | 1.225 kg/m3 | +| $v_{wind}$ | Wind mean speed | 12 m/s | +| $T_{fluct}$ | Wind fluctuating torque | 3000 Nm | +| $f_{fluct}$ | Fluctuation frequency | 6 Hz | +| $Cp$ | Performance coefficient | 16/27 | +| **Defects** | | | +| $e12_{amp}$ | Max profile error amplitude | Around 50$\mu m$ | +| $gap$ | Center distance error | around $\pm$1mm | + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 121141.md b/config/Typora/draftsRecover/2026-4-21 README_v2 121141.md new file mode 100644 index 0000000..c3cd2e0 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 121141.md @@ -0,0 +1,224 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 (some package installed following first s) + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + +| **Gearbox** | | | +| -------------- | --------------------------- | ---------------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | Young modulus of steel | 2.1e11 MPa | +| $\nu_{steel}$ | Poisson ratio of steel | 0.3 | +| **Stiffness** | | | +| $k_x$ | $x$ translation stiffness | 1e8 N/m | +| $k_y$ | $y$ translation stiffness | 1e8 N/m | +| **Wind** | | | +| $r_{blade}$ | Blade radius | 6 m | +| $\rho _{air}$ | Air density | 1.225 kg/m3 | +| $v_{wind}$ | Wind mean speed | 12 m/s | +| $T_{fluct}$ | Wind fluctuating torque | 3000 Nm | +| $f_{fluct}$ | Fluctuation frequency | 6 Hz | +| $Cp$ | Performance coefficient | 16/27 | +| **Defects** | | | +| $e12_{amp}$ | Max profile error amplitude | Around 50$\mu m$ | +| $gap$ | Center distance error | around $\pm$1mm | + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 121203.md b/config/Typora/draftsRecover/2026-4-21 README_v2 121203.md new file mode 100644 index 0000000..6d4cb29 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 121203.md @@ -0,0 +1,224 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 (“some packages” installed following first start requirements, follow) + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + +| **Gearbox** | | | +| -------------- | --------------------------- | ---------------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | Young modulus of steel | 2.1e11 MPa | +| $\nu_{steel}$ | Poisson ratio of steel | 0.3 | +| **Stiffness** | | | +| $k_x$ | $x$ translation stiffness | 1e8 N/m | +| $k_y$ | $y$ translation stiffness | 1e8 N/m | +| **Wind** | | | +| $r_{blade}$ | Blade radius | 6 m | +| $\rho _{air}$ | Air density | 1.225 kg/m3 | +| $v_{wind}$ | Wind mean speed | 12 m/s | +| $T_{fluct}$ | Wind fluctuating torque | 3000 Nm | +| $f_{fluct}$ | Fluctuation frequency | 6 Hz | +| $Cp$ | Performance coefficient | 16/27 | +| **Defects** | | | +| $e12_{amp}$ | Max profile error amplitude | Around 50$\mu m$ | +| $gap$ | Center distance error | around $\pm$1mm | + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 121204.md b/config/Typora/draftsRecover/2026-4-21 README_v2 121204.md new file mode 100644 index 0000000..200f5cd --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 121204.md @@ -0,0 +1,224 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 (“some packages” installed following first start requirements, follow ) + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + +| **Gearbox** | | | +| -------------- | --------------------------- | ---------------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | Young modulus of steel | 2.1e11 MPa | +| $\nu_{steel}$ | Poisson ratio of steel | 0.3 | +| **Stiffness** | | | +| $k_x$ | $x$ translation stiffness | 1e8 N/m | +| $k_y$ | $y$ translation stiffness | 1e8 N/m | +| **Wind** | | | +| $r_{blade}$ | Blade radius | 6 m | +| $\rho _{air}$ | Air density | 1.225 kg/m3 | +| $v_{wind}$ | Wind mean speed | 12 m/s | +| $T_{fluct}$ | Wind fluctuating torque | 3000 Nm | +| $f_{fluct}$ | Fluctuation frequency | 6 Hz | +| $Cp$ | Performance coefficient | 16/27 | +| **Defects** | | | +| $e12_{amp}$ | Max profile error amplitude | Around 50$\mu m$ | +| $gap$ | Center distance error | around $\pm$1mm | + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 121210.md b/config/Typora/draftsRecover/2026-4-21 README_v2 121210.md new file mode 100644 index 0000000..b1aca52 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 121210.md @@ -0,0 +1,224 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 (“some packages” installed following first start requirements, follow error ) + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + +| **Gearbox** | | | +| -------------- | --------------------------- | ---------------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | Young modulus of steel | 2.1e11 MPa | +| $\nu_{steel}$ | Poisson ratio of steel | 0.3 | +| **Stiffness** | | | +| $k_x$ | $x$ translation stiffness | 1e8 N/m | +| $k_y$ | $y$ translation stiffness | 1e8 N/m | +| **Wind** | | | +| $r_{blade}$ | Blade radius | 6 m | +| $\rho _{air}$ | Air density | 1.225 kg/m3 | +| $v_{wind}$ | Wind mean speed | 12 m/s | +| $T_{fluct}$ | Wind fluctuating torque | 3000 Nm | +| $f_{fluct}$ | Fluctuation frequency | 6 Hz | +| $Cp$ | Performance coefficient | 16/27 | +| **Defects** | | | +| $e12_{amp}$ | Max profile error amplitude | Around 50$\mu m$ | +| $gap$ | Center distance error | around $\pm$1mm | + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 121214.md b/config/Typora/draftsRecover/2026-4-21 README_v2 121214.md new file mode 100644 index 0000000..da6d90c --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 121214.md @@ -0,0 +1,224 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 (“some packages” installed following first start requirements, follow the error message) + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + +| **Gearbox** | | | +| -------------- | --------------------------- | ---------------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | Young modulus of steel | 2.1e11 MPa | +| $\nu_{steel}$ | Poisson ratio of steel | 0.3 | +| **Stiffness** | | | +| $k_x$ | $x$ translation stiffness | 1e8 N/m | +| $k_y$ | $y$ translation stiffness | 1e8 N/m | +| **Wind** | | | +| $r_{blade}$ | Blade radius | 6 m | +| $\rho _{air}$ | Air density | 1.225 kg/m3 | +| $v_{wind}$ | Wind mean speed | 12 m/s | +| $T_{fluct}$ | Wind fluctuating torque | 3000 Nm | +| $f_{fluct}$ | Fluctuation frequency | 6 Hz | +| $Cp$ | Performance coefficient | 16/27 | +| **Defects** | | | +| $e12_{amp}$ | Max profile error amplitude | Around 50$\mu m$ | +| $gap$ | Center distance error | around $\pm$1mm | + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 121216.md b/config/Typora/draftsRecover/2026-4-21 README_v2 121216.md new file mode 100644 index 0000000..dbcbd36 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 121216.md @@ -0,0 +1,224 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 (“some packages” installed following first start requirements, follow the error messages) + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + +| **Gearbox** | | | +| -------------- | --------------------------- | ---------------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | Young modulus of steel | 2.1e11 MPa | +| $\nu_{steel}$ | Poisson ratio of steel | 0.3 | +| **Stiffness** | | | +| $k_x$ | $x$ translation stiffness | 1e8 N/m | +| $k_y$ | $y$ translation stiffness | 1e8 N/m | +| **Wind** | | | +| $r_{blade}$ | Blade radius | 6 m | +| $\rho _{air}$ | Air density | 1.225 kg/m3 | +| $v_{wind}$ | Wind mean speed | 12 m/s | +| $T_{fluct}$ | Wind fluctuating torque | 3000 Nm | +| $f_{fluct}$ | Fluctuation frequency | 6 Hz | +| $Cp$ | Performance coefficient | 16/27 | +| **Defects** | | | +| $e12_{amp}$ | Max profile error amplitude | Around 50$\mu m$ | +| $gap$ | Center distance error | around $\pm$1mm | + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-21 README_v2 121218.md b/config/Typora/draftsRecover/2026-4-21 README_v2 121218.md new file mode 100644 index 0000000..dbcbd36 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-21 README_v2 121218.md @@ -0,0 +1,224 @@ +# Wind turbine gearbox simulator +![Static Badge](https://img.shields.io/badge/Octave-11.1.0-orange) +![Static Badge](https://img.shields.io/badge/Arch%20Linux-6.19.12-blue) +![Static Badge](https://img.shields.io/badge/Gnuplot-6.0%20patchlevel%204-yellow) +![Static Badge](https://img.shields.io/badge/Gitlab-repo-red?logo=Gitlab) + +Wind turbine gearbox simulator is a matlab/octave simulator for a lumped parameters mechanical model of wind turbine gearbox. It implements varying wind profile, defects, varying gear mesh, and compute numerically the dynamical behaviour of the system using a Newmark's scheme. + +**Related paper: [...]** + +## Dependencies +**Development language:** Octave 11.1.0 (“some packages” installed following first start requirements, follow the error messages) + +**Compatibility:** Matlab v2026-a (delete all `graphics_toolkit("gnuplot")` mentions in the code) + +**Plot engine:** Gnuplot 6.0 patchlevel 4 + +## Usage +```bash +$ git clone https://gitlab.com/afoucaultc/wind_turbine_gearbox +$ cd wind_turbine_gearbox +$ octave +$ octave:1> run main.m +$ # or run any standalone (starting by a "_") +$ octave:1> >>> run _[standalone].m +``` + +## File tree +```bash +: ' +Main process takes the main parameters and compute the +whole process of calculations. It prints every figure +into .svg files, into folder print/run_print/. The +number of periods to calculate are asked as input when +the code is started. +"class_" are static functions used to calculate and plot +see in-code comments for more informations +' +## Main process +├── main.m +├── main_parameters.m + ├── run_main.m + │ └── _convergence.m + ├── run_display.m + │ └── class_display.m + └── run_print.m +: ' +Standalone files are files that do a single specific task +that cannot be done by the main process. These starts by +a "_" and can be ran using ">>> run _file.m" +- _init_speed.m calculates the optimal initial speed to + avoid the transitionnal regime. +- _rms-analysis.m gives a .csv (in /data) containing the + RMS, STD and Kurtosis for different defects conditions +- _animation.m is showing a visual animation of the diff- + -erent shaft rotations and vibrations +- _gear-mesh-var.m plots the difference of mesh stiffness + between different center distance error values +- _convergence.m plots the convergence between a high + sample rate and other sample rates to determine which + one to choose for minimal numerical error and comput- + -ational + time +' +## Standalone functions +├── _init_speed.m +├── _rms-analysis.m +├── _animation.m +├── _gear-mesh-var.m +└── _convergence.m +: ' +Rendering folders stores the .csv datasheet and .svg plots +' +## Rendering folders +├── data +│ └── rms.csv +└── print + ├── _convergence + ├── _gear-mesh-var + └── run_print + +## Others +├── octave-workspace +└── README.md +``` +## Maths and mechanical model +![Model](images/kinematicscheme.png) + +As showed on the image, the model is based on 2 shaft with 4DDL each ($x$, $y$, input and output $\theta$), as a lumped parameters model. The parameters are listed as a $q$ vector : +$$ +\{q\} = \{x_1, y_1,\theta _{11},\theta_{12},x_2,y_2,\theta_{22},\theta_{21}\} +$$ + +### Equations of movement + +The equations of movement are given by the Lagrange formulation, using the kinetic and potential energies. +$$ +\left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +Where $I_{ij}$ inertias for shaft $i$ on its $j$ side; $K_e(t)$ the varying mesh stiffness (cf. *Mesh stiffness*); $\delta=(x_1-x_2)\sin(\alpha)+(y_1-y_2)\cos(\alpha)+r_{b_1}\theta_{12}+r_{b_2}\theta_{21}$ the tooth deflection. + +The derivative of these equations is taken to directly get the movement, using: +$$ +\frac{\partial E_p}{\partial q_i}+\frac{d}{dt}\left(\frac{\partial E_k}{\partial \dot{q}_i} \right) = F_i(t) +$$ + +The different terms ($k$ and $m$) are regrouped into matrices, to give the following system: +$$ +\left[M\right]\{\ddot{q}\} + \left(\left[K_{mesh}\right](t)+\left[K_{cst}\right]\right) \{q\} = \left\{F(t)\right\} +$$ +Where $K_{cst}$ represents the constant terms $k_{i_j}$ and $K_{mesh}$ the terms related to the gear mesh stiffness $K_e(t)$. + +### Mesh stiffness + +Mesh stiffness is calculated as a function of mesh period $T_{mesh}=60/(Z_1N_1)$, contact ratio $\varepsilon\approx c_{12}=\sum^2_{i=1}\frac{1+Z_i^{-1}}{0.5\sin(\alpha)+\sqrt{0.25\sin(\alpha)^2+(Z_i^{-2})+Z_i^{-1}}}$ and the one-tooth mesh stiffness $k_{mean}$. The one-tooth in contact is defined with a period of $T_{high} = T_{mesh}(\varepsilon -1)$ and stiffness $k_{max}=k_{mean}\left(1+\frac{2-\varepsilon}{2\varepsilon(\varepsilon-1)}\right)$; and the two-teeth period is defined by a period $T_{low} = T_{mesh}(2-\varepsilon)$ and stiffness $k_{min}=k_{mean}(1-\frac{1}{2\varepsilon})$. + +![mesh stiffness](images/kvar.png) + +### Forces + +The forces vector depends on: + +- wind input ($r_{blade}$ the blade radius, $v_{wind}$ the mean wind speed, $Cp$ the performance coefficient of the turbine, $\omega$ the average rotational speed, $T_{fluct}$ the fluctuation term and $f_{ext}$ its frequency). + +$$ +T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)Cp/(2\omega) + T_{fluct}\cos(2\pi f_{ext}t) +$$ + +- output efficiency ($r$ the gearbox ratio) + +$$ +T_{out} = {eff}\times rT_{in} +$$ + +- a constant brake on 2nd shaft + +Then, the force vector is: +$$ +\begin{bmatrix} +T_{in} \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ T_{out}+T_{brake} \\ 0 +\end{bmatrix} +$$ + +### Defects + +Two types of defects are studied: + +- profile error (which adds a force depending on a multiple cosine profile) +- center distance error (which makes $\alpha$ the contact angle vary slightly) + +## Numerical scheme + +Numerical computation is done using a Newmark’s scheme with $K$ and $F$ updated for each time step. Mean acceleration parameters are used ($\gamma=1/2$ and $\beta=1/4$) for its unconditionally stable properties. Convergence is verified and the usual sample rate $fs_{div}$ (based on mesh period division) is chosen as equal to 11. + +Speed is initialized at its permanent regime value, to avoid transient regime. + +## Parameters + +| **Gearbox** | | | +| -------------- | --------------------------- | ---------------- | +| $Z1$ | Tooth nbr 1 | 72 | +| $Z2$ | Tooth nbr 2 | 18 | +| $m0$ | Gear modulus | 0.016 m | +| $b$ | Gear width | 0.1 m | +| $N1$ | Shaft 1 speed | 17 RPM | +| $\alpha$ | Contact angle | 20° | +| $\rho_{steel}$ | Steel density | 7850 kg/m3 | +| $T_{brake}$ | Brake torque | 500 Nm | +| **Masses** | | | +| $m_{11}$ | Blades and input rotor mass | 2000 kg | +| $m_{22}$ | Output rotor mass | 500 kg | +| **Shafts** | | | +| $da1$ | Shaft 1 diameter | 0.5 m | +| $da2$ | Shaft 2 diameter | 0.2 m | +| $la1$ | Shaft 1 length | 2 m | +| $la2$ | Shaft 2 length | 1 m | +| $E_{steel}$ | Young modulus of steel | 2.1e11 MPa | +| $\nu_{steel}$ | Poisson ratio of steel | 0.3 | +| **Stiffness** | | | +| $k_x$ | $x$ translation stiffness | 1e8 N/m | +| $k_y$ | $y$ translation stiffness | 1e8 N/m | +| **Wind** | | | +| $r_{blade}$ | Blade radius | 6 m | +| $\rho _{air}$ | Air density | 1.225 kg/m3 | +| $v_{wind}$ | Wind mean speed | 12 m/s | +| $T_{fluct}$ | Wind fluctuating torque | 3000 Nm | +| $f_{fluct}$ | Fluctuation frequency | 6 Hz | +| $Cp$ | Performance coefficient | 16/27 | +| **Defects** | | | +| $e12_{amp}$ | Max profile error amplitude | Around 50$\mu m$ | +| $gap$ | Center distance error | around $\pm$1mm | + +## Development machine specification + +Hardware: Thinkpad E560, CPU Intel(R) Core(TM) i5-6200U(4)@2.8GHz, 3.70GiB RAM +OS: Arch Linux 6.19.12 + diff --git a/config/Typora/draftsRecover/2026-4-8 README 135820.md b/config/Typora/draftsRecover/2026-4-8 README 135820.md new file mode 100644 index 0000000..0808a0e --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 135820.md @@ -0,0 +1,443 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +```latex +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\}}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ + K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix}\\ + + \text{with} \\ + s & $sin(\alpha)$ \\ + c & $cos(\alpha)$ \\ + r1 & $r_{b_1}$ \\ + r2 & $r_{b_2}$ +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 135825.md b/config/Typora/draftsRecover/2026-4-8 README 135825.md new file mode 100644 index 0000000..0808a0e --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 135825.md @@ -0,0 +1,443 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +```latex +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\}}\} +$$ + +**Mass matrix :** + +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ + K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix}\\ + + \text{with} \\ + s & $sin(\alpha)$ \\ + c & $cos(\alpha)$ \\ + r1 & $r_{b_1}$ \\ + r2 & $r_{b_2}$ +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 135902.md b/config/Typora/draftsRecover/2026-4-8 README 135902.md new file mode 100644 index 0000000..4b50b95 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 135902.md @@ -0,0 +1,442 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +```latex +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix}\\ + + \text{with} \\ + s=sin(\alpha)$ \\ + c$cos(\alpha)$ \\ + r1 & $r_{b_1}$ \\ + r2 & $r_{b_2}$ +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 135935.md b/config/Typora/draftsRecover/2026-4-8 README 135935.md new file mode 100644 index 0000000..7da5701 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 135935.md @@ -0,0 +1,436 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +```latex +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix}\\ +$$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 135952.md b/config/Typora/draftsRecover/2026-4-8 README 135952.md new file mode 100644 index 0000000..c6724cf --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 135952.md @@ -0,0 +1,444 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +```latex +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- + s=sin(\alpha) \\ + c=cos(\alpha) \\ + r1=r_{b_1} \\ + r2=r_{b_2} + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 140000.md b/config/Typora/draftsRecover/2026-4-8 README 140000.md new file mode 100644 index 0000000..242732b --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 140000.md @@ -0,0 +1,442 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +```latex +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- s=sin(\alpha) c=cos(\alpha) \\ + r1=r_{b_1} \\ + r2=r_{b_2} + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 140019.md b/config/Typora/draftsRecover/2026-4-8 README 140019.md new file mode 100644 index 0000000..14239c3 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 140019.md @@ -0,0 +1,443 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +```latex +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- s=sin(\alpha) +- c=cos(\alpha) +- r1=r_{b_1} _ +- $r2=r_{b_2} + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 140044.md b/config/Typora/draftsRecover/2026-4-8 README 140044.md new file mode 100644 index 0000000..cdd0607 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 140044.md @@ -0,0 +1,443 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +```latex +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +``` + +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +> [!NOTE] +> +> In matlab, cos and sin terms will be noted as $s_i$, for visual simplification + +**Constant stiffness matrix** + +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> ... + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 140152.md b/config/Typora/draftsRecover/2026-4-8 README 140152.md new file mode 100644 index 0000000..aed837b --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 140152.md @@ -0,0 +1,435 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +```latex +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ +``` + + +## Model + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Spe + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 140441.md b/config/Typora/draftsRecover/2026-4-8 README 140441.md new file mode 100644 index 0000000..387c07d --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 140441.md @@ -0,0 +1,433 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numericodel + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 140456.md b/config/Typora/draftsRecover/2026-4-8 README 140456.md new file mode 100644 index 0000000..8edc888 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 140456.md @@ -0,0 +1,433 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numerical model and wind-turbine + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 140512.md b/config/Typora/draftsRecover/2026-4-8 README 140512.md new file mode 100644 index 0000000..96e70e2 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 140512.md @@ -0,0 +1,433 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Input speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | degree | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ | 54000 | kg | +| Output mass $m_{out}$ | 10 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e5 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numerical model, wind + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 140807.md b/config/Typora/draftsRecover/2026-4-8 README 140807.md new file mode 100644 index 0000000..2f39bb5 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 140807.md @@ -0,0 +1,434 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +> [!BUG] +> Some equations has been put in latex block code as they didnt show properly on gitlab + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Rotor radius $r_{rot}$ | 0.5 | m | +| Input theoretical speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | deg | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ (hub + blades) | 54000 | kg | +| Output mass $m_{out}$ (rotor) | 10000 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e6 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 1e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numerical model, wind model and errors + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 140952.md b/config/Typora/draftsRecover/2026-4-8 README 140952.md new file mode 100644 index 0000000..45612b4 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 140952.md @@ -0,0 +1,431 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 31/03/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: 5.0 +--- + +# Gearbox simulation +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Rotor radius $r_{rot}$ | 0.5 | m | +| Input theoretical speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | deg | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ (hub + blades) | 54000 | kg | +| Output mass $m_{out}$ (rotor) | 10000 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e6 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 2.8e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numerical model, wind model and errors + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 141143.md b/config/Typora/draftsRecover/2026-4-8 README 141143.md new file mode 100644 index 0000000..e251ed0 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 141143.md @@ -0,0 +1,434 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 08/04/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: last +--- + +# + +# Gearbox simulation + +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Rotor radius $r_{rot}$ | 0.5 | m | +| Input theoretical speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | deg | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ (hub + blades) | 54000 | kg | +| Output mass $m_{out}$ (rotor) | 10000 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e6 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 2.8e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numerical model, wind model and errors + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 141158.md b/config/Typora/draftsRecover/2026-4-8 README 141158.md new file mode 100644 index 0000000..37920c6 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 141158.md @@ -0,0 +1,436 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 08/04/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: last +--- + +## Notes on the current version + +The algorithm of + +# Gearbox simulation + +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Rotor radius $r_{rot}$ | 0.5 | m | +| Input theoretical speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | deg | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ (hub + blades) | 54000 | kg | +| Output mass $m_{out}$ (rotor) | 10000 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e6 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 2.8e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numerical model, wind model and errors + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 141212.md b/config/Typora/draftsRecover/2026-4-8 README 141212.md new file mode 100644 index 0000000..4eccd13 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 141212.md @@ -0,0 +1,436 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 08/04/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: last +--- + +## Notes on the current version + +The algorithm for speed choice has not been done yet (as sp) + +# Gearbox simulation + +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Rotor radius $r_{rot}$ | 0.5 | m | +| Input theoretical speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | deg | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ (hub + blades) | 54000 | kg | +| Output mass $m_{out}$ (rotor) | 10000 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e6 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 2.8e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numerical model, wind model and errors + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 141226.md b/config/Typora/draftsRecover/2026-4-8 README 141226.md new file mode 100644 index 0000000..6ef5896 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 141226.md @@ -0,0 +1,436 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 08/04/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: last +--- + +## Notes on the current version + +The algorithm for speed choice has not been done yet (as speeds are not correctly calculated fo) + +# Gearbox simulation + +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Rotor radius $r_{rot}$ | 0.5 | m | +| Input theoretical speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | deg | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ (hub + blades) | 54000 | kg | +| Output mass $m_{out}$ (rotor) | 10000 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e6 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 2.8e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numerical model, wind model and errors + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 141311.md b/config/Typora/draftsRecover/2026-4-8 README 141311.md new file mode 100644 index 0000000..5be6317 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 141311.md @@ -0,0 +1,438 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 08/04/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: last +--- + +## Notes on the current version + +The algorithm for speed initialization (cf. paper) has not been done yet (as speeds are not correctly calculated for now) + +Print i + +# Gearbox simulation + +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Rotor radius $r_{rot}$ | 0.5 | m | +| Input theoretical speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | deg | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ (hub + blades) | 54000 | kg | +| Output mass $m_{out}$ (rotor) | 10000 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e6 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 2.8e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numerical model, wind model and errors + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 141325.md b/config/Typora/draftsRecover/2026-4-8 README 141325.md new file mode 100644 index 0000000..698f9d8 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 141325.md @@ -0,0 +1,438 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 08/04/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: last +--- + +## Notes on the current version + +The algorithm for speed initialization (cf. paper) has not been done yet (as speeds are not correctly calculated for now) + +Print is default commented (will probably not work unde) + +# Gearbox simulation + +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Rotor radius $r_{rot}$ | 0.5 | m | +| Input theoretical speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | deg | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ (hub + blades) | 54000 | kg | +| Output mass $m_{out}$ (rotor) | 10000 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e6 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 2.8e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numerical model, wind model and errors + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 141423.md b/config/Typora/draftsRecover/2026-4-8 README 141423.md new file mode 100644 index 0000000..320c06c --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 141423.md @@ -0,0 +1,440 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 08/04/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: last +--- + +## Notes on the current version + +The algorithm for speed initialization (cf. paper) has not been done yet (as speeds are not correctly calculated for now) + +Print is commented by default (will probably not work under Windows) + +PDF and SVG + +# Gearbox simulation + +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Rotor radius $r_{rot}$ | 0.5 | m | +| Input theoretical speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | deg | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ (hub + blades) | 54000 | kg | +| Output mass $m_{out}$ (rotor) | 10000 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e6 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 2.8e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numerical model, wind model and errors + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 141434.md b/config/Typora/draftsRecover/2026-4-8 README 141434.md new file mode 100644 index 0000000..42c912a --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 141434.md @@ -0,0 +1,440 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 08/04/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: last +--- + +## Notes on the current version + +The algorithm for speed initialization (cf. paper) has not been done yet (as speeds are not correctly calculated for now) + +Print is commented by default (will probably not work under Windows) + +Prints in the r + +# Gearbox simulation + +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Rotor radius $r_{rot}$ | 0.5 | m | +| Input theoretical speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | deg | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ (hub + blades) | 54000 | kg | +| Output mass $m_{out}$ (rotor) | 10000 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e6 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 2.8e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numerical model, wind model and errors + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 142357.md b/config/Typora/draftsRecover/2026-4-8 README 142357.md new file mode 100644 index 0000000..5e2fcd0 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 142357.md @@ -0,0 +1,438 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 08/04/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: last +--- + +## Notes on the current version + +The algorithm for speed initialization (cf. paper) has not been done yet (as speeds are not correctly calculated for now) + +Print is commented by default (will probably not work under Windows) + +# Gearbox simulation + +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Rotor radius $r_{rot}$ | 0.5 | m | +| Input theoretical speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | deg | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ (hub + blades) | 54000 | kg | +| Output mass $m_{out}$ (rotor) | 10000 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e6 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 2.8e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numerical model, wind model and errors + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 142414.md b/config/Typora/draftsRecover/2026-4-8 README 142414.md new file mode 100644 index 0000000..ef4ceb6 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 142414.md @@ -0,0 +1,438 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 08/04/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: last +--- + +## Notes on the current version + +The algorithm for speed initialization (cf. paper) has not been done yet (as speeds are not correctly calculated for now) + +Print is commented by default (will probably not work under Windows -> change ) + +# Gearbox simulation + +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Rotor radius $r_{rot}$ | 0.5 | m | +| Input theoretical speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | deg | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ (hub + blades) | 54000 | kg | +| Output mass $m_{out}$ (rotor) | 10000 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e6 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 2.8e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numerical model, wind model and errors + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 142416.md b/config/Typora/draftsRecover/2026-4-8 README 142416.md new file mode 100644 index 0000000..348412e --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 142416.md @@ -0,0 +1,438 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 08/04/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: last +--- + +## Notes on the current version + +The algorithm for speed initialization (cf. paper) has not been done yet (as speeds are not correctly calculated for now) + +Print is commented by default (will probably not work under Windows -> change thefolder) + +# Gearbox simulation + +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Rotor radius $r_{rot}$ | 0.5 | m | +| Input theoretical speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | deg | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ (hub + blades) | 54000 | kg | +| Output mass $m_{out}$ (rotor) | 10000 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e6 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 2.8e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numerical model, wind model and errors + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-4-8 README 142418.md b/config/Typora/draftsRecover/2026-4-8 README 142418.md new file mode 100644 index 0000000..6590ba2 --- /dev/null +++ b/config/Typora/draftsRecover/2026-4-8 README 142418.md @@ -0,0 +1,438 @@ +--- +Author: Antoine Foucault-Castelli +Date: 23/03/2026 +Update: 08/04/2026 +Bibliography: @karmiFiabiliteOptimisationSystemes @ghorbelEffectBrakeLocation2020a @zhengAnalyticalApproachMesh2022 +Version: last +--- + +## Notes on the current version + +The algorithm for speed initialization (cf. paper) has not been done yet (as speeds are not correctly calculated for now) + +Print is commented by default (will probably not work under Windows -> change thefolders) + +# Gearbox simulation + +## Structure +``` +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-- main +main.m +>> used to launch all run_*.m at once +main_parameters.m +>> charge model's parameters + +-- runners +run_main.m +>> PURPOSE: launch every class_func functions in the right order to model the system +run_display.m +>> PURPOSE: launch every class_displayer functions +run_print.m +>> PURPOSE: print the figures made by run_display +>> OUTPUT: .svg + +-- classes +class_display.m +>> displays the inputs and outputs of the model + [col1,col2,col3,col4,col5,col6,col7,col8,lw1,lw2] = charge_aff() + [figname,namex,namey,namet,ylabelx,ylabelt,ylabelfft,ylabelfftT] = type_choice(type) + listOfFig = disp_x(t,x,type,listOfFig) + listOfFig = excitations_ext(t,T_aero,k_var,k_mean,listOfFig) + listOfFig = spectral_analysis(x,tf,dt,maxf,type,listOfFig) + % TODO + plot_fep(t,Fep,i) + listOfFig = plotThetaDiff(t,x,listOfFig) + +class_func.m +>> model functions (explicit cf. comments in code) + [t, dt, tf, t_mesh, f_mesh, fs] = + time_sampling(fs_div,n_periods,Z1,N1) + [Jin, J1, J2, Jout, J_all] = + inertia(m_all,r_blade,di1,di2) + [c12, db1, db2] = + gearbox_geometry(alpha0, Z1, Z2, m0, a) + [k_var, k_mean] = + mesh_stiffness(epsilon, t, t_mesh, k_mesh_mean) + [T_aero,T_out] = + wind_excitation(t,rho_air,r_blade,v_wind,T_fluct_in,f_ext,omega_in,cp,ratio) + [M] = + mass_matrix(m_all, J_all) + [K_var, K_const, K_mean] = + stiffness_matrix(db1, db2, alpha0, kx, ky, ktheta, k_mean) + [K] = + stiffness_update(K_const,K_var,k) + [C] = + damping_matrix(M,K_mean,damp_eta,damp_beta) + [F] = + forces_matrix(T_in,T_out) + [x,v,a] = + initialization(N1,t,ratio,cp) + [x,v,a] = + newmark(M,C,K_const,K_var,K_mean,k_var,dt,t,T_in,T_out,x,v,a,omega_in,gamma,beta,F_ep) + [F_ep] = + error_profile_excitation(e12,f_mesh,t,alpha0,db1,db2,k_var) + [damp_eta, damp_beta] = + damping_coeff(M,K,xi1,xiN) + +-- standalone +_convergence.m +>> purpose: test the numerical convergence of the model +>> output: 3 graphs + print/_convergence/*.svg +_gear-mesh-var.m +>> purpose: shows the variation of gear mesh with central distance changes +>> output: 1 graph + print/_gear-mesh-var/*.svg +_rms-analysis.m +>> purpose: analysis of RMS, STD and kurtosis for many setups +>> output: data/rms.svg +``` + +## How does it work ? +**For Matlab under windows :** +classic matlab + +> [!WARNING] +> NOT TESTED UNDER MATLAB +> remove all occurences of `graphics_toolkit("gnuplot")` in the code which is only useful for Octave visualization + +**For Octave/Linux :** +*May need a few package installation (follow octave recommandations after first(s) run* + +```baswind_turbine_gearbox/octave/h +cd wind_turbine_gearbox/octave/ +octave +>>> run main.m +>>> +``` + +## Informations +- [x] Verified code with base code and paper +- [x] Implemented wind excitation +- [x] Implemented Ghorbel parameters +- [~] Add varying output torque depending on number of tooth in contact ? +- [~] add brake ? +- [~] Variation of C ? +- [~] ODE45 ? +- [x] Displays from last version (in class objects) +- [x] New mesh stiffness variation model (trapezoidal) +- [x] Print in pdf +- [x] Errors/defects implementation + - [x] profile error + - [x] assembly defect (change on gear stiffness) +- [x] README + - [x] Maths + - [~] Images + - [x] Source(s) +- [x] Display + - [x] time response on a2 + - [x] speed response + - [x] x movement (vs y movement ?) + - [x] RMS STD Kurtosis + - [x] Printing pdf and svg +- [x] Convergence verification +- [x] Display effect of defects +- [ ] Verify convergence for other input +- [ ] Preparation Monte Carlo Parallel calculation +- [x] Decide a number of samples per mesh period +- [ ] Random models implementation +- [x] Implemented easy disp and print +- [ ] Add a "peak finder" for FFT + +## Maths + +The model is represented by two 4DDL shafts in a gear connection : $x$ and $y$ are free at the pinion, $\theta$ is free at both ends of the shaft (input/output is $\theta_{ii}$ and meshing rotation is $\theta_{ij}$). + +### Parameters + +| Newmark parameters | Value | **Unit** | +| ------------------------------------------------ | --------- | --------------- | +| $\gamma$ | 0.7 | | +| $\beta$ | 0.3 | | +| **Gears** | **Value** | | +| Pinon 1 tooth number $Z1$ | 72 | | +| Pinion 2 tooth number $Z2$ | 18 | | +| Pinion modulus $m_0$ | 0.016 | m | +| Pinion width $b$ | 0.1 | m | +| Internal diameter pinion 1 $d_{i1}$ | 0.5 | m | +| Internal diameter pinion 2 $d_{i_2}$ | 0.3 | m | +| Rotor radius $r_{rot}$ | 0.5 | m | +| Input theoretical speed $N_1$ | 17 | m/s | +| Contact angle $\alpha$ | 20 | deg | +| Steel density $\rho_{steel}$ | 7860 | kg/m3 | +| **Masses** | **Value** | **Unit** | +| Input mass $m_{in}$ (hub + blades) | 54000 | kg | +| Output mass $m_{out}$ (rotor) | 10000 | kg | +| **Stiffness** | | | +| Flexion x : $k_x=k_{x_1}=k_{x_2}$ | 1e8 | N/m | +| Flexion y : $k_y=k_{y_1}=k_{y_2}$ | 1e8 | N/m | +| Torsion z : $k_\theta=k_{\theta_1}=k_{\theta_2}$ | 1e6 | N/m | +| Mean mesh stiffness $k_{mesh_{mean}}$ | 2.8e8 | N/rad | +| **Damping** | **Value** | **Unit** | +| Mass damping ratio | 0.05 | | +| Stiffness damping ratio | 0.01 | | +| **Wind excitation** | **Value** | **Unit** | +| Blade radius $r_{blade}$ | 6 | m | +| Air density $\rho_{air}$ | 1.225 | kg/m3 | +| Wind speed (mean) $v_{wind_{mean}}$ | 37.5 | m/s | +| Fluctuating external torque $T_{fluct}$ | 50 | N | +| Fluctuating external frequency $f_{fluct}$ | 6 | Hz | +| Performance efficiency $cp$ | 16/27 | | +| **Errors** | **Value** | **Unit** | +| Profile error (approx) | 1e-5 | m | +| Center distance error (approx) | 1e-2 | m | + + + +### Energy equations + +$$ + \left[\frac{\partial E_p}{\partial q_i}\right] + + \left[\frac{d}{dt}\left(\frac{\partial E_k}{\partial\dot{q}_i}\right)\right] + + \frac{\partial C}{\partial\dot{q}_i} + = \frac{\partial W}{\partial q_i} + \label{eq:reformlagrange} +\\ + E_k = \frac{1}{2} + \left( + m_1{\dot{x}_1}^2+ + m_1{\dot{y}_1}^2+ + I_{11}{\dot{\theta}_{11}}^2+ + I_{12}{\dot{\theta}_{12}}^2+ + m_2{\dot{x}_2}^2+ + m_2{\dot{y}_2}^2+ + I_{22}{\dot{\theta}_{22}}^2+ + I_{21}{\dot{\theta}_{21}}^2 + \right) +\\ + E_p = \frac{1}{2} + \left( + k_{x_1}{x_{1}}^2+ + k_{y_1}{y_{1}}^2+ + k_{\theta_1}(\theta_{11}-\theta_{12})^2+ + k_{x_2}{x_{2}}^2+ + k_{y_2}{y_{2}}^2+ + k_{\theta_2}(\theta_{21}-\theta_{22})^2+ + K_e(t){\delta}^2 + \right) +$$ + +### Equations of movement + +The equations of movement are given by putting $E_k$ and $E_p$ into the Lagrangian formula. + +$$ +\begin{cases} +\frac{\partial E_p}{\partial x_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x}_1} \right) + \frac{\partial C}{\partial \dot{x}_1} + = m_1\ddot{x}_1 + + k_{x_1}x_1 + + \sin(\alpha)K_e(t)\delta + + C_{x_1}\dot{x}_1 + = 0 \\ + \frac{\partial E_p}{\partial y_1} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y}_1} \right) + \frac{\partial C}{\partial \dot{y}_1} + = m_1\ddot{y}_1 + + k_{y_1}y_1 + + \cos(\alpha)K_e(t)\delta + + C_{y_1}\dot{y}_1 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{11}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{11}} \right) + \frac{\partial C}{\partial \dot{\theta}_{11}} + = I_{11}\ddot{\theta}_{11} + + k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + C_{\theta_{11}}\dot{\theta}_{11} + = T_{aero} \\ + \frac{\partial E_p}{\partial \theta_{12}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{12}} \right) + \frac{\partial C}{\partial \dot{\theta}_{12}} + = I_{12}\ddot{\theta}_{12} + - k_{\theta_{11}}(\theta_{11}-\theta_{12}) + + {r_b}_1K_e(t)\delta + + C_{\theta_{12}}\dot{\theta}_{12} + = 0 \\ + + \frac{\partial E_p}{\partial x_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{x_2}} \right) + \frac{\partial C}{\partial \dot{x_2}} + = m_2\ddot{x}_2 + + k_{x_2}x_2 + - \sin(\alpha)K_e(t)\delta + + C_{x_2}\dot{x}_2 + = 0 \\ + \frac{\partial E_p}{\partial y_2} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{y_2}} \right) + \frac{\partial C}{\partial \dot{y_2}} + = m_2\ddot{y}_2 + + k_{y_2}y_2 + - \cos(\alpha)K_e(t)\delta + + C_{y_2}\dot{y}_2 + = 0 \\ + \frac{\partial E_p}{\partial \theta_{22}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{22}} \right) + \frac{\partial C}{\partial \dot{\theta}_{22}} + = I_{22}\ddot{\theta}_{22} + - k_{\theta_{22}}(\theta_{21}-\theta_{22}) + + C_{x_1}\dot{\theta}_{22} + = T_{gen} \\ + \frac{\partial E_p}{\partial \theta_{21}} + \frac{d}{dt}\left( \frac{\partial E_k}{\partial \dot{\theta}_{21}} \right) + \frac{\partial C}{\partial \dot{\theta}_{21}} + = I_{21}\ddot{\theta}_{21} + + k_{\theta_{21}}(\theta_{21}-\theta_{22}) + - {r_b}_2K_e(t)\delta + + C_{\theta_{21}}\dot{\theta}_{21} + = 0 +\end{cases} +$$ +With $\delta_i(t)=(x_1-x_2)sin(\alpha)+(y_1-y_2)cos(\alpha)+\theta_{12}r_{b1}-\theta_{21}r_{b2}$ and $r_{bij}$ the base radius of pinions, $K_e$ is the varying meshing stiffness, mass $m_i = \pi r^2_{i}\rho$ for both pinions, and $I_{ij} = \frac{1}{2}m_{ij}r_{ij}^2$ for pinions and input/output inertia. + +### Matrices + + + +**Equation to solve :** + +$$ +\left[M\right]\{\ddot{q}\} + \left[C\right] \{\dot{q}\}+ \left(\left[K_{var}\right]+\left[K_{cst}\right]\right) \{q\} = \left\{F\right\} +$$ + +**Mass matrix :** +$$ +M = +\begin{bmatrix} + m_1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & m_1 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & I_{11} & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & I_{12} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & m_2 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & m_2 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & I_{22} & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & I_{21} \\ +\end{bmatrix} \\ +$$ + +With $m_1$ mass of shaft 1 and $m_2$ mass of shaft 2 + +**Variable mesh stiffness matrix** + +$$ +K_{var} = K_e(t) + \begin{bmatrix} + s^2 & sc & 0 & sr_1 & -s^2 & -sc & 0 & -sr_2 \\ + cs & c^2 & 0 & cr_1 & -cs & -c^2 & 0 & -cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + r_1s & r_1c & 0 & r_1^2 & -r_1s & -r_1c & 0 & -r_1r_2 \\ + -s^2 & -sc & 0 & -sr_1 & s^2 & sc & 0 & sr_2 \\ + -cs & -c^2 & 0 & -cr_1 & cs & c^2 & 0 & cr_2 \\ + 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + -r_2s & -r_2c & 0 & -r_2r_1 & r_2s & r_2c & 0 & r_2r_1 + \end{bmatrix} +$$ + +With + +- $s=sin(\alpha)$ +- $c=cos(\alpha) $ +- $r1=r_{b_1} $ +- $r2=r_{b_2}$ + +**Constant stiffness matrix** +$$ +Ks= +\begin{bmatrix} + k_{x1} & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & k_{y1} & 0 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & k_{\theta1}& -k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & -k_{\theta1} & k_{\theta1} & 0 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & k_{x1} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & k_{y1} & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 & k_{\theta2} & -k_{\theta2} \\ + 0 & 0 & 0 & 0 & 0 & 0 & -k_{\theta2} & k_{\theta2} \\ +\end{bmatrix} +$$ + +**Damping matrix** + +Damping matrix is : $C = \eta M+\beta K_{mean}$ + +**Forces** + +$$ +F = +\begin{bmatrix} +0 \\ 0 \\ T_{aero} \\ 0 \\ 0\\ 0\\ T_{gen}\\ 0 +\end{bmatrix} +$$ + +**Mesh stiffness model** + +The mesh stiffness is modelized by a trapezoïdal signal between a low value ($=k_{mesh_{mean}}$ for one tooth in contact) and its double value as a high value. Length of both phase is given by $T_{high}=(\varepsilon-1)T_{mesh}$ and $T_{low}=(2-\varepsilon)T_{mesh}$. 10% of the start and of the end of the “high” phase is a linear slope from low value to high value. + +> [!NOTE] +> $T_{mesh}=1/f_{mesh}=1/(Z1*N1/60)$ +> $\varepsilon$ is an approximation using the following formula : + +$$ +c_1=\frac{1+\frac{1}{Z1}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z1^2}+\frac{1}{Z1}}\right)\right)} \\ +c_1=\frac{1+\frac{1}{Z2}}{\left(\pi cos(\alpha)\left(\frac{sin(\alpha)}{2}+\sqrt{\frac{sin(\alpha)^2}{4}+\frac{1}{Z2^2}+\frac{1}{Z2}}\right)\right)} \\ +c_{12}=c_1+c_2 \approx \varepsilon +$$ + + +## Numerical model, wind model and errors + +**Time :** time is sampled on the $T_{mesh}$, with $fs$ the number of points for each period, and $n_{periods}$ the number of periods calculated. The number of points is $fs\times n_{periods}$. + +**Speed :** rotational speed is initialized at its “stable” value. + +> if no automatic implementation, it has to be done “by hand” by executing the program once, get the speeds after the transient zone, and put them by hand in “initialization” source code (`func.m`) + +**Wind :** cosine variation around mean torque value +$$ + T_{in} = \rho_{air}\pi(r_{blade}^2)(v_{wind}^3)*Cp)/(2\omega) \\ + T_{aero}(t) = T_{in} + T_{fluct}\cos(2\pi f_{ext}t) +$$ + + +**Initialization :** everything is set at 0 for initialization (except speed) + +**Model :** a basic Newmark scheme is used to compute the model over time + +**Error implementation :** + +- error profile is implemented as ($+\infty$ is approximated as $1000$) : + +$$ +ep(t) = e_{12}+\sum ^{+\infty}_{n=1}e_{12}sin(2n\pi f_m t) \\ +\left\{F_{ep}\right\} = \frac{\partial \delta (t)}{\partial q_i}k(t)ep(t) \\ +\frac{\partial \delta(t)}{\delta q_i} = +\begin{bmatrix} +sin(\alpha) \\ cos(\alpha) \\ 0 \\ rb_1 \\ -sin(\alpha) \\ -cos(\alpha) \\ 0 \\ rb_2 +\end{bmatrix} +$$ + +- center distance error is implemented as a transformation of $\alpha$ depending on a variation of $a$, in `gearbox_geometry`. It does only change the values of contact ratio $\varepsilon$ and then the profile of the mesh stiffness (length of phases and max/min values). + $$ + \alpha'=acos\left(\frac{rb_1+rb_2}{E+a}\right) + $$ + + + + +## TO FIX + +> [!CAUTION] +> Speed not right + +## Machine specifications +For the computational speed, here’s my machine’s spec. : +``` + -` + .o+` + `ooo/ OS: Arch Linux x86_64 + `+oooo: Host: 20EV000UFR ThinkPad E560 + `+oooooo: Kernel: 6.19.10-arch1-1 + -+oooooo+: Shell: zsh 5.9 + `/:-:++oooo+: Terminal: kitty + `/++++/+++++++: CPU: Intel i5-6200U (4) @ 2.300GHz + `/++++++++++++++: GPU: Intel Skylake-U GT2 [HD Graphics 520] + `/+++ooooooooooooo/` Memory: 1703MiB / 3792MiB + ./ooosssso++osssssso+` + .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +``` diff --git a/config/Typora/draftsRecover/2026-5-12 revue_code_cpg 102356.md b/config/Typora/draftsRecover/2026-5-12 revue_code_cpg 102356.md new file mode 100644 index 0000000..1dfaccc --- /dev/null +++ b/config/Typora/draftsRecover/2026-5-12 revue_code_cpg 102356.md @@ -0,0 +1,221 @@ +# Revue de code — Implémentation CPG (Chaos Polynomial Généralisé) + +## Résumé + +Le code implémente correctement les grandes étapes d'une méthode de chaos polynomial non-intrusive : +génération des polynômes de Legendre, construction de la grille de Gauss–Legendre par produit +tensoriel, génération de la base de chaos multi-dimensionnelle, et transformation des variables +incertaines. Plusieurs problèmes bloquants et améliorations sont identifiés ci-dessous. + +--- + +## 1. Bugs bloquants + +### 1.1 `cpg_modes.m` — syntaxe incomplète + +```matlab +% Code actuel (cassé) +for i = 1: % <- borne supérieure manquante → erreur de syntaxe +end +``` + +La fonction est vide et génère une erreur de parsing. C'est l'objet principal des fichiers +fournis (`cpg_modes_regression.m` et `cpg_modes_nisp.m`). + +--- + +### 1.2 `cpg.m` — appel à `method_lambda` commenté, section modes vide + +```matlab +%[lambda_cpg] = method_lambda(X_cpg); % <- commenté, rien n'est calculé +%% Stochastic modes + % <- section vide +``` + +La fonction ne fait rien d'utile au-delà de la construction de la grille. +Le fichier `cpg.m` corrigé est fourni. + +--- + +### 1.3 Répertoire `save/` non garanti + +`save(filename)` échoue si le dossier `save/` n'existe pas. Corriger avec : + +```matlab +if ~exist('save', 'dir'), mkdir('save'); end +save(filename) +``` + +--- + +## 2. Problèmes de cohérence + +### 2.1 `method_XiToX.m` — signe inversé + +```matlab +% Code actuel +X(i,:) = (P(3,i) + P(2,i))/2 - xi(i,:)*(P(3,i)-P(2,i))/2; +% ^--- signe moins +``` + +La convention standard est : + +``` +X = (Xmin + Xmax)/2 + ξ * (Xmax - Xmin)/2 +``` + +avec ξ = +1 → X = Xmax et ξ = −1 → X = Xmin. + +Le code actuel **inverse** cette orientation : ξ = +1 → Xmin, ξ = −1 → Xmax. +Pour une distribution uniforme symétrique, les statistiques (moyenne, variance) sont +inchangées, mais les graphiques et les comparaisons point-à-point avec la Monte Carlo +seront logiquement inversés. Corriger le signe. + +--- + +### 2.2 `parameters.m` — `X_base` surdimensionné + +```matlab +r = 2; +X_base = [ 0.5 1e8 1e8 0.001 ]; % 4 éléments, mais r=2 +``` + +Seuls les deux premiers éléments de `X_base` sont utilisés (la boucle s'arrête à `i=r=2`). +Les valeurs `1e8` et `0.001` sont silencieusement ignorées. +Aligner `X_base` sur `r`, ou vérifier que `length(X_base) >= r` avec une assertion. + +--- + +### 2.3 `cpg_polyChaos.m` — initialisation 1D + +```matlab +alpha = [0:p]'; % vecteur colonne [p+1 × 1] pour r=1 +``` + +Pour `r=1`, la boucle `for d = 2:r` ne s'exécute pas, et `alpha` reste un vecteur colonne. +L'indexation `alpha(n,:)` donne correctement un scalaire, donc le comportement est juste, +mais le cas `r=1` n'est pas testé explicitement et la forme de `alpha` diffère de `r>=2` +(colonne vs matrice). Ajouter un test unitaire pour `r=1`. + +--- + +## 3. Points de vigilance + +### 3.1 Explosion combinatoire de la grille de Gauss + +La grille de collocation est un **produit tensoriel** : `Q = (p+1)^r` points. +Le nombre de modes est `A = C(p+r, r)` (nettement inférieur). + +| r | p | Q = (p+1)^r | A = C(p+r,r) | Ratio Q/A | +|---|---|-------------|---------------|-----------| +| 2 | 4 | 25 | 15 | 1.7 | +| 3 | 4 | 125 | 35 | 3.6 | +| 4 | 4 | 625 | 70 | 8.9 | +| 5 | 4 | 3125 | 126 | 24.8 | + +Pour `r >= 5`, le coût explose. Pour la régression, ce sur-échantillonnage est bénéfique +(système sur-déterminé). Pour NISP, le produit tensoriel reste exact mais coûteux. +Les grilles creuses (Smolyak) constituent l'alternative pour les grandes dimensions. + +### 3.2 Sorties multiples du modèle + +`model_main` retourne `[calc_rms; calc_std; calc_kurtosis]`, soit un vecteur `[3 × 1]`. +`method_lambda` accumule correctement ces sorties : `lambda_out` est `[3 × Q]`. +Les fonctions `cpg_modes_regression` et `cpg_modes_nisp` gèrent ce cas multi-sorties. + +### 3.3 Polynômes de Legendre — convention de normalisation + +`cpg_polyLegendre` calcule la norme sans le facteur 1/2 de la mesure uniforme : + +``` +PP(j) = 2 / (2*(j-1)+1) % = ∫_{-1}^{1} L_{j-1}²(ξ) dξ +``` + +La variance du développement en chaos doit donc inclure le facteur `1/2^r` : + +``` +Var[λ] = Σ_{k>0} λ̂_k² × PsiPsi(k) / 2^r +``` + +Cette convention est explicitée dans les fonctions fournies. + +--- + +## 4. Méthode de régression — principe mathématique + +### Développement en chaos polynomial + +On approche la quantité d'intérêt par : + +``` +λ(ξ) ≈ Σ_{k=0}^{A-1} λ̂_k Ψ_k(ξ) +``` + +où `Ψ_k(ξ) = Π_{j=1}^r L_{α_{k,j}}(ξ_j)` sont les polynômes de chaos +et `α_k ∈ ℕ^r` les multi-indices avec `|α_k| ≤ p`. + +### Matrice de collocation + +On construit la matrice `Φ ∈ ℝ^{Q×A}` : + +``` +Φ(q, k) = Ψ_k(ξ^(q)) +``` + +### Résolution par moindres carrés (régression) + +``` +λ̂ = argmin ||Φ λ̂ - f||² → λ̂ = Φ \ f +``` + +où `f` est le vecteur des évaluations du modèle aux points de collocation. +Pour `Q > A` (cas usuel avec grille produit tensoriel), le système est sur-déterminé. + +### Statistiques du développement + +``` +E[λ] = λ̂_0 (coefficient de Ψ_0 = 1) +Var[λ] = Σ_{k=1}^{A-1} λ̂_k² × PsiPsi(k) / 2^r +``` + +--- + +## 5. Méthode NISP — principe mathématique + +La projection spectrale non-intrusive calcule directement les coefficients par quadrature : + +``` +λ̂_k^NISP = <λ, Ψ_k> / <Ψ_k, Ψ_k> + = (Σ_q W_q λ(ξ^(q)) Ψ_k(ξ^(q))) / PsiPsi(k) +``` + +où `W_q = Π_j w_{i_j}` sont les poids de quadrature de Gauss–Legendre en produit tensoriel. + +Les poids 1D sont calculés par : + +``` +w_j = 2 / ((1 − ξ_j²) [L'_{p+1}(ξ_j)]²) +``` + +**Avantage de NISP** : si le modèle est exactement représentable dans la base polynomiale, +l'intégration est exacte (la quadrature de Gauss est exacte pour les polynômes jusqu'au +degré `2p+1`). + +**Avantage de la régression** : plus robuste au sur-échantillonnage et au bruit, meilleure +conditionnement numérique lorsque `Q >> A`. + +--- + +## 6. Fichiers fournis + +| Fichier | Description | +|---------------------------|------------------------------------------------| +| `cpg.m` | Fonction principale corrigée | +| `cpg_modes_regression.m` | Modes stochastiques par régression (nouveau) | +| `cpg_gauss_weights.m` | Poids de Gauss–Legendre (nouveau) | +| `cpg_modes_nisp.m` | Modes stochastiques par NISP (nouveau) | +| `method_XiToX.m` | Transformation ξ → X corrigée | + +--- + +*Revue réalisée le 12 mai 2026* diff --git a/config/Typora/draftsRecover/2026-5-12 revue_code_cpg 102358.md b/config/Typora/draftsRecover/2026-5-12 revue_code_cpg 102358.md new file mode 100644 index 0000000..0f28cc2 --- /dev/null +++ b/config/Typora/draftsRecover/2026-5-12 revue_code_cpg 102358.md @@ -0,0 +1,221 @@ +# Revue de code — Implémentation CPG (Chaos Polynomial Généralisé) + +## Résumé + +Le code implémente correctement les grandes étapes d'une méthode de chaos polynomial non-intrusive : +génération des polynômes de Legendre, construction de la grille de Gauss–Legendre par produit +tensoriel, génération de la base de chaos multi-dimensionnelle, et transformation des variables +incertaines. Plusieurs problèmes bloquants et améliorations sont identifiés ci-dessous. + +--- + +## 1. Bugs bloquants + +### 1.1 `cpg_modes.m` — syntaxe incomplète + +```matlab +% Code actuel (cassé) +for i = 1: % <- borne supérieure manquante → erreur de syntaxe +end +``` + +La fonction est vide et génère une erreur de parsing. C'est l'objet principal des fichiers +fournis (`cpg_modes_regression.m` et `cpg_modes_nisp.m`). + +--- + +### 1.2 `cpg.m` — appel à `method_lambda` commenté, section modes vide + +```matlab +%[lambda_cpg] = method_lambda(X_cpg); % <- commenté, rien n'est calculé +%% Stochastic modes + % <- section vide +``` + +La fonction ne fait rien d'utile au-delà de la construction de la grille. +Le fichier `cpg.m` corrigé est fourni. + +--- + +### 1.3 Répertoire `save/` non garanti + +`save(filename)` échoue si le dossier `save/` n'existe pas. Corriger avec : + +```matlab +if ~exist('save', 'dir'), mkdir('save'); end +save(filename) +``` + +--- + +## 2. Problèmes de cohérence + +### 2.1 `method_XiToX.m` — signe inversé + +```matlab +% Code actuel +X(i,:) = (P(3,i) + P(2,i))/2 - xi(i,:)*(P(3,i)-P(2,i))/2; +% ^--- signe moins +``` + +La convention standard est : + +``` +X = (Xmin + Xmax)/2 + ξ * (Xmax - Xmin)/2 +``` + +avec ξ = +1 → X = Xmax et ξ = −1 → X = Xmin. + +Le code actuel **inverse** cette orientation : ξ = +1 → Xmin, ξ = −1 → Xmax. +Pour une distribution uniforme symétrique, les statistiques (moyenne, variance) sont +inchangées, mais les graphiques et les comparaisons point-à-point avec la Monte Carlo +seront logiquement inversés. Corriger le signe. + +--- + +### 2.2 `parameters.m` — `X_base` surdimensionné + +```matlab +r = 2; +X_base = [ 0.5 1e8 1e8 0.001 ]; % 4 éléments, mais r=2 +``` + +Seuls les deux premiers éléments de `X_base` sont utilisés (la boucle s'arrête à `i=r=2`). +Les valeurs `1e8` et `0.001` sont silencieusement ignorées. +Aligner `X_base` sur `r`, ou vérifier que `length(X_base) >= r` avec une assertion. + +--- + +### 2.3 `cpg_polyChaos.m` — initialisation 1D + +```matlab +alpha = [0:p]'; % vecteur colonne [p+1 × 1] pour r=1 +``` + +Pour `r=1`, la boucle `for d = 2:r` ne s'exécute pas, et `alpha` reste un vecteur colonne. +L'indexation `alpha(n,:)` donne correctement un scalaire, donc le comportement est juste, +mais le cas `r=1` n'est pas testé explicitement et la forme de `alpha` diffère de `r>=2` +(colonne vs matrice). Ajouter un test unitaire pour `r=1`. + +--- + +## 3. Points de vigilance + +### 3.1 Explosion combinatoire de la grille de Gauss + +La grille de collocation est un **produit tensoriel** : `Q = (p+1)^r` points. +Le nombre de modes est `A = C(p+r, r)` (nettement inférieur). + +| r | p | Q = (p+1)^r | A = C(p+r,r) | Ratio Q/A | +|---|---|-------------|---------------|-----------| +| 2 | 4 | 25 | 15 | 1.7 | +| 3 | 4 | 125 | 35 | 3.6 | +| 4 | 4 | 625 | 70 | 8.9 | +| 5 | 4 | 3125 | 126 | 24.8 | + +Pour `r >= 5`, le coût explose. Pour la régression, ce sur-échantillonnage est bénéfique +(système sur-déterminé). Pour NISP, le produit tensoriel reste exact mais coûteux. +Les grilles creuses (Smolyak) constituent l'alternative pour les grandes dimensions. + +### 3.2 Sorties multiples du modèle + +`model_main` retourne `[calc_rms; calc_std; calc_kurtosis]`, soit un vecteur `[3 × 1]`. +`method_lambda` accumule correctement ces sorties : `lambda_out` est `[3 × Q]`. +Les fonctions `cpg_modes_regression` et `cpg_modes_nisp` gèrent ce cas multi-sorties. + +### 3.3 Polynômes de Legendre — convention de normalisation + +`cpg_polyLegendre` calcule la norme sans le facteur 1/2 de la mesure uniforme : + +``` +PP(j) = 2 / (2*(j-1)+1) % = ∫_{-1}^{1} L_{j-1}²(ξ) dξ +``` + +La variance du développement en chaos doit donc inclure le facteur `1/2^r` : + +``` +Var[λ] = Σ_{k>0} λ̂_k² × PsiPsi(k) / 2^r +``` + +Cette convention est explicitée dans les fonctions fournies. + +--- + +## 4. Méthode de régression — principe mathématique + +### Développement en chaos polynomial + +On approche la quantité d'intérêt par : + +``` +λ(ξ) ≈ Σ_{k=0}^{A-1} λ̂_k Ψ_k(ξ) +``` + +où `Ψ_k(ξ) = Π_{j=1}^r L_{α_{k,j}}(ξ_j)` sont les polynômes de chaos +et `α_k ∈ ℕ^r` les multi-indices avec `|α_k| ≤ p`. + +### Matrice de collocation + +On construit la matrice `Φ ∈ ℝ^{Q×A}` : + +``` +Φ(q, k) = Ψ_k(ξ^(q)) +``` + +### Résolution par moindres carrés (régression) + +``` +λ̂ = argmin ||Φ λ̂ - f||² → λ̂ = Φ \ f +``` + +où `f` est le vecteur des évaluations du modèle aux points de collocation. +Pour `Q > A` (cas usuel avec grille produit tensoriel), le système est sur-déterminé. + +### Statistiques du développement + +``` +E[λ] = λ̂_0 (coefficient de Ψ_0 = 1) +Var[λ] = Σ_{k=1}^{A-1} λ̂_k² × PsiPsi(k) / 2^r +``` + +--- + +## 5. Méthode NISP — principe mathématique + +La projection spectrale non-intrusive calcule directement les coefficients par quadrature : + +``` +λ̂_k^NISP = <λ, Ψ_k> / <Ψ_k, Ψ_k> + = (Σ_q W_q λ(ξ^(q)) Ψ_k(ξ^(q))) / PsiPsi(k) +``` + +où `W_q = Π_j w_{i_j}` sont les poids de quadrature de Gauss–Legendre en produit tensoriel. + +Les poids 1D sont calculés par : + +``` +w_j = 2 / ((1 − ξ_j²) [L'_{p+1}(ξ_j)]²) +``` + +**Avantage de NISP** : si le modèle est exactement représentable dans la base polynomiale, +l'intégration est exacte (la quadrature de Gauss est exacte pour les polynômes jusqu'au +degré `2p+1`). + +**Avantage de la régression** : plus robuste au sur-échantillonnage et au bruit, meilleure +conditionnement numérique lorsque `Q >> A`. + +--- + +## 6. Fichiers fournis + +| Fichier | Description | +|---------------------------|------------------------------------------------| +| `cpg.m` | Fonction principale corrigée | +| `cpg_modes_regression.m` | Modes stochastiques par régression (nouveau) | +| `cpg_gauss_weights.m` | Poids de Gauss–Legendre (nouveau) | +| `cpg_modes_nisp.m` | Modes stochastiques par NISP (nouveau) | +| `method_XiToX.m` | Transformation ξ → X corrigée | + +--- + +*Revue réalisée le 12 mai 2026*jk diff --git a/config/Typora/draftsRecover/2026-5-4 degoogle 125007.md b/config/Typora/draftsRecover/2026-5-4 degoogle 125007.md new file mode 100644 index 0000000..568f263 --- /dev/null +++ b/config/Typora/draftsRecover/2026-5-4 degoogle 125007.md @@ -0,0 +1,128 @@ +# Introduction + +Ce tutoriel est un résumé de mes réflexions personnelles tout au long de ma démarche de **ré-appropriation de mes moyens de production individuels**, à savoir mon ordinateur et mon téléphone portable. Cette démarche est issue d'une frustration vis-à-vis des outils proposés par Google et Microsoft, qui sont tout sauf conviviaux, et surtout totalement opaques dans leur fonctionnement du point de vue de l'usager. Je suis persuadé que de nombreux chemins mènent à cette même frustration, que ce soit par une volonté de maîtriser ses outils (sur les aspects de réparabilité, convivialité, etc...), de sécuriser ses données personnelles, de se libérer des réseaux et outils hégémoniques des GAFAM, de diminuer ses dépenses en moyens technologiques ou dans l'obsolescence des outils numériques, de soutenir les initiatives du monde du libre et de l'open source, etc... + +L'idée ici est donc de proposer les moyens que j'ai sélectionné pour me **libérer des GAFAM** autant que possible. J'y discute les avantages ainsi que les limites de cette transition. J'y expose aussi quelques unes des méthodes (perfectibles) que j'ai mis en place, la démarche intellectuelle (personnelle) que j'ai suivi et des pistes destinées à passer le pas (ce qui peut être rapidement vertigineux). Je n'aime pas proposer une "checklist" à suivre, cela n'est pas un guide pas-à-pas, mais plutôt le moyen de suivre un certain cheminement de pensée et comprendre les choix que j'ai fait. + +Je ne prétend pas être un fin connaisseur des architectures numériques (disons que je me débrouille assez pour mes besoins), à vous de vérifier mes dires (et éventuellement me faire des retours). Cela représente deux années de travail et de réflexion (et pas mal de galères :p). C'est un travail continu, qui évolue constamment à l'usage (et qui est donc très personnel). J'espère donner des pistes pour que chacun.e puisse plus facilement s'émanciper. +# Dégoogliser son téléphone +## Quitter Google (et Microsoft, etc...) +Il y a plusieurs raisons de quitter Google. Si d'abord j'avais entamé ma transition vers Linux par frustration vis-à-vis de Microsoft Windows, j'ai passé le pas pour Google pour d'autres raisons. Non pas que je trouvais l'interface conviviale (au contraire), mais car cela impliquait des changements dans mon usage plus profonds et plus risqués par rapport à mes accès à différents réseaux. L'élément déclencheur a plutôt été lié à la protection de mes données personnelles, dans une période où j'avais particulièrement besoin d'avoir confiance en ce que je partage ou non à des services tiers. + +L'adage "si c'est gratuit c'est que c'est toi le produit" s'applique sans aucun souci à Google (et aux GAFAM en général). Proposer des services gratuits, et se rémunérer en fournissant les données des utilisateurices récoltées à l'intention d'agences publicitaires et/ou d'opinion. C'est un moyen central de renouvellement de l'hégémonie de la société de consommation, qui permet de modeler de manière adaptative les besoins des potentiels consommateurices. Cette méthode de surveillance et de profilage généralisée est un danger pour la démocratie, notamment à l'ère ou les multinationales qui détiennent nos données détiennent un monopole et militent activement pour le maintien et le développement des oppressions de classe, coloniales, patriarcales, etc... Les patrons de la tech américaine (qui sont les fournisseurs principaux des services dans le monde entier), ne se cachent même plus dans leur eugénisme, leur racisme décomplexé et leurs haine du peuple et des travailleureuses. Les données récoltées servent directement l'appareil d'État, OpenAI ayant montré en France que des requêtes ChatGPT pouvaient mener à une interpellation musclée par la police française. De même, les milices ICE aux États Unis se servent abondamment dans les données leurs permettant de cibler et emprisonner arbitrairement des personnes sur le sol américain. À tout cela, j'ai beaucoup entendu "je n'ai rien à cacher, je ne vois pas le problème personnellement"... demain, cela deviendra peut-être un besoin vital de ne pas être traqué par nos appareils. Cf [source](https://www.bfmtv.com/tech/vie-numerique/aux-etats-unis-l-ice-a-envoye-des-centaines-de-demandes-aux-gafam-jusqu-alors-reservees-a-des-enquetes-criminelles-afin-d-identifier-de-simples-opposants-a-la-politique-de-donald-trump_AN-202602160440.html). + +Mais au delà de ces préoccupations politiques, c'est aussi une émancipation. J'étais personnellement frustré de voir mon espace disponible lentement se remplir, jusqu'à saturer la mémoire de mon appareil, et voir les applications impossibles à désinstaller venant avec les services de Google. J'avais une 15aine d'applications sur mon écran d'accueil que je n'utilisais pas, qui récupéraient pourtant mes données, et que je ne pouvais pas supprimer ou bloquer. Je ne maîtrisais pas la sécurité de mon appareil, tout étant délégué à des services en lesquels je n'avais pas confiance (dois-je vraiment me protéger de potentiels virus me volant mes données, quand les services censés me protéger transmettent déjà mes données à Google ?). En quittant Google, je peux sécuriser mon téléphone en connaissant les informations qui rentrent et sortent de mon appareil, et en ayant une idée (même vague) d'où elles sont envoyées. Je peux aussi décider d'empêcher certains services d'agir (même si cela implique un fonctionnement moins performant). + +Enfin, un dernier point porte sur les politiques récentes de Google vis-à-vis des applications libres et open source. D'ici septembre 2026, installer des applications libres et open source dont l'identité des développeureuses ne serait pas validée par Google deviendra impossible sur les appareils utilisant Google. Un moyen pour le géant de la tech d'écraser toute concurrence à son modèle économique. J'utilisais déjà des applications provenant du dépôt FossDroid, principal concerné par les restrictions, et c'est l'événement qui a déclenché le passage à l'acte de dégooglisation. Cf [source](https://keepandroidopen.org/en/). + +### Définir ses besoins +Le processus de dégooglisation est plus qu'un simple changement de système d'exploitation. Il s'agit plutôt de changer de paradigme, hors du cadre imposé par Google sur l'ensemble des appareils. Et donc, il faut aussi réflechir aussi à quel cadre nous impose Google. + +Ce cadre, c'est celui de la **création de besoin par la disponibilité du produit**. D'abord, à l'aide d'applications imposées (la suite Google, comme Youtube, Google Drive, etc...): le produit existe sur mon appareil, c'est bien qu'il doit répondre à un besoin que j'ai. Ensuite, par la construction des applications (notamment l'App Store), qui nous proposent des fonctionnalités à "explorer", pour se rendre compte que nous avions terriblement besoin de cet outil que nous n'avions jamais demandé auparavant. Ce cadre constitue la structure, basée sur l'addiction à la nouveauté permanente et à la mise sous dépendance d'usage de chaque nouvelle application. Cela crée une décorrelation entre le besoin réel et le produit de consommation, qui est néfaste autant pour le consommateur que pour les développeureuses, qui ne créent plus pour répondre à des besoins d'usagers mais pour les rendre addict, et par là accroître le capital des actionnaires. Sortir de ce paradigme, c'est faire la démarche inverse: définir ses besoins, puis évaluer les produits existants pouvant y répondre (et créer son outil s'il n'existe pas). C'est aussi s'interroger sur le coût (humain, écologique, financier, sociétal) des outils et les risques que j'encours (sur ma vie privée, sur les conséquences possibles sur ma santé...), à mettre sur la balance face à notre sentiment de besoin (est-ce que cela vaut le coût de subvenir à ce besoin, est-il essentiel ?). + +Pour changer de manière d'aborder les choses, suivre la philosophie UNIX peut-être intéressante. Elle se formule généralement avec la phrase "do one thing and do it well", c'est-à-dire qu'une bonne application est une application mono-tâche qui accomplit ce qu'on lui demande de la manière dont on lui demande. C'est une philosophie largement répandue dans le monde de l'open source et du libre, qui permet souvent des applications très efficaces dans leur domaine (pas forcément mais la spécialisation aide souvent). + +Ainsi, en réfléchissant à tous ces axes (risques, coût, besoins, nécessité), j'ai pu définir mes besoins. Évidemment, ils sont amenés à évoluer, et surtout sont modelés par mes usages passés dans le cadre du paradigme précédent et de la société qui agit sur moi: ais-je vraiment besoin d'Instagram ? Je sais que mon besoin de réseaux sociaux comme Instagram est plus une addiction, et tendra peut-être à diminuer (jusqu'à être compensée par le risque de profilage que l'application représente) si j'arrive à trouver l'énergie de me sevrer... et dans ce cas se transformera, peut-être vers des applications semblables, libres et plus saines dans leur construction. Ces besoins sont donc: + +- pouvoir communiquer à travers mes réseaux (téléphone, messageries, réseaux sociaux, mails, gestionnaire de contacts) +- avoir accès à des services essentiels pour moi (streaming musical et vidéo, accès à mes comptes bancaires, aux applications de transports, appareil photo...) +- avoir un accès sécurisé à internet (sans traqueurs, sans pubs) +- avoir un appareil sécurisé me permettant la double authentification (2FA) +- pouvoir couper les services quand je ne les utilise pas (autant au niveau software que hardware, en particulier micro, caméra, localisation, internet) +- minimiser les données que je transmet si elles ne sont pas utiles ou sécurisées suffisamment pour que j'accorde ma confiance au service qui les détient +- limiter mon exposition aux publicités ciblées +- minimiser le risque de fuites de données personnelles + +Pour subvenir à ces besoins, j'ai identifié plusieurs pistes: + +- adopter un comportement en ligne responsable et éclairé + - continuer à suivre les bases, à savoir éviter le phishing, les sites internet non sécurisés et inconnus, éviter de télécharger des fichiers sur internet les yeux fermés, refuser les cookies sur les sites, ... + - utiliser des mots de passe forts (et un gestionnaire de mot de passe en lequel j'ai confiance) + - utiliser au maximum un VPN au quotidien + - m'informer sur les risques liés aux fuites de données (par exemple grâce à [la Quadrature du Net](https://www.laquadrature.net/) mais aussi d'autres ressources en ligne aussi diverses que variées +- changer mon téléphone pour une marque qui me permet de quitter google (FairPhone en l'occurence) +- changer de système d'exploitation pour une version sans Google +- quitter un à un les services de Google, et passer tous mes comptes essentiels sur une nouvelle adresse mail, ou demander la suppression des données si le service est non-essentiel +- adopter la philosophie UNIX pour les applications alternatives que j'adopte ("do one thing and do it well") + +Un sacré travail en perspective ! + +### Le plus difficile : lister ses comptes associés à Google +S'il y a une chose à faire en premier (car c'est LONG), c'est bien de préparer la suppression de son compte google (et donc la fermeture de son adresse Gmail). Le plus simple (pour commencer par le commencement), c'est de récupérer ses données. Une part de données (qui ne seront probablement jamais utiles) peut être récupérée via Google Takeout. Cela peut notamment être intéressant pour transférer ses abonnements youtubes sous un nouveau service en local (par exemple PipePipe ou NewPipe), ou encore exporter et archiver ses mails au format Mbox en local, pour plus tard pouvoir y accéder via Thunderbird par exemple. Dès lors que l'ensemble des mails sont sauvegardés, ils peuvent être supprimés sur gmail (intéressant quand on sait que Google et Microsoft se préparent à l'accès total de tous nos mails pour leurs services d'IA à des fins d'entraînement) et enfin enregistrer les contacts sauvegardés sur notre compte google. Il s'agit ensuite de vider les différents cloud (Google Drive, ou autres cloud détenus par les GAFAM), pour stocker tout en local. + +Cette phase est relativement longue, car Google détient beaucoup de données, et il serait malvenu de supprimer son compte avant de découvrir que nos contacts sont enregistrés chez eux et les perdre intégralement. + +Ensuite, l'étape la plus longue est celle consistant à retrouver toutes les occurences de mon adresse gmail sur les comptes que j'ai pu créer. C'est mon problème principal encore aujourd'hui, car j'ai une adresse gmail depuis 2013, à laquelle sont liés 100% des comptes que j'ai créé en 13 ans. Je n'ai évidemment jamais noté les comptes que je créais. J'attend, pour supprimer mon compte google, de ne plus avoir peur de perdre des services essentiels qui seraient dépendants de mon accès à mon adresse gmail. J'ai trouvé quelques techniques pour aider à retrouver ses différents comptes: + +- un premier moyen est de vérifier les services connectés à notre compte google (via internet, gérer mon compte google - Applis et services tiers). +- ensuite, on peut aussi regarder les mails automatiques de création de compte reçus sur notre adresse gmail (sauf si on les a, comme moi, supprimés au fur et à mesure). +- enfin, on peut définir une période (6 mois par exemple) où on conservera l'adresse, et où à chaque utilisation d'un compte lié à gmail, on changera l'adresse liée. Au bout de 6 mois, on peut imaginer que les services oubliés ne sont pas à ce point essentiels. + +Une attention particulière peut être portée sur le changement d'adresse mail pour les services de l'État, qui peuvent devenir très embêtants si on perd l'adresse mail en question, surtout sachant que l'Identité numérique (qui permet de se connecter à tous les services de l'État) ne fonctionne pas sans les services de Google. Aussi, pour réduire la masse de comptes à modifier, un moyen peut aussi être de réfléchir encore une fois aux services dont j'ai réellement besoin (ce qui réduit drastiquement la liste, et surtout permet de trouver rapidement les services concernés). Ce qui ne veut pas dire que je vais oublier simplement les comptes restants, car mon objectif est aussi de supprimer ces comptes, ou si cela n'est pas possible facilement demander la suppression de mes données personnelles (merci les RGPD !). + +Un problème majeur peut subsister, notamment si l'usage de services de google est nécessaire dans le cadre des études, du travail, de la famille... Pour les deux premiers, il est toujours possible de créer un nouveau compte Google, sans données permettant notre identification, et strictement utilisé dans le cadre du travail. Pour la famille... à vous de les convaincre de quitter aussi les GAFAM (l'occasion aussi de montrer à quel point l'accessibilité peut-être simplifié sans les innombrables services inutiles de Google). +#### Remplacer son adresse gmail +Pour pouvoir changer ses différents comptes liés à gmail, il faut évidemment trouver un service d'hébergement d'adresse mail alternatif. Dans ce cas, j'utilise ProtonMail (j'y paye l'abonnement de base), un service Suisse sécurisé. Il existe de nombreux fournisseurs similaires, comme TutaMail, FastMail... Reste aussi la possibilité d'auto-héberger son service de mail, ou de passer par un [Chaton](https://www.chatons.org/), ou en achetant de l'espace sur des serveurs de son choix. Je ne donne pas vraiment de raison à mon choix de Proton (je l'ai fait sans vraiment réflechir, c'était une décision que j'ai prise au tout début de mon parcours). Un désavantage certain est que la version gratuite ne permet pas de recevoir des mails sous Thunderbird (mais la version payante de base est abordable, et le service est de qualité). L'entreprise n'est aussi peut-être pas la plus éthique, j'ai pu voir des critiques ici et là sur sa politique. Aussi, Proton est peut-être un des seuls services que j'utilise qui dérogent à la règle "do one thing but do it well" (ils proposent un agenda, un mail, et un drive, ainsi qu'un gestionnaire de mot de passe et un VPN que je n'utilise pas), mais c'est une solution de facilité que j'ai trouvé en attendant de faire mieux. Un avantage (et je crois que Tuta le permet aussi) est que l'on peut régler une redirection des mails Gmail vers Proton, ce qui aide à se détacher de Google pendant les 6 mois de prospection des comptes associés à gmail. Il est aussi possible d'avoir plusieurs alias, menant à la même adresse, ce qui est assez pratique pour se prémunir du spam. + +Sur le point de l'auto-hébergement, ou de l'usage d'un serveur personnel distant, je ne m'y suis pas encore attelé, mais c'est en projet car cela ouvre beaucoup de possibilités, notamment d'héberger un cloud par exemple. +#### En profiter pour changer ses mots de passe +Modifier son adresse mail sur ses comptes, c'est aussi l'occasion rêvée de changer ses mots de passe ! Le mauvais usage est généralement d'utiliser des mots de passe identiques, ou des "patterns" faciles à retenir pour se souvenir de tous ses mots de passe. C'est un moyen très facile pour les hackers de récupérer nos accès quand nos identifiants fuitent sur un site ou un autre, aussi un mot de passe fort et différent pour chaque compte est essentiel. Mais c'est embêtant, et la solution du calepin de mots de passe est une fausse bonne idée (il peut-être perdu, volé, etc...). + +J'utilise un gestionnaire de mot de passe sécurisé par un mot de passe dit "maître", c'est-à-dire un mot de passe long mais unique, qui permet de débloquer tous les autres. Ma préférence s'est portée sur BitWarden, car il permet de stocker en local et de manière chiffrée tous ses mots de passe, et propose le remplissage automatique sur internet (sous réserve de s'être connecté à l'aide de son mot de passe maître précédemment). Il suffit alors de laisser bitwarden générer de nouveaux mot de passe forts (environ 14-16 caractères, avec majuscules, chiffres et caractères spéciaux), avoir un mot de passe maître unique en tête (25 caractères environ), et tout enregistrer sur le gestionnaire de mot de passes. Il existe évidemment des alternatives qui fournissent le même service, comme Proton qui propose son propre gestionnaire par exemple, ou encore des outils fonctionnant en local comme Keypass (connu pour être plus sécurisé que Bitwarden). + +## Changer de système d'exploitation +La plupart des téléphones sont aujourd'hui vendus nativement avec une version d'Android fonctionnant avec les services de Google (sans possibilité de les enlever). Certains d'entre eux sont même quasi-impossibles à "root" (c'est-à-dire prendre le contrôle pour installer un noyau de notre choix). Il s'agit donc de trouver les systèmes d'exploitation disponibles pour son téléphone. + +Les différentes versions existantes sur le marché sont généralement basées sur Android (les autres versions de Linux n'étant pas à la hauteur aujourd'hui): + +- postMarketOS (beaucoup de compatibilités, sert notamment au reconditionnement de vieux appareils) +- /e/OS (version très proche des android de google, mais sans la présence obligatoire des services google, beaucoup de compatibilités) +- LineageOS (version d'android complètement dégooglisée, servie avec une configuration minimale, assez compatible avec les appareils) +- GrapheneOS (uniquement compatible avec les Google Pixel, très sécurisé et performant) + +De manière générale, les téléphones les plus faciles à dégoogliser sont (étonnament) les Google Pixel. Les constructeurs alternatifs peuvent aussi être intéressants, par exemple FairPhone qui propose même des téléphones directement sous /e/OS à l'achat (ce qui évite des manipulations sensibles). + +Si le téléphone n'est pas directement livré avec le système d'exploitation, il faut chercher sur Internet, pour son téléphone en particulier, la compatibilité et la procédure à suivre pour le rooter. LineageOS par exemple propose un tutoriel pour chaque appareil supporté, à suivre du début à la fin pour installer un nouvel OS. De manière générale, il faudra utiliser un ordinateur, et suivre les procédures, qui impliqueront l'utilisation de "fastboot" et "adb", des outils dédiés pour la gestion d'Android par ligne de commande depuis un ordinateur. Comme souvent, "suivre le tutoriel" est la solution (le plus difficile est de trouver le tutoriel, puis de régler les problèmes à l'aide de reddit et stackoverflow). + +J'utilise personnellement LineageOS, avec Trébuchet comme gestionnaire d'affichage (servi nativement), et en suis très heureux pour le moment. Au niveau du noyau, les services de Google ne sont pas actifs, et la sécurité est gérée par un outil linux intégré à Lineage. Mon téléphone est aussi chiffré (ses données ne sont pas déchiffrables sans accès autorisé au téléphone). +## Sécuriser son accès à Internet +Pour sécuriser mes accès au réseau (et notamment éviter de donner mon adresse IP librement), j'utilise un VPN. Je le couple à un bloqueur de DNS qui permet d'empêcher les publicités intempestives. Ces services sont généralement payants, avec des fournisseurs assez variés. Au long de mes recherches, les meilleures possibilités que j'ai trouvées sont probablement Proton VPN, et Mullvad VPN. Personnellement, j'utilise Mullvad car c'est un des services les plus avancés et sûrs (création de compte sans identifiants tels que mail et téléphone, plusieurs méthodes de blocage des traqueurs de données, prix bloqué et assuré à 5€ par mois, garanties avérées de protections des données, bloqueurs de DNS intégrés). + +De plus, j'évite d'utiliser au maximum des navigateurs internet privés (Google Chrome et Microsoft Edge pour ne pas les citer). À la place il y a l'embarras du choix: Brave, Firefox (et ses nombreuses branches), Tor... Personnellement, après plusieurs essais j'utilise Firefox, avec AdBlock en extension. + +Enfin, j'évite aussi le moteur de recherche de Google (qui propose en abondance du contenu sponsorisé et des AIslop articles en boucle). Deux solutions ici, DuckDuckGo (qui a le mérite de fonctionner assez bien, et sur lequel il est possible de supprimer l'utilisation de l'IA pour la recherche) ou Searxng, qui propose différents fournisseurs d'agrégateurs de moteurs de recherche, avec des variations selon les instances (voir [instances](https://searx.space/)). + +Au delà, la sécurité est toujours un compromis. Les bonnes pratiques (ne pas installer depuis des dépôts inconnus, faire régulièrement ses mises à jour, n'autoriser que le strict nécessaire à notre usage de l'application) suffisent généralement à minimiser le risque. Cela ne fera jamais de risque zéro, l'essentiel est d'être un minimum au courant des risques encourus quand on installe quelque chose. + +## Trouver des alternatives +Maintenant que l'usage du téléphone est sécurisé (autant que possible, la sécurité parfaite n'existe pas), il s'agit de subvenir aux besoins restants, et donc d'installer les applications associées. Pour l'usage classique du téléphone, des services sont déjà présents sur Lineage (appels, sms, agenda, calculatrice, ...) avec des applications open source. Pour le reste, l'idée pour éviter Google est de ne pas passer par le Google Play Store. Il y a peu d'alternatives, mais elles existent: d'abord, le téléchargement direct des fichiers d'applications via apkmirror sur internet... ce qui n'est pas vraiment recommandé, notamment pour la gestion des mises à jour. Ensuite, l'utilisation de gestionnaires de dépôts, comme F-droid qui fournit des applications libre et open source (FOSS en anglais). Ensuite, pour ce qui n'existe pas sur F-droid, j'utilise Aurora Store, qui est une "copie" du play store sans nécessité de se connecter à un compte Google (mode "anonyme"). + +Quand j'installe des applications, je me pose les questions suivantes: + +- est-ce que l'application répond à un besoin essentiel pour moi ? +- est-ce qu'elle respecte la philosophie Unix (do one thing but do it well) ? +- est-elle libre et open source, ou existe-t-il une alternative libre et open source ? +- quel est le risque que je prend avec cette application ? +- ai-je un moyen de diminuer ce risque ? + +En considérant la réponse à chaque question, j'estime si le compromis entre les avantages et inconvénients apportés me convient. Cela m'évite d'installer "compulsivement" des applications qui ne vont faire qu'aspirer mon attention sans que je l'accepte vraiment (ou pas, mais on se sépare difficilement des addictions implantées par des années d'usage des services des GAFAM). + +Sur l'évaluation des risques, je pars généralement du principe que F-droid me donne les informations sur les risques (c'est en général écrit dans la description), et je compte ensuite sur Aurora pour détecter les différents traqueurs présents dans mes applications. + +Sur la diminution des risques, j'utilise un 3ème outil (après F-droid et Aurora Store): ReVanced. C'est un outil de "patch" sur les applications, qui va venir changer le code source pour éviter certains services, traqueurs, gestionnaires de pubs... C'est en même temps un bénéfice (j'évite des traqueurs des GAFAM dans les applications supportées) et en même temps un risque (toucher au code source via des apk en ligne peut toujours comporter des risques de virus). + +Une note importante: toutes les applications ne fonctionnent pas sans les services de Google. Pour ne pas la citer, "l'identité numérique" (je la cite quand même), service de l'état français, ne fonctionne pas sans services de Google. Il me semble qu'il existe des alternatives libres, comme microG, mais je ne me suis pas encore penché sur ça. + +## Prendre conscience des risques restants +**Il n'y a pas d'usage sans risque**, l'essentiel est ici d'être conscient des failles (et d'agir en conséquences). Je sais par exemple que Facebook Messenger, Instagram, mes applications de banque, ... possèdent des traqueurs connus (Google advertisment par exemple). J'essaie donc au maximum de diminuer progressivement mon empreinte numérique sur ces applications, et si pas possible au moins à sécuriser au maximum mon usage de ces dernières. + +Un point sur lequel je me pose aussi des questions (avec peu de réponses) est sur la sécurité des applications. Je ne sais pas vraiment quand je peux me fier ou non à telle ou telle application. Je n'ai toujours pas de réponse sur ça. +## Liste de mes alternatives + +![appchange](~/dotfiles_arch/tutoriels/appchange.svg) + + + +## Ressources + +[Subreddit degoogle](https://www.reddit.com/r/degoogle/wiki/index/) diff --git a/config/Typora/draftsRecover/2026-5-4 degoogle 125009.md b/config/Typora/draftsRecover/2026-5-4 degoogle 125009.md new file mode 100644 index 0000000..5c6a78f --- /dev/null +++ b/config/Typora/draftsRecover/2026-5-4 degoogle 125009.md @@ -0,0 +1,128 @@ +# Introduction + +Ce tutoriel est un résumé de mes réflexions personnelles tout au long de ma démarche de **ré-appropriation de mes moyens de production individuels**, à savoir mon ordinateur et mon téléphone portable. Cette démarche est issue d'une frustration vis-à-vis des outils proposés par Google et Microsoft, qui sont tout sauf conviviaux, et surtout totalement opaques dans leur fonctionnement du point de vue de l'usager. Je suis persuadé que de nombreux chemins mènent à cette même frustration, que ce soit par une volonté de maîtriser ses outils (sur les aspects de réparabilité, convivialité, etc...), de sécuriser ses données personnelles, de se libérer des réseaux et outils hégémoniques des GAFAM, de diminuer ses dépenses en moyens technologiques ou dans l'obsolescence des outils numériques, de soutenir les initiatives du monde du libre et de l'open source, etc... + +L'idée ici est donc de proposer les moyens que j'ai sélectionné pour me libérer des GAFAM** autant que possible. J'y discute les avantages ainsi que les limites de cette transition. J'y expose aussi quelques unes des méthodes (perfectibles) que j'ai mis en place, la démarche intellectuelle (personnelle) que j'ai suivi et des pistes destinées à passer le pas (ce qui peut être rapidement vertigineux). Je n'aime pas proposer une "checklist" à suivre, cela n'est pas un guide pas-à-pas, mais plutôt le moyen de suivre un certain cheminement de pensée et comprendre les choix que j'ai fait. + +Je ne prétend pas être un fin connaisseur des architectures numériques (disons que je me débrouille assez pour mes besoins), à vous de vérifier mes dires (et éventuellement me faire des retours). Cela représente deux années de travail et de réflexion (et pas mal de galères :p). C'est un travail continu, qui évolue constamment à l'usage (et qui est donc très personnel). J'espère donner des pistes pour que chacun.e puisse plus facilement s'émanciper. +# Dégoogliser son téléphone +## Quitter Google (et Microsoft, etc...) +Il y a plusieurs raisons de quitter Google. Si d'abord j'avais entamé ma transition vers Linux par frustration vis-à-vis de Microsoft Windows, j'ai passé le pas pour Google pour d'autres raisons. Non pas que je trouvais l'interface conviviale (au contraire), mais car cela impliquait des changements dans mon usage plus profonds et plus risqués par rapport à mes accès à différents réseaux. L'élément déclencheur a plutôt été lié à la protection de mes données personnelles, dans une période où j'avais particulièrement besoin d'avoir confiance en ce que je partage ou non à des services tiers. + +L'adage "si c'est gratuit c'est que c'est toi le produit" s'applique sans aucun souci à Google (et aux GAFAM en général). Proposer des services gratuits, et se rémunérer en fournissant les données des utilisateurices récoltées à l'intention d'agences publicitaires et/ou d'opinion. C'est un moyen central de renouvellement de l'hégémonie de la société de consommation, qui permet de modeler de manière adaptative les besoins des potentiels consommateurices. Cette méthode de surveillance et de profilage généralisée est un danger pour la démocratie, notamment à l'ère ou les multinationales qui détiennent nos données détiennent un monopole et militent activement pour le maintien et le développement des oppressions de classe, coloniales, patriarcales, etc... Les patrons de la tech américaine (qui sont les fournisseurs principaux des services dans le monde entier), ne se cachent même plus dans leur eugénisme, leur racisme décomplexé et leurs haine du peuple et des travailleureuses. Les données récoltées servent directement l'appareil d'État, OpenAI ayant montré en France que des requêtes ChatGPT pouvaient mener à une interpellation musclée par la police française. De même, les milices ICE aux États Unis se servent abondamment dans les données leurs permettant de cibler et emprisonner arbitrairement des personnes sur le sol américain. À tout cela, j'ai beaucoup entendu "je n'ai rien à cacher, je ne vois pas le problème personnellement"... demain, cela deviendra peut-être un besoin vital de ne pas être traqué par nos appareils. Cf [source](https://www.bfmtv.com/tech/vie-numerique/aux-etats-unis-l-ice-a-envoye-des-centaines-de-demandes-aux-gafam-jusqu-alors-reservees-a-des-enquetes-criminelles-afin-d-identifier-de-simples-opposants-a-la-politique-de-donald-trump_AN-202602160440.html). + +Mais au delà de ces préoccupations politiques, c'est aussi une émancipation. J'étais personnellement frustré de voir mon espace disponible lentement se remplir, jusqu'à saturer la mémoire de mon appareil, et voir les applications impossibles à désinstaller venant avec les services de Google. J'avais une 15aine d'applications sur mon écran d'accueil que je n'utilisais pas, qui récupéraient pourtant mes données, et que je ne pouvais pas supprimer ou bloquer. Je ne maîtrisais pas la sécurité de mon appareil, tout étant délégué à des services en lesquels je n'avais pas confiance (dois-je vraiment me protéger de potentiels virus me volant mes données, quand les services censés me protéger transmettent déjà mes données à Google ?). En quittant Google, je peux sécuriser mon téléphone en connaissant les informations qui rentrent et sortent de mon appareil, et en ayant une idée (même vague) d'où elles sont envoyées. Je peux aussi décider d'empêcher certains services d'agir (même si cela implique un fonctionnement moins performant). + +Enfin, un dernier point porte sur les politiques récentes de Google vis-à-vis des applications libres et open source. D'ici septembre 2026, installer des applications libres et open source dont l'identité des développeureuses ne serait pas validée par Google deviendra impossible sur les appareils utilisant Google. Un moyen pour le géant de la tech d'écraser toute concurrence à son modèle économique. J'utilisais déjà des applications provenant du dépôt FossDroid, principal concerné par les restrictions, et c'est l'événement qui a déclenché le passage à l'acte de dégooglisation. Cf [source](https://keepandroidopen.org/en/). + +### Définir ses besoins +Le processus de dégooglisation est plus qu'un simple changement de système d'exploitation. Il s'agit plutôt de changer de paradigme, hors du cadre imposé par Google sur l'ensemble des appareils. Et donc, il faut aussi réflechir aussi à quel cadre nous impose Google. + +Ce cadre, c'est celui de la **création de besoin par la disponibilité du produit**. D'abord, à l'aide d'applications imposées (la suite Google, comme Youtube, Google Drive, etc...): le produit existe sur mon appareil, c'est bien qu'il doit répondre à un besoin que j'ai. Ensuite, par la construction des applications (notamment l'App Store), qui nous proposent des fonctionnalités à "explorer", pour se rendre compte que nous avions terriblement besoin de cet outil que nous n'avions jamais demandé auparavant. Ce cadre constitue la structure, basée sur l'addiction à la nouveauté permanente et à la mise sous dépendance d'usage de chaque nouvelle application. Cela crée une décorrelation entre le besoin réel et le produit de consommation, qui est néfaste autant pour le consommateur que pour les développeureuses, qui ne créent plus pour répondre à des besoins d'usagers mais pour les rendre addict, et par là accroître le capital des actionnaires. Sortir de ce paradigme, c'est faire la démarche inverse: définir ses besoins, puis évaluer les produits existants pouvant y répondre (et créer son outil s'il n'existe pas). C'est aussi s'interroger sur le coût (humain, écologique, financier, sociétal) des outils et les risques que j'encours (sur ma vie privée, sur les conséquences possibles sur ma santé...), à mettre sur la balance face à notre sentiment de besoin (est-ce que cela vaut le coût de subvenir à ce besoin, est-il essentiel ?). + +Pour changer de manière d'aborder les choses, suivre la philosophie UNIX peut-être intéressante. Elle se formule généralement avec la phrase "do one thing and do it well", c'est-à-dire qu'une bonne application est une application mono-tâche qui accomplit ce qu'on lui demande de la manière dont on lui demande. C'est une philosophie largement répandue dans le monde de l'open source et du libre, qui permet souvent des applications très efficaces dans leur domaine (pas forcément mais la spécialisation aide souvent). + +Ainsi, en réfléchissant à tous ces axes (risques, coût, besoins, nécessité), j'ai pu définir mes besoins. Évidemment, ils sont amenés à évoluer, et surtout sont modelés par mes usages passés dans le cadre du paradigme précédent et de la société qui agit sur moi: ais-je vraiment besoin d'Instagram ? Je sais que mon besoin de réseaux sociaux comme Instagram est plus une addiction, et tendra peut-être à diminuer (jusqu'à être compensée par le risque de profilage que l'application représente) si j'arrive à trouver l'énergie de me sevrer... et dans ce cas se transformera, peut-être vers des applications semblables, libres et plus saines dans leur construction. Ces besoins sont donc: + +- pouvoir communiquer à travers mes réseaux (téléphone, messageries, réseaux sociaux, mails, gestionnaire de contacts) +- avoir accès à des services essentiels pour moi (streaming musical et vidéo, accès à mes comptes bancaires, aux applications de transports, appareil photo...) +- avoir un accès sécurisé à internet (sans traqueurs, sans pubs) +- avoir un appareil sécurisé me permettant la double authentification (2FA) +- pouvoir couper les services quand je ne les utilise pas (autant au niveau software que hardware, en particulier micro, caméra, localisation, internet) +- minimiser les données que je transmet si elles ne sont pas utiles ou sécurisées suffisamment pour que j'accorde ma confiance au service qui les détient +- limiter mon exposition aux publicités ciblées +- minimiser le risque de fuites de données personnelles + +Pour subvenir à ces besoins, j'ai identifié plusieurs pistes: + +- adopter un comportement en ligne responsable et éclairé + - continuer à suivre les bases, à savoir éviter le phishing, les sites internet non sécurisés et inconnus, éviter de télécharger des fichiers sur internet les yeux fermés, refuser les cookies sur les sites, ... + - utiliser des mots de passe forts (et un gestionnaire de mot de passe en lequel j'ai confiance) + - utiliser au maximum un VPN au quotidien + - m'informer sur les risques liés aux fuites de données (par exemple grâce à [la Quadrature du Net](https://www.laquadrature.net/) mais aussi d'autres ressources en ligne aussi diverses que variées +- changer mon téléphone pour une marque qui me permet de quitter google (FairPhone en l'occurence) +- changer de système d'exploitation pour une version sans Google +- quitter un à un les services de Google, et passer tous mes comptes essentiels sur une nouvelle adresse mail, ou demander la suppression des données si le service est non-essentiel +- adopter la philosophie UNIX pour les applications alternatives que j'adopte ("do one thing and do it well") + +Un sacré travail en perspective ! + +### Le plus difficile : lister ses comptes associés à Google +S'il y a une chose à faire en premier (car c'est LONG), c'est bien de préparer la suppression de son compte google (et donc la fermeture de son adresse Gmail). Le plus simple (pour commencer par le commencement), c'est de récupérer ses données. Une part de données (qui ne seront probablement jamais utiles) peut être récupérée via Google Takeout. Cela peut notamment être intéressant pour transférer ses abonnements youtubes sous un nouveau service en local (par exemple PipePipe ou NewPipe), ou encore exporter et archiver ses mails au format Mbox en local, pour plus tard pouvoir y accéder via Thunderbird par exemple. Dès lors que l'ensemble des mails sont sauvegardés, ils peuvent être supprimés sur gmail (intéressant quand on sait que Google et Microsoft se préparent à l'accès total de tous nos mails pour leurs services d'IA à des fins d'entraînement) et enfin enregistrer les contacts sauvegardés sur notre compte google. Il s'agit ensuite de vider les différents cloud (Google Drive, ou autres cloud détenus par les GAFAM), pour stocker tout en local. + +Cette phase est relativement longue, car Google détient beaucoup de données, et il serait malvenu de supprimer son compte avant de découvrir que nos contacts sont enregistrés chez eux et les perdre intégralement. + +Ensuite, l'étape la plus longue est celle consistant à retrouver toutes les occurences de mon adresse gmail sur les comptes que j'ai pu créer. C'est mon problème principal encore aujourd'hui, car j'ai une adresse gmail depuis 2013, à laquelle sont liés 100% des comptes que j'ai créé en 13 ans. Je n'ai évidemment jamais noté les comptes que je créais. J'attend, pour supprimer mon compte google, de ne plus avoir peur de perdre des services essentiels qui seraient dépendants de mon accès à mon adresse gmail. J'ai trouvé quelques techniques pour aider à retrouver ses différents comptes: + +- un premier moyen est de vérifier les services connectés à notre compte google (via internet, gérer mon compte google - Applis et services tiers). +- ensuite, on peut aussi regarder les mails automatiques de création de compte reçus sur notre adresse gmail (sauf si on les a, comme moi, supprimés au fur et à mesure). +- enfin, on peut définir une période (6 mois par exemple) où on conservera l'adresse, et où à chaque utilisation d'un compte lié à gmail, on changera l'adresse liée. Au bout de 6 mois, on peut imaginer que les services oubliés ne sont pas à ce point essentiels. + +Une attention particulière peut être portée sur le changement d'adresse mail pour les services de l'État, qui peuvent devenir très embêtants si on perd l'adresse mail en question, surtout sachant que l'Identité numérique (qui permet de se connecter à tous les services de l'État) ne fonctionne pas sans les services de Google. Aussi, pour réduire la masse de comptes à modifier, un moyen peut aussi être de réfléchir encore une fois aux services dont j'ai réellement besoin (ce qui réduit drastiquement la liste, et surtout permet de trouver rapidement les services concernés). Ce qui ne veut pas dire que je vais oublier simplement les comptes restants, car mon objectif est aussi de supprimer ces comptes, ou si cela n'est pas possible facilement demander la suppression de mes données personnelles (merci les RGPD !). + +Un problème majeur peut subsister, notamment si l'usage de services de google est nécessaire dans le cadre des études, du travail, de la famille... Pour les deux premiers, il est toujours possible de créer un nouveau compte Google, sans données permettant notre identification, et strictement utilisé dans le cadre du travail. Pour la famille... à vous de les convaincre de quitter aussi les GAFAM (l'occasion aussi de montrer à quel point l'accessibilité peut-être simplifié sans les innombrables services inutiles de Google). +#### Remplacer son adresse gmail +Pour pouvoir changer ses différents comptes liés à gmail, il faut évidemment trouver un service d'hébergement d'adresse mail alternatif. Dans ce cas, j'utilise ProtonMail (j'y paye l'abonnement de base), un service Suisse sécurisé. Il existe de nombreux fournisseurs similaires, comme TutaMail, FastMail... Reste aussi la possibilité d'auto-héberger son service de mail, ou de passer par un [Chaton](https://www.chatons.org/), ou en achetant de l'espace sur des serveurs de son choix. Je ne donne pas vraiment de raison à mon choix de Proton (je l'ai fait sans vraiment réflechir, c'était une décision que j'ai prise au tout début de mon parcours). Un désavantage certain est que la version gratuite ne permet pas de recevoir des mails sous Thunderbird (mais la version payante de base est abordable, et le service est de qualité). L'entreprise n'est aussi peut-être pas la plus éthique, j'ai pu voir des critiques ici et là sur sa politique. Aussi, Proton est peut-être un des seuls services que j'utilise qui dérogent à la règle "do one thing but do it well" (ils proposent un agenda, un mail, et un drive, ainsi qu'un gestionnaire de mot de passe et un VPN que je n'utilise pas), mais c'est une solution de facilité que j'ai trouvé en attendant de faire mieux. Un avantage (et je crois que Tuta le permet aussi) est que l'on peut régler une redirection des mails Gmail vers Proton, ce qui aide à se détacher de Google pendant les 6 mois de prospection des comptes associés à gmail. Il est aussi possible d'avoir plusieurs alias, menant à la même adresse, ce qui est assez pratique pour se prémunir du spam. + +Sur le point de l'auto-hébergement, ou de l'usage d'un serveur personnel distant, je ne m'y suis pas encore attelé, mais c'est en projet car cela ouvre beaucoup de possibilités, notamment d'héberger un cloud par exemple. +#### En profiter pour changer ses mots de passe +Modifier son adresse mail sur ses comptes, c'est aussi l'occasion rêvée de changer ses mots de passe ! Le mauvais usage est généralement d'utiliser des mots de passe identiques, ou des "patterns" faciles à retenir pour se souvenir de tous ses mots de passe. C'est un moyen très facile pour les hackers de récupérer nos accès quand nos identifiants fuitent sur un site ou un autre, aussi un mot de passe fort et différent pour chaque compte est essentiel. Mais c'est embêtant, et la solution du calepin de mots de passe est une fausse bonne idée (il peut-être perdu, volé, etc...). + +J'utilise un gestionnaire de mot de passe sécurisé par un mot de passe dit "maître", c'est-à-dire un mot de passe long mais unique, qui permet de débloquer tous les autres. Ma préférence s'est portée sur BitWarden, car il permet de stocker en local et de manière chiffrée tous ses mots de passe, et propose le remplissage automatique sur internet (sous réserve de s'être connecté à l'aide de son mot de passe maître précédemment). Il suffit alors de laisser bitwarden générer de nouveaux mot de passe forts (environ 14-16 caractères, avec majuscules, chiffres et caractères spéciaux), avoir un mot de passe maître unique en tête (25 caractères environ), et tout enregistrer sur le gestionnaire de mot de passes. Il existe évidemment des alternatives qui fournissent le même service, comme Proton qui propose son propre gestionnaire par exemple, ou encore des outils fonctionnant en local comme Keypass (connu pour être plus sécurisé que Bitwarden). + +## Changer de système d'exploitation +La plupart des téléphones sont aujourd'hui vendus nativement avec une version d'Android fonctionnant avec les services de Google (sans possibilité de les enlever). Certains d'entre eux sont même quasi-impossibles à "root" (c'est-à-dire prendre le contrôle pour installer un noyau de notre choix). Il s'agit donc de trouver les systèmes d'exploitation disponibles pour son téléphone. + +Les différentes versions existantes sur le marché sont généralement basées sur Android (les autres versions de Linux n'étant pas à la hauteur aujourd'hui): + +- postMarketOS (beaucoup de compatibilités, sert notamment au reconditionnement de vieux appareils) +- /e/OS (version très proche des android de google, mais sans la présence obligatoire des services google, beaucoup de compatibilités) +- LineageOS (version d'android complètement dégooglisée, servie avec une configuration minimale, assez compatible avec les appareils) +- GrapheneOS (uniquement compatible avec les Google Pixel, très sécurisé et performant) + +De manière générale, les téléphones les plus faciles à dégoogliser sont (étonnament) les Google Pixel. Les constructeurs alternatifs peuvent aussi être intéressants, par exemple FairPhone qui propose même des téléphones directement sous /e/OS à l'achat (ce qui évite des manipulations sensibles). + +Si le téléphone n'est pas directement livré avec le système d'exploitation, il faut chercher sur Internet, pour son téléphone en particulier, la compatibilité et la procédure à suivre pour le rooter. LineageOS par exemple propose un tutoriel pour chaque appareil supporté, à suivre du début à la fin pour installer un nouvel OS. De manière générale, il faudra utiliser un ordinateur, et suivre les procédures, qui impliqueront l'utilisation de "fastboot" et "adb", des outils dédiés pour la gestion d'Android par ligne de commande depuis un ordinateur. Comme souvent, "suivre le tutoriel" est la solution (le plus difficile est de trouver le tutoriel, puis de régler les problèmes à l'aide de reddit et stackoverflow). + +J'utilise personnellement LineageOS, avec Trébuchet comme gestionnaire d'affichage (servi nativement), et en suis très heureux pour le moment. Au niveau du noyau, les services de Google ne sont pas actifs, et la sécurité est gérée par un outil linux intégré à Lineage. Mon téléphone est aussi chiffré (ses données ne sont pas déchiffrables sans accès autorisé au téléphone). +## Sécuriser son accès à Internet +Pour sécuriser mes accès au réseau (et notamment éviter de donner mon adresse IP librement), j'utilise un VPN. Je le couple à un bloqueur de DNS qui permet d'empêcher les publicités intempestives. Ces services sont généralement payants, avec des fournisseurs assez variés. Au long de mes recherches, les meilleures possibilités que j'ai trouvées sont probablement Proton VPN, et Mullvad VPN. Personnellement, j'utilise Mullvad car c'est un des services les plus avancés et sûrs (création de compte sans identifiants tels que mail et téléphone, plusieurs méthodes de blocage des traqueurs de données, prix bloqué et assuré à 5€ par mois, garanties avérées de protections des données, bloqueurs de DNS intégrés). + +De plus, j'évite d'utiliser au maximum des navigateurs internet privés (Google Chrome et Microsoft Edge pour ne pas les citer). À la place il y a l'embarras du choix: Brave, Firefox (et ses nombreuses branches), Tor... Personnellement, après plusieurs essais j'utilise Firefox, avec AdBlock en extension. + +Enfin, j'évite aussi le moteur de recherche de Google (qui propose en abondance du contenu sponsorisé et des AIslop articles en boucle). Deux solutions ici, DuckDuckGo (qui a le mérite de fonctionner assez bien, et sur lequel il est possible de supprimer l'utilisation de l'IA pour la recherche) ou Searxng, qui propose différents fournisseurs d'agrégateurs de moteurs de recherche, avec des variations selon les instances (voir [instances](https://searx.space/)). + +Au delà, la sécurité est toujours un compromis. Les bonnes pratiques (ne pas installer depuis des dépôts inconnus, faire régulièrement ses mises à jour, n'autoriser que le strict nécessaire à notre usage de l'application) suffisent généralement à minimiser le risque. Cela ne fera jamais de risque zéro, l'essentiel est d'être un minimum au courant des risques encourus quand on installe quelque chose. + +## Trouver des alternatives +Maintenant que l'usage du téléphone est sécurisé (autant que possible, la sécurité parfaite n'existe pas), il s'agit de subvenir aux besoins restants, et donc d'installer les applications associées. Pour l'usage classique du téléphone, des services sont déjà présents sur Lineage (appels, sms, agenda, calculatrice, ...) avec des applications open source. Pour le reste, l'idée pour éviter Google est de ne pas passer par le Google Play Store. Il y a peu d'alternatives, mais elles existent: d'abord, le téléchargement direct des fichiers d'applications via apkmirror sur internet... ce qui n'est pas vraiment recommandé, notamment pour la gestion des mises à jour. Ensuite, l'utilisation de gestionnaires de dépôts, comme F-droid qui fournit des applications libre et open source (FOSS en anglais). Ensuite, pour ce qui n'existe pas sur F-droid, j'utilise Aurora Store, qui est une "copie" du play store sans nécessité de se connecter à un compte Google (mode "anonyme"). + +Quand j'installe des applications, je me pose les questions suivantes: + +- est-ce que l'application répond à un besoin essentiel pour moi ? +- est-ce qu'elle respecte la philosophie Unix (do one thing but do it well) ? +- est-elle libre et open source, ou existe-t-il une alternative libre et open source ? +- quel est le risque que je prend avec cette application ? +- ai-je un moyen de diminuer ce risque ? + +En considérant la réponse à chaque question, j'estime si le compromis entre les avantages et inconvénients apportés me convient. Cela m'évite d'installer "compulsivement" des applications qui ne vont faire qu'aspirer mon attention sans que je l'accepte vraiment (ou pas, mais on se sépare difficilement des addictions implantées par des années d'usage des services des GAFAM). + +Sur l'évaluation des risques, je pars généralement du principe que F-droid me donne les informations sur les risques (c'est en général écrit dans la description), et je compte ensuite sur Aurora pour détecter les différents traqueurs présents dans mes applications. + +Sur la diminution des risques, j'utilise un 3ème outil (après F-droid et Aurora Store): ReVanced. C'est un outil de "patch" sur les applications, qui va venir changer le code source pour éviter certains services, traqueurs, gestionnaires de pubs... C'est en même temps un bénéfice (j'évite des traqueurs des GAFAM dans les applications supportées) et en même temps un risque (toucher au code source via des apk en ligne peut toujours comporter des risques de virus). + +Une note importante: toutes les applications ne fonctionnent pas sans les services de Google. Pour ne pas la citer, "l'identité numérique" (je la cite quand même), service de l'état français, ne fonctionne pas sans services de Google. Il me semble qu'il existe des alternatives libres, comme microG, mais je ne me suis pas encore penché sur ça. + +## Prendre conscience des risques restants +**Il n'y a pas d'usage sans risque**, l'essentiel est ici d'être conscient des failles (et d'agir en conséquences). Je sais par exemple que Facebook Messenger, Instagram, mes applications de banque, ... possèdent des traqueurs connus (Google advertisment par exemple). J'essaie donc au maximum de diminuer progressivement mon empreinte numérique sur ces applications, et si pas possible au moins à sécuriser au maximum mon usage de ces dernières. + +Un point sur lequel je me pose aussi des questions (avec peu de réponses) est sur la sécurité des applications. Je ne sais pas vraiment quand je peux me fier ou non à telle ou telle application. Je n'ai toujours pas de réponse sur ça. +## Liste de mes alternatives + +![appchange](~/dotfiles_arch/tutoriels/appchange.svg) + + + +## Ressources + +[Subreddit degoogle](https://www.reddit.com/r/degoogle/wiki/index/) diff --git a/config/Typora/draftsRecover/2026-5-4 degoogle 125048.md b/config/Typora/draftsRecover/2026-5-4 degoogle 125048.md new file mode 100644 index 0000000..cc54876 --- /dev/null +++ b/config/Typora/draftsRecover/2026-5-4 degoogle 125048.md @@ -0,0 +1,128 @@ +# Introduction + +Ce tutoriel est un résumé de mes réflexions personnelles tout au long de ma démarche de **ré-appropriation de mes moyens de production individuels**, à savoir mon ordinateur et mon téléphone portable. Cette démarche est issue d'une frustration vis-à-vis des outils proposés par Google et Microsoft, qui sont tout sauf conviviaux, et surtout totalement opaques dans leur fonctionnement du point de vue de l'usager. Je suis persuadé que de nombreux chemins mènent à cette même frustration, que ce soit par une volonté de maîtriser ses outils (sur les aspects de réparabilité, convivialité, etc...), de sécuriser ses données personnelles, de se libérer des réseaux et outils hégémoniques des GAFAM, de diminuer ses dépenses en moyens technologiques ou dans l'obsolescence des outils numériques, de soutenir les initiatives du monde du libre et de l'open source, etc... + +L'idée ici est donc de proposer les moyens que j'ai sélectionné pour me libérer des GAFAM autant que possible. J'y discute les avantages ainsi que les limites de cette transition. J'y expose aussi quelques unes des méthodes (perfectibles) que j'ai mis en place, la démarche intellectuelle (personnelle) que j'ai suivi et des pistes destinées à passer le pas (ce qui peut être rapidement vertigineux). Je n'aime pas proposer une "checklist" à suivre, cela n'est pas un guide pas-à-pas, mais plutôt le moyen de suivre un certain cheminement de pensée et comprendre les choix que j'ai fait. + +Je ne prétend pas être un fin connaisseur des architectures numériques (disons que je me débrouille assez pour mes besoins), à vous de vérifier mes dires (et éventuellement me faire des retours). Cela représente deux années de travail et de réflexion (et pas mal de galères :p). C'est un travail continu, qui évolue constamment à l'usage (et qui est donc très personnel). J'espère donner des pistes pour que chacun.e puisse plus facilement s'émanciper. +# Dégoogliser son téléphone +## Quitter Google (et Microsoft, etc...) +Il y a plusieurs raisons de quitter Google. Si d'abord j'avais entamé ma transition vers Linux par frustration vis-à-vis de Microsoft Windows, j'ai passé le pas pour Google pour d'autres raisons. Non pas que je trouvais l'interface conviviale (au contraire), mais car cela impliquait des changements dans mon usage plus profonds et plus risqués par rapport à mes accès à différents réseaux. L'élément déclencheur a plutôt été lié à la protection de mes données personnelles, dans une période où j'avais particulièrement besoin d'avoir confiance en ce que je partage ou non à des services tiers. + +L'adage "si c'est gratuit c'est que c'est toi le produit" s'applique sans aucun souci à Google (et aux GAFAM en général). Proposer des services gratuits, et se rémunérer en fournissant les données des utilisateurices récoltées à l'intention d'agences publicitaires et/ou d'opinion. C'est un moyen central de renouvellement de l'hégémonie de la société de consommation, qui permet de modeler de manière adaptative les besoins des potentiels consommateurices. Cette méthode de surveillance et de profilage généralisée est un danger pour la démocratie, notamment à l'ère ou les multinationales qui détiennent nos données détiennent un monopole et militent activement pour le maintien et le développement des oppressions de classe, coloniales, patriarcales, etc... Les patrons de la tech américaine (qui sont les fournisseurs principaux des services dans le monde entier), ne se cachent même plus dans leur eugénisme, leur racisme décomplexé et leurs haine du peuple et des travailleureuses. Les données récoltées servent directement l'appareil d'État, OpenAI ayant montré en France que des requêtes ChatGPT pouvaient mener à une interpellation musclée par la police française. De même, les milices ICE aux États Unis se servent abondamment dans les données leurs permettant de cibler et emprisonner arbitrairement des personnes sur le sol américain. À tout cela, j'ai beaucoup entendu "je n'ai rien à cacher, je ne vois pas le problème personnellement"... demain, cela deviendra peut-être un besoin vital de ne pas être traqué par nos appareils (cf [source](https://www.bfmtv.com/tech/vie-numerique/aux-etats-unis-l-ice-a-envoye-des-centaines-de-demandes-aux-gafam-jusqu-alors-reservees-a-des-enquetes-criminelles-afin-d-identifier-de-simples-opposants-a-la-politique-de-donald-trump_AN-202602160440.html)). + +Mais au delà de ces préoccupations politiques, c'est aussi une émancipation. J'étais personnellement frustré de voir mon espace disponible lentement se remplir, jusqu'à saturer la mémoire de mon appareil, et voir les applications impossibles à désinstaller venant avec les services de Google. J'avais une 15aine d'applications sur mon écran d'accueil que je n'utilisais pas, qui récupéraient pourtant mes données, et que je ne pouvais pas supprimer ou bloquer. Je ne maîtrisais pas la sécurité de mon appareil, tout étant délégué à des services en lesquels je n'avais pas confiance (dois-je vraiment me protéger de potentiels virus me volant mes données, quand les services censés me protéger transmettent déjà mes données à Google ?). En quittant Google, je peux sécuriser mon téléphone en connaissant les informations qui rentrent et sortent de mon appareil, et en ayant une idée (même vague) d'où elles sont envoyées. Je peux aussi décider d'empêcher certains services d'agir (même si cela implique un fonctionnement moins performant). + +Enfin, un dernier point porte sur les politiques récentes de Google vis-à-vis des applications libres et open source. D'ici septembre 2026, installer des applications libres et open source dont l'identité des développeureuses ne serait pas validée par Google deviendra impossible sur les appareils utilisant Google. Un moyen pour le géant de la tech d'écraser toute concurrence à son modèle économique. J'utilisais déjà des applications provenant du dépôt FossDroid, principal concerné par les restrictions, et c'est l'événement qui a déclenché le passage à l'acte de dégooglisation (Cf [source](https://keepandroidopen.org/en/)). [source](https://keepandroidopen.org/en/). + +### Définir ses besoins +Le processus de dégooglisation est plus qu'un simple changement de système d'exploitation. Il s'agit plutôt de changer de paradigme, hors du cadre imposé par Google sur l'ensemble des appareils. Et donc, il faut aussi réflechir aussi à quel cadre nous impose Google. + +Ce cadre, c'est celui de la **création de besoin par la disponibilité du produit**. D'abord, à l'aide d'applications imposées (la suite Google, comme Youtube, Google Drive, etc...): le produit existe sur mon appareil, c'est bien qu'il doit répondre à un besoin que j'ai. Ensuite, par la construction des applications (notamment l'App Store), qui nous proposent des fonctionnalités à "explorer", pour se rendre compte que nous avions terriblement besoin de cet outil que nous n'avions jamais demandé auparavant. Ce cadre constitue la structure, basée sur l'addiction à la nouveauté permanente et à la mise sous dépendance d'usage de chaque nouvelle application. Cela crée une décorrelation entre le besoin réel et le produit de consommation, qui est néfaste autant pour le consommateur que pour les développeureuses, qui ne créent plus pour répondre à des besoins d'usagers mais pour les rendre addict, et par là accroître le capital des actionnaires. Sortir de ce paradigme, c'est faire la démarche inverse: définir ses besoins, puis évaluer les produits existants pouvant y répondre (et créer son outil s'il n'existe pas). C'est aussi s'interroger sur le coût (humain, écologique, financier, sociétal) des outils et les risques que j'encours (sur ma vie privée, sur les conséquences possibles sur ma santé...), à mettre sur la balance face à notre sentiment de besoin (est-ce que cela vaut le coût de subvenir à ce besoin, est-il essentiel ?). + +Pour changer de manière d'aborder les choses, suivre la philosophie UNIX peut-être intéressante. Elle se formule généralement avec la phrase "do one thing and do it well", c'est-à-dire qu'une bonne application est une application mono-tâche qui accomplit ce qu'on lui demande de la manière dont on lui demande. C'est une philosophie largement répandue dans le monde de l'open source et du libre, qui permet souvent des applications très efficaces dans leur domaine (pas forcément mais la spécialisation aide souvent). + +Ainsi, en réfléchissant à tous ces axes (risques, coût, besoins, nécessité), j'ai pu définir mes besoins. Évidemment, ils sont amenés à évoluer, et surtout sont modelés par mes usages passés dans le cadre du paradigme précédent et de la société qui agit sur moi: ais-je vraiment besoin d'Instagram ? Je sais que mon besoin de réseaux sociaux comme Instagram est plus une addiction, et tendra peut-être à diminuer (jusqu'à être compensée par le risque de profilage que l'application représente) si j'arrive à trouver l'énergie de me sevrer... et dans ce cas se transformera, peut-être vers des applications semblables, libres et plus saines dans leur construction. Ces besoins sont donc: + +- pouvoir communiquer à travers mes réseaux (téléphone, messageries, réseaux sociaux, mails, gestionnaire de contacts) +- avoir accès à des services essentiels pour moi (streaming musical et vidéo, accès à mes comptes bancaires, aux applications de transports, appareil photo...) +- avoir un accès sécurisé à internet (sans traqueurs, sans pubs) +- avoir un appareil sécurisé me permettant la double authentification (2FA) +- pouvoir couper les services quand je ne les utilise pas (autant au niveau software que hardware, en particulier micro, caméra, localisation, internet) +- minimiser les données que je transmet si elles ne sont pas utiles ou sécurisées suffisamment pour que j'accorde ma confiance au service qui les détient +- limiter mon exposition aux publicités ciblées +- minimiser le risque de fuites de données personnelles + +Pour subvenir à ces besoins, j'ai identifié plusieurs pistes: + +- adopter un comportement en ligne responsable et éclairé + - continuer à suivre les bases, à savoir éviter le phishing, les sites internet non sécurisés et inconnus, éviter de télécharger des fichiers sur internet les yeux fermés, refuser les cookies sur les sites, ... + - utiliser des mots de passe forts (et un gestionnaire de mot de passe en lequel j'ai confiance) + - utiliser au maximum un VPN au quotidien + - m'informer sur les risques liés aux fuites de données (par exemple grâce à [la Quadrature du Net](https://www.laquadrature.net/) mais aussi d'autres ressources en ligne aussi diverses que variées +- changer mon téléphone pour une marque qui me permet de quitter google (FairPhone en l'occurence) +- changer de système d'exploitation pour une version sans Google +- quitter un à un les services de Google, et passer tous mes comptes essentiels sur une nouvelle adresse mail, ou demander la suppression des données si le service est non-essentiel +- adopter la philosophie UNIX pour les applications alternatives que j'adopte ("do one thing and do it well") + +Un sacré travail en perspective ! + +### Le plus difficile : lister ses comptes associés à Google +S'il y a une chose à faire en premier (car c'est LONG), c'est bien de préparer la suppression de son compte google (et donc la fermeture de son adresse Gmail). Le plus simple (pour commencer par le commencement), c'est de récupérer ses données. Une part de données (qui ne seront probablement jamais utiles) peut être récupérée via Google Takeout. Cela peut notamment être intéressant pour transférer ses abonnements youtubes sous un nouveau service en local (par exemple PipePipe ou NewPipe), ou encore exporter et archiver ses mails au format Mbox en local, pour plus tard pouvoir y accéder via Thunderbird par exemple. Dès lors que l'ensemble des mails sont sauvegardés, ils peuvent être supprimés sur gmail (intéressant quand on sait que Google et Microsoft se préparent à l'accès total de tous nos mails pour leurs services d'IA à des fins d'entraînement) et enfin enregistrer les contacts sauvegardés sur notre compte google. Il s'agit ensuite de vider les différents cloud (Google Drive, ou autres cloud détenus par les GAFAM), pour stocker tout en local. + +Cette phase est relativement longue, car Google détient beaucoup de données, et il serait malvenu de supprimer son compte avant de découvrir que nos contacts sont enregistrés chez eux et les perdre intégralement. + +Ensuite, l'étape la plus longue est celle consistant à retrouver toutes les occurences de mon adresse gmail sur les comptes que j'ai pu créer. C'est mon problème principal encore aujourd'hui, car j'ai une adresse gmail depuis 2013, à laquelle sont liés 100% des comptes que j'ai créé en 13 ans. Je n'ai évidemment jamais noté les comptes que je créais. J'attend, pour supprimer mon compte google, de ne plus avoir peur de perdre des services essentiels qui seraient dépendants de mon accès à mon adresse gmail. J'ai trouvé quelques techniques pour aider à retrouver ses différents comptes: + +- un premier moyen est de vérifier les services connectés à notre compte google (via internet, gérer mon compte google - Applis et services tiers). +- ensuite, on peut aussi regarder les mails automatiques de création de compte reçus sur notre adresse gmail (sauf si on les a, comme moi, supprimés au fur et à mesure). +- enfin, on peut définir une période (6 mois par exemple) où on conservera l'adresse, et où à chaque utilisation d'un compte lié à gmail, on changera l'adresse liée. Au bout de 6 mois, on peut imaginer que les services oubliés ne sont pas à ce point essentiels. + +Une attention particulière peut être portée sur le changement d'adresse mail pour les services de l'État, qui peuvent devenir très embêtants si on perd l'adresse mail en question, surtout sachant que l'Identité numérique (qui permet de se connecter à tous les services de l'État) ne fonctionne pas sans les services de Google. Aussi, pour réduire la masse de comptes à modifier, un moyen peut aussi être de réfléchir encore une fois aux services dont j'ai réellement besoin (ce qui réduit drastiquement la liste, et surtout permet de trouver rapidement les services concernés). Ce qui ne veut pas dire que je vais oublier simplement les comptes restants, car mon objectif est aussi de supprimer ces comptes, ou si cela n'est pas possible facilement demander la suppression de mes données personnelles (merci les RGPD !). + +Un problème majeur peut subsister, notamment si l'usage de services de google est nécessaire dans le cadre des études, du travail, de la famille... Pour les deux premiers, il est toujours possible de créer un nouveau compte Google, sans données permettant notre identification, et strictement utilisé dans le cadre du travail. Pour la famille... à vous de les convaincre de quitter aussi les GAFAM (l'occasion aussi de montrer à quel point l'accessibilité peut-être simplifié sans les innombrables services inutiles de Google). +#### Remplacer son adresse gmail +Pour pouvoir changer ses différents comptes liés à gmail, il faut évidemment trouver un service d'hébergement d'adresse mail alternatif. Dans ce cas, j'utilise ProtonMail (j'y paye l'abonnement de base), un service Suisse sécurisé. Il existe de nombreux fournisseurs similaires, comme TutaMail, FastMail... Reste aussi la possibilité d'auto-héberger son service de mail, ou de passer par un [Chaton](https://www.chatons.org/), ou en achetant de l'espace sur des serveurs de son choix. Je ne donne pas vraiment de raison à mon choix de Proton (je l'ai fait sans vraiment réflechir, c'était une décision que j'ai prise au tout début de mon parcours). Un désavantage certain est que la version gratuite ne permet pas de recevoir des mails sous Thunderbird (mais la version payante de base est abordable, et le service est de qualité). L'entreprise n'est aussi peut-être pas la plus éthique, j'ai pu voir des critiques ici et là sur sa politique. Aussi, Proton est peut-être un des seuls services que j'utilise qui dérogent à la règle "do one thing but do it well" (ils proposent un agenda, un mail, et un drive, ainsi qu'un gestionnaire de mot de passe et un VPN que je n'utilise pas), mais c'est une solution de facilité que j'ai trouvé en attendant de faire mieux. Un avantage (et je crois que Tuta le permet aussi) est que l'on peut régler une redirection des mails Gmail vers Proton, ce qui aide à se détacher de Google pendant les 6 mois de prospection des comptes associés à gmail. Il est aussi possible d'avoir plusieurs alias, menant à la même adresse, ce qui est assez pratique pour se prémunir du spam. + +Sur le point de l'auto-hébergement, ou de l'usage d'un serveur personnel distant, je ne m'y suis pas encore attelé, mais c'est en projet car cela ouvre beaucoup de possibilités, notamment d'héberger un cloud par exemple. +#### En profiter pour changer ses mots de passe +Modifier son adresse mail sur ses comptes, c'est aussi l'occasion rêvée de changer ses mots de passe ! Le mauvais usage est généralement d'utiliser des mots de passe identiques, ou des "patterns" faciles à retenir pour se souvenir de tous ses mots de passe. C'est un moyen très facile pour les hackers de récupérer nos accès quand nos identifiants fuitent sur un site ou un autre, aussi un mot de passe fort et différent pour chaque compte est essentiel. Mais c'est embêtant, et la solution du calepin de mots de passe est une fausse bonne idée (il peut-être perdu, volé, etc...). + +J'utilise un gestionnaire de mot de passe sécurisé par un mot de passe dit "maître", c'est-à-dire un mot de passe long mais unique, qui permet de débloquer tous les autres. Ma préférence s'est portée sur BitWarden, car il permet de stocker en local et de manière chiffrée tous ses mots de passe, et propose le remplissage automatique sur internet (sous réserve de s'être connecté à l'aide de son mot de passe maître précédemment). Il suffit alors de laisser bitwarden générer de nouveaux mot de passe forts (environ 14-16 caractères, avec majuscules, chiffres et caractères spéciaux), avoir un mot de passe maître unique en tête (25 caractères environ), et tout enregistrer sur le gestionnaire de mot de passes. Il existe évidemment des alternatives qui fournissent le même service, comme Proton qui propose son propre gestionnaire par exemple, ou encore des outils fonctionnant en local comme Keypass (connu pour être plus sécurisé que Bitwarden). + +## Changer de système d'exploitation +La plupart des téléphones sont aujourd'hui vendus nativement avec une version d'Android fonctionnant avec les services de Google (sans possibilité de les enlever). Certains d'entre eux sont même quasi-impossibles à "root" (c'est-à-dire prendre le contrôle pour installer un noyau de notre choix). Il s'agit donc de trouver les systèmes d'exploitation disponibles pour son téléphone. + +Les différentes versions existantes sur le marché sont généralement basées sur Android (les autres versions de Linux n'étant pas à la hauteur aujourd'hui): + +- postMarketOS (beaucoup de compatibilités, sert notamment au reconditionnement de vieux appareils) +- /e/OS (version très proche des android de google, mais sans la présence obligatoire des services google, beaucoup de compatibilités) +- LineageOS (version d'android complètement dégooglisée, servie avec une configuration minimale, assez compatible avec les appareils) +- GrapheneOS (uniquement compatible avec les Google Pixel, très sécurisé et performant) + +De manière générale, les téléphones les plus faciles à dégoogliser sont (étonnament) les Google Pixel. Les constructeurs alternatifs peuvent aussi être intéressants, par exemple FairPhone qui propose même des téléphones directement sous /e/OS à l'achat (ce qui évite des manipulations sensibles). + +Si le téléphone n'est pas directement livré avec le système d'exploitation, il faut chercher sur Internet, pour son téléphone en particulier, la compatibilité et la procédure à suivre pour le rooter. LineageOS par exemple propose un tutoriel pour chaque appareil supporté, à suivre du début à la fin pour installer un nouvel OS. De manière générale, il faudra utiliser un ordinateur, et suivre les procédures, qui impliqueront l'utilisation de "fastboot" et "adb", des outils dédiés pour la gestion d'Android par ligne de commande depuis un ordinateur. Comme souvent, "suivre le tutoriel" est la solution (le plus difficile est de trouver le tutoriel, puis de régler les problèmes à l'aide de reddit et stackoverflow). + +J'utilise personnellement LineageOS, avec Trébuchet comme gestionnaire d'affichage (servi nativement), et en suis très heureux pour le moment. Au niveau du noyau, les services de Google ne sont pas actifs, et la sécurité est gérée par un outil linux intégré à Lineage. Mon téléphone est aussi chiffré (ses données ne sont pas déchiffrables sans accès autorisé au téléphone). +## Sécuriser son accès à Internet +Pour sécuriser mes accès au réseau (et notamment éviter de donner mon adresse IP librement), j'utilise un VPN. Je le couple à un bloqueur de DNS qui permet d'empêcher les publicités intempestives. Ces services sont généralement payants, avec des fournisseurs assez variés. Au long de mes recherches, les meilleures possibilités que j'ai trouvées sont probablement Proton VPN, et Mullvad VPN. Personnellement, j'utilise Mullvad car c'est un des services les plus avancés et sûrs (création de compte sans identifiants tels que mail et téléphone, plusieurs méthodes de blocage des traqueurs de données, prix bloqué et assuré à 5€ par mois, garanties avérées de protections des données, bloqueurs de DNS intégrés). + +De plus, j'évite d'utiliser au maximum des navigateurs internet privés (Google Chrome et Microsoft Edge pour ne pas les citer). À la place il y a l'embarras du choix: Brave, Firefox (et ses nombreuses branches), Tor... Personnellement, après plusieurs essais j'utilise Firefox, avec AdBlock en extension. + +Enfin, j'évite aussi le moteur de recherche de Google (qui propose en abondance du contenu sponsorisé et des AIslop articles en boucle). Deux solutions ici, DuckDuckGo (qui a le mérite de fonctionner assez bien, et sur lequel il est possible de supprimer l'utilisation de l'IA pour la recherche) ou Searxng, qui propose différents fournisseurs d'agrégateurs de moteurs de recherche, avec des variations selon les instances (voir [instances](https://searx.space/)). + +Au delà, la sécurité est toujours un compromis. Les bonnes pratiques (ne pas installer depuis des dépôts inconnus, faire régulièrement ses mises à jour, n'autoriser que le strict nécessaire à notre usage de l'application) suffisent généralement à minimiser le risque. Cela ne fera jamais de risque zéro, l'essentiel est d'être un minimum au courant des risques encourus quand on installe quelque chose. + +## Trouver des alternatives +Maintenant que l'usage du téléphone est sécurisé (autant que possible, la sécurité parfaite n'existe pas), il s'agit de subvenir aux besoins restants, et donc d'installer les applications associées. Pour l'usage classique du téléphone, des services sont déjà présents sur Lineage (appels, sms, agenda, calculatrice, ...) avec des applications open source. Pour le reste, l'idée pour éviter Google est de ne pas passer par le Google Play Store. Il y a peu d'alternatives, mais elles existent: d'abord, le téléchargement direct des fichiers d'applications via apkmirror sur internet... ce qui n'est pas vraiment recommandé, notamment pour la gestion des mises à jour. Ensuite, l'utilisation de gestionnaires de dépôts, comme F-droid qui fournit des applications libre et open source (FOSS en anglais). Ensuite, pour ce qui n'existe pas sur F-droid, j'utilise Aurora Store, qui est une "copie" du play store sans nécessité de se connecter à un compte Google (mode "anonyme"). + +Quand j'installe des applications, je me pose les questions suivantes: + +- est-ce que l'application répond à un besoin essentiel pour moi ? +- est-ce qu'elle respecte la philosophie Unix (do one thing but do it well) ? +- est-elle libre et open source, ou existe-t-il une alternative libre et open source ? +- quel est le risque que je prend avec cette application ? +- ai-je un moyen de diminuer ce risque ? + +En considérant la réponse à chaque question, j'estime si le compromis entre les avantages et inconvénients apportés me convient. Cela m'évite d'installer "compulsivement" des applications qui ne vont faire qu'aspirer mon attention sans que je l'accepte vraiment (ou pas, mais on se sépare difficilement des addictions implantées par des années d'usage des services des GAFAM). + +Sur l'évaluation des risques, je pars généralement du principe que F-droid me donne les informations sur les risques (c'est en général écrit dans la description), et je compte ensuite sur Aurora pour détecter les différents traqueurs présents dans mes applications. + +Sur la diminution des risques, j'utilise un 3ème outil (après F-droid et Aurora Store): ReVanced. C'est un outil de "patch" sur les applications, qui va venir changer le code source pour éviter certains services, traqueurs, gestionnaires de pubs... C'est en même temps un bénéfice (j'évite des traqueurs des GAFAM dans les applications supportées) et en même temps un risque (toucher au code source via des apk en ligne peut toujours comporter des risques de virus). + +Une note importante: toutes les applications ne fonctionnent pas sans les services de Google. Pour ne pas la citer, "l'identité numérique" (je la cite quand même), service de l'état français, ne fonctionne pas sans services de Google. Il me semble qu'il existe des alternatives libres, comme microG, mais je ne me suis pas encore penché sur ça. + +## Prendre conscience des risques restants +**Il n'y a pas d'usage sans risque**, l'essentiel est ici d'être conscient des failles (et d'agir en conséquences). Je sais par exemple que Facebook Messenger, Instagram, mes applications de banque, ... possèdent des traqueurs connus (Google advertisment par exemple). J'essaie donc au maximum de diminuer progressivement mon empreinte numérique sur ces applications, et si pas possible au moins à sécuriser au maximum mon usage de ces dernières. + +Un point sur lequel je me pose aussi des questions (avec peu de réponses) est sur la sécurité des applications. Je ne sais pas vraiment quand je peux me fier ou non à telle ou telle application. Je n'ai toujours pas de réponse sur ça. +## Liste de mes alternatives + +![appchange](~/dotfiles_arch/tutoriels/appchange.svg) + + + +## Ressources + +[Subreddit degoogle](https://www.reddit.com/r/degoogle/wiki/index/) diff --git a/config/Typora/draftsRecover/2026-5-4 degoogle 125049.md b/config/Typora/draftsRecover/2026-5-4 degoogle 125049.md new file mode 100644 index 0000000..8532d72 --- /dev/null +++ b/config/Typora/draftsRecover/2026-5-4 degoogle 125049.md @@ -0,0 +1,128 @@ +# Introduction + +Ce tutoriel est un résumé de mes réflexions personnelles tout au long de ma démarche de **ré-appropriation de mes moyens de production individuels**, à savoir mon ordinateur et mon téléphone portable. Cette démarche est issue d'une frustration vis-à-vis des outils proposés par Google et Microsoft, qui sont tout sauf conviviaux, et surtout totalement opaques dans leur fonctionnement du point de vue de l'usager. Je suis persuadé que de nombreux chemins mènent à cette même frustration, que ce soit par une volonté de maîtriser ses outils (sur les aspects de réparabilité, convivialité, etc...), de sécuriser ses données personnelles, de se libérer des réseaux et outils hégémoniques des GAFAM, de diminuer ses dépenses en moyens technologiques ou dans l'obsolescence des outils numériques, de soutenir les initiatives du monde du libre et de l'open source, etc... + +L'idée ici est donc de proposer les moyens que j'ai sélectionné pour me libérer des GAFAM autant que possible. J'y discute les avantages ainsi que les limites de cette transition. J'y expose aussi quelques unes des méthodes (perfectibles) que j'ai mis en place, la démarche intellectuelle (personnelle) que j'ai suivi et des pistes destinées à passer le pas (ce qui peut être rapidement vertigineux). Je n'aime pas proposer une "checklist" à suivre, cela n'est pas un guide pas-à-pas, mais plutôt le moyen de suivre un certain cheminement de pensée et comprendre les choix que j'ai fait. + +Je ne prétend pas être un fin connaisseur des architectures numériques (disons que je me débrouille assez pour mes besoins), à vous de vérifier mes dires (et éventuellement me faire des retours). Cela représente deux années de travail et de réflexion (et pas mal de galères :p). C'est un travail continu, qui évolue constamment à l'usage (et qui est donc très personnel). J'espère donner des pistes pour que chacun.e puisse plus facilement s'émanciper. +# Dégoogliser son téléphone +## Quitter Google (et Microsoft, etc...) +Il y a plusieurs raisons de quitter Google. Si d'abord j'avais entamé ma transition vers Linux par frustration vis-à-vis de Microsoft Windows, j'ai passé le pas pour Google pour d'autres raisons. Non pas que je trouvais l'interface conviviale (au contraire), mais car cela impliquait des changements dans mon usage plus profonds et plus risqués par rapport à mes accès à différents réseaux. L'élément déclencheur a plutôt été lié à la protection de mes données personnelles, dans une période où j'avais particulièrement besoin d'avoir confiance en ce que je partage ou non à des services tiers. + +L'adage "si c'est gratuit c'est que c'est toi le produit" s'applique sans aucun souci à Google (et aux GAFAM en général). Proposer des services gratuits, et se rémunérer en fournissant les données des utilisateurices récoltées à l'intention d'agences publicitaires et/ou d'opinion. C'est un moyen central de renouvellement de l'hégémonie de la société de consommation, qui permet de modeler de manière adaptative les besoins des potentiels consommateurices. Cette méthode de surveillance et de profilage généralisée est un danger pour la démocratie, notamment à l'ère ou les multinationales qui détiennent nos données détiennent un monopole et militent activement pour le maintien et le développement des oppressions de classe, coloniales, patriarcales, etc... Les patrons de la tech américaine (qui sont les fournisseurs principaux des services dans le monde entier), ne se cachent même plus dans leur eugénisme, leur racisme décomplexé et leurs haine du peuple et des travailleureuses. Les données récoltées servent directement l'appareil d'État, OpenAI ayant montré en France que des requêtes ChatGPT pouvaient mener à une interpellation musclée par la police française. De même, les milices ICE aux États Unis se servent abondamment dans les données leurs permettant de cibler et emprisonner arbitrairement des personnes sur le sol américain. À tout cela, j'ai beaucoup entendu "je n'ai rien à cacher, je ne vois pas le problème personnellement"... demain, cela deviendra peut-être un besoin vital de ne pas être traqué par nos appareils (cf [source](https://www.bfmtv.com/tech/vie-numerique/aux-etats-unis-l-ice-a-envoye-des-centaines-de-demandes-aux-gafam-jusqu-alors-reservees-a-des-enquetes-criminelles-afin-d-identifier-de-simples-opposants-a-la-politique-de-donald-trump_AN-202602160440.html)). + +Mais au delà de ces préoccupations politiques, c'est aussi une émancipation. J'étais personnellement frustré de voir mon espace disponible lentement se remplir, jusqu'à saturer la mémoire de mon appareil, et voir les applications impossibles à désinstaller venant avec les services de Google. J'avais une 15aine d'applications sur mon écran d'accueil que je n'utilisais pas, qui récupéraient pourtant mes données, et que je ne pouvais pas supprimer ou bloquer. Je ne maîtrisais pas la sécurité de mon appareil, tout étant délégué à des services en lesquels je n'avais pas confiance (dois-je vraiment me protéger de potentiels virus me volant mes données, quand les services censés me protéger transmettent déjà mes données à Google ?). En quittant Google, je peux sécuriser mon téléphone en connaissant les informations qui rentrent et sortent de mon appareil, et en ayant une idée (même vague) d'où elles sont envoyées. Je peux aussi décider d'empêcher certains services d'agir (même si cela implique un fonctionnement moins performant). + +Enfin, un dernier point porte sur les politiques récentes de Google vis-à-vis des applications libres et open source. D'ici septembre 2026, installer des applications libres et open source dont l'identité des développeureuses ne serait pas validée par Google deviendra impossible sur les appareils utilisant Google. Un moyen pour le géant de la tech d'écraser toute concurrence à son modèle économique. J'utilisais déjà des applications provenant du dépôt FossDroid, principal concerné par les restrictions, et c'est l'événement qui a déclenché le passage à l'acte de dégooglisation (Cf [source](https://keepandroidopen.org/en/)). + +### Définir ses besoins +Le processus de dégooglisation est plus qu'un simple changement de système d'exploitation. Il s'agit plutôt de changer de paradigme, hors du cadre imposé par Google sur l'ensemble des appareils. Et donc, il faut aussi réflechir aussi à quel cadre nous impose Google. + +Ce cadre, c'est celui de la **création de besoin par la disponibilité du produit**. D'abord, à l'aide d'applications imposées (la suite Google, comme Youtube, Google Drive, etc...): le produit existe sur mon appareil, c'est bien qu'il doit répondre à un besoin que j'ai. Ensuite, par la construction des applications (notamment l'App Store), qui nous proposent des fonctionnalités à "explorer", pour se rendre compte que nous avions terriblement besoin de cet outil que nous n'avions jamais demandé auparavant. Ce cadre constitue la structure, basée sur l'addiction à la nouveauté permanente et à la mise sous dépendance d'usage de chaque nouvelle application. Cela crée une décorrelation entre le besoin réel et le produit de consommation, qui est néfaste autant pour le consommateur que pour les développeureuses, qui ne créent plus pour répondre à des besoins d'usagers mais pour les rendre addict, et par là accroître le capital des actionnaires. Sortir de ce paradigme, c'est faire la démarche inverse: définir ses besoins, puis évaluer les produits existants pouvant y répondre (et créer son outil s'il n'existe pas). C'est aussi s'interroger sur le coût (humain, écologique, financier, sociétal) des outils et les risques que j'encours (sur ma vie privée, sur les conséquences possibles sur ma santé...), à mettre sur la balance face à notre sentiment de besoin (est-ce que cela vaut le coût de subvenir à ce besoin, est-il essentiel ?). + +Pour changer de manière d'aborder les choses, suivre la philosophie UNIX peut-être intéressante. Elle se formule généralement avec la phrase "do one thing and do it well", c'est-à-dire qu'une bonne application est une application mono-tâche qui accomplit ce qu'on lui demande de la manière dont on lui demande. C'est une philosophie largement répandue dans le monde de l'open source et du libre, qui permet souvent des applications très efficaces dans leur domaine (pas forcément mais la spécialisation aide souvent). + +Ainsi, en réfléchissant à tous ces axes (risques, coût, besoins, nécessité), j'ai pu définir mes besoins. Évidemment, ils sont amenés à évoluer, et surtout sont modelés par mes usages passés dans le cadre du paradigme précédent et de la société qui agit sur moi: ais-je vraiment besoin d'Instagram ? Je sais que mon besoin de réseaux sociaux comme Instagram est plus une addiction, et tendra peut-être à diminuer (jusqu'à être compensée par le risque de profilage que l'application représente) si j'arrive à trouver l'énergie de me sevrer... et dans ce cas se transformera, peut-être vers des applications semblables, libres et plus saines dans leur construction. Ces besoins sont donc: + +- pouvoir communiquer à travers mes réseaux (téléphone, messageries, réseaux sociaux, mails, gestionnaire de contacts) +- avoir accès à des services essentiels pour moi (streaming musical et vidéo, accès à mes comptes bancaires, aux applications de transports, appareil photo...) +- avoir un accès sécurisé à internet (sans traqueurs, sans pubs) +- avoir un appareil sécurisé me permettant la double authentification (2FA) +- pouvoir couper les services quand je ne les utilise pas (autant au niveau software que hardware, en particulier micro, caméra, localisation, internet) +- minimiser les données que je transmet si elles ne sont pas utiles ou sécurisées suffisamment pour que j'accorde ma confiance au service qui les détient +- limiter mon exposition aux publicités ciblées +- minimiser le risque de fuites de données personnelles + +Pour subvenir à ces besoins, j'ai identifié plusieurs pistes: + +- adopter un comportement en ligne responsable et éclairé + - continuer à suivre les bases, à savoir éviter le phishing, les sites internet non sécurisés et inconnus, éviter de télécharger des fichiers sur internet les yeux fermés, refuser les cookies sur les sites, ... + - utiliser des mots de passe forts (et un gestionnaire de mot de passe en lequel j'ai confiance) + - utiliser au maximum un VPN au quotidien + - m'informer sur les risques liés aux fuites de données (par exemple grâce à [la Quadrature du Net](https://www.laquadrature.net/) mais aussi d'autres ressources en ligne aussi diverses que variées +- changer mon téléphone pour une marque qui me permet de quitter google (FairPhone en l'occurence) +- changer de système d'exploitation pour une version sans Google +- quitter un à un les services de Google, et passer tous mes comptes essentiels sur une nouvelle adresse mail, ou demander la suppression des données si le service est non-essentiel +- adopter la philosophie UNIX pour les applications alternatives que j'adopte ("do one thing and do it well") + +Un sacré travail en perspective ! + +### Le plus difficile : lister ses comptes associés à Google +S'il y a une chose à faire en premier (car c'est LONG), c'est bien de préparer la suppression de son compte google (et donc la fermeture de son adresse Gmail). Le plus simple (pour commencer par le commencement), c'est de récupérer ses données. Une part de données (qui ne seront probablement jamais utiles) peut être récupérée via Google Takeout. Cela peut notamment être intéressant pour transférer ses abonnements youtubes sous un nouveau service en local (par exemple PipePipe ou NewPipe), ou encore exporter et archiver ses mails au format Mbox en local, pour plus tard pouvoir y accéder via Thunderbird par exemple. Dès lors que l'ensemble des mails sont sauvegardés, ils peuvent être supprimés sur gmail (intéressant quand on sait que Google et Microsoft se préparent à l'accès total de tous nos mails pour leurs services d'IA à des fins d'entraînement) et enfin enregistrer les contacts sauvegardés sur notre compte google. Il s'agit ensuite de vider les différents cloud (Google Drive, ou autres cloud détenus par les GAFAM), pour stocker tout en local. + +Cette phase est relativement longue, car Google détient beaucoup de données, et il serait malvenu de supprimer son compte avant de découvrir que nos contacts sont enregistrés chez eux et les perdre intégralement. + +Ensuite, l'étape la plus longue est celle consistant à retrouver toutes les occurences de mon adresse gmail sur les comptes que j'ai pu créer. C'est mon problème principal encore aujourd'hui, car j'ai une adresse gmail depuis 2013, à laquelle sont liés 100% des comptes que j'ai créé en 13 ans. Je n'ai évidemment jamais noté les comptes que je créais. J'attend, pour supprimer mon compte google, de ne plus avoir peur de perdre des services essentiels qui seraient dépendants de mon accès à mon adresse gmail. J'ai trouvé quelques techniques pour aider à retrouver ses différents comptes: + +- un premier moyen est de vérifier les services connectés à notre compte google (via internet, gérer mon compte google - Applis et services tiers). +- ensuite, on peut aussi regarder les mails automatiques de création de compte reçus sur notre adresse gmail (sauf si on les a, comme moi, supprimés au fur et à mesure). +- enfin, on peut définir une période (6 mois par exemple) où on conservera l'adresse, et où à chaque utilisation d'un compte lié à gmail, on changera l'adresse liée. Au bout de 6 mois, on peut imaginer que les services oubliés ne sont pas à ce point essentiels. + +Une attention particulière peut être portée sur le changement d'adresse mail pour les services de l'État, qui peuvent devenir très embêtants si on perd l'adresse mail en question, surtout sachant que l'Identité numérique (qui permet de se connecter à tous les services de l'État) ne fonctionne pas sans les services de Google. Aussi, pour réduire la masse de comptes à modifier, un moyen peut aussi être de réfléchir encore une fois aux services dont j'ai réellement besoin (ce qui réduit drastiquement la liste, et surtout permet de trouver rapidement les services concernés). Ce qui ne veut pas dire que je vais oublier simplement les comptes restants, car mon objectif est aussi de supprimer ces comptes, ou si cela n'est pas possible facilement demander la suppression de mes données personnelles (merci les RGPD !). + +Un problème majeur peut subsister, notamment si l'usage de services de google est nécessaire dans le cadre des études, du travail, de la famille... Pour les deux premiers, il est toujours possible de créer un nouveau compte Google, sans données permettant notre identification, et strictement utilisé dans le cadre du travail. Pour la famille... à vous de les convaincre de quitter aussi les GAFAM (l'occasion aussi de montrer à quel point l'accessibilité peut-être simplifié sans les innombrables services inutiles de Google). +#### Remplacer son adresse gmail +Pour pouvoir changer ses différents comptes liés à gmail, il faut évidemment trouver un service d'hébergement d'adresse mail alternatif. Dans ce cas, j'utilise ProtonMail (j'y paye l'abonnement de base), un service Suisse sécurisé. Il existe de nombreux fournisseurs similaires, comme TutaMail, FastMail... Reste aussi la possibilité d'auto-héberger son service de mail, ou de passer par un [Chaton](https://www.chatons.org/), ou en achetant de l'espace sur des serveurs de son choix. Je ne donne pas vraiment de raison à mon choix de Proton (je l'ai fait sans vraiment réflechir, c'était une décision que j'ai prise au tout début de mon parcours). Un désavantage certain est que la version gratuite ne permet pas de recevoir des mails sous Thunderbird (mais la version payante de base est abordable, et le service est de qualité). L'entreprise n'est aussi peut-être pas la plus éthique, j'ai pu voir des critiques ici et là sur sa politique. Aussi, Proton est peut-être un des seuls services que j'utilise qui dérogent à la règle "do one thing but do it well" (ils proposent un agenda, un mail, et un drive, ainsi qu'un gestionnaire de mot de passe et un VPN que je n'utilise pas), mais c'est une solution de facilité que j'ai trouvé en attendant de faire mieux. Un avantage (et je crois que Tuta le permet aussi) est que l'on peut régler une redirection des mails Gmail vers Proton, ce qui aide à se détacher de Google pendant les 6 mois de prospection des comptes associés à gmail. Il est aussi possible d'avoir plusieurs alias, menant à la même adresse, ce qui est assez pratique pour se prémunir du spam. + +Sur le point de l'auto-hébergement, ou de l'usage d'un serveur personnel distant, je ne m'y suis pas encore attelé, mais c'est en projet car cela ouvre beaucoup de possibilités, notamment d'héberger un cloud par exemple. +#### En profiter pour changer ses mots de passe +Modifier son adresse mail sur ses comptes, c'est aussi l'occasion rêvée de changer ses mots de passe ! Le mauvais usage est généralement d'utiliser des mots de passe identiques, ou des "patterns" faciles à retenir pour se souvenir de tous ses mots de passe. C'est un moyen très facile pour les hackers de récupérer nos accès quand nos identifiants fuitent sur un site ou un autre, aussi un mot de passe fort et différent pour chaque compte est essentiel. Mais c'est embêtant, et la solution du calepin de mots de passe est une fausse bonne idée (il peut-être perdu, volé, etc...). + +J'utilise un gestionnaire de mot de passe sécurisé par un mot de passe dit "maître", c'est-à-dire un mot de passe long mais unique, qui permet de débloquer tous les autres. Ma préférence s'est portée sur BitWarden, car il permet de stocker en local et de manière chiffrée tous ses mots de passe, et propose le remplissage automatique sur internet (sous réserve de s'être connecté à l'aide de son mot de passe maître précédemment). Il suffit alors de laisser bitwarden générer de nouveaux mot de passe forts (environ 14-16 caractères, avec majuscules, chiffres et caractères spéciaux), avoir un mot de passe maître unique en tête (25 caractères environ), et tout enregistrer sur le gestionnaire de mot de passes. Il existe évidemment des alternatives qui fournissent le même service, comme Proton qui propose son propre gestionnaire par exemple, ou encore des outils fonctionnant en local comme Keypass (connu pour être plus sécurisé que Bitwarden). + +## Changer de système d'exploitation +La plupart des téléphones sont aujourd'hui vendus nativement avec une version d'Android fonctionnant avec les services de Google (sans possibilité de les enlever). Certains d'entre eux sont même quasi-impossibles à "root" (c'est-à-dire prendre le contrôle pour installer un noyau de notre choix). Il s'agit donc de trouver les systèmes d'exploitation disponibles pour son téléphone. + +Les différentes versions existantes sur le marché sont généralement basées sur Android (les autres versions de Linux n'étant pas à la hauteur aujourd'hui): + +- postMarketOS (beaucoup de compatibilités, sert notamment au reconditionnement de vieux appareils) +- /e/OS (version très proche des android de google, mais sans la présence obligatoire des services google, beaucoup de compatibilités) +- LineageOS (version d'android complètement dégooglisée, servie avec une configuration minimale, assez compatible avec les appareils) +- GrapheneOS (uniquement compatible avec les Google Pixel, très sécurisé et performant) + +De manière générale, les téléphones les plus faciles à dégoogliser sont (étonnament) les Google Pixel. Les constructeurs alternatifs peuvent aussi être intéressants, par exemple FairPhone qui propose même des téléphones directement sous /e/OS à l'achat (ce qui évite des manipulations sensibles). + +Si le téléphone n'est pas directement livré avec le système d'exploitation, il faut chercher sur Internet, pour son téléphone en particulier, la compatibilité et la procédure à suivre pour le rooter. LineageOS par exemple propose un tutoriel pour chaque appareil supporté, à suivre du début à la fin pour installer un nouvel OS. De manière générale, il faudra utiliser un ordinateur, et suivre les procédures, qui impliqueront l'utilisation de "fastboot" et "adb", des outils dédiés pour la gestion d'Android par ligne de commande depuis un ordinateur. Comme souvent, "suivre le tutoriel" est la solution (le plus difficile est de trouver le tutoriel, puis de régler les problèmes à l'aide de reddit et stackoverflow). + +J'utilise personnellement LineageOS, avec Trébuchet comme gestionnaire d'affichage (servi nativement), et en suis très heureux pour le moment. Au niveau du noyau, les services de Google ne sont pas actifs, et la sécurité est gérée par un outil linux intégré à Lineage. Mon téléphone est aussi chiffré (ses données ne sont pas déchiffrables sans accès autorisé au téléphone). +## Sécuriser son accès à Internet +Pour sécuriser mes accès au réseau (et notamment éviter de donner mon adresse IP librement), j'utilise un VPN. Je le couple à un bloqueur de DNS qui permet d'empêcher les publicités intempestives. Ces services sont généralement payants, avec des fournisseurs assez variés. Au long de mes recherches, les meilleures possibilités que j'ai trouvées sont probablement Proton VPN, et Mullvad VPN. Personnellement, j'utilise Mullvad car c'est un des services les plus avancés et sûrs (création de compte sans identifiants tels que mail et téléphone, plusieurs méthodes de blocage des traqueurs de données, prix bloqué et assuré à 5€ par mois, garanties avérées de protections des données, bloqueurs de DNS intégrés). + +De plus, j'évite d'utiliser au maximum des navigateurs internet privés (Google Chrome et Microsoft Edge pour ne pas les citer). À la place il y a l'embarras du choix: Brave, Firefox (et ses nombreuses branches), Tor... Personnellement, après plusieurs essais j'utilise Firefox, avec AdBlock en extension. + +Enfin, j'évite aussi le moteur de recherche de Google (qui propose en abondance du contenu sponsorisé et des AIslop articles en boucle). Deux solutions ici, DuckDuckGo (qui a le mérite de fonctionner assez bien, et sur lequel il est possible de supprimer l'utilisation de l'IA pour la recherche) ou Searxng, qui propose différents fournisseurs d'agrégateurs de moteurs de recherche, avec des variations selon les instances (voir [instances](https://searx.space/)). + +Au delà, la sécurité est toujours un compromis. Les bonnes pratiques (ne pas installer depuis des dépôts inconnus, faire régulièrement ses mises à jour, n'autoriser que le strict nécessaire à notre usage de l'application) suffisent généralement à minimiser le risque. Cela ne fera jamais de risque zéro, l'essentiel est d'être un minimum au courant des risques encourus quand on installe quelque chose. + +## Trouver des alternatives +Maintenant que l'usage du téléphone est sécurisé (autant que possible, la sécurité parfaite n'existe pas), il s'agit de subvenir aux besoins restants, et donc d'installer les applications associées. Pour l'usage classique du téléphone, des services sont déjà présents sur Lineage (appels, sms, agenda, calculatrice, ...) avec des applications open source. Pour le reste, l'idée pour éviter Google est de ne pas passer par le Google Play Store. Il y a peu d'alternatives, mais elles existent: d'abord, le téléchargement direct des fichiers d'applications via apkmirror sur internet... ce qui n'est pas vraiment recommandé, notamment pour la gestion des mises à jour. Ensuite, l'utilisation de gestionnaires de dépôts, comme F-droid qui fournit des applications libre et open source (FOSS en anglais). Ensuite, pour ce qui n'existe pas sur F-droid, j'utilise Aurora Store, qui est une "copie" du play store sans nécessité de se connecter à un compte Google (mode "anonyme"). + +Quand j'installe des applications, je me pose les questions suivantes: + +- est-ce que l'application répond à un besoin essentiel pour moi ? +- est-ce qu'elle respecte la philosophie Unix (do one thing but do it well) ? +- est-elle libre et open source, ou existe-t-il une alternative libre et open source ? +- quel est le risque que je prend avec cette application ? +- ai-je un moyen de diminuer ce risque ? + +En considérant la réponse à chaque question, j'estime si le compromis entre les avantages et inconvénients apportés me convient. Cela m'évite d'installer "compulsivement" des applications qui ne vont faire qu'aspirer mon attention sans que je l'accepte vraiment (ou pas, mais on se sépare difficilement des addictions implantées par des années d'usage des services des GAFAM). + +Sur l'évaluation des risques, je pars généralement du principe que F-droid me donne les informations sur les risques (c'est en général écrit dans la description), et je compte ensuite sur Aurora pour détecter les différents traqueurs présents dans mes applications. + +Sur la diminution des risques, j'utilise un 3ème outil (après F-droid et Aurora Store): ReVanced. C'est un outil de "patch" sur les applications, qui va venir changer le code source pour éviter certains services, traqueurs, gestionnaires de pubs... C'est en même temps un bénéfice (j'évite des traqueurs des GAFAM dans les applications supportées) et en même temps un risque (toucher au code source via des apk en ligne peut toujours comporter des risques de virus). + +Une note importante: toutes les applications ne fonctionnent pas sans les services de Google. Pour ne pas la citer, "l'identité numérique" (je la cite quand même), service de l'état français, ne fonctionne pas sans services de Google. Il me semble qu'il existe des alternatives libres, comme microG, mais je ne me suis pas encore penché sur ça. + +## Prendre conscience des risques restants +**Il n'y a pas d'usage sans risque**, l'essentiel est ici d'être conscient des failles (et d'agir en conséquences). Je sais par exemple que Facebook Messenger, Instagram, mes applications de banque, ... possèdent des traqueurs connus (Google advertisment par exemple). J'essaie donc au maximum de diminuer progressivement mon empreinte numérique sur ces applications, et si pas possible au moins à sécuriser au maximum mon usage de ces dernières. + +Un point sur lequel je me pose aussi des questions (avec peu de réponses) est sur la sécurité des applications. Je ne sais pas vraiment quand je peux me fier ou non à telle ou telle application. Je n'ai toujours pas de réponse sur ça. +## Liste de mes alternatives + +![appchange](~/dotfiles_arch/tutoriels/appchange.svg) + + + +## Ressources + +[Subreddit degoogle](https://www.reddit.com/r/degoogle/wiki/index/) diff --git a/config/Typora/draftsRecover/2026-5-4 degoogle 125054.md b/config/Typora/draftsRecover/2026-5-4 degoogle 125054.md new file mode 100644 index 0000000..73db756 --- /dev/null +++ b/config/Typora/draftsRecover/2026-5-4 degoogle 125054.md @@ -0,0 +1,128 @@ +# Introduction + +Ce tutoriel est un résumé de mes réflexions personnelles tout au long de ma démarche de **ré-appropriation de mes moyens de production individuels**, à savoir mon ordinateur et mon téléphone portable. Cette démarche est issue d'une frustration vis-à-vis des outils proposés par Google et Microsoft, qui sont tout sauf conviviaux, et surtout totalement opaques dans leur fonctionnement du point de vue de l'usager. Je suis persuadé que de nombreux chemins mènent à cette même frustration, que ce soit par une volonté de maîtriser ses outils (sur les aspects de réparabilité, convivialité, etc...), de sécuriser ses données personnelles, de se libérer des réseaux et outils hégémoniques des GAFAM, de diminuer ses dépenses en moyens technologiques ou dans l'obsolescence des outils numériques, de soutenir les initiatives du monde du libre et de l'open source, etc... + +L'idée ici est donc de proposer les moyens que j'ai sélectionné pour me libérer des GAFAM autant que possible. J'y discute les avantages ainsi que les limites de cette transition. J'y expose aussi quelques unes des méthodes (perfectibles) que j'ai mis en place, la démarche intellectuelle (personnelle) que j'ai suivi et des pistes destinées à passer le pas (ce qui peut être rapidement vertigineux). Je n'aime pas proposer une "checklist" à suivre, cela n'est pas un guide pas-à-pas, mais plutôt le moyen de suivre un certain cheminement de pensée et comprendre les choix que j'ai fait. + +Je ne prétend pas être un fin connaisseur des architectures numériques (disons que je me débrouille assez pour mes besoins), à vous de vérifier mes dires (et éventuellement me faire des retours). Cela représente deux années de travail et de réflexion (et pas mal de galères :p). C'est un travail continu, qui évolue constamment à l'usage (et qui est donc très personnel). J'espère donner des pistes pour que chacun.e puisse plus facilement s'émanciper. +# Dégoogliser son téléphone +## Quitter Google (et Microsoft, etc...) +Il y a plusieurs raisons de quitter Google. Si d'abord j'avais entamé ma transition vers Linux par frustration vis-à-vis de Microsoft Windows, j'ai passé le pas pour Google pour d'autres raisons. Non pas que je trouvais l'interface conviviale (au contraire), mais car cela impliquait des changements dans mon usage plus profonds et plus risqués par rapport à mes accès à différents réseaux. L'élément déclencheur a plutôt été lié à la protection de mes données personnelles, dans une période où j'avais particulièrement besoin d'avoir confiance en ce que je partage ou non à des services tiers. + +L'adage "si c'est gratuit c'est que c'est toi le produit" s'applique sans aucun souci à Google (et aux GAFAM en général). Proposer des services gratuits, et se rémunérer en fournissant les données des utilisateurices récoltées à l'intention d'agences publicitaires et/ou d'opinion. C'est un moyen central de renouvellement de l'hégémonie de la société de consommation, qui permet de modeler de manière adaptative les besoins des potentiels consommateurices. Cette méthode de surveillance et de profilage généralisée est un danger pour la démocratie, notamment à l'ère ou les multinationales qui détiennent nos données détiennent un monopole et militent activement pour le maintien et le développement des oppressions de classe, coloniales, patriarcales, etc... Les patrons de la tech américaine (qui sont les fournisseurs principaux des services dans le monde entier), ne se cachent même plus dans leur eugénisme, leur racisme décomplexé et leurs haine du peuple et des travailleureuses. Les données récoltées servent directement l'appareil d'État, OpenAI ayant montré en France que des requêtes ChatGPT pouvaient mener à une interpellation musclée par la police française. De même, les milices ICE aux États Unis se servent abondamment dans les données leurs permettant de cibler et emprisonner arbitrairement des personnes sur le sol américain. À tout cela, j'ai beaucoup entendu "je n'ai rien à cacher, je ne vois pas le problème personnellement"... demain, cela deviendra peut-être un besoin vital de ne pas être traqué par nos appareils (cf [source](https://www.bfmtv.com/tech/vie-numerique/aux-etats-unis-l-ice-a-envoye-des-centaines-de-demandes-aux-gafam-jusqu-alors-reservees-a-des-enquetes-criminelles-afin-d-identifier-de-simples-opposants-a-la-politique-de-donald-trump_AN-202602160440.html)). + +Mais au delà de ces préoccupations politiques, c'est aussi une émancipation. J'étais personnellement frustré de voir mon espace disponible lentement se remplir, jusqu'à saturer la mémoire de mon appareil, et voir les applications impossibles à désinstaller venant avec les services de Google. J'avais une 15aine d'applications sur mon écran d'accueil que je n'utilisais pas, qui récupéraient pourtant mes données, et que je ne pouvais pas supprimer ou bloquer. Je ne maîtrisais pas la sécurité de mon appareil, tout étant délégué à des services en lesquels je n'avais pas confiance (dois-je vraiment me protéger de potentiels virus me volant mes données, quand les services censés me protéger transmettent déjà mes données à Google ?). En quittant Google, je peux sécuriser mon téléphone en connaissant les informations qui rentrent et sortent de mon appareil, et en ayant une idée (même vague) d'où elles sont envoyées. Je peux aussi décider d'empêcher certains services d'agir (même si cela implique un fonctionnement moins performant). + +Enfin, un dernier point porte sur les politiques récentes de Google vis-à-vis des applications libres et open source. D'ici septembre 2026, installer des applications libres et open source dont l'identité des développeureuses ne serait pas validée par Google deviendra impossible sur les appareils utilisant Google. Un moyen pour le géant de la tech d'écraser toute concurrence à son modèle économique. J'utilisais déjà des applications provenant du dépôt FossDroid, principal concerné par les restrictions, et c'est l'événement qui a déclenché le passage à l'acte de dégooglisation (Cf [source](https://keepandroidopen.org/en/)). + +### Définir ses besoins +Le processus de dégooglisation est plus qu'un simple changement de système d'exploitation. Il s'agit plutôt de changer de paradigme, hors du cadre imposé par Google sur l'ensemble des appareils. Et donc, il faut aussi réflechir aussi à quel cadre nous impose Google. + +Ce cadre, c'est celui de la **création de besoin par la disponibilité du produit**. D'abord, à l'aide d'applications imposées (la suite Google, comme Youtube, Google Drive, etc...): le produit existe sur mon appareil, c'est bien qu'il doit répondre à un besoin que j'ai. Ensuite, par la construction des applications (notamment l'App Store), qui nous proposent des fonctionnalités à "explorer", pour se rendre compte que nous avions terriblement besoin de cet outil que nous n'avions jamais demandé auparavant. Ce cadre constitue la structure, basée sur l'addiction à la nouveauté permanente et à la mise sous dépendance d'usage de chaque nouvelle application. Cela crée une décorrelation entre le besoin réel et le produit de consommation, qui est néfaste autant pour le consommateur que pour les développeureuses, qui ne créent plus pour répondre à des besoins d'usagers mais pour les rendre addict, et par là accroître le capital des actionnaires. Sortir de ce paradigme, c'est faire la démarche inverse: définir ses besoins, puis évaluer les produits existants pouvant y répondre (et créer son outil s'il n'existe pas). C'est aussi s'interroger sur le coût (humain, écologique, financier, sociétal) des outils et les risques que j'encours (sur ma vie privée, sur les conséquences possibles sur ma santé...), à mettre sur la balance face à notre sentiment de besoin (est-ce que cela vaut le coût de subvenir à ce besoin, est-il essentiel ?). + +Pour changer de manière d'aborder les choses, suivre la philosophie UNIX peut-être intéressante. Elle se formule généralement avec la phrase "do one thing and do it well", c'est-à-dire qu'une bonne application est une application mono-tâche qui accomplit ce qu'on lui demande de la manière dont on lui demande. C'est une philosophie largement répandue dans le monde de l'open source et du libre, qui permet souvent des applications très efficaces dans leur domaine (pas forcément mais la spécialisation aide souvent). + +Ainsi, en réfléchissant à tous ces axes (risques, coût, besoins, nécessité), j'ai pu définir mes besoins. Évidemment, ils sont amenés à évoluer, et surtout sont modelés par mes usages passés dans le cadre du paradigme précédent et de la société qui agit sur moi: ais-je vraiment besoin d'Instagram ? Je sais que mon besoin de réseaux sociaux comme Instagram est plus une addiction, et tendra peut-être à diminuer (jusqu'à être compensée par le risque de profilage que l'application représente) si j'arrive à trouver l'énergie de me sevrer... et dans ce cas se transformera, peut-être vers des applications semblables, libres et plus saines dans leur construction. Ces besoins sont donc: + +- pouvoir communiquer à travers mes réseaux (téléphone, messageries, réseaux sociaux, mails, gestionnaire de contacts) +- avoir accès à des services essentiels pour moi (streaming musical et vidéo, accès à mes comptes bancaires, aux applications de transports, appareil photo...) +- avoir un accès sécurisé à internet (sans traqueurs, sans pubs) +- avoir un appareil sécurisé me permettant la double authentification (2FA) +- pouvoir couper les services quand je ne les utilise pas (autant au niveau software que hardware, en particulier micro, caméra, localisation, internet) +- minimiser les données que je transmet si elles ne sont pas utiles ou sécurisées suffisamment pour que j'accorde ma confiance au service qui les détient +- limiter mon exposition aux publicités ciblées +- minimiser le risque de fuites de données personnelles + +Pour subvenir à ces besoins, j'ai identifié plusieurs pistes: + +- adopter un comportement en ligne responsable et éclairé + - continuer à suivre les bases, à savoir éviter le phishing, les sites internet non sécurisés et inconnus, éviter de télécharger des fichiers sur internet les yeux fermés, refuser les cookies sur les sites, ... + - utiliser des mots de passe forts (et un gestionnaire de mot de passe en lequel j'ai confiance) + - utiliser au maximum un VPN au quotidien + - m'informer sur les risques liés aux fuites de données (par exemple grâce à [la Quadrature du Net](https://www.laquadrature.net/) mais aussi d'autres ressources en ligne aussi diverses que variées +- changer mon téléphone pour une marque qui me permet de quitter google (FairPhone en l'occurence) +- changer de système d'exploitation pour une version sans Google +- quitter un à un les services de Google, et passer tous mes comptes essentiels sur une nouvelle adresse mail, ou demander la suppression des données si le service est non-essentiel +- adopter la philosophie UNIX pour les applications alternatives que j'adopte ("do one thing and do it well") + +Un sacré travail en perspective ! + +### Le plus difficile : lister ses comptes associés à Google +S'il y a une chose à faire en premier (car c'est LONG), c'est bien de préparer la suppression de son compte google (et donc la fermeture de son adresse Gmail). Le plus simple (pour commencer par le commencement), c'est de récupérer ses données. Une part de données (qui ne seront probablement jamais utiles) peut être récupérée via Google Takeout. Cela peut notamment être intéressant pour transférer ses abonnements youtubes sous un nouveau service en local (par exemple PipePipe ou NewPipe), ou encore exporter et archiver ses mails au format Mbox en local, pour plus tard pouvoir y accéder via Thunderbird par exemple. Dès lors que l'ensemble des mails sont sauvegardés, ils peuvent être supprimés sur gmail (intéressant quand on sait que Google et Microsoft se préparent à l'accès total de tous nos mails pour leurs services d'IA à des fins d'entraînement) et enfin enregistrer les contacts sauvegardés sur notre compte google. Il s'agit ensuite de vider les différents cloud (Google Drive, ou autres cloud détenus par les GAFAM), pour stocker tout en local. + +Cette phase est relativement longue, car Google détient beaucoup de données, et il serait malvenu de supprimer son compte avant de découvrir que nos contacts sont enregistrés chez eux et les perdre intégralement. + +Ensuite, l'étape la plus longue est celle consistant à retrouver toutes les occurences de mon adresse gmail sur les comptes que j'ai pu créer. C'est mon problème principal encore aujourd'hui, car j'ai une adresse gmail depuis 2013, à laquelle sont liés 100% des comptes que j'ai créé en 13 ans. Je n'ai évidemment jamais noté les comptes que je créais. J'attend, pour supprimer mon compte google, de ne plus avoir peur de perdre des services essentiels qui seraient dépendants de mon accès à mon adresse gmail. J'ai trouvé quelques techniques pour aider à retrouver ses différents comptes: + +- un premier moyen est de vérifier les services connectés à notre compte google (via internet, gérer mon compte google - Applis et services tiers). +- ensuite, on peut aussi regarder les mails automatiques de création de compte reçus sur notre adresse gmail (sauf si on les a, comme moi, supprimés au fur et à mesure). +- enfin, on peut définir une période (6 mois par exemple) où on conservera l'adresse, et où à chaque utilisation d'un compte lié à gmail, on changera l'adresse liée. Au bout de 6 mois, on peut imaginer que les services oubliés ne sont pas à ce point essentiels. + +Une attention particulière peut être portée sur le changement d'adresse mail pour les services de l'État, qui peuvent devenir très embêtants si on perd l'adresse mail en question, surtout sachant que l'Identité numérique (qui permet de se connecter à tous les services de l'État) ne fonctionne pas sans les services de Google. Aussi, pour réduire la masse de comptes à modifier, un moyen peut aussi être de réfléchir encore une fois aux services dont j'ai réellement besoin (ce qui réduit drastiquement la liste, et surtout permet de trouver rapidement les services concernés). Ce qui ne veut pas dire que je vais oublier simplement les comptes restants, car mon objectif est aussi de supprimer ces comptes, ou si cela n'est pas possible facilement demander la suppression de mes données personnelles (merci les RGPD !). + +Un problème majeur peut subsister, notamment si l'usage de services de google est nécessaire dans le cadre des études, du travail, de la famille... Pour les deux premiers, il est toujours possible de créer un nouveau compte Google, sans données permettant notre identification, et strictement utilisé dans le cadre du travail. Pour la famille... à vous de les convaincre de quitter aussi les GAFAM (l'occasion aussi de montrer à quel point l'accessibilité peut-être simplifié sans les innombrables services inutiles de Google). +#### Remplacer son adresse gmail +Pour pouvoir changer ses différents comptes liés à gmail, il faut évidemment trouver un service d'hébergement d'adresse mail alternatif. Dans ce cas, j'utilise ProtonMail (j'y paye l'abonnement de base), un service Suisse sécurisé. Il existe de nombreux fournisseurs similaires, comme TutaMail, FastMail... Reste aussi la possibilité d'auto-héberger son service de mail, ou de passer par un [Chaton](https://www.chatons.org/), ou en achetant de l'espace sur des serveurs de son choix. Je ne donne pas vraiment de raison à mon choix de Proton (je l'ai fait sans vraiment réflechir, c'était une décision que j'ai prise au tout début de mon parcours). Un désavantage certain est que la version gratuite ne permet pas de recevoir des mails sous Thunderbird (mais la version payante de base est abordable, et le service est de qualité). L'entreprise n'est aussi peut-être pas la plus éthique, j'ai pu voir des critiques ici et là sur sa politique. Aussi, Proton est peut-être un des seuls services que j'utilise qui dérogent à la règle "do one thing but do it well" (ils proposent un agenda, un mail, et un drive, ainsi qu'un gestionnaire de mot de passe et un VPN que je n'utilise pas), mais c'est une solution de facilité que j'ai trouvé en attendant de faire mieux. Un avantage (et je crois que Tuta le permet aussi) est que l'on peut régler une redirection des mails Gmail vers Proton, ce qui aide à se détacher de Google pendant les 6 mois de prospection des comptes associés à gmail. Il est aussi possible d'avoir plusieurs alias, menant à la même adresse, ce qui est assez pratique pour se prémunir du spam. + +Sur le point de l'auto-hébergement, ou de l'usage d'un serveur personnel distant, je ne m'y suis pas encore attelé, mais c'est en projet car cela ouvre beaucoup de possibilités, notamment d'héberger un cloud par exemple. +#### En profiter pour changer ses mots de passe +Modifier son adresse mail sur ses comptes, c'est aussi l'occasion rêvée de changer ses mots de passe ! Le mauvais usage est généralement d'utiliser des mots de passe identiques, ou des "patterns" faciles à retenir pour se souvenir de tous ses mots de passe. C'est un moyen très facile pour les hackers de récupérer nos accès quand nos identifiants fuitent sur un site ou un autre, aussi un mot de passe fort et différent pour chaque compte est essentiel. Mais c'est embêtant, et la solution du calepin de mots de passe est une fausse bonne idée (il peut-être perdu, volé, etc...). + +J'utilise un gestionnaire de mot de passe sécurisé par un mot de passe dit "maître", c'est-à-dire un mot de passe long mais unique, qui permet de débloquer tous les autres. Ma préférence s'est portée sur BitWarden, car il permet de stocker en local et de manière chiffrée tous ses mots de passe, et propose le remplissage automatique sur internet (sous réserve de s'être connecté à l'aide de son mot de passe maître précédemment). Il suffit alors de laisser bitwarden générer de nouveaux mot de passe forts (environ 14-16 caractères, avec majuscules, chiffres et caractères spéciaux), avoir un mot de passe maître unique en tête (25 caractères environ), et tout enregistrer sur le gestionnaire de mot de passes. Il existe évidemment des alternatives qui fournissent le même service, comme Proton qui propose son propre gestionnaire par exemple, ou encore des outils fonctionnant en local comme Keypass (connu pour être plus sécurisé que Bitwarden). + +## Changer de système d'exploitation +La plupart des téléphones sont aujourd'hui vendus nativement avec une version d'Android fonctionnant avec les services de Google (sans possibilité de les enlever). Certains d'entre eux sont même quasi-impossibles à "root" (c'est-à-dire prendre le contrôle pour installer un noyau de notre choix). Il s'agit donc de trouver les systèmes d'exploitation disponibles pour son téléphone. + +Les différentes versions existantes sur le marché sont généralement basées sur Android (les autres versions de Linux n'étant pas à la hauteur aujourd'hui): + +- postMarketOS (beaucoup de compatibilités, sert notamment au reconditionnement de vieux appareils) +- /e/OS (version très proche des android de google, mais sans la présence obligatoire des services google, beaucoup de compatibilités) +- LineageOS (version d'android complètement dégooglisée, servie avec une configuration minimale, assez compatible avec les appareils) +- GrapheneOS (uniquement compatible avec les Google Pixel, très sécurisé et performant) + +De manière générale, les téléphones les plus faciles à dégoogliser sont (étonnament) les Google Pixel. Les constructeurs alternatifs peuvent aussi être intéressants, par exemple FairPhone qui propose même des téléphones directement sous /e/OS à l'achat (ce qui évite des manipulations sensibles). + +Si le téléphone n'est pas directement livré avec le système d'exploitation, il faut chercher sur Internet, pour son téléphone en particulier, la compatibilité et la procédure à suivre pour le rooter. LineageOS par exemple propose un tutoriel pour chaque appareil supporté, à suivre du début à la fin pour installer un nouvel OS. De manière générale, il faudra utiliser un ordinateur, et suivre les procédures, qui impliqueront l'utilisation de "fastboot" et "adb", des outils dédiés pour la gestion d'Android par ligne de commande depuis un ordinateur. Comme souvent, "suivre le tutoriel" est la solution (le plus difficile est de trouver le tutoriel, puis de régler les problèmes à l'aide de reddit et stackoverflow). + +J'utilise personnellement LineageOS, avec Trébuchet comme gestionnaire d'affichage (servi nativement), et en suis très heureux pour le moment. Au niveau du noyau, les services de Google ne sont pas actifs, et la sécurité est gérée par un outil linux intégré à Lineage. Mon téléphone est aussi chiffré (ses données ne sont pas déchiffrables sans accès autorisé au téléphone). +## Sécuriser son accès à Internet +Pour sécuriser mes accès au réseau (et notamment éviter de donner mon adresse IP librement), j'utilise un VPN. Je le couple à un bloqueur de DNS qui permet d'empêcher les publicités intempestives. Ces services sont généralement payants, avec des fournisseurs assez variés. Au long de mes recherches, les meilleures possibilités que j'ai trouvées sont probablement Proton VPN, et Mullvad VPN. Personnellement, j'utilise Mullvad car c'est un des services les plus avancés et sûrs (création de compte sans identifiants tels que mail et téléphone, plusieurs méthodes de blocage des traqueurs de données, prix bloqué et assuré à 5€ par mois, garanties avérées de protections des données, bloqueurs de DNS intégrés). + +De plus, j'évite d'utiliser au maximum des navigateurs internet privés (Google Chrome et Microsoft Edge pour ne pas les citer). À la place il y a l'embarras du choix: Brave, Firefox (et ses nombreuses branches), Tor... Personnellement, après plusieurs essais j'utilise Firefox, avec AdBlock en extension. + +Enfin, j'évite aussi le moteur de recherche de Google (qui propose en abondance du contenu sponsorisé et des AIslop articles en boucle). Deux solutions ici, DuckDuckGo (qui a le mérite de fonctionner assez bien, et sur lequel il est possible de supprimer l'utilisation de l'IA pour la recherche) ou Searxng, qui propose différents fournisseurs d'agrégateurs de moteurs de recherche, avec des variations selon les instances (voir [instances](https://searx.space/)). + +Au delà, la sécurité est toujours un compromis. Les bonnes pratiques (ne pas installer depuis des dépôts inconnus, faire régulièrement ses mises à jour, n'autoriser que le strict nécessaire à notre usage de l'application) suffisent généralement à minimiser le risque. Cela ne fera jamais de risque zéro, l'essentiel est d'être un minimum au courant des risques encourus quand on installe quelque chose. + +## Trouver des alternatives +Maintenant que l'usage du téléphone est sécurisé (autant que possible, la sécurité parfaite n'existe pas), il s'agit de subvenir aux besoins restants, et donc d'installer les applications associées. Pour l'usage classique du téléphone, des services sont déjà présents sur Lineage (appels, sms, agenda, calculatrice, ...) avec des applications open source. Pour le reste, l'idée pour éviter Google est de ne pas passer par le Google Play Store. Il y a peu d'alternatives, mais elles existent: d'abord, le téléchargement direct des fichiers d'applications via apkmirror sur internet... ce qui n'est pas vraiment recommandé, notamment pour la gestion des mises à jour. Ensuite, l'utilisation de gestionnaires de dépôts, comme F-droid qui fournit des applications libre et open source (FOSS en anglais). Ensuite, pour ce qui n'existe pas sur F-droid, j'utilise Aurora Store, qui est une "copie" du play store sans nécessité de se connecter à un compte Google (mode "anonyme"). + +Quand j'installe des applications, je me pose les questions suivantes: + +- est-ce que l'application répond à un besoin essentiel pour moi ? +- est-ce qu'elle respecte la philosophie Unix (do one thing but do it well) ? +- est-elle libre et open source, ou existe-t-il une alternative libre et open source ? +- quel est le risque que je prend avec cette application ? +- ai-je un moyen de diminuer ce risque ? + +En considérant la réponse à chaque question, j'estime si le compromis entre les avantages et inconvénients apportés me convient. Cela m'évite d'installer "compulsivement" des applications qui ne vont faire qu'aspirer mon attention sans que je l'accepte vraiment (ou pas, mais on se sépare difficilement des addictions implantées par des années d'usage des services des GAFAM). + +Sur l'évaluation des risques, je pars généralement du principe que F-droid me donne les informations sur les risques (c'est en général écrit dans la description), et je compte ensuite sur Aurora pour détecter les différents traqueurs présents dans mes applications. + +Sur la diminution des risques, j'utilise un 3ème outil (après F-droid et Aurora Store): ReVanced. C'est un outil de "patch" sur les applications, qui va venir changer le code source pour éviter certains services, traqueurs, gestionnaires de pubs... C'est en même temps un bénéfice (j'évite des traqueurs des GAFAM dans les applications supportées) et en même temps un risque (toucher au code source via des apk en ligne peut toujours comporter des risques de virus). + +Une note importante: toutes les applications ne fonctionnent pas sans les services de Google. Pour ne pas la citer, "l'identité numérique" (je la cite quand même), service de l'état français, ne fonctionne pas sans services de Google. Il me semble qu'il existe des alternatives libres, comme microG, mais je ne me suis pas encore penché sur ça. + +## Prendre conscience des risques restants +**Il n'y a pas d'usage sans risque**, l'essentiel est ici d'être conscient des failles (et d'agir en conséquences). Je sais par exemple que Facebook Messenger, Instagram, mes applications de banque, ... possèdent des traqueurs connus (Google advertisment par exemple). J'essaie donc au maximum de diminuer progressivement mon empreinte numérique sur ces applications, et si pas possible au moins à sécuriser au maximum mon usage de ces dernières. + +Un point sur lequel je me pose aussi des questions (avec peu de réponses) est sur la sécurité des applications. Je ne sais pas vraiment quand je peux me fier ou non à telle ou telle application. Je n'ai toujours pas de réponse sur ça. +## Liste de mes alternatives + +![appchange](~/dotfiles_arch/tutoriels/appchange.svg) + + + +## Ressources + +[Subreddit degoogle](https://www.reddit.com/r/degoogle/wiki/index/) diff --git a/config/Typora/draftsRecover/2026-5-4 degoogle 125056.md b/config/Typora/draftsRecover/2026-5-4 degoogle 125056.md new file mode 100644 index 0000000..e43b19b --- /dev/null +++ b/config/Typora/draftsRecover/2026-5-4 degoogle 125056.md @@ -0,0 +1,128 @@ +# Introduction + +Ce tutoriel est un résumé de mes réflexions personnelles tout au long de ma démarche de **ré-appropriation de mes moyens de production individuels**, à savoir mon ordinateur et mon téléphone portable. Cette démarche est issue d'une frustration vis-à-vis des outils proposés par Google et Microsoft, qui sont tout sauf conviviaux, et surtout totalement opaques dans leur fonctionnement du point de vue de l'usager. Je suis persuadé que de nombreux chemins mènent à cette même frustration, que ce soit par une volonté de maîtriser ses outils (sur les aspects de réparabilité, convivialité, etc...), de sécuriser ses données personnelles, de se libérer des réseaux et outils hégémoniques des GAFAM, de diminuer ses dépenses en moyens technologiques ou dans l'obsolescence des outils numériques, de soutenir les initiatives du monde du libre et de l'open source, etc... + +L'idée ici est donc de proposer les moyens que j'ai sélectionné pour me libérer des GAFAM autant que possible. J'y discute les avantages ainsi que les limites de cette transition. J'y expose aussi quelques unes des méthodes (perfectibles) que j'ai mis en place, la démarche intellectuelle (personnelle) que j'ai suivi et des pistes destinées à passer le pas (ce qui peut être rapidement vertigineux). Je n'aime pas proposer une "checklist" à suivre, cela n'est pas un guide pas-à-pas, mais plutôt le moyen de suivre un certain cheminement de pensée et comprendre les choix que j'ai fait. + +Je ne prétend pas être un fin connaisseur des architectures numériques (disons que je me débrouille assez pour mes besoins), à vous de vérifier mes dires (et éventuellement me faire des retours). Cela représente deux années de travail et de réflexion (et pas mal de galères :p). C'est un travail continu, qui évolue constamment à l'usage (et qui est donc très personnel). J'espère donner des pistes pour que chacun.e puisse plus facilement s'émanciper. +# Dégoogliser son téléphone +## Quitter Google (et Microsoft, etc...) +Il y a plusieurs raisons de quitter Google. Si d'abord j'avais entamé ma transition vers Linux par frustration vis-à-vis de Microsoft Windows, j'ai passé le pas pour Google pour d'autres raisons. Non pas que je trouvais l'interface conviviale (au contraire), mais car cela impliquait des changements dans mon usage plus profonds et plus risqués par rapport à mes accès à différents réseaux. L'élément déclencheur a plutôt été lié à la protection de mes données personnelles, dans une période où j'avais particulièrement besoin d'avoir confiance en ce que je partage ou non à des services tiers. + +L'adage "si c'est gratuit c'est que c'est toi le produit" s'applique sans aucun souci à Google (et aux GAFAM en général). Proposer des services gratuits, et se rémunérer en fournissant les données des utilisateurices récoltées à l'intention d'agences publicitaires et/ou d'opinion. C'est un moyen central de renouvellement de l'hégémonie de la société de consommation, qui permet de modeler de manière adaptative les besoins des potentiels consommateurices. Cette méthode de surveillance et de profilage généralisée est un danger pour la démocratie, notamment à l'ère ou les multinationales qui détiennent nos données détiennent un monopole et militent activement pour le maintien et le développement des oppressions de classe, coloniales, patriarcales, etc... Les patrons de la tech américaine (qui sont les fournisseurs principaux des services dans le monde entier), ne se cachent même plus dans leur eugénisme, leur racisme décomplexé et leurs haine du peuple et des travailleureuses. Les données récoltées servent directement l'appareil d'État, OpenAI ayant montré en France que des requêtes ChatGPT pouvaient mener à une interpellation musclée par la police française. De même, les milices ICE aux États Unis se servent abondamment dans les données leurs permettant de cibler et emprisonner arbitrairement des personnes sur le sol américain. À tout cela, j'ai beaucoup entendu "je n'ai rien à cacher, je ne vois pas le problème personnellement"... demain, cela deviendra peut-être un besoin vital de ne pas être traqué par nos appareils (cf [source](https://www.bfmtv.com/tech/vie-numerique/aux-etats-unis-l-ice-a-envoye-des-centaines-de-demandes-aux-gafam-jusqu-alors-reservees-a-des-enquetes-criminelles-afin-d-identifier-de-simples-opposants-a-la-politique-de-donald-trump_AN-202602160440.html)). + +Mais au delà de ces préoccupations politiques, c'est aussi une émancipation. J'étais personnellement frustré de voir mon espace disponible lentement se remplir, jusqu'à saturer la mémoire de mon appareil, et voir les applications impossibles à désinstaller venant avec les services de Google. J'avais une 15aine d'applications sur mon écran d'accueil que je n'utilisais pas, qui récupéraient pourtant mes données, et que je ne pouvais pas supprimer ou bloquer. Je ne maîtrisais pas la sécurité de mon appareil, tout étant délégué à des services en lesquels je n'avais pas confiance (dois-je vraiment me protéger de potentiels virus me volant mes données, quand les services censés me protéger transmettent déjà mes données à Google ?). En quittant Google, je peux sécuriser mon téléphone en connaissant les informations qui rentrent et sortent de mon appareil, et en ayant une idée (même vague) d'où elles sont envoyées. Je peux aussi décider d'empêcher certains services d'agir (même si cela implique un fonctionnement moins performant). + +Enfin, un dernier point porte sur les politiques récentes de Google vis-à-vis des applications libres et open source. D'ici septembre 2026, installer des applications libres et open source dont l'identité des développeureuses ne serait pas validée par Google deviendra impossible sur les appareils utilisant Google. Un moyen pour le géant de la tech d'écraser toute concurrence à son modèle économique. J'utilisais déjà des applications provenant du dépôt FossDroid, principal concerné par les restrictions, et c'est l'événement qui a déclenché le passage à l'acte de dégooglisation (Cf [source](https://keepandroidopen.org/en/)). + +### Définir ses besoins +Le processus de dégooglisation est plus qu'un simple changement de système d'exploitation. Il s'agit plutôt de changer de paradigme, hors du cadre imposé par Google sur l'ensemble des appareils. Et donc, il faut aussi réflechir aussi à quel cadre nous impose Google. + +Ce cadre, c'est celui de la création de besoin par la disponibilité du produit**. D'abord, à l'aide d'applications imposées (la suite Google, comme Youtube, Google Drive, etc...): le produit existe sur mon appareil, c'est bien qu'il doit répondre à un besoin que j'ai. Ensuite, par la construction des applications (notamment l'App Store), qui nous proposent des fonctionnalités à "explorer", pour se rendre compte que nous avions terriblement besoin de cet outil que nous n'avions jamais demandé auparavant. Ce cadre constitue la structure, basée sur l'addiction à la nouveauté permanente et à la mise sous dépendance d'usage de chaque nouvelle application. Cela crée une décorrelation entre le besoin réel et le produit de consommation, qui est néfaste autant pour le consommateur que pour les développeureuses, qui ne créent plus pour répondre à des besoins d'usagers mais pour les rendre addict, et par là accroître le capital des actionnaires. Sortir de ce paradigme, c'est faire la démarche inverse: définir ses besoins, puis évaluer les produits existants pouvant y répondre (et créer son outil s'il n'existe pas). C'est aussi s'interroger sur le coût (humain, écologique, financier, sociétal) des outils et les risques que j'encours (sur ma vie privée, sur les conséquences possibles sur ma santé...), à mettre sur la balance face à notre sentiment de besoin (est-ce que cela vaut le coût de subvenir à ce besoin, est-il essentiel ?). + +Pour changer de manière d'aborder les choses, suivre la philosophie UNIX peut-être intéressante. Elle se formule généralement avec la phrase "do one thing and do it well", c'est-à-dire qu'une bonne application est une application mono-tâche qui accomplit ce qu'on lui demande de la manière dont on lui demande. C'est une philosophie largement répandue dans le monde de l'open source et du libre, qui permet souvent des applications très efficaces dans leur domaine (pas forcément mais la spécialisation aide souvent). + +Ainsi, en réfléchissant à tous ces axes (risques, coût, besoins, nécessité), j'ai pu définir mes besoins. Évidemment, ils sont amenés à évoluer, et surtout sont modelés par mes usages passés dans le cadre du paradigme précédent et de la société qui agit sur moi: ais-je vraiment besoin d'Instagram ? Je sais que mon besoin de réseaux sociaux comme Instagram est plus une addiction, et tendra peut-être à diminuer (jusqu'à être compensée par le risque de profilage que l'application représente) si j'arrive à trouver l'énergie de me sevrer... et dans ce cas se transformera, peut-être vers des applications semblables, libres et plus saines dans leur construction. Ces besoins sont donc: + +- pouvoir communiquer à travers mes réseaux (téléphone, messageries, réseaux sociaux, mails, gestionnaire de contacts) +- avoir accès à des services essentiels pour moi (streaming musical et vidéo, accès à mes comptes bancaires, aux applications de transports, appareil photo...) +- avoir un accès sécurisé à internet (sans traqueurs, sans pubs) +- avoir un appareil sécurisé me permettant la double authentification (2FA) +- pouvoir couper les services quand je ne les utilise pas (autant au niveau software que hardware, en particulier micro, caméra, localisation, internet) +- minimiser les données que je transmet si elles ne sont pas utiles ou sécurisées suffisamment pour que j'accorde ma confiance au service qui les détient +- limiter mon exposition aux publicités ciblées +- minimiser le risque de fuites de données personnelles + +Pour subvenir à ces besoins, j'ai identifié plusieurs pistes: + +- adopter un comportement en ligne responsable et éclairé + - continuer à suivre les bases, à savoir éviter le phishing, les sites internet non sécurisés et inconnus, éviter de télécharger des fichiers sur internet les yeux fermés, refuser les cookies sur les sites, ... + - utiliser des mots de passe forts (et un gestionnaire de mot de passe en lequel j'ai confiance) + - utiliser au maximum un VPN au quotidien + - m'informer sur les risques liés aux fuites de données (par exemple grâce à [la Quadrature du Net](https://www.laquadrature.net/) mais aussi d'autres ressources en ligne aussi diverses que variées +- changer mon téléphone pour une marque qui me permet de quitter google (FairPhone en l'occurence) +- changer de système d'exploitation pour une version sans Google +- quitter un à un les services de Google, et passer tous mes comptes essentiels sur une nouvelle adresse mail, ou demander la suppression des données si le service est non-essentiel +- adopter la philosophie UNIX pour les applications alternatives que j'adopte ("do one thing and do it well") + +Un sacré travail en perspective ! + +### Le plus difficile : lister ses comptes associés à Google +S'il y a une chose à faire en premier (car c'est LONG), c'est bien de préparer la suppression de son compte google (et donc la fermeture de son adresse Gmail). Le plus simple (pour commencer par le commencement), c'est de récupérer ses données. Une part de données (qui ne seront probablement jamais utiles) peut être récupérée via Google Takeout. Cela peut notamment être intéressant pour transférer ses abonnements youtubes sous un nouveau service en local (par exemple PipePipe ou NewPipe), ou encore exporter et archiver ses mails au format Mbox en local, pour plus tard pouvoir y accéder via Thunderbird par exemple. Dès lors que l'ensemble des mails sont sauvegardés, ils peuvent être supprimés sur gmail (intéressant quand on sait que Google et Microsoft se préparent à l'accès total de tous nos mails pour leurs services d'IA à des fins d'entraînement) et enfin enregistrer les contacts sauvegardés sur notre compte google. Il s'agit ensuite de vider les différents cloud (Google Drive, ou autres cloud détenus par les GAFAM), pour stocker tout en local. + +Cette phase est relativement longue, car Google détient beaucoup de données, et il serait malvenu de supprimer son compte avant de découvrir que nos contacts sont enregistrés chez eux et les perdre intégralement. + +Ensuite, l'étape la plus longue est celle consistant à retrouver toutes les occurences de mon adresse gmail sur les comptes que j'ai pu créer. C'est mon problème principal encore aujourd'hui, car j'ai une adresse gmail depuis 2013, à laquelle sont liés 100% des comptes que j'ai créé en 13 ans. Je n'ai évidemment jamais noté les comptes que je créais. J'attend, pour supprimer mon compte google, de ne plus avoir peur de perdre des services essentiels qui seraient dépendants de mon accès à mon adresse gmail. J'ai trouvé quelques techniques pour aider à retrouver ses différents comptes: + +- un premier moyen est de vérifier les services connectés à notre compte google (via internet, gérer mon compte google - Applis et services tiers). +- ensuite, on peut aussi regarder les mails automatiques de création de compte reçus sur notre adresse gmail (sauf si on les a, comme moi, supprimés au fur et à mesure). +- enfin, on peut définir une période (6 mois par exemple) où on conservera l'adresse, et où à chaque utilisation d'un compte lié à gmail, on changera l'adresse liée. Au bout de 6 mois, on peut imaginer que les services oubliés ne sont pas à ce point essentiels. + +Une attention particulière peut être portée sur le changement d'adresse mail pour les services de l'État, qui peuvent devenir très embêtants si on perd l'adresse mail en question, surtout sachant que l'Identité numérique (qui permet de se connecter à tous les services de l'État) ne fonctionne pas sans les services de Google. Aussi, pour réduire la masse de comptes à modifier, un moyen peut aussi être de réfléchir encore une fois aux services dont j'ai réellement besoin (ce qui réduit drastiquement la liste, et surtout permet de trouver rapidement les services concernés). Ce qui ne veut pas dire que je vais oublier simplement les comptes restants, car mon objectif est aussi de supprimer ces comptes, ou si cela n'est pas possible facilement demander la suppression de mes données personnelles (merci les RGPD !). + +Un problème majeur peut subsister, notamment si l'usage de services de google est nécessaire dans le cadre des études, du travail, de la famille... Pour les deux premiers, il est toujours possible de créer un nouveau compte Google, sans données permettant notre identification, et strictement utilisé dans le cadre du travail. Pour la famille... à vous de les convaincre de quitter aussi les GAFAM (l'occasion aussi de montrer à quel point l'accessibilité peut-être simplifié sans les innombrables services inutiles de Google). +#### Remplacer son adresse gmail +Pour pouvoir changer ses différents comptes liés à gmail, il faut évidemment trouver un service d'hébergement d'adresse mail alternatif. Dans ce cas, j'utilise ProtonMail (j'y paye l'abonnement de base), un service Suisse sécurisé. Il existe de nombreux fournisseurs similaires, comme TutaMail, FastMail... Reste aussi la possibilité d'auto-héberger son service de mail, ou de passer par un [Chaton](https://www.chatons.org/), ou en achetant de l'espace sur des serveurs de son choix. Je ne donne pas vraiment de raison à mon choix de Proton (je l'ai fait sans vraiment réflechir, c'était une décision que j'ai prise au tout début de mon parcours). Un désavantage certain est que la version gratuite ne permet pas de recevoir des mails sous Thunderbird (mais la version payante de base est abordable, et le service est de qualité). L'entreprise n'est aussi peut-être pas la plus éthique, j'ai pu voir des critiques ici et là sur sa politique. Aussi, Proton est peut-être un des seuls services que j'utilise qui dérogent à la règle "do one thing but do it well" (ils proposent un agenda, un mail, et un drive, ainsi qu'un gestionnaire de mot de passe et un VPN que je n'utilise pas), mais c'est une solution de facilité que j'ai trouvé en attendant de faire mieux. Un avantage (et je crois que Tuta le permet aussi) est que l'on peut régler une redirection des mails Gmail vers Proton, ce qui aide à se détacher de Google pendant les 6 mois de prospection des comptes associés à gmail. Il est aussi possible d'avoir plusieurs alias, menant à la même adresse, ce qui est assez pratique pour se prémunir du spam. + +Sur le point de l'auto-hébergement, ou de l'usage d'un serveur personnel distant, je ne m'y suis pas encore attelé, mais c'est en projet car cela ouvre beaucoup de possibilités, notamment d'héberger un cloud par exemple. +#### En profiter pour changer ses mots de passe +Modifier son adresse mail sur ses comptes, c'est aussi l'occasion rêvée de changer ses mots de passe ! Le mauvais usage est généralement d'utiliser des mots de passe identiques, ou des "patterns" faciles à retenir pour se souvenir de tous ses mots de passe. C'est un moyen très facile pour les hackers de récupérer nos accès quand nos identifiants fuitent sur un site ou un autre, aussi un mot de passe fort et différent pour chaque compte est essentiel. Mais c'est embêtant, et la solution du calepin de mots de passe est une fausse bonne idée (il peut-être perdu, volé, etc...). + +J'utilise un gestionnaire de mot de passe sécurisé par un mot de passe dit "maître", c'est-à-dire un mot de passe long mais unique, qui permet de débloquer tous les autres. Ma préférence s'est portée sur BitWarden, car il permet de stocker en local et de manière chiffrée tous ses mots de passe, et propose le remplissage automatique sur internet (sous réserve de s'être connecté à l'aide de son mot de passe maître précédemment). Il suffit alors de laisser bitwarden générer de nouveaux mot de passe forts (environ 14-16 caractères, avec majuscules, chiffres et caractères spéciaux), avoir un mot de passe maître unique en tête (25 caractères environ), et tout enregistrer sur le gestionnaire de mot de passes. Il existe évidemment des alternatives qui fournissent le même service, comme Proton qui propose son propre gestionnaire par exemple, ou encore des outils fonctionnant en local comme Keypass (connu pour être plus sécurisé que Bitwarden). + +## Changer de système d'exploitation +La plupart des téléphones sont aujourd'hui vendus nativement avec une version d'Android fonctionnant avec les services de Google (sans possibilité de les enlever). Certains d'entre eux sont même quasi-impossibles à "root" (c'est-à-dire prendre le contrôle pour installer un noyau de notre choix). Il s'agit donc de trouver les systèmes d'exploitation disponibles pour son téléphone. + +Les différentes versions existantes sur le marché sont généralement basées sur Android (les autres versions de Linux n'étant pas à la hauteur aujourd'hui): + +- postMarketOS (beaucoup de compatibilités, sert notamment au reconditionnement de vieux appareils) +- /e/OS (version très proche des android de google, mais sans la présence obligatoire des services google, beaucoup de compatibilités) +- LineageOS (version d'android complètement dégooglisée, servie avec une configuration minimale, assez compatible avec les appareils) +- GrapheneOS (uniquement compatible avec les Google Pixel, très sécurisé et performant) + +De manière générale, les téléphones les plus faciles à dégoogliser sont (étonnament) les Google Pixel. Les constructeurs alternatifs peuvent aussi être intéressants, par exemple FairPhone qui propose même des téléphones directement sous /e/OS à l'achat (ce qui évite des manipulations sensibles). + +Si le téléphone n'est pas directement livré avec le système d'exploitation, il faut chercher sur Internet, pour son téléphone en particulier, la compatibilité et la procédure à suivre pour le rooter. LineageOS par exemple propose un tutoriel pour chaque appareil supporté, à suivre du début à la fin pour installer un nouvel OS. De manière générale, il faudra utiliser un ordinateur, et suivre les procédures, qui impliqueront l'utilisation de "fastboot" et "adb", des outils dédiés pour la gestion d'Android par ligne de commande depuis un ordinateur. Comme souvent, "suivre le tutoriel" est la solution (le plus difficile est de trouver le tutoriel, puis de régler les problèmes à l'aide de reddit et stackoverflow). + +J'utilise personnellement LineageOS, avec Trébuchet comme gestionnaire d'affichage (servi nativement), et en suis très heureux pour le moment. Au niveau du noyau, les services de Google ne sont pas actifs, et la sécurité est gérée par un outil linux intégré à Lineage. Mon téléphone est aussi chiffré (ses données ne sont pas déchiffrables sans accès autorisé au téléphone). +## Sécuriser son accès à Internet +Pour sécuriser mes accès au réseau (et notamment éviter de donner mon adresse IP librement), j'utilise un VPN. Je le couple à un bloqueur de DNS qui permet d'empêcher les publicités intempestives. Ces services sont généralement payants, avec des fournisseurs assez variés. Au long de mes recherches, les meilleures possibilités que j'ai trouvées sont probablement Proton VPN, et Mullvad VPN. Personnellement, j'utilise Mullvad car c'est un des services les plus avancés et sûrs (création de compte sans identifiants tels que mail et téléphone, plusieurs méthodes de blocage des traqueurs de données, prix bloqué et assuré à 5€ par mois, garanties avérées de protections des données, bloqueurs de DNS intégrés). + +De plus, j'évite d'utiliser au maximum des navigateurs internet privés (Google Chrome et Microsoft Edge pour ne pas les citer). À la place il y a l'embarras du choix: Brave, Firefox (et ses nombreuses branches), Tor... Personnellement, après plusieurs essais j'utilise Firefox, avec AdBlock en extension. + +Enfin, j'évite aussi le moteur de recherche de Google (qui propose en abondance du contenu sponsorisé et des AIslop articles en boucle). Deux solutions ici, DuckDuckGo (qui a le mérite de fonctionner assez bien, et sur lequel il est possible de supprimer l'utilisation de l'IA pour la recherche) ou Searxng, qui propose différents fournisseurs d'agrégateurs de moteurs de recherche, avec des variations selon les instances (voir [instances](https://searx.space/)). + +Au delà, la sécurité est toujours un compromis. Les bonnes pratiques (ne pas installer depuis des dépôts inconnus, faire régulièrement ses mises à jour, n'autoriser que le strict nécessaire à notre usage de l'application) suffisent généralement à minimiser le risque. Cela ne fera jamais de risque zéro, l'essentiel est d'être un minimum au courant des risques encourus quand on installe quelque chose. + +## Trouver des alternatives +Maintenant que l'usage du téléphone est sécurisé (autant que possible, la sécurité parfaite n'existe pas), il s'agit de subvenir aux besoins restants, et donc d'installer les applications associées. Pour l'usage classique du téléphone, des services sont déjà présents sur Lineage (appels, sms, agenda, calculatrice, ...) avec des applications open source. Pour le reste, l'idée pour éviter Google est de ne pas passer par le Google Play Store. Il y a peu d'alternatives, mais elles existent: d'abord, le téléchargement direct des fichiers d'applications via apkmirror sur internet... ce qui n'est pas vraiment recommandé, notamment pour la gestion des mises à jour. Ensuite, l'utilisation de gestionnaires de dépôts, comme F-droid qui fournit des applications libre et open source (FOSS en anglais). Ensuite, pour ce qui n'existe pas sur F-droid, j'utilise Aurora Store, qui est une "copie" du play store sans nécessité de se connecter à un compte Google (mode "anonyme"). + +Quand j'installe des applications, je me pose les questions suivantes: + +- est-ce que l'application répond à un besoin essentiel pour moi ? +- est-ce qu'elle respecte la philosophie Unix (do one thing but do it well) ? +- est-elle libre et open source, ou existe-t-il une alternative libre et open source ? +- quel est le risque que je prend avec cette application ? +- ai-je un moyen de diminuer ce risque ? + +En considérant la réponse à chaque question, j'estime si le compromis entre les avantages et inconvénients apportés me convient. Cela m'évite d'installer "compulsivement" des applications qui ne vont faire qu'aspirer mon attention sans que je l'accepte vraiment (ou pas, mais on se sépare difficilement des addictions implantées par des années d'usage des services des GAFAM). + +Sur l'évaluation des risques, je pars généralement du principe que F-droid me donne les informations sur les risques (c'est en général écrit dans la description), et je compte ensuite sur Aurora pour détecter les différents traqueurs présents dans mes applications. + +Sur la diminution des risques, j'utilise un 3ème outil (après F-droid et Aurora Store): ReVanced. C'est un outil de "patch" sur les applications, qui va venir changer le code source pour éviter certains services, traqueurs, gestionnaires de pubs... C'est en même temps un bénéfice (j'évite des traqueurs des GAFAM dans les applications supportées) et en même temps un risque (toucher au code source via des apk en ligne peut toujours comporter des risques de virus). + +Une note importante: toutes les applications ne fonctionnent pas sans les services de Google. Pour ne pas la citer, "l'identité numérique" (je la cite quand même), service de l'état français, ne fonctionne pas sans services de Google. Il me semble qu'il existe des alternatives libres, comme microG, mais je ne me suis pas encore penché sur ça. + +## Prendre conscience des risques restants +**Il n'y a pas d'usage sans risque**, l'essentiel est ici d'être conscient des failles (et d'agir en conséquences). Je sais par exemple que Facebook Messenger, Instagram, mes applications de banque, ... possèdent des traqueurs connus (Google advertisment par exemple). J'essaie donc au maximum de diminuer progressivement mon empreinte numérique sur ces applications, et si pas possible au moins à sécuriser au maximum mon usage de ces dernières. + +Un point sur lequel je me pose aussi des questions (avec peu de réponses) est sur la sécurité des applications. Je ne sais pas vraiment quand je peux me fier ou non à telle ou telle application. Je n'ai toujours pas de réponse sur ça. +## Liste de mes alternatives + +![appchange](~/dotfiles_arch/tutoriels/appchange.svg) + + + +## Ressources + +[Subreddit degoogle](https://www.reddit.com/r/degoogle/wiki/index/) diff --git a/config/Typora/draftsRecover/2026-5-4 degoogle 125057.md b/config/Typora/draftsRecover/2026-5-4 degoogle 125057.md new file mode 100644 index 0000000..d60cd7c --- /dev/null +++ b/config/Typora/draftsRecover/2026-5-4 degoogle 125057.md @@ -0,0 +1,128 @@ +# Introduction + +Ce tutoriel est un résumé de mes réflexions personnelles tout au long de ma démarche de **ré-appropriation de mes moyens de production individuels**, à savoir mon ordinateur et mon téléphone portable. Cette démarche est issue d'une frustration vis-à-vis des outils proposés par Google et Microsoft, qui sont tout sauf conviviaux, et surtout totalement opaques dans leur fonctionnement du point de vue de l'usager. Je suis persuadé que de nombreux chemins mènent à cette même frustration, que ce soit par une volonté de maîtriser ses outils (sur les aspects de réparabilité, convivialité, etc...), de sécuriser ses données personnelles, de se libérer des réseaux et outils hégémoniques des GAFAM, de diminuer ses dépenses en moyens technologiques ou dans l'obsolescence des outils numériques, de soutenir les initiatives du monde du libre et de l'open source, etc... + +L'idée ici est donc de proposer les moyens que j'ai sélectionné pour me libérer des GAFAM autant que possible. J'y discute les avantages ainsi que les limites de cette transition. J'y expose aussi quelques unes des méthodes (perfectibles) que j'ai mis en place, la démarche intellectuelle (personnelle) que j'ai suivi et des pistes destinées à passer le pas (ce qui peut être rapidement vertigineux). Je n'aime pas proposer une "checklist" à suivre, cela n'est pas un guide pas-à-pas, mais plutôt le moyen de suivre un certain cheminement de pensée et comprendre les choix que j'ai fait. + +Je ne prétend pas être un fin connaisseur des architectures numériques (disons que je me débrouille assez pour mes besoins), à vous de vérifier mes dires (et éventuellement me faire des retours). Cela représente deux années de travail et de réflexion (et pas mal de galères :p). C'est un travail continu, qui évolue constamment à l'usage (et qui est donc très personnel). J'espère donner des pistes pour que chacun.e puisse plus facilement s'émanciper. +# Dégoogliser son téléphone +## Quitter Google (et Microsoft, etc...) +Il y a plusieurs raisons de quitter Google. Si d'abord j'avais entamé ma transition vers Linux par frustration vis-à-vis de Microsoft Windows, j'ai passé le pas pour Google pour d'autres raisons. Non pas que je trouvais l'interface conviviale (au contraire), mais car cela impliquait des changements dans mon usage plus profonds et plus risqués par rapport à mes accès à différents réseaux. L'élément déclencheur a plutôt été lié à la protection de mes données personnelles, dans une période où j'avais particulièrement besoin d'avoir confiance en ce que je partage ou non à des services tiers. + +L'adage "si c'est gratuit c'est que c'est toi le produit" s'applique sans aucun souci à Google (et aux GAFAM en général). Proposer des services gratuits, et se rémunérer en fournissant les données des utilisateurices récoltées à l'intention d'agences publicitaires et/ou d'opinion. C'est un moyen central de renouvellement de l'hégémonie de la société de consommation, qui permet de modeler de manière adaptative les besoins des potentiels consommateurices. Cette méthode de surveillance et de profilage généralisée est un danger pour la démocratie, notamment à l'ère ou les multinationales qui détiennent nos données détiennent un monopole et militent activement pour le maintien et le développement des oppressions de classe, coloniales, patriarcales, etc... Les patrons de la tech américaine (qui sont les fournisseurs principaux des services dans le monde entier), ne se cachent même plus dans leur eugénisme, leur racisme décomplexé et leurs haine du peuple et des travailleureuses. Les données récoltées servent directement l'appareil d'État, OpenAI ayant montré en France que des requêtes ChatGPT pouvaient mener à une interpellation musclée par la police française. De même, les milices ICE aux États Unis se servent abondamment dans les données leurs permettant de cibler et emprisonner arbitrairement des personnes sur le sol américain. À tout cela, j'ai beaucoup entendu "je n'ai rien à cacher, je ne vois pas le problème personnellement"... demain, cela deviendra peut-être un besoin vital de ne pas être traqué par nos appareils (cf [source](https://www.bfmtv.com/tech/vie-numerique/aux-etats-unis-l-ice-a-envoye-des-centaines-de-demandes-aux-gafam-jusqu-alors-reservees-a-des-enquetes-criminelles-afin-d-identifier-de-simples-opposants-a-la-politique-de-donald-trump_AN-202602160440.html)). + +Mais au delà de ces préoccupations politiques, c'est aussi une émancipation. J'étais personnellement frustré de voir mon espace disponible lentement se remplir, jusqu'à saturer la mémoire de mon appareil, et voir les applications impossibles à désinstaller venant avec les services de Google. J'avais une 15aine d'applications sur mon écran d'accueil que je n'utilisais pas, qui récupéraient pourtant mes données, et que je ne pouvais pas supprimer ou bloquer. Je ne maîtrisais pas la sécurité de mon appareil, tout étant délégué à des services en lesquels je n'avais pas confiance (dois-je vraiment me protéger de potentiels virus me volant mes données, quand les services censés me protéger transmettent déjà mes données à Google ?). En quittant Google, je peux sécuriser mon téléphone en connaissant les informations qui rentrent et sortent de mon appareil, et en ayant une idée (même vague) d'où elles sont envoyées. Je peux aussi décider d'empêcher certains services d'agir (même si cela implique un fonctionnement moins performant). + +Enfin, un dernier point porte sur les politiques récentes de Google vis-à-vis des applications libres et open source. D'ici septembre 2026, installer des applications libres et open source dont l'identité des développeureuses ne serait pas validée par Google deviendra impossible sur les appareils utilisant Google. Un moyen pour le géant de la tech d'écraser toute concurrence à son modèle économique. J'utilisais déjà des applications provenant du dépôt FossDroid, principal concerné par les restrictions, et c'est l'événement qui a déclenché le passage à l'acte de dégooglisation (Cf [source](https://keepandroidopen.org/en/)). + +### Définir ses besoins +Le processus de dégooglisation est plus qu'un simple changement de système d'exploitation. Il s'agit plutôt de changer de paradigme, hors du cadre imposé par Google sur l'ensemble des appareils. Et donc, il faut aussi réflechir aussi à quel cadre nous impose Google. + +Ce cadre, c'est celui de la création de besoin par la disponibilité du produit D'abord, à l'aide d'applications imposées (la suite Google, comme Youtube, Google Drive, etc...): le produit existe sur mon appareil, c'est bien qu'il doit répondre à un besoin que j'ai. Ensuite, par la construction des applications (notamment l'App Store), qui nous proposent des fonctionnalités à "explorer", pour se rendre compte que nous avions terriblement besoin de cet outil que nous n'avions jamais demandé auparavant. Ce cadre constitue la structure, basée sur l'addiction à la nouveauté permanente et à la mise sous dépendance d'usage de chaque nouvelle application. Cela crée une décorrelation entre le besoin réel et le produit de consommation, qui est néfaste autant pour le consommateur que pour les développeureuses, qui ne créent plus pour répondre à des besoins d'usagers mais pour les rendre addict, et par là accroître le capital des actionnaires. Sortir de ce paradigme, c'est faire la démarche inverse: définir ses besoins, puis évaluer les produits existants pouvant y répondre (et créer son outil s'il n'existe pas). C'est aussi s'interroger sur le coût (humain, écologique, financier, sociétal) des outils et les risques que j'encours (sur ma vie privée, sur les conséquences possibles sur ma santé...), à mettre sur la balance face à notre sentiment de besoin (est-ce que cela vaut le coût de subvenir à ce besoin, est-il essentiel ?). + +Pour changer de manière d'aborder les choses, suivre la philosophie UNIX peut-être intéressante. Elle se formule généralement avec la phrase "do one thing and do it well", c'est-à-dire qu'une bonne application est une application mono-tâche qui accomplit ce qu'on lui demande de la manière dont on lui demande. C'est une philosophie largement répandue dans le monde de l'open source et du libre, qui permet souvent des applications très efficaces dans leur domaine (pas forcément mais la spécialisation aide souvent). + +Ainsi, en réfléchissant à tous ces axes (risques, coût, besoins, nécessité), j'ai pu définir mes besoins. Évidemment, ils sont amenés à évoluer, et surtout sont modelés par mes usages passés dans le cadre du paradigme précédent et de la société qui agit sur moi: ais-je vraiment besoin d'Instagram ? Je sais que mon besoin de réseaux sociaux comme Instagram est plus une addiction, et tendra peut-être à diminuer (jusqu'à être compensée par le risque de profilage que l'application représente) si j'arrive à trouver l'énergie de me sevrer... et dans ce cas se transformera, peut-être vers des applications semblables, libres et plus saines dans leur construction. Ces besoins sont donc: + +- pouvoir communiquer à travers mes réseaux (téléphone, messageries, réseaux sociaux, mails, gestionnaire de contacts) +- avoir accès à des services essentiels pour moi (streaming musical et vidéo, accès à mes comptes bancaires, aux applications de transports, appareil photo...) +- avoir un accès sécurisé à internet (sans traqueurs, sans pubs) +- avoir un appareil sécurisé me permettant la double authentification (2FA) +- pouvoir couper les services quand je ne les utilise pas (autant au niveau software que hardware, en particulier micro, caméra, localisation, internet) +- minimiser les données que je transmet si elles ne sont pas utiles ou sécurisées suffisamment pour que j'accorde ma confiance au service qui les détient +- limiter mon exposition aux publicités ciblées +- minimiser le risque de fuites de données personnelles + +Pour subvenir à ces besoins, j'ai identifié plusieurs pistes: + +- adopter un comportement en ligne responsable et éclairé + - continuer à suivre les bases, à savoir éviter le phishing, les sites internet non sécurisés et inconnus, éviter de télécharger des fichiers sur internet les yeux fermés, refuser les cookies sur les sites, ... + - utiliser des mots de passe forts (et un gestionnaire de mot de passe en lequel j'ai confiance) + - utiliser au maximum un VPN au quotidien + - m'informer sur les risques liés aux fuites de données (par exemple grâce à [la Quadrature du Net](https://www.laquadrature.net/) mais aussi d'autres ressources en ligne aussi diverses que variées +- changer mon téléphone pour une marque qui me permet de quitter google (FairPhone en l'occurence) +- changer de système d'exploitation pour une version sans Google +- quitter un à un les services de Google, et passer tous mes comptes essentiels sur une nouvelle adresse mail, ou demander la suppression des données si le service est non-essentiel +- adopter la philosophie UNIX pour les applications alternatives que j'adopte ("do one thing and do it well") + +Un sacré travail en perspective ! + +### Le plus difficile : lister ses comptes associés à Google +S'il y a une chose à faire en premier (car c'est LONG), c'est bien de préparer la suppression de son compte google (et donc la fermeture de son adresse Gmail). Le plus simple (pour commencer par le commencement), c'est de récupérer ses données. Une part de données (qui ne seront probablement jamais utiles) peut être récupérée via Google Takeout. Cela peut notamment être intéressant pour transférer ses abonnements youtubes sous un nouveau service en local (par exemple PipePipe ou NewPipe), ou encore exporter et archiver ses mails au format Mbox en local, pour plus tard pouvoir y accéder via Thunderbird par exemple. Dès lors que l'ensemble des mails sont sauvegardés, ils peuvent être supprimés sur gmail (intéressant quand on sait que Google et Microsoft se préparent à l'accès total de tous nos mails pour leurs services d'IA à des fins d'entraînement) et enfin enregistrer les contacts sauvegardés sur notre compte google. Il s'agit ensuite de vider les différents cloud (Google Drive, ou autres cloud détenus par les GAFAM), pour stocker tout en local. + +Cette phase est relativement longue, car Google détient beaucoup de données, et il serait malvenu de supprimer son compte avant de découvrir que nos contacts sont enregistrés chez eux et les perdre intégralement. + +Ensuite, l'étape la plus longue est celle consistant à retrouver toutes les occurences de mon adresse gmail sur les comptes que j'ai pu créer. C'est mon problème principal encore aujourd'hui, car j'ai une adresse gmail depuis 2013, à laquelle sont liés 100% des comptes que j'ai créé en 13 ans. Je n'ai évidemment jamais noté les comptes que je créais. J'attend, pour supprimer mon compte google, de ne plus avoir peur de perdre des services essentiels qui seraient dépendants de mon accès à mon adresse gmail. J'ai trouvé quelques techniques pour aider à retrouver ses différents comptes: + +- un premier moyen est de vérifier les services connectés à notre compte google (via internet, gérer mon compte google - Applis et services tiers). +- ensuite, on peut aussi regarder les mails automatiques de création de compte reçus sur notre adresse gmail (sauf si on les a, comme moi, supprimés au fur et à mesure). +- enfin, on peut définir une période (6 mois par exemple) où on conservera l'adresse, et où à chaque utilisation d'un compte lié à gmail, on changera l'adresse liée. Au bout de 6 mois, on peut imaginer que les services oubliés ne sont pas à ce point essentiels. + +Une attention particulière peut être portée sur le changement d'adresse mail pour les services de l'État, qui peuvent devenir très embêtants si on perd l'adresse mail en question, surtout sachant que l'Identité numérique (qui permet de se connecter à tous les services de l'État) ne fonctionne pas sans les services de Google. Aussi, pour réduire la masse de comptes à modifier, un moyen peut aussi être de réfléchir encore une fois aux services dont j'ai réellement besoin (ce qui réduit drastiquement la liste, et surtout permet de trouver rapidement les services concernés). Ce qui ne veut pas dire que je vais oublier simplement les comptes restants, car mon objectif est aussi de supprimer ces comptes, ou si cela n'est pas possible facilement demander la suppression de mes données personnelles (merci les RGPD !). + +Un problème majeur peut subsister, notamment si l'usage de services de google est nécessaire dans le cadre des études, du travail, de la famille... Pour les deux premiers, il est toujours possible de créer un nouveau compte Google, sans données permettant notre identification, et strictement utilisé dans le cadre du travail. Pour la famille... à vous de les convaincre de quitter aussi les GAFAM (l'occasion aussi de montrer à quel point l'accessibilité peut-être simplifié sans les innombrables services inutiles de Google). +#### Remplacer son adresse gmail +Pour pouvoir changer ses différents comptes liés à gmail, il faut évidemment trouver un service d'hébergement d'adresse mail alternatif. Dans ce cas, j'utilise ProtonMail (j'y paye l'abonnement de base), un service Suisse sécurisé. Il existe de nombreux fournisseurs similaires, comme TutaMail, FastMail... Reste aussi la possibilité d'auto-héberger son service de mail, ou de passer par un [Chaton](https://www.chatons.org/), ou en achetant de l'espace sur des serveurs de son choix. Je ne donne pas vraiment de raison à mon choix de Proton (je l'ai fait sans vraiment réflechir, c'était une décision que j'ai prise au tout début de mon parcours). Un désavantage certain est que la version gratuite ne permet pas de recevoir des mails sous Thunderbird (mais la version payante de base est abordable, et le service est de qualité). L'entreprise n'est aussi peut-être pas la plus éthique, j'ai pu voir des critiques ici et là sur sa politique. Aussi, Proton est peut-être un des seuls services que j'utilise qui dérogent à la règle "do one thing but do it well" (ils proposent un agenda, un mail, et un drive, ainsi qu'un gestionnaire de mot de passe et un VPN que je n'utilise pas), mais c'est une solution de facilité que j'ai trouvé en attendant de faire mieux. Un avantage (et je crois que Tuta le permet aussi) est que l'on peut régler une redirection des mails Gmail vers Proton, ce qui aide à se détacher de Google pendant les 6 mois de prospection des comptes associés à gmail. Il est aussi possible d'avoir plusieurs alias, menant à la même adresse, ce qui est assez pratique pour se prémunir du spam. + +Sur le point de l'auto-hébergement, ou de l'usage d'un serveur personnel distant, je ne m'y suis pas encore attelé, mais c'est en projet car cela ouvre beaucoup de possibilités, notamment d'héberger un cloud par exemple. +#### En profiter pour changer ses mots de passe +Modifier son adresse mail sur ses comptes, c'est aussi l'occasion rêvée de changer ses mots de passe ! Le mauvais usage est généralement d'utiliser des mots de passe identiques, ou des "patterns" faciles à retenir pour se souvenir de tous ses mots de passe. C'est un moyen très facile pour les hackers de récupérer nos accès quand nos identifiants fuitent sur un site ou un autre, aussi un mot de passe fort et différent pour chaque compte est essentiel. Mais c'est embêtant, et la solution du calepin de mots de passe est une fausse bonne idée (il peut-être perdu, volé, etc...). + +J'utilise un gestionnaire de mot de passe sécurisé par un mot de passe dit "maître", c'est-à-dire un mot de passe long mais unique, qui permet de débloquer tous les autres. Ma préférence s'est portée sur BitWarden, car il permet de stocker en local et de manière chiffrée tous ses mots de passe, et propose le remplissage automatique sur internet (sous réserve de s'être connecté à l'aide de son mot de passe maître précédemment). Il suffit alors de laisser bitwarden générer de nouveaux mot de passe forts (environ 14-16 caractères, avec majuscules, chiffres et caractères spéciaux), avoir un mot de passe maître unique en tête (25 caractères environ), et tout enregistrer sur le gestionnaire de mot de passes. Il existe évidemment des alternatives qui fournissent le même service, comme Proton qui propose son propre gestionnaire par exemple, ou encore des outils fonctionnant en local comme Keypass (connu pour être plus sécurisé que Bitwarden). + +## Changer de système d'exploitation +La plupart des téléphones sont aujourd'hui vendus nativement avec une version d'Android fonctionnant avec les services de Google (sans possibilité de les enlever). Certains d'entre eux sont même quasi-impossibles à "root" (c'est-à-dire prendre le contrôle pour installer un noyau de notre choix). Il s'agit donc de trouver les systèmes d'exploitation disponibles pour son téléphone. + +Les différentes versions existantes sur le marché sont généralement basées sur Android (les autres versions de Linux n'étant pas à la hauteur aujourd'hui): + +- postMarketOS (beaucoup de compatibilités, sert notamment au reconditionnement de vieux appareils) +- /e/OS (version très proche des android de google, mais sans la présence obligatoire des services google, beaucoup de compatibilités) +- LineageOS (version d'android complètement dégooglisée, servie avec une configuration minimale, assez compatible avec les appareils) +- GrapheneOS (uniquement compatible avec les Google Pixel, très sécurisé et performant) + +De manière générale, les téléphones les plus faciles à dégoogliser sont (étonnament) les Google Pixel. Les constructeurs alternatifs peuvent aussi être intéressants, par exemple FairPhone qui propose même des téléphones directement sous /e/OS à l'achat (ce qui évite des manipulations sensibles). + +Si le téléphone n'est pas directement livré avec le système d'exploitation, il faut chercher sur Internet, pour son téléphone en particulier, la compatibilité et la procédure à suivre pour le rooter. LineageOS par exemple propose un tutoriel pour chaque appareil supporté, à suivre du début à la fin pour installer un nouvel OS. De manière générale, il faudra utiliser un ordinateur, et suivre les procédures, qui impliqueront l'utilisation de "fastboot" et "adb", des outils dédiés pour la gestion d'Android par ligne de commande depuis un ordinateur. Comme souvent, "suivre le tutoriel" est la solution (le plus difficile est de trouver le tutoriel, puis de régler les problèmes à l'aide de reddit et stackoverflow). + +J'utilise personnellement LineageOS, avec Trébuchet comme gestionnaire d'affichage (servi nativement), et en suis très heureux pour le moment. Au niveau du noyau, les services de Google ne sont pas actifs, et la sécurité est gérée par un outil linux intégré à Lineage. Mon téléphone est aussi chiffré (ses données ne sont pas déchiffrables sans accès autorisé au téléphone). +## Sécuriser son accès à Internet +Pour sécuriser mes accès au réseau (et notamment éviter de donner mon adresse IP librement), j'utilise un VPN. Je le couple à un bloqueur de DNS qui permet d'empêcher les publicités intempestives. Ces services sont généralement payants, avec des fournisseurs assez variés. Au long de mes recherches, les meilleures possibilités que j'ai trouvées sont probablement Proton VPN, et Mullvad VPN. Personnellement, j'utilise Mullvad car c'est un des services les plus avancés et sûrs (création de compte sans identifiants tels que mail et téléphone, plusieurs méthodes de blocage des traqueurs de données, prix bloqué et assuré à 5€ par mois, garanties avérées de protections des données, bloqueurs de DNS intégrés). + +De plus, j'évite d'utiliser au maximum des navigateurs internet privés (Google Chrome et Microsoft Edge pour ne pas les citer). À la place il y a l'embarras du choix: Brave, Firefox (et ses nombreuses branches), Tor... Personnellement, après plusieurs essais j'utilise Firefox, avec AdBlock en extension. + +Enfin, j'évite aussi le moteur de recherche de Google (qui propose en abondance du contenu sponsorisé et des AIslop articles en boucle). Deux solutions ici, DuckDuckGo (qui a le mérite de fonctionner assez bien, et sur lequel il est possible de supprimer l'utilisation de l'IA pour la recherche) ou Searxng, qui propose différents fournisseurs d'agrégateurs de moteurs de recherche, avec des variations selon les instances (voir [instances](https://searx.space/)). + +Au delà, la sécurité est toujours un compromis. Les bonnes pratiques (ne pas installer depuis des dépôts inconnus, faire régulièrement ses mises à jour, n'autoriser que le strict nécessaire à notre usage de l'application) suffisent généralement à minimiser le risque. Cela ne fera jamais de risque zéro, l'essentiel est d'être un minimum au courant des risques encourus quand on installe quelque chose. + +## Trouver des alternatives +Maintenant que l'usage du téléphone est sécurisé (autant que possible, la sécurité parfaite n'existe pas), il s'agit de subvenir aux besoins restants, et donc d'installer les applications associées. Pour l'usage classique du téléphone, des services sont déjà présents sur Lineage (appels, sms, agenda, calculatrice, ...) avec des applications open source. Pour le reste, l'idée pour éviter Google est de ne pas passer par le Google Play Store. Il y a peu d'alternatives, mais elles existent: d'abord, le téléchargement direct des fichiers d'applications via apkmirror sur internet... ce qui n'est pas vraiment recommandé, notamment pour la gestion des mises à jour. Ensuite, l'utilisation de gestionnaires de dépôts, comme F-droid qui fournit des applications libre et open source (FOSS en anglais). Ensuite, pour ce qui n'existe pas sur F-droid, j'utilise Aurora Store, qui est une "copie" du play store sans nécessité de se connecter à un compte Google (mode "anonyme"). + +Quand j'installe des applications, je me pose les questions suivantes: + +- est-ce que l'application répond à un besoin essentiel pour moi ? +- est-ce qu'elle respecte la philosophie Unix (do one thing but do it well) ? +- est-elle libre et open source, ou existe-t-il une alternative libre et open source ? +- quel est le risque que je prend avec cette application ? +- ai-je un moyen de diminuer ce risque ? + +En considérant la réponse à chaque question, j'estime si le compromis entre les avantages et inconvénients apportés me convient. Cela m'évite d'installer "compulsivement" des applications qui ne vont faire qu'aspirer mon attention sans que je l'accepte vraiment (ou pas, mais on se sépare difficilement des addictions implantées par des années d'usage des services des GAFAM). + +Sur l'évaluation des risques, je pars généralement du principe que F-droid me donne les informations sur les risques (c'est en général écrit dans la description), et je compte ensuite sur Aurora pour détecter les différents traqueurs présents dans mes applications. + +Sur la diminution des risques, j'utilise un 3ème outil (après F-droid et Aurora Store): ReVanced. C'est un outil de "patch" sur les applications, qui va venir changer le code source pour éviter certains services, traqueurs, gestionnaires de pubs... C'est en même temps un bénéfice (j'évite des traqueurs des GAFAM dans les applications supportées) et en même temps un risque (toucher au code source via des apk en ligne peut toujours comporter des risques de virus). + +Une note importante: toutes les applications ne fonctionnent pas sans les services de Google. Pour ne pas la citer, "l'identité numérique" (je la cite quand même), service de l'état français, ne fonctionne pas sans services de Google. Il me semble qu'il existe des alternatives libres, comme microG, mais je ne me suis pas encore penché sur ça. + +## Prendre conscience des risques restants +**Il n'y a pas d'usage sans risque**, l'essentiel est ici d'être conscient des failles (et d'agir en conséquences). Je sais par exemple que Facebook Messenger, Instagram, mes applications de banque, ... possèdent des traqueurs connus (Google advertisment par exemple). J'essaie donc au maximum de diminuer progressivement mon empreinte numérique sur ces applications, et si pas possible au moins à sécuriser au maximum mon usage de ces dernières. + +Un point sur lequel je me pose aussi des questions (avec peu de réponses) est sur la sécurité des applications. Je ne sais pas vraiment quand je peux me fier ou non à telle ou telle application. Je n'ai toujours pas de réponse sur ça. +## Liste de mes alternatives + +![appchange](~/dotfiles_arch/tutoriels/appchange.svg) + + + +## Ressources + +[Subreddit degoogle](https://www.reddit.com/r/degoogle/wiki/index/) diff --git a/config/Typora/draftsRecover/2026-5-4 degoogle 125119.md b/config/Typora/draftsRecover/2026-5-4 degoogle 125119.md new file mode 100644 index 0000000..343decd --- /dev/null +++ b/config/Typora/draftsRecover/2026-5-4 degoogle 125119.md @@ -0,0 +1,128 @@ +# Introduction + +Ce tutoriel est un résumé de mes réflexions personnelles tout au long de ma démarche de **ré-appropriation de mes moyens de production individuels**, à savoir mon ordinateur et mon téléphone portable. Cette démarche est issue d'une frustration vis-à-vis des outils proposés par Google et Microsoft, qui sont tout sauf conviviaux, et surtout totalement opaques dans leur fonctionnement du point de vue de l'usager. Je suis persuadé que de nombreux chemins mènent à cette même frustration, que ce soit par une volonté de maîtriser ses outils (sur les aspects de réparabilité, convivialité, etc...), de sécuriser ses données personnelles, de se libérer des réseaux et outils hégémoniques des GAFAM, de diminuer ses dépenses en moyens technologiques ou dans l'obsolescence des outils numériques, de soutenir les initiatives du monde du libre et de l'open source, etc... + +L'idée ici est donc de proposer les moyens que j'ai sélectionné pour me libérer des GAFAM autant que possible. J'y discute les avantages ainsi que les limites de cette transition. J'y expose aussi quelques unes des méthodes (perfectibles) que j'ai mis en place, la démarche intellectuelle (personnelle) que j'ai suivi et des pistes destinées à passer le pas (ce qui peut être rapidement vertigineux). Je n'aime pas proposer une "checklist" à suivre, cela n'est pas un guide pas-à-pas, mais plutôt le moyen de suivre un certain cheminement de pensée et comprendre les choix que j'ai fait. + +Je ne prétend pas être un fin connaisseur des architectures numériques (disons que je me débrouille assez pour mes besoins), à vous de vérifier mes dires (et éventuellement me faire des retours). Cela représente deux années de travail et de réflexion (et pas mal de galères :p). C'est un travail continu, qui évolue constamment à l'usage (et qui est donc très personnel). J'espère donner des pistes pour que chacun.e puisse plus facilement s'émanciper. +# Dégoogliser son téléphone +## Quitter Google (et Microsoft, etc...) +Il y a plusieurs raisons de quitter Google. Si d'abord j'avais entamé ma transition vers Linux par frustration vis-à-vis de Microsoft Windows, j'ai passé le pas pour Google pour d'autres raisons. Non pas que je trouvais l'interface conviviale (au contraire), mais car cela impliquait des changements dans mon usage plus profonds et plus risqués par rapport à mes accès à différents réseaux. L'élément déclencheur a plutôt été lié à la protection de mes données personnelles, dans une période où j'avais particulièrement besoin d'avoir confiance en ce que je partage ou non à des services tiers. + +L'adage "si c'est gratuit c'est que c'est toi le produit" s'applique sans aucun souci à Google (et aux GAFAM en général). Proposer des services gratuits, et se rémunérer en fournissant les données des utilisateurices récoltées à l'intention d'agences publicitaires et/ou d'opinion. C'est un moyen central de renouvellement de l'hégémonie de la société de consommation, qui permet de modeler de manière adaptative les besoins des potentiels consommateurices. Cette méthode de surveillance et de profilage généralisée est un danger pour la démocratie, notamment à l'ère ou les multinationales qui détiennent nos données détiennent un monopole et militent activement pour le maintien et le développement des oppressions de classe, coloniales, patriarcales, etc... Les patrons de la tech américaine (qui sont les fournisseurs principaux des services dans le monde entier), ne se cachent même plus dans leur eugénisme, leur racisme décomplexé et leurs haine du peuple et des travailleureuses. Les données récoltées servent directement l'appareil d'État, OpenAI ayant montré en France que des requêtes ChatGPT pouvaient mener à une interpellation musclée par la police française. De même, les milices ICE aux États Unis se servent abondamment dans les données leurs permettant de cibler et emprisonner arbitrairement des personnes sur le sol américain. À tout cela, j'ai beaucoup entendu "je n'ai rien à cacher, je ne vois pas le problème personnellement"... demain, cela deviendra peut-être un besoin vital de ne pas être traqué par nos appareils (cf [source](https://www.bfmtv.com/tech/vie-numerique/aux-etats-unis-l-ice-a-envoye-des-centaines-de-demandes-aux-gafam-jusqu-alors-reservees-a-des-enquetes-criminelles-afin-d-identifier-de-simples-opposants-a-la-politique-de-donald-trump_AN-202602160440.html)). + +Mais au delà de ces préoccupations politiques, c'est aussi une émancipation. J'étais personnellement frustré de voir mon espace disponible lentement se remplir, jusqu'à saturer la mémoire de mon appareil, et voir les applications impossibles à désinstaller venant avec les services de Google. J'avais une 15aine d'applications sur mon écran d'accueil que je n'utilisais pas, qui récupéraient pourtant mes données, et que je ne pouvais pas supprimer ou bloquer. Je ne maîtrisais pas la sécurité de mon appareil, tout étant délégué à des services en lesquels je n'avais pas confiance (dois-je vraiment me protéger de potentiels virus me volant mes données, quand les services censés me protéger transmettent déjà mes données à Google ?). En quittant Google, je peux sécuriser mon téléphone en connaissant les informations qui rentrent et sortent de mon appareil, et en ayant une idée (même vague) d'où elles sont envoyées. Je peux aussi décider d'empêcher certains services d'agir (même si cela implique un fonctionnement moins performant). + +Enfin, un dernier point porte sur les politiques récentes de Google vis-à-vis des applications libres et open source. D'ici septembre 2026, installer des applications libres et open source dont l'identité des développeureuses ne serait pas validée par Google deviendra impossible sur les appareils utilisant Google. Un moyen pour le géant de la tech d'écraser toute concurrence à son modèle économique. J'utilisais déjà des applications provenant du dépôt FossDroid, principal concerné par les restrictions, et c'est l'événement qui a déclenché le passage à l'acte de dégooglisation (Cf [source](https://keepandroidopen.org/en/)). + +### Définir ses besoins +Le processus de dégooglisation est plus qu'un simple changement de système d'exploitation. Il s'agit plutôt de changer de paradigme, hors du cadre imposé par Google sur l'ensemble des appareils. Et donc, il faut aussi réflechir aussi à quel cadre nous impose Google. + +Ce cadre, c'est celui de la création de besoin par la disponibilité du produit. D'abord, à l'aide d'applications imposées (la suite Google, comme Youtube, Google Drive, etc...): le produit existe sur mon appareil, c'est bien qu'il doit répondre à un besoin que j'ai. Ensuite, par la construction des applications (notamment l'App Store), qui nous proposent des fonctionnalités à "explorer", pour se rendre compte que nous avions terriblement besoin de cet outil que nous n'avions jamais demandé auparavant. Ce cadre constitue la structure, basée sur l'addiction à la nouveauté permanente et à la mise sous dépendance d'usage de chaque nouvelle application. Cela crée une décorrelation entre le besoin réel et le produit de consommation, qui est néfaste autant pour le consommateur que pour les développeureuses, qui ne créent plus pour répondre à des besoins d'usagers mais pour les rendre addict, et par là accroître le capital des actionnaires. Sortir de ce paradigme, c'est faire la démarche inverse: définir ses besoins, puis évaluer les produits existants pouvant y répondre (et créer son outil s'il n'existe pas). C'est aussi s'interroger sur le coût (humain, écologique, financier, sociétal) des outils et les risques que j'encours (sur ma vie privée, sur les conséquences possibles sur ma santé...), à mettre sur la balance face à notre sentiment de besoin (est-ce que cela vaut le coût de subvenir à ce besoin, est-il essentiel ?). + +Pour changer de manière d'aborder les choses, suivre la philosophie UNIX peut-être intéressante. Elle se formule généralement avec la phrase "do one thing and do it well", c'est-à-dire qu'une bonne application est une application mono-tâche qui accomplit ce qu'on lui demande de la manière dont on lui demande. C'est une philosophie largement répandue dans le monde de l'open source et du libre, qui permet souvent des applications très efficaces dans leur domaine (pas forcément mais la spécialisation aide souvent). + +Ainsi, en réfléchissant à tous ces axes (risques, coût, besoins, nécessité), j'ai pu définir mes besoins. Évidemment, ils sont amenés à évoluer, et surtout sont modelés par mes usages passés dans le cadre du paradigme précédent et de la société qui agit sur moi: ais-je vraiment besoin d'Instagram ? Je sais que mon besoin de réseaux sociaux comme Instagram est plus une addiction, et tendra peut-être à diminuer (jusqu'à être compensée par le risque de profilage que l'application représente) si j'arrive à trouver l'énergie de me sevrer... et dans ce cas se transformera, peut-être vers des applications semblables, libres et plus saines dans leur construction. Ces besoins sont donc: + +- pouvoir communiquer à travers mes réseaux (téléphone, messageries, réseaux sociaux, mails, gestionnaire de contacts) +- avoir accès à des services essentiels pour moi (streaming musical et vidéo, accès à mes comptes bancaires, aux applications de transports, appareil photo...) +- avoir un accès sécurisé à internet (sans traqueurs, sans pubs) +- avoir un appareil sécurisé me permettant la double authentification (2FA) +- pouvoir couper les services quand je ne les utilise pas (autant au niveau software que hardware, en particulier micro, caméra, localisation, internet) +- minimiser les données que je transmet si elles ne sont pas utiles ou sécurisées suffisamment pour que j'accorde ma confiance au service qui les détient +- limiter mon exposition aux publicités ciblées +- minimiser le risque de fuites de données personnelles + +Pour subvenir à ces besoins, j'ai identifié plusieurs pistes: + +- adopter un comportement en ligne responsable et éclairé + - continuer à suivre les bases, à savoir éviter le phishing, les sites internet non sécurisés et inconnus, éviter de télécharger des fichiers sur internet les yeux fermés, refuser les cookies sur les sites, ... + - utiliser des mots de passe forts (et un gestionnaire de mot de passe en lequel j'ai confiance) + - utiliser au maximum un VPN au quotidien + - m'informer sur les risques liés aux fuites de données (par exemple grâce à [la Quadrature du Net](https://www.laquadrature.net/) mais aussi d'autres ressources en ligne aussi diverses que variées +- changer mon téléphone pour une marque qui me permet de quitter google (FairPhone en l'occurence) +- changer de système d'exploitation pour une version sans Google +- quitter un à un les services de Google, et passer tous mes comptes essentiels sur une nouvelle adresse mail, ou demander la suppression des données si le service est non-essentiel +- adopter la philosophie UNIX pour les applications alternatives que j'adopte ("do one thing and do it well") + +Un sacré travail en perspective ! + +### Le plus difficile : lister ses comptes associés à Google +S'il y a une chose à faire en premier (car c'est LONG), c'est bien de préparer la suppression de son compte google (et donc la fermeture de son adresse Gmail). Le plus simple (pour commencer par le commencement), c'est de récupérer ses données. Une part de données (qui ne seront probablement jamais utiles) peut être récupérée via Google Takeout. Cela peut notamment être intéressant pour transférer ses abonnements youtubes sous un nouveau service en local (par exemple PipePipe ou NewPipe), ou encore exporter et archiver ses mails au format Mbox en local, pour plus tard pouvoir y accéder via Thunderbird par exemple. Dès lors que l'ensemble des mails sont sauvegardés, ils peuvent être supprimés sur gmail (intéressant quand on sait que Google et Microsoft se préparent à l'accès total de tous nos mails pour leurs services d'IA à des fins d'entraînement) et enfin enregistrer les contacts sauvegardés sur notre compte google. Il s'agit ensuite de vider les différents cloud (Google Drive, ou autres cloud détenus par les GAFAM), pour stocker tout en local. + +Cette phase est relativement longue, car Google détient beaucoup de données, et il serait malvenu de supprimer son compte avant de découvrir que nos contacts sont enregistrés chez eux et les perdre intégralement. + +Ensuite, l'étape la plus longue est celle consistant à retrouver toutes les occurences de mon adresse gmail sur les comptes que j'ai pu créer. C'est mon problème principal encore aujourd'hui, car j'ai une adresse gmail depuis 2013, à laquelle sont liés 100% des comptes que j'ai créé en 13 ans. Je n'ai évidemment jamais noté les comptes que je créais. J'attend, pour supprimer mon compte google, de ne plus avoir peur de perdre des services essentiels qui seraient dépendants de mon accès à mon adresse gmail. J'ai trouvé quelques techniques pour aider à retrouver ses différents comptes: + +- un premier moyen est de vérifier les services connectés à notre compte google (via internet, gérer mon compte google - Applis et services tiers). +- ensuite, on peut aussi regarder les mails automatiques de création de compte reçus sur notre adresse gmail (sauf si on les a, comme moi, supprimés au fur et à mesure). +- enfin, on peut définir une période (6 mois par exemple) où on conservera l'adresse, et où à chaque utilisation d'un compte lié à gmail, on changera l'adresse liée. Au bout de 6 mois, on peut imaginer que les services oubliés ne sont pas à ce point essentiels. + +Une attention particulière peut être portée sur le changement d'adresse mail pour les services de l'État, qui peuvent devenir très embêtants si on perd l'adresse mail en question, surtout sachant que l'Identité numérique (qui permet de se connecter à tous les services de l'État) ne fonctionne pas sans les services de Google. Aussi, pour réduire la masse de comptes à modifier, un moyen peut aussi être de réfléchir encore une fois aux services dont j'ai réellement besoin (ce qui réduit drastiquement la liste, et surtout permet de trouver rapidement les services concernés). Ce qui ne veut pas dire que je vais oublier simplement les comptes restants, car mon objectif est aussi de supprimer ces comptes, ou si cela n'est pas possible facilement demander la suppression de mes données personnelles (merci les RGPD !). + +Un problème majeur peut subsister, notamment si l'usage de services de google est nécessaire dans le cadre des études, du travail, de la famille... Pour les deux premiers, il est toujours possible de créer un nouveau compte Google, sans données permettant notre identification, et strictement utilisé dans le cadre du travail. Pour la famille... à vous de les convaincre de quitter aussi les GAFAM (l'occasion aussi de montrer à quel point l'accessibilité peut-être simplifié sans les innombrables services inutiles de Google). +#### Remplacer son adresse gmail +Pour pouvoir changer ses différents comptes liés à gmail, il faut évidemment trouver un service d'hébergement d'adresse mail alternatif. Dans ce cas, j'utilise ProtonMail (j'y paye l'abonnement de base), un service Suisse sécurisé. Il existe de nombreux fournisseurs similaires, comme TutaMail, FastMail... Reste aussi la possibilité d'auto-héberger son service de mail, ou de passer par un [Chaton](https://www.chatons.org/), ou en achetant de l'espace sur des serveurs de son choix. Je ne donne pas vraiment de raison à mon choix de Proton (je l'ai fait sans vraiment réflechir, c'était une décision que j'ai prise au tout début de mon parcours). Un désavantage certain est que la version gratuite ne permet pas de recevoir des mails sous Thunderbird (mais la version payante de base est abordable, et le service est de qualité). L'entreprise n'est aussi peut-être pas la plus éthique, j'ai pu voir des critiques ici et là sur sa politique. Aussi, Proton est peut-être un des seuls services que j'utilise qui dérogent à la règle "do one thing but do it well" (ils proposent un agenda, un mail, et un drive, ainsi qu'un gestionnaire de mot de passe et un VPN que je n'utilise pas), mais c'est une solution de facilité que j'ai trouvé en attendant de faire mieux. Un avantage (et je crois que Tuta le permet aussi) est que l'on peut régler une redirection des mails Gmail vers Proton, ce qui aide à se détacher de Google pendant les 6 mois de prospection des comptes associés à gmail. Il est aussi possible d'avoir plusieurs alias, menant à la même adresse, ce qui est assez pratique pour se prémunir du spam. + +Sur le point de l'auto-hébergement, ou de l'usage d'un serveur personnel distant, je ne m'y suis pas encore attelé, mais c'est en projet car cela ouvre beaucoup de possibilités, notamment d'héberger un cloud par exemple. +#### En profiter pour changer ses mots de passe +Modifier son adresse mail sur ses comptes, c'est aussi l'occasion rêvée de changer ses mots de passe ! Le mauvais usage est généralement d'utiliser des mots de passe identiques, ou des "patterns" faciles à retenir pour se souvenir de tous ses mots de passe. C'est un moyen très facile pour les hackers de récupérer nos accès quand nos identifiants fuitent sur un site ou un autre, aussi un mot de passe fort et différent pour chaque compte est essentiel. Mais c'est embêtant, et la solution du calepin de mots de passe est une fausse bonne idée (il peut-être perdu, volé, etc...). + +J'utilise un gestionnaire de mot de passe sécurisé par un mot de passe dit "maître", c'est-à-dire un mot de passe long mais unique, qui permet de débloquer tous les autres. Ma préférence s'est portée sur BitWarden, car il permet de stocker en local et de manière chiffrée tous ses mots de passe, et propose le remplissage automatique sur internet (sous réserve de s'être connecté à l'aide de son mot de passe maître précédemment). Il suffit alors de laisser bitwarden générer de nouveaux mot de passe forts (environ 14-16 caractères, avec majuscules, chiffres et caractères spéciaux), avoir un mot de passe maître unique en tête (25 caractères environ), et tout enregistrer sur le gestionnaire de mot de passes. Il existe évidemment des alternatives qui fournissent le même service, comme Proton qui propose son propre gestionnaire par exemple, ou encore des outils fonctionnant en local comme Keypass (connu pour être plus sécurisé que Bitwarden). + +## Changer de système d'exploitation +La plupart des téléphones sont aujourd'hui vendus nativement avec une version d'Android fonctionnant avec les services de Google (sans possibilité de les enlever). Certains d'entre eux sont même quasi-impossibles à "root" (c'est-à-dire prendre le contrôle pour installer un noyau de notre choix). Il s'agit donc de trouver les systèmes d'exploitation disponibles pour son téléphone. + +Les différentes versions existantes sur le marché sont généralement basées sur Android (les autres versions de Linux n'étant pas à la hauteur aujourd'hui): + +- postMarketOS (beaucoup de compatibilités, sert notamment au reconditionnement de vieux appareils) +- /e/OS (version très proche des android de google, mais sans la présence obligatoire des services google, beaucoup de compatibilités) +- LineageOS (version d'android complètement dégooglisée, servie avec une configuration minimale, assez compatible avec les appareils) +- GrapheneOS (uniquement compatible avec les Google Pixel, très sécurisé et performant) + +De manière générale, les téléphones les plus faciles à dégoogliser sont (étonnament) les Google Pixel. Les constructeurs alternatifs peuvent aussi être intéressants, par exemple FairPhone qui propose même des téléphones directement sous /e/OS à l'achat (ce qui évite des manipulations sensibles). + +Si le téléphone n'est pas directement livré avec le système d'exploitation, il faut chercher sur Internet, pour son téléphone en particulier, la compatibilité et la procédure à suivre pour le rooter. LineageOS par exemple propose un tutoriel pour chaque appareil supporté, à suivre du début à la fin pour installer un nouvel OS. De manière générale, il faudra utiliser un ordinateur, et suivre les procédures, qui impliqueront l'utilisation de "fastboot" et "adb", des outils dédiés pour la gestion d'Android par ligne de commande depuis un ordinateur. Comme souvent, "suivre le tutoriel" est la solution (le plus difficile est de trouver le tutoriel, puis de régler les problèmes à l'aide de reddit et stackoverflow). + +J'utilise personnellement LineageOS, avec Trébuchet comme gestionnaire d'affichage (servi nativement), et en suis très heureux pour le moment. Au niveau du noyau, les services de Google ne sont pas actifs, et la sécurité est gérée par un outil linux intégré à Lineage. Mon téléphone est aussi chiffré (ses données ne sont pas déchiffrables sans accès autorisé au téléphone). +## Sécuriser son accès à Internet +Pour sécuriser mes accès au réseau (et notamment éviter de donner mon adresse IP librement), j'utilise un VPN. Je le couple à un bloqueur de DNS qui permet d'empêcher les publicités intempestives. Ces services sont généralement payants, avec des fournisseurs assez variés. Au long de mes recherches, les meilleures possibilités que j'ai trouvées sont probablement Proton VPN, et Mullvad VPN. Personnellement, j'utilise Mullvad car c'est un des services les plus avancés et sûrs (création de compte sans identifiants tels que mail et téléphone, plusieurs méthodes de blocage des traqueurs de données, prix bloqué et assuré à 5€ par mois, garanties avérées de protections des données, bloqueurs de DNS intégrés). + +De plus, j'évite d'utiliser au maximum des navigateurs internet privés (Google Chrome et Microsoft Edge pour ne pas les citer). À la place il y a l'embarras du choix: Brave, Firefox (et ses nombreuses branches), Tor... Personnellement, après plusieurs essais j'utilise Firefox, avec AdBlock en extension. + +Enfin, j'évite aussi le moteur de recherche de Google (qui propose en abondance du contenu sponsorisé et des AIslop articles en boucle). Deux solutions ici, DuckDuckGo (qui a le mérite de fonctionner assez bien, et sur lequel il est possible de supprimer l'utilisation de l'IA pour la recherche) ou Searxng, qui propose différents fournisseurs d'agrégateurs de moteurs de recherche, avec des variations selon les instances (voir [instances](https://searx.space/)). + +Au delà, la sécurité est toujours un compromis. Les bonnes pratiques (ne pas installer depuis des dépôts inconnus, faire régulièrement ses mises à jour, n'autoriser que le strict nécessaire à notre usage de l'application) suffisent généralement à minimiser le risque. Cela ne fera jamais de risque zéro, l'essentiel est d'être un minimum au courant des risques encourus quand on installe quelque chose. + +## Trouver des alternatives +Maintenant que l'usage du téléphone est sécurisé (autant que possible, la sécurité parfaite n'existe pas), il s'agit de subvenir aux besoins restants, et donc d'installer les applications associées. Pour l'usage classique du téléphone, des services sont déjà présents sur Lineage (appels, sms, agenda, calculatrice, ...) avec des applications open source. Pour le reste, l'idée pour éviter Google est de ne pas passer par le Google Play Store. Il y a peu d'alternatives, mais elles existent: d'abord, le téléchargement direct des fichiers d'applications via apkmirror sur internet... ce qui n'est pas vraiment recommandé, notamment pour la gestion des mises à jour. Ensuite, l'utilisation de gestionnaires de dépôts, comme F-droid qui fournit des applications libre et open source (FOSS en anglais). Ensuite, pour ce qui n'existe pas sur F-droid, j'utilise Aurora Store, qui est une "copie" du play store sans nécessité de se connecter à un compte Google (mode "anonyme"). + +Quand j'installe des applications, je me pose les questions suivantes: + +- est-ce que l'application répond à un besoin essentiel pour moi ? +- est-ce qu'elle respecte la philosophie Unix (do one thing but do it well) ? +- est-elle libre et open source, ou existe-t-il une alternative libre et open source ? +- quel est le risque que je prend avec cette application ? +- ai-je un moyen de diminuer ce risque ? + +En considérant la réponse à chaque question, j'estime si le compromis entre les avantages et inconvénients apportés me convient. Cela m'évite d'installer "compulsivement" des applications qui ne vont faire qu'aspirer mon attention sans que je l'accepte vraiment (ou pas, mais on se sépare difficilement des addictions implantées par des années d'usage des services des GAFAM). + +Sur l'évaluation des risques, je pars généralement du principe que F-droid me donne les informations sur les risques (c'est en général écrit dans la description), et je compte ensuite sur Aurora pour détecter les différents traqueurs présents dans mes applications. + +Sur la diminution des risques, j'utilise un 3ème outil (après F-droid et Aurora Store): ReVanced. C'est un outil de "patch" sur les applications, qui va venir changer le code source pour éviter certains services, traqueurs, gestionnaires de pubs... C'est en même temps un bénéfice (j'évite des traqueurs des GAFAM dans les applications supportées) et en même temps un risque (toucher au code source via des apk en ligne peut toujours comporter des risques de virus). + +Une note importante: toutes les applications ne fonctionnent pas sans les services de Google. Pour ne pas la citer, "l'identité numérique" (je la cite quand même), service de l'état français, ne fonctionne pas sans services de Google. Il me semble qu'il existe des alternatives libres, comme microG, mais je ne me suis pas encore penché sur ça. + +## Prendre conscience des risques restants +**Il n'y a pas d'usage sans risque**, l'essentiel est ici d'être conscient des failles (et d'agir en conséquences). Je sais par exemple que Facebook Messenger, Instagram, mes applications de banque, ... possèdent des traqueurs connus (Google advertisment par exemple). J'essaie donc au maximum de diminuer progressivement mon empreinte numérique sur ces applications, et si pas possible au moins à sécuriser au maximum mon usage de ces dernières. + +Un point sur lequel je me pose aussi des questions (avec peu de réponses) est sur la sécurité des applications. Je ne sais pas vraiment quand je peux me fier ou non à telle ou telle application. Je n'ai toujours pas de réponse sur ça. +## Liste de mes alternatives + +![appchange](~/dotfiles_arch/tutoriels/appchange.svg) + + + +## Ressources + +[Subreddit degoogle](https://www.reddit.com/r/degoogle/wiki/index/) diff --git a/config/Typora/history.data b/config/Typora/history.data new file mode 100644 index 0000000..0faa585 --- /dev/null +++ b/config/Typora/history.data @@ -0,0 +1 @@ +7b22726563656e74446f63756d656e74223a5b7b226e616d65223a2272657675655f636f64655f6370672e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f756e6365727461696e746965732f66696c65732f72657675655f636f64655f6370672e6d64222c2264617465223a313737383537343139393437337d2c7b226e616d65223a226465676f6f676c652e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f646f7466696c65735f617263682f7475746f7269656c732f6465676f6f676c652e6d64222c2264617465223a313737373839313739353632377d2c7b226e616d65223a22524541444d455f76322e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f77696e645f74757262696e655f67656172626f782f524541444d455f76322e6d64222c2264617465223a313737363736313631393435367d2c7b226e616d65223a222e7479706f72615f726561646d652e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f77696e645f74757262696e655f67656172626f782f76657273696f6e732f342e302f2e7479706f72615f726561646d652e6d64222c2264617465223a313737343236353333313936327d2c7b226e616d65223a22524541444d452e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f77696e645f74757262696e655f67656172626f782f76657273696f6e732f342e322f524541444d452e6d64222c2264617465223a313737343031323039363130397d2c7b226e616d65223a222e7479706f72615f726561646d652e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f636f64652f76657273696f6e732f342e302f2e7479706f72615f726561646d652e6d64222c2264617465223a313737333931393539393939397d2c7b226e616d65223a22524541444d452e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f636f64652f76657273696f6e732f342e302f524541444d452e6d64222c2264617465223a313737333931383430303131397d2c7b226e616d65223a2276657273696f6e732e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f636f64652f76657273696f6e732f76657273696f6e732e6d64222c2264617465223a313737333833393139373930357d2c7b226e616d65223a22524541444d452e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f636f64652f76657273696f6e732f332e322f524541444d452e6d64222c2264617465223a313737333833393137353236387d2c7b226e616d65223a226261694d616368696e654c6561726e696e674173736973746564323032312e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f7a6f7465726f6e6f7465732f6261694d616368696e654c6561726e696e674173736973746564323032312e6d64222c2264617465223a313737333634343438393335337d2c7b226e616d65223a226261686d616e69436f6e63726574654d6174657269616c566172696162696c697479323032362e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f7a6f7465726f6e6f7465732f6261686d616e69436f6e63726574654d6174657269616c566172696162696c697479323032362e6d64222c2264617465223a313737333634343438383633337d2c7b226e616d65223a226772616a614461746164726976656e4d6f64656c696e67537461676564323032352e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f7a6f7465726f6e6f7465732f6772616a614461746164726976656e4d6f64656c696e67537461676564323032352e6d64222c2264617465223a313737333634343438363236317d2c7b226e616d65223a2267756572696e65436f6e747269627574696f6e4c6574756465436f6d706f7274656d656e742e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f7a6f7465726f6e6f7465732f67756572696e65436f6e747269627574696f6e4c6574756465436f6d706f7274656d656e742e6d64222c2264617465223a313737333634343438353634337d2c7b226e616d65223a226675436f6e646974696f6e4d6f6e69746f72696e6757696e64323031392e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f7a6f7465726f6e6f7465732f6675436f6e646974696f6e4d6f6e69746f72696e6757696e64323031392e6d64222c2264617465223a313737333634343438343631397d2c7b226e616d65223a226a6f7370696e48616e64734f6e426179657369616e4e657572616c323032322e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f7a6f7465726f6e6f7465732f6a6f7370696e48616e64734f6e426179657369616e4e657572616c323032322e6d64222c2264617465223a313737333634343438323235357d2c7b226e616d65223a226d616e736f757269456e68616e636564476175737369616e50726f63657373323032322e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f7a6f7465726f6e6f7465732f6d616e736f757269456e68616e636564476175737369616e50726f63657373323032322e6d64222c2264617465223a313737333634343438313437317d2c7b226e616d65223a227265626169416476616e63656452656c696162696c69747950726564696374696f6e323032352e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f7a6f7465726f6e6f7465732f7265626169416476616e63656452656c696162696c69747950726564696374696f6e323032352e6d64222c2264617465223a313737333634343438303933397d2c7b226e616d65223a227265626169537570657276697365644d616368696e654c6561726e696e67323032352e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f7a6f7465726f6e6f7465732f7265626169537570657276697365644d616368696e654c6561726e696e67323032352e6d64222c2264617465223a313737333634343437383733397d2c7b226e616d65223a22736d6f6c6465727352656c696162696c697479416e616c7973697350726564696374696f6e323031302e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f7a6f7465726f6e6f7465732f736d6f6c6465727352656c696162696c697479416e616c7973697350726564696374696f6e323031302e6d64222c2264617465223a313737333634343437383130317d2c7b226e616d65223a2274726162656c7369436f6e73696465726174696f6e556e6365727461696e747944696d656e73696f6e696e67323032302e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f7a6f7465726f6e6f7465732f74726162656c7369436f6e73696465726174696f6e556e6365727461696e747944696d656e73696f6e696e67323032302e6d64222c2264617465223a313737333634343437343533387d2c7b226e616d65223a2279616e6745766964656e63655468656f72794261736564323032322e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f7a6f7465726f6e6f7465732f79616e6745766964656e63655468656f72794261736564323032322e6d64222c2264617465223a313737333634343437313932347d2c7b226e616d65223a22524541444d452e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f636f64652f524541444d452e6d64222c2264617465223a313737333339333832373537347d2c7b226e616d65223a2230332d323032365f312e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f7765656b6c795f7265706f72742f30332d323032365f312e6d64222c2264617465223a313737333036343833313338347d2c7b226e616d65223a2230392d30332d323032362e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f30392d30332d323032362e6d64222c2264617465223a313737333036333932363831397d2c7b226e616d65223a2230362d30332d323032362e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f30362d30332d323032362e6d64222c2264617465223a313737323830333634363138327d2c7b226e616d65223a2230332d30332d323032362e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f30332d30332d323032362e6d64222c2264617465223a313737323830333632313135337d2c7b226e616d65223a2230342d30332d323032362e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f30342d30332d323032362e6d64222c2264617465223a313737323830333632303337397d2c7b226e616d65223a2230352d30332d323032362e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f30352d30332d323032362e6d64222c2264617465223a313737323830333631393539377d2c7b226e616d65223a2230322d30332d323032362e6d64222c2270617468223a222f686f6d652f61666f756361756c74632f776f726b73706163652f636573692f6e6f7465732f30322d30332d323032362e6d64222c2264617465223a313737323830333433343737337d2c7b226e616d65223a22496e7374616c6c20616e64205573652050616e646f632e6d64222c2270617468223a222f7573722f73686172652f7479706f72612f7265736f75726365732f446f63732f496e7374616c6c20616e64205573652050616e646f632e6d64222c2264617465223a313737323434333339323339317d2c7b226e616d65223a224d61726b646f776e205265666572656e63652e6d64222c2270617468223a222f7573722f73686172652f7479706f72612f7265736f75726365732f446f63732f4d61726b646f776e205265666572656e63652e6d64222c2264617465223a313737323434333239343934327d2c7b226e616d65223a223734544b59372d374b435133432d4d4e515839572d5a4b5641545a222c2270617468223a222f72756e2f6d656469612f416e746f696e652f456c656d656e74732f41646d696e69737472617469662f3734544b59372d374b435133432d4d4e515839572d5a4b5641545a222c2264617465223a313737303331363738373938327d5d2c22726563656e74466f6c646572223a5b5d7d \ No newline at end of file diff --git a/config/Typora/profile.data b/config/Typora/profile.data new file mode 100644 index 0000000..ed31a84 --- /dev/null +++ b/config/Typora/profile.data @@ -0,0 +1 @@ +7b2276657273696f6e223a22312e31332e34222c22696e697469616c697a655f766572223a22312e302e30222c226c696e655f656e64696e675f63726c66223a66616c73652c227072654c696e65627265616b4f6e4578706f7274223a747275652c2275756964223a2261373838613537372d633134352d346530392d393431622d346361643962333664666333222c227374726963745f6d6f6465223a747275652c22636f70795f6d61726b646f776e5f62795f64656661756c74223a747275652c2264696453686f7757656c636f6d6550616e656c32223a747275652c226261636b67726f756e64436f6c6f72223a2223464646464646222c2269734461726b4d6f6465223a66616c73652c22736964656261725f746162223a22222c22757365547265655374796c65223a747275652c226c697374536f727454797065223a302c2270696e466f6c646572223a22222c22726573746f72655768656e4c61756e6368223a302c22656e61626c654175746f53617665223a747275652c227573655f72656c61746976655f706174685f666f725f696d67223a66616c73652c2272656c61746976655061746857697468446f74223a66616c73652c22696e64656e7453697a65223a322c22707265747479496e64656e74223a66616c73652c226d617463685f706172695f6d61726b646f776e223a747275652c227072657365745f7370656c6c5f636865636b223a22656e2d4742222c22656e61626c655f696e6c696e655f6d617468223a747275652c22656e61626c655f737562736372697074223a747275652c22656e61626c655f7375706572736372697074223a747275652c22656e61626c655f686967686c69676874223a747275652c22736d61727451756f7465223a747275652c2273686966745461624175746f496e64656e74223a747275652c22616c6c6f7750687973696373436f6e666c696374223a747275652c226578706f72742e706466223a7b226578706f72745468656d65223a22676974687562227d2c226578706f72742e646f6378223a7b22617267223a222d66206e6174697665202d73202d6f20247b6f7574707574506174687d202d7420646f6378227d2c226578706f72742e6f6474223a7b22617267223a222d66206e6174697665202d73202d6f20247b6f7574707574506174687d202d74206f6474227d2c226578706f72742e65707562223a7b22617267223a222d66206e6174697665202d73202d6f20247b6f7574707574506174687d202d742065707562227d2c22757365437573746f6d466f6e7453697a65223a66616c73652c22637573746f6d466f6e7453697a65223a31322c22757365724c616e6775616765223a2266722d4652222c226c617374436c6f736564426f756e6473223a7b2266756c6c73637265656e223a66616c73652c226d6178696d697a6564223a747275657d2c227468656d65223a226769746875622e637373222c2273686f77537461747573426172223a747275652c2275736553657061726174654461726b5468656d65223a66616c73652c226e6f48696e74466f724f70656e4c696e6b223a747275652c226973466f6375734d6f6465223a66616c73652c226973547970655772697465724d6f6465223a66616c73652c2274726565536f727454797065223a307d \ No newline at end of file diff --git a/config/Typora/themes/Readme.md b/config/Typora/themes/Readme.md new file mode 100644 index 0000000..d662036 --- /dev/null +++ b/config/Typora/themes/Readme.md @@ -0,0 +1,4 @@ +The built-in CSS will be replaced after update / reinstall, DO NOT MODIFY THEM. + +Refer https://support.typora.io/Add-Custom-CSS/ when you want to modify those CSS. +Refer https://support.typora.io/About-Themes/ if you want to create / install new themes. \ No newline at end of file diff --git a/config/Typora/themes/github.css b/config/Typora/themes/github.css new file mode 100644 index 0000000..ad4945f --- /dev/null +++ b/config/Typora/themes/github.css @@ -0,0 +1,416 @@ +:root { + --side-bar-bg-color: #fafafa; + --control-text-color: #777; +} + +@include-when-export url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext); + +/* open-sans-regular - latin-ext_latin */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: normal; + src: local('Open Sans Regular'), local('OpenSans-Regular'), url('./github/open-sans-v17-latin-ext_latin-regular.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD, U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; + } + /* open-sans-italic - latin-ext_latin */ + @font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: normal; + src: local('Open Sans Italic'), local('OpenSans-Italic'), url('./github/open-sans-v17-latin-ext_latin-italic.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD, U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; + } + /* open-sans-700 - latin-ext_latin */ + @font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: bold; + src: local('Open Sans Bold'), local('OpenSans-Bold'), url('./github/open-sans-v17-latin-ext_latin-700.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD, U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; + } + /* open-sans-700italic - latin-ext_latin */ + @font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: bold; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url('./github/open-sans-v17-latin-ext_latin-700italic.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD, U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; + } + +html { + font-size: 16px; + -webkit-font-smoothing: antialiased; +} + +body { + font-family: "Open Sans","Clear Sans", "Helvetica Neue", Helvetica, Arial, 'Segoe UI Emoji', 'SF Pro', sans-serif; + color: rgb(51, 51, 51); + line-height: 1.6; +} + +#write { + max-width: 860px; + margin: 0 auto; + padding: 30px; + padding-bottom: 100px; +} + +@media only screen and (min-width: 1400px) { + #write { + max-width: 1024px; + } +} + +@media only screen and (min-width: 1800px) { + #write { + max-width: 1200px; + } +} + +#write > ul:first-child, +#write > ol:first-child{ + margin-top: 30px; +} + +a { + color: #4183C4; +} +h1, +h2, +h3, +h4, +h5, +h6 { + position: relative; + margin-top: 1rem; + margin-bottom: 1rem; + font-weight: bold; + line-height: 1.4; + cursor: text; +} +h1:hover a.anchor, +h2:hover a.anchor, +h3:hover a.anchor, +h4:hover a.anchor, +h5:hover a.anchor, +h6:hover a.anchor { + text-decoration: none; +} +h1 tt, +h1 code { + font-size: inherit; +} +h2 tt, +h2 code { + font-size: inherit; +} +h3 tt, +h3 code { + font-size: inherit; +} +h4 tt, +h4 code { + font-size: inherit; +} +h5 tt, +h5 code { + font-size: inherit; +} +h6 tt, +h6 code { + font-size: inherit; +} +h1 { + font-size: 2.25em; + line-height: 1.2; + border-bottom: 1px solid #eee; +} +h2 { + font-size: 1.75em; + line-height: 1.225; + border-bottom: 1px solid #eee; +} + +/*@media print { + .typora-export h1, + .typora-export h2 { + border-bottom: none; + padding-bottom: initial; + } + + .typora-export h1::after, + .typora-export h2::after { + content: ""; + display: block; + height: 100px; + margin-top: -96px; + border-top: 1px solid #eee; + } +}*/ + +h3 { + font-size: 1.5em; + line-height: 1.43; +} +h4 { + font-size: 1.25em; +} +h5 { + font-size: 1em; +} +h6 { + font-size: 1em; + color: #777; +} +p, +blockquote, +ul, +ol, +dl, +table{ + margin: 0.8em 0; +} +li>ol, +li>ul { + margin: 0 0; +} +hr { + height: 2px; + padding: 0; + margin: 16px 0; + background-color: #e7e7e7; + border: 0 none; + overflow: hidden; + box-sizing: content-box; +} + +li p.first { + display: inline-block; +} +ul, +ol { + padding-left: 30px; +} +ul:first-child, +ol:first-child { + margin-top: 0; +} +ul:last-child, +ol:last-child { + margin-bottom: 0; +} +blockquote { + border-left: 4px solid #dfe2e5; + padding: 0 15px; + color: #777777; +} +blockquote blockquote { + padding-right: 0; +} +table { + padding: 0; + word-break: initial; +} +table tr { + border: 1px solid #dfe2e5; + margin: 0; + padding: 0; +} +table tr:nth-child(2n), +thead { + background-color: #f8f8f8; +} +table th { + font-weight: bold; + border: 1px solid #dfe2e5; + border-bottom: 0; + margin: 0; + padding: 6px 13px; +} +table td { + border: 1px solid #dfe2e5; + margin: 0; + padding: 6px 13px; +} +table th:first-child, +table td:first-child { + margin-top: 0; +} +table th:last-child, +table td:last-child { + margin-bottom: 0; +} + +.CodeMirror-lines { + padding-left: 4px; +} + +.code-tooltip { + box-shadow: 0 1px 1px 0 rgba(0,28,36,.3); + border-top: 1px solid #eef2f2; +} + +.md-fences, +code, +tt { + border: 1px solid #e7eaed; + background-color: #f8f8f8; + border-radius: 3px; + padding: 0; + padding: 2px 4px 0px 4px; + font-size: 0.9em; +} + +code { + background-color: #f3f4f4; + padding: 0 2px 0 2px; +} + +.md-fences { + margin-bottom: 15px; + margin-top: 15px; + padding-top: 8px; + padding-bottom: 6px; +} + + +.md-task-list-item > input { + margin-left: -1.3em; +} + +@media print { + html { + font-size: 13px; + } + pre { + page-break-inside: avoid; + word-wrap: break-word; + } +} + +.md-fences { + background-color: #f8f8f8; +} +#write pre.md-meta-block { + padding: 1rem; + font-size: 85%; + line-height: 1.45; + background-color: #f7f7f7; + border: 0; + border-radius: 3px; + color: #777777; + margin-top: 0 !important; +} + +.mathjax-block>.code-tooltip { + bottom: .375rem; +} + +.md-mathjax-midline { + background: #fafafa; +} + +#write>h3.md-focus:before{ + left: -1.5625rem; + top: .375rem; +} +#write>h4.md-focus:before{ + left: -1.5625rem; + top: .285714286rem; +} +#write>h5.md-focus:before{ + left: -1.5625rem; + top: .285714286rem; +} +#write>h6.md-focus:before{ + left: -1.5625rem; + top: .285714286rem; +} +.md-image>.md-meta { + /*border: 1px solid #ddd;*/ + border-radius: 3px; + padding: 2px 0px 0px 4px; + font-size: 0.9em; + color: inherit; +} + +.md-tag { + color: #a7a7a7; + opacity: 1; +} + +.md-toc { + margin-top:20px; + padding-bottom:20px; +} + +.sidebar-tabs { + border-bottom: none; +} + +#typora-quick-open { + border: 1px solid #ddd; + background-color: #f8f8f8; +} + +#typora-quick-open-item { + background-color: #FAFAFA; + border-color: #FEFEFE #e5e5e5 #e5e5e5 #eee; + border-style: solid; + border-width: 1px; +} + +/** focus mode */ +.on-focus-mode blockquote { + border-left-color: rgba(85, 85, 85, 0.12); +} + +header, .context-menu, .megamenu-content, footer{ + font-family: "Segoe UI", "Arial", sans-serif; +} + +.file-node-content:hover .file-node-icon, +.file-node-content:hover .file-node-open-state{ + visibility: visible; +} + +.mac-seamless-mode #typora-sidebar { + background-color: #fafafa; + background-color: var(--side-bar-bg-color); +} + +.mac-os #write{ + caret-color: AccentColor; +} + +.md-lang { + color: #b4654d; +} + +/*.html-for-mac { + --item-hover-bg-color: #E6F0FE; +}*/ + +#md-notification .btn { + border: 0; +} + +.dropdown-menu .divider { + border-color: #e5e5e5; + opacity: 0.4; +} + +.ty-preferences .window-content { + background-color: #fafafa; +} + +.ty-preferences .nav-group-item.active { + color: white; + background: #999; +} + +.menu-item-container a.menu-style-btn { + background-color: #f5f8fa; + background-image: linear-gradient( 180deg , hsla(0, 0%, 100%, 0.8), hsla(0, 0%, 100%, 0)); +} diff --git a/config/Typora/themes/github/open-sans-v17-latin-ext_latin-700.woff2 b/config/Typora/themes/github/open-sans-v17-latin-ext_latin-700.woff2 new file mode 100644 index 0000000..c824c31 Binary files /dev/null and b/config/Typora/themes/github/open-sans-v17-latin-ext_latin-700.woff2 differ diff --git a/config/Typora/themes/github/open-sans-v17-latin-ext_latin-700italic.woff2 b/config/Typora/themes/github/open-sans-v17-latin-ext_latin-700italic.woff2 new file mode 100644 index 0000000..4115f24 Binary files /dev/null and b/config/Typora/themes/github/open-sans-v17-latin-ext_latin-700italic.woff2 differ diff --git a/config/Typora/themes/github/open-sans-v17-latin-ext_latin-italic.woff2 b/config/Typora/themes/github/open-sans-v17-latin-ext_latin-italic.woff2 new file mode 100644 index 0000000..7584008 Binary files /dev/null and b/config/Typora/themes/github/open-sans-v17-latin-ext_latin-italic.woff2 differ diff --git a/config/Typora/themes/github/open-sans-v17-latin-ext_latin-regular.woff2 b/config/Typora/themes/github/open-sans-v17-latin-ext_latin-regular.woff2 new file mode 100644 index 0000000..9b58220 Binary files /dev/null and b/config/Typora/themes/github/open-sans-v17-latin-ext_latin-regular.woff2 differ diff --git a/config/Typora/themes/newsprint.css b/config/Typora/themes/newsprint.css new file mode 100644 index 0000000..67ded50 --- /dev/null +++ b/config/Typora/themes/newsprint.css @@ -0,0 +1,622 @@ +/* meyer reset -- http://meyerweb.com/eric/tools/css/reset/ , v2.0 | 20110126 | License: none (public domain) */ + +@include-when-export url(https://fonts.googleapis.com/css?family=PT+Serif:400,400italic,700,700italic&subset=latin,cyrillic-ext,cyrillic,latin-ext); + +/* =========== */ + +/* pt-serif-regular - latin */ +@font-face { + font-family: 'PT Serif'; + font-style: normal; + font-weight: normal; + src: local('PT Serif'), local('PTSerif-Regular'), url('./newsprint/pt-serif-v11-latin-regular.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* pt-serif-italic - latin */ +@font-face { + font-family: 'PT Serif'; + font-style: italic; + font-weight: normal; + src: local('PT Serif Italic'), local('PTSerif-Italic'), url('./newsprint/pt-serif-v11-latin-italic.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* pt-serif-700 - latin */ +@font-face { + font-family: 'PT Serif'; + font-style: normal; + font-weight: bold; + src: local('PT Serif Bold'), local('PTSerif-Bold'), url('./newsprint/pt-serif-v11-latin-700.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* pt-serif-700italic - latin */ +@font-face { + font-family: 'PT Serif'; + font-style: italic; + font-weight: bold; + src: local('PT Serif Bold Italic'), local('PTSerif-BoldItalic'), url('./newsprint/pt-serif-v11-latin-700italic.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +:root { + --active-file-bg-color: #dadada; + --active-file-bg-color: rgba(32, 43, 51, 0.63); + --active-file-text-color: white; + --bg-color: #f3f2ee; + --text-color: #1f0909; + --control-text-color: #444; + --rawblock-edit-panel-bd: #e5e5e5; + + --select-text-bg-color: rgba(32, 43, 51, 0.63); + --select-text-font-color: white; +} + +pre { + --select-text-bg-color: #36284e; + --select-text-font-color: #fff; +} + +html { + font-size: 16px; + -webkit-font-smoothing: antialiased; +} + +html, body { + background-color: #f3f2ee; + font-family: "PT Serif", 'Times New Roman', 'SF Pro', Times, serif; + color: #1f0909; + line-height: 1.5em; +} + +/*#write { + overflow-x: auto; + max-width: initial; + padding-left: calc(50% - 17em); + padding-right: calc(50% - 17em); +} + +@media (max-width: 36em) { + #write { + padding-left: 1em; + padding-right: 1em; + } +}*/ + +#write { + max-width: 40em; +} + +@media only screen and (min-width: 1400px) { + #write { + max-width: 914px; + } +} + +ol li { + list-style-type: decimal; + list-style-position: outside; +} +ul li { + list-style-type: disc; + list-style-position: outside; +} + +ol, +ul { + list-style: none; +} + +blockquote, +q { + quotes: none; +} +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +/* styles */ + +/* ====== */ + +/* headings */ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: bold; +} +h1 { + font-size: 1.875em; + /*30 / 16*/ + line-height: 1.6em; + /* 48 / 30*/ + margin-top: 2em; +} +h2, +h3 { + font-size: 1.3125em; + /*21 / 16*/ + line-height: 1.15; + /*24 / 21*/ + margin-top: 2.285714em; + /*48 / 21*/ + margin-bottom: 1.15em; + /*24 / 21*/ +} +h3 { + font-weight: normal; +} +h4 { + font-size: 1.125em; + /*18 / 16*/ + margin-top: 2.67em; + /*48 / 18*/ +} +h5, +h6 { + font-size: 1em; + /*16*/ +} +h1 { + border-bottom: 1px solid; + margin-bottom: 1.875em; + padding-bottom: 0.8125em; +} +/* links */ + +a { + text-decoration: none; + color: #065588; +} +a:hover, +a:active { + text-decoration: underline; +} +/* block spacing */ + +p, +blockquote, +.md-fences { + margin-bottom: 1.5em; +} +h1, +h2, +h3, +h4, +h5, +h6 { + margin-bottom: 1.5em; +} +/* blockquote */ + +blockquote { + font-style: italic; + border-left: 5px solid; + margin-left: 2em; + padding-left: 1em; +} +/* lists */ + +ul, +ol { + margin: 0 0 1.5em 1.5em; +} +/* tables */ +.md-meta,.md-before, .md-after { + color:#999; +} + +table { + margin-bottom: 1.5em; + /*24 / 16*/ + font-size: 1em; + /* width: 100%; */ +} +thead th, +tfoot th { + padding: .25em .25em .25em .4em; + text-transform: uppercase; +} +th { + text-align: left; +} +td { + vertical-align: top; + padding: .25em .25em .25em .4em; +} + +code, +.md-fences { + background-color: #dadada; +} + +code { + padding-left: 2px; + padding-right: 2px; +} + +.md-fences { + margin-left: 2em; + margin-bottom: 3em; + padding-left: 1ch; + padding-right: 1ch; +} + +pre, +code, +tt { + font-size: .875em; + line-height: 1.714285em; +} +/* some fixes */ + +h1 { + line-height: 1.3em; + font-weight: normal; + margin-bottom: 0.5em; +} + +p + ul, +p + ol{ + margin-top: .5em; +} + +h3 + ul, +h4 + ul, +h5 + ul, +h6 + ul, +h3 + ol, +h4 + ol, +h5 + ol, +h6 + ol { + margin-top: .5em; +} + +li > ul, +li > ol { + margin-top: inherit; + margin-bottom: 0; +} + +li ol>li { + list-style-type: lower-alpha; +} + +li li ol>li{ + list-style-type: lower-roman; +} + +h2, +h3 { + margin-bottom: .75em; +} +hr { + border-top: none; + border-right: none; + border-bottom: 1px solid; + border-left: none; +} +h1 { + border-color: #c5c5c5; +} +blockquote { + border-color: #bababa; + color: #656565; +} + +blockquote ul, +blockquote ol { + margin-left:0; +} + +.ty-table-edit { + background-color: transparent; +} +thead { + background-color: #dadada; +} +tr:nth-child(even) { + background: #e8e7e7; +} +hr { + border-color: #c5c5c5; +} +.task-list{ + padding-left: 1rem; +} + +.md-task-list-item { + padding-left: 1.5rem; + list-style-type: none; +} + +.md-task-list-item > input:before { + content: '\221A'; + display: inline-block; + width: 1.25rem; + height: 1.6rem; + vertical-align: middle; + text-align: center; + color: #ddd; + background-color: #F3F2EE; +} + +.md-task-list-item > input:checked:before, +.md-task-list-item > input[checked]:before{ + color: inherit; +} + +#write pre.md-meta-block { + min-height: 1.875rem; + color: #555; + border: 0px; + background: transparent; + margin-top: -4px; + margin-left: 1em; + margin-top: 1em; +} + +.md-image>.md-meta { + color: #9B5146; +} + +.md-image>.md-meta{ + font-family: Menlo, 'Ubuntu Mono', Consolas, 'Courier New', 'Microsoft Yahei', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', serif; +} + + +#write>h3.md-focus:before{ + left: -1.5rem; + color:#999; + border-color:#999; +} +#write>h4.md-focus:before{ + left: -1.5rem; + top: .25rem; + color:#999; + border-color:#999; +} +#write>h5.md-focus:before{ + left: -1.5rem; + top: .0.3125rem; + color:#999; + border-color:#999; +} +#write>h6.md-focus:before{ + left: -1.5rem; + top: 0.3125rem; + color:#999; + border-color:#999; +} + +.md-toc:focus .md-toc-content{ + margin-top: 19px; +} + +.md-toc-content:empty:before{ + color: #065588; +} +.md-toc-item { + color: #065588; +} +#write div.md-toc-tooltip { + background-color: #f3f2ee; +} + +#typora-sidebar { + background-color: #f3f2ee; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.375); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.375); +} + +.pin-outline #typora-sidebar { + background: inherit; + box-shadow: none; + border-right: 1px dashed; +} + +.pin-outline #typora-sidebar:hover .outline-title-wrapper { + border-left:1px dashed; +} + +.outline-item:hover { + background-color: #dadada; + border-left: 28px solid #dadada; + border-right: 18px solid #dadada; +} + +.typora-node .outline-item:hover { + border-right: 28px solid #dadada; +} + +.outline-expander:before { + content: "\f0da"; + font-family: FontAwesome; + font-size:14px; + top: 1px; +} + +.outline-expander:hover:before, +.outline-item-open>.outline-item>.outline-expander:before { + content: "\f0d7"; +} + +.modal-content { + background-color: #f3f2ee; +} + +.auto-suggest-container ul li { + list-style-type: none; +} + +/** UI for electron */ + +.megamenu-menu, +#top-titlebar, #top-titlebar *, +.megamenu-content { + background: #f3f2ee; + color: #1f0909; +} + +.megamenu-menu-header { + border-bottom: 1px dashed #202B33; +} + +.megamenu-menu { + box-shadow: none; + border-right: 1px dashed; +} + +header, .context-menu, .megamenu-content, footer { + font-family: "PT Serif", 'Times New Roman', Times, serif; + color: #1f0909; +} + +#megamenu-back-btn { + color: #1f0909; + border-color: #1f0909; +} + +.megamenu-menu-header #megamenu-menu-header-title:before { + color: #1f0909; +} + +.megamenu-menu-list li a:hover, .megamenu-menu-list li a.active { + color: inherit; + background-color: #e8e7df; +} + +.long-btn:hover { + background-color: #e8e7df; +} + +#recent-file-panel tbody tr:nth-child(2n-1) { + background-color: transparent !important; +} + +.megamenu-menu-panel tbody tr:hover td:nth-child(2) { + color: inherit; +} + +.megamenu-menu-panel .btn { + background-color: #D2D1D1; +} + +.btn-default { + background-color: transparent; +} + +.typora-sourceview-on #toggle-sourceview-btn, +.ty-show-word-count #footer-word-count { + background: #c7c5c5; +} + +#typora-quick-open { + background-color: inherit; +} + +.md-diagram-panel { + margin-top: 8px; +} + +.file-list-item-file-name { + font-weight: initial; +} + +.file-list-item-summary { + opacity: 1; +} + +.file-list-item { + color: #777; +} + +.file-list-item.active { + background-color: inherit; + color: black; +} + +.ty-side-sort-btn.active { + background-color: inherit; +} + +.file-list-item.active .file-list-item-file-name { + font-weight: bold; +} + +.file-list-item{ + opacity:1 !important; +} + +.file-library-node.active>.file-node-background{ + background-color: rgba(32, 43, 51, 0.63); + background-color: var(--active-file-bg-color); +} + +.file-tree-node.active>.file-node-content{ + color: white; + color: var(--active-file-text-color); +} + +.md-task-list-item>input { + margin-left: -1.7em; + margin-top: calc(1rem - 12px); + -webkit-appearance: button; +} + +input { + border: 1px solid #aaa; +} + +.megamenu-menu-header #megamenu-menu-header-title, +.megamenu-menu-header:hover, +.megamenu-menu-header:focus { + color: inherit; +} + +.dropdown-menu .divider { + border-color: #e5e5e5; + opacity: 1; +} + +/* https://github.com/typora/typora-issues/issues/2046 */ +.os-windows-7 strong, +.os-windows-7 strong { + font-weight: 760; +} + +.ty-preferences .btn-default { + background: transparent; +} + +.ty-preferences .window-header { + border-bottom: 1px dashed #202B33; + box-shadow: none; +} + +#sidebar-loading-template, #sidebar-loading-template.file-list-item { + color: #777; +} + +.searchpanel-search-option-btn.active { + background: #777; + color: white; +} + +.export-detail, .light .export-detail, +.light .export-item.active, +.light .export-items-list-control { + background: #e0e0e0; + border-radius: 2px; + font-weight: 700; + color: inherit +} \ No newline at end of file diff --git a/config/Typora/themes/newsprint/pt-serif-v11-latin-700.woff2 b/config/Typora/themes/newsprint/pt-serif-v11-latin-700.woff2 new file mode 100644 index 0000000..6f6553d Binary files /dev/null and b/config/Typora/themes/newsprint/pt-serif-v11-latin-700.woff2 differ diff --git a/config/Typora/themes/newsprint/pt-serif-v11-latin-700italic.woff2 b/config/Typora/themes/newsprint/pt-serif-v11-latin-700italic.woff2 new file mode 100644 index 0000000..010abc9 Binary files /dev/null and b/config/Typora/themes/newsprint/pt-serif-v11-latin-700italic.woff2 differ diff --git a/config/Typora/themes/newsprint/pt-serif-v11-latin-italic.woff2 b/config/Typora/themes/newsprint/pt-serif-v11-latin-italic.woff2 new file mode 100644 index 0000000..79c6bec Binary files /dev/null and b/config/Typora/themes/newsprint/pt-serif-v11-latin-italic.woff2 differ diff --git a/config/Typora/themes/newsprint/pt-serif-v11-latin-regular.woff2 b/config/Typora/themes/newsprint/pt-serif-v11-latin-regular.woff2 new file mode 100644 index 0000000..6e04521 Binary files /dev/null and b/config/Typora/themes/newsprint/pt-serif-v11-latin-regular.woff2 differ diff --git a/config/Typora/themes/night.css b/config/Typora/themes/night.css new file mode 100644 index 0000000..b61893a --- /dev/null +++ b/config/Typora/themes/night.css @@ -0,0 +1,1032 @@ +@import "night/mermaid.dark.css"; +@import "night/codeblock.dark.css"; +@import "night/sourcemode.dark.css"; + +:root { + --bg-color: #363B40; + --side-bar-bg-color: #2E3033; + --text-color: #b8bfc6; + + --select-text-bg-color:#4a89dc; + + --item-hover-bg-color: #0a0d16; + --control-text-color: #b7b7b7; + --control-text-hover-color: #eee; + --window-border: 1px solid #555; + + --active-file-bg-color: rgb(34, 34, 34); + --active-file-border-color: #8d8df0; + + --primary-color: #a3d5fe; + + --active-file-text-color: white; + --item-hover-bg-color: #70717d; + --item-hover-text-color: white; + --primary-color: #6dc1e7; + + --rawblock-edit-panel-bd: #333; + + --search-select-bg-color: #428bca; +} + +html { + font-size: 16px; + -webkit-font-smoothing: antialiased; +} + +html, +body { + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + background: #363B40; + background: var(--bg-color); + fill: currentColor; + line-height: 1.625rem; +} + +#write { + max-width: 914px; +} + + +@media only screen and (min-width: 1400px) { + #write { + max-width: 1024px; + } +} + +@media only screen and (min-width: 1800px) { + #write { + max-width: 1200px; + } +} + +html, +body, +button, +input, +select, +textarea, +div.code-tooltip-content { + color: #b8bfc6; + border-color: transparent; +} + +div.code-tooltip, +.md-hover-tip .md-arrow:after { + background: #333; +} + +.native-window #md-notification { + border: 1px solid #70717d; +} + +.popover.bottom > .arrow:after { + border-bottom-color: #333; +} + +html, +body, +button, +input, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, 'Segoe UI Emoji', 'SF Pro', sans-serif; +} + +hr { + height: 2px; + border: 0; + margin: 24px 0 !important; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: "Lucida Grande", "Corbel", sans-serif; + font-weight: normal; + clear: both; + -ms-word-wrap: break-word; + word-wrap: break-word; + margin: 0; + padding: 0; + color: #DEDEDE +} + +h1 { + font-size: 2.5rem; + /* 36px */ + line-height: 2.75rem; + /* 40px */ + margin-bottom: 1.5rem; + /* 24px */ + letter-spacing: -1.5px; +} + +h2 { + font-size: 1.63rem; + /* 24px */ + line-height: 1.875rem; + /* 30px */ + margin-bottom: 1.5rem; + /* 24px */ + letter-spacing: -1px; + font-weight: bold; +} + +h3 { + font-size: 1.17rem; + /* 18px */ + line-height: 1.5rem; + /* 24px */ + margin-bottom: 1.5rem; + /* 24px */ + letter-spacing: -1px; + font-weight: bold; +} + +h4 { + font-size: 1.12rem; + /* 16px */ + line-height: 1.375rem; + /* 22px */ + margin-bottom: 1.5rem; + /* 24px */ + color: white; +} + +h5 { + font-size: 0.97rem; + /* 16px */ + line-height: 1.25rem; + /* 22px */ + margin-bottom: 1.5rem; + /* 24px */ + font-weight: bold; +} + +h6 { + font-size: 0.93rem; + /* 16px */ + line-height: 1rem; + /* 16px */ + margin-bottom: 0.75rem; + color: white; +} + +@media (min-width: 980px) { + h3.md-focus:before, + h4.md-focus:before, + h5.md-focus:before, + h6.md-focus:before { + color: #ddd; + border: 1px solid #ddd; + border-radius: 3px; + position: absolute; + left: -1.642857143rem; + top: .357142857rem; + float: left; + font-size: 9px; + padding-left: 2px; + padding-right: 2px; + vertical-align: bottom; + font-weight: normal; + line-height: normal; + } + + h3.md-focus:before { + content: 'h3'; + } + + h4.md-focus:before { + content: 'h4'; + } + + h5.md-focus:before { + content: 'h5'; + top: 0px; + } + + h6.md-focus:before { + content: 'h6'; + top: 0px; + } +} + +a { + text-decoration: none; + outline: 0; +} + +a:hover { + outline: 0; +} + +a:focus { + outline: thin dotted; +} + +sup.md-footnote { + background-color: #555; + color: #ddd; +} + +p { + -ms-word-wrap: break-word; + word-wrap: break-word; +} + +p, +ul, +dd, +ol, +hr, +address, +pre, +table, +iframe, +.wp-caption, +.wp-audio-shortcode, +.wp-video-shortcode { + margin-top: 0; + margin-bottom: 1.5rem; + /* 24px */ +} + +audio:not([controls]) { + display: none; +} + +[hidden] { + display: none; +} + +::-moz-selection { + background: #4a89dc; + color: #fff; + text-shadow: none; +} + +*.in-text-selection, +::selection { + background: #4a89dc; + color: #fff; + text-shadow: none; +} + +ul, +ol { + padding: 0 0 0 1.875rem; + /* 30px */ +} + +ul { + list-style: square; +} + +ol { + list-style: decimal; +} + +ul ul, +ol ol, +ul ol, +ol ul { + margin: 0; +} + +b, +th, +dt, +strong { + font-weight: bold; +} + +i, +em, +dfn, +cite { + font-style: italic; +} + +blockquote { + padding-left: 1.875rem; + margin: 0 0 1.875rem 1.875rem; + border-left: solid 2px #474d54; + padding-left: 30px; + margin-top: 35px; +} + +pre, +code, +kbd, +tt, +var { + font-size: 0.875em; + font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; +} + +code, +tt, +var { + background: rgba(0, 0, 0, 0.05); +} + +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); +} + +pre.md-fences { + padding: 10px 10px 10px 30px; + margin-bottom: 20px; + background: #333; +} + +.CodeMirror-gutters { + background: #333; + border-right: 1px solid transparent; +} + +.enable-diagrams pre.md-fences[lang="sequence"] .code-tooltip, +.enable-diagrams pre.md-fences[lang="flow"] .code-tooltip, +.enable-diagrams pre.md-fences[lang="mermaid"] .code-tooltip { + bottom: -2.2em; + right: 4px; +} + +code, +kbd, +tt, +var { + padding: 2px 5px; +} + +table { + max-width: 100%; + width: 100%; + border-collapse: collapse; + border-spacing: 0; +} + +th, +td { + padding: 5px 10px; + vertical-align: top; +} + +a { + -webkit-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} + +hr { + background: #474d54; + /* variable */ +} + +h1 { + margin-top: 2em; +} + +a { + color: #e0e0e0; + text-decoration: underline; +} + +a:hover { + color: #fff; +} + +.md-inline-math script { + color: #81b1db; +} + +b, +th, +dt, +strong { + color: #DEDEDE; + /* variable */ +} + +mark { + background: #D3D40E; +} + +blockquote { + color: #9DA2A6; +} + +table a { + color: #DEDEDE; + /* variable */ +} + +th, +td { + border: solid 1px #474d54; + /* variable */ +} + +.task-list { + padding-left: 0; +} + +.md-task-list-item { + padding-left: 1.25rem; +} + +.md-task-list-item > input { + top: auto; +} + +.md-task-list-item > input:before { + content: ""; + display: inline-block; + width: 0.875rem; + height: 0.875rem; + vertical-align: middle; + text-align: center; + border: 1px solid #b8bfc6; + background-color: #363B40; + margin-top: -0.4rem; +} + +.md-task-list-item > input:checked:before, +.md-task-list-item > input[checked]:before { + content: '\221A'; + /*◘*/ + font-size: 0.625rem; + line-height: 0.625rem; + color: #DEDEDE; +} + +/** quick open **/ +.auto-suggest-container { + border: 0px; + background-color: #525C65; +} + +#typora-quick-open { + background-color: #525C65; +} + +#typora-quick-open input{ + background-color: #525C65; + border: 0; + border-bottom: 1px solid grey; +} + +.typora-quick-open-item { + background-color: inherit; + color: inherit; +} + +.typora-quick-open-item.active, +.typora-quick-open-item:hover { + background-color: #4D8BDB; + color: white; +} + +.typora-quick-open-item:hover { + background-color: rgba(77, 139, 219, 0.8); +} + +.typora-search-spinner > div { + background-color: #fff; +} + +#write pre.md-meta-block { + border-bottom: 1px dashed #ccc; + background: transparent; + padding-bottom: 0.6em; + line-height: 1.6em; +} + +.btn, +.btn .btn-default { + background: transparent; + color: #b8bfc6; +} + +.ty-table-edit { + border-top: 1px solid gray; + background-color: #363B40; +} + +.popover-title { + background: transparent; +} + +.md-image>.md-meta { + color: #BBBBBB; + background: transparent; +} + +.md-expand.md-image>.md-meta { + color: #DDD; +} + +#write>h3:before, +#write>h4:before, +#write>h5:before, +#write>h6:before { + border: none; + border-radius: 0px; + color: #888; + text-decoration: underline; + left: -1.4rem; + top: 0.2rem; +} + +#write>h3.md-focus:before { + top: 2px; +} + +#write>h4.md-focus:before { + top: 2px; +} + +.md-toc-item { + color: #A8C2DC; +} + +#write div.md-toc-tooltip { + background-color: #363B40; +} + +.dropdown-menu .btn:hover, +.dropdown-menu .btn:focus, +.md-toc .btn:hover, +.md-toc .btn:focus { + color: white; + background: black; +} + +#toc-dropmenu { + background: rgba(50, 54, 59, 0.93); + border: 1px solid rgba(253, 253, 253, 0.15); +} + +#toc-dropmenu .divider { + background-color: #9b9b9b; +} + +.outline-expander:before { + top: 2px; +} + +#typora-sidebar { + box-shadow: none; + border-right: 1px dashed; + border-right: none; +} + +.sidebar-tabs { + border-bottom:0; +} + +#typora-sidebar:hover .outline-title-wrapper { + border-left: 1px dashed; +} + +.outline-title-wrapper .btn { + color: inherit; +} + +.outline-item:hover { + border-color: #363B40; + background-color: #363B40; + color: white; +} + +h1.md-focus .md-attr, +h2.md-focus .md-attr, +h3.md-focus .md-attr, +h4.md-focus .md-attr, +h5.md-focus .md-attr, +h6.md-focus .md-attr, +.md-header-span .md-attr { + color: #8C8E92; + display: inline; +} + +.md-comment { + color: #5a95e3; + opacity: 0.8; +} + +.md-inline-math svg { + color: #b8bfc6; +} + +#math-inline-preview .md-arrow:after { + background: black; +} + +.modal-content { + background: var(--bg-color); + border: 0; +} + +.modal-title { + font-size: 1.5em; +} + +.modal-content input { + background-color: rgba(26, 21, 21, 0.51); + color: white; +} + +.modal-content .input-group-addon { + color: white; +} + +.modal-backdrop { + background-color: rgba(174, 174, 174, 0.7); +} + +.modal-content .btn-primary { + border-color: var(--primary-color); +} + +.md-table-resize-popover { + background-color: #333; +} + +.form-inline .input-group .input-group-addon { + color: white; +} + +#md-searchpanel { + border-bottom: 1px dashed grey; +} + +/** UI for electron */ + +.context-menu, +#spell-check-panel, +#footer-word-count-info { + background-color: #42464A; +} + +.context-menu.dropdown-menu .divider, +.dropdown-menu .divider { + background-color: #777777; + opacity: 1; +} + +footer { + color: inherit; +} + +@media (max-width: 1000px) { + footer { + border-top: none; + } + footer:hover { + color: inherit; + } +} + +#file-info-file-path .file-info-field-value:hover { + background-color: #555; + color: #dedede; +} + +.megamenu-content, +.megamenu-opened header { + background: var(--bg-color); +} + +.megamenu-menu-panel h2, +.megamenu-menu-panel h1, +.long-btn { + color: inherit; +} + +.megamenu-menu-panel input[type='text'] { + background: inherit; + border: 0; + border-bottom: 1px solid; +} + +#recent-file-panel-action-btn { + background: inherit; + border: 1px grey solid; +} + +.megamenu-menu-panel .dropdown-menu > li > a { + color: inherit; + background-color: #2F353A; + text-decoration: none; +} + +.megamenu-menu-panel table td:nth-child(1) { + color: inherit; + font-weight: bold; +} + +.megamenu-menu-panel tbody tr:hover td:nth-child(1) { + color: white; +} + +.modal-footer .btn-default, +.modal-footer .btn-primary, +.modal-footer .btn-default:not(:hover) { + border: 1px solid; + border-color: transparent; +} + +.btn-primary { + color: white; +} + +.btn-default:hover, .btn-default:focus, .btn-default.focus, .btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { + color: white; + border: 1px solid #ddd; + background-color: inherit; +} + +.modal-header { + border-bottom: 0; +} + +.modal-footer { + border-top: 0; +} + +#recent-file-panel tbody tr:nth-child(2n-1) { + background-color: transparent !important; +} + +.megamenu-menu-panel tbody tr:hover td:nth-child(2) { + color: inherit; +} + +.megamenu-menu-panel .btn { + border: 1px solid #eee; + background: transparent; +} + +.mouse-hover .toolbar-icon.btn:hover, +#w-full.mouse-hover, +#w-pin.mouse-hover { + background-color: inherit; +} + +.typora-node::-webkit-scrollbar { + width: 5px; +} + +.typora-node::-webkit-scrollbar-thumb:vertical { + background: rgba(250, 250, 250, 0.3); +} + +.typora-node::-webkit-scrollbar-thumb:vertical:active { + background: rgba(250, 250, 250, 0.5); +} + +#w-unpin { + background-color: #4182c4; +} + +#top-titlebar, #top-titlebar * { + color: var(--item-hover-text-color); +} + +.typora-sourceview-on #toggle-sourceview-btn, +#footer-word-count:hover, +.ty-show-word-count #footer-word-count { + background: #333333; +} + +#toggle-sourceview-btn:hover { + color: #eee; + background: #333333; +} + +/** focus mode */ +.on-focus-mode .md-end-block:not(.md-focus):not(.md-focus-container) * { + color: #686868 !important; +} + +.on-focus-mode .md-end-block:not(.md-focus) img, +.on-focus-mode .md-task-list-item:not(.md-focus-container)>input { + opacity: #686868 !important; +} + +.on-focus-mode li[cid]:not(.md-focus-container){ + color: #686868; +} + +.on-focus-mode .md-fences.md-focus .CodeMirror-code>*:not(.CodeMirror-activeline) *, +.on-focus-mode .CodeMirror.cm-s-inner:not(.CodeMirror-focused) * { + color: #686868 !important; +} + +.on-focus-mode .md-focus, +.on-focus-mode .md-focus-container { + color: #fff; +} + +.on-focus-mode #typora-source .CodeMirror-code>*:not(.CodeMirror-activeline) * { + color: #686868 !important; +} + + +/*diagrams*/ +#write .md-focus .md-diagram-panel { + border: 1px solid #ddd; + margin-left: -1px; + width: calc(100% + 2px); +} + +/*diagrams*/ +#write .md-focus.md-fences-with-lineno .md-diagram-panel { + margin-left: auto; +} + +.md-diagram-panel-error { + color: #f1908e; +} + +.active-tab-files #info-panel-tab-file, +.active-tab-files #info-panel-tab-file:hover, +.active-tab-outline #info-panel-tab-outline, +.active-tab-outline #info-panel-tab-outline:hover { + color: #eee; +} + +.sidebar-footer-item:hover, +.footer-item:hover { + background: inherit; + color: white; +} + +.ty-side-sort-btn.active, +.ty-side-sort-btn:hover, +.selected-folder-menu-item a:after { + color: white; +} + +#sidebar-files-menu { + border:solid 1px; + box-shadow: 4px 4px 20px rgba(0, 0, 0, 0.79); + background-color: var(--bg-color); +} + +.file-list-item { + border-bottom:none; +} + +.file-list-item-summary { + opacity: 1; +} + +.file-list-item.active:first-child { + border-top: none; +} + +.file-node-background { + height: 32px; +} + +.file-library-node.active>.file-node-content, +.file-list-item.active { + color: white; + color: var(--active-file-text-color); +} + +.file-library-node.active>.file-node-background{ + background-color: rgb(34, 34, 34); + background-color: var(--active-file-bg-color); +} +.file-list-item.active { + background-color: rgb(34, 34, 34); + background-color: var(--active-file-bg-color); +} + +#ty-tooltip { + background-color: black; + color: #eee; +} + +.md-task-list-item>input { + margin-left: -1.3em; + margin-top: 0.3rem; + -webkit-appearance: none; +} + +.md-mathjax-midline { + background-color: #57616b; + border-bottom: none; +} + +footer.ty-footer { + border-color: #656565; +} + +.ty-preferences .btn-default { + background: transparent; +} +.ty-preferences .btn-default:hover { + background: #57616b; +} + +.ty-preferences select { + border: 1px solid #989698; + height: 21px; +} + +.ty-preferences .nav-group-item.active, +.export-item.active, +.export-items-list-control, +.export-detail { + background: var(--item-hover-bg-color); +} + +.ty-preferences input[type="search"] { + border-color: #333; + background: #333; + line-height: 22px; + border-radius: 6px; + color: white; +} + +.ty-preferences input[type="search"]:focus { + box-shadow: none; +} + +[data-is-directory="true"] .file-node-content { + margin-bottom: 0; +} + +.file-node-title { + line-height: 22px; +} + +.html-for-mac .file-node-open-state, .html-for-mac .file-node-icon { + line-height: 26px; +} + +::-webkit-scrollbar-thumb { + background: rgba(230, 230, 230, 0.30); +} + +::-webkit-scrollbar-thumb:active { + background: rgba(230, 230, 230, 0.50); +} + +#typora-sidebar:hover div.sidebar-content-content::-webkit-scrollbar-thumb:horizontal { + background: rgba(230, 230, 230, 0.30); +} + +.nav-group-item:active { + background-color: #474d54 !important; +} + +.md-search-hit { + background: rgba(199, 140, 60, 0.81); + color: #eee; +} + +.md-search-hit * { + color: #eee; +} + +#md-searchpanel input { + color: white; +} + +.modal-backdrop.in { + opacity: 1; + backdrop-filter: blur(1px); +} + +.clear-btn-icon { + top: 8px; +} + +/* try fix https://github.com/typora/typora-issues/issues/5253 */ +.file-node-expanded>.file-node-children { + display: grid; + } + +.md-alert-text-note { + color: rgb(47, 129, 247); +} +.md-alert-text-important { + color: rgb(163, 113, 247); +} +.md-alert-text-warning { + color: rgb(210, 153, 34); +} \ No newline at end of file diff --git a/config/Typora/themes/night/codeblock.dark.css b/config/Typora/themes/night/codeblock.dark.css new file mode 100644 index 0000000..a1b1bb3 --- /dev/null +++ b/config/Typora/themes/night/codeblock.dark.css @@ -0,0 +1,113 @@ +@charset "UTF-8"; +/* CSS Document */ + +/** code highlight */ + +.cm-s-inner .cm-variable, +.cm-s-inner .cm-operator, +.cm-s-inner .cm-property { + color: #b8bfc6; +} + +.cm-s-inner .cm-keyword { + color: #C88FD0; +} + +.cm-s-inner .cm-tag { + color: #7DF46A; +} + +.cm-s-inner .cm-attribute { + color: #7575E4; +} + +.CodeMirror div.CodeMirror-cursor { + border-left: 1px solid #b8bfc6; + z-index: 3; +} + +.cm-s-inner .cm-string { + color: #D26B6B; +} + +.cm-s-inner .cm-comment, +.cm-s-inner.cm-comment { + color: #DA924A; +} + +.cm-s-inner .cm-header, +.cm-s-inner .cm-def, +.cm-s-inner.cm-header, +.cm-s-inner.cm-def { + color: #8d8df0; +} + +.cm-s-inner .cm-quote, +.cm-s-inner.cm-quote { + color: #57ac57; +} + +.cm-s-inner .cm-hr { + color: #d8d5d5; +} + +.cm-s-inner .cm-link { + color: #d3d3ef; +} + +.cm-s-inner .cm-negative { + color: #d95050; +} + +.cm-s-inner .cm-positive { + color: #50e650; +} + +.cm-s-inner .cm-string-2 { + color: #f50; +} + +.cm-s-inner .cm-meta, +.cm-s-inner .cm-qualifier { + color: #b7b3b3; +} + +.cm-s-inner .cm-builtin { + color: #f3b3f8; +} + +.cm-s-inner .cm-bracket { + color: #997; +} + +.cm-s-inner .cm-atom, +.cm-s-inner.cm-atom { + color: #84B6CB; +} + +.cm-s-inner .cm-number { + color: #64AB8F; +} + +.cm-s-inner .cm-variable { + color: #b8bfc6; +} + +.cm-s-inner .cm-variable-2 { + color: #9FBAD5; +} + +.cm-s-inner .cm-variable-3 { + color: #1cc685; +} + +.CodeMirror-selectedtext, +.CodeMirror-selected { + background: #4a89dc; + color: #fff !important; + text-shadow: none; +} + +.CodeMirror-gutters { + border-right: none; +} \ No newline at end of file diff --git a/config/Typora/themes/night/credit.html b/config/Typora/themes/night/credit.html new file mode 100644 index 0000000..00bc43c --- /dev/null +++ b/config/Typora/themes/night/credit.html @@ -0,0 +1 @@ +
Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY
\ No newline at end of file diff --git a/config/Typora/themes/night/cursor.png b/config/Typora/themes/night/cursor.png new file mode 100644 index 0000000..1cc3629 Binary files /dev/null and b/config/Typora/themes/night/cursor.png differ diff --git a/config/Typora/themes/night/cursor@2x.png b/config/Typora/themes/night/cursor@2x.png new file mode 100644 index 0000000..b8fca0b Binary files /dev/null and b/config/Typora/themes/night/cursor@2x.png differ diff --git a/config/Typora/themes/night/mermaid.dark.css b/config/Typora/themes/night/mermaid.dark.css new file mode 100644 index 0000000..a412b30 --- /dev/null +++ b/config/Typora/themes/night/mermaid.dark.css @@ -0,0 +1,7 @@ +:root { + --mermaid-theme: night; +} + +[lang='mermaid'] .label { + color: #333; +} \ No newline at end of file diff --git a/config/Typora/themes/night/sourcemode.dark.css b/config/Typora/themes/night/sourcemode.dark.css new file mode 100644 index 0000000..6de223d --- /dev/null +++ b/config/Typora/themes/night/sourcemode.dark.css @@ -0,0 +1,38 @@ +@charset "UTF-8"; +/* CSS Document */ + +/** markdown source **/ +.cm-s-typora-default .cm-header, +.cm-s-typora-default .cm-property +{ + color: #cebcca; +} + +.CodeMirror.cm-s-typora-default div.CodeMirror-cursor{ + border-left: 3px solid #b8bfc6; +} + +.cm-s-typora-default .cm-comment { + color: #9FB1FF; +} + +.cm-s-typora-default .cm-string { + color: #A7A7D9 +} + +.cm-s-typora-default .cm-atom, .cm-s-typora-default .cm-number { + color: #848695; + font-style: italic; +} + +.cm-s-typora-default .cm-link { + color: #95B94B; +} + +.cm-s-typora-default .CodeMirror-activeline-background { + background: rgba(51, 51, 51, 0.72); +} + +.cm-s-typora-default .cm-comment, .cm-s-typora-default .cm-code { + color: #8aa1e1; +} \ No newline at end of file diff --git a/config/Typora/themes/old-themes/Readme.md b/config/Typora/themes/old-themes/Readme.md new file mode 100644 index 0000000..d662036 --- /dev/null +++ b/config/Typora/themes/old-themes/Readme.md @@ -0,0 +1,4 @@ +The built-in CSS will be replaced after update / reinstall, DO NOT MODIFY THEM. + +Refer https://support.typora.io/Add-Custom-CSS/ when you want to modify those CSS. +Refer https://support.typora.io/About-Themes/ if you want to create / install new themes. \ No newline at end of file diff --git a/config/Typora/themes/old-themes/github.css b/config/Typora/themes/old-themes/github.css new file mode 100644 index 0000000..ad4945f --- /dev/null +++ b/config/Typora/themes/old-themes/github.css @@ -0,0 +1,416 @@ +:root { + --side-bar-bg-color: #fafafa; + --control-text-color: #777; +} + +@include-when-export url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext); + +/* open-sans-regular - latin-ext_latin */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: normal; + src: local('Open Sans Regular'), local('OpenSans-Regular'), url('./github/open-sans-v17-latin-ext_latin-regular.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD, U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; + } + /* open-sans-italic - latin-ext_latin */ + @font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: normal; + src: local('Open Sans Italic'), local('OpenSans-Italic'), url('./github/open-sans-v17-latin-ext_latin-italic.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD, U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; + } + /* open-sans-700 - latin-ext_latin */ + @font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: bold; + src: local('Open Sans Bold'), local('OpenSans-Bold'), url('./github/open-sans-v17-latin-ext_latin-700.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD, U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; + } + /* open-sans-700italic - latin-ext_latin */ + @font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: bold; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url('./github/open-sans-v17-latin-ext_latin-700italic.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD, U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; + } + +html { + font-size: 16px; + -webkit-font-smoothing: antialiased; +} + +body { + font-family: "Open Sans","Clear Sans", "Helvetica Neue", Helvetica, Arial, 'Segoe UI Emoji', 'SF Pro', sans-serif; + color: rgb(51, 51, 51); + line-height: 1.6; +} + +#write { + max-width: 860px; + margin: 0 auto; + padding: 30px; + padding-bottom: 100px; +} + +@media only screen and (min-width: 1400px) { + #write { + max-width: 1024px; + } +} + +@media only screen and (min-width: 1800px) { + #write { + max-width: 1200px; + } +} + +#write > ul:first-child, +#write > ol:first-child{ + margin-top: 30px; +} + +a { + color: #4183C4; +} +h1, +h2, +h3, +h4, +h5, +h6 { + position: relative; + margin-top: 1rem; + margin-bottom: 1rem; + font-weight: bold; + line-height: 1.4; + cursor: text; +} +h1:hover a.anchor, +h2:hover a.anchor, +h3:hover a.anchor, +h4:hover a.anchor, +h5:hover a.anchor, +h6:hover a.anchor { + text-decoration: none; +} +h1 tt, +h1 code { + font-size: inherit; +} +h2 tt, +h2 code { + font-size: inherit; +} +h3 tt, +h3 code { + font-size: inherit; +} +h4 tt, +h4 code { + font-size: inherit; +} +h5 tt, +h5 code { + font-size: inherit; +} +h6 tt, +h6 code { + font-size: inherit; +} +h1 { + font-size: 2.25em; + line-height: 1.2; + border-bottom: 1px solid #eee; +} +h2 { + font-size: 1.75em; + line-height: 1.225; + border-bottom: 1px solid #eee; +} + +/*@media print { + .typora-export h1, + .typora-export h2 { + border-bottom: none; + padding-bottom: initial; + } + + .typora-export h1::after, + .typora-export h2::after { + content: ""; + display: block; + height: 100px; + margin-top: -96px; + border-top: 1px solid #eee; + } +}*/ + +h3 { + font-size: 1.5em; + line-height: 1.43; +} +h4 { + font-size: 1.25em; +} +h5 { + font-size: 1em; +} +h6 { + font-size: 1em; + color: #777; +} +p, +blockquote, +ul, +ol, +dl, +table{ + margin: 0.8em 0; +} +li>ol, +li>ul { + margin: 0 0; +} +hr { + height: 2px; + padding: 0; + margin: 16px 0; + background-color: #e7e7e7; + border: 0 none; + overflow: hidden; + box-sizing: content-box; +} + +li p.first { + display: inline-block; +} +ul, +ol { + padding-left: 30px; +} +ul:first-child, +ol:first-child { + margin-top: 0; +} +ul:last-child, +ol:last-child { + margin-bottom: 0; +} +blockquote { + border-left: 4px solid #dfe2e5; + padding: 0 15px; + color: #777777; +} +blockquote blockquote { + padding-right: 0; +} +table { + padding: 0; + word-break: initial; +} +table tr { + border: 1px solid #dfe2e5; + margin: 0; + padding: 0; +} +table tr:nth-child(2n), +thead { + background-color: #f8f8f8; +} +table th { + font-weight: bold; + border: 1px solid #dfe2e5; + border-bottom: 0; + margin: 0; + padding: 6px 13px; +} +table td { + border: 1px solid #dfe2e5; + margin: 0; + padding: 6px 13px; +} +table th:first-child, +table td:first-child { + margin-top: 0; +} +table th:last-child, +table td:last-child { + margin-bottom: 0; +} + +.CodeMirror-lines { + padding-left: 4px; +} + +.code-tooltip { + box-shadow: 0 1px 1px 0 rgba(0,28,36,.3); + border-top: 1px solid #eef2f2; +} + +.md-fences, +code, +tt { + border: 1px solid #e7eaed; + background-color: #f8f8f8; + border-radius: 3px; + padding: 0; + padding: 2px 4px 0px 4px; + font-size: 0.9em; +} + +code { + background-color: #f3f4f4; + padding: 0 2px 0 2px; +} + +.md-fences { + margin-bottom: 15px; + margin-top: 15px; + padding-top: 8px; + padding-bottom: 6px; +} + + +.md-task-list-item > input { + margin-left: -1.3em; +} + +@media print { + html { + font-size: 13px; + } + pre { + page-break-inside: avoid; + word-wrap: break-word; + } +} + +.md-fences { + background-color: #f8f8f8; +} +#write pre.md-meta-block { + padding: 1rem; + font-size: 85%; + line-height: 1.45; + background-color: #f7f7f7; + border: 0; + border-radius: 3px; + color: #777777; + margin-top: 0 !important; +} + +.mathjax-block>.code-tooltip { + bottom: .375rem; +} + +.md-mathjax-midline { + background: #fafafa; +} + +#write>h3.md-focus:before{ + left: -1.5625rem; + top: .375rem; +} +#write>h4.md-focus:before{ + left: -1.5625rem; + top: .285714286rem; +} +#write>h5.md-focus:before{ + left: -1.5625rem; + top: .285714286rem; +} +#write>h6.md-focus:before{ + left: -1.5625rem; + top: .285714286rem; +} +.md-image>.md-meta { + /*border: 1px solid #ddd;*/ + border-radius: 3px; + padding: 2px 0px 0px 4px; + font-size: 0.9em; + color: inherit; +} + +.md-tag { + color: #a7a7a7; + opacity: 1; +} + +.md-toc { + margin-top:20px; + padding-bottom:20px; +} + +.sidebar-tabs { + border-bottom: none; +} + +#typora-quick-open { + border: 1px solid #ddd; + background-color: #f8f8f8; +} + +#typora-quick-open-item { + background-color: #FAFAFA; + border-color: #FEFEFE #e5e5e5 #e5e5e5 #eee; + border-style: solid; + border-width: 1px; +} + +/** focus mode */ +.on-focus-mode blockquote { + border-left-color: rgba(85, 85, 85, 0.12); +} + +header, .context-menu, .megamenu-content, footer{ + font-family: "Segoe UI", "Arial", sans-serif; +} + +.file-node-content:hover .file-node-icon, +.file-node-content:hover .file-node-open-state{ + visibility: visible; +} + +.mac-seamless-mode #typora-sidebar { + background-color: #fafafa; + background-color: var(--side-bar-bg-color); +} + +.mac-os #write{ + caret-color: AccentColor; +} + +.md-lang { + color: #b4654d; +} + +/*.html-for-mac { + --item-hover-bg-color: #E6F0FE; +}*/ + +#md-notification .btn { + border: 0; +} + +.dropdown-menu .divider { + border-color: #e5e5e5; + opacity: 0.4; +} + +.ty-preferences .window-content { + background-color: #fafafa; +} + +.ty-preferences .nav-group-item.active { + color: white; + background: #999; +} + +.menu-item-container a.menu-style-btn { + background-color: #f5f8fa; + background-image: linear-gradient( 180deg , hsla(0, 0%, 100%, 0.8), hsla(0, 0%, 100%, 0)); +} diff --git a/config/Typora/themes/old-themes/github/open-sans-v17-latin-ext_latin-700.woff2 b/config/Typora/themes/old-themes/github/open-sans-v17-latin-ext_latin-700.woff2 new file mode 100644 index 0000000..c824c31 Binary files /dev/null and b/config/Typora/themes/old-themes/github/open-sans-v17-latin-ext_latin-700.woff2 differ diff --git a/config/Typora/themes/old-themes/github/open-sans-v17-latin-ext_latin-700italic.woff2 b/config/Typora/themes/old-themes/github/open-sans-v17-latin-ext_latin-700italic.woff2 new file mode 100644 index 0000000..4115f24 Binary files /dev/null and b/config/Typora/themes/old-themes/github/open-sans-v17-latin-ext_latin-700italic.woff2 differ diff --git a/config/Typora/themes/old-themes/github/open-sans-v17-latin-ext_latin-italic.woff2 b/config/Typora/themes/old-themes/github/open-sans-v17-latin-ext_latin-italic.woff2 new file mode 100644 index 0000000..7584008 Binary files /dev/null and b/config/Typora/themes/old-themes/github/open-sans-v17-latin-ext_latin-italic.woff2 differ diff --git a/config/Typora/themes/old-themes/github/open-sans-v17-latin-ext_latin-regular.woff2 b/config/Typora/themes/old-themes/github/open-sans-v17-latin-ext_latin-regular.woff2 new file mode 100644 index 0000000..9b58220 Binary files /dev/null and b/config/Typora/themes/old-themes/github/open-sans-v17-latin-ext_latin-regular.woff2 differ diff --git a/config/Typora/themes/old-themes/newsprint.css b/config/Typora/themes/old-themes/newsprint.css new file mode 100644 index 0000000..67ded50 --- /dev/null +++ b/config/Typora/themes/old-themes/newsprint.css @@ -0,0 +1,622 @@ +/* meyer reset -- http://meyerweb.com/eric/tools/css/reset/ , v2.0 | 20110126 | License: none (public domain) */ + +@include-when-export url(https://fonts.googleapis.com/css?family=PT+Serif:400,400italic,700,700italic&subset=latin,cyrillic-ext,cyrillic,latin-ext); + +/* =========== */ + +/* pt-serif-regular - latin */ +@font-face { + font-family: 'PT Serif'; + font-style: normal; + font-weight: normal; + src: local('PT Serif'), local('PTSerif-Regular'), url('./newsprint/pt-serif-v11-latin-regular.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* pt-serif-italic - latin */ +@font-face { + font-family: 'PT Serif'; + font-style: italic; + font-weight: normal; + src: local('PT Serif Italic'), local('PTSerif-Italic'), url('./newsprint/pt-serif-v11-latin-italic.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* pt-serif-700 - latin */ +@font-face { + font-family: 'PT Serif'; + font-style: normal; + font-weight: bold; + src: local('PT Serif Bold'), local('PTSerif-Bold'), url('./newsprint/pt-serif-v11-latin-700.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* pt-serif-700italic - latin */ +@font-face { + font-family: 'PT Serif'; + font-style: italic; + font-weight: bold; + src: local('PT Serif Bold Italic'), local('PTSerif-BoldItalic'), url('./newsprint/pt-serif-v11-latin-700italic.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +:root { + --active-file-bg-color: #dadada; + --active-file-bg-color: rgba(32, 43, 51, 0.63); + --active-file-text-color: white; + --bg-color: #f3f2ee; + --text-color: #1f0909; + --control-text-color: #444; + --rawblock-edit-panel-bd: #e5e5e5; + + --select-text-bg-color: rgba(32, 43, 51, 0.63); + --select-text-font-color: white; +} + +pre { + --select-text-bg-color: #36284e; + --select-text-font-color: #fff; +} + +html { + font-size: 16px; + -webkit-font-smoothing: antialiased; +} + +html, body { + background-color: #f3f2ee; + font-family: "PT Serif", 'Times New Roman', 'SF Pro', Times, serif; + color: #1f0909; + line-height: 1.5em; +} + +/*#write { + overflow-x: auto; + max-width: initial; + padding-left: calc(50% - 17em); + padding-right: calc(50% - 17em); +} + +@media (max-width: 36em) { + #write { + padding-left: 1em; + padding-right: 1em; + } +}*/ + +#write { + max-width: 40em; +} + +@media only screen and (min-width: 1400px) { + #write { + max-width: 914px; + } +} + +ol li { + list-style-type: decimal; + list-style-position: outside; +} +ul li { + list-style-type: disc; + list-style-position: outside; +} + +ol, +ul { + list-style: none; +} + +blockquote, +q { + quotes: none; +} +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +/* styles */ + +/* ====== */ + +/* headings */ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: bold; +} +h1 { + font-size: 1.875em; + /*30 / 16*/ + line-height: 1.6em; + /* 48 / 30*/ + margin-top: 2em; +} +h2, +h3 { + font-size: 1.3125em; + /*21 / 16*/ + line-height: 1.15; + /*24 / 21*/ + margin-top: 2.285714em; + /*48 / 21*/ + margin-bottom: 1.15em; + /*24 / 21*/ +} +h3 { + font-weight: normal; +} +h4 { + font-size: 1.125em; + /*18 / 16*/ + margin-top: 2.67em; + /*48 / 18*/ +} +h5, +h6 { + font-size: 1em; + /*16*/ +} +h1 { + border-bottom: 1px solid; + margin-bottom: 1.875em; + padding-bottom: 0.8125em; +} +/* links */ + +a { + text-decoration: none; + color: #065588; +} +a:hover, +a:active { + text-decoration: underline; +} +/* block spacing */ + +p, +blockquote, +.md-fences { + margin-bottom: 1.5em; +} +h1, +h2, +h3, +h4, +h5, +h6 { + margin-bottom: 1.5em; +} +/* blockquote */ + +blockquote { + font-style: italic; + border-left: 5px solid; + margin-left: 2em; + padding-left: 1em; +} +/* lists */ + +ul, +ol { + margin: 0 0 1.5em 1.5em; +} +/* tables */ +.md-meta,.md-before, .md-after { + color:#999; +} + +table { + margin-bottom: 1.5em; + /*24 / 16*/ + font-size: 1em; + /* width: 100%; */ +} +thead th, +tfoot th { + padding: .25em .25em .25em .4em; + text-transform: uppercase; +} +th { + text-align: left; +} +td { + vertical-align: top; + padding: .25em .25em .25em .4em; +} + +code, +.md-fences { + background-color: #dadada; +} + +code { + padding-left: 2px; + padding-right: 2px; +} + +.md-fences { + margin-left: 2em; + margin-bottom: 3em; + padding-left: 1ch; + padding-right: 1ch; +} + +pre, +code, +tt { + font-size: .875em; + line-height: 1.714285em; +} +/* some fixes */ + +h1 { + line-height: 1.3em; + font-weight: normal; + margin-bottom: 0.5em; +} + +p + ul, +p + ol{ + margin-top: .5em; +} + +h3 + ul, +h4 + ul, +h5 + ul, +h6 + ul, +h3 + ol, +h4 + ol, +h5 + ol, +h6 + ol { + margin-top: .5em; +} + +li > ul, +li > ol { + margin-top: inherit; + margin-bottom: 0; +} + +li ol>li { + list-style-type: lower-alpha; +} + +li li ol>li{ + list-style-type: lower-roman; +} + +h2, +h3 { + margin-bottom: .75em; +} +hr { + border-top: none; + border-right: none; + border-bottom: 1px solid; + border-left: none; +} +h1 { + border-color: #c5c5c5; +} +blockquote { + border-color: #bababa; + color: #656565; +} + +blockquote ul, +blockquote ol { + margin-left:0; +} + +.ty-table-edit { + background-color: transparent; +} +thead { + background-color: #dadada; +} +tr:nth-child(even) { + background: #e8e7e7; +} +hr { + border-color: #c5c5c5; +} +.task-list{ + padding-left: 1rem; +} + +.md-task-list-item { + padding-left: 1.5rem; + list-style-type: none; +} + +.md-task-list-item > input:before { + content: '\221A'; + display: inline-block; + width: 1.25rem; + height: 1.6rem; + vertical-align: middle; + text-align: center; + color: #ddd; + background-color: #F3F2EE; +} + +.md-task-list-item > input:checked:before, +.md-task-list-item > input[checked]:before{ + color: inherit; +} + +#write pre.md-meta-block { + min-height: 1.875rem; + color: #555; + border: 0px; + background: transparent; + margin-top: -4px; + margin-left: 1em; + margin-top: 1em; +} + +.md-image>.md-meta { + color: #9B5146; +} + +.md-image>.md-meta{ + font-family: Menlo, 'Ubuntu Mono', Consolas, 'Courier New', 'Microsoft Yahei', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', serif; +} + + +#write>h3.md-focus:before{ + left: -1.5rem; + color:#999; + border-color:#999; +} +#write>h4.md-focus:before{ + left: -1.5rem; + top: .25rem; + color:#999; + border-color:#999; +} +#write>h5.md-focus:before{ + left: -1.5rem; + top: .0.3125rem; + color:#999; + border-color:#999; +} +#write>h6.md-focus:before{ + left: -1.5rem; + top: 0.3125rem; + color:#999; + border-color:#999; +} + +.md-toc:focus .md-toc-content{ + margin-top: 19px; +} + +.md-toc-content:empty:before{ + color: #065588; +} +.md-toc-item { + color: #065588; +} +#write div.md-toc-tooltip { + background-color: #f3f2ee; +} + +#typora-sidebar { + background-color: #f3f2ee; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.375); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.375); +} + +.pin-outline #typora-sidebar { + background: inherit; + box-shadow: none; + border-right: 1px dashed; +} + +.pin-outline #typora-sidebar:hover .outline-title-wrapper { + border-left:1px dashed; +} + +.outline-item:hover { + background-color: #dadada; + border-left: 28px solid #dadada; + border-right: 18px solid #dadada; +} + +.typora-node .outline-item:hover { + border-right: 28px solid #dadada; +} + +.outline-expander:before { + content: "\f0da"; + font-family: FontAwesome; + font-size:14px; + top: 1px; +} + +.outline-expander:hover:before, +.outline-item-open>.outline-item>.outline-expander:before { + content: "\f0d7"; +} + +.modal-content { + background-color: #f3f2ee; +} + +.auto-suggest-container ul li { + list-style-type: none; +} + +/** UI for electron */ + +.megamenu-menu, +#top-titlebar, #top-titlebar *, +.megamenu-content { + background: #f3f2ee; + color: #1f0909; +} + +.megamenu-menu-header { + border-bottom: 1px dashed #202B33; +} + +.megamenu-menu { + box-shadow: none; + border-right: 1px dashed; +} + +header, .context-menu, .megamenu-content, footer { + font-family: "PT Serif", 'Times New Roman', Times, serif; + color: #1f0909; +} + +#megamenu-back-btn { + color: #1f0909; + border-color: #1f0909; +} + +.megamenu-menu-header #megamenu-menu-header-title:before { + color: #1f0909; +} + +.megamenu-menu-list li a:hover, .megamenu-menu-list li a.active { + color: inherit; + background-color: #e8e7df; +} + +.long-btn:hover { + background-color: #e8e7df; +} + +#recent-file-panel tbody tr:nth-child(2n-1) { + background-color: transparent !important; +} + +.megamenu-menu-panel tbody tr:hover td:nth-child(2) { + color: inherit; +} + +.megamenu-menu-panel .btn { + background-color: #D2D1D1; +} + +.btn-default { + background-color: transparent; +} + +.typora-sourceview-on #toggle-sourceview-btn, +.ty-show-word-count #footer-word-count { + background: #c7c5c5; +} + +#typora-quick-open { + background-color: inherit; +} + +.md-diagram-panel { + margin-top: 8px; +} + +.file-list-item-file-name { + font-weight: initial; +} + +.file-list-item-summary { + opacity: 1; +} + +.file-list-item { + color: #777; +} + +.file-list-item.active { + background-color: inherit; + color: black; +} + +.ty-side-sort-btn.active { + background-color: inherit; +} + +.file-list-item.active .file-list-item-file-name { + font-weight: bold; +} + +.file-list-item{ + opacity:1 !important; +} + +.file-library-node.active>.file-node-background{ + background-color: rgba(32, 43, 51, 0.63); + background-color: var(--active-file-bg-color); +} + +.file-tree-node.active>.file-node-content{ + color: white; + color: var(--active-file-text-color); +} + +.md-task-list-item>input { + margin-left: -1.7em; + margin-top: calc(1rem - 12px); + -webkit-appearance: button; +} + +input { + border: 1px solid #aaa; +} + +.megamenu-menu-header #megamenu-menu-header-title, +.megamenu-menu-header:hover, +.megamenu-menu-header:focus { + color: inherit; +} + +.dropdown-menu .divider { + border-color: #e5e5e5; + opacity: 1; +} + +/* https://github.com/typora/typora-issues/issues/2046 */ +.os-windows-7 strong, +.os-windows-7 strong { + font-weight: 760; +} + +.ty-preferences .btn-default { + background: transparent; +} + +.ty-preferences .window-header { + border-bottom: 1px dashed #202B33; + box-shadow: none; +} + +#sidebar-loading-template, #sidebar-loading-template.file-list-item { + color: #777; +} + +.searchpanel-search-option-btn.active { + background: #777; + color: white; +} + +.export-detail, .light .export-detail, +.light .export-item.active, +.light .export-items-list-control { + background: #e0e0e0; + border-radius: 2px; + font-weight: 700; + color: inherit +} \ No newline at end of file diff --git a/config/Typora/themes/old-themes/newsprint/pt-serif-v11-latin-700.woff2 b/config/Typora/themes/old-themes/newsprint/pt-serif-v11-latin-700.woff2 new file mode 100644 index 0000000..6f6553d Binary files /dev/null and b/config/Typora/themes/old-themes/newsprint/pt-serif-v11-latin-700.woff2 differ diff --git a/config/Typora/themes/old-themes/newsprint/pt-serif-v11-latin-700italic.woff2 b/config/Typora/themes/old-themes/newsprint/pt-serif-v11-latin-700italic.woff2 new file mode 100644 index 0000000..010abc9 Binary files /dev/null and b/config/Typora/themes/old-themes/newsprint/pt-serif-v11-latin-700italic.woff2 differ diff --git a/config/Typora/themes/old-themes/newsprint/pt-serif-v11-latin-italic.woff2 b/config/Typora/themes/old-themes/newsprint/pt-serif-v11-latin-italic.woff2 new file mode 100644 index 0000000..79c6bec Binary files /dev/null and b/config/Typora/themes/old-themes/newsprint/pt-serif-v11-latin-italic.woff2 differ diff --git a/config/Typora/themes/old-themes/newsprint/pt-serif-v11-latin-regular.woff2 b/config/Typora/themes/old-themes/newsprint/pt-serif-v11-latin-regular.woff2 new file mode 100644 index 0000000..6e04521 Binary files /dev/null and b/config/Typora/themes/old-themes/newsprint/pt-serif-v11-latin-regular.woff2 differ diff --git a/config/Typora/themes/old-themes/night.css b/config/Typora/themes/old-themes/night.css new file mode 100644 index 0000000..b61893a --- /dev/null +++ b/config/Typora/themes/old-themes/night.css @@ -0,0 +1,1032 @@ +@import "night/mermaid.dark.css"; +@import "night/codeblock.dark.css"; +@import "night/sourcemode.dark.css"; + +:root { + --bg-color: #363B40; + --side-bar-bg-color: #2E3033; + --text-color: #b8bfc6; + + --select-text-bg-color:#4a89dc; + + --item-hover-bg-color: #0a0d16; + --control-text-color: #b7b7b7; + --control-text-hover-color: #eee; + --window-border: 1px solid #555; + + --active-file-bg-color: rgb(34, 34, 34); + --active-file-border-color: #8d8df0; + + --primary-color: #a3d5fe; + + --active-file-text-color: white; + --item-hover-bg-color: #70717d; + --item-hover-text-color: white; + --primary-color: #6dc1e7; + + --rawblock-edit-panel-bd: #333; + + --search-select-bg-color: #428bca; +} + +html { + font-size: 16px; + -webkit-font-smoothing: antialiased; +} + +html, +body { + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + background: #363B40; + background: var(--bg-color); + fill: currentColor; + line-height: 1.625rem; +} + +#write { + max-width: 914px; +} + + +@media only screen and (min-width: 1400px) { + #write { + max-width: 1024px; + } +} + +@media only screen and (min-width: 1800px) { + #write { + max-width: 1200px; + } +} + +html, +body, +button, +input, +select, +textarea, +div.code-tooltip-content { + color: #b8bfc6; + border-color: transparent; +} + +div.code-tooltip, +.md-hover-tip .md-arrow:after { + background: #333; +} + +.native-window #md-notification { + border: 1px solid #70717d; +} + +.popover.bottom > .arrow:after { + border-bottom-color: #333; +} + +html, +body, +button, +input, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, 'Segoe UI Emoji', 'SF Pro', sans-serif; +} + +hr { + height: 2px; + border: 0; + margin: 24px 0 !important; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: "Lucida Grande", "Corbel", sans-serif; + font-weight: normal; + clear: both; + -ms-word-wrap: break-word; + word-wrap: break-word; + margin: 0; + padding: 0; + color: #DEDEDE +} + +h1 { + font-size: 2.5rem; + /* 36px */ + line-height: 2.75rem; + /* 40px */ + margin-bottom: 1.5rem; + /* 24px */ + letter-spacing: -1.5px; +} + +h2 { + font-size: 1.63rem; + /* 24px */ + line-height: 1.875rem; + /* 30px */ + margin-bottom: 1.5rem; + /* 24px */ + letter-spacing: -1px; + font-weight: bold; +} + +h3 { + font-size: 1.17rem; + /* 18px */ + line-height: 1.5rem; + /* 24px */ + margin-bottom: 1.5rem; + /* 24px */ + letter-spacing: -1px; + font-weight: bold; +} + +h4 { + font-size: 1.12rem; + /* 16px */ + line-height: 1.375rem; + /* 22px */ + margin-bottom: 1.5rem; + /* 24px */ + color: white; +} + +h5 { + font-size: 0.97rem; + /* 16px */ + line-height: 1.25rem; + /* 22px */ + margin-bottom: 1.5rem; + /* 24px */ + font-weight: bold; +} + +h6 { + font-size: 0.93rem; + /* 16px */ + line-height: 1rem; + /* 16px */ + margin-bottom: 0.75rem; + color: white; +} + +@media (min-width: 980px) { + h3.md-focus:before, + h4.md-focus:before, + h5.md-focus:before, + h6.md-focus:before { + color: #ddd; + border: 1px solid #ddd; + border-radius: 3px; + position: absolute; + left: -1.642857143rem; + top: .357142857rem; + float: left; + font-size: 9px; + padding-left: 2px; + padding-right: 2px; + vertical-align: bottom; + font-weight: normal; + line-height: normal; + } + + h3.md-focus:before { + content: 'h3'; + } + + h4.md-focus:before { + content: 'h4'; + } + + h5.md-focus:before { + content: 'h5'; + top: 0px; + } + + h6.md-focus:before { + content: 'h6'; + top: 0px; + } +} + +a { + text-decoration: none; + outline: 0; +} + +a:hover { + outline: 0; +} + +a:focus { + outline: thin dotted; +} + +sup.md-footnote { + background-color: #555; + color: #ddd; +} + +p { + -ms-word-wrap: break-word; + word-wrap: break-word; +} + +p, +ul, +dd, +ol, +hr, +address, +pre, +table, +iframe, +.wp-caption, +.wp-audio-shortcode, +.wp-video-shortcode { + margin-top: 0; + margin-bottom: 1.5rem; + /* 24px */ +} + +audio:not([controls]) { + display: none; +} + +[hidden] { + display: none; +} + +::-moz-selection { + background: #4a89dc; + color: #fff; + text-shadow: none; +} + +*.in-text-selection, +::selection { + background: #4a89dc; + color: #fff; + text-shadow: none; +} + +ul, +ol { + padding: 0 0 0 1.875rem; + /* 30px */ +} + +ul { + list-style: square; +} + +ol { + list-style: decimal; +} + +ul ul, +ol ol, +ul ol, +ol ul { + margin: 0; +} + +b, +th, +dt, +strong { + font-weight: bold; +} + +i, +em, +dfn, +cite { + font-style: italic; +} + +blockquote { + padding-left: 1.875rem; + margin: 0 0 1.875rem 1.875rem; + border-left: solid 2px #474d54; + padding-left: 30px; + margin-top: 35px; +} + +pre, +code, +kbd, +tt, +var { + font-size: 0.875em; + font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; +} + +code, +tt, +var { + background: rgba(0, 0, 0, 0.05); +} + +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); +} + +pre.md-fences { + padding: 10px 10px 10px 30px; + margin-bottom: 20px; + background: #333; +} + +.CodeMirror-gutters { + background: #333; + border-right: 1px solid transparent; +} + +.enable-diagrams pre.md-fences[lang="sequence"] .code-tooltip, +.enable-diagrams pre.md-fences[lang="flow"] .code-tooltip, +.enable-diagrams pre.md-fences[lang="mermaid"] .code-tooltip { + bottom: -2.2em; + right: 4px; +} + +code, +kbd, +tt, +var { + padding: 2px 5px; +} + +table { + max-width: 100%; + width: 100%; + border-collapse: collapse; + border-spacing: 0; +} + +th, +td { + padding: 5px 10px; + vertical-align: top; +} + +a { + -webkit-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} + +hr { + background: #474d54; + /* variable */ +} + +h1 { + margin-top: 2em; +} + +a { + color: #e0e0e0; + text-decoration: underline; +} + +a:hover { + color: #fff; +} + +.md-inline-math script { + color: #81b1db; +} + +b, +th, +dt, +strong { + color: #DEDEDE; + /* variable */ +} + +mark { + background: #D3D40E; +} + +blockquote { + color: #9DA2A6; +} + +table a { + color: #DEDEDE; + /* variable */ +} + +th, +td { + border: solid 1px #474d54; + /* variable */ +} + +.task-list { + padding-left: 0; +} + +.md-task-list-item { + padding-left: 1.25rem; +} + +.md-task-list-item > input { + top: auto; +} + +.md-task-list-item > input:before { + content: ""; + display: inline-block; + width: 0.875rem; + height: 0.875rem; + vertical-align: middle; + text-align: center; + border: 1px solid #b8bfc6; + background-color: #363B40; + margin-top: -0.4rem; +} + +.md-task-list-item > input:checked:before, +.md-task-list-item > input[checked]:before { + content: '\221A'; + /*◘*/ + font-size: 0.625rem; + line-height: 0.625rem; + color: #DEDEDE; +} + +/** quick open **/ +.auto-suggest-container { + border: 0px; + background-color: #525C65; +} + +#typora-quick-open { + background-color: #525C65; +} + +#typora-quick-open input{ + background-color: #525C65; + border: 0; + border-bottom: 1px solid grey; +} + +.typora-quick-open-item { + background-color: inherit; + color: inherit; +} + +.typora-quick-open-item.active, +.typora-quick-open-item:hover { + background-color: #4D8BDB; + color: white; +} + +.typora-quick-open-item:hover { + background-color: rgba(77, 139, 219, 0.8); +} + +.typora-search-spinner > div { + background-color: #fff; +} + +#write pre.md-meta-block { + border-bottom: 1px dashed #ccc; + background: transparent; + padding-bottom: 0.6em; + line-height: 1.6em; +} + +.btn, +.btn .btn-default { + background: transparent; + color: #b8bfc6; +} + +.ty-table-edit { + border-top: 1px solid gray; + background-color: #363B40; +} + +.popover-title { + background: transparent; +} + +.md-image>.md-meta { + color: #BBBBBB; + background: transparent; +} + +.md-expand.md-image>.md-meta { + color: #DDD; +} + +#write>h3:before, +#write>h4:before, +#write>h5:before, +#write>h6:before { + border: none; + border-radius: 0px; + color: #888; + text-decoration: underline; + left: -1.4rem; + top: 0.2rem; +} + +#write>h3.md-focus:before { + top: 2px; +} + +#write>h4.md-focus:before { + top: 2px; +} + +.md-toc-item { + color: #A8C2DC; +} + +#write div.md-toc-tooltip { + background-color: #363B40; +} + +.dropdown-menu .btn:hover, +.dropdown-menu .btn:focus, +.md-toc .btn:hover, +.md-toc .btn:focus { + color: white; + background: black; +} + +#toc-dropmenu { + background: rgba(50, 54, 59, 0.93); + border: 1px solid rgba(253, 253, 253, 0.15); +} + +#toc-dropmenu .divider { + background-color: #9b9b9b; +} + +.outline-expander:before { + top: 2px; +} + +#typora-sidebar { + box-shadow: none; + border-right: 1px dashed; + border-right: none; +} + +.sidebar-tabs { + border-bottom:0; +} + +#typora-sidebar:hover .outline-title-wrapper { + border-left: 1px dashed; +} + +.outline-title-wrapper .btn { + color: inherit; +} + +.outline-item:hover { + border-color: #363B40; + background-color: #363B40; + color: white; +} + +h1.md-focus .md-attr, +h2.md-focus .md-attr, +h3.md-focus .md-attr, +h4.md-focus .md-attr, +h5.md-focus .md-attr, +h6.md-focus .md-attr, +.md-header-span .md-attr { + color: #8C8E92; + display: inline; +} + +.md-comment { + color: #5a95e3; + opacity: 0.8; +} + +.md-inline-math svg { + color: #b8bfc6; +} + +#math-inline-preview .md-arrow:after { + background: black; +} + +.modal-content { + background: var(--bg-color); + border: 0; +} + +.modal-title { + font-size: 1.5em; +} + +.modal-content input { + background-color: rgba(26, 21, 21, 0.51); + color: white; +} + +.modal-content .input-group-addon { + color: white; +} + +.modal-backdrop { + background-color: rgba(174, 174, 174, 0.7); +} + +.modal-content .btn-primary { + border-color: var(--primary-color); +} + +.md-table-resize-popover { + background-color: #333; +} + +.form-inline .input-group .input-group-addon { + color: white; +} + +#md-searchpanel { + border-bottom: 1px dashed grey; +} + +/** UI for electron */ + +.context-menu, +#spell-check-panel, +#footer-word-count-info { + background-color: #42464A; +} + +.context-menu.dropdown-menu .divider, +.dropdown-menu .divider { + background-color: #777777; + opacity: 1; +} + +footer { + color: inherit; +} + +@media (max-width: 1000px) { + footer { + border-top: none; + } + footer:hover { + color: inherit; + } +} + +#file-info-file-path .file-info-field-value:hover { + background-color: #555; + color: #dedede; +} + +.megamenu-content, +.megamenu-opened header { + background: var(--bg-color); +} + +.megamenu-menu-panel h2, +.megamenu-menu-panel h1, +.long-btn { + color: inherit; +} + +.megamenu-menu-panel input[type='text'] { + background: inherit; + border: 0; + border-bottom: 1px solid; +} + +#recent-file-panel-action-btn { + background: inherit; + border: 1px grey solid; +} + +.megamenu-menu-panel .dropdown-menu > li > a { + color: inherit; + background-color: #2F353A; + text-decoration: none; +} + +.megamenu-menu-panel table td:nth-child(1) { + color: inherit; + font-weight: bold; +} + +.megamenu-menu-panel tbody tr:hover td:nth-child(1) { + color: white; +} + +.modal-footer .btn-default, +.modal-footer .btn-primary, +.modal-footer .btn-default:not(:hover) { + border: 1px solid; + border-color: transparent; +} + +.btn-primary { + color: white; +} + +.btn-default:hover, .btn-default:focus, .btn-default.focus, .btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { + color: white; + border: 1px solid #ddd; + background-color: inherit; +} + +.modal-header { + border-bottom: 0; +} + +.modal-footer { + border-top: 0; +} + +#recent-file-panel tbody tr:nth-child(2n-1) { + background-color: transparent !important; +} + +.megamenu-menu-panel tbody tr:hover td:nth-child(2) { + color: inherit; +} + +.megamenu-menu-panel .btn { + border: 1px solid #eee; + background: transparent; +} + +.mouse-hover .toolbar-icon.btn:hover, +#w-full.mouse-hover, +#w-pin.mouse-hover { + background-color: inherit; +} + +.typora-node::-webkit-scrollbar { + width: 5px; +} + +.typora-node::-webkit-scrollbar-thumb:vertical { + background: rgba(250, 250, 250, 0.3); +} + +.typora-node::-webkit-scrollbar-thumb:vertical:active { + background: rgba(250, 250, 250, 0.5); +} + +#w-unpin { + background-color: #4182c4; +} + +#top-titlebar, #top-titlebar * { + color: var(--item-hover-text-color); +} + +.typora-sourceview-on #toggle-sourceview-btn, +#footer-word-count:hover, +.ty-show-word-count #footer-word-count { + background: #333333; +} + +#toggle-sourceview-btn:hover { + color: #eee; + background: #333333; +} + +/** focus mode */ +.on-focus-mode .md-end-block:not(.md-focus):not(.md-focus-container) * { + color: #686868 !important; +} + +.on-focus-mode .md-end-block:not(.md-focus) img, +.on-focus-mode .md-task-list-item:not(.md-focus-container)>input { + opacity: #686868 !important; +} + +.on-focus-mode li[cid]:not(.md-focus-container){ + color: #686868; +} + +.on-focus-mode .md-fences.md-focus .CodeMirror-code>*:not(.CodeMirror-activeline) *, +.on-focus-mode .CodeMirror.cm-s-inner:not(.CodeMirror-focused) * { + color: #686868 !important; +} + +.on-focus-mode .md-focus, +.on-focus-mode .md-focus-container { + color: #fff; +} + +.on-focus-mode #typora-source .CodeMirror-code>*:not(.CodeMirror-activeline) * { + color: #686868 !important; +} + + +/*diagrams*/ +#write .md-focus .md-diagram-panel { + border: 1px solid #ddd; + margin-left: -1px; + width: calc(100% + 2px); +} + +/*diagrams*/ +#write .md-focus.md-fences-with-lineno .md-diagram-panel { + margin-left: auto; +} + +.md-diagram-panel-error { + color: #f1908e; +} + +.active-tab-files #info-panel-tab-file, +.active-tab-files #info-panel-tab-file:hover, +.active-tab-outline #info-panel-tab-outline, +.active-tab-outline #info-panel-tab-outline:hover { + color: #eee; +} + +.sidebar-footer-item:hover, +.footer-item:hover { + background: inherit; + color: white; +} + +.ty-side-sort-btn.active, +.ty-side-sort-btn:hover, +.selected-folder-menu-item a:after { + color: white; +} + +#sidebar-files-menu { + border:solid 1px; + box-shadow: 4px 4px 20px rgba(0, 0, 0, 0.79); + background-color: var(--bg-color); +} + +.file-list-item { + border-bottom:none; +} + +.file-list-item-summary { + opacity: 1; +} + +.file-list-item.active:first-child { + border-top: none; +} + +.file-node-background { + height: 32px; +} + +.file-library-node.active>.file-node-content, +.file-list-item.active { + color: white; + color: var(--active-file-text-color); +} + +.file-library-node.active>.file-node-background{ + background-color: rgb(34, 34, 34); + background-color: var(--active-file-bg-color); +} +.file-list-item.active { + background-color: rgb(34, 34, 34); + background-color: var(--active-file-bg-color); +} + +#ty-tooltip { + background-color: black; + color: #eee; +} + +.md-task-list-item>input { + margin-left: -1.3em; + margin-top: 0.3rem; + -webkit-appearance: none; +} + +.md-mathjax-midline { + background-color: #57616b; + border-bottom: none; +} + +footer.ty-footer { + border-color: #656565; +} + +.ty-preferences .btn-default { + background: transparent; +} +.ty-preferences .btn-default:hover { + background: #57616b; +} + +.ty-preferences select { + border: 1px solid #989698; + height: 21px; +} + +.ty-preferences .nav-group-item.active, +.export-item.active, +.export-items-list-control, +.export-detail { + background: var(--item-hover-bg-color); +} + +.ty-preferences input[type="search"] { + border-color: #333; + background: #333; + line-height: 22px; + border-radius: 6px; + color: white; +} + +.ty-preferences input[type="search"]:focus { + box-shadow: none; +} + +[data-is-directory="true"] .file-node-content { + margin-bottom: 0; +} + +.file-node-title { + line-height: 22px; +} + +.html-for-mac .file-node-open-state, .html-for-mac .file-node-icon { + line-height: 26px; +} + +::-webkit-scrollbar-thumb { + background: rgba(230, 230, 230, 0.30); +} + +::-webkit-scrollbar-thumb:active { + background: rgba(230, 230, 230, 0.50); +} + +#typora-sidebar:hover div.sidebar-content-content::-webkit-scrollbar-thumb:horizontal { + background: rgba(230, 230, 230, 0.30); +} + +.nav-group-item:active { + background-color: #474d54 !important; +} + +.md-search-hit { + background: rgba(199, 140, 60, 0.81); + color: #eee; +} + +.md-search-hit * { + color: #eee; +} + +#md-searchpanel input { + color: white; +} + +.modal-backdrop.in { + opacity: 1; + backdrop-filter: blur(1px); +} + +.clear-btn-icon { + top: 8px; +} + +/* try fix https://github.com/typora/typora-issues/issues/5253 */ +.file-node-expanded>.file-node-children { + display: grid; + } + +.md-alert-text-note { + color: rgb(47, 129, 247); +} +.md-alert-text-important { + color: rgb(163, 113, 247); +} +.md-alert-text-warning { + color: rgb(210, 153, 34); +} \ No newline at end of file diff --git a/config/Typora/themes/old-themes/night/codeblock.dark.css b/config/Typora/themes/old-themes/night/codeblock.dark.css new file mode 100644 index 0000000..a1b1bb3 --- /dev/null +++ b/config/Typora/themes/old-themes/night/codeblock.dark.css @@ -0,0 +1,113 @@ +@charset "UTF-8"; +/* CSS Document */ + +/** code highlight */ + +.cm-s-inner .cm-variable, +.cm-s-inner .cm-operator, +.cm-s-inner .cm-property { + color: #b8bfc6; +} + +.cm-s-inner .cm-keyword { + color: #C88FD0; +} + +.cm-s-inner .cm-tag { + color: #7DF46A; +} + +.cm-s-inner .cm-attribute { + color: #7575E4; +} + +.CodeMirror div.CodeMirror-cursor { + border-left: 1px solid #b8bfc6; + z-index: 3; +} + +.cm-s-inner .cm-string { + color: #D26B6B; +} + +.cm-s-inner .cm-comment, +.cm-s-inner.cm-comment { + color: #DA924A; +} + +.cm-s-inner .cm-header, +.cm-s-inner .cm-def, +.cm-s-inner.cm-header, +.cm-s-inner.cm-def { + color: #8d8df0; +} + +.cm-s-inner .cm-quote, +.cm-s-inner.cm-quote { + color: #57ac57; +} + +.cm-s-inner .cm-hr { + color: #d8d5d5; +} + +.cm-s-inner .cm-link { + color: #d3d3ef; +} + +.cm-s-inner .cm-negative { + color: #d95050; +} + +.cm-s-inner .cm-positive { + color: #50e650; +} + +.cm-s-inner .cm-string-2 { + color: #f50; +} + +.cm-s-inner .cm-meta, +.cm-s-inner .cm-qualifier { + color: #b7b3b3; +} + +.cm-s-inner .cm-builtin { + color: #f3b3f8; +} + +.cm-s-inner .cm-bracket { + color: #997; +} + +.cm-s-inner .cm-atom, +.cm-s-inner.cm-atom { + color: #84B6CB; +} + +.cm-s-inner .cm-number { + color: #64AB8F; +} + +.cm-s-inner .cm-variable { + color: #b8bfc6; +} + +.cm-s-inner .cm-variable-2 { + color: #9FBAD5; +} + +.cm-s-inner .cm-variable-3 { + color: #1cc685; +} + +.CodeMirror-selectedtext, +.CodeMirror-selected { + background: #4a89dc; + color: #fff !important; + text-shadow: none; +} + +.CodeMirror-gutters { + border-right: none; +} \ No newline at end of file diff --git a/config/Typora/themes/old-themes/night/credit.html b/config/Typora/themes/old-themes/night/credit.html new file mode 100644 index 0000000..00bc43c --- /dev/null +++ b/config/Typora/themes/old-themes/night/credit.html @@ -0,0 +1 @@ +
Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY
\ No newline at end of file diff --git a/config/Typora/themes/old-themes/night/cursor.png b/config/Typora/themes/old-themes/night/cursor.png new file mode 100644 index 0000000..1cc3629 Binary files /dev/null and b/config/Typora/themes/old-themes/night/cursor.png differ diff --git a/config/Typora/themes/old-themes/night/cursor@2x.png b/config/Typora/themes/old-themes/night/cursor@2x.png new file mode 100644 index 0000000..b8fca0b Binary files /dev/null and b/config/Typora/themes/old-themes/night/cursor@2x.png differ diff --git a/config/Typora/themes/old-themes/night/mermaid.dark.css b/config/Typora/themes/old-themes/night/mermaid.dark.css new file mode 100644 index 0000000..a412b30 --- /dev/null +++ b/config/Typora/themes/old-themes/night/mermaid.dark.css @@ -0,0 +1,7 @@ +:root { + --mermaid-theme: night; +} + +[lang='mermaid'] .label { + color: #333; +} \ No newline at end of file diff --git a/config/Typora/themes/old-themes/night/sourcemode.dark.css b/config/Typora/themes/old-themes/night/sourcemode.dark.css new file mode 100644 index 0000000..6de223d --- /dev/null +++ b/config/Typora/themes/old-themes/night/sourcemode.dark.css @@ -0,0 +1,38 @@ +@charset "UTF-8"; +/* CSS Document */ + +/** markdown source **/ +.cm-s-typora-default .cm-header, +.cm-s-typora-default .cm-property +{ + color: #cebcca; +} + +.CodeMirror.cm-s-typora-default div.CodeMirror-cursor{ + border-left: 3px solid #b8bfc6; +} + +.cm-s-typora-default .cm-comment { + color: #9FB1FF; +} + +.cm-s-typora-default .cm-string { + color: #A7A7D9 +} + +.cm-s-typora-default .cm-atom, .cm-s-typora-default .cm-number { + color: #848695; + font-style: italic; +} + +.cm-s-typora-default .cm-link { + color: #95B94B; +} + +.cm-s-typora-default .CodeMirror-activeline-background { + background: rgba(51, 51, 51, 0.72); +} + +.cm-s-typora-default .cm-comment, .cm-s-typora-default .cm-code { + color: #8aa1e1; +} \ No newline at end of file diff --git a/config/Typora/themes/old-themes/pixyll.css b/config/Typora/themes/old-themes/pixyll.css new file mode 100644 index 0000000..ba380eb --- /dev/null +++ b/config/Typora/themes/old-themes/pixyll.css @@ -0,0 +1,528 @@ +@include-when-export url(https://fonts.googleapis.com/css?family=Merriweather:900,900italic,300,300italic&subset=latin-ext); +@include-when-export url(https://fonts.googleapis.com/css?family=Lato:900,300&subset=latin-ext); + +:root { + --control-text-color: #777; +} + +/** + * forked from pixyll.com + * MIT license + */ + +@font-face { + font-family: 'Merriweather'; + font-style: normal; + font-weight: normal; + src: local('Merriweather Light'), local('Merriweather-Light'), url('./pixyll/merriweather-v19-latin-300.woff') format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Merriweather'; + font-style: normal; + font-weight: bold; + src: local('Merriweather Heavy'), local('Merriweather-Heavy'), url('./pixyll/merriweather-v19-latin-700.woff') format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Merriweather'; + font-style: italic; + font-weight: normal; + src: local('Merriweather Light Italic'), local('Merriweather-LightItalic'), url('./pixyll/merriweather-v19-latin-300italic.woff') format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Merriweather'; + font-style: italic; + font-weight: bold; + src: local('Merriweather Heavy Italic'), local('Merriweather-HeavyItalic'), url('./pixyll/merriweather-v19-latin-700italic.woff') format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'Lato'; + font-style: normal; + font-weight: normal; + src: local('Lato Light'), local('Lato-Light'), url('./pixyll/lato-v14-latin-300.woff') format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Lato'; + font-style: normal; + font-weight: bold; + src: local('Lato Black'), local('Lato-Blcak'), url('./pixyll/lato-v14-latin-900.woff') format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Lato'; + font-style: italic; + font-weight: normal; + src: local('Lato LightItalic'), local('Lato-LightItalic'), url('./pixyll/lato-v14-latin-300italic.woff') format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Lato'; + font-style: italic; + font-weight: bold; + src: local('Lato BlackItalic'), local('Lato-BlackItalic'), url('./pixyll/lato-v14-latin-900italic.woff') format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +h1, +.h1, +.f1 { + font-size: 2rem; + line-height: 2.5rem; +} +h2, +.h2, +.f2 { + font-size: 1.5rem; + line-height: 2rem; +} +h3, +.h3, +.f3 { + font-size: 1.25rem; + line-height: 1.5rem; +} +p, +.p, +.f4, +h4, +h5, +h6, +dl, +ol, +ul, +pre[cid], +div[cid], +#typora-source { + font-size: 1.125rem; + line-height: 1.5rem; +} + +h4 { + font-size: 1.13rem; +} +/* + Pixyll + A simple, beautiful theme for Jekyll that emphasizes content rather than aesthetic fluff. + Best served with BASSCSS (http://jxnblk.github.io/basscss) + Crafted with <3 by John Otander (@4lpine) - ©2015 John Otander MIT License http://opensource.org/licenses/MIT + +*/ + +body { + font-family: "Merriweather", "PT Serif", Georgia, "Times New Roman", "STSong", 'Segoe UI Emoji','SF Pro', Serif; + line-height: 1.5rem; + font-weight: 400; +} + +#write { + max-width: 914px; + color: #333; +} + +@media only screen and (min-width: 1400px) { + #write { + max-width: 1100px; + } +} + +@media only screen and (min-width: 1700px) { + #write { + max-width: 1200px; + } +} + +img { + width: auto; + max-width: 100%; +} +body { + font-size: 1.5rem; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +.ty-table-edit { + background: #ededed; +} + +table { + width: 100%; + font-size: 1.125rem; +} +table > thead > tr > th, +table > thead > tr > td, +table > tbody > tr > th, +table > tbody > tr > td, +table > tfoot > tr > th, +table > tfoot > tr > td { + padding: 12px; + line-height: 1.2; + vertical-align: top; + border-top: 1px solid #333; +} +table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #333; +} +table > caption + thead > tr:first-child > th, +table > caption + thead > tr:first-child > td, +table > colgroup + thead > tr:first-child > th, +table > colgroup + thead > tr:first-child > td, +table > thead:first-child > tr:first-child > th, +table > thead:first-child > tr:first-child > td { + border-top: 0; +} +table > tbody + tbody { + border-top: 2px solid #333; +} +p { + font-weight: 300; + line-height: 1.5; +} +abbr { + border-bottom: 1px black dotted; + cursor: help; +} +pre, +code { + font-family: Menlo, Monaco, "Courier New", monospace; +} + +code, +.md-fences { + color: #7a7a7a; +} + +.md-fences { + padding: 1.125em; + margin-bottom: 0.88em; + font-size: 1rem; + border: 1px solid #7a7a7a; + padding-bottom: 0.5rem; + padding-top: 0.5rem; +} + +blockquote { + padding: 1.33em; + font-style: italic; + border-left: 5px solid #7a7a7a; + color: #555; +} +blockquote em { + color: #000; +} +blockquote footer { + font-size: .85rem; + font-style: normal; + background-color: #fff; + color: #7a7a7a; + border-color: transparent; +} +h1, +.h1, +h2, +.h2, +h3, +.h3, +h4, +.h4, +h5, +.h5, +h6, +.h6 { + font-family: "Lato", 'Helvetica Neue', Helvetica, sans-serif; + font-weight: bold; + line-height: 1.2; + margin: 1em 0 0.5em; +} +@media screen and (min-width: 48em) { + .h1, + h1 { + font-size: 3.250rem; + } + .h2, + h2 { + font-size: 2.298rem; + } + .h3, + h3 { + font-size: 1.625rem; + } + .h4, + h4 { + font-size: 1.3rem; + } + #write>h4.md-focus:before, + #write>h5.md-focus:before, + #write>h6.md-focus:before{ + top: 1px; + } + .p, + p, + li { + font-size: 1.25rem; + line-height: 1.8; + } + table { + font-size: 1.25rem; + } +} +@media (max-width: 48em) { + blockquote { + margin-left: 1rem; + margin-right: 0; + padding: 0.5em; + } + .h1, + h1 { + font-size: 2.827rem; + } + .h2, + h2 { + font-size: 1.999rem; + } + .h3, + h3 { + font-size: 1.413rem; + } + .h4, + h4 { + font-size: 1.3rem; + } +} +@media screen and (min-width: 64em) { + .h1, + h1 { + font-size: 4.498rem; + } + .h2, + h2 { + font-size: 2.29rem; + } + .h3, + h3 { + font-size: 1.9rem; + } + .h4, + h4 { + font-size: 1.591rem; + } + #write>h4.md-focus:before{ + top:4px; + } +} +a { + color: #463F5C; + text-decoration: underline; +} + +#write { + padding-top: 2rem; +} + +#write pre.md-meta-block { + min-height: 35px; + padding: 0.5em 1em; + white-space: pre; + border: 0px; + + border-left: 30px #f8f8f8 solid; + border-right: 30px #f8f8f8 solid; + width: 100vw; + max-width: calc(100% + 60px); + + margin-left: -30px; + margin-bottom: 2em; + margin-top: -2010px; + padding-top: 2000px; + padding-bottom: 10px; + line-height: 1.5em; + color: #7a7a7a; + background-color: #fafafa; + font-family: 'Lato', 'Helvetica Neue', Helvetica, sans-serif; + font-weight: 300; + clear: both; + padding-left: 0; + font-size:1.125rem; +} +.md-image>.md-meta { + color: #463F5C +} +.footnotes { + font-size:1.1rem; +} +.md-tag { + font-family: 'Lato', 'Helvetica Neue', Helvetica, sans-serif; +} +.code-tooltip { + background: white; +} +.code-tooltip-content { + font-size: 1.1rem; +} + +.task-list{ + padding-left: 0; +} + +.md-task-list-item { + padding-left:34px; +} + +.md-task-list-item > input{ + width: 1.25rem; + height: 1.25rem; + display: block; + -webkit-appearance: initial; + top: -0.2rem; + margin-left: -1.6em; + margin-top: calc(1rem - 7px); + border: none; +} + +.md-task-list-item > input:focus{ + outline: none; + box-shadow: none; +} + +.md-task-list-item > input:before{ + border: 1px solid #555; + border-radius: 1.5rem; + width: 1.5rem; + height: 1.5rem; + background: #fff; + content: ' '; + transition: background-color 200ms ease-in-out; + display: block; +} + +.md-task-list-item > input:checked:before, +.md-task-list-item > input[checked]:before{ + background: #333; + border-width: 2px; + display:inline-block; + transition: background-color 200ms ease-in-out; +} + +.md-task-list-item > input:checked:after, +.md-task-list-item > input[checked]:after { + opacity: 1; +} + +.md-task-list-item > input:after { + opacity: 1; + -webkit-transition: opacity 0.05s ease-in-out; + -moz-transition: opacity 0.05s ease-in-out; + transition: opacity 0.05s ease-in-out; + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + transform: rotate(-45deg); + position: absolute; + top: 0.4375rem; + left: 0.28125rem; + width: 0.9375rem; + height: 0.5rem; + border: 3px solid #fff; + border-top: 0; + border-right: 0; + content: ' '; + opacity: 0; +} + +.md-tag { + color:inherit; +} + +.md-toc:focus .md-toc-content{ + margin-top: 19px; +} + +#typora-sidebar { + font-size:1rem !important; +} + +.html-for-mac #typora-sidebar { + background-color:white; +} + +.outline-content li, .outline-content ul { + font-size:1rem !important; +} + +.outline-title { + line-height: inherit; + margin-top: 10px; +} + +.outline-expander { + width: 18px; +} + +.outline-expander:before { + content: "+"; + font-family: inherit; + color: rgb(108, 108, 108); + font-size: 1.5rem; + top: -0.1rem; +} + +.outline-expander:hover:before { + content: "+"; +} + +.outline-item-open>.outline-item>.outline-expander:before{ + content: "-"; +} + +/** source code mode */ +#typora-source { + font-family: Courier, monospace; + color: #6A6A6A; +} + +.os-windows #typora-source { + font-family: inherit; +} + +.cm-s-typora-default .cm-header, +.cm-s-typora-default .cm-property, +.CodeMirror.cm-s-typora-default div.CodeMirror-cursor { + color: #428bca; +} + +.cm-s-typora-default .cm-atom, .cm-s-typora-default .cm-number { + color: #777777; +} + +.md-diagram-panel { + margin-top: 24px; + margin-left: -1.2em; +} + +.md-mathjax-midline { + background: #fafafa; +} + +.enable-diagrams pre.md-fences[lang="sequence"] .code-tooltip, +.enable-diagrams pre.md-fences[lang="flow"] .code-tooltip, +.enable-diagrams pre.md-fences[lang="mermaid"] .code-tooltip { + bottom: -3.4em; +} + +.dropdown-menu .divider { + border-color: #e5e5e5; +} + +li { + margin: 0.5rem 0; +} + +li > *:last-child { + margin-bottom: 0; +} \ No newline at end of file diff --git a/config/Typora/themes/old-themes/pixyll/lato-v14-latin-300.woff b/config/Typora/themes/old-themes/pixyll/lato-v14-latin-300.woff new file mode 100644 index 0000000..ab45ab7 Binary files /dev/null and b/config/Typora/themes/old-themes/pixyll/lato-v14-latin-300.woff differ diff --git a/config/Typora/themes/old-themes/pixyll/lato-v14-latin-300italic.woff b/config/Typora/themes/old-themes/pixyll/lato-v14-latin-300italic.woff new file mode 100644 index 0000000..0287996 Binary files /dev/null and b/config/Typora/themes/old-themes/pixyll/lato-v14-latin-300italic.woff differ diff --git a/config/Typora/themes/old-themes/pixyll/lato-v14-latin-900.woff b/config/Typora/themes/old-themes/pixyll/lato-v14-latin-900.woff new file mode 100644 index 0000000..6f251d9 Binary files /dev/null and b/config/Typora/themes/old-themes/pixyll/lato-v14-latin-900.woff differ diff --git a/config/Typora/themes/old-themes/pixyll/lato-v14-latin-900italic.woff b/config/Typora/themes/old-themes/pixyll/lato-v14-latin-900italic.woff new file mode 100644 index 0000000..6922b8f Binary files /dev/null and b/config/Typora/themes/old-themes/pixyll/lato-v14-latin-900italic.woff differ diff --git a/config/Typora/themes/old-themes/pixyll/merriweather-v19-latin-300.woff b/config/Typora/themes/old-themes/pixyll/merriweather-v19-latin-300.woff new file mode 100644 index 0000000..bd499f2 Binary files /dev/null and b/config/Typora/themes/old-themes/pixyll/merriweather-v19-latin-300.woff differ diff --git a/config/Typora/themes/old-themes/pixyll/merriweather-v19-latin-300italic.woff b/config/Typora/themes/old-themes/pixyll/merriweather-v19-latin-300italic.woff new file mode 100644 index 0000000..e7d5209 Binary files /dev/null and b/config/Typora/themes/old-themes/pixyll/merriweather-v19-latin-300italic.woff differ diff --git a/config/Typora/themes/old-themes/pixyll/merriweather-v19-latin-700.woff b/config/Typora/themes/old-themes/pixyll/merriweather-v19-latin-700.woff new file mode 100644 index 0000000..54fd386 Binary files /dev/null and b/config/Typora/themes/old-themes/pixyll/merriweather-v19-latin-700.woff differ diff --git a/config/Typora/themes/old-themes/pixyll/merriweather-v19-latin-700italic.woff b/config/Typora/themes/old-themes/pixyll/merriweather-v19-latin-700italic.woff new file mode 100644 index 0000000..a390989 Binary files /dev/null and b/config/Typora/themes/old-themes/pixyll/merriweather-v19-latin-700italic.woff differ diff --git a/config/Typora/themes/old-themes/whitey.css b/config/Typora/themes/old-themes/whitey.css new file mode 100644 index 0000000..8eb2a96 --- /dev/null +++ b/config/Typora/themes/old-themes/whitey.css @@ -0,0 +1,299 @@ +html { + font-size: 19px; +} + +html, body { + margin: auto; + background: #fefefe; + -webkit-font-smoothing: antialiased; +} +body { + font-family: "Vollkorn", Palatino, Times; + color: #333; + line-height: 1.4; + text-align: justify; +} + +#write { + max-width: 960px; + margin: 0 auto; + margin-bottom: 2em; + line-height: 1.53; + padding-top: 40px; +} + +@media only screen and (min-width: 1400px) { + #write { + max-width: 1100px; + } +} + +@media print { + html { + font-size: 13px; + } +} + +/* Typography +-------------------------------------------------------- */ + +#write>h1:first-child, +h1 { + margin-top: 1.6em; + font-weight: normal; +} + +h1 { + font-size:3em; +} + +h2 { + margin-top:2em; + font-weight: normal; +} + +h3 { + font-weight: normal; + font-style: italic; + margin-top: 3em; +} + +h1, +h2, +h3{ + text-align: center; +} + +h2:after{ + border-bottom: 1px solid #2f2f2f; + content: ''; + width: 100px; + display: block; + margin: 0 auto; + height: 1px; +} + +h1+h2, h2+h3 { + margin-top: 0.83em; +} + +p, +.mathjax-block { + margin-top: 0; + -webkit-hypens: auto; + -moz-hypens: auto; + hyphens: auto; +} +ul { + list-style: square; + padding-left: 1.2em; +} +ol { + padding-left: 1.2em; +} + +@media print { + ol { + padding-left: 40px; + } +} + +blockquote { + margin-left: 1em; + padding-left: 1em; + border-left: 1px solid #ddd; +} +code, +pre { + font-family: "Consolas", "Menlo", "Monaco", monospace, serif; + font-size: .9em; + background: white; +} +.md-fences{ + margin-left: 1em; + padding-left: 1em; + border: 1px solid #ddd; + padding-bottom: 8px; + padding-top: 6px; + margin-bottom: 1.5em; +} + +a { + color: #2484c1; + text-decoration: none; +} +a:hover { + text-decoration: underline; +} +a img { + border: none; +} +h1 a, +h1 a:hover { + color: #333; + text-decoration: none; +} +hr { + color: #ddd; + height: 1px; + margin: 2em 0; + border-top: solid 1px #ddd; + border-bottom: none; + border-left: 0; + border-right: 0; +} +.ty-table-edit { + background: #ededed; + padding-top: 4px; +} +table { + margin-bottom: 1.333333rem +} +table th, +table td { + padding: 8px; + line-height: 1.333333rem; + vertical-align: top; + border-top: 1px solid #ddd +} +table th { + font-weight: bold +} +table thead th { + vertical-align: bottom +} +table caption+thead tr:first-child th, +table caption+thead tr:first-child td, +table colgroup+thead tr:first-child th, +table colgroup+thead tr:first-child td, +table thead:first-child tr:first-child th, +table thead:first-child tr:first-child td { + border-top: 0 +} +table tbody+tbody { + border-top: 2px solid #ddd +} + +.task-list{ + padding:0; +} + +.md-task-list-item { + padding-left: 1.6rem; +} + +.md-task-list-item > input:before { + content: '\221A'; + display: inline-block; + width: 1.33333333rem; + height: 1.6rem; + vertical-align: middle; + text-align: center; + color: #ddd; + background-color: #fefefe; +} + +.md-task-list-item > input:checked:before, +.md-task-list-item > input[checked]:before{ + color: inherit; +} +.md-tag { + color: inherit; + font: inherit; +} +#write pre.md-meta-block { + min-height: 35px; + padding: 0.5em 1em; +} +#write pre.md-meta-block { + white-space: pre; + background: #f8f8f8; + border: 0px; + color: #999; + + width: 100vw; + max-width: calc(100% + 60px); + margin-left: -30px; + border-left: 30px #f8f8f8 solid; + border-right: 30px #f8f8f8 solid; + + margin-bottom: 2em; + margin-top: -1.3333333333333rem; + padding-top: 26px; + padding-bottom: 10px; + line-height: 1.8em; + font-size: 0.9em; + font-size: 0.76em; + padding-left: 0; +} +.md-img-error.md-image>.md-meta{ + vertical-align: bottom; +} +#write>h5.md-focus:before { + top: 2px; +} + +.md-toc { + margin-top: 40px; +} + +.md-toc-content { + padding-bottom: 20px; +} + +.outline-expander:before { + color: inherit; + font-size: 14px; + top: auto; + content: "\f0da"; + font-family: FontAwesome; +} + +.outline-expander:hover:before, +.outline-item-open>.outline-item>.outline-expander:before { + content: "\f0d7"; +} + +/** source code mode */ +#typora-source { + font-family: Courier, monospace; + color: #6A6A6A; +} + +.html-for-mac #typora-sidebar { + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} + +.cm-s-typora-default .cm-header, +.cm-s-typora-default .cm-property, +.CodeMirror.cm-s-typora-default div.CodeMirror-cursor { + color: #428bca; +} + +.cm-s-typora-default .cm-atom, .cm-s-typora-default .cm-number { + color: #777777; +} + +.typora-node .file-list-item-parent-loc, +.typora-node .file-list-item-time, +.typora-node .file-list-item-summary { + font-family: arial, sans-serif; +} + +.md-task-list-item>input { + margin-left: -1.3em; + margin-top: calc(1rem - 12px); +} + +.md-mathjax-midline { + background: #fafafa; +} + +.md-fences .code-tooltip { + bottom: -2em !important; +} + +.dropdown-menu .divider { + border-color: #e5e5e5; +} \ No newline at end of file diff --git a/config/Typora/themes/pixyll.css b/config/Typora/themes/pixyll.css new file mode 100644 index 0000000..ba380eb --- /dev/null +++ b/config/Typora/themes/pixyll.css @@ -0,0 +1,528 @@ +@include-when-export url(https://fonts.googleapis.com/css?family=Merriweather:900,900italic,300,300italic&subset=latin-ext); +@include-when-export url(https://fonts.googleapis.com/css?family=Lato:900,300&subset=latin-ext); + +:root { + --control-text-color: #777; +} + +/** + * forked from pixyll.com + * MIT license + */ + +@font-face { + font-family: 'Merriweather'; + font-style: normal; + font-weight: normal; + src: local('Merriweather Light'), local('Merriweather-Light'), url('./pixyll/merriweather-v19-latin-300.woff') format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Merriweather'; + font-style: normal; + font-weight: bold; + src: local('Merriweather Heavy'), local('Merriweather-Heavy'), url('./pixyll/merriweather-v19-latin-700.woff') format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Merriweather'; + font-style: italic; + font-weight: normal; + src: local('Merriweather Light Italic'), local('Merriweather-LightItalic'), url('./pixyll/merriweather-v19-latin-300italic.woff') format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Merriweather'; + font-style: italic; + font-weight: bold; + src: local('Merriweather Heavy Italic'), local('Merriweather-HeavyItalic'), url('./pixyll/merriweather-v19-latin-700italic.woff') format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'Lato'; + font-style: normal; + font-weight: normal; + src: local('Lato Light'), local('Lato-Light'), url('./pixyll/lato-v14-latin-300.woff') format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Lato'; + font-style: normal; + font-weight: bold; + src: local('Lato Black'), local('Lato-Blcak'), url('./pixyll/lato-v14-latin-900.woff') format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Lato'; + font-style: italic; + font-weight: normal; + src: local('Lato LightItalic'), local('Lato-LightItalic'), url('./pixyll/lato-v14-latin-300italic.woff') format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +@font-face { + font-family: 'Lato'; + font-style: italic; + font-weight: bold; + src: local('Lato BlackItalic'), local('Lato-BlackItalic'), url('./pixyll/lato-v14-latin-900italic.woff') format('woff'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +h1, +.h1, +.f1 { + font-size: 2rem; + line-height: 2.5rem; +} +h2, +.h2, +.f2 { + font-size: 1.5rem; + line-height: 2rem; +} +h3, +.h3, +.f3 { + font-size: 1.25rem; + line-height: 1.5rem; +} +p, +.p, +.f4, +h4, +h5, +h6, +dl, +ol, +ul, +pre[cid], +div[cid], +#typora-source { + font-size: 1.125rem; + line-height: 1.5rem; +} + +h4 { + font-size: 1.13rem; +} +/* + Pixyll + A simple, beautiful theme for Jekyll that emphasizes content rather than aesthetic fluff. + Best served with BASSCSS (http://jxnblk.github.io/basscss) + Crafted with <3 by John Otander (@4lpine) - ©2015 John Otander MIT License http://opensource.org/licenses/MIT + +*/ + +body { + font-family: "Merriweather", "PT Serif", Georgia, "Times New Roman", "STSong", 'Segoe UI Emoji','SF Pro', Serif; + line-height: 1.5rem; + font-weight: 400; +} + +#write { + max-width: 914px; + color: #333; +} + +@media only screen and (min-width: 1400px) { + #write { + max-width: 1100px; + } +} + +@media only screen and (min-width: 1700px) { + #write { + max-width: 1200px; + } +} + +img { + width: auto; + max-width: 100%; +} +body { + font-size: 1.5rem; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +.ty-table-edit { + background: #ededed; +} + +table { + width: 100%; + font-size: 1.125rem; +} +table > thead > tr > th, +table > thead > tr > td, +table > tbody > tr > th, +table > tbody > tr > td, +table > tfoot > tr > th, +table > tfoot > tr > td { + padding: 12px; + line-height: 1.2; + vertical-align: top; + border-top: 1px solid #333; +} +table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #333; +} +table > caption + thead > tr:first-child > th, +table > caption + thead > tr:first-child > td, +table > colgroup + thead > tr:first-child > th, +table > colgroup + thead > tr:first-child > td, +table > thead:first-child > tr:first-child > th, +table > thead:first-child > tr:first-child > td { + border-top: 0; +} +table > tbody + tbody { + border-top: 2px solid #333; +} +p { + font-weight: 300; + line-height: 1.5; +} +abbr { + border-bottom: 1px black dotted; + cursor: help; +} +pre, +code { + font-family: Menlo, Monaco, "Courier New", monospace; +} + +code, +.md-fences { + color: #7a7a7a; +} + +.md-fences { + padding: 1.125em; + margin-bottom: 0.88em; + font-size: 1rem; + border: 1px solid #7a7a7a; + padding-bottom: 0.5rem; + padding-top: 0.5rem; +} + +blockquote { + padding: 1.33em; + font-style: italic; + border-left: 5px solid #7a7a7a; + color: #555; +} +blockquote em { + color: #000; +} +blockquote footer { + font-size: .85rem; + font-style: normal; + background-color: #fff; + color: #7a7a7a; + border-color: transparent; +} +h1, +.h1, +h2, +.h2, +h3, +.h3, +h4, +.h4, +h5, +.h5, +h6, +.h6 { + font-family: "Lato", 'Helvetica Neue', Helvetica, sans-serif; + font-weight: bold; + line-height: 1.2; + margin: 1em 0 0.5em; +} +@media screen and (min-width: 48em) { + .h1, + h1 { + font-size: 3.250rem; + } + .h2, + h2 { + font-size: 2.298rem; + } + .h3, + h3 { + font-size: 1.625rem; + } + .h4, + h4 { + font-size: 1.3rem; + } + #write>h4.md-focus:before, + #write>h5.md-focus:before, + #write>h6.md-focus:before{ + top: 1px; + } + .p, + p, + li { + font-size: 1.25rem; + line-height: 1.8; + } + table { + font-size: 1.25rem; + } +} +@media (max-width: 48em) { + blockquote { + margin-left: 1rem; + margin-right: 0; + padding: 0.5em; + } + .h1, + h1 { + font-size: 2.827rem; + } + .h2, + h2 { + font-size: 1.999rem; + } + .h3, + h3 { + font-size: 1.413rem; + } + .h4, + h4 { + font-size: 1.3rem; + } +} +@media screen and (min-width: 64em) { + .h1, + h1 { + font-size: 4.498rem; + } + .h2, + h2 { + font-size: 2.29rem; + } + .h3, + h3 { + font-size: 1.9rem; + } + .h4, + h4 { + font-size: 1.591rem; + } + #write>h4.md-focus:before{ + top:4px; + } +} +a { + color: #463F5C; + text-decoration: underline; +} + +#write { + padding-top: 2rem; +} + +#write pre.md-meta-block { + min-height: 35px; + padding: 0.5em 1em; + white-space: pre; + border: 0px; + + border-left: 30px #f8f8f8 solid; + border-right: 30px #f8f8f8 solid; + width: 100vw; + max-width: calc(100% + 60px); + + margin-left: -30px; + margin-bottom: 2em; + margin-top: -2010px; + padding-top: 2000px; + padding-bottom: 10px; + line-height: 1.5em; + color: #7a7a7a; + background-color: #fafafa; + font-family: 'Lato', 'Helvetica Neue', Helvetica, sans-serif; + font-weight: 300; + clear: both; + padding-left: 0; + font-size:1.125rem; +} +.md-image>.md-meta { + color: #463F5C +} +.footnotes { + font-size:1.1rem; +} +.md-tag { + font-family: 'Lato', 'Helvetica Neue', Helvetica, sans-serif; +} +.code-tooltip { + background: white; +} +.code-tooltip-content { + font-size: 1.1rem; +} + +.task-list{ + padding-left: 0; +} + +.md-task-list-item { + padding-left:34px; +} + +.md-task-list-item > input{ + width: 1.25rem; + height: 1.25rem; + display: block; + -webkit-appearance: initial; + top: -0.2rem; + margin-left: -1.6em; + margin-top: calc(1rem - 7px); + border: none; +} + +.md-task-list-item > input:focus{ + outline: none; + box-shadow: none; +} + +.md-task-list-item > input:before{ + border: 1px solid #555; + border-radius: 1.5rem; + width: 1.5rem; + height: 1.5rem; + background: #fff; + content: ' '; + transition: background-color 200ms ease-in-out; + display: block; +} + +.md-task-list-item > input:checked:before, +.md-task-list-item > input[checked]:before{ + background: #333; + border-width: 2px; + display:inline-block; + transition: background-color 200ms ease-in-out; +} + +.md-task-list-item > input:checked:after, +.md-task-list-item > input[checked]:after { + opacity: 1; +} + +.md-task-list-item > input:after { + opacity: 1; + -webkit-transition: opacity 0.05s ease-in-out; + -moz-transition: opacity 0.05s ease-in-out; + transition: opacity 0.05s ease-in-out; + -webkit-transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + transform: rotate(-45deg); + position: absolute; + top: 0.4375rem; + left: 0.28125rem; + width: 0.9375rem; + height: 0.5rem; + border: 3px solid #fff; + border-top: 0; + border-right: 0; + content: ' '; + opacity: 0; +} + +.md-tag { + color:inherit; +} + +.md-toc:focus .md-toc-content{ + margin-top: 19px; +} + +#typora-sidebar { + font-size:1rem !important; +} + +.html-for-mac #typora-sidebar { + background-color:white; +} + +.outline-content li, .outline-content ul { + font-size:1rem !important; +} + +.outline-title { + line-height: inherit; + margin-top: 10px; +} + +.outline-expander { + width: 18px; +} + +.outline-expander:before { + content: "+"; + font-family: inherit; + color: rgb(108, 108, 108); + font-size: 1.5rem; + top: -0.1rem; +} + +.outline-expander:hover:before { + content: "+"; +} + +.outline-item-open>.outline-item>.outline-expander:before{ + content: "-"; +} + +/** source code mode */ +#typora-source { + font-family: Courier, monospace; + color: #6A6A6A; +} + +.os-windows #typora-source { + font-family: inherit; +} + +.cm-s-typora-default .cm-header, +.cm-s-typora-default .cm-property, +.CodeMirror.cm-s-typora-default div.CodeMirror-cursor { + color: #428bca; +} + +.cm-s-typora-default .cm-atom, .cm-s-typora-default .cm-number { + color: #777777; +} + +.md-diagram-panel { + margin-top: 24px; + margin-left: -1.2em; +} + +.md-mathjax-midline { + background: #fafafa; +} + +.enable-diagrams pre.md-fences[lang="sequence"] .code-tooltip, +.enable-diagrams pre.md-fences[lang="flow"] .code-tooltip, +.enable-diagrams pre.md-fences[lang="mermaid"] .code-tooltip { + bottom: -3.4em; +} + +.dropdown-menu .divider { + border-color: #e5e5e5; +} + +li { + margin: 0.5rem 0; +} + +li > *:last-child { + margin-bottom: 0; +} \ No newline at end of file diff --git a/config/Typora/themes/pixyll/lato-v14-latin-300.woff b/config/Typora/themes/pixyll/lato-v14-latin-300.woff new file mode 100644 index 0000000..ab45ab7 Binary files /dev/null and b/config/Typora/themes/pixyll/lato-v14-latin-300.woff differ diff --git a/config/Typora/themes/pixyll/lato-v14-latin-300italic.woff b/config/Typora/themes/pixyll/lato-v14-latin-300italic.woff new file mode 100644 index 0000000..0287996 Binary files /dev/null and b/config/Typora/themes/pixyll/lato-v14-latin-300italic.woff differ diff --git a/config/Typora/themes/pixyll/lato-v14-latin-900.woff b/config/Typora/themes/pixyll/lato-v14-latin-900.woff new file mode 100644 index 0000000..6f251d9 Binary files /dev/null and b/config/Typora/themes/pixyll/lato-v14-latin-900.woff differ diff --git a/config/Typora/themes/pixyll/lato-v14-latin-900italic.woff b/config/Typora/themes/pixyll/lato-v14-latin-900italic.woff new file mode 100644 index 0000000..6922b8f Binary files /dev/null and b/config/Typora/themes/pixyll/lato-v14-latin-900italic.woff differ diff --git a/config/Typora/themes/pixyll/merriweather-v19-latin-300.woff b/config/Typora/themes/pixyll/merriweather-v19-latin-300.woff new file mode 100644 index 0000000..bd499f2 Binary files /dev/null and b/config/Typora/themes/pixyll/merriweather-v19-latin-300.woff differ diff --git a/config/Typora/themes/pixyll/merriweather-v19-latin-300italic.woff b/config/Typora/themes/pixyll/merriweather-v19-latin-300italic.woff new file mode 100644 index 0000000..e7d5209 Binary files /dev/null and b/config/Typora/themes/pixyll/merriweather-v19-latin-300italic.woff differ diff --git a/config/Typora/themes/pixyll/merriweather-v19-latin-700.woff b/config/Typora/themes/pixyll/merriweather-v19-latin-700.woff new file mode 100644 index 0000000..54fd386 Binary files /dev/null and b/config/Typora/themes/pixyll/merriweather-v19-latin-700.woff differ diff --git a/config/Typora/themes/pixyll/merriweather-v19-latin-700italic.woff b/config/Typora/themes/pixyll/merriweather-v19-latin-700italic.woff new file mode 100644 index 0000000..a390989 Binary files /dev/null and b/config/Typora/themes/pixyll/merriweather-v19-latin-700italic.woff differ diff --git a/config/Typora/themes/whitey.css b/config/Typora/themes/whitey.css new file mode 100644 index 0000000..8eb2a96 --- /dev/null +++ b/config/Typora/themes/whitey.css @@ -0,0 +1,299 @@ +html { + font-size: 19px; +} + +html, body { + margin: auto; + background: #fefefe; + -webkit-font-smoothing: antialiased; +} +body { + font-family: "Vollkorn", Palatino, Times; + color: #333; + line-height: 1.4; + text-align: justify; +} + +#write { + max-width: 960px; + margin: 0 auto; + margin-bottom: 2em; + line-height: 1.53; + padding-top: 40px; +} + +@media only screen and (min-width: 1400px) { + #write { + max-width: 1100px; + } +} + +@media print { + html { + font-size: 13px; + } +} + +/* Typography +-------------------------------------------------------- */ + +#write>h1:first-child, +h1 { + margin-top: 1.6em; + font-weight: normal; +} + +h1 { + font-size:3em; +} + +h2 { + margin-top:2em; + font-weight: normal; +} + +h3 { + font-weight: normal; + font-style: italic; + margin-top: 3em; +} + +h1, +h2, +h3{ + text-align: center; +} + +h2:after{ + border-bottom: 1px solid #2f2f2f; + content: ''; + width: 100px; + display: block; + margin: 0 auto; + height: 1px; +} + +h1+h2, h2+h3 { + margin-top: 0.83em; +} + +p, +.mathjax-block { + margin-top: 0; + -webkit-hypens: auto; + -moz-hypens: auto; + hyphens: auto; +} +ul { + list-style: square; + padding-left: 1.2em; +} +ol { + padding-left: 1.2em; +} + +@media print { + ol { + padding-left: 40px; + } +} + +blockquote { + margin-left: 1em; + padding-left: 1em; + border-left: 1px solid #ddd; +} +code, +pre { + font-family: "Consolas", "Menlo", "Monaco", monospace, serif; + font-size: .9em; + background: white; +} +.md-fences{ + margin-left: 1em; + padding-left: 1em; + border: 1px solid #ddd; + padding-bottom: 8px; + padding-top: 6px; + margin-bottom: 1.5em; +} + +a { + color: #2484c1; + text-decoration: none; +} +a:hover { + text-decoration: underline; +} +a img { + border: none; +} +h1 a, +h1 a:hover { + color: #333; + text-decoration: none; +} +hr { + color: #ddd; + height: 1px; + margin: 2em 0; + border-top: solid 1px #ddd; + border-bottom: none; + border-left: 0; + border-right: 0; +} +.ty-table-edit { + background: #ededed; + padding-top: 4px; +} +table { + margin-bottom: 1.333333rem +} +table th, +table td { + padding: 8px; + line-height: 1.333333rem; + vertical-align: top; + border-top: 1px solid #ddd +} +table th { + font-weight: bold +} +table thead th { + vertical-align: bottom +} +table caption+thead tr:first-child th, +table caption+thead tr:first-child td, +table colgroup+thead tr:first-child th, +table colgroup+thead tr:first-child td, +table thead:first-child tr:first-child th, +table thead:first-child tr:first-child td { + border-top: 0 +} +table tbody+tbody { + border-top: 2px solid #ddd +} + +.task-list{ + padding:0; +} + +.md-task-list-item { + padding-left: 1.6rem; +} + +.md-task-list-item > input:before { + content: '\221A'; + display: inline-block; + width: 1.33333333rem; + height: 1.6rem; + vertical-align: middle; + text-align: center; + color: #ddd; + background-color: #fefefe; +} + +.md-task-list-item > input:checked:before, +.md-task-list-item > input[checked]:before{ + color: inherit; +} +.md-tag { + color: inherit; + font: inherit; +} +#write pre.md-meta-block { + min-height: 35px; + padding: 0.5em 1em; +} +#write pre.md-meta-block { + white-space: pre; + background: #f8f8f8; + border: 0px; + color: #999; + + width: 100vw; + max-width: calc(100% + 60px); + margin-left: -30px; + border-left: 30px #f8f8f8 solid; + border-right: 30px #f8f8f8 solid; + + margin-bottom: 2em; + margin-top: -1.3333333333333rem; + padding-top: 26px; + padding-bottom: 10px; + line-height: 1.8em; + font-size: 0.9em; + font-size: 0.76em; + padding-left: 0; +} +.md-img-error.md-image>.md-meta{ + vertical-align: bottom; +} +#write>h5.md-focus:before { + top: 2px; +} + +.md-toc { + margin-top: 40px; +} + +.md-toc-content { + padding-bottom: 20px; +} + +.outline-expander:before { + color: inherit; + font-size: 14px; + top: auto; + content: "\f0da"; + font-family: FontAwesome; +} + +.outline-expander:hover:before, +.outline-item-open>.outline-item>.outline-expander:before { + content: "\f0d7"; +} + +/** source code mode */ +#typora-source { + font-family: Courier, monospace; + color: #6A6A6A; +} + +.html-for-mac #typora-sidebar { + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} + +.cm-s-typora-default .cm-header, +.cm-s-typora-default .cm-property, +.CodeMirror.cm-s-typora-default div.CodeMirror-cursor { + color: #428bca; +} + +.cm-s-typora-default .cm-atom, .cm-s-typora-default .cm-number { + color: #777777; +} + +.typora-node .file-list-item-parent-loc, +.typora-node .file-list-item-time, +.typora-node .file-list-item-summary { + font-family: arial, sans-serif; +} + +.md-task-list-item>input { + margin-left: -1.3em; + margin-top: calc(1rem - 12px); +} + +.md-mathjax-midline { + background: #fafafa; +} + +.md-fences .code-tooltip { + bottom: -2em !important; +} + +.dropdown-menu .divider { + border-color: #e5e5e5; +} \ No newline at end of file diff --git a/config/Typora/typora-dictionaries/en-GB-LICENSE b/config/Typora/typora-dictionaries/en-GB-LICENSE new file mode 100644 index 0000000..87b6f55 --- /dev/null +++ b/config/Typora/typora-dictionaries/en-GB-LICENSE @@ -0,0 +1,347 @@ +en_GB-ise Hunspell Dictionary +Version 2017.01.22 +Sun Jan 22 17:22:40 2017 -0500 [0c64f5c] +http://wordlist.sourceforge.net + +README file for English Hunspell dictionaries derived from SCOWL. + +These dictionaries are created using the speller/make-hunspell-dict +script in SCOWL. + +The following dictionaries are available: + + en_US (American) + en_CA (Canadian) + en_GB-ise (British with "ise" spelling) + en_GB-ize (British with "ize" spelling) + en_AU (Australian) + + en_US-large + en_CA-large + en_GB-large (with both "ise" and "ize" spelling) + en_AU-large + +The normal (non-large) dictionaries correspond to SCOWL size 60 and, +to encourage consistent spelling, generally only include one spelling +variant for a word. The large dictionaries correspond to SCOWL size +70 and may include multiple spelling for a word when both variants are +considered almost equal. The larger dictionaries however (1) have not +been as carefully checked for errors as the normal dictionaries and +thus may contain misspelled or invalid words; and (2) contain +uncommon, yet valid, words that might cause problems as they are +likely to be misspellings of more common words (for example, "ort" and +"calender"). + +To get an idea of the difference in size, here are 25 random words +only found in the large dictionary for American English: + + Bermejo Freyr's Guenevere Hatshepsut Nottinghamshire arrestment + crassitudes crural dogwatches errorless fetial flaxseeds godroon + incretion jalapeño's kelpie kishkes neuroglias pietisms pullulation + stemwinder stenoses syce thalassic zees + +The en_US, en_CA and en_AU are the official dictionaries for Hunspell. +The en_GB and large dictionaries are made available on an experimental +basis. If you find them useful please send me a quick email at +kevina@gnu.org. + +If none of these dictionaries suite you (for example, maybe you want +the normal dictionary that also includes common variants) additional +dictionaries can be generated at http://app.aspell.net/create or by +modifying speller/make-hunspell-dict in SCOWL. Please do let me know +if you end up publishing a customized dictionary. + +If a word is not found in the dictionary or a word is there you think +shouldn't be, you can lookup the word up at http://app.aspell.net/lookup +to help determine why that is. + +General comments on these list can be sent directly to me at +kevina@gnu.org or to the wordlist-devel mailing lists +(https://lists.sourceforge.net/lists/listinfo/wordlist-devel). If you +have specific issues with any of these dictionaries please file a bug +report at https://github.com/kevina/wordlist/issues. + +IMPORTANT CHANGES INTRODUCED In 2016.11.20: + +New Australian dictionaries thanks to the work of Benjamin Titze +(btitze@protonmail.ch). + +IMPORTANT CHANGES INTRODUCED IN 2016.04.24: + +The dictionaries are now in UTF-8 format instead of ISO-8859-1. This +was required to handle smart quotes correctly. + +IMPORTANT CHANGES INTRODUCED IN 2016.01.19: + +"SET UTF8" was changes to "SET UTF-8" in the affix file as some +versions of Hunspell do not recognize "UTF8". + +ADDITIONAL NOTES: + +The NOSUGGEST flag was added to certain taboo words. While I made an +honest attempt to flag the strongest taboo words with the NOSUGGEST +flag, I MAKE NO GUARANTEE THAT I FLAGGED EVERY POSSIBLE TABOO WORD. +The list was originally derived from Németh László, however I removed +some words which, while being considered taboo by some dictionaries, +are not really considered swear words in today's society. + +COPYRIGHT, SOURCES, and CREDITS: + +The English dictionaries come directly from SCOWL +and is thus under the same copyright of SCOWL. The affix file is +a heavily modified version of the original english.aff file which was +released as part of Geoff Kuenning's Ispell and as such is covered by +his BSD license. Part of SCOWL is also based on Ispell thus the +Ispell copyright is included with the SCOWL copyright. + +The collective work is Copyright 2000-2016 by Kevin Atkinson as well +as any of the copyrights mentioned below: + + Copyright 2000-2016 by Kevin Atkinson + + Permission to use, copy, modify, distribute and sell these word + lists, the associated scripts, the output created from the scripts, + and its documentation for any purpose is hereby granted without fee, + provided that the above copyright notice appears in all copies and + that both that copyright notice and this permission notice appear in + supporting documentation. Kevin Atkinson makes no representations + about the suitability of this array for any purpose. It is provided + "as is" without express or implied warranty. + +Alan Beale also deserves special credit as he has, +in addition to providing the 12Dicts package and being a major +contributor to the ENABLE word list, given me an incredible amount of +feedback and created a number of special lists (those found in the +Supplement) in order to help improve the overall quality of SCOWL. + +The 10 level includes the 1000 most common English words (according to +the Moby (TM) Words II [MWords] package), a subset of the 1000 most +common words on the Internet (again, according to Moby Words II), and +frequently class 16 from Brian Kelk's "UK English Wordlist +with Frequency Classification". + +The MWords package was explicitly placed in the public domain: + + The Moby lexicon project is complete and has + been place into the public domain. Use, sell, + rework, excerpt and use in any way on any platform. + + Placing this material on internal or public servers is + also encouraged. The compiler is not aware of any + export restrictions so freely distribute world-wide. + + You can verify the public domain status by contacting + + Grady Ward + 3449 Martha Ct. + Arcata, CA 95521-4884 + + grady@netcom.com + grady@northcoast.com + +The "UK English Wordlist With Frequency Classification" is also in the +Public Domain: + + Date: Sat, 08 Jul 2000 20:27:21 +0100 + From: Brian Kelk + + > I was wondering what the copyright status of your "UK English + > Wordlist With Frequency Classification" word list as it seems to + > be lacking any copyright notice. + + There were many many sources in total, but any text marked + "copyright" was avoided. Locally-written documentation was one + source. An earlier version of the list resided in a filespace called + PUBLIC on the University mainframe, because it was considered public + domain. + + Date: Tue, 11 Jul 2000 19:31:34 +0100 + + > So are you saying your word list is also in the public domain? + + That is the intention. + +The 20 level includes frequency classes 7-15 from Brian's word list. + +The 35 level includes frequency classes 2-6 and words appearing in at +least 11 of 12 dictionaries as indicated in the 12Dicts package. All +words from the 12Dicts package have had likely inflections added via +my inflection database. + +The 12Dicts package and Supplement is in the Public Domain. + +The WordNet database, which was used in the creation of the +Inflections database, is under the following copyright: + + This software and database is being provided to you, the LICENSEE, + by Princeton University under the following license. By obtaining, + using and/or copying this software and database, you agree that you + have read, understood, and will comply with these terms and + conditions.: + + Permission to use, copy, modify and distribute this software and + database and its documentation for any purpose and without fee or + royalty is hereby granted, provided that you agree to comply with + the following copyright notice and statements, including the + disclaimer, and that the same appear on ALL copies of the software, + database and documentation, including modifications that you make + for internal use or for distribution. + + WordNet 1.6 Copyright 1997 by Princeton University. All rights + reserved. + + THIS SOFTWARE AND DATABASE IS PROVIDED "AS IS" AND PRINCETON + UNIVERSITY MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR + IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PRINCETON + UNIVERSITY MAKES NO REPRESENTATIONS OR WARRANTIES OF MERCHANT- + ABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE + LICENSED SOFTWARE, DATABASE OR DOCUMENTATION WILL NOT INFRINGE ANY + THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + + The name of Princeton University or Princeton may not be used in + advertising or publicity pertaining to distribution of the software + and/or database. Title to copyright in this software, database and + any associated documentation shall at all times remain with + Princeton University and LICENSEE agrees to preserve same. + +The 40 level includes words from Alan's 3esl list found in version 4.0 +of his 12dicts package. Like his other stuff the 3esl list is also in the +public domain. + +The 50 level includes Brian's frequency class 1, words appearing +in at least 5 of 12 of the dictionaries as indicated in the 12Dicts +package, and uppercase words in at least 4 of the previous 12 +dictionaries. A decent number of proper names is also included: The +top 1000 male, female, and Last names from the 1990 Census report; a +list of names sent to me by Alan Beale; and a few names that I added +myself. Finally a small list of abbreviations not commonly found in +other word lists is included. + +The name files form the Census report is a government document which I +don't think can be copyrighted. + +The file special-jargon.50 uses common.lst and word.lst from the +"Unofficial Jargon File Word Lists" which is derived from "The Jargon +File". All of which is in the Public Domain. This file also contain +a few extra UNIX terms which are found in the file "unix-terms" in the +special/ directory. + +The 55 level includes words from Alan's 2of4brif list found in version +4.0 of his 12dicts package. Like his other stuff the 2of4brif is also +in the public domain. + +The 60 level includes all words appearing in at least 2 of the 12 +dictionaries as indicated by the 12Dicts package. + +The 70 level includes Brian's frequency class 0 and the 74,550 common +dictionary words from the MWords package. The common dictionary words, +like those from the 12Dicts package, have had all likely inflections +added. The 70 level also included the 5desk list from version 4.0 of +the 12Dics package which is in the public domain. + +The 80 level includes the ENABLE word list, all the lists in the +ENABLE supplement package (except for ABLE), the "UK Advanced Cryptics +Dictionary" (UKACD), the list of signature words from the YAWL package, +and the 10,196 places list from the MWords package. + +The ENABLE package, mainted by M\Cooper , +is in the Public Domain: + + The ENABLE master word list, WORD.LST, is herewith formally released + into the Public Domain. Anyone is free to use it or distribute it in + any manner they see fit. No fee or registration is required for its + use nor are "contributions" solicited (if you feel you absolutely + must contribute something for your own peace of mind, the authors of + the ENABLE list ask that you make a donation on their behalf to your + favorite charity). This word list is our gift to the Scrabble + community, as an alternate to "official" word lists. Game designers + may feel free to incorporate the WORD.LST into their games. Please + mention the source and credit us as originators of the list. Note + that if you, as a game designer, use the WORD.LST in your product, + you may still copyright and protect your product, but you may *not* + legally copyright or in any way restrict redistribution of the + WORD.LST portion of your product. This *may* under law restrict your + rights to restrict your users' rights, but that is only fair. + +UKACD, by J Ross Beresford , is under the +following copyright: + + Copyright (c) J Ross Beresford 1993-1999. All Rights Reserved. + + The following restriction is placed on the use of this publication: + if The UK Advanced Cryptics Dictionary is used in a software package + or redistributed in any form, the copyright notice must be + prominently displayed and the text of this document must be included + verbatim. + + There are no other restrictions: I would like to see the list + distributed as widely as possible. + +The 95 level includes the 354,984 single words, 256,772 compound +words, 4,946 female names and the 3,897 male names, and 21,986 names +from the MWords package, ABLE.LST from the ENABLE Supplement, and some +additional words found in my part-of-speech database that were not +found anywhere else. + +Accent information was taken from UKACD. + +The VarCon package was used to create the American, British, Canadian, +and Australian word list. It is under the following copyright: + + Copyright 2000-2016 by Kevin Atkinson + + Permission to use, copy, modify, distribute and sell this array, the + associated software, and its documentation for any purpose is hereby + granted without fee, provided that the above copyright notice appears + in all copies and that both that copyright notice and this permission + notice appear in supporting documentation. Kevin Atkinson makes no + representations about the suitability of this array for any + purpose. It is provided "as is" without express or implied warranty. + + Copyright 2016 by Benjamin Titze + + Permission to use, copy, modify, distribute and sell this array, the + associated software, and its documentation for any purpose is hereby + granted without fee, provided that the above copyright notice appears + in all copies and that both that copyright notice and this permission + notice appear in supporting documentation. Benjamin Titze makes no + representations about the suitability of this array for any + purpose. It is provided "as is" without express or implied warranty. + + Since the original words lists come from the Ispell distribution: + + Copyright 1993, Geoff Kuenning, Granada Hills, CA + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. All modifications to the source code must be clearly marked as + such. Binary redistributions based on modified source code + must be clearly marked as modified versions in the documentation + and/or other materials provided with the distribution. + (clause 4 removed with permission from Geoff Kuenning) + 5. The name of Geoff Kuenning may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +Build Date: Sun Jan 22 17:42:49 EST 2017 +Wordlist Command: mk-list --accents=strip en_GB-ise 60 diff --git a/config/Typora/typora-dictionaries/en_GB.aff b/config/Typora/typora-dictionaries/en_GB.aff new file mode 100644 index 0000000..9e7cb1e --- /dev/null +++ b/config/Typora/typora-dictionaries/en_GB.aff @@ -0,0 +1,205 @@ +SET UTF-8 +TRY esianrtolcdugmphbyfvkwzESIANRTOLCDUGMPHBYFVKWZ' +ICONV 1 +ICONV ’ ' +NOSUGGEST ! + +# ordinal numbers +COMPOUNDMIN 1 +# only in compounds: 1th, 2th, 3th +ONLYINCOMPOUND c +# compound rules: +# 1. [0-9]*1[0-9]th (10th, 11th, 12th, 56714th, etc.) +# 2. [0-9]*[02-9](1st|2nd|3rd|[4-9]th) (21st, 22nd, 123rd, 1234th, etc.) +COMPOUNDRULE 2 +COMPOUNDRULE n*1t +COMPOUNDRULE n*mp +WORDCHARS 0123456789 + +PFX A Y 1 +PFX A 0 re . + +PFX I Y 1 +PFX I 0 in . + +PFX U Y 1 +PFX U 0 un . + +PFX C Y 1 +PFX C 0 de . + +PFX E Y 1 +PFX E 0 dis . + +PFX F Y 1 +PFX F 0 con . + +PFX K Y 1 +PFX K 0 pro . + +SFX V N 2 +SFX V e ive e +SFX V 0 ive [^e] + +SFX N Y 3 +SFX N e ion e +SFX N y ication y +SFX N 0 en [^ey] + +SFX X Y 3 +SFX X e ions e +SFX X y ications y +SFX X 0 ens [^ey] + +SFX H N 2 +SFX H y ieth y +SFX H 0 th [^y] + +SFX Y Y 1 +SFX Y 0 ly . + +SFX G Y 2 +SFX G e ing e +SFX G 0 ing [^e] + +SFX J Y 2 +SFX J e ings e +SFX J 0 ings [^e] + +SFX D Y 4 +SFX D 0 d e +SFX D y ied [^aeiou]y +SFX D 0 ed [^ey] +SFX D 0 ed [aeiou]y + +SFX T N 4 +SFX T 0 st e +SFX T y iest [^aeiou]y +SFX T 0 est [aeiou]y +SFX T 0 est [^ey] + +SFX R Y 4 +SFX R 0 r e +SFX R y ier [^aeiou]y +SFX R 0 er [aeiou]y +SFX R 0 er [^ey] + +SFX Z Y 4 +SFX Z 0 rs e +SFX Z y iers [^aeiou]y +SFX Z 0 ers [aeiou]y +SFX Z 0 ers [^ey] + +SFX S Y 4 +SFX S y ies [^aeiou]y +SFX S 0 s [aeiou]y +SFX S 0 es [sxzh] +SFX S 0 s [^sxzhy] + +SFX P Y 3 +SFX P y iness [^aeiou]y +SFX P 0 ness [aeiou]y +SFX P 0 ness [^y] + +SFX M Y 1 +SFX M 0 's . + +SFX B Y 3 +SFX B 0 able [^aeiou] +SFX B 0 able ee +SFX B e able [^aeiou]e + +SFX L Y 1 +SFX L 0 ment . + +REP 90 +REP a ei +REP ei a +REP a ey +REP ey a +REP ai ie +REP ie ai +REP alot a_lot +REP are air +REP are ear +REP are eir +REP air are +REP air ere +REP ere air +REP ere ear +REP ere eir +REP ear are +REP ear air +REP ear ere +REP eir are +REP eir ere +REP ch te +REP te ch +REP ch ti +REP ti ch +REP ch tu +REP tu ch +REP ch s +REP s ch +REP ch k +REP k ch +REP f ph +REP ph f +REP gh f +REP f gh +REP i igh +REP igh i +REP i uy +REP uy i +REP i ee +REP ee i +REP j di +REP di j +REP j gg +REP gg j +REP j ge +REP ge j +REP s ti +REP ti s +REP s ci +REP ci s +REP k cc +REP cc k +REP k qu +REP qu k +REP kw qu +REP o eau +REP eau o +REP o ew +REP ew o +REP oo ew +REP ew oo +REP ew ui +REP ui ew +REP oo ui +REP ui oo +REP ew u +REP u ew +REP oo u +REP u oo +REP u oe +REP oe u +REP u ieu +REP ieu u +REP ue ew +REP ew ue +REP uff ough +REP oo ieu +REP ieu oo +REP ier ear +REP ear ier +REP ear air +REP air ear +REP w qu +REP qu w +REP z ss +REP ss z +REP shun tion +REP shun sion +REP shun cion +REP size cise diff --git a/config/Typora/typora-dictionaries/en_GB.dic b/config/Typora/typora-dictionaries/en_GB.dic new file mode 100644 index 0000000..b470455 --- /dev/null +++ b/config/Typora/typora-dictionaries/en_GB.dic @@ -0,0 +1,49196 @@ +49195 +0/nm +0th/pt +1/n1 +1st/p +1th/tc +2/nm +2nd/p +2th/tc +3/nm +3rd/p +3th/tc +4/nm +4th/pt +5/nm +5th/pt +6/nm +6th/pt +7/nm +7th/pt +8/nm +8th/pt +9/nm +9th/pt +A/SM +AA/M +AAA +AB/M +ABA +ABC/SM +ABM/SM +ABS +AC/M +ACLU/M +ACT +ACTH/M +AD/M +ADC +ADD +ADM +ADP/M +AF +AFAIK +AFB +AFC/M +AFDC +AFN +AFT +AI/SM +AIDS/M +AK +AL +AM/M +AMA +AMD/M +ANSI/S +ANZUS/M +AOL/M +AP/M +APB +APC +API +APO +APR +AR +ARC +ASAP +ASCII/SM +ASL/M +ASPCA +ATM/M +ATP/M +ATV +AV +AVI +AWACS/M +AWOL/M +AZ/M +AZT/M +Aachen/M +Aaliyah/M +Aaron/M +Abbas/M +Abbasid/M +Abbott/M +Abby/M +Abdul/M +Abe/M +Abel/M +Abelard/M +Abelson/M +Aberdeen/M +Abernathy/M +Abidjan/M +Abigail/M +Abilene/M +Abner/M +Aborigine/MS +Abraham/M +Abram/MS +Abrams/M +Absalom/M +Abuja/M +Abyssinia/M +Abyssinian/M +Ac/M +Acadia/M +Acapulco/M +Accenture/M +Accra/M +Acevedo/M +Achaean/M +Achebe/M +Achernar/M +Acheson/M +Achilles/M +Aconcagua/M +Acosta/M +Acropolis +Acrux/M +Actaeon/M +Acton/M +Acts/M +Acuff/M +Ada/SM +Adam/SM +Adams/M +Adan/M +Adana/M +Adar/M +Addams/M +Adderley/M +Addie/M +Addison/M +Adela/M +Adelaide/M +Adele/M +Adeline/M +Aden/M +Adenauer/M +Adhara/M +Adidas/M +Adirondack/SM +Adirondacks/M +Adkins/M +Adler/M +Adm +Admiralty +Adolf/M +Adolfo/M +Adolph/M +Adonis/MS +Adrenalin/MS +Adrian/M +Adriana/M +Adriatic/M +Adrienne/M +Advent/MS +Adventist/MS +Advil/M +Aegean/M +Aelfric/M +Aeneas/M +Aeneid/M +Aeolus/M +Aeroflot/M +Aeschylus/M +Aesculapius/M +Aesop/M +Afghan/SM +Afghani/M +Afghanistan/M +Afr +Africa/M +African/SM +Afrikaans/M +Afrikaner/SM +Afro/SM +Afrocentric +Afrocentrism/M +Ag/M +Agamemnon/M +Agana +Agassi/M +Agassiz/M +Agatha/M +Aggie/M +Aglaia/M +Agnes/M +Agnew/M +Agni/M +Agra/M +Agricola/M +Agrippa/M +Agrippina/M +Aguascalientes +Aguilar/M +Aguinaldo/M +Aguirre/M +Agustin/M +Ahab/M +Ahmad/M +Ahmadabad/M +Ahmadinejad/M +Ahmed/M +Ahriman/M +Aida/M +Aiken/M +Aileen/M +Aimee/M +Ainu/M +Airedale/MS +Aires/M +Aisha/M +Ajax/M +Akbar/M +Akhmatova/M +Akihito/M +Akita/M +Akiva/M +Akkad/M +Akron/M +Al/M +Ala/S +Alabama/M +Alabaman/MS +Alabamian/SM +Aladdin/M +Alamo/M +Alamogordo/M +Alan/M +Alana/M +Alar/M +Alaric/M +Alaska/M +Alaskan/MS +Alba/M +Albania/M +Albanian/MS +Albany/M +Albee/M +Alberio/M +Albert/M +Alberta/M +Albertan +Alberto/M +Albigensian/M +Albion/M +Albireo/M +Albuquerque/M +Alcatraz/M +Alcestis/M +Alcibiades/M +Alcindor/M +Alcmena/M +Alcoa/M +Alcott/M +Alcuin/M +Alcyone/M +Aldan/M +Aldebaran/M +Alden/M +Alderamin/M +Aldo/M +Aldrin/M +Alec/M +Aleichem/M +Alejandra/M +Alejandro/M +Alembert/M +Aleppo/M +Aleut/MS +Aleutian/SM +Alex/M +Alexander/MS +Alexandra/M +Alexandria/M +Alexandrian +Alexei/M +Alexis/M +Alfonso/M +Alfonzo/M +Alford/M +Alfred/M +Alfreda/M +Alfredo/M +Algenib/M +Alger/M +Algeria/M +Algerian/SM +Algieba/M +Algiers/M +Algol/M +Algonquian/SM +Algonquin/MS +Alhambra/M +Alhena/M +Ali/M +Alice/M +Alicia/M +Alighieri/M +Aline/M +Alioth/M +Alisa/M +Alisha/M +Alison/M +Alissa/M +Alistair/M +Alkaid/M +Allah/M +Allahabad/M +Allan/M +Alleghenies/M +Allegheny/SM +Allegra/M +Allen/M +Allende/M +Allentown/M +Allhallows/M +Allie/MS +Allison/M +Allstate/M +Allyson/M +Alma/M +Almach/M +Almaty/M +Almighty/M +Almohad/M +Almoravid/M +Alnilam/M +Alnitak/M +Alonzo/M +Alpert/M +Alphard/M +Alphecca/M +Alpheratz/M +Alphonse/M +Alphonso/M +Alpine/M +Alpo/M +Alps/M +Alsace/M +Alsatian/SM +Alsop/M +Alston/M +Alta/M +Altai/M +Altaic/M +Altair/M +Altamira/M +Althea/M +Altiplano/M +Altman/M +Altoids/M +Alton/M +Aludra/M +Alva/M +Alvarado/M +Alvarez/M +Alvaro/M +Alvin/M +Alyce/M +Alyson/M +Alyssa/M +Alzheimer/M +Am/MNR +Amadeus/M +Amado/M +Amalia/M +Amanda/M +Amarillo/M +Amaru/M +Amaterasu/M +Amati/M +Amazon/SM +Amazonian +Amber/M +Amelia/M +Amen/M +Amenhotep/M +Amerasian/M +America/SM +American/MS +Americana/M +Americanisation/MS +Americanise/GDS +Americanism/MS +Amerind/SM +Amerindian/MS +Ameslan/M +Amharic/M +Amherst/M +Amie/M +Amiga/M +Amish/M +Amman/M +Amoco/M +Amos/M +Amparo/M +Ampere/M +Amritsar/M +Amsterdam/M +Amtrak/M +Amundsen/M +Amur/M +Amway/M +Amy/M +Ana/M +Anabaptist/M +Anabel/M +Anacin/M +Anacreon/M +Anaheim/M +Analects/M +Ananias/M +Anasazi/M +Anastasia/M +Anatole/M +Anatolia/M +Anatolian/M +Anaxagoras/M +Anchorage/M +Andalusia/M +Andalusian/M +Andaman/M +Andean/M +Andersen/M +Anderson/M +Andes/M +Andorra/M +Andorran/SM +Andre/MS +Andrea/M +Andrei/M +Andres/M +Andretti/M +Andrew/SM +Andrews/M +Andrianampoinimerina/M +Android/M +Andromache/M +Andromeda/M +Andropov/M +Andy/M +Angara/M +Angel/M +Angela/M +Angeles/M +Angelia/M +Angelica/M +Angelico/M +Angelina/M +Angeline/M +Angelique/M +Angelita/M +Angelo/M +Angelou/M +Angevin/M +Angie/M +Angkor/M +Angle/MS +Anglia/M +Anglican/SM +Anglicanism/MS +Anglicism/MS +Anglicization +Anglicize +Anglo/M +Anglophile/M +Anglophobe +Angola/M +Angolan/MS +Angora/SM +Angstrom/M +Anguilla/M +Angus/M +Aniakchak/M +Anibal/M +Anita/M +Ankara/M +Ann/M +Anna/M +Annabel/M +Annabelle/M +Annam/M +Annapolis/M +Annapurna/M +Anne/M +Annette/M +Annie/M +Annmarie/M +Annunciation/SM +Anouilh/M +Anselm/M +Anselmo/M +Anshan/M +Antaeus/M +Antananarivo/M +Antarctic/M +Antarctica/M +Antares/M +Anthony/M +Anthropocene +Antichrist/SM +Antietam/M +Antigone/M +Antigua/M +Antillean +Antilles/M +Antioch/M +Antipas/M +Antipodes +Antofagasta/M +Antoine/M +Antoinette/M +Anton/M +Antone/M +Antonia/M +Antoninus/M +Antonio/M +Antonius/M +Antony/M +Antwan/M +Antwerp/M +Anubis/M +Anzac/M +Apache/SM +Apalachicola/M +Apatosaurus +Apennines/M +Aphrodite/M +Apia/M +Apocalypse/M +Apocrypha/M +Apollinaire/M +Apollo/SM +Apollonian/M +Apostle/M +Appalachia/M +Appalachian/SM +Appalachians/M +Appaloosa/SM +Apple/M +Appleseed/M +Appleton/M +Appomattox/M +Apr/M +April/MS +Apuleius/M +Aquafresh/M +Aquarian +Aquarius/MS +Aquila/M +Aquinas/M +Aquino/M +Aquitaine/M +Ar/M +Ara/M +Arab/SM +Arabia/M +Arabian/MS +Arabic/M +Arabist/MS +Araby/M +Araceli/M +Arafat/M +Aragon +Araguaya/M +Aral/M +Aramaic/M +Aramco/M +Arapaho/MS +Arapahoes +Ararat/M +Araucanian/M +Arawak/M +Arawakan/M +Arbitron/M +Arcadia/M +Arcadian/M +Archean/M +Archibald/M +Archie/M +Archimedes/M +Arctic/M +Arcturus/M +Ardabil +Arden/M +Arequipa/M +Ares/M +Argentina/M +Argentine/M +Argentinean +Argentinian/MS +Argo/SM +Argonaut/MS +Argonne/M +Argos/M +Argus/M +Ariadne/M +Arianism/M +Ariel/M +Aries/MS +Ariosto/M +Aristarchus/M +Aristides/M +Aristophanes/M +Aristotelian/M +Aristotle/M +Arius/M +Ariz +Arizona/M +Arizonan/SM +Arizonian/MS +Arjuna/M +Ark/M +Arkansan/MS +Arkansas/M +Arkhangelsk/M +Arkwright/M +Arlene/M +Arline/M +Arlington/M +Armageddon/SM +Armagnac/M +Armand/M +Armando/M +Armani/M +Armenia/M +Armenian/SM +Arminius/M +Armonk/M +Armour/M +Armstrong/M +Arneb/M +Arnhem/M +Arno/M +Arnold/M +Arnulfo/M +Aron/M +Arrhenius/M +Arron/M +Art/M +Artaxerxes/M +Artemis/M +Arthur/M +Arthurian/M +Artie/M +Arturo/M +Aruba/M +Aryan/MS +As/M +Asama/M +Ascella/M +Ascension/M +Asgard/M +Ashanti/M +Ashcroft/M +Ashe/M +Ashgabat +Ashikaga/M +Ashkenazim/M +Ashkhabad/M +Ashlee/M +Ashley/M +Ashmolean/M +Ashurbanipal/M +Asia/M +Asiago +Asian/MS +Asiatic/SM +Asimov/M +Asmara/M +Asoka/M +Aspell/M +Aspen/M +Asperger/M +Aspidiske/M +Asquith/M +Assad/M +Assam/M +Assamese/M +Assembly +Assisi/M +Assyria/M +Assyrian/SM +Astaire/M +Astana/M +Astarte/M +Aston/M +Astor/M +Astoria/M +Astrakhan/M +AstroTurf/M +Asturias/M +Asuncion/M +Aswan/M +At/SM +Atacama/M +Atahualpa/M +Atalanta/M +Atari/M +Ataturk/M +Athabasca/M +Athabaskan/SM +Athanasius +Athena/M +Athene/M +Athenian/SM +Athens/M +Atkins/M +Atkinson/M +Atlanta/M +Atlantes +Atlantic/M +Atlantis/M +Atlas/MS +Atman/M +Atonement +Atreus/M +Atria/M +Atropos/M +Attic/M +Attica/M +Attila/M +Attlee/M +Attn +Attucks/M +Atwood/M +Au/M +Aubrey/M +Auckland/M +Auden/M +Audi/M +Audion/M +Audra/M +Audrey/M +Audubon/M +Aug/M +Augean/M +Augsburg/M +August/MS +Augusta/M +Augustan/M +Augustine/M +Augustinian/MS +Augustus/M +Aurangzeb/M +Aurelia/M +Aurelio/M +Aurelius/M +Aureomycin/M +Auriga/M +Aurora/M +Auschwitz/M +Aussie/MS +Austen/M +Austerlitz/M +Austin/MS +Australasia/M +Australasian +Australia/M +Australian/SM +Australoid/M +Australopithecus/M +Austria/M +Austrian/SM +Austronesian/M +Autumn/M +Av/M +Ava/M +Avalon/M +Ave/M +Aventine/M +Avernus/M +Averroes/M +Avery/M +Avesta/M +Avicenna/M +Avignon/M +Avila/M +Avior/M +Avis/M +Avogadro/M +Avon/M +Axis +Axum/M +Ayala/M +Ayers/M +Aymara/M +Ayrshire/M +Ayurveda/M +Ayyubid/M +Azana/M +Azania/M +Azazel/M +Azerbaijan/M +Azerbaijani/MS +Azores/M +Azov/M +Aztec/SM +Aztecan/M +Aztlan/M +B/MNT +BA/M +BASIC/SM +BB/M +BBB/M +BBC/M +BBQ +BBS +BBSes +BC/M +BFF +BIA +BIOS +BITNET +BLT/SM +BM/M +BMW/M +BO +BP/M +BPOE +BR +BS/M +BSA +BSD/SM +BTU +BTW +BYOB +Ba/M +Baal/SM +Baath/M +Baathist/M +Babbage/M +Babbitt/M +Babel/MS +Babylon/MS +Babylonia/M +Babylonian/SM +Bacall/M +Bacardi/M +Bacchanalia/M +Bacchic +Bacchus/M +Bach/M +Backus/M +Bacon/M +Bactria/M +Baden/M +Badlands/M +Baedeker/MS +Baeria/M +Baeyer/M +Baez/M +Baffin/M +Baggies/M +Baghdad/M +Baguio/M +Baha'i/M +Baha'ullah/M +Bahama/SM +Bahamanian +Bahamas/M +Bahamian/MS +Bahia/M +Bahrain/M +Baikal/M +Bailey/M +Baird/M +Bakelite/M +Baker/M +Bakersfield/M +Baku/M +Bakunin/M +Balanchine/M +Balaton/M +Balboa/M +Balder/M +Baldwin/SM +Balearic/M +Balfour/M +Bali/M +Balinese/M +Balkan/MS +Balkans/M +Balkhash/M +Ball/M +Ballard/M +Balthazar/M +Baltic/M +Baltimore/M +Baluchistan/M +Balzac/M +Bamako/M +Bambi/M +Banach/M +Bancroft/M +Bandung/M +Bangalore/M +Bangkok/M +Bangladesh/M +Bangladeshi/SM +Bangor/M +Bangui/M +Banjarmasin/M +Banjul/M +Banks/M +Banneker/M +Bannister/M +Banting/M +Bantu/MS +Baotou/M +Baptist/SM +Baptiste/M +Barabbas/M +Barack/M +Barbadian/SM +Barbados/M +Barbara/M +Barbarella/M +Barbarossa/M +Barbary/M +Barber/M +Barbie/M +Barbour/M +Barbra/M +Barbuda/M +Barcelona/M +Barclay/SM +Barclays/M +Bardeen/M +Barents/M +Barker/M +Barkley/M +Barlow/M +Barnabas/M +Barnaby/M +Barnard/M +Barnaul/M +Barnes/M +Barnett/M +Barney/M +Barnum/M +Baroda/M +Barquisimeto/M +Barr/M +Barranquilla/M +Barrera/M +Barrett/M +Barrie/M +Barron/M +Barry/M +Barrymore/M +Bart/M +Barth/MS +Bartholdi/M +Bartholomew/M +Bartlett/M +Bartok/M +Barton/M +Baruch/M +Baryshnikov/M +Basel/M +Basho/M +Basie/M +Basil/M +Basque/MS +Basra/M +Bass/M +Basseterre/M +Bastille/M +Basutoland/M +Bataan/M +Bates/M +Bathsheba/M +Batista/M +Batman/M +Battle/M +Batu/M +Baudelaire/M +Baudouin/M +Baudrillard/M +Bauer/M +Bauhaus/M +Baum/M +Bavaria/M +Bavarian/M +Baxter/M +Bayamon +Bayer/M +Bayes/M +Bayesian/M +Bayeux/M +Baylor/M +Bayonne/M +Bayreuth/M +Baywatch/M +Be/MH +Beach/M +Beadle/M +Bean/M +Beard/M +Beardmore/M +Beardsley/M +Bearnaise/M +Beasley/M +Beatlemania/M +Beatles/M +Beatrice/M +Beatrix/M +Beatriz/M +Beatty/M +Beau/M +Beaufort/M +Beaujolais/M +Beaumarchais/M +Beaumont/M +Beauregard/M +Beauvoir/M +Bechtel/M +Beck/MR +Becker/M +Becket/M +Beckett/M +Becky/M +Becquerel/M +Bede/M +Bedouin/SM +Beebe/M +Beecher/M +Beefaroni/M +Beelzebub/M +Beerbohm/M +Beethoven/M +Beeton/M +Begin/M +Behan/M +Behring/M +Beiderbecke/M +Beijing/M +Beirut/M +Bekesy/M +Bela/M +Belarus/M +Belau/M +Belem/M +Belfast/M +Belg +Belgian/SM +Belgium/M +Belgrade/M +Belinda/M +Belize/M +Bell/M +Bella/M +Bellamy/M +Bellatrix/M +Belleek/M +Bellini/M +Bellow/M +Belmont/M +Belmopan/M +Belorussian/MS +Belshazzar/M +Beltane/M +Belushi/M +Ben/M +Benacerraf/M +Benchley/M +Bender/M +Bendix/M +Benedict/M +Benedictine/MS +Benelux/M +Benet/M +Benetton/M +Bengal/SM +Bengali/M +Benghazi/M +Benin/M +Beninese/M +Benita/M +Benito/M +Benjamin/M +Bennett/M +Bennie/M +Benny/M +Benson/M +Bentham/M +Bentley/M +Benton/M +Benz/M +Benzedrine/M +Beowulf/M +Berber/SM +Berenice/M +Beretta/M +Berg/MNR +Bergen/M +Berger/M +Bergerac/M +Bergman/M +Bergson/M +Bering/M +Berkeley/M +Berkshire/SM +Berkshires/M +Berle/M +Berlin/SZMR +Berliner/M +Berlioz/M +Berlitz/M +Bermuda/SM +Bermudan/SM +Bermudian/SM +Bern/M +Bernadette/M +Bernadine/M +Bernanke/M +Bernard/M +Bernardo/M +Bernays/M +Bernbach/M +Bernese +Bernhardt/M +Bernice/M +Bernie/M +Bernini/M +Bernoulli/M +Bernstein/M +Berra/M +Berry/M +Bert/M +Berta/M +Bertelsmann/M +Bertha/M +Bertie/M +Bertillon/M +Bertram/M +Bertrand/M +Beryl/M +Berzelius/M +Bess/M +Bessel/M +Bessemer/M +Bessie/M +Best/M +Betelgeuse/M +Beth/M +Bethany/M +Bethe/M +Bethesda/M +Bethlehem/M +Bethune/M +Betsy/M +Bette/M +Bettie/M +Betty/M +Bettye/M +Beulah/M +Beveridge +Beverley/M +Beverly/M +Bharat/M +Bhopal/M +Bhutan/M +Bhutanese/M +Bhutto/M +Bi/M +Bialystok/M +Bianca/M +Bib +Bible/MS +Bic/M +Biddle/M +Biden/M +Bierce/M +Bigfoot/M +Biggles/M +Biko/M +Bilbao/M +Bilbo/M +Bill/MJ +Billie/M +Billings/M +Billy/M +Bimini/M +Bioko/M +Bird/M +Birdseye/M +Birkenstock/M +Birmingham/M +Biro/M +Biscay/M +Biscayne/M +Bishkek/M +Bishop/M +Bismarck/M +Bismark/M +Bisquick/M +Bissau/M +BitTorrent/M +Bizet/M +Bjerknes/M +Bjork/M +Bk/M +BlackBerry/M +Blackbeard/M +Blackburn/M +Blackfeet/M +Blackfoot/M +Blackpool/M +Blackshirt/M +Blackstone/M +Blackwell/M +Blaine/M +Blair/M +Blake/M +Blanca/M +Blanchard/M +Blanche/M +Blankenship/M +Blantyre/M +Blatz/M +Blavatsky/M +Blenheim/M +Blevins/M +Bligh/M +Bloch/M +Blockbuster/M +Bloemfontein/M +Blondel/M +Blondie/M +Bloom/MR +Bloomer/M +Bloomfield/M +Bloomingdale/M +Bloomsbury/M +Blu +Blucher/M +Bluebeard/M +Bluetooth/M +Blvd +Blythe/M +Boadicea +Boas/M +Bob/M +Bobbi/M +Bobbie/M +Bobbitt/M +Bobby/M +Boccaccio/M +Bodhidharma/M +Bodhisattva/M +Bodleian +Boeing/M +Boeotia/M +Boeotian/M +Boer/SM +Boethius/M +Bogart/M +Bogota/M +Bohemia/M +Bohemian/SM +Bohr/M +Boise/M +Bojangles/M +Boleyn/M +Bolivar/M +Bolivia/M +Bolivian/MS +Bollywood/M +Bologna/M +Bolshevik/SM +Bolsheviki +Bolshevism/M +Bolshevist/M +Bolshoi/M +Bolton/M +Boltzmann/M +Bombay/M +Bonaparte/M +Bonaventure/M +Bond/M +Bonhoeffer/M +Boniface/M +Bonita/M +Bonn/MR +Bonner/M +Bonneville/M +Bonnie/M +Bono/M +Booker/M +Boole/M +Boolean/M +Boone/M +Bootes/M +Booth/M +Bordeaux/M +Borden/M +Bordon/M +Boreas/M +Borg/SM +Borges/M +Borgia/M +Borglum/M +Boris/M +Bork/M +Borlaug/M +Born/M +Borneo/M +Borobudur/M +Borodin/M +Boru/M +Bosch/M +Bose/M +Bosnia/M +Bosnian +Bosporus/M +Boston/MS +Bostonian/M +Boswell/M +Botox +Botswana/M +Botticelli/M +Boulder/M +Boulez/M +Bourbaki/M +Bourbon/SM +Bournemouth/M +Bovary/M +Bowditch/M +Bowell/M +Bowen/M +Bowers/M +Bowery/M +Bowie/M +Bowman/M +Boyd/M +Boyer/M +Boyle/M +Br/MT +Brad/MY +Bradbury/M +Braddock/M +Bradford/M +Bradley/M +Bradly/M +Bradshaw/M +Bradstreet/M +Brady/M +Bragg/M +Brahe/M +Brahma/MS +Brahmagupta/M +Brahman/MS +Brahmani +Brahmanism/SM +Brahmaputra/M +Brahms/M +Braille/MS +Brain/M +Brampton/M +Bran/M +Branch/M +Brandeis/M +Branden/M +Brandenburg/M +Brandi/M +Brandie/M +Brando/M +Brandon/M +Brandt/M +Brandy/M +Brant/M +Braque/M +Brasilia/M +Bratislava/M +Brattain/M +Bray/M +Brazil/M +Brazilian/MS +Brazos/M +Brazzaville/M +Breakspear/M +Breathalyzer +Brecht/M +Breckenridge/M +Bremen/M +Brenda/M +Brendan/M +Brennan/M +Brenner/M +Brent/M +Brenton/M +Brest/M +Bret/M +Breton/M +Brett/M +Brewer/M +Brewster/M +Brezhnev/M +Brian/M +Briana/M +Brianna/M +Brice/M +Bridalveil/M +Bridgeport/M +Bridger/M +Bridges/M +Bridget/M +Bridgetown/M +Bridgett/M +Bridgette/M +Bridgman/M +Brie/SM +Brigadoon/M +Briggs/M +Brigham/M +Bright/M +Brighton/M +Brigid/M +Brigitte/M +Brillo/M +Brinkley/M +Brisbane/M +Bristol/M +Brit/SM +Britain/M +Britannia/M +Britannic/M +Britannica/M +Briticism/SM +British/MRZ +Britisher/M +Britney/M +Briton/MS +Britt/MN +Brittany/SM +Britten/M +Brittney/M +Brno/M +Broadway/SM +Brobdingnag/M +Brobdingnagian/M +Brock/M +Brokaw/M +Bronson/M +Bronte/M +Brontosaurus +Bronx/M +Brooke/MS +Brooklyn/M +Brooks/M +Bros +Brown/MG +Browne/M +Brownian/M +Brownie/S +Browning/M +Brownshirt/M +Brownsville/M +Brubeck/M +Bruce/M +Bruckner/M +Bruegel +Brummel/M +Brunei/M +Bruneian/MS +Brunelleschi/M +Brunhilde/M +Bruno/M +Brunswick/M +Brussels/M +Brut/M +Brutus/M +Bryan/M +Bryant/M +Bryce/M +Brynner/M +Bryon/M +Brzezinski/M +Btu/M +Buber/M +Buchanan/M +Bucharest/M +Buchenwald/M +Buchwald/M +Buck/M +Buckingham/M +Buckley/M +Buckner/M +Bud/M +Budapest/M +Buddha/SM +Buddhism/SM +Buddhist/SM +Buddy/M +Budweiser/M +Buffalo/M +Buffy/M +Buford/M +Bugatti/M +Bugzilla/M +Buick/M +Bujumbura/M +Bukhara/M +Bukharin/M +Bulawayo/M +Bulfinch/M +Bulganin/M +Bulgar/M +Bulgari/M +Bulgaria/M +Bulgarian/SM +Bullock/M +Bullwinkle/M +Bultmann/M +Bumppo/M +Bunche/M +Bundesbank/M +Bundestag/M +Bunin/M +Bunker/M +Bunsen/M +Bunuel/M +Bunyan/M +Burbank/M +Burberry/M +Burch/M +Burger/M +Burgess/M +Burgoyne/M +Burgundian/M +Burgundy/SM +Burke/M +Burks/M +Burl/M +Burlington/M +Burma/M +Burmese/M +Burnett/M +Burns/M +Burnside/M +Burr/M +Burris/M +Burroughs/M +Bursa/M +Burt/M +Burton/M +Burundi/M +Burundian/MS +Busch/M +Bush/M +Bushido/M +Bushnell/M +Butler/M +Butterfingers/M +Buxtehude/M +Byblos/M +Byers/M +Byrd/M +Byron/M +Byronic/M +Byzantine/MS +Byzantium/M +C/SM +CA +CAD/M +CAI +CAM +CAP +CARE +CATV +CB +CBC/M +CBS/M +CCTV +CCU +CD/M +CDC +CDT +CEO/M +CF +CFC/M +CFO +CGI +CIA/M +CID +CNN/M +CNS/M +CO/M +COBOL/SM +COD +COL +COLA +CPA/M +CPI/M +CPO +CPR/M +CPU/M +CRT/SM +CST/M +CT/M +CV +CVS/M +CZ +Ca/M +Cabernet/M +Cabot/M +Cabral/M +Cabrera/M +Cabrini/M +Cadette +Cadillac/M +Cadiz/M +Caedmon/M +Caerphilly/M +Caesar/SM +Cage/M +Cagney/M +Cahokia/M +Caiaphas/M +Cain/SM +Cairo/M +Caitlin/M +Cajun/MS +Cal/M +Calais/M +Calcutta/M +Calder/M +Calderon/M +Caldwell/M +Caleb/M +Caledonia/M +Calgary/M +Calhoun/M +Cali/M +Caliban/M +Calif +California/M +Californian/SM +Caligula/M +Callaghan/M +Callahan/M +Callao/M +Callas/M +Callie/M +Calliope/M +Callisto/M +Caloocan/M +Calvary/M +Calvert/M +Calvin/M +Calvinism/MS +Calvinist/MS +Calvinistic +Camacho/M +Cambodia/M +Cambodian/SM +Cambrian/SM +Cambridge/M +Camden/M +Camel/M +Camelopardalis/M +Camelot/MS +Camembert/MS +Cameron/M +Cameroon/SM +Cameroonian/MS +Camilla/M +Camille/M +Camoens/M +Campanella/M +Campbell/M +Campinas/M +Campos/M +Camry/M +Camus/M +Can/M +Canaan/M +Canaanite/MS +Canad +Canada/M +Canadian/SM +Canadianism +Canaletto/M +Canaries/M +Canaveral/M +Canberra/M +Cancer/SM +Cancun/M +Candace/M +Candice/M +Candide/M +Candy/M +Cannes/M +Cannon/M +Canon/M +Canopus/M +Cantabrigian/M +Canterbury/M +Canton/M +Cantonese/M +Cantor/M +Cantrell/M +Cantu/M +Canute/M +Capablanca/M +Capek/M +Capella/M +Capet/M +Capetian/M +Capetown/M +Caph/M +Capistrano/M +Capitol/SM +Capitoline/M +Capone/M +Capote/M +Capra/M +Capri/M +Capricorn/MS +Capt +Capuchin/M +Capulet/M +Cara/M +Caracalla/M +Caracas/M +Caravaggio/M +Carboloy/M +Carboniferous/M +Carborundum/M +Cardenas/M +Cardiff/M +Cardin/M +Cardozo/M +Carey/M +Carib/MS +Caribbean/MS +Carina/M +Carissa/M +Carl/M +Carla/M +Carlene/M +Carlin/M +Carlo/MS +Carlos/M +Carlsbad/M +Carlson/M +Carlton/M +Carly/M +Carlyle/M +Carmela/M +Carmella/M +Carmelo/M +Carmen/M +Carmichael/M +Carmine/M +Carnap/M +Carnation/M +Carnegie/M +Carney/M +Carnot/M +Carol/M +Carole/M +Carolina/M +Caroline/M +Carolingian/M +Carolinian/M +Carolyn/M +Carpathian/SM +Carpathians/M +Carpenter/M +Carr/M +Carranza/M +Carrie/RM +Carrier/M +Carrillo/M +Carroll/M +Carson/M +Carter/M +Cartesian/M +Carthage/M +Carthaginian/MS +Cartier/M +Cartwright/M +Caruso/M +Carver/M +Cary/M +Casablanca/M +Casals/M +Casandra/M +Casanova/SM +Cascades/M +Case/M +Casey/M +Cash/M +Casio/M +Caspar/M +Caspian/M +Cassandra/SM +Cassatt/M +Cassidy/M +Cassie/M +Cassiopeia/M +Cassius/M +Castaneda/M +Castilian +Castillo/M +Castlereagh/M +Castor/M +Castries/M +Castro/M +Catalan/SM +Catalina/M +Catalonia/M +Catawba/M +Caterpillar/M +Cathay/M +Cather/M +Catherine/M +Cathleen/M +Catholic/MS +Catholicism/MS +Cathryn/M +Cathy/M +Catiline/M +Cato/M +Catskill/SM +Catskills/M +Catt/M +Catullus/M +Caucasian/MS +Caucasoid +Caucasus/M +Cauchy/M +Cavendish/M +Cavour/M +Caxton/M +Cayenne/M +Cayman/M +Cayuga/SM +Cayuse +Cb +Cd/M +Ce/M +Ceausescu/M +Cebu/M +Cebuano/M +Cecelia/M +Cecil/M +Cecile/M +Cecilia/M +Cecily/M +Cedric/M +Celeste/M +Celia/M +Celina/M +Cellini/M +Celsius/M +Celt/SM +Celtic/SM +Cenozoic/M +Centaurus/M +Centigrade +Central +Cepheid/M +Cepheus/M +Cerberus/M +Cerenkov/M +Ceres/M +Cerf/M +Cervantes/M +Cesar/M +Cesarean/M +Cessna/M +Cetus/M +Ceylon/M +Ceylonese +Cezanne/M +Cf/M +Ch'in/M +Ch/N +Chablis/M +Chad/M +Chadian/MS +Chadwick/M +Chagall/M +Chaitanya/M +Chaitin/M +Chaldea +Chaldean/M +Challenger/M +Chalmers +Chamberlain/M +Chambers/M +Champlain/M +Champollion/M +Chan/M +Chance/M +Chancellorsville/M +Chandigarh/M +Chandler/M +Chandon/M +Chandra/M +Chandragupta/M +Chandrasekhar/M +Chanel/M +Chaney/M +Chang/M +Changchun/M +Changsha/M +Chantilly/M +Chaplin/M +Chaplinesque +Chapman/M +Chappaquiddick/M +Chapultepec/M +Charbray/M +Chardonnay/M +Charity/M +Charlemagne/M +Charlene/M +Charles/M +Charleston/MS +Charley/M +Charlie/M +Charlotte/M +Charlottetown/M +Charmaine/M +Charmin/M +Charolais/M +Charon/M +Chartism/M +Chartres/M +Charybdis/M +Chase/M +Chasity/M +Chateaubriand/M +Chattahoochee/M +Chattanooga/M +Chatterley/M +Chatterton/M +Chaucer/M +Chauncey/M +Chautauqua/M +Chavez/M +Chayefsky/M +Che/M +Chechen/M +Chechnya/M +Cheddar/M +Cheer/M +Cheerios/M +Cheetos/M +Cheever/M +Chekhov/M +Chekhovian +Chelsea/M +Chelyabinsk/M +Chen/M +Cheney/M +Chengdu/M +Chennai/M +Cheops/M +Cheri/M +Cherie/M +Chernenko/M +Chernobyl/M +Chernomyrdin/M +Cherokee/MS +Cherry/M +Cheryl/M +Chesapeake/M +Cheshire/M +Chester/M +Chesterfield/M +Chesterton/M +Chevalier/M +Cheviot/M +Chevrolet/M +Chevron/M +Chevy/M +Cheyenne/SM +Chi/M +Chianti/MS +Chiba/M +Chibcha/M +Chicago/M +Chicagoan/M +Chicana/M +Chicano/M +Chickasaw/MS +Chiclets/M +Chihuahua/MS +Chile/M +Chilean/MS +Chimborazo/M +Chimera/MS +Chimu/M +Chin/M +China/M +Chinatown/M +Chinese/M +Chinook/MS +Chipewyan/M +Chippendale/M +Chippewa/SM +Chiquita/M +Chirico/M +Chisholm/M +Chisinau/M +Chittagong/M +Chivas/M +Chloe/M +Choctaw/SM +Chomsky/M +Chongqing/M +Chopin/M +Chopra/M +Chou/M +Chretien/M +Chris/M +Christ/MS +Christa/M +Christchurch/M +Christendom/MS +Christensen/M +Christi/M +Christian/SM +Christianise +Christianity/SM +Christie/M +Christina/M +Christine/M +Christlike +Christmas/MS +Christmastide/MS +Christmastime/MS +Christoper/M +Christopher/M +Chronicles +Chrysler/M +Chrysostom/M +Chrystal/M +Chuck/M +Chukchi/M +Chumash/M +Chung/M +Church/M +Churchill/M +Churriguera/M +Chuvash/M +Ci/M +Cicero/M +Cid/M +Cimabue/M +Cincinnati/M +Cinderella/MS +Cindy/M +CinemaScope/M +Cinerama/M +Cipro/M +Circe/M +Cisco/M +Citibank/M +Citigroup/M +Citroen/M +Cl/MV +Claiborne/M +Clair/M +Claire/M +Clairol/M +Clancy/M +Clapeyron/M +Clapton/M +Clara/M +Clare/M +Clarence/M +Clarendon/M +Clarice/M +Clarissa/M +Clark/M +Clarke/M +Claude/M +Claudette/M +Claudia/M +Claudine/M +Claudio/M +Claudius/M +Claus/M +Clausewitz/M +Clausius/M +Clay/M +Clayton/M +Clearasil/M +Clem/XM +Clemenceau/M +Clemens/M +Clement/MS +Clementine/M +Clements/M +Clemons/M +Clemson/M +Cleo/M +Cleopatra/M +Cleveland/M +Cliburn/M +Cliff/M +Clifford/M +Clifton/M +Cline/M +Clint/M +Clinton/M +Clio/M +Clive/M +Clorets/M +Clorox/M +Closure/M +Clotho/M +Clouseau/M +Clovis/M +Clyde/M +Clydesdale/M +Clytemnestra/M +Cm/M +Cmdr +Co/M +Cobain/M +Cobb/M +Cochabamba/M +Cochin/M +Cochise/M +Cochran/M +Cockney/M +Cocteau/M +Cod +Cody/M +Coffey/M +Cognac/M +Cohan/M +Cohen/M +Coimbatore/M +Cointreau/M +Coke/SM +Col/M +Colbert/M +Colby/M +Cole/M +Coleen/M +Coleman/M +Coleridge/M +Colette/M +Colfax/M +Colgate/M +Colin/M +Colleen/M +Collier/M +Collin/SM +Collins/M +Colo +Cologne/M +Colombia/M +Colombian/MS +Colombo/M +Colon/M +Coloradan/SM +Colorado/M +Coloradoan +Colosseum/M +Colt/M +Coltrane/M +Columbia/M +Columbine/M +Columbus/M +Com +Comanche/MS +Combs/M +Comdr +Comintern/M +Commandment +Commons/M +Commonwealth +Communion/SM +Communism +Communist/SM +Como/M +Comoran +Comoros/M +Compaq/M +Compton/M +CompuServe/M +Comte/M +Conakry/M +Conan/M +Concepcion/M +Concetta/M +Concord/SM +Concorde/M +Condillac/M +Condorcet/M +Conestoga/M +Confederacy/M +Confederate/MS +Confucian/SM +Confucianism/MS +Confucius/M +Cong/M +Congo/M +Congolese/M +Congregational +Congregationalist/MS +Congress/MS +Congressional +Congreve/M +Conley/M +Conn/MR +Connecticut/M +Connemara/M +Conner/M +Connery/M +Connie/M +Connolly/M +Connors/M +Conrad/M +Conrail/M +Conservative +Constable/M +Constance/M +Constantine/M +Constantinople/M +Constitution +Consuelo/M +Continent/M +Continental/M +Contreras/M +Conway/M +Cook/M +Cooke/M +Cooley/M +Coolidge/M +Cooper/M +Cooperstown/M +Coors/M +Copacabana/M +Copeland/M +Copenhagen/M +Copernican/M +Copernicus/M +Copland/M +Copley/M +Copperfield/M +Coppertone/M +Coppola/M +Coptic/M +Cora/M +Cordelia/M +Cordilleras/M +Cordoba/M +Corey/M +Corfu/M +Corina/M +Corine/M +Corinne/M +Corinth/M +Corinthian/MS +Corinthians/M +Coriolanus/M +Coriolis/M +Cork +Corleone/M +Cormack/M +Corneille/M +Cornelia/M +Cornelius/M +Cornell/M +Corning/M +Cornish/MS +Cornwall/M +Cornwallis/M +Coronado/M +Corot/M +Corp +Correggio/M +Corrine/M +Corsica/M +Corsican/M +Cortes/MS +Cortland/M +Corvallis/M +Corvette/M +Corvus/M +Cory/M +Cosby/M +Cossack/M +Costco/M +Costello/M +Costner/M +Cote/M +Cotonou/M +Cotopaxi/M +Cotswold/M +Cotton/M +Coulomb/M +Coulter/M +Couperin/M +Courbet/M +Courtney/M +Cousteau/M +Coventry/SM +Coward/M +Cowell/M +Cowley/M +Cowper/M +Cox/M +Coy/M +Cozumel/M +Cpl +Cr/MT +Crabbe/M +Craft/M +Craig/M +Cranach/M +Crane/M +Cranmer/M +Crater/M +Crawford/M +Cray/M +Crayola/M +Creation/M +Creator/M +Crecy/M +Cree/DSM +Creek/SM +Creighton/M +Creole/SM +Creon/M +Cressida/M +Crest/M +Cretaceous/M +Cretan/SM +Crete/M +Crichton/M +Crick/M +Crimea/M +Crimean/M +Criollo/M +Crisco/M +Cristina/M +Croat/SM +Croatia/M +Croatian/MS +Croce/M +Crockett/M +Croesus/M +Cromwell/M +Cromwellian/M +Cronin/M +Cronkite/M +Cronus/M +Crookes/M +Crosby/M +Cross/M +Crow/SM +Crowley/M +Crucifixion/MS +Cruikshank/M +Cruise/M +Crusades's +Crusoe/M +Crux/M +Cruz/M +Cryptozoic/M +Crystal/M +Csonka/M +Ct +Ctesiphon/M +Cthulhu/M +Cu/M +Cuba/M +Cuban/SM +Cuchulain/M +Cuisinart/M +Culbertson/M +Cullen/M +Cumberland/M +Cummings/M +Cunard/M +Cunningham/M +Cupid/M +Curacao/M +Curie/M +Curitiba/M +Currier/M +Curry/RM +Curt/M +Curtis/M +Custer/M +Cuvier/M +Cuzco/M +Cybele/M +Cyclades/M +Cyclopes/M +Cyclops/M +Cygnus/M +Cymbeline/M +Cynthia/M +Cyprian/M +Cypriot/MS +Cyprus/M +Cyrano/M +Cyril/M +Cyrillic/M +Cyrus/M +Czech/M +Czechia/M +Czechoslovak +Czechoslovakia/M +Czechoslovakian/SM +Czechs +Czerny/M +D/M +DA/M +DAR +DAT/M +DBMS/M +DC/M +DD/M +DDS/M +DDT/S +DE +DEA +DEC/SD +DH +DHS +DI +DJ +DMCA +DMD/M +DMZ +DNA/M +DOA +DOB +DOD +DOE +DOS/M +DOT +DP/SM +DPT +DST +DTP +DUI +DVD +DVR/SM +DWI +Dachau/M +Dacron/SM +Dada/M +Dadaism/M +Daedalus/M +Daguerre/M +Dagwood/M +Dahomey/M +Daimler/M +Daisy/M +Dakar/M +Dakota/SM +Dakotan/M +Dalai +Dale/M +Daley/M +Dali/M +Dalian/M +Dallas/M +Dalmatia/M +Dalmatian/SM +Dalton/M +Damascus/M +Dame/MN +Damian/M +Damien/M +Damion/M +Damocles/M +Damon/M +Dan/M +Dana/M +Danae/M +Dane/SM +Danelaw/M +Dangerfield/M +Danial/M +Daniel/SM +Danielle/M +Daniels/M +Danish/M +Dannie/M +Danny/M +Danone/M +Dante/M +Danton/M +Danube/M +Danubian/M +Daphne/M +Darby/M +Darcy/M +Dardanelles/M +Dare/M +Daren/M +Darfur/M +Darin/M +Dario/M +Darius/M +Darjeeling/M +Darla/M +Darlene/M +Darling/M +Darnell/M +Darrel/M +Darrell/M +Darren/M +Darrin/M +Darrow/M +Darryl/M +Darth/M +Dartmoor/M +Dartmouth/M +Darvon/M +Darwin/M +Darwinian/M +Darwinism/SM +Darwinist +Daryl/M +Datamation +Daugherty/M +Daumier/M +Davao/M +Dave/M +Davenport/M +David/MS +Davidson/M +Davies/M +Davis/M +Davy/SM +Dawes/M +Dawkins +Dawn/M +Dawson/M +Day/M +Dayan +Dayton/M +DeGeneres/M +Deadhead/M +Dean/M +Deana/M +Deandre/M +Deann/M +Deanna/M +Deanne/M +Death/M +Debbie/M +Debby/M +Debian/M +Debora/M +Deborah/M +Debouillet/M +Debra/M +Debs/M +Debussy/M +Dec/M +Decalogue/M +Decatur/M +Decca/M +Deccan/M +December/SM +Decker/M +Dedekind/M +Dee/M +Deena/M +Deere/M +Defoe/M +Degas/M +Deidre/M +Deimos/M +Deirdre/M +Deity +Dejesus/M +Del/M +Delacroix/M +Delacruz/M +Delaney/M +Delano/M +Delaware/MS +Delawarean/SM +Delbert/M +Deleon/M +Delgado/M +Delhi/M +Delia/M +Delibes/M +Delicious/M +Delilah/M +Delilahs +Delius/M +Dell/M +Della/M +Delmar/M +Delmarva/M +Delmer/M +Delmonico/M +Delores/M +Deloris/M +Delphi/M +Delphic/M +Delphinus/M +Delta/M +Dem/G +Demavend/M +Demerol/M +Demeter/M +Demetrius/M +Deming/M +Democrat/SM +Democratic +Democritus/M +Demosthenes/M +Dempsey/M +Dena/M +Denali +Deneb/M +Denebola/M +Deng/M +Denis/M +Denise/M +Denmark/M +Dennis/M +Denny/M +Denver/M +Deon/M +Depp/M +Derby/M +Derek/M +Derick/M +Dermot/M +Derrick/M +Derrida/M +Descartes/M +Desdemona/M +Desiree/M +Desmond/M +Detroit/M +Deuteronomy/M +Devanagari/M +Devi/M +Devin/M +Devon/M +Devonian/M +Dewar/M +Dewayne/M +Dewey/M +Dewitt/M +Dexedrine/M +Dexter/M +Dhaka/M +Dhaulagiri/M +Di/SM +DiCaprio/M +DiMaggio/M +Diaghilev/M +Dial/M +Diana/M +Diane/M +Diann/M +Dianna/M +Dianne/M +Dias +Diaspora/MS +Dick/XM +Dickens/M +Dickensian +Dickerson/M +Dickinson/M +Dickson/M +Dictaphone/SM +Diderot/M +Dido/M +Didrikson/M +Diefenbaker/M +Diego/M +Diem/M +Dietrich/M +Dijkstra/M +Dijon/M +Dilbert/MS +Dillard/M +Dillinger/M +Dillon/M +Dina/M +Dinah/M +Dino/M +Diocletian/M +Diogenes/M +Dion/M +Dionne/M +Dionysian/M +Dionysus/M +Diophantine/M +Dior/M +Dipper/M +Dir +Dirac/M +Dirichlet/M +Dirk/M +Dis/M +Disney/M +Disneyland/M +Disraeli/M +Divine/M +Diwali/M +Dix/M +Dixie/M +Dixiecrat/M +Dixieland/SM +Dixon/M +Djibouti/M +Dmitri/M +Dnepropetrovsk/M +Dniester/M +Dobbin/M +Doberman/M +Dobro/M +Doctor +Doctorow/M +Dodge/M +Dodgson/M +Dodoma/M +Dodson/M +Doe/M +Doha/M +Dolby/M +Dole/M +Dollie/M +Dolly/M +Dolores/M +Domesday/M +Domingo/M +Dominguez/M +Dominic/M +Dominica/M +Dominican/MS +Dominick/M +Dominion +Dominique/M +Domitian/M +Don/SM +Dona/M +Donahue/M +Donald/M +Donaldson/M +Donatello/M +Donetsk/M +Donizetti/M +Donn/MR +Donna/M +Donne/M +Donnell/M +Donner/M +Donnie/M +Donny/M +Donovan/M +Dooley/M +Doolittle/M +Doonesbury/M +Doppler/M +Dora/M +Dorcas/M +Doreen/M +Dorian/M +Doric/M +Doris/M +Doritos/M +Dorothea/M +Dorothy/M +Dorset/M +Dorsey/M +Dorthy/M +Dortmund/M +Dostoevsky/M +Dot/M +Dotson/M +Douala/M +Douay/M +Doubleday/M +Doug/M +Douglas/M +Douglass/M +Douro/M +Dover/M +Dow/M +Downs/M +Downy/M +Doyle/M +Dr +Draco/M +Draconian/M +Dracula/M +Drake/M +Dramamine/SM +Drambuie/M +Drano/M +Dravidian/M +Dreiser/M +Dresden/M +Drew/M +Dreyfus/M +Dristan/M +Dropbox/M +Drudge/M +Dryden/M +Dschubba/M +Du +DuPont/M +Duane/M +Dubai/M +Dubcek/M +Dubhe/M +Dublin/M +Dubrovnik/M +Duchamp/M +Dudley/M +Duffy/M +Duisburg/M +Duke/M +Dulles/M +Duluth/M +Dumas/M +Dumbledore/M +Dumbo/M +Dumpster/M +Dunant/M +Dunbar/M +Duncan/M +Dundee +Dunedin/M +Dunkirk/M +Dunlap/M +Dunn/M +Dunne/M +Duracell/M +Duran/M +Durant/M +Durante/M +Durban/M +Durer/M +Durex/M +Durham/MS +Durkheim/M +Duroc/M +Durocher/M +Duse/M +Dushanbe/M +Dusseldorf/M +Dustbuster/M +Dustin/M +Dusty/M +Dutch/M +Dutchman/M +Dutchmen/M +Dutchwoman +Duvalier/M +Dvina/M +Dvorak/M +Dwayne/M +Dwight/M +Dy/M +Dyer/M +Dylan/M +Dyson/M +Dzerzhinsky/M +Dzungaria/M +E/SM +EC +ECG/M +ECMAScript/M +EDP/M +EDT +EEC/M +EEG/M +EEO +EEOC +EFL +EFT +EKG/M +ELF/M +EM +EMT +ENE/M +EOE +EPA/M +ER +ERA +ESE/M +ESL +ESP/M +ESPN/M +ESR +EST/M +ET +ETA +ETD +EU +EULA/S +Eakins/M +Earhart/M +Earl/M +Earle/M +Earlene/M +Earline/M +Earnest/M +Earnestine/M +Earnhardt/M +Earp/M +East/SZMR +Easter/M +Eastern/R +Eastman/M +Eastwood/M +Eaton/M +Eben/M +Ebeneezer/M +Ebert/M +Ebola/M +Ebonics/M +Ebony/M +Ebro/M +Ecclesiastes/M +Eco/M +Ecstasy +Ecuador/M +Ecuadoran/SM +Ecuadorean +Ecuadorian/SM +Ed/MNX +Edam/SM +Edda/M +Eddie/M +Eddington/M +Eddy/M +Eden/M +Edgar/M +Edgardo/M +Edinburgh/M +Edison/M +Edith/M +Edmond/M +Edmonton/M +Edmund/M +Edna/M +Edsel/M +Eduardo/M +Edward/SM +Edwardian/M +Edwardo/M +Edwards/M +Edwin/M +Edwina/M +Eeyore/M +Effie/M +Efrain/M +Efren/M +Eggo/M +Egypt/M +Egyptian/MS +Egyptology/M +Ehrenberg/M +Ehrlich/M +Eichmann/M +Eiffel/M +Eileen/M +Einstein/MS +Eire/M +Eisenhower/M +Eisenstein/M +Eisner/M +Elaine/M +Elam/M +Elanor/M +Elastoplast/M +Elba/M +Elbe/M +Elbert/M +Elbrus/M +Eldon/M +Eleanor/M +Eleazar/M +Electra/M +Elena/M +Elgar/M +Eli/M +Elias/M +Elijah/M +Elinor/M +Eliot/M +Elisa/M +Elisabeth/M +Elise/M +Eliseo/M +Elisha/M +Eliza/M +Elizabeth/M +Elizabethan/SM +Ella/M +Ellen/M +Ellesmere/M +Ellie/M +Ellington/M +Elliot/M +Elliott/M +Ellis/M +Ellison/M +Elma/M +Elmer/M +Elmo/M +Elnath/M +Elnora/M +Elohim/M +Eloise/M +Eloy/M +Elroy/M +Elsa/M +Elsie/M +Elsinore/M +Eltanin/M +Elton/M +Elul/M +Elva/M +Elvia/M +Elvin/M +Elvira/M +Elvis/M +Elway/M +Elwood/M +Elysee/M +Elysian/M +Elysium/SM +Emacs/M +Emanuel/M +Emerson/M +Emery/M +Emil/M +Emile/M +Emilia/M +Emilio/M +Emily/M +Eminem/M +Eminence +Emma/M +Emmanuel/M +Emmett/M +Emmy/M +Emory/M +Encarta/M +Endymion/M +Eng/M +Engels/M +England/M +English/MRS +Englishman/M +Englishmen/M +Englishwoman/M +Englishwomen/M +Enid/M +Enif/M +Eniwetok/M +Enkidu/M +Enoch/M +Enos/M +Enrico/M +Enrique/M +Enron/M +Enterprise/M +Eocene/M +Epcot/M +Ephesian/MS +Ephesus/M +Ephraim/M +Epictetus/M +Epicurean/M +Epicurus/M +Epimethius/M +Epiphany/SM +Episcopal +Episcopalian/MS +Epistle +Epsom/M +Epson/M +Epstein/M +Equuleus/M +Er/M +Erasmus/M +Erato/M +Eratosthenes/M +Erebus/M +Erector/M +Erewhon/M +Erhard/M +Eric/M +Erica/M +Erich/M +Erick/M +Ericka/M +Erickson/M +Eridanus/M +Erie/M +Erik/M +Erika/M +Erin/M +Eris/MS +Eritrea/M +Eritrean/SM +Erlenmeyer/M +Erma/M +Erna/M +Ernest/M +Ernestine/M +Ernesto/M +Ernie/M +Ernst/M +Eros/MS +Errol/M +Erse/M +ErvIn/M +Erwin/M +Esau/M +Escher/M +Escherichia/M +Escondido +Eskimo/MS +Esmeralda/M +Esperanto/M +Esperanza/M +Espinoza/M +Esq/M +Esquire/MS +Essen/M +Essene/M +Essequibo/M +Essex/M +Essie/M +Establishment +Esteban/M +Estela/M +Estella/M +Estelle/M +Ester/M +Esterhazy/M +Estes/M +Esther/M +Estonia/M +Estonian/SM +Estrada/M +Ethan/M +Ethel/M +Ethelred/M +Ethernet/M +Ethiopia/M +Ethiopian/SM +Etna/M +Eton/M +Etruria/M +Etruscan/M +Etta/M +Eu/M +Eucharist/MS +Eucharistic +Euclid/M +Eugene/M +Eugenia/M +Eugenie/M +Eugenio/M +Eula/M +Euler/M +Eumenides/M +Eunice/M +Euphrates/M +Eur +Eurasia/M +Eurasian/MS +Euripides/M +Eurodollar/SM +Europa/M +Europe/M +European/MS +Eurydice/M +Eustachian/M +Euterpe/M +Eva/M +Evan/SM +Evangelical +Evangelina/M +Evangeline/M +Evangelist/M +Evans/M +Evansville/M +Eve/M +Evelyn/M +Evenki/M +EverReady/M +Everest/M +Everett/M +Everette/M +Everglades/M +Evert/M +Evian/M +Evita/M +Ewing/M +Excalibur/M +Excedrin/M +Excellency/SM +Exchequer +Exercycle/M +Exocet/M +Exodus/M +Exxon/M +Eyck/M +Eyre/M +Eysenck/M +Ezekiel/M +Ezra/M +F/MD +FAA +FAQ/SM +FBI/M +FCC +FD +FDA +FDIC/M +FDR/M +FHA/M +FICA/M +FIFO +FL +FM/SM +FNMA/M +FOFL +FORTRAN/M +FPO +FSF/M +FSLIC +FTC +FUD/S +FWD +FWIW +FY +FYI +Faberge/M +Fabian/MS +Facebook/M +Faeroe/M +Fafnir/M +Fagin/M +Fahd/M +Fahrenheit/M +Fairbanks/M +Faisal/M +Faisalabad/M +Faith/M +Falasha/M +Falkland/SM +Falklands/M +Fallopian/M +Falstaff/M +Falwell/M +Fannie/M +Fanny/M +Faraday/M +Fargo/M +Farley/M +Farmer/M +Farragut/M +Farrakhan/M +Farrell/M +Farrow/M +Farsi/M +Fassbinder/M +Fatah/M +Fates/M +Father/SM +Fatima/M +Fatimid/M +Faulkner/M +Faulknerian/M +Fauntleroy/M +Faust/M +Faustian/M +Faustino/M +Faustus/M +Fawkes/M +Fay/M +Faye/M +Fe/M +Feb/M +February/SM +Fed/SM +FedEx/M +Federal/MS +Federalist/M +Federico/M +Feds/M +Felecia/M +Felice/M +Felicia/M +Felicity/M +Felipe/M +Felix/M +Fellini/M +Fenian/M +Ferber/M +Ferdinand/M +Fergus/M +Ferguson/M +Ferlinghetti/M +Fermat/M +Fermi/M +Fern/M +Fernandez/M +Fernando/M +Ferrari/M +Ferraro/M +Ferrell/M +Ferris/M +Feynman/M +Fez/M +Fiat/M +Fiberglas/M +Fibonacci/M +Fichte/M +Fidel/M +Fido/M +Fielding/M +Fields/M +Figaro/M +Figueroa/M +Fiji/M +Fijian/MS +Filipino/MS +Fillmore/M +Filofax/M +Finch/M +Finland/M +Finley/M +Finn/SM +Finnbogadottir/M +Finnegan/M +Finnish/M +Fiona/M +Firefox/M +Firestone/M +Fischer/M +Fisher/M +Fisk/M +Fitch/M +Fitzgerald/M +Fitzpatrick/M +Fitzroy/M +Fizeau/M +Fla +Flanagan/M +Flanders/M +Flathead +Flatt/M +Flaubert/M +Fleischer/M +Fleming/M +Flemish/M +Fletcher/M +Flint/M +Flintstones/M +Flo/M +Flora/M +Florence/M +Florentine/M +Flores/M +Florida/M +Floridan/M +Floridian/SM +Florine/M +Florsheim/M +Flory/M +Flossie/M +Flowers/M +Floyd/M +Flynn/M +Fm/M +Foch/M +Fokker/M +Foley/M +Folgers/M +Folsom/M +Fomalhaut/M +Fonda/M +Foosball/M +Forbes/M +Ford/M +Foreman/M +Forest/MR +Forester/M +Formica/MS +Formosa/M +Formosan/M +Forrest/M +Forster/M +Fortaleza/M +Fosse/M +Foster/M +Fotomat/M +Foucault/M +Fourier/M +Fourneyron/M +Fourth +Fowler/M +Fox/MS +Fr/MD +Fragonard/M +Fran/M +France/SM +Frances/M +Francesca/M +Francine/M +Francis/M +Francisca/M +Franciscan/MS +Francisco/M +Franck/M +Franco/M +Francois/M +Francoise/M +Francophile +Franglais/M +Frank/SM +Frankel/M +Frankenstein/M +Frankfort/M +Frankfurt/MR +Frankfurter/M +Frankie/M +Frankish +Franklin/M +Franks/M +Franny/M +Franz/M +Fraser/M +Frau/MN +Fraulein +Frazier/M +Fred/M +Freda/M +Freddie/M +Freddy/M +Frederic/M +Frederick/M +Fredericton/M +Fredric/M +Fredrick/M +Freeman/M +Freemason/SM +Freemasonry/SM +Freetown/M +Freida/M +Fremont/M +French/MS +Frenchman/M +Frenchmen/M +Frenchwoman/M +Frenchwomen/M +Freon/M +Fresnel/M +Fresno/M +Freud/M +Freudian/M +Frey/M +Freya/M +Fri/M +Friday/SM +Frieda/M +Friedan/M +Friedman/M +Friend/SM +Frigga/M +Frigidaire/M +Frisbee/M +Frisco/M +Frisian/MS +Frito/M +Fritz/M +Frobisher/M +Frodo/M +Froissart/M +Fromm/M +Fronde/M +Frontenac/M +Frost/M +Frostbelt/M +Frunze/M +Fry/M +Frye/M +Fuchs/M +Fuentes/M +Fugger/M +Fuji/M +Fujitsu/M +Fujiwara/M +Fujiyama/M +Fukuoka/M +Fukuyama/M +Fulani/M +Fulbright/M +Fuller/M +Fullerton/M +Fulton/M +Funafuti/M +Fundy/M +Furies/M +Furtwangler/M +Fushun/M +Fuzhou/M +Fuzzbuster/M +G/MNRB +GA +GAO +GATT/M +GB/M +GCC/M +GDP/M +GE/M +GED +GHQ/M +GHz +GI +GIF +GIGO +GM/M +GMAT +GMO +GMT/M +GNP/M +GNU/M +GOP/M +GP/M +GPA +GPO +GPS +GPU +GSA +GTE/M +GU +GUI/M +Ga/M +Gable/M +Gabon/M +Gabonese/M +Gaborone/M +Gabriel/M +Gabriela/M +Gabrielle/M +Gacrux/M +Gadsden/M +Gaea/M +Gael/SM +Gaelic/M +Gagarin/M +Gage/M +Gaia/M +Gail/M +Gaiman/M +Gaines/M +Gainsborough/M +Galahad/SM +Galapagos/M +Galatea/M +Galatia/M +Galatians/M +Galaxy +Galbraith/M +Gale/M +Galen/M +Galibi/M +Galilean/SM +Galilee/M +Galileo/M +Gall/M +Gallagher/M +Gallegos/M +Gallic/M +Gallicism/SM +Gallo/M +Galloway/M +Gallup/M +Galois/M +Galsworthy/M +Galvani/M +Galveston/M +Gama +Gamay/M +Gambia/M +Gambian/SM +Gamble/M +Gamow/M +Gandalf/M +Gandhi/M +Gandhian/M +Ganesha/M +Ganges/M +Gangtok/M +Gantry/M +Ganymede/M +Gap/M +Garbo/M +Garcia/M +Gardner/M +Gareth/M +Garfield/M +Garfunkel/M +Gargantua/M +Garibaldi/M +Garland/M +Garner/M +Garrett/M +Garrick/M +Garrison/M +Garry/M +Garth/M +Garvey/M +Gary/M +Garza/M +Gascony/M +Gasser/M +Gastroenterology +Gates/M +Gatling/M +Gatorade/M +Gatsby/M +Gatun/M +Gauguin/M +Gaul/SM +Gaulish +Gauss/M +Gaussian/M +Gautama/M +Gautier/M +Gavin/M +Gawain/M +Gay/M +Gayle/M +Gaza/M +Gaziantep/M +Gd/M +Gdansk/M +Ge/M +Geffen/M +Gehenna/M +Gehrig/M +Geiger/M +Gelbvieh/M +Geller/M +Gemini/MS +Gen/M +Gena/M +Genaro/M +Gene/M +Genesis/M +Genet/M +Geneva/M +Genevieve/M +Genghis/M +Genoa/SM +Gentoo/M +Gentry/M +Geo/M +Geoffrey/M +George/MS +Georgetown/M +Georgette/M +Georgia/M +Georgian/MS +Georgina/M +Ger/M +Gerald/M +Geraldine/M +Gerard/M +Gerardo/M +Gerber/M +Gere/M +Geritol/M +German/MS +Germanic/M +Germany/M +Geronimo/M +Gerry/M +Gershwin/M +Gertrude/M +Gestapo/SM +Gethsemane/M +Getty/M +Gettysburg/M +Gewurztraminer/M +Ghana/M +Ghanaian +Ghats/M +Ghazvanid/M +Ghent/M +Ghibelline/M +Giacometti/M +Giannini/M +Giauque/M +Gibbon/M +Gibbs/M +Gibraltar/MS +Gibson/M +Gide/M +Gideon/M +Gielgud/M +Gienah/M +Gil/M +Gila/M +Gilbert/M +Gilberto/M +Gilchrist/M +Gilda/M +Gilead/M +Giles/M +Gilgamesh/M +Gill/M +Gillespie/M +Gillette/M +Gilliam/M +Gillian/M +Gilligan/M +Gilman +Gilmore/M +Gina/M +Ginger/M +Gingrich/M +Ginny/M +Gino/M +Ginsberg/M +Ginsburg/M +Ginsu/M +Giorgione/M +Giotto/M +Giovanni/M +Giraudoux/M +Giselle/M +Gish/M +GitHub/M +Giuliani/M +Giuseppe/M +Giza/M +Gk +Gladstone/MS +Gladys/M +Glaser/M +Glasgow/M +Glass/M +Glastonbury/M +Glaswegian/SM +Glaxo/M +Gleason/M +Glen/M +Glenda/M +Glendale +Glenlivet/M +Glenn/M +Glenna/M +Gloria/M +Gloucester/M +Glover/M +Gnostic/M +Gnosticism/M +GnuPG +Goa/M +Gobi/M +God/M +Godard/M +Goddard/M +Godel/M +Godhead/M +Godiva/M +Godot/M +Godspeed/SM +Godthaab/M +Godunov/M +Godzilla/M +Goebbels/M +Goering/M +Goethals/M +Goethe/M +Goff/M +Gog/M +Gogol/M +Goiania/M +Golan/M +Golconda/M +Golda/M +Goldberg/M +Golden/M +Goldie/M +Goldilocks/M +Golding/M +Goldman/M +Goldsmith/M +Goldwater/M +Goldwyn/M +Golgi/M +Golgotha/M +Goliath/M +Gomez/M +Gomorrah/M +Gompers/M +Gomulka/M +Gondwanaland/M +Gonzales/M +Gonzalez/M +Gonzalo/M +Good/M +Goodall/M +Goodman/M +Goodrich/M +Goodwill/M +Goodwin/M +Goodyear/M +Google/M +Goolagong/M +Gopher +Gorbachev/M +Gordian/M +Gordimer/M +Gordon/M +Gore/M +Goren/M +Gorey/M +Gorgas/M +Gorgon/M +Gorgonzola/M +Gorky/M +Gospel/MS +Goteborg/M +Goth/M +Gotham/M +Gothic/MS +Goths +Gouda/SM +Gould/M +Gounod/M +Governor +Goya/M +Gr/B +Grable/M +Gracchus/M +Grace/M +Graceland/M +Gracie/M +Graciela/M +Grady/M +Graffias/M +Grafton/M +Graham/M +Grahame/M +Grail/M +Grammy/M +Grampians/M +Granada/M +Grant/M +Grass/M +Graves/M +Gray/M +Grecian/M +Greece/M +Greek/SM +Greeley/M +Green/SM +Greene/M +Greenland/M +Greenlandic +Greenpeace/M +Greensboro/M +Greensleeves/M +Greenspan/M +Greenwich/M +Greer/M +Greg/M +Gregg/M +Gregorian/M +Gregorio/M +Gregory/M +Grenada/M +Grenadian/MS +Grenadines/M +Grendel/M +Grenoble/M +Gresham/M +Greta/M +Gretchen/M +Gretel/M +Gretzky/M +Grey/M +Grieg/M +Griffin/M +Griffith/M +Grimes/M +Grimm/M +Grinch/M +Gris/M +Gromyko/M +Gropius/M +Gross/M +Grosz/M +Grotius/M +Grover/M +Grozny +Grumman/M +Grundy/M +Grunewald/M +Grus/M +Gruyere/SM +Guadalajara/M +Guadalcanal/M +Guadalquivir/M +Guadalupe/M +Guadeloupe/M +Guallatiri/M +Guam/M +Guamanian +Guangzhou/M +Guantanamo/M +Guarani/M +Guarnieri/M +Guatemala/M +Guatemalan/MS +Guayaquil/M +Gucci/M +Guelph/M +Guernsey/MS +Guerra/M +Guerrero/M +Guevara/M +Guggenheim/M +Guiana/M +Guido +Guillermo/M +Guinea/M +Guinean/MS +Guinevere/M +Guinness/M +Guiyang/M +Guizot/M +Gujarat/M +Gujarati/M +Gujranwala/M +Gullah/M +Gulliver/M +Gumbel/M +Gunther/M +Guofeng/M +Gupta/M +Gurkha/M +Gus/M +Gustav/M +Gustavo/M +Gustavus/M +Gutenberg/M +Guthrie/M +Gutierrez/M +Guy/M +Guyana/M +Guyanese/M +Guzman/M +Gwalior/M +Gwen/M +Gwendoline/M +Gwendolyn/M +Gwyn/M +Gypsy/SM +H/M +HBO/M +HDD +HDMI +HDTV +HF/M +HHS +HI +HIV/M +HM +HMO/M +HMS +HOV +HP/M +HPV +HQ/M +HR +HRH +HS +HSBC/M +HST +HT +HTML/M +HTTP +HUD/M +Ha/M +Haas/M +Habakkuk/M +Haber/M +Hadar/M +Hades/M +Hadrian/M +Hafiz/M +Hagar/M +Haggai/M +Hagiographa/M +Hague/M +Hahn/M +Haida/SM +Haifa/M +Haiphong/M +Haiti/M +Haitian/MS +Hakka/M +Hakluyt/M +Hal/SM +Haldane/M +Hale/M +Haleakala/M +Haley/M +Halifax/M +Hall/M +Halley/M +Halliburton/M +Hallie/M +Hallmark/M +Halloween/MS +Hallstatt/M +Halon/M +Hals/M +Halsey/M +Ham/M +Haman/M +Hamburg/MS +Hamhung/M +Hamilcar/M +Hamill/M +Hamilton/M +Hamiltonian/M +Hamitic/M +Hamlet/M +Hamlin/M +Hammarskjold/M +Hammerstein/M +Hammett/M +Hammond/M +Hammurabi/M +Hampshire/M +Hampton/M +Hamsun/M +Han/SM +Hancock/M +Handel/M +Handy/M +Haney/M +Hangul/M +Hangzhou/M +Hank/M +Hanna/M +Hannah/M +Hannibal/M +Hanoi/M +Hanover/M +Hanoverian/M +Hans/MN +Hansel/M +Hansen/M +Hanson/M +Hanuka +Hanukkah/M +Hanukkahs +Hapsburg/M +Harare/M +Harbin/M +Hardin/M +Harding/M +Hardy/M +Hargreaves/M +Harlan/M +Harlem/M +Harlequin/M +Harley/M +Harlow/M +Harmon/M +Harold/M +Harper/M +Harpy/SM +Harrell/M +Harriet/M +Harriett/M +Harrington/M +Harris/M +Harrisburg/M +Harrison/M +Harrods/M +Harry/M +Hart/M +Harte/M +Hartford/M +Hartline/M +Hartman/M +Harvard/M +Harvey/M +Hasbro/M +Hasidim/M +Haskell/M +Hastings/M +Hatfield/M +Hathaway/M +Hatsheput/M +Hatteras/M +Hattie/M +Hauptmann/M +Hausa/M +Hausdorff/M +Havana/MS +Havarti/M +Havel/M +Havoline/M +Haw +Hawaii/M +Hawaiian/SM +Hawking/M +Hawkins/M +Hawks +Hawthorne/M +Hay/SM +Hayden/M +Haydn/M +Hayek/M +Hayes/M +Haynes/M +Hays/M +Hayward/M +Haywood/M +Hayworth/M +Hazel/M +Hazlitt/M +He/M +Head/M +Hearst/M +Heath/MR +Heather/M +Heaviside/M +Heb +Hebe/M +Hebert/M +Hebraic/M +Hebraism/SM +Hebrew/MS +Hebrews/M +Hebrides/M +Hecate/M +Hector/M +Hecuba/M +Heep/M +Hefner/M +Hegel/M +Hegelian/M +Hegira/M +Heidegger/M +Heidelberg/M +Heidi/M +Heifetz/M +Heimlich/M +Heine/M +Heineken/M +Heinlein/M +Heinrich/M +Heinz/M +Heisenberg/M +Heisman/M +Helen/M +Helena/M +Helene/M +Helga/M +Helicon/M +Heliopolis/M +Helios/M +Hellene/SM +Hellenic/M +Hellenisation/M +Hellenise +Hellenism/MS +Hellenist +Hellenistic/M +Hellenize's +Heller/M +Hellespont/M +Hellman/M +Helmholtz/M +Heloise/M +Helsinki/M +Helvetian +Helvetius/M +Hemingway/M +Hench/M +Henderson/M +Hendrick/MS +Hendricks/M +Hendrix/M +Henley/M +Hennessy/M +Henri/M +Henrietta/M +Henrik/M +Henry/M +Hensley/M +Henson/M +Hepburn/M +Hephaestus/M +Hepplewhite/M +Hera/M +Heracles/M +Heraclitus/M +Herakles/M +Herbart/M +Herbert/M +Herculaneum/M +Herculean +Hercules/M +Herder/M +Hereford/SM +Herero/M +Heriberto/M +Herman/M +Hermaphroditus/M +Hermes/M +Herminia/M +Hermitage/M +Hermite/M +Hermosillo/M +Hernandez/M +Herod/M +Herodotus/M +Herr/MG +Herrera/M +Herrick/M +Herring/M +Herschel/M +Hersey/M +Hershel/M +Hershey/M +Hertz/M +Hertzsprung/M +Herzegovina/M +Herzl/M +Heshvan/M +Hesiod/M +Hesperus/M +Hess/M +Hesse/M +Hessian/M +Hester/M +Heston/M +Hettie/M +Hewitt/M +Hewlett/M +Heyerdahl/M +Heywood/M +Hezbollah/M +Hezekiah/M +Hf/M +Hg/M +Hialeah/M +Hiawatha/M +Hibernia/M +Hibernian +Hickman/M +Hickok/M +Hicks/M +Hieronymus/M +Higashiosaka +Higgins/M +Highlander/SM +Highlands +Highness/M +Hilario/M +Hilary/M +Hilbert/M +Hilda/M +Hildebrand/M +Hilfiger/M +Hill/M +Hillary/M +Hillel/M +Hilton/M +Himalaya/SM +Himalayan +Himalayas/M +Himmler/M +Hinayana/M +Hindemith/M +Hindenburg/M +Hindi/M +Hindu/SM +Hinduism/SM +Hindustan/M +Hindustani/SM +Hines/M +Hinton/M +Hipparchus/M +Hippocrates/M +Hippocratic/M +Hiram/M +Hirobumi/M +Hirohito/M +Hiroshima/M +Hispanic/SM +Hispaniola/M +Hiss/M +Hitachi/M +Hitchcock/M +Hitler/MS +Hittite/SM +Hmong/M +Ho/M +Hobart/M +Hobbes/M +Hobbs/M +Hockney/M +Hodge/SM +Hodges/M +Hodgkin/M +Hoff/M +Hoffa/M +Hoffman/M +Hofstadter/M +Hogan/M +Hogarth/M +Hogwarts/M +Hohenlohe/M +Hohenstaufen/M +Hohenzollern/M +Hohhot/M +Hohokam/M +Hokkaido/M +Hokusai/M +Holbein/M +Holcomb/M +Holden/M +Holder/M +Holiday/M +Holiness +Holland/ZSMR +Hollander/M +Hollerith/M +Holley/M +Hollie/M +Hollis/M +Holloway/M +Holly/M +Hollywood/M +Holman/M +Holmes/M +Holocaust/M +Holocene/M +Holst/M +Holstein/SM +Holt/M +Homer/M +Homeric/M +Hon +Honda/M +Honduran/MS +Honduras/M +Honecker/M +Honeywell/M +Hong +Honiara/M +Honolulu/M +Honorable +Honshu/M +Hood/M +Hooke/RM +Hooker/M +Hooper/M +Hoosier/MS +Hooters/M +Hoover/MS +Hope/M +Hopewell/M +Hopi/SM +Hopkins/M +Hopper/M +Horace/M +Horacio/M +Horatio/M +Hormel/M +Hormuz/M +Horn/M +Hornblower/M +Horne/M +Horowitz/M +Horthy/M +Horton/M +Horus/M +Hosea/M +Host/SM +Hotpoint/M +Hottentot/SM +Houdini/M +House/M +Housman/M +Houston/M +Houyhnhnm/M +Hovhaness/M +Howard/M +Howe/M +Howell/MS +Howells/M +Howrah +Hoyle/M +Hrothgar/M +Hts +Huang/M +Hubbard/M +Hubble/M +Huber/M +Hubert/M +Huck/M +Huddersfield +Hudson/M +Huerta/M +Huey/M +Huff/M +Huffman/M +Huggins/M +Hugh/MS +Hughes/M +Hugo/M +Huguenot/MS +Hui/M +Huitzilopotchli/M +Hull/M +Humberto/M +Humboldt/M +Hume/M +Hummer/M +Humphrey/SM +Humvee/M +Hun/SM +Hung/M +Hungarian/SM +Hungary/M +Hunspell/M +Hunt/MR +Hunter/M +Huntington/M +Huntley/M +Huntsville/M +Hurley/M +Huron/M +Hurst/M +Hus/M +Hussein/M +Husserl/M +Hussite/M +Huston/M +Hutchinson/M +Hutton/M +Hutu/M +Huxley/M +Huygens/M +Hyades/M +Hyde/M +Hyderabad/M +Hydra/M +Hymen/M +Hyperion/M +Hyundai/M +Hz/M +I'd +I'll +I'm +I've +I/M +IA +IBM/M +ICBM/SM +ICC +ICU +ID/SM +IDE +IE +IED +IEEE +IKEA/M +IL +IMF/M +IMHO +IMNSHO +IMO +IN +ING/M +INRI +INS +IOU/M +IP +IPA +IPO +IQ/M +IRA/SM +IRC +IRS/M +ISBN +ISIS +ISO/M +ISP +ISS +IT +IUD +IV/SM +IVF +Ia +Iaccoca/M +Iago/M +Ian/M +Iapetus/M +Ibadan/M +Iberia/M +Iberian/M +Ibiza/M +Iblis/M +Ibo/M +Ibsen/M +Icahn/M +Icarus/M +Ice +Iceland/MRZ +Icelander/M +Icelandic/M +Ida/M +Idaho/SM +Idahoan/MS +Idahoes +Ieyasu/M +Ignacio/M +Ignatius/M +Igor/M +Iguassu/M +Ijsselmeer/M +Ike/M +Ikhnaton/M +Ila/M +Ilene/M +Iliad/SM +Ill +Illinois/M +Illinoisan/MS +Illuminati/M +Ilyushin/M +Imelda/M +Imhotep/M +Imodium/M +Imogene/M +Imus/M +In/M +Ina/M +Inc +Inca/SM +Inchon/M +Incorporated +Ind +Independence/M +India/M +Indian/MS +Indiana/M +Indianan/SM +Indianapolis/M +Indianian +Indies/M +Indira/M +Indochina/M +Indochinese/M +Indonesia/M +Indonesian/SM +Indore/M +Indra/M +Indus/M +Indy/SM +Ines/M +Inez/M +Inge/M +Inglewood +Ingram/M +Ingres/M +Ingrid/M +Innocent/M +Innsbruck +Inonu/M +Inquisition/M +Inst +Instagram/M +Instamatic/M +Intel/M +Intelsat/M +Internationale/M +Internet/SM +Interpol/M +Inuit/MS +Inuktitut/M +Invar/M +Io/M +Ionesco/M +Ionian/MS +Ionic/SM +Iowa/SM +Iowan/MS +Iphigenia/M +Ipswich +Iqaluit/M +Iqbal/M +Iquitos/M +Ir/M +Ira/M +Iran/M +Iranian/SM +Iraq/M +Iraqi/MS +Ireland/M +Irene/M +Iris/M +Irish/MR +Irishman/M +Irishmen/M +Irishwoman/M +Irishwomen/M +Irkutsk/M +Irma/M +Iroquoian/SM +Iroquois/M +Irrawaddy/M +Irtish/M +Irvin/M +Irvine/M +Irving/M +Irwin/M +Isaac/M +Isabel/M +Isabella/M +Isabelle/M +Isaiah/M +Iscariot/M +Isfahan/M +Isherwood/M +Ishim/M +Ishmael/M +Ishtar/M +Isiah/M +Isidro/M +Isis/M +Islam/MS +Islamabad/M +Islamic/M +Islamism/M +Islamist/M +Islamophobia +Islamophobic +Ismael/M +Ismail/M +Isolde/M +Ispell/M +Israel/SM +Israeli/SM +Israelite/M +Issac/M +Issachar/M +Istanbul/M +Isuzu/M +It +Itaipu/M +Ital +Italian/SM +Italianate +Italy/M +Itasca/M +Ithaca/M +Ithacan/M +Ito/M +Iva/M +Ivan/M +Ivanhoe/M +Ives/M +Ivorian +Ivory/M +Ivy/M +Iyar/M +Izaak/M +Izanagi/M +Izanami/M +Izhevsk/M +Izmir/M +Izod/M +Izvestia/M +J/MD +JCS +JD +JFK/M +JP +JPEG +JV +Jack/M +Jackie/M +Jacklyn/M +Jackson/M +Jacksonian/M +Jacksonville/M +Jacky/M +Jaclyn/M +Jacob/SM +Jacobean/M +Jacobi/M +Jacobin/M +Jacobite/M +Jacobs/M +Jacobson/M +Jacquard/M +Jacqueline/M +Jacquelyn/M +Jacques/M +Jacuzzi/M +Jagger/M +Jagiellon/M +Jaguar/M +Jahangir/M +Jaime/M +Jain/M +Jainism/M +Jaipur/M +Jakarta/M +Jake/M +Jamaal/M +Jamaica/M +Jamaican/SM +Jamal/M +Jamar/M +Jame/SM +Jamel/M +James/M +Jamestown/M +Jami/M +Jamie/M +Jan/M +Jana/M +Janacek/M +Jane/M +Janell/M +Janelle/M +Janet/M +Janette/M +Janice/M +Janie/M +Janine/M +Janis/M +Janissary/M +Janjaweed/M +Janna/M +Jannie/M +Jansen/M +Jansenist/M +January/SM +Janus/M +Jap/SM +Japan/M +Japanese/MS +Japura/M +Jared/M +Jarlsberg/M +Jarred/M +Jarrett/M +Jarrod/M +Jarvis/M +Jasmine/M +Jason/M +Jasper/M +Jataka/M +Java/SM +JavaScript/M +Javanese/M +Javier/M +Jaxartes/M +Jay/M +Jayapura/M +Jayawardene/M +Jaycee/MS +Jaycees/M +Jayne/M +Jayson/M +Jean/M +Jeanette/M +Jeanie/M +Jeanine/M +Jeanne/M +Jeannette/M +Jeannie/M +Jeannine/M +Jed/M +Jedi/M +Jeep/M +Jeeves/M +Jeff/M +Jefferey/M +Jefferson/M +Jeffersonian/M +Jeffery/M +Jeffrey/M +Jeffry/M +Jehoshaphat/M +Jehovah/M +Jekyll/M +Jenifer/M +Jenkins/M +Jenna/M +Jenner/M +Jennie/M +Jennifer/M +Jennings/M +Jenny/M +Jensen/M +Jephthah/M +Jerald/M +Jeremiah/M +Jeremiahs +Jeremy/M +Jeri/M +Jericho/M +Jermaine/M +Jeroboam/M +Jerold/M +Jerome/M +Jerri/M +Jerrod/M +Jerrold/M +Jerry/M +Jersey/MS +Jerusalem/M +Jess/M +Jesse/M +Jessica/M +Jessie/M +Jesuit/MS +Jesus/M +Jetway/M +Jew/SM +Jewel/M +Jewell/M +Jewess/MS +Jewish/PM +Jewry/M +Jezebel/SM +Jidda/M +Jilin/M +Jill/M +Jillian/M +Jim/M +Jimenez/M +Jimmie/M +Jimmy/M +Jinan/M +Jinnah/M +Jinny/M +Jivaro/M +Jo/M +Joan/M +Joann/M +Joanna/M +Joanne/M +Joaquin/M +Job/SM +Jobs/M +Jocasta/M +Jocelyn/M +Jock/M +Jockey/M +Jodi/M +Jodie/M +Jody/M +Joe/M +Joel/M +Joey/M +Jogjakarta/M +Johann/M +Johanna/M +Johannes/M +Johannesburg/M +John/SM +Johnathan/M +Johnathon/M +Johnie/M +Johnnie/M +Johnny/M +Johns/M +Johnson/M +Johnston/M +Jolene/M +Jolson/M +Jon/M +Jonah/M +Jonahs +Jonas/M +Jonathan/M +Jonathon/M +Jones/M +Joni/M +Jonson/M +Joplin/M +Jordan/M +Jordanian/MS +Jorge/M +Jose/M +Josef/M +Josefa/M +Josefina/M +Joseph/M +Josephine/M +Josephs +Josephson/M +Josephus/M +Josh/M +Joshua/M +Josiah/M +Josie/M +Josue/M +Joule/M +Jove/M +Jovian/M +Joy/M +Joyce/M +Joycean/M +Joyner/M +Jpn +Jr/M +Juan/M +Juana/M +Juanita/M +Juarez/M +Jubal/M +Judaeo +Judah/M +Judaic +Judaical +Judaism/MS +Judas/MS +Judd/M +Jude/M +Judea/M +Judges +Judith/M +Judson/M +Judy/M +Juggernaut/M +Jul +Jules/M +Julia/M +Julian/M +Juliana/M +Julianne/M +Julie/M +Juliet/M +Juliette/M +Julio/M +Julius/M +Julliard/M +July/SM +Jun/M +June/SM +Juneau/M +Jung/M +Jungfrau/M +Jungian/M +Junior/SM +Junker/SM +Juno/M +Jupiter/M +Jurassic/M +Jurua/M +Justice/M +Justin/M +Justine/M +Justinian/M +Jutland/M +Juvenal/M +K/SMNGJ +KB/M +KC +KFC/M +KGB/M +KIA +KKK/M +KO/M +KP +KS +KY +Kaaba/M +Kabul/M +Kafka/M +Kafkaesque/M +Kagoshima/M +Kahlua/M +Kaifeng/M +Kaiser/MS +Kaitlin/M +Kalahari/M +Kalamazoo/M +Kalashnikov/M +Kalb/M +Kalevala/M +Kalgoorlie/M +Kali/M +Kalmyk/M +Kama/M +Kamchatka/M +Kamehameha/M +Kampala/M +Kampuchea/M +Kan/SM +Kanchenjunga/M +Kandahar/M +Kandinsky/M +Kane/M +Kannada/M +Kano/M +Kanpur/M +Kansan/MS +Kansas/M +Kant/M +Kantian/M +Kaohsiung/M +Kaposi/M +Kara/M +Karachi/M +Karaganda/M +Karakorum/M +Karamazov/M +Kareem/M +Karen/M +Karenina/M +Kari/M +Karin/M +Karina/M +Karl/M +Karla/M +Karloff/M +Karo/M +Karol/M +Karroo/M +Karyn/M +Kasai/M +Kasey/M +Kashmir/SM +Kasparov/M +Kate/M +Katelyn/M +Katharine/M +Katherine/M +Katheryn/M +Kathiawar/M +Kathie/M +Kathleen/M +Kathmandu/M +Kathrine/M +Kathryn/M +Kathy/M +Katie/M +Katina/M +Katmai/M +Katowice/M +Katrina/M +Katy/M +Kauai/M +Kaufman/M +Kaunas/M +Kaunda/M +Kawabata/M +Kawasaki/M +Kay/M +Kaye/M +Kayla/M +Kazakh/M +Kazakhs +Kazakhstan/M +Kazan/M +Kazantzakis/M +Kb/M +Keaton/M +Keats/M +Keck/M +Keenan/M +Keewatin/M +Keillor/M +Keisha/M +Keith/M +Keller/M +Kelley/M +Kelli/M +Kellie/M +Kellogg/M +Kelly/M +Kelsey/M +Kelvin/M +Kemerovo/M +Kemp/M +Kempis/M +Ken/M +Kendall/M +Kendra/M +Kendrick/M +Kenmore/M +Kennan/M +Kennedy/M +Kenneth/M +Kennith/M +Kenny/M +Kent/M +Kenton/M +Kentuckian/MS +Kentucky/M +Kenya/M +Kenyan/SM +Kenyatta/M +Kenyon/M +Keogh/M +Keokuk/M +Kepler/M +Kerensky/M +Keri/M +Kermit/M +Kern/M +Kerouac/M +Kerr/M +Kerri/M +Kerry/M +Kettering/M +Keven/M +Kevin/M +Kevlar/M +Kevorkian/M +Kewpie/M +Key/M +Keynes/M +Keynesian/M +Khabarovsk/M +Khachaturian/M +Khalid/M +Khan/M +Kharkov/M +Khartoum/M +Khayyam/M +Khazar/M +Khmer/M +Khoikhoi/M +Khoisan/M +Khomeini/M +Khorana/M +Khrushchev/M +Khufu/M +Khulna/M +Khwarizmi/M +Khyber/M +Kickapoo/M +Kidd/M +Kiel/M +Kierkegaard/M +Kieth/M +Kiev/M +Kigali/M +Kikuyu/M +Kilauea/M +Kilimanjaro/M +Kilroy/M +Kim/M +Kimberley/M +Kimberly/M +King/M +Kingston/M +Kingstown/M +Kinko's +Kinney/M +Kinsey/M +Kinshasa/M +Kiowa/MS +Kip/M +Kipling/M +Kirby/M +Kirchhoff/M +Kirchner/M +Kirghistan/M +Kirghiz/M +Kirghizia/M +Kiribati/M +Kirinyaga/M +Kirk/M +Kirkland/M +Kirkpatrick/M +Kirov/M +Kirsten/M +Kisangani/M +Kishinev/M +Kislev/M +Kissinger/M +Kit/M +Kitakyushu/M +Kitchener/M +Kitty/M +Kiwanis/M +Klan/M +Klansman/M +Klaus/M +Klee/M +Kleenex/MS +Klein/M +Klimt/M +Kline/M +Klingon/M +Klondike/MS +Kmart/M +Knapp/M +Knesset/M +Kngwarreye/M +Knickerbocker/M +Knievel/M +Knight/M +Knopf/M +Knossos/M +Knowles/M +Knox/M +Knoxville/M +Knudsen/M +Knuth/M +Knuths +Kobe/M +Koch/M +Kochab/M +Kodachrome/M +Kodak/M +Kodaly/M +Kodiak/M +Koestler/M +Kohinoor/M +Kohl/M +Koizumi/M +Kojak/M +Kolyma/M +Kommunizma/M +Kong/M +Kongo/M +Konrad/M +Koontz/M +Koppel/M +Koran/MS +Koranic +Korea/M +Korean/SM +Kornberg/M +Kory/M +Korzybski/M +Kosciusko/M +Kossuth/M +Kosygin/M +Koufax/M +Kowloon/M +Kr/M +Kraft/M +Krakatoa/M +Krakow/M +Kramer/M +Krasnodar/M +Krasnoyarsk/M +Krebs/M +Kremlin/M +Kremlinologist +Kremlinology +Kresge/M +Kringle/M +Kris/M +Krishna/M +Krishnamurti/M +Krista/M +Kristen/M +Kristi/M +Kristie/M +Kristin/M +Kristina/M +Kristine/M +Kristopher/M +Kristy/M +Kroc/M +Kroger/M +Kronecker/M +Kropotkin/M +Kruger/M +Krugerrand/M +Krupp/M +Krystal/M +Kshatriya/M +Kublai/M +Kubrick/M +Kuhn/M +Kuibyshev/M +Kulthumm/M +Kunming/M +Kuomintang/M +Kurd/M +Kurdish/M +Kurdistan/M +Kurosawa/M +Kurt/M +Kurtis/M +Kusch/M +Kutuzov/M +Kuwait/M +Kuwaiti/SM +Kuznets/M +Kuznetsk/M +Kwakiutl/M +Kwan/M +Kwangju/M +Kwanzaa/MS +Ky/MH +Kyle/M +Kyoto/M +Kyrgyzstan/M +Kyushu/M +L'Amour/M +L'Enfant +L'Oreal/M +L'Ouverture/M +L/MN +LA +LAN/M +LBJ/M +LC +LCD/M +LCM +LDC +LED/M +LG/M +LGBT +LIFO +LL +LLB/M +LLD/M +LNG +LOGO +LP/M +LPG +LPN/SM +LSAT +LSD/M +LVN +La/SM +Lab +Laban/M +Labrador/SM +Labradorean +Lacey/M +Lachesis/M +Lacy/M +Ladoga/M +Ladonna/M +Lady/M +Ladyship/MS +Lafayette/M +Lafitte/M +Lagos/M +Lagrange/M +Lagrangian/M +Lahore/M +Laius/M +Lajos/M +Lakeisha/M +Lakewood +Lakisha/M +Lakota/M +Lakshmi/M +Lamaism/SM +Lamar/M +Lamarck/M +Lamaze/M +Lamb/M +Lambert/M +Lamborghini/M +Lambrusco/M +Lamentations +Lamont/M +Lana/M +Lanai/M +Lancashire/M +Lancaster/M +Lance/M +Lancelot/M +Land/M +Landon/M +Landry/M +Landsat/M +Landsteiner/M +Lane/M +Lang/M +Langerhans/M +Langland/M +Langley/M +Langmuir/M +Lanka/M +Lankan/M +Lanny/M +Lansing/M +Lanzhou/M +Lao/SM +Laocoon/M +Laos/M +Laotian/SM +Laplace/M +Lapland/MR +Lapp/SM +Lara/M +Laramie/M +Lardner/M +Laredo/M +Larousse/M +Larry/M +Lars/MN +Larsen/M +Larson/M +Lascaux/M +Lassa/M +Lassen/M +Lassie/M +Lat/M +Latasha/M +Lateran/M +Latham/M +Latin/MRS +Latina +Latino/SM +Latisha/M +Latonya/M +Latoya/M +Latrobe/M +Latvia/M +Latvian/MS +Laud/MR +Lauder/M +Laue/M +Laundromat/M +Laura/M +Laurasia/M +Laurel/M +Lauren/M +Laurence/M +Laurent/M +Lauri/M +Laurie/M +Laval/M +Lavern/M +Laverne/M +Lavoisier/M +Lavonne/M +Lawanda/M +Lawrence/M +Lawson/M +Layamon/M +Layla/M +Lazaro/M +Lazarus/M +Le/SM +Lea/M +Leach/M +Leadbelly/M +Leah/M +Leakey/M +Lean/M +Leander/M +Leann/M +Leanna/M +Leanne/M +Lear/M +Learjet/M +Leary/M +Leavenworth/M +Lebanese/M +Lebanon/M +Lebesgue/M +Leblanc/M +Leda/M +Lederberg/M +Lee/M +Leeds/M +Leeuwenhoek/M +Leeward/M +Left +Legendre/M +Leger/M +Leghorn/M +Lego/M +Legree/M +Lehman/M +Leibniz/M +Leicester/SM +Leiden/M +Leif/M +Leigh/M +Leila/M +Leipzig/M +Lela/M +Leland/M +Lelia/M +Lemaitre/M +Lemuel/M +Lemuria/M +Len/M +Lena/M +Lenard/M +Lenin/M +Leningrad/M +Leninism/M +Leninist/M +Lennon/M +Lenny/M +Leno/M +Lenoir/M +Lenora/M +Lenore/M +Lent/SMN +Lenten/M +Leo/SM +Leola/M +Leon/M +Leona/M +Leonard/M +Leonardo/M +Leoncavallo/M +Leonel/M +Leonid/M +Leonidas/M +Leonor/M +Leopold/M +Leopoldo/M +Lepidus/M +Lepke/M +Lepus/M +Lerner/M +Leroy/M +Les/M +Lesa/M +Lesley/M +Leslie/M +Lesotho/M +Lesseps/M +Lessie/M +Lester/M +Lestrade/M +Leta/M +Letha/M +Lethe/M +Leticia/M +Letitia/M +Letterman/M +Levant/M +Levesque/M +Levi/SM +Leviathan/M +Levine/M +Leviticus/M +Levitt/M +Levy/M +Lew/M +Lewinsky/M +Lewis/M +Lexington/M +Lexus/M +Lhasa/MS +Lhotse/M +Li/MY +Libby/M +Liberace/M +Liberal +Liberia/M +Liberian/SM +Libra/MS +LibreOffice/M +Libreville/M +Librium/M +Libya/M +Libyan/SM +Lichtenstein/M +Lidia/M +Lie/M +Lieberman/M +Liebfraumilch/M +Liechtenstein/ZMR +Liechtensteiner/M +Liege/M +Lieut +Lila/M +Lilia/M +Lilian/M +Liliana/M +Lilith/M +Liliuokalani/M +Lille/M +Lillian/M +Lillie/M +Lilliput/M +Lilliputian/MS +Lilly/M +Lilongwe/M +Lily/M +Lima/M +Limbaugh/M +Limbo +Limburger/M +Limoges/M +Limousin/M +Limpopo/M +Lin/M +Lina/M +Lincoln/MS +Lind/M +Linda/M +Lindbergh/M +Lindsay/M +Lindsey/M +Lindy/M +Linnaeus/M +Linotype/M +Linton/M +Linus/M +Linux/MS +Linwood/M +Lionel/M +Lipizzaner/M +Lippi/M +Lippmann/M +Lipscomb/M +Lipton/M +Lisa/M +Lisbon/M +Lissajous/M +Lister/M +Listerine/M +Liston/M +Liszt/M +Lithuania/M +Lithuanian/MS +Little/M +Litton/M +Liverpool/M +Liverpudlian/SM +Livia/M +Livingston/M +Livingstone/M +Livonia/M +Livy/M +Liz/M +Liza/M +Lizzie/M +Lizzy/M +Ljubljana/M +Llewellyn/M +Lloyd/M +Ln +Loafer/SM +Lobachevsky/M +Lochinvar/M +Locke/M +Lockean/M +Lockheed/M +Lockwood/M +Lodge/M +Lodz/M +Loewe/M +Loewi/M +Loews/M +Logan/M +Lohengrin/M +Loire/M +Lois/M +Loki/M +Lola/M +Lolita/M +Lollard/M +Lollobrigida/M +Lombard/M +Lombardi/M +Lombardy/M +Lome/M +Lon/M +London/MRZ +Londoner/M +Long/M +Longfellow/M +Longstreet/M +Longueuil +Lonnie/M +Lopez/M +Lora/M +Loraine/M +Lord/SM +Lordship/SM +Lorelei/M +Loren/M +Lorena/M +Lorene/M +Lorentz/M +Lorenz/M +Lorenzo/M +Loretta/M +Lori/M +Lorie/M +Lorna/M +Lorraine/M +Lorre/M +Lorrie/M +Los +Lot/M +Lothario/SM +Lott/M +Lottie/M +Lou/M +Louella/M +Louie/M +Louis/M +Louisa/M +Louise/M +Louisiana/M +Louisianan/MS +Louisianian/MS +Louisville/M +Lourdes/M +Louvre/M +Love/M +Lovecraft/M +Lovelace/M +Lowe/M +Lowell/M +Lowenbrau/M +Lowery/M +Lowlands +Loyang/M +Loyd/M +Loyola/M +Lr +Lt +Ltd +Lu/M +Luanda/M +Luann/M +Lubavitcher/M +Lubbock/M +Lubumbashi/M +Lucas/M +Luce/M +Lucia/M +Lucian/M +Luciano/M +Lucien/M +Lucifer/M +Lucile/M +Lucille/M +Lucinda/M +Lucio/M +Lucite/SM +Lucius/M +Lucknow/M +Lucretia/M +Lucretius/M +Lucy/M +Luddite/MS +Ludhiana/M +Ludwig/M +Luella/M +Lufthansa/M +Luftwaffe/M +Luger/M +Lugosi/M +Luigi/M +Luis/M +Luisa/M +Luke/M +Lula/M +Lully/M +Lulu/M +Lumiere/M +Luna/M +Lupe/M +Lupercalia/M +Lupus/M +Luria/M +Lusaka/M +Lusitania/M +Luther/M +Lutheran/SM +Lutheranism/MS +Luvs/M +Luxembourg/ZMR +Luxembourger/M +Luxembourgian +Luz/M +Luzon/M +Lvov/M +LyX/M +Lyallpur +Lycra/M +Lycurgus/M +Lydia/M +Lydian/SM +Lyell/M +Lyle/M +Lyly/M +Lyman/M +Lyme/M +Lynch/M +Lynda/M +Lyndon/M +Lynette/M +Lynn/M +Lynne/M +Lynnette/M +Lyon/SM +Lyons/M +Lyra/M +Lysenko/M +Lysistrata/M +Lysol/M +M/SMGB +MA/M +MASH +MB/M +MBA/M +MC +MCI/M +MD/M +MDT +ME +MEGO/S +MFA/M +MGM/M +MHz +MI/M +MIA +MIDI/M +MIPS +MIRV +MIT/M +MM +MN +MO +MOOC +MP/M +MPEG +MRI/M +MS/M +MSG/M +MST/M +MSW +MT/M +MTV/M +MVP/M +MW +Maalox/M +Mabel/M +Mable/M +Mac/M +MacArthur/M +MacBride/M +MacDonald/M +MacLeish/M +Macao/M +Macaulay/M +Macbeth/M +Maccabees +Maccabeus/M +Mace/M +Macedon/M +Macedonia/M +Macedonian/SM +Mach/M +Machiavelli/M +Machiavellian/M +Macias/M +Macintosh/M +Mack/M +Mackenzie/M +Mackinac/M +Mackinaw/M +Macmillan/M +Macon/M +Macumba/M +Macy/M +Madagascan/SM +Madagascar/M +Madam +Madden/M +Maddox/M +Madeira/SM +Madeleine/M +Madeline/M +Madelyn/M +Madge/M +Madison/M +Madonna/SM +Madras/M +Madrid/M +Madurai/M +Mae/M +Maeterlinck/M +Mafia/MS +Mafioso/M +Magdalena/M +Magdalene/M +Magellan/M +Magellanic/M +Maggie/M +Maghreb/M +Magi +Maginot/M +Magnitogorsk/M +Magog/M +Magoo/M +Magritte/M +Magsaysay/M +Magus +Magyar/SM +Mahabharata/M +Maharashtra/M +Mahavira/M +Mahayana/M +Mahayanist/M +Mahdi/M +Mahfouz/M +Mahican/SM +Mahler/M +Mai/M +Maidenform/M +Maigret/M +Mailer/M +Maillol/M +Maiman/M +Maimonides/M +Maine/MZR +Mainer/M +Maisie/M +Maitreya/M +Maj +Majesty +Major/M +Majorca/M +Majuro/M +Makarios/M +Maker/M +Malabar/M +Malabo/M +Malacca/M +Malachi/M +Malagasy/M +Malamud/M +Malaprop/M +Malawi/M +Malawian/SM +Malay/MS +Malaya/M +Malayalam/M +Malayan/MS +Malaysia/M +Malaysian/MS +Malcolm/M +Maldive/MS +Maldives/M +Maldivian/MS +Maldonado/M +Male/M +Mali/M +Malian/SM +Malibu/M +Malinda/M +Malinowski/M +Mallarme/M +Mallomars/M +Mallory/M +Malone/M +Malory/M +Malplaquet/M +Malraux/M +Malta/M +Maltese/M +Malthus/M +Malthusian/SM +Mameluke/M +Mamet/M +Mamie/M +Mamore/M +Man/M +Managua/M +Manama/M +Manasseh/M +Manchester/M +Manchu/SM +Manchuria/M +Manchurian/M +Mancini/M +Mancunian/MS +Mandalay/M +Mandarin/M +Mandela/M +Mandelbrot/M +Mandingo/M +Mandrell/M +Mandy/M +Manet/M +Manfred/M +Manhattan/SM +Mani/M +Manichean/M +Manilas +Manilla/M +Manitoba/M +Manitoulin/M +Manley/M +Mann/GM +Mannheim/M +Manning/M +Mansfield/M +Manson/M +Mantegna/M +Mantle/M +Manuel/M +Manuela/M +Manx/M +Mao/M +Maoism/SM +Maoist/SM +Maori/MS +Mapplethorpe/M +Maputo/M +Mar/SM +Mara/M +Maracaibo/M +Marat/M +Maratha/M +Marathi/M +Marathon/M +Marc/M +Marceau/M +Marcel/M +Marcelino/M +Marcella/M +Marcelo/M +March/MS +Marci/M +Marcia/M +Marciano/M +Marcie/M +Marco/MS +Marconi/M +Marcos/M +Marcus/M +Marcuse +Marcy/M +Marduk/M +Margaret/M +Margarita/M +Margarito/M +Marge/M +Margery/M +Margie/M +Margo/M +Margot +Margret/M +Margrethe/M +Marguerite/M +Mari/SM +Maria/M +Marian/M +Mariana/SM +Marianas/M +Marianne/M +Mariano/M +Maribel/M +Maricela/M +Marie/M +Marietta/M +Marilyn/M +Marin/M +Marina/M +Marine/SM +Mario/M +Marion/M +Maris/M +Marisa/M +Marisol/M +Marissa/M +Maritain/M +Maritza/M +Mariupol +Marius/M +Marjorie/M +Marjory/M +Mark/SM +Markab/M +Markham/M +Markov/M +Marks/M +Marla/M +Marlboro/M +Marlborough/M +Marlene/M +Marley/M +Marlin/M +Marlon/M +Marlowe/M +Marmara/M +Marne/M +Maronite/M +Marple/M +Marquesas/M +Marquette/M +Marquez/M +Marquis/M +Marquita/M +Marrakesh/M +Marriott/M +Mars/MS +Marsala/M +Marseillaise/MS +Marseilles/M +Marsh/M +Marsha/M +Marshall/M +Marta/M +Martel/M +Martha/M +Martial/M +Martian/SM +Martin/M +Martina/M +Martinez/M +Martinique/M +Marty/M +Marva/M +Marvell/M +Marvin/M +Marx/M +Marxian +Marxism/SM +Marxist/SM +Mary/M +Maryann/M +Maryanne/M +Maryellen/M +Maryland/MR +Marylander/M +Marylou/M +Masada/M +Masai/M +Masaryk/M +Mascagni/M +Masefield/M +Maserati/M +Maseru/M +Mashhad/M +Mason/MS +Masonic/M +Masonite/M +Mass/MS +Massachusetts/M +Massasoit/M +Massenet/M +Massey/M +Master/S +MasterCard/M +Masters/M +Mather/M +Mathew/SM +Mathews/M +Mathewson/M +Mathias/M +Mathis/M +Matilda/M +Matisse/M +Matt/M +Mattel/M +Matterhorn/M +Matthew/SM +Matthews/M +Matthias/M +Mattie/M +Maud/M +Maude/M +Maugham/M +Maui/M +Maupassant/M +Maura/M +Maureen/M +Mauriac/M +Maurice/M +Mauricio/M +Maurine/M +Mauritania/M +Mauritanian/SM +Mauritian/SM +Mauritius/M +Mauro/M +Maurois/M +Mauryan/M +Mauser/M +Mavis/M +Max/M +Maximilian/M +Maxine/M +Maxwell/M +May/SMR +Maya/SM +Mayan/MS +Mayer/M +Mayfair/M +Mayflower/M +Maynard/M +Mayo/M +Maypole +Mayra/M +Mays/M +Maytag/M +Mazama/M +Mazarin/M +Mazatlan/M +Mazda/M +Mazola/M +Mazzini/M +Mb/M +Mbabane/M +Mbini/M +McAdam/M +McBride/M +McCain/M +McCall/M +McCarthy/M +McCarthyism/M +McCartney/M +McCarty/M +McClain/M +McClellan/M +McClure/M +McConnell/M +McCormick/M +McCoy/M +McCray/M +McCullough/M +McDaniel/M +McDonald/M +McDonnell/M +McDowell/M +McEnroe/M +McFadden/M +McFarland/M +McGee/M +McGovern/M +McGowan/M +McGuffey/M +McGuire/M +McIntosh/M +McIntyre/M +McKay/M +McKee/M +McKenzie/M +McKinley/M +McKinney/M +McKnight/M +McLaughlin/M +McLean/M +McLeod/M +McLuhan/M +McMahon/M +McMillan/M +McNamara/M +McNaughton/M +McNeil/M +McPherson/M +McQueen/M +McVeigh/M +Md/M +Me +Mead/M +Meade/M +Meadows/M +Meagan/M +Meany/M +Mecca/MS +Medan/M +Medea/M +Medellin/M +Media/M +Medicaid/SM +Medicare/SM +Medici/M +Medina/M +Mediterranean/MS +Medusa/M +Meg/M +Megan/M +Meghan/M +Meier/M +Meighen/M +Meiji/M +Meir/M +Mejia/M +Mekong/M +Mel/M +Melanesia/M +Melanesian/M +Melanie/M +Melba/M +Melbourne/M +Melchior/M +Melchizedek/M +Melendez/M +Melinda/M +Melisa/M +Melisande/M +Melissa/M +Mellon/M +Melody/M +Melpomene/M +Melton/M +Melva/M +Melville/M +Melvin/M +Memling/M +Memphis/M +Menander/M +Mencius/M +Mencken/M +Mendel/M +Mendeleev/M +Mendelian/M +Mendelssohn/M +Mendez/M +Mendocino/M +Mendoza/M +Menelaus/M +Menelik/M +Menes/M +Mengzi +Menkalinan/M +Menkar/M +Menkent/M +Mennen/M +Mennonite/MS +Menominee/M +Menotti/M +Mensa/M +Mentholatum/M +Menuhin/M +Menzies/M +Mephisto +Mephistopheles/M +Merak/M +Mercado/M +Mercator/M +Mercedes/M +Mercer/M +Mercia/M +Merck/M +Mercurochrome/M +Mercury/SM +Meredith/M +Merino/M +Merle/M +Merlin/M +Merlot/M +Merovingian/M +Merriam/M +Merrick/M +Merrill/M +Merrimack/M +Merritt/M +Merthiolate/M +Merton/M +Mervin/M +Mesa/M +Mesabi/M +Mesmer/M +Mesolithic/M +Mesopotamia/M +Mesopotamian +Mesozoic/M +Messerschmidt/M +Messiaen/M +Messiah/M +Messiahs +Messianic +Messieurs +Metallica/M +Metamucil/M +Methodism/SM +Methodist/SM +Methuselah/M +Metternich/M +Meuse/M +Mex +Mexicali/M +Mexican/MS +Mexico/M +Meyer/MS +Meyerbeer/M +Meyers/M +Mfume/M +Mg/M +Mgr +MiG/M +Mia/M +Miami/MS +Miaplacidus/M +Micah/M +Micawber/M +Mich/M +Michael/M +Michaelmas/MS +Micheal/M +Michel/M +Michelangelo/M +Michele/M +Michelin/M +Michelle/M +Michelob/M +Michelson/M +Michigan/M +Michigander/MS +Michiganite +Mick/M +Mickey/M +Mickie/M +Micky/M +Micmac/SM +Micronesia/M +Micronesian/M +Microsoft/M +Midas/M +Middleton/M +Mideast +Mideastern +Midland/MS +Midway/M +Midwest/M +Midwestern/MR +Miguel/M +Mike/M +Mikhail/M +Mikoyan/M +Milagros/M +Milan/M +Milanese +Mildred/M +Miles/M +Milford/M +Milken/M +Mill/SMR +Millard/M +Millay/M +Miller/M +Millet/M +Millicent/M +Millie/M +Millikan/M +Mills/M +Milne/M +Milo/M +Milosevic/M +Milquetoast/M +Miltiades/M +Milton/M +Miltonic/M +Miltown/M +Milwaukee/M +Mimi/M +Mimosa/M +Min/M +Minamoto/M +Mindanao/M +Mindoro/M +Mindy/M +Minerva/M +Ming/M +Mingus/M +Minn +Minneapolis/M +Minnelli/M +Minnesota/M +Minnesotan/SM +Minnie/M +Minoan/MS +Minolta/M +Minos/M +Minot/M +Minotaur/M +Minsk/M +Minsky/M +Mintaka/M +Minuit/M +Minuteman/M +Miocene/M +Mir/M +Mira/M +Mirabeau/M +Mirach/M +Miranda/M +Mirfak/M +Miriam/M +Miro/M +Mirzam/M +Miskito/M +Miss +Mississauga/M +Mississippi/M +Mississippian/SM +Missouri/M +Missourian/MS +Missy/M +Mistassini/M +Mister +Mistress +Misty/M +Mitch/M +Mitchel/M +Mitchell/M +Mitford/M +Mithra/M +Mithridates/M +Mitsubishi/M +Mitterrand/M +Mitty/M +Mitzi/M +Mixtec/M +Mizar/M +Mk +Mlle +Mme/S +Mn/M +Mnemosyne/M +Mo/M +Mobil/M +Mobile/M +Mobutu/M +Modesto/M +Modigliani/M +Moe/M +Moet/M +Mogadishu/M +Mogul/MS +Mohacs/M +Mohamed/M +Mohammad/M +Mohammedan/SM +Mohammedanism/SM +Mohave/SM +Mohawk/SM +Mohegan +Moho/M +Mohorovicic/M +Moira/M +Moises/M +Moiseyev/M +Mojave/SM +Moldavia/M +Moldavian +Moldova/M +Moldovan +Moliere/M +Molina/M +Moll/M +Mollie/M +Molly/M +Molnar/M +Moloch/M +Molokai/M +Molotov/M +Moluccas/M +Mombasa/M +Mon/SM +Mona/M +Monacan +Monaco/M +Mondale/M +Monday/SM +Mondrian/M +Monegasque/SM +Monera/M +Monet/M +Mongol/SM +Mongolia/M +Mongolian/SM +Mongolic/M +Mongoloid +Monica/M +Monique/M +Monk/M +Monmouth/M +Monongahela/M +Monroe/M +Monrovia/M +Monsanto/M +Monsieur/M +Monsignor/SM +Mont/M +Montague/M +Montaigne/M +Montana/M +Montanan/SM +Montcalm/M +Monte/M +Montenegrin/M +Montenegro/M +Monterrey/M +Montesquieu/M +Montessori/M +Monteverdi/M +Montevideo/M +Montezuma/M +Montgolfier/M +Montgomery/M +Monticello/M +Montoya/M +Montpelier/M +Montrachet/M +Montreal/M +Montserrat/M +Monty/M +Moody/M +Moog/M +Moon/M +Mooney/M +Moor/SM +Moore/M +Moorish/M +Morales/M +Moran/M +Moravia/M +Moravian/M +Mordred/M +More/M +Moreno/M +Morgan/SM +Moriarty/M +Morin/M +Morison/M +Morita/M +Morley/M +Mormon/SM +Mormonism/SM +Moro/M +Moroccan/SM +Morocco/M +Moroni/M +Morpheus/M +Morphy/M +Morris/M +Morrison/M +Morrow/M +Morse/M +Mort/M +Mortimer/M +Morton/M +Mosaic/M +Moscow/M +Moseley/M +Moselle/M +Moses/M +Mosley/M +Moss/M +Mosul/M +Motorola/M +Motown/M +Motrin/M +Mott/M +Moulton/M +Mount/M +Mountbatten/M +Mountie/MS +Moussorgsky/M +Mouthe/M +Mouton/M +Mowgli/M +Mozambican/SM +Mozambique/M +Mozart/M +Mozilla/M +Mr/SM +Ms/S +Msgr +Mt +Muawiya/M +Mubarak/M +Mueller/M +Muenster/MS +Mugabe/M +Muhammad/M +Muhammadan/MS +Muhammadanism/SM +Muir/M +Mujib/M +Mulder/M +Mullen/M +Muller/M +Mulligan/M +Mullikan/M +Mullins/M +Mulroney/M +Multan/M +Multics +Mumbai/M +Mumford/M +Munch/M +Munchhausen/M +Munich/M +Munoz/M +Munro/M +Munster/M +Muppet/M +Murasaki/M +Murat/M +Murchison/M +Murcia +Murdoch/M +Muriel/M +Murillo/M +Murine/M +Murmansk/M +Murphy/M +Murray/M +Murrow/M +Murrumbidgee/M +Muscat/M +Muscovite/M +Muscovy/M +Muse/M +Musharraf/M +Musial/M +Muskogee/M +Muslim/MS +Mussolini/M +Mussorgsky/M +Mutsuhito/M +Muzak/M +MySpace/M +Myanmar/M +Mycenae/M +Mycenaean/M +Myers/M +Mylar/MS +Myles/M +Myra/M +Myrdal/M +Myrna/M +Myron/M +Myrtle/M +Mysore/M +Myst/M +N'Djamena +N/MD +NAACP/M +NAFTA/M +NASA/M +NASCAR/M +NASDAQ/M +NATO/M +NB +NBA/M +NBC/M +NBS +NC +NCAA/M +NCO +ND +NE/M +NEH +NF +NFC +NFL/M +NH +NHL/M +NIH +NIMBY +NJ +NLRB +NM +NORAD/M +NOW +NP +NPR/M +NR +NRA +NRC +NS +NSA/M +NSC +NSF +NSFW +NT +NV +NW/M +NWT +NY +NYC +NYSE +NZ +Na/M +Nabisco/M +Nabokov/M +Nader/M +Nadia/M +Nadine/M +Nagasaki/M +Nagoya/M +Nagpur/M +Nagy/M +Nahuatl/MS +Nahum/M +Naipaul/M +Nair/M +Nairobi/M +Naismith/M +Nam/M +Namath/M +Namibia/M +Namibian/MS +Nan/M +Nanak/M +Nanchang/M +Nancy/M +Nanette/M +Nanjing/M +Nannie/M +Nanook/M +Nansen/M +Nantes/M +Nantucket/M +Naomi/M +Naphtali/M +Napier/M +Naples/M +Napoleon/MS +Napoleonic/M +Napster/M +Narcissus/M +Narmada/M +Narnia/M +Narraganset +Narragansett/M +Nash/M +Nashua/M +Nashville/M +Nassau/M +Nasser/M +Nat/M +Natalia/M +Natalie/M +Natasha/M +Natchez/M +Nate/MN +Nathan/SM +Nathaniel/M +Nathans/M +Nation/M +Nationwide/M +Nativity/M +Naugahyde/M +Nauru/M +Nautilus/M +Navajo/SM +Navajoes +Navarre/M +Navarro/M +Navratilova/M +Navy +Nazarene/M +Nazareth/M +Nazca/M +Nazi/SM +Nazism/MS +Nb/M +Nd/M +Ndjamena/M +Ne/M +NeWS +NeWSes +Neal/M +Neanderthal/SM +Neapolitan/M +Neb +Nebr +Nebraska/M +Nebraskan/MS +Nebuchadnezzar/M +Ned/M +Nefertiti/M +Negev/M +Negress/MS +Negritude +Negro/MS +Negroes +Negroid/SM +Negros/M +Nehemiah/M +Nehru/M +Neil/M +Nelda/M +Nell/M +Nellie/M +Nelly/M +Nelsen/M +Nelson/M +Nembutal/M +Nemesis/M +Neogene/M +Neolithic +Nepal/M +Nepalese/M +Nepali/MS +Neptune/M +Nereid/M +Nerf/M +Nero/M +Neruda/M +Nescafe/M +Nesselrode/M +Nestle/M +Nestor/M +Nestorius/M +Netflix/M +Netherlander/SM +Netherlands/M +Netscape/M +Nettie/M +Netzahualcoyotl/M +Nev/M +Neva/M +Nevada/M +Nevadan/SM +Nevadian +Nevis/M +Nevsky/M +Newark/M +Newcastle/M +Newfoundland/MRS +Newman/M +Newport/M +Newsweek/M +Newton/M +Newtonian/M +Nexis/M +Ngaliema/M +Nguyen/M +Ni/M +Niagara/M +Niamey/M +Nibelung/M +Nicaea/M +Nicaragua/M +Nicaraguan/SM +Niccolo/M +Nice/M +Nicene/M +Nichiren/M +Nicholas/M +Nichole/M +Nichols/M +Nicholson/M +Nick/M +Nickelodeon/M +Nicklaus/M +Nickolas/M +Nicobar/M +Nicodemus/M +Nicola/SM +Nicolas/M +Nicole/M +Nicosia/M +Niebuhr/M +Nielsen/M +Nietzsche/M +Nieves/M +Nigel/M +Niger/M +Nigeria/M +Nigerian/MS +Nigerien/M +Nightingale/M +Nijinsky/M +Nike/M +Nikita/M +Nikkei/M +Nikki/M +Nikolai/M +Nikon/M +Nile/M +Nimitz/M +Nimrod/M +Nina/M +Nineveh/M +Nintendo/M +Niobe/M +Nippon/M +Nipponese/M +Nirenberg/M +Nirvana/M +Nisan/M +Nisei/M +Nissan/M +Nita/M +Nivea/M +Nixon/M +Nkrumah/M +No/SM +NoDoz/M +Noah/M +Nobel/M +Nobelist/MS +Noble/M +Noe/M +Noel/SM +Noelle/M +Noemi/M +Nokia/M +Nola/M +Nolan/M +Nome/M +Nona/M +Nootka/M +Nora/M +Norbert/M +Norberto/M +Nordic/MS +Noreen/M +Norfolk/M +Noriega/M +Norma/M +Norman/MS +Normand/M +Normandy/M +Norplant/M +Norris/M +Norse/M +Norseman/M +Norsemen/M +North/M +Northampton/M +Northeast/MS +Northerner/M +Northrop/M +Northrup/M +Norths +Northwest/SM +Norton/M +Norw +Norway/M +Norwegian/SM +Norwich/M +Nosferatu/M +Nostradamus/M +Nottingham/M +Nouakchott/M +Noumea/M +Nov/M +Nova/M +Novartis/M +November/MS +Novgorod/M +Novocain/MS +Novocaine +Novokuznetsk/M +Novosibirsk/M +Noxzema/M +Noyce/M +Noyes/M +Np/M +Nubia/M +Nubian/M +Nukualofa/M +Numbers/M +Nunavut/M +Nunez/M +Nunki/M +Nuremberg/M +Nureyev/M +NutraSweet/M +NyQuil/M +Nyasa/M +Nyerere/M +O'Brien/M +O'Casey/M +O'Connell/M +O'Connor/M +O'Donnell/M +O'Hara/M +O'Higgins/M +O'Keeffe/M +O'Neil/M +O'Neill/M +O'Rourke/M +O'Toole/M +O/SM +OAS/M +OB +OCR +OD/SM +OE +OED +OH +OHSA/M +OJ +OK/SMDG +OMB/M +ON +OPEC/M +OR +OS/M +OSHA/M +OSes +OT +OTB +OTC +OTOH +Oahu/M +Oakland/M +Oakley/M +Oates/M +Oaxaca/M +Ob/M +Obadiah/M +Obama/M +Obamacare +Oberlin/M +Oberon/M +Occam/M +Occident +Occidental/MS +Oceania/M +Oceanside +Oceanus/M +Ochoa/M +Oct/M +Octavia/M +Octavian/M +Octavio/M +October/SM +Odell/M +Oder/M +Odessa/M +Odets/M +Odin/M +Odis/M +Odom/M +Odysseus/M +Odyssey/M +Oedipal/M +Oedipus/M +Oersted/M +Ofelia/M +Offenbach/M +OfficeMax/M +Ogbomosho/M +Ogden/M +Ogilvy/M +Oglethorpe/M +Ohio/M +Ohioan/SM +Oise/M +Ojibwa/SM +Okayama +Okeechobee/M +Okefenokee/M +Okhotsk/M +Okinawa/M +Okinawan +Okla +Oklahoma/M +Oklahoman/M +Oktoberfest/M +Ola/M +Olaf/M +Olajuwon/M +Olav/M +Oldenburg/M +Oldfield/M +Oldsmobile/M +Olduvai/M +Olen/M +Olenek/M +Olga/M +Oligocene/M +Olin/M +Olive/MR +Oliver/M +Olivetti/M +Olivia/M +Olivier/M +Ollie/M +Olmec/M +Olmsted/M +Olsen/M +Olson/M +Olympia/SM +Olympiad/MS +Olympian/MS +Olympic/SM +Olympics/M +Olympus/M +Omaha/MS +Oman/M +Omani/MS +Omar/M +Omayyad/M +Omdurman/M +Omnipotent +Omsk/M +Onassis/M +Oneal/M +Onega/M +Onegin/M +Oneida/MS +Onion/M +Ono/M +Onondaga/MS +Onsager/M +Ont +Ontarian +Ontario/M +Oort/M +Opal/M +Opel/M +OpenOffice/M +Ophelia/M +Ophiuchus/M +Oppenheimer/M +Opposition +Oprah/M +Ora/M +Oracle/M +Oran/M +Orange/M +Oranjestad/M +Orbison/M +Ordovician/M +Ore/N +Oreg +Oregon/M +Oregonian/SM +Oreo/M +Orestes/M +Orient/M +Oriental/MS +Orientalism +Orin/M +Orinoco/M +Orion/M +Oriya/M +Orizaba/M +Orkney/M +Orlando/M +Orleans/M +Orlon/MS +Orly/M +Orpheus/M +Orphic/M +Orr/M +Ortega/M +Orthodox +Ortiz/M +Orval/M +Orville/M +Orwell/M +Orwellian/M +Os/M +Osage/MS +Osaka/M +Osbert/M +Osborn/M +Osborne/M +Oscar/MS +Osceola/M +Osgood/M +Oshawa/M +Oshkosh/M +Osiris/M +Oslo/M +Osman/M +Ostrogoth/M +Ostwald/M +Osvaldo/M +Oswald/M +Othello/M +Otis/M +Ottawa/SM +Otto/M +Ottoman/M +Ouagadougou/M +Ouija/MS +Ovid/M +Owen/SM +Owens/M +Oxford/SM +Oxnard/M +Oxonian/M +Oxus/M +Oxycontin/M +Oz/M +Ozark/MS +Ozarks/M +Ozymandias/M +Ozzie/M +P/MN +PA/M +PAC/M +PARC/S +PASCAL +PBS/M +PBX +PC/SM +PCB +PCMCIA +PCP/M +PD +PDF +PDQ +PDT +PE +PET/M +PFC +PG +PGP +PIN +PJ's +PLO/M +PM/SMDG +PMS/M +PO +POW/M +PP +PPS +PR +PRC/M +PRO +PS/M +PST/M +PT +PTA/M +PTO +PVC/M +PW +PX +Pa/M +Paar/M +Pablo/M +Pablum/M +Pabst/M +Pace/M +Pacheco/M +Pacific/M +Pacino/M +Packard/M +Padang +Paderewski/M +Padilla/M +Paganini/M +Page/M +Paglia/M +Pahlavi/M +Paige/M +Paine/M +Paiute/SM +Pakistan/M +Pakistani/SM +Palaeolithic +Palembang/M +Paleocene/M +Paleogene/M +Paleolithic's +Paleozoic/M +Palermo/M +Palestine/M +Palestinian/SM +Palestrina/M +Paley/M +Palikir/M +Palisades/M +Palladio/M +Palmer/M +Palmerston/M +Palmolive/M +Palmyra/M +Palomar/M +Pam/M +Pamela/M +Pamirs/M +Pampers/M +Pan/M +Panama/SM +Panamanian/MS +Panasonic/M +Pandora/M +Pangaea/M +Pankhurst/M +Panmunjom/M +Pansy/M +Pantagruel/M +Pantaloon/M +Pantheon/M +Panza/M +Paracelsus/M +Paraclete/M +Paradise +Paraguay/M +Paraguayan/MS +Paralympic/S +Paramaribo/M +Paramount/M +Parana/M +Parcheesi/M +Pareto/M +Paris/M +Parisian/MS +Park/SMR +Parker/M +Parkinson/M +Parkinsonism +Parkman/M +Parks/M +Parliament/M +Parmenides +Parmesan/MS +Parnassus/MS +Parnell/M +Parr/M +Parrish/M +Parsifal/M +Parsons/M +Parthenon/M +Parthia/M +Pasadena/M +Pascal/SM +Pasquale/M +Passion/SM +Passover/MS +Pasternak/M +Pasteur/M +Pat/M +Patagonia/M +Patagonian/M +Pate/M +Patel/M +Paterson/M +Patna/M +Patrica/M +Patrice/M +Patricia/M +Patrick/M +Patsy/M +Patterson/M +Patti/M +Patton/M +Patty/M +Paul/GM +Paula/M +Paulette/M +Pauli/M +Pauline/M +Pauling/M +Pavarotti/M +Pavlov/M +Pavlova/M +Pavlovian/M +Pawnee/SM +PayPal/M +Payne/M +Pb/M +Pd/M +Peabody/M +Peace/M +Peale/M +Pearl/M +Pearlie/M +Pearson/M +Peary/M +Pechora/M +Peck/M +Peckinpah/M +Pecos/M +Pedro/M +Peel/M +Peg/M +Pegasus/MS +Peggy/M +Pei/M +Peiping/M +Peking/SM +Pekingese/SM +Pele/M +Pelee/M +Peloponnese/M +Pembroke/M +Pen/M +Pena/M +Penderecki/M +Penelope/M +Penn/M +Penna +Penney/M +Pennington/M +Pennsylvania/M +Pennsylvanian/MS +Penny/M +Pennzoil/M +Pensacola/M +Pentagon/M +Pentateuch/M +Pentax/M +Pentecost/SM +Pentecostal/MS +Pentecostalism +Pentium/SM +Peoria/M +Pepin/M +Pepsi/M +Pepys/M +Pequot/M +Percheron/M +Percival/M +Percy/M +Perelman/M +Perez/M +Periclean/M +Pericles/M +Perkins/M +Perl/SM +Perm/M +Permalloy/M +Permian/M +Pernod/M +Peron/M +Perot/M +Perrier/M +Perry/RM +Perseid/M +Persephone/M +Persepolis/M +Perseus/M +Pershing/M +Persia/M +Persian/SM +Perth/M +Peru/M +Peruvian/MS +Peshawar/M +Petain/M +Pete/RMZ +Peter/M +Peters/MN +Petersen/M +Peterson/M +Petra/M +Petrarch/M +Petty/M +Peugeot/M +Pfc +Pfizer/M +PhD/M +Phaedra/M +Phaethon/M +Phanerozoic/M +Pharaoh/M +Pharaohs +Pharisaic +Pharisaical +Pharisee/MS +Phekda/M +Phelps/M +Phidias/M +Phil/MY +Philadelphia/M +Philby/M +Philemon/M +Philip/MS +Philippe/M +Philippians/M +Philippine/SM +Philippines/M +Philips/M +Philistine/M +Phillip/SM +Phillipa/M +Phillips/M +Philly/M +Phipps/M +Phobos/M +Phoebe/M +Phoenicia/M +Phoenician/SM +Phoenix/M +Photostat/MS +Photostatted +Photostatting +Phrygia/M +Phyllis/M +Piaf/M +Piaget/M +Pianola/M +Picasso/M +Piccadilly/M +Pickering/M +Pickett/M +Pickford/M +Pickwick/M +Pict/M +Piedmont/M +Pierce/M +Pierre/M +Pierrot/M +Pike/M +Pilate/MS +Pilates/M +Pilcomayo/M +Pilgrim/SM +Pillsbury/M +Pinatubo/M +Pincus/M +Pindar/M +Pinkerton/M +Pinocchio/M +Pinochet/M +Pinter/M +Pinyin +Pippin/M +Piraeus/M +Pirandello/M +Pisa/M +Pisces/M +Pisistratus/M +Pissaro/M +Pitcairn/M +Pitt/SM +Pittman/M +Pitts/M +Pittsburgh/M +Pius/M +Pizarro/M +Pkwy +Pl +Planck/M +Plano +Plantagenet/M +Plasticine/M +Plataea/M +Plath/M +Plato/M +Platonic +Platonism/M +Platonist/M +Platte/M +Plautus/M +PlayStation/M +Playboy/M +Playtex/M +Pleiades/M +Pleistocene/M +Plexiglas/MS +Pliny/M +Pliocene/SM +Plutarch/M +Pluto/M +Plymouth/M +Pm/M +Po/M +Pocahontas/M +Pocono/SM +Poconos/M +Podgorica/M +Podhoretz/M +Podunk/M +Poe/M +Pogo/M +Poincare/M +Poiret/M +Poirot/M +Poisson/M +Poitier/M +Pokemon/M +Pol/MY +Poland/M +Polanski/M +Polaris/M +Polaroid/MS +Pole/SM +Polish/M +Politburo/M +Polk/M +Pollard/M +Pollock/M +Pollux/M +Polly/M +Pollyanna/M +Polo/M +Poltava/M +Polyhymnia/M +Polynesia/M +Polynesian/MS +Polyphemus/M +Pomerania/M +Pomeranian/M +Pomona/M +Pompadour/M +Pompeian +Pompeii/M +Pompey/M +Ponce/M +Pontchartrain/M +Pontiac/M +Pontianak/M +Pooh/M +Poole/M +Poona/M +Pope/M +Popeye/M +Popocatepetl/M +Popper/M +Poppins/M +Popsicle/M +Porfirio/M +Porrima/M +Porsche/M +Port/MR +Porter/M +Portia/M +Portland/M +Porto/M +Portsmouth/M +Portugal/M +Portuguese/M +Poseidon/M +Post/M +Potemkin/M +Potomac/M +Potsdam/M +Pottawatomie/M +Potter/M +Potts/M +Pound/M +Poussin/M +Powell/M +PowerPC/M +PowerPoint/M +Powers/M +Powhatan/M +Poznan/M +Pr/M +Prada/M +Prado/M +Praetorian/M +Prague/M +Praia/M +Prakrit/M +Pratchett/M +Pratt/M +Pravda/M +Praxiteles/M +Preakness/M +Precambrian/M +Preminger/M +Premyslid/M +Prensa/M +Prentice/M +Pres +Presbyterian/SM +Presbyterianism/MS +Prescott/M +Presley/M +Preston/M +Pretoria/M +Priam/M +Pribilof/M +Price/M +Priestley/M +Prince/M +Princeton/M +Principe/M +Priscilla/M +Prius/M +Private +Procrustean/M +Procrustes/M +Procter/M +Procyon/M +Prof +Prohibition +Prokofiev/M +Promethean/M +Prometheus/M +Prophets +Proserpina/M +Proserpine/M +Protagoras/M +Proterozoic/M +Protestant/MS +Protestantism/SM +Proteus/M +Proudhon/M +Proust/M +Provencal/MS +Provence/M +Proverbs +Providence/SM +Provo/M +Prozac/MS +Prudence/M +Prudential/M +Pruitt/M +Prussia/M +Prussian/MS +Prut/M +Pryor/M +Psalms/M +Psalter/MS +Psyche/M +Pt/M +Ptah/M +Ptolemaic/M +Ptolemy/SM +Pu/M +Puccini/M +Puck/M +Puckett/M +Puebla/M +Pueblo/M +Puerto +Puget/M +Pugh/M +Pulaski/M +Pulitzer/M +Pullman/MS +Punch/M +Punic/M +Punjab/M +Punjabi/M +Purana/M +Purcell/M +Purdue/M +Purim/MS +Purina/M +Puritan/M +Puritanism/MS +Purus/M +Pusan/M +Pusey/M +Pushkin/M +Pushtu/M +Putin/M +Putnam/M +Puzo/M +Pvt +Pygmalion/M +Pygmy/SM +Pyle/M +Pym/M +Pynchon/M +Pyongyang/M +Pyotr/M +Pyrenees/M +Pyrex/MS +Pyrrhic/M +Pythagoras/M +Pythagorean/M +Pythias/M +Python/M +Q +QA +QB +QC +QED +QM +QWERTY +Qaddafi/M +Qantas/M +Qatar/M +Qatari/MS +Qingdao/M +Qiqihar/M +Qom/M +Quaalude/M +Quaker/MS +Quakerism/SM +Quaoar/M +Quasimodo/M +Quaternary/M +Quayle/M +Que +Quebec/M +Quebecois/M +Quechua/M +Queen/MS +Queens/M +Queensland/M +Quentin/M +Quetzalcoatl/M +Quezon/M +Quincy/M +Quinn/M +Quintilian/M +Quinton/M +Quirinal/M +Quisling/M +Quito/M +Quixote/M +Quixotism/M +Qumran/M +Quonset/M +R/M +RAF/M +RAM/SM +RBI +RC +RCA/M +RCMP +RD +RDA +REIT +REM/SM +RF +RFC/S +RFD +RI +RIF +RIP +RISC +RN/M +RNA/M +ROFL +ROM/M +ROTC/M +RP +RR +RSFSR +RSI +RSV +RSVP +RTFM +RV/SM +Ra/M +Rabat/M +Rabelais/M +Rabelaisian/M +Rabin/M +Rachael/M +Rachel/M +Rachelle/M +Rachmaninoff/M +Racine/M +Radcliffe/M +Rae/M +Rafael/M +Raffles/M +Ragnarok/M +Rainier/M +Raleigh/M +Ralph/M +Rama/M +Ramada/M +Ramadan/MS +Ramakrishna/M +Ramanujan/M +Ramayana/M +Rambo/M +Ramirez/M +Ramiro/M +Ramon/M +Ramona/M +Ramos/M +Ramsay/M +Ramses/M +Ramsey/M +Rand/M +Randal/M +Randall/M +Randell/M +Randi/M +Randolph/M +Randy/M +Rangoon/M +Rankin/M +Rankine/M +Raoul/M +Raphael/M +Rappaport/M +Rapunzel/M +Raquel/M +Rasalgethi/M +Rasalhague/M +Rasmussen/M +Rasputin/M +Rasta +Rastaban/M +Rastafarian/MS +Rastafarianism +Rather/M +Ratliff/M +Raul/M +Ravel/M +Rawalpindi/M +Ray/M +RayBan/M +Rayburn/M +Rayleigh/M +Raymond/M +Raymundo/M +Rb/M +Rd +Re/M +Reading/M +Reagan/M +Reaganomics/M +Realtor/M +Reasoner/M +Reba/M +Rebekah/M +Recife/M +Reconstruction/M +Redeemer/M +Redford/M +Redgrave/M +Redmond/M +Reebok/M +Reed/M +Reese/M +Reeves/M +Reformation/MS +Refugio/M +Reggie/M +Regina/M +Reginae/M +Reginald/M +Regor/M +Regulus/M +Rehnquist/M +Reich/M +Reichstag's +Reid/M +Reilly/M +Reinaldo/M +Reinhardt/M +Reinhold/M +Remarque/M +Rembrandt/M +Remington/M +Remus/M +Rena/M +Renaissance/SM +Renascence +Renault/M +Rene/M +Renee/M +Reno/M +Renoir/M +Rep +Representative +Republican/SM +Republicanism +Requiem/MS +Resistance +Restoration/M +Resurrection +Reuben/M +Reunion/M +Reuters/M +Reuther/M +Rev +Reva/M +Revelation/SM +Revelations/M +Revere/M +Reverend/M +Revlon/M +Rex/M +Reyes/M +Reykjavik/M +Reyna/M +Reynaldo/M +Reynolds/M +Rf/M +Rh/M +Rhea/M +Rhee/M +Rheingau/M +Rhenish/M +Rhiannon/M +Rhine/M +Rhineland/M +Rhoda/M +Rhode/S +Rhodes/M +Rhodesia/M +Rhodesian +Rhonda/M +Rhone/M +Ribbentrop/M +Ricardo/M +Rice/M +Rich/M +Richard/MS +Richards/M +Richardson/M +Richelieu/M +Richie/M +Richmond/M +Richter/M +Richthofen/M +Rick/M +Rickenbacker/M +Rickey/M +Rickie/M +Rickover/M +Ricky/M +Rico/M +Riddle/M +Ride/M +Riefenstahl/M +Riel/M +Riemann/M +Riesling/MS +Riga/M +Rigel/M +Riggs/M +Right +Rigoberto/M +Rigoletto/M +Riley/M +Rilke/M +Rimbaud/M +Ringling/M +Ringo/M +Rio/SM +Rios/M +Ripley/M +Risorgimento/M +Rita/M +Ritalin/M +Ritz/M +Rivas/M +Rivera/M +Rivers/M +Riverside +Riviera/MS +Riyadh/M +Rizal/M +Rn/M +Roach/M +Roanoke/M +Rob/M +Robbie/M +Robbin/MS +Robbins/M +Robby/M +Roberson/M +Robert/MS +Roberta/M +Roberto/M +Roberts/M +Robertson/M +Robeson/M +Robespierre/M +Robin/M +Robinson/M +Robitussin/M +Robles/M +Robson/M +Robt/M +Robyn/M +Rocco/M +Rocha/M +Rochambeau/M +Roche/M +Rochelle/M +Rochester/M +Rock/M +Rockefeller/M +Rockford/M +Rockies/M +Rockne/M +Rockwell/M +Rocky/SM +Rod/M +Roddenberry/M +Roderick/M +Rodger/MS +Rodgers/M +Rodin/M +Rodney/M +Rodolfo/M +Rodrick/M +Rodrigo/M +Rodriguez/M +Rodriquez/M +Roeg/M +Roentgen +Rogelio/M +Roger/MS +Rogers/M +Roget/M +Rojas/M +Roku/M +Rolaids/M +Roland/M +Rolando/M +Rolex/M +Rolland/M +Rollerblade/M +Rollins/M +Rolodex/M +Rolvaag/M +Rom +Roman/MS +Romanesque/MS +Romanian/MS +Romano/M +Romanov/M +Romans/M +Romansh/M +Romanticism +Romany/SM +Rome/SM +Romeo/M +Romero/M +Rommel/M +Romney/M +Romulus/M +Ron/M +Ronald/M +Ronda/M +Ronnie/M +Ronny/M +Ronstadt/M +Rontgen +Rooney/M +Roosevelt/M +Root/M +Roquefort/SM +Rorschach/M +Rory/M +Rosa/M +Rosales/M +Rosalie/M +Rosalind/M +Rosalinda/M +Rosalyn/M +Rosanna/M +Rosanne/M +Rosario/M +Roscoe/M +Rose/M +Roseann/M +Roseau/M +Rosecrans/M +Rosella/M +Rosemarie/M +Rosemary/M +Rosenberg/M +Rosendo/M +Rosenzweig/M +Rosetta/M +Rosicrucian/M +Rosie/M +Roslyn/M +Ross/M +Rossetti/M +Rossini/M +Rostand/M +Rostov/M +Rostropovich/M +Roswell/M +Rotarian/M +Roth/M +Rothko/M +Rothschild/M +Rotterdam/M +Rottweiler/M +Rouault/M +Roumania/M +Rourke/M +Rousseau/M +Rove/RM +Rover/M +Rowe/M +Rowena/M +Rowland/M +Rowling/M +Roxanne/M +Roxie/M +Roxy/M +Roy/M +Royal/M +Royce/M +Rozelle/M +Rte +Ru/MH +Rubaiyat/M +Rubbermaid/M +Ruben/SM +Rubens/M +Rubicon/MS +Rubik/M +Rubin/M +Rubinstein/M +Ruby/M +Ruchbah/M +Rudolf/M +Rudolph/M +Rudy/M +Rudyard/M +Rufus/M +Ruhr/M +Ruiz/M +Rukeyser/M +Rumpelstiltskin/M +Rumsfeld/M +Runnymede/M +Runyon/M +Rupert/M +Rush/M +Rushdie/M +Rushmore/M +Ruskin/M +Russ/M +Russel/M +Russell/M +Russia/M +Russian/SM +Russo/M +Rustbelt/M +Rusty/M +Rutan/M +Rutgers/M +Ruth/M +Rutherford/M +Ruthie/M +Rutledge/M +Rwanda/MS +Rwandan/SM +Rwy +Rx +Ry +Ryan/M +Rydberg/M +Ryder/M +Ryukyu/M +S/MN +SA +SAC +SALT/M +SAM/M +SAP/M +SARS/M +SASE +SAT +SBA +SC/M +SCSI/M +SD +SDI +SE/M +SEATO +SEC/M +SF +SGML/M +SIDS/M +SJ +SJW +SK +SLR +SO/S +SOB/M +SOP/M +SOS/M +SOSes +SPCA +SPF +SQL +SRO +SS +SSA +SSE/M +SSS +SST +SSW/M +ST +STD +STOL +SUSE/M +SUV +SVN/M +SW/M +SWAK +SWAT +Saab/M +Saar/M +Saarinen/M +Saatchi/M +Sabbath/M +Sabbaths +Sabik/M +Sabin/M +Sabina/M +Sabine/M +Sabre/M +Sabrina/M +Sacajawea/M +Sacco/M +Sachs/M +Sacramento/M +Sadat/M +Saddam/M +Sadducee/M +Sade/M +Sadie/M +Sadr/M +Safavid/M +Safeway/M +Sagan/M +Saginaw/M +Sagittarius/MS +Sahara/M +Saharan/M +Sahel/M +Saigon/M +Saiph/M +Sakai/M +Sakha/M +Sakhalin/M +Sakharov/M +Saki/M +Saks/M +Sal/MY +Saladin/M +Salado/M +Salamis/M +Salas/M +Salazar/M +Salem/M +Salerno/M +Salinas/M +Salinger/M +Salisbury/M +Salish/M +Salk/M +Sallie/M +Sallust/M +Sally/M +Salome/M +Salonika/M +Salton/M +Salvador/M +Salvadoran/SM +Salvadorean/MS +Salvadorian/MS +Salvatore/M +Salween/M +Salyut/M +Sam/M +Samantha/M +Samar/M +Samara/M +Samaritan/MS +Samarkand/M +Sammie/M +Sammy/M +Samoa/M +Samoan/SM +Samoset/M +Samoyed/M +Sampson/M +Samson/M +Samsonite/M +Samsung/M +Samuel/M +Samuelson/M +San'a +San/M +Sana/M +Sanchez/M +Sancho/M +Sand/ZM +Sandburg/M +Sanders/M +Sandinista/M +Sandoval/M +Sandra/M +Sandy/M +Sanford/M +Sanforized/M +Sang/MR +Sanger/M +Sanhedrin/M +Sanka/M +Sankara/M +Sanskrit/M +Santa/M +Santana/M +Santayana/M +Santeria/M +Santiago/M +Santos/M +Sappho/M +Sapporo/M +Sara/M +Saracen/MS +Saragossa/M +Sarah/M +Sarajevo/M +Saran/M +Sarasota/M +Saratov/M +Sarawak/M +Sardinia/M +Sargasso/M +Sargent/M +Sargon/M +Sarnoff/M +Saroyan/M +Sarto/M +Sartre/M +Sasha/M +Sask +Saskatchewan/M +Saskatoon/M +Sasquatch/MS +Sassanian/M +Sassoon/M +Sat/M +Satan/M +Satanism/M +Satanist/M +Saturday/MS +Saturn/M +Saturnalia/M +Saudi/MS +Saul/M +Saunders/M +Saundra/M +Saussure/M +Sauternes +Savage/M +Savannah/M +Savior/M +Savonarola/M +Savoy/M +Savoyard/M +Sawyer/M +Saxon/MS +Saxony/M +Sayers/M +Sb/M +Sc/M +Scala/M +Scan +Scandinavia/M +Scandinavian/MS +Scaramouch/M +Scarborough/M +Scarlatti/M +Scheat/M +Schedar/M +Scheherazade/M +Schelling/M +Schenectady/M +Schiaparelli/M +Schick/M +Schiller/M +Schindler/M +Schlesinger/M +Schliemann/M +Schlitz/M +Schmidt/M +Schnabel/M +Schnauzer/M +Schneider/M +Schoenberg/M +Schopenhauer/M +Schrieffer/M +Schrodinger/M +Schroeder/M +Schubert/M +Schultz/M +Schulz/M +Schumann/M +Schumpeter/M +Schuyler/M +Schuylkill/M +Schwartz/M +Schwarzenegger/M +Schwarzkopf/M +Schweitzer/M +Schweppes/M +Schwinger/M +Schwinn/M +Scientologist/SM +Scientology/M +Scipio/M +Scopes/M +Scorpio/SM +Scorpius/M +Scorsese/M +Scot/SM +Scotch/MS +Scotchman/M +Scotchmen/M +Scotchwoman/M +Scotchwomen/M +Scotia/M +Scotland/M +Scotsman/M +Scotsmen/M +Scotswoman/M +Scotswomen/M +Scott/M +Scottie/SM +Scottish/M +Scottsdale/M +Scrabble/MS +Scranton/M +Scriabin/M +Scribner/M +Scripture/SM +Scrooge/M +Scruggs/M +Scud/M +Sculley/M +Scylla/M +Scythia/M +Scythian/M +Se/MH +Seaborg/M +Seagram/M +Sean/M +Sears/M +Seattle/M +Sebastian/M +Sec +Seconal/M +Secretariat/M +Secretary +Seder/MS +Sedna/M +Seebeck/M +Seeger/M +Sega/M +Segovia/M +Segre/M +Segundo/M +Seiko/M +Seine/M +Seinfeld/M +Sejong/M +Selassie/M +Selectric/M +Selena/M +Seleucid/M +Seleucus/M +Selim/M +Seljuk/M +Selkirk/M +Sellers/M +Selma/M +Selznick/M +Semarang/M +Seminole/MS +Semiramis/M +Semite/MS +Semitic/SM +Semtex/M +Senate/MS +Sendai/M +Seneca/MS +Senegal/M +Senegalese/M +Senghor/M +Senior/M +Sennacherib/M +Sennett/M +Sensurround/M +Seoul/M +Sep +Sephardi/M +Sepoy/M +Sept/M +September/MS +Septuagint/MS +Sequoya/M +Serb/SM +Serbia/M +Serbian/MS +Serena/M +Serengeti/M +Sergei/M +Sergio/M +Serpens/M +Serra/M +Serrano/M +Set/M +Seth/M +Seton/M +Seurat/M +Seuss/M +Sevastopol/M +Severn/M +Severus/M +Seville/M +Sevres/M +Seward/M +Sextans/M +Sexton/M +Seychelles/M +Seyfert/M +Seymour/M +Sgt +Shackleton/M +Shaffer/M +Shah/M +Shaka/M +Shaker +Shakespeare/M +Shakespearean/M +Shana/M +Shane/M +Shanghai/M +Shankara/M +Shanna/M +Shannon/M +Shantung/M +Shapiro/M +Shari'a/M +Shari/M +Sharif/M +Sharlene/M +Sharon/M +Sharp/M +Sharpe/M +Sharron/M +Shasta/M +Shaula/M +Shaun/M +Shauna/M +Shavian/M +Shavuot/M +Shaw/M +Shawn/M +Shawna/M +Shawnee/SM +Shcharansky/M +Shea/M +Sheba/M +Shebeli/M +Sheena/M +Sheetrock/M +Sheffield/M +Sheila/M +Shelby/M +Sheldon/M +Shelia/M +Shell/M +Shelley/M +Shelly/M +Shelton/M +Shenandoah/M +Shenyang/M +Sheol/M +Shepard/M +Shepherd/M +Sheppard/M +Sheratan/M +Sheraton/M +Sheree/M +Sheri/M +Sheridan/M +Sherlock/M +Sherman/M +Sherpa/M +Sherri/M +Sherrie/M +Sherry/M +Sherwood/M +Sheryl/M +Shetland/SM +Shetlands/M +Shevardnadze/M +Shevat/M +Shi'ite/M +Shields/M +Shiite/MS +Shijiazhuang/M +Shikoku/M +Shillong/M +Shiloh/M +Shinto/MS +Shintoism/MS +Shintoist/MS +Shiraz/M +Shirley/M +Shiva/M +Shockley/M +Short/M +Shorthorn/M +Shoshone/SM +Shostakovitch/M +Shrek/M +Shreveport/M +Shriner/M +Shropshire/M +Shula/M +Shylock/M +Shylockian/M +Si/M +Siam/M +Siamese/M +Sibelius/M +Siberia/M +Siberian/MS +Sibyl/M +Sicilian/SM +Sicily/M +Sid/M +Siddhartha/M +Sidney/M +Siegfried/M +Siemens/M +Sierpinski/M +Sierras +Sigismund/M +Sigmund/M +Sigurd/M +Sihanouk/M +Sikh/M +Sikhism +Sikhs +Sikkim/M +Sikkimese/M +Sikorsky/M +Silas/M +Silesia/M +Silurian/SM +Silva/M +Silvia/M +Simenon/M +Simmental/M +Simmons/M +Simon/M +Simone/M +Simpson/SM +Simpsons/M +Sims/M +Sinai/M +Sinatra/M +Sinbad/M +Sinclair/M +Sindbad/M +Sindhi/M +Singapore/M +Singaporean/SM +Singer/M +Singh/M +Singleton/M +Sinhalese/M +Sinkiang/M +Sioux/M +Sir/SM +Sirius/M +Sistine/M +Sisyphean/M +Sisyphus/M +Siva/M +Sivan/M +Sjaelland/M +Skinner/M +Skippy/M +Skopje/M +Skye/M +Skylab/M +Skype/M +Slackware/M +Slashdot/M +Slater/M +Slav/SM +Slavic/M +Slavonic/M +Slinky/M +Sloan/M +Sloane/M +Slocum/M +Slovak/SM +Slovakia/M +Slovakian +Slovene/SM +Slovenia/M +Slovenian/MS +Slurpee/M +Sm/M +Small/M +Smetana/M +Smirnoff/M +Smith/M +Smithson/M +Smithsonian/M +Smokey/M +Smolensk/M +Smollett/M +Smuts/M +Smyrna +Sn/M +Snake/M +Snapple/M +Snead/M +Snell/M +Snickers/M +Snider/M +Snoopy/M +Snow/M +Snowbelt/M +Snyder/M +Soave/M +Soc +Socorro/M +Socrates/M +Socratic/M +Soddy/M +Sodom/M +Sofia/M +Soho/M +Sol/M +Solis/M +Solomon/M +Solon/M +Solzhenitsyn/M +Somali/SM +Somalia/M +Somalian/MS +Somme/M +Somoza/M +Son/M +Sondheim/M +Sondra/M +Songhai/M +Songhua/M +Sonia/M +Sonja/M +Sonny/M +Sonora/M +Sontag/M +Sony/M +Sonya/M +Sophia/M +Sophie/M +Sophoclean/M +Sophocles/M +Sopwith/M +Sorbonne/M +Sosa/M +Soto/M +Souphanouvong/M +Sourceforge/M +Sousa/M +South/M +Southampton/M +Southeast/MS +Southerner/SM +Southey/M +Souths +Southwest/MS +Soviet/M +Soweto/M +Soyinka/M +Soyuz/M +Sp +Spaatz/M +Spackle/M +Spahn/M +Spain/M +Spam/M +Span +Spanglish +Spaniard/SM +Spanish/M +Sparks/M +Sparta/M +Spartacus/M +Spartan/MS +Spears/M +Speer/M +Spence/RM +Spencer/M +Spencerian/M +Spengler/M +Spenglerian/M +Spenser/M +Spenserian/M +Sperry/M +Sphinx/M +Spica/M +Spielberg/M +Spillane/M +Spinoza/M +Spinx/M +Spiro/M +Spirograph/M +Spitsbergen/M +Spitz/M +Spock/M +Spokane/M +Springfield/M +Springsteen/M +Sprint/M +Sprite/M +Sputnik/M +Sq +Squanto/M +Squibb/M +Sr/M +Srinagar/M +Srivijaya/M +St +Sta +Stacey/M +Staci/M +Stacie/M +Stacy/M +Stael/M +Stafford/M +StairMaster/M +Stalin/M +Stalingrad/M +Stalinist/M +Stallone/M +Stamford/M +Stan/M +Standish/M +Stanford/M +Stanislavsky/M +Stanley/M +Stanton/M +Staples/M +Starbucks/M +Stark/M +Starkey/M +Starr/M +Staten/M +States +Staubach/M +Ste +Steadicam/M +Steele/M +Stefan/M +Stefanie/M +Stein/MR +Steinbeck/M +Steinem/M +Steiner/M +Steinmetz/M +Steinway/M +Stella/M +Stendhal/M +Stengel/M +Stephan/M +Stephanie/M +Stephen/MS +Stephens/M +Stephenson/M +Sterling/M +Stern/M +Sterne/M +Sterno/M +Stetson/M +Steuben/M +Steve/M +Steven/MS +Stevens/M +Stevenson/M +Stevie/M +Stewart/M +Stieglitz/M +Stilton/SM +Stimson/M +Stine/M +Stirling/M +Stockhausen/M +Stockholm/M +Stockton/M +Stoic/SM +Stoicism/MS +Stokes/M +Stolichnaya/M +Stolypin/M +Stone/M +Stonehenge/M +Stoppard/M +Stout/M +Stowe/M +Strabo/M +Stradivari +Stradivarius/M +Strasbourg/M +Strauss/M +Stravinsky/M +Streisand/M +Strickland/M +Strindberg/M +Stromboli/M +Strong/M +Stu/M +Stuart/MS +Studebaker/M +Stuttgart/M +Stuyvesant/M +Stygian/M +Styrofoam/SM +Styron/M +Styx/M +Suarez/M +Subaru/M +Sucre/M +Sucrets/M +Sudan/M +Sudanese/M +Sudetenland/M +Sudoku/M +Sudra/M +Sue/M +Suetonius/M +Suez/M +Suffolk/M +Sufi/M +Sufism/M +Suharto/M +Sui/M +Sukarno/M +Sukkot +Sulawesi/M +Suleiman/M +Sulla/M +Sullivan/M +Sumatra/M +Sumatran/SM +Sumeria/M +Sumerian/SM +Summer/MS +Summers/M +Sumner/M +Sumter/M +Sun/SM +Sunbeam/M +Sunbelt/M +Sundanese/M +Sundas/M +Sunday/MS +Sung/M +Sunkist/M +Sunni/SM +Sunnite/MS +Sunnyvale/M +Superbowl/M +Superfund/M +Superglue/M +Superior/M +Superman/M +Supt +Surabaya/M +Surat/M +Suriname/M +Surinamese +Surya/M +Susan/M +Susana/M +Susanna/M +Susanne/M +Susie/M +Susquehanna/M +Sussex/M +Sutherland/M +Sutton/M +Suva/M +Suwanee/M +Suzanne/M +Suzette/M +Suzhou/M +Suzuki/M +Suzy/M +Svalbard/M +Sven/M +Svengali/M +Sverdlovsk +Swahili/SM +Swammerdam/M +Swanee/M +Swansea/M +Swanson/M +Swazi/SM +Swaziland/M +Swed/N +Swede/SM +Sweden/M +Swedenborg/M +Swedish/M +Sweeney/M +Sweet/M +Swift/M +Swinburne/M +Swiss/MS +Swissair/M +Switz +Switzerland/M +Sybil/M +Sydney/M +Sykes/M +Sylvester/M +Sylvia/M +Sylvie/M +Synge/M +Syracuse/M +Syria/M +Syriac/M +Syrian/MS +Szilard/M +Szymborska/M +T'ang/M +T/MDG +TA +TARP +TB/M +TBA +TD +TDD +TEFL +TELNET/S +TELNETTed +TELNETTing +TESL +TESOL +TGIF +THC +TKO/M +TLC/M +TM +TN +TNT/M +TOEFL +TQM +TV/SM +TVA +TWA/M +TWX +TX +Ta/M +Tabasco/SM +Tabatha/M +Tabernacle/MS +Tabitha/M +Tabriz/MS +Tacitus/M +Tacoma/M +Tad/M +Tadzhik/M +Taegu/M +Taejon/M +Taft/M +Tagalog/SM +Tagore/M +Tagus/M +Tahiti/M +Tahitian/MS +Tahoe/M +Taichung/M +Tainan +Taine/M +Taipei/M +Taiping/M +Taiwan/M +Taiwanese/M +Taiyuan/M +Tajikistan/M +Taklamakan/M +Talbot/M +Taliban/M +Taliesin/M +Tallahassee/M +Tallchief/M +Talley/M +Talleyrand/M +Tallinn/M +Talmud/MS +Talmudic +Talmudist +Tamara/M +Tameka/M +Tamera/M +Tamerlane/M +Tami/M +Tamika/M +Tamil/MS +Tammany/M +Tammi/M +Tammie/M +Tammuz/M +Tammy/M +Tampa/M +Tampax/M +Tamra/M +Tamworth/M +Tancred/M +Taney/M +Tanganyika/M +Tangier/MS +Tangshan/M +Tania/M +Tanisha/M +Tanner/M +Tannhauser/M +Tantalus/M +Tanya/M +Tanzania/M +Tanzanian/SM +Tao/M +Taoism/MS +Taoist/MS +Tara/M +Tarantino/M +Tarawa/M +Tarazed/M +Tarbell/M +Target/M +Tarim/M +Tarkenton/M +Tarkington/M +Tartary/M +Tartuffe/M +Tarzan/M +Tasha/M +Tashkent/M +Tasman/M +Tasmania/M +Tasmanian/M +Tass/M +Tatar/MS +Tate/M +Tatum/M +Taurus/MS +Tawney/M +Taylor/M +Tb/M +Tbilisi/M +Tc/M +Tchaikovsky/M +Te/M +TeX +TeXes +Teasdale/M +Technicolor/M +Tecumseh/M +Ted/M +Teddy/M +Teflon/MS +Tegucigalpa/M +Tehran +TelePrompTer +TelePrompter/M +Telemachus/M +Telemann/M +Teletype +Tell/MR +Teller/M +Telugu/M +Tempe +Templar/M +Tenn/M +Tennessean/SM +Tennessee/M +Tennyson/M +Tenochtitlan/M +Teotihuacan/M +Terence/M +Teresa/M +Tereshkova/M +Teri/M +Terkel/M +Terpsichore/M +Terr/M +Terra/M +Terran/M +Terrance/M +Terrell/M +Terrence/M +Terri/M +Terrie/M +Terry/M +Tertiary/M +Tesla/M +Tess/M +Tessa/M +Tessie/M +Tet/M +Tethys/M +Tetons/M +Teuton/MS +Teutonic/M +Tevet/M +Tex/M +Texaco/M +Texan/MS +Texas/M +Th/M +Thackeray/M +Thad/M +Thaddeus/M +Thai/SM +Thailand/M +Thales/M +Thalia/M +Thames/M +Thanh/M +Thanksgiving/MS +Thant/M +Thar/M +Tharp/M +Thatcher/M +Thea/M +Thebes/M +Theiler/M +Thelma/M +Themistocles/M +Theocritus/M +Theodora/M +Theodore/M +Theodoric/M +Theodosius/M +Theosophy/M +Theravada/M +Theresa/M +Therese/M +Thermopylae/M +Thermos +Theron/M +Theseus/M +Thespian/M +Thespis/M +Thessalonian/SM +Thessaloniki/M +Thessaly/M +Thieu/M +Thimbu/M +Thimphu +Thomas/M +Thomism/M +Thomistic/M +Thompson/M +Thomson/M +Thor/M +Thorazine/M +Thoreau/M +Thornton/M +Thoroughbred/M +Thorpe/M +Thoth/M +Thrace/M +Thracian/M +Thu +Thucydides/M +Thule/M +Thunderbird/M +Thur/S +Thurber/M +Thurman/M +Thurmond/M +Thursday/SM +Thutmose/M +Ti/M +Tia/M +Tianjin/M +Tiber/M +Tiberius/M +Tibet/M +Tibetan/MS +Ticketmaster/M +Ticonderoga/M +Tide/M +Tienanmen/M +Tiffany/M +Tigris/M +Tijuana/M +Tillich/M +Tillman/M +Tilsit/M +Tim/M +Timbuktu/M +Timex/M +Timmy/M +Timon/M +Timothy/M +Timour/M +Timur/M +Timurid/M +Tina/M +Ting/M +Tinkerbell/M +Tinkertoy/M +Tinseltown/M +Tintoretto/M +Tippecanoe/M +Tipperary/M +Tirane +Tiresias/M +Tirol/M +Tirolean +Tisha/M +Tishri/M +Titan/SM +Titania/M +Titanic/M +Titian/M +Titicaca/M +Tito/M +Titus/M +Tl/M +Tlaloc/M +Tlingit/M +Tm/M +Tobago/M +Tobit/M +Toby/M +Tocantins/M +Tocqueville/M +Tod/M +Todd/M +Togo/M +Togolese/M +Tojo/M +Tokay/M +Tokugawa/M +Tokyo/M +Tokyoite +Toledo/MS +Tolkien/M +Tolstoy/M +Toltec/M +Tolyatti/M +Tom/M +Tomas/M +Tombaugh/M +Tomlin/M +Tommie/M +Tommy/M +Tompkins/M +Tomsk/M +Tonga/M +Tongan/MS +Toni/M +Tonia/M +Tonto/M +Tony/M +Tonya/M +Topeka/M +Topsy/M +Torah/M +Torahs +Toronto/M +Torquemada/M +Torrance/M +Torrens/M +Torres/M +Torricelli/M +Tortola/M +Tortuga/M +Torvalds/M +Tory/SM +Tosca/M +Toscanini/M +Toshiba/M +Toto/M +Toulouse/M +Townes/M +Townsend/M +Toynbee/M +Toyoda/M +Toyota/M +Tracey/M +Traci/M +Tracie/M +Tracy/M +Trafalgar/M +Trailways/M +Trajan/M +Tran/M +Transcaucasia/M +Transvaal/M +Transylvania/M +Transylvanian/M +Trappist/SM +Travis/M +Travolta/M +Treasury/SM +Treblinka/M +Trekkie/M +Trent/M +Trenton/M +Trevelyan/M +Trevino/M +Trevor/M +Trey/M +Triangulum/M +Triassic/M +Tricia/M +Trident/M +Trieste/M +Trimurti/M +Trina/M +Trinidad/M +Trinidadian/MS +Trinity/SM +Tripitaka/M +Tripoli/M +Trippe/M +Trisha/M +Tristan/M +Triton/M +Trobriand/M +Troilus/M +Trojan/MS +Trollope/M +Trondheim/M +Tropicana/M +Trotsky/M +Troy/M +Troyes +Truckee/M +Trudeau/M +Trudy/M +Truffaut/M +Trujillo/M +Truman/M +Trumbull/M +Trump/M +Truth/M +Tsimshian/M +Tsiolkovsky/M +Tsitsihar/M +Tsongkhapa/M +Tswana/M +Tu/M +Tuamotu/M +Tuareg/M +Tubman/M +Tucker/M +Tucson/M +Tucuman/M +Tudor/SM +Tue/S +Tues/M +Tuesday/MS +Tulane/M +Tull/M +Tulsa/M +Tulsidas/M +Tums/M +Tungus/M +Tunguska/M +Tunis/M +Tunisia/M +Tunisian/MS +Tunney/M +Tupi/M +Tupperware/M +Tupungato/M +Turgenev/M +Turin/M +Turing/M +Turk/SM +Turkestan/M +Turkey/M +Turkic/MS +Turkish/M +Turkmenistan/M +Turner/M +Turpin/M +Tuscaloosa/M +Tuscan/M +Tuscany/M +Tuscarora/MS +Tuscon/M +Tuskegee/M +Tussaud/M +Tut/M +Tutankhamen/M +Tutsi/M +Tutu/M +Tuvalu/M +Tuvaluan +Twain/M +Tweed/M +Tweedledee/M +Tweedledum/M +Twila/M +Twinkies/M +Twitter/M +Twizzlers/M +Twp +Ty/M +Tycho/M +Tylenol/M +Tyler/M +Tyndale/M +Tyndall/M +Tyre/M +Tyree/M +Tyrolean +Tyrone/M +Tyson/M +U/M +UAR +UAW +UBS/M +UCLA/M +UFO/SM +UHF/M +UK/M +UL +UN/M +UNESCO/M +UNICEF/M +UNIX/M +UPC +UPI/M +UPS/M +URL/S +US/M +USA/M +USAF +USB +USCG +USDA/M +USIA +USMC +USN +USO +USP +USPS +USS +USSR/M +UT/M +UTC +UV/M +Ubangi/M +Ubuntu/M +Ucayali/M +Uccello/M +Udall/M +Ufa/M +Uganda/M +Ugandan/MS +Uighur/M +Ujungpandang/M +Ukraine/M +Ukrainian/SM +Ulster/M +Ultrasuede/M +Ulyanovsk/M +Ulysses/M +Umbriel/M +Underwood/M +Ungava/M +Unicode/M +Unilever/M +Union/SM +Unionist +Uniroyal/M +Unitarian/MS +Unitarianism/MS +Unitas/M +Unix/S +Unukalhai/M +Upanishads/M +Updike/M +Upjohn/M +Upton/M +Ur/M +Ural/SM +Urals/M +Urania/M +Uranus/M +Urban/M +Urdu/M +Urey/M +Uriah/M +Uriel/M +Uris/M +Urquhart/M +Ursa/M +Ursula/M +Ursuline/M +Uruguay/M +Uruguayan/MS +Urumqi/M +Usenet/MS +Ustinov/M +Ut +Utah/M +Utahan/MS +Ute/SM +Utopia/SM +Utopian/SM +Utrecht/M +Utrillo/M +Uzbek/M +Uzbekistan/M +Uzi/SM +V/M +VA +VAT/M +VAX +VAXes +VCR/M +VD/M +VDT +VDU +VF +VFW/M +VG +VGA +VHF/M +VHS +VI/M +VIP/SM +VISTA +VJ +VLF/M +VOA +VP +VT +VTOL +Va/M +Vader/M +Vaduz/M +Val/M +Valarie/M +Valdez/M +Valencia/SM +Valenti/M +Valentin/M +Valentine/M +Valentino/M +Valenzuela/M +Valeria/M +Valerian/M +Valerie/M +Valery/M +Valhalla/M +Valium/MS +Valkyrie/SM +Vallejo +Valletta/M +Valois/M +Valparaiso/M +Valvoline/M +Van/M +Vance/M +Vancouver/M +Vandal/MS +Vanderbilt/M +Vandyke/M +Vanessa/M +Vang/M +Vanuatu/M +Vanzetti/M +Varanasi/M +Varese/M +Vargas/M +Vaseline/SM +Vasquez/M +Vassar/M +Vatican/M +Vauban/M +Vaughan/M +Vaughn/M +Vazquez/M +Veblen/M +Veda/SM +Vedanta/M +Vega/SM +Vegas/M +Vegemite/M +Vela/M +Velasquez/M +Velazquez/M +Velcro/MS +Velez/M +Velma/M +Velveeta/M +Venetian/SM +Venezuela/M +Venezuelan/SM +Venice/M +Venn/M +Ventolin/M +Venus/MS +Venusian/M +Vera/M +Veracruz/M +Verde/M +Verdi/M +Verdun/M +Verizon/M +Verlaine/M +Vermeer/M +Vermont/ZMR +Vermonter/M +Vern/M +Verna/M +Verne/M +Vernon/M +Verona/M +Veronese/M +Veronica/M +Versailles/M +Vesalius/M +Vespasian/M +Vespucci/M +Vesta/M +Vesuvius/M +Viacom/M +Viagra/M +Vic/M +Vicente/M +Vichy/M +Vicki/M +Vickie/M +Vicksburg/M +Vicky/M +Victor/M +Victoria/M +Victorian/MS +Victorianism +Victrola/M +Vidal/M +Vienna/M +Viennese/M +Vientiane/M +Vietcong/M +Vietminh/M +Vietnam/M +Vietnamese/M +Vijayanagar/M +Vijayawada/M +Viking/MS +Vila/M +Villa/M +Villarreal/M +Villon/M +Vilma/M +Vilnius/M +Vilyui/M +Vince/M +Vincent/M +Vindemiatrix/M +Vinson/M +Viola/M +Violet/M +Virgie/M +Virgil/M +Virginia/M +Virginian/SM +Virgo/SM +Visa/M +Visayans/M +Vishnu/M +Visigoth/M +Visigoths +Vistula/M +Vitim/M +Vito/M +Vitus/M +Vivaldi/M +Vivekananda/M +Vivian/M +Vivienne/M +Vlad/M +Vladimir/M +Vladivostok/M +Vlaminck/M +Vlasic/M +VoIP +Vogue/M +Volcker/M +Voldemort/M +Volga/M +Volgograd/M +Volkswagen/M +Volstead/M +Volta/M +Voltaire/M +Volvo/M +Vonda/M +Vonnegut/M +Voronezh/M +Vorster/M +Voyager/M +Vt +Vuitton/M +Vulcan/M +Vulg +Vulgate/SM +W/MDT +WA +WAC +WASP/M +WATS/M +WC +WHO/M +WI +WMD +WNW/M +WP +WSW/M +WTO +WV +WW +WWI +WWII +WWW/M +WY +WYSIWYG +Wabash/M +Wac +Waco/M +Wade/M +Wagner/M +Wagnerian/M +Wahhabi/M +Waikiki/M +Waite/M +Wake/M +Waksman/M +Wald/MN +Waldemar/M +Walden/M +Waldensian/M +Waldheim/M +Waldo/M +Waldorf/M +Wales/M +Walesa/M +Walgreen/M +Walker/M +Walkman/M +Wall/SMR +Wallace/M +Wallenstein/M +Waller/M +Wallis/M +Walloon/M +Walls/M +Walmart/M +Walpole/M +Walpurgisnacht/M +Walsh/M +Walt/MRZ +Walter/M +Walters/M +Walton/M +Wanamaker/M +Wanda/M +Wang/M +Wankel/M +Ward/M +Ware/MG +Warhol/M +Waring/M +Warner/M +Warren/M +Warsaw/M +Warwick/M +Wasatch/M +Wash/M +Washington/M +Washingtonian/MS +Wassermann/M +Waterbury/M +Waterford/M +Watergate/M +Waterloo/MS +Waters/M +Watkins/M +Watson/M +Watt/SM +Watteau/M +Watts/M +Watusi/M +Waugh/M +Wave +Wayne/M +Weaver/M +Web/MR +Webb/M +Weber/M +Webern/M +Webster/MS +Wed/M +Weddell/M +Wedgwood/M +Wednesday/MS +Weeks/M +Wehrmacht/M +Wei/M +Weierstrass/M +Weill/M +Weinberg/M +Weiss/M +Weissmuller/M +Weizmann/M +Weldon/M +Welland/M +Weller/M +Welles/M +Wellington/SM +Wells/M +Welsh/M +Welshman/M +Welshmen/M +Welshwoman +Wendell/M +Wendi/M +Wendy/M +Wesak/M +Wesley/M +Wesleyan/M +Wessex/M +Wesson/M +West/SM +Western/MRS +Westinghouse/M +Westminster/M +Weston/M +Westphalia/M +Weyden/M +Wezen/M +Wharton/M +Wheaties/M +Wheatstone/M +Wheeler/M +Wheeling/M +Whig/SM +Whipple/M +Whirlpool/M +Whistler/M +Whitaker/M +White/SM +Whitefield/M +Whitehall/M +Whitehead/M +Whitehorse/M +Whiteley/M +Whitfield/M +Whitley/M +Whitman/M +Whitney/M +Whitsunday/MS +Whittier/M +WiFi +Wicca/M +Wichita/M +Wiemar/M +Wiesel/M +Wiesenthal/M +Wiggins/M +Wigner/M +Wii/M +Wikileaks +Wikipedia/M +Wilberforce/M +Wilbert/M +Wilbur/M +Wilburn/M +Wilcox/M +Wilda/M +Wilde/MR +Wilder/M +Wiles/M +Wiley/M +Wilford/M +Wilfred/M +Wilfredo/M +Wilhelm/M +Wilhelmina/M +Wilkerson/M +Wilkes/M +Wilkins/M +Wilkinson/M +Will/M +Willa/M +Willamette/M +Willard/M +Willemstad/M +William/SM +Williams/M +Williamson/M +Willie/M +Willis/M +Willy/M +Wilma/M +Wilmer/M +Wilmington/M +Wilson/M +Wilsonian/M +Wilton/M +Wimbledon/M +Wimsey/M +Winchell/M +Winchester/MS +Windbreaker/M +Windex/M +Windhoek/M +Windows/M +Windsor/SM +Windward/M +Winesap/M +Winfred/M +Winfrey/M +Winifred/M +Winkle/M +Winnebago/M +Winnie/M +Winnipeg/M +Winston/M +Winters/M +Winthrop/M +Wis +Wisc +Wisconsin/M +Wisconsinite/MS +Wise/M +Witt/M +Wittgenstein/M +Witwatersrand/M +Wm/M +Wobegon/M +Wodehouse/M +Wolf/M +Wolfe/M +Wolff/M +Wolfgang/M +Wollongong/M +Wollstonecraft/M +Wolsey/M +Wolverhampton +Wonder/M +Wonderbra/M +Wong/M +Wood/SM +Woodard/M +Woodhull/M +Woodrow/M +Woods/M +Woodstock/M +Woodward/M +Woolf/M +Woolite/M +Woolongong/M +Woolworth/M +Wooster/M +Wooten/M +Worcester/SM +Worcestershire/M +Wordsworth/M +Workman/M +Worms/M +Wotan/M +Wovoka/M +Wozniak/M +Wozzeck/M +Wrangell/M +Wren/M +Wright/M +Wrigley/M +Wroclaw/M +Wu/M +Wuhan/M +Wurlitzer/M +Wyatt/M +Wycherley/M +Wycliffe/M +Wyeth/M +Wylie/M +Wynn/M +Wyo +Wyoming/M +Wyomingite/SM +X/M +XEmacs/M +XL/M +XML +XS +XXL +Xanadu/M +Xanthippe/M +Xavier/M +Xe/SM +Xenakis/M +Xenia/M +Xenophon/M +Xerox/MS +Xerxes/M +Xhosa/M +Xi'an/M +Xian/SM +Xiaoping/M +Ximenes/M +Xingu/M +Xiongnu/M +Xmas/MS +Xochipilli/M +Xuzhou/M +Y/M +YMCA/M +YMHA +YMMV +YT +YWCA/M +YWHA +Yacc/M +Yahoo/M +Yahtzee/M +Yahweh/M +Yakima/M +Yakut/M +Yakutsk/M +Yale/M +Yalow/M +Yalta/M +Yalu/M +Yamagata/M +Yamaha/M +Yamoussoukro/M +Yang/M +Yangon/M +Yangtze/M +Yank/SM +Yankee/SM +Yaobang/M +Yaounde/M +Yaqui/M +Yaren +Yaroslavl/M +Yataro/M +Yates/M +Yb/M +Yeager/M +Yeats/M +Yekaterinburg/M +Yellowknife/M +Yellowstone/M +Yeltsin/M +Yemen/M +Yemeni/SM +Yemenite +Yenisei/M +Yerevan/M +Yerkes/M +Yesenia/M +Yevtushenko/M +Yggdrasil/M +Yiddish/M +Ymir/M +Yoda/M +Yoknapatawpha/M +Yoko/M +Yokohama/M +Yolanda/M +Yong/M +Yonkers/M +York/M +Yorkie/M +Yorkshire/MS +Yorktown/M +Yoruba/M +Yosemite/M +Yossarian/M +YouTube/M +Young/M +Youngstown/M +Ypres/M +Ypsilanti/M +Yuan/M +Yucatan/M +Yugo/M +Yugoslav/MS +Yugoslavia/M +Yugoslavian/SM +Yukon/M +Yule/SM +Yuletide/MS +Yuma/SM +Yunnan/M +Yuri/M +Yves/M +Yvette/M +Yvonne/M +Z/SMNXT +Zachariah/M +Zachary/M +Zachery/M +Zagreb/M +Zaire/M +Zairian +Zambezi/M +Zambia/M +Zambian/SM +Zamboni/M +Zamenhof/M +Zamora/M +Zane/M +Zanuck/M +Zanzibar/M +Zapata/M +Zaporozhye/M +Zapotec/M +Zappa/M +Zara/M +Zarathustra/M +Zealand/M +Zebedee/M +Zechariah/M +Zedekiah/M +Zedong/M +Zeffirelli/M +Zeke/M +Zelig/M +Zelma/M +Zen/M +Zenger/M +Zeno/M +Zephaniah/M +Zephyrus/M +Zest/M +Zeus/M +Zhdanov +Zhengzhou/M +Zhivago/M +Zhukov/M +Zibo/M +Ziegfeld/M +Ziegler/M +Ziggy/M +Zika +Zimbabwe/M +Zimbabwean/SM +Zimmerman/M +Zinfandel/M +Zion/SM +Zionism/SM +Zionist/SM +Ziploc/M +Zn/M +Zoe/M +Zola/M +Zollverein/M +Zoloft/M +Zomba/M +Zorn/M +Zoroaster/M +Zoroastrian/MS +Zoroastrianism/SM +Zorro/M +Zosma/M +Zr/M +Zsigmondy/M +Zubenelgenubi/M +Zubeneschamali/M +Zukor/M +Zulu/SM +Zululand +Zuni/M +Zurich/M +Zwingli/M +Zworykin/M +Zyrtec/M +Zyuganov/M +Zzz +a/S +aah +aardvark/SM +ab/SDY +aback +abacus/MS +abaft +abalone/SM +abandon/LSDG +abandonment/M +abase/LGDS +abasement/M +abash/GLDS +abashed/UY +abashment/M +abate/LGDS +abated/U +abatement/M +abattoir/MS +abbe/SM +abbess/MS +abbey/MS +abbot/MS +abbr +abbrev/S +abbreviate/DSGNX +abbreviation/M +abdicate/GNDSX +abdication/M +abdomen/SM +abdominal +abduct/DSG +abductee/MS +abduction/SM +abductor/MS +abeam +aberrant +aberration/MS +aberrational +abet/S +abetted +abetter/SM +abetting +abeyance/M +abhor/S +abhorred +abhorrence/M +abhorrent/Y +abhorring +abidance/M +abide/GS +abiding/Y +ability/IEMS +abject/YP +abjection/M +abjectness/M +abjuration/SM +abjuratory +abjure/ZGDRS +abjurer/M +ablate/XGNVDS +ablation/M +ablative/MS +ablaze +able/UT +abler +abloom +ablution/SM +abnegate/GNDS +abnegation/M +abnormal/Y +abnormality/SM +aboard +abode/MS +abolish/GDS +abolition/M +abolitionism/M +abolitionist/SM +abominable +abominably +abominate/DSGNX +abomination/M +aboriginal/MS +aborigine/SM +aborning +abort/GVDS +abortion/MS +abortionist/MS +abortive/Y +abound/DSG +about +above/M +aboveboard +abracadabra/M +abrade/GDS +abrasion/MS +abrasive/MYPS +abrasiveness/M +abreast +abridge/DSLG +abridgement/MS +abroad +abrogate/XGNDS +abrogation/M +abrogator/MS +abrupt/TPRY +abruptness/M +abs/M +abscess/MDSG +abscissa/SM +abscission/M +abscond/ZGSDR +absconder/M +abseil/MDSG +absence/SM +absent/DYSG +absentee/MS +absenteeism/M +absentminded/YP +absentmindedness/M +absinth/M +absinthe/M +absolute/PMYTNS +absoluteness/M +absolution/M +absolutism/M +absolutist/MS +absolve/DSG +absorb/AGDS +absorbance +absorbency/M +absorbent/SM +absorbing/Y +absorption/M +absorptive +abstain/DRZGS +abstainer/M +abstemious/PY +abstemiousness/M +abstention/MS +abstinence/M +abstinent +abstract/GSPMDY +abstracted/YP +abstractedness/M +abstraction/SM +abstractness/MS +abstruse/YP +abstruseness/M +absurd/TPRY +absurdist/MS +absurdity/SM +absurdness/M +abundance/SM +abundant/Y +abuse's +abuse/EGVDS +abuser/MS +abusive/YP +abusiveness/M +abut/SL +abutment/MS +abutted +abutting +abuzz +abysmal/Y +abyss/MS +abyssal +ac +acacia/MS +academe/M +academia/M +academic/SM +academical/Y +academician/MS +academy/SM +acanthus/MS +accede/GDS +accelerate/GNXDS +acceleration/M +accelerator/SM +accent/MDSG +accented/U +accentual +accentuate/GNDS +accentuation/M +accept/DSBG +acceptability/M +acceptableness/M +acceptably/U +acceptance/SM +acceptation/MS +accepted/U +access/MDSG +accessibility/IM +accessible/I +accessibly/I +accession/MDGS +accessorise/DSG +accessory/SM +accident/MS +accidental/SMY +acclaim/MDGS +acclamation/M +acclimate/DSGN +acclimation/M +acclimatisation/M +acclimatise/DSG +acclivity/SM +accolade/SM +accommodate/XGNDS +accommodating/Y +accommodation/M +accompanied/U +accompaniment/MS +accompanist/SM +accompany/DSG +accomplice/SM +accomplish/DSLG +accomplished/U +accomplishment/MS +accord/GMDS +accordance/M +accordant +according/Y +accordion/MS +accordionist/MS +accost/GMDS +account/MDSBG +accountability/M +accountable/U +accountancy/M +accountant/MS +accounted/U +accounting/M +accouterments's +accoutre/DSG +accoutrements +accredit/SGD +accreditation/M +accredited/U +accretion/MS +accrual/MS +accrue/GDS +acct +acculturate/DSGN +acculturation/M +accumulate/XGNVDS +accumulation/M +accumulator/MS +accuracy/IM +accurate/IY +accurateness/M +accursed/P +accursedness/M +accusation/MS +accusative/MS +accusatory +accuse/ZGDRS +accuser/M +accusing/Y +accustom/DSG +accustomed/U +ace/DSMG +acerbate/DSG +acerbic +acerbically +acerbity/M +acetaminophen/M +acetate/MS +acetic +acetone/M +acetonic +acetyl +acetylene/M +ache/DSMG +achene/MS +achieve/BLZGDRS +achievement/SM +achiever/M +aching/Y +achoo/M +achromatic +achy/TR +acid/SMY +acidic +acidify/GDS +acidity/M +acidosis/M +acidulous +acknowledge/DSGL +acknowledged/U +acknowledgement/MS +acme/SM +acne/M +acolyte/MS +aconite/MS +acorn/MS +acoustic/S +acoustical/Y +acoustics/M +acquaint/AGSD +acquaintance/SM +acquaintanceship/M +acquainted/U +acquiesce/DSG +acquiescence/M +acquiescent/Y +acquire/ZGBDRSL +acquirement/M +acquisition/MS +acquisitive/YP +acquisitiveness/M +acquit/S +acquittal/MS +acquitted +acquitting +acre/SM +acreage/MS +acrid/PTRY +acridity/M +acridness/M +acrimonious/YP +acrimoniousness/M +acrimony/M +acrobat/MS +acrobatic/S +acrobatically +acrobatics/M +acronym/MS +acrophobia/M +acropolis/MS +across +acrostic/SM +acrylamide +acrylic/MS +act's +act/ASDGV +acting/M +actinium/M +action/ASM +actionable +activate/ICANGSD +activation/ICAM +activator/MS +active's +active/IKY +activeness/M +actives +activism/M +activist/MS +activities +activity/IM +actor/AMS +actress/MS +actual/Y +actualisation/M +actualise/GDS +actuality/SM +actuarial +actuary/SM +actuate/GNDS +actuation/M +actuator/SM +acuity/M +acumen/M +acupressure/M +acupuncture/M +acupuncturist/SM +acute/PMYTRS +acuteness/M +acyclovir/M +acyl +ad/SM +adage/MS +adagio/MS +adamant/MY +adapt/BGVDS +adaptability/M +adaptation/MS +adaption/S +adaptor/MS +add/SDRBZG +addend/MS +addenda +addendum/M +adder/M +addict/GVMDS +addiction/SM +addition/SM +additional/Y +additive/SM +addle/GDS +address's +address/AGDS +addressable +addressed/U +addressee/SM +adduce/GDS +adenine/M +adenocarcinoma +adenoid/SM +adenoidal +adept/MYPS +adeptness/M +adequacy/IM +adequate/IY +adequateness/M +adhere/GDS +adherence/M +adherent/SM +adhesion/M +adhesive/PSM +adhesiveness/M +adiabatic +adieu/MS +adios +adipose +adj +adjacency/M +adjacent/Y +adjectival/Y +adjective/MS +adjoin/GDS +adjourn/DGLS +adjournment/SM +adjudge/GDS +adjudicate/GNVXDS +adjudication/M +adjudicator/SM +adjudicatory +adjunct/MS +adjuration/MS +adjure/GDS +adjust/AGDSL +adjustable +adjuster/SM +adjustment/AMS +adjutant/SM +adman/M +admen +admin/S +administer/DGS +administrate/XDSGNV +administration/M +administrative/Y +administrator/MS +admirably +admiral/MS +admiralty/M +admiration/M +admire/BZGDRS +admirer/M +admiring/Y +admissibility/IM +admissible/I +admissibly +admission/AM +admissions +admit/AS +admittance/M +admitted/Y +admitting/A +admix/GDS +admixture/SM +admonish/LDSG +admonishment/MS +admonition/MS +admonitory +ado/M +adobe/MS +adolescence/SM +adolescent/SM +adopt/AGVDS +adoptable +adopter/MS +adoption/SM +adorableness/M +adorably +adoration/M +adore/BZGDRS +adorer/M +adoring/Y +adorn/LGDS +adorned/U +adornment/MS +adrenal/MS +adrenalin's +adrenaline/M +adrenergic +adrift +adroit/PY +adroitness/M +adsorb/SDG +adsorbent/MS +adsorption/SM +adulate/DSGN +adulation/M +adulator/MS +adulatory +adult/MS +adulterant/MS +adulterate/GNDS +adulterated/U +adulteration/M +adulterer/SM +adulteress/MS +adulterous +adultery/SM +adulthood/M +adumbrate/GNDS +adumbration/M +adv +advance/LDSMG +advancement/SM +advantage/EDSMG +advantageous/EY +advent/SM +adventitious/Y +adventure/DRSMZG +adventurer/M +adventuresome +adventuress/MS +adventurism +adventurist/S +adventurous/YP +adventurousness/M +adverb/SM +adverbial/SMY +adversarial +adversary/SM +adverse/PRYT +adverseness/M +adversity/SM +advert/SMDG +advertise/LZGDRS +advertised/U +advertisement/MS +advertiser/M +advertising/M +advertorial/SM +advice/M +advisability/IM +advisable/I +advisably +advise/LDRSZGB +advised/UY +advisement/M +adviser/M +advisory/SM +advocacy/M +advocate/MGDS +advt +adware +adze/SM +aegis/M +aeon/SM +aerate/DSGN +aeration/M +aerator/SM +aerial/SMY +aerialist/MS +aerie/MS +aerobatic/S +aerobatics/M +aerobic/S +aerobically +aerobics/M +aerodrome/MS +aerodynamic/S +aerodynamically +aerodynamics/M +aerofoil/SM +aerogram/S +aeronautic/S +aeronautical +aeronautics/M +aeroplane/SM +aerosol/MS +aerospace/M +aesthete/MS +aesthetic/S +aesthetically +aestheticism/M +aesthetics/M +aetiology/M +afar +affability/M +affable +affably +affair/MS +affect's +affect/EGDS +affectation/SM +affected/UY +affecting/Y +affection/EM +affectionate/Y +affections +afferent +affiance/GDS +affidavit/SM +affiliate's +affiliate/EGNDS +affiliated/U +affiliation/EM +affiliations +affinity/SM +affirm/AGDS +affirmation/AMS +affirmative/MYS +affix/GMDS +afflatus/M +afflict/GDS +affliction/SM +affluence/M +affluent/Y +afford/GDSB +affordability +affordably +afforest/EGSD +afforestation/M +affray/MS +affront/GMDS +afghan/MS +aficionado/MS +afield +afire +aflame +afloat +aflutter +afoot +aforementioned +aforesaid +aforethought +afoul +afraid/U +afresh +aft/RZ +afterbirth/M +afterbirths +afterburner/MS +aftercare/M +aftereffect/MS +afterglow/SM +afterimage/MS +afterlife/M +afterlives +aftermarket/MS +aftermath/M +aftermaths +afternoon/MS +aftershave/SM +aftershock/SM +aftertaste/SM +afterthought/SM +afterwards +afterword/MS +again +against +agape/M +agar/M +agate/MS +agave/M +age/DSM +ageing/SM +ageism/M +ageist/SM +ageless/YP +agelessness/M +agency/SM +agenda/SM +agent/AMS +ageratum/M +agglomerate/DSMGNX +agglomeration/M +agglutinate/DSXGN +agglutination/M +aggrandise/GLDS +aggrandisement/M +aggravate/GNXDS +aggravating/Y +aggravation/M +aggregate/MGNDSX +aggregation/M +aggression/M +aggressive/PY +aggressiveness/M +aggressor/SM +aggrieve/DSG +aggro +aghast +agile/Y +agility/M +agitate/XGNDS +agitation/M +agitator/MS +agitprop/M +agleam +aglitter +aglow +agnostic/MS +agnosticism/M +ago +agog +agonise/GDS +agonising/Y +agonist/S +agony/SM +agoraphobia/M +agoraphobic/MS +agrarian/MS +agrarianism/M +agree/EBLDS +agreeableness/EM +agreeably/E +agreeing/E +agreement/ESM +agribusiness/MS +agricultural/Y +agriculturalist/MS +agriculture/M +agriculturist/MS +agronomic +agronomist/MS +agronomy/M +aground +ague/M +ah +aha +ahchoo +ahead +ahem +ahoy +aid/SMDG +aide/SM +aided/U +aigrette/MS +ail/SDLG +aileron/SM +ailment/SM +aim/SMDG +aimless/YP +aimlessness/M +ain't +air/SMDJG +airbag/MS +airbase/SM +airbed/S +airborne +airbrush/MDSG +airbus/MS +aircraft/M +aircraftman +aircraftmen +aircrew/S +airdrome/S +airdrop/SM +airdropped +airdropping +airfare/SM +airfield/SM +airflow/M +airfreight/M +airguns +airhead/SM +airily +airiness/M +airing/M +airless/P +airlessness/M +airletters +airlift/SGMD +airline/RSMZ +airliner/M +airlock/SM +airmail/GSMD +airman/M +airmen +airplay/M +airport/SM +airship/SM +airshow/S +airsick/P +airsickness/M +airspace/M +airspeed +airstrike/MS +airstrip/SM +airtight +airtime/M +airwaves/M +airway/MS +airwoman +airwomen +airworthiness/M +airworthy/P +airy/PTR +aisle/MS +aitch/MS +ajar +aka +akimbo +akin +alabaster/M +alack +alacrity/M +alarm/GMDS +alarming/Y +alarmist/SM +alas +alb/SM +albacore/SM +albatross/MS +albeit +albinism/M +albino/MS +album/MNS +albumen/M +albumin/M +albuminous +alchemist/SM +alchemy/M +alcohol/SM +alcoholic/MS +alcoholically +alcoholism/M +alcove/MS +alder/MS +alderman/M +aldermen +alderwoman/M +alderwomen +ale/SMV +aleatory +alehouse/SM +alembic/SM +alert/GMDYPS +alertness/M +alewife/M +alewives +alfalfa/M +alfresco +alga/M +algae +algal +algebra/SM +algebraic +algebraically +algorithm/SM +algorithmic +alias/GMDS +alibi/GMDS +alien/BGMDS +alienable/IU +alienate/DSGN +alienation/M +alienist/SM +alight/GDS +align/ALGDS +aligned/U +aligner/MS +alignment/AMS +alike/U +aliment/MDSG +alimentary +alimony/M +aliveness/M +aliyah/M +aliyahs +alkali/M +alkalies +alkaline +alkalinity/M +alkalise/DSG +alkaloid/SM +alkyd/MS +all/M +allay/GDS +allegation/MS +allege/GDS +alleged/Y +allegiance/MS +allegoric +allegorical/Y +allegorist/MS +allegory/SM +allegretto/MS +allegro/MS +allele/MS +alleluia/SM +allergen/SM +allergenic +allergic +allergically +allergist/SM +allergy/SM +alleviate/DSGN +alleviation/M +alley/MS +alleyway/SM +alliance/SM +alligator/MS +alliterate/DSXGNV +alliteration/M +alliterative/Y +allocate/ADSGN +allocation/AM +allocations +allot/LS +allotment/SM +allotted +allotting +allover +allow/EGDS +allowable/U +allowably +allowance/SM +alloy/GMDS +alloyed/U +allspice/M +allude/GDS +allure/MGLDS +allurement/MS +alluring/Y +allusion/SM +allusive/PY +allusiveness/M +alluvial/M +alluvium/SM +ally/GDSM +almanac/SM +almighty +almond/MS +almoner/SM +almost +alms/M +almshouse/MS +aloe/SM +aloft +aloha/MS +alone +along +alongshore +alongside +aloof/PY +aloofness/M +aloud +alp/SM +alpaca/MS +alpha/MS +alphabet/SM +alphabetic +alphabetical/Y +alphabetisation/SM +alphabetise/ZGDRS +alphabetiser/M +alphanumeric +alphanumerical/Y +alpine/S +already +alright +also +alt/S +altar/MS +altarpiece/SM +alter/GDBS +alterable/U +alteration/MS +altercation/SM +altered/U +alternate/DSMYGNVX +alternation/M +alternative/MYS +alternator/SM +although +altimeter/MS +altitude/MS +alto/SM +altogether +altruism/M +altruist/SM +altruistic +altruistically +alum/SM +alumina/M +aluminium/M +alumna/M +alumnae +alumni +alumnus/M +alveolar/S +always +am/N +amalgam/SM +amalgamate/XGNDS +amalgamation/M +amanuenses +amanuensis/M +amaranth/M +amaranths +amaretto/M +amaryllis/MS +amass/GDS +amateur/SM +amateurish/YP +amateurishness/M +amateurism/M +amatory +amaze/LMGDS +amazement/M +amazing/Y +amazon/MS +amazonian +ambassador/SM +ambassadorial +ambassadorship/MS +ambassadress/MS +amber/M +ambergris/M +ambidexterity/M +ambidextrous/Y +ambience/MS +ambient +ambiguity/SM +ambiguous/UY +ambit +ambition/MS +ambitious/YP +ambitiousness/M +ambivalence/M +ambivalent/Y +amble/MZGDRS +ambler/M +ambrosia/M +ambrosial +ambulance/MS +ambulanceman +ambulancemen +ambulancewoman +ambulancewomen +ambulant +ambulate/DSXGN +ambulation/M +ambulatory/SM +ambuscade/MGDS +ambush/GMDS +ameliorate/GNVDS +amelioration/M +amen/B +amenability/M +amenably +amend/BLGDS +amendment/SM +amenity/SM +amerce/GLDS +amercement/SM +americium/M +amethyst/SM +amiability/M +amiable +amiably +amicability/M +amicable +amicably +amid +amide/MS +amidship/S +amidst +amigo/MS +amino +amiss +amity/M +ammeter/SM +ammo/M +ammonia/M +ammonium +ammunition/M +amnesia/M +amnesiac/MS +amnesic/SM +amnesty/GDSM +amniocenteses +amniocentesis/M +amnion/MS +amniotic +amoeba/MS +amoebae +amoebic +amok +among +amongst +amontillado/SM +amoral/Y +amorality/M +amorous/YP +amorousness/M +amorphous/PY +amorphousness/M +amortisation/MS +amortise/DSGB +amount/GMDS +amour/MS +amoxicillin +amp/SMY +amperage/M +ampere/MS +ampersand/MS +amphetamine/SM +amphibian/MS +amphibious/Y +amphitheatre/SM +amphora/M +amphorae +ampicillin +ample/TR +amplification/M +amplifier/M +amplify/NDRSXZG +amplitude/SM +ampule/MS +amputate/GNDSX +amputation/M +amputee/MS +amt +amulet/MS +amuse/LGDS +amusement/MS +amusing/Y +amylase/M +an/CS +anabolism/M +anachronism/SM +anachronistic +anachronistically +anaconda/SM +anaemia/M +anaemic +anaemically +anaerobe/SM +anaerobic +anaerobically +anaesthesia/M +anaesthesiologist/SM +anaesthesiology/M +anaesthetic/MS +anaesthetisation/SM +anaesthetise/GDS +anaesthetist/MS +anagram/MS +anal/Y +analgesia/M +analgesic/SM +analogical/Y +analogise/GDS +analogous/YP +analogousness/M +analogue/SM +analogy/SM +analysable +analysand/MS +analyse/ADSG +analyser/SM +analysis/AM +analyst/SM +analytic +analytical/Y +anapest/SM +anapestic/MS +anarchic +anarchically +anarchism/M +anarchist/MS +anarchistic +anarchy/M +anathema/SM +anathematise/DSG +anatomic +anatomical/Y +anatomise/DSG +anatomist/SM +anatomy/SM +ancestor/SM +ancestral/Y +ancestress/MS +ancestry/SM +anchor/MDGS +anchorage/MS +anchorite/MS +anchorman/M +anchormen +anchorpeople +anchorperson/SM +anchorwoman/M +anchorwomen +anchovy/SM +ancient/SPMRYT +ancientness/M +ancillary/SM +and +andante/SM +andiron/SM +androgen/M +androgenic +androgynous +androgyny/M +android/SM +anecdotal/Y +anecdote/MS +anemometer/SM +anemone/SM +anent +aneurysm/SM +anew +angel/MS +angelfish/MS +angelic +angelica/M +angelical/Y +anger/GMDS +angina/M +angioplasty/SM +angiosperm/SM +angle/MZGDRS +angler/M +angleworm/MS +anglicise/GDS +anglicism/S +angling/M +anglophile/S +anglophone/S +angora/MS +angostura +angrily +angry/TR +angst/M +angstrom/MS +anguish/GMDS +angular +angularity/SM +angulation +anhydrous +aniline/M +animadversion/MS +animadvert/GSD +animal/MS +animalcule/SM +animate/ADSGN +animated/Y +animation/AM +animations +animator/MS +anime/M +animism/M +animist/SM +animistic +animosity/SM +animus/M +anion/MS +anionic +anise/M +aniseed/M +anisette/M +ankh/M +ankhs +ankle/MS +anklebone/MS +anklet/MS +annalist/SM +annals/M +anneal/GDS +annelid/MS +annex/GMDS +annexation/MS +annihilate/DSGN +annihilation/M +annihilator/SM +anniversary/SM +annotate/DSXGNV +annotation/M +annotator/MS +announce/DRSLZG +announced/U +announcement/MS +announcer/M +annoy/GDS +annoyance/MS +annoying/Y +annual/MYS +annualised +annuitant/SM +annuity/SM +annul/LS +annular +annulled +annulling +annulment/SM +annunciation/SM +anode/MS +anodise/GDS +anodyne/MS +anoint/GDLS +anointment/M +anomalous/Y +anomaly/SM +anon/S +anonymity/M +anonymous/Y +anopheles/M +anorak/MS +anorectic/SM +anorexia/M +anorexic/MS +another +answer/BMDGS +answerable/U +answered/U +answerphone/S +ant/SMD +antacid/SM +antagonise/DSG +antagonism/SM +antagonist/SM +antagonistic +antagonistically +antarctic +ante/SM +anteater/MS +antebellum +antecedence/M +antecedent/SM +antechamber/SM +antedate/GDS +antediluvian +anteing +antelope/MS +antenatal +antenna/SM +antennae +anterior +anteroom/MS +anthem/MS +anther/MS +anthill/SM +anthologise/DSG +anthologist/SM +anthology/SM +anthracite/M +anthrax/M +anthropocentric +anthropoid/MS +anthropological/Y +anthropologist/SM +anthropology/M +anthropomorphic +anthropomorphically +anthropomorphise +anthropomorphism/M +anthropomorphous +anti/SM +antiabortion +antiabortionist/MS +antiaircraft +antibacterial/MS +antibiotic/MS +antibody/SM +antic/MS +anticancer +anticipate/GNXDS +anticipated/U +anticipation/M +anticipatory +anticked +anticking +anticlerical +anticlimactic +anticlimactically +anticlimax/MS +anticline/SM +anticlockwise +anticoagulant/MS +anticommunism/M +anticommunist/SM +anticyclone/SM +anticyclonic +antidemocratic +antidepressant/MS +antidote/MS +antifascist/MS +antifreeze/M +antigen/SM +antigenic +antigenicity/M +antihero/M +antiheroes +antihistamine/SM +antiknock/M +antilabour +antilogarithm/SM +antimacassar/MS +antimalarial +antimatter/M +antimicrobial +antimissile +antimony/M +antinuclear +antioxidant/MS +antiparticle/SM +antipasti +antipasto/MS +antipathetic +antipathy/SM +antipersonnel +antiperspirant/SM +antiphon/SM +antiphonal/MYS +antipodal/S +antipodean/MS +antipodes/M +antipollution +antipoverty +antiquarian/SM +antiquarianism/M +antiquary/SM +antiquate/GDS +antique/DSMG +antiquity/SM +antirrhinum/S +antiscience +antisemitic +antisemitism/M +antisepsis/M +antiseptic/SM +antiseptically +antiserum/MS +antislavery +antisocial/Y +antispasmodic/MS +antisubmarine +antitank +antitheses +antithesis/M +antithetic +antithetical/Y +antitoxin/MS +antitrust +antivenin/MS +antivenom +antiviral/MS +antivirus +antivivisectionist/MS +antiwar +antler/MDS +antonym/SM +antonymous +antrum +antsy/TR +anus/MS +anvil/MS +anxiety/SM +anxious/YP +anxiousness/M +any +anybody/SM +anyhow +anymore +anyone/M +anyplace +anything/SM +anytime +anyway/S +anywhere +anywise +aorta/MS +aortic +apace +apart +apartheid/M +apartment/MS +apathetic +apathetically +apathy/M +apatite/M +ape/DSMG +apelike +aperitif/MS +aperture/SM +apex/MS +aphasia/M +aphasic/MS +aphelia +aphelion/SM +aphid/MS +aphorism/MS +aphoristic +aphoristically +aphrodisiac/SM +apiarist/SM +apiary/SM +apical/Y +apiece +apish/Y +aplenty +aplomb/M +apocalypse/SM +apocalyptic +apocrypha/M +apocryphal/Y +apogee/MS +apolitical/Y +apologetic/U +apologetically +apologia/SM +apologise/GDS +apologist/MS +apology/SM +apoplectic +apoplexy/SM +apoptosis +apoptotic +apostasy/SM +apostate/SM +apostatise/GDS +apostle/MS +apostleship/M +apostolic +apostrophe/MS +apothecary/SM +apothegm/SM +apotheoses +apotheosis/M +app/SM +appal/S +appalled +appalling/Y +appaloosa/MS +apparatchik/S +apparatus/MS +apparel/MS +apparelled +apparelling +apparent/Y +apparition/SM +appeal/GMDS +appealing/UY +appear/AESDG +appearance/EAMS +appease/LZGDRS +appeasement/SM +appeaser/M +appellant/SM +appellate/XN +appellation/M +append/GDS +appendage/SM +appendectomy/SM +appendices +appendicitis/M +appendix/MS +appertain/GDS +appetiser/MS +appetising/Y +appetite/SM +applaud/ZGDRS +applauder/M +applause/M +apple/MS +applejack/M +applesauce/M +applet/MS +appliance/SM +applicability/M +applicable/I +applicably +applicant/SM +application/AM +applicator/SM +applier/MS +applique/DSM +appliqueing +apply/ANXGDS +appoint/AELSVGD +appointee/SM +appointment's/A +appointment/ESM +apportion/AGDLS +apportionment/AM +appose/GDS +apposite/YNVP +appositeness/M +apposition/M +appositive/SM +appraisal/AMS +appraise/ADSG +appraiser/MS +appreciable/I +appreciably/I +appreciate/DSXGNV +appreciated/U +appreciation/M +appreciative/Y +appreciator/MS +appreciatory +apprehend/GDS +apprehension/MS +apprehensive/YP +apprehensiveness/M +apprentice/DSMG +apprenticeship/MS +apprise/GDS +approach/GBMDS +approachable/UI +approbation/EM +approbations +appropriate/PYGNXDS +appropriated/U +appropriateness/IM +appropriation/M +appropriator/SM +approval/EM +approvals +approve/EGDS +approved/U +approving/EY +approx +approximate/DSXYGN +approximation/M +appurtenance/SM +appurtenant +apricot/MS +apron/MS +apropos +apse/SM +apt/IYPT +apter +aptitude/SM +aptness/IM +aqua/SM +aquaculture/M +aqualung/MS +aquamarine/SM +aquanaut/MS +aquaplane/MGDS +aquarium/MS +aquatic/SM +aquatically +aquatics/M +aquatint/S +aquavit/M +aqueduct/MS +aqueous +aquifer/SM +aquiline +arabesque/MS +arability/M +arachnid/MS +arachnophobia +arbiter/SM +arbitrage/MZGDRS +arbitrager/M +arbitrageur/SM +arbitrament/SM +arbitrarily +arbitrariness/M +arbitrary/P +arbitrate/GNDS +arbitration/M +arbitrator/MS +arboreal +arboretum/SM +arborvitae/SM +arbour/MS +arbutus/MS +arc/SMDG +arcade/MS +arcane +arch/PZTGVMDRSY +archaeological/Y +archaeologist/SM +archaeology/M +archaic +archaically +archaism/MS +archaist/MS +archangel/MS +archbishop/SM +archbishopric/SM +archdeacon/SM +archdiocesan +archdiocese/MS +archduchess/MS +archduke/MS +archenemy/SM +archer/M +archery/M +archetypal +archetype/MS +archfiend/MS +archiepiscopal +archipelago/MS +architect/SM +architectonic/S +architectonics/M +architectural/Y +architecture/MS +architrave/SM +archival +archive/DSMG +archivist/MS +archness/M +archway/SM +arctic/MS +ardent/Y +ardour/MS +arduous/YP +arduousness/M +are/SMB +area/SM +areal +aren't +arena/MS +argent/M +arginine +argon/M +argosy/SM +argot/MS +arguable/IU +arguably/U +argue/ZGDRS +arguer/M +argument/MS +argumentation/M +argumentative/PY +argumentativeness/M +argyle/MS +aria/SM +arid/Y +aridity/M +aright +arise/GS +arisen +aristocracy/SM +aristocrat/SM +aristocratic +aristocratically +arithmetic/M +arithmetical/Y +arithmetician/MS +ark/SM +arm's +arm/EAGDS +armada/MS +armadillo/SM +armament/AEM +armaments +armature/MS +armband/MS +armchair/MS +armed/U +armful/MS +armhole/SM +armistice/SM +armlet/MS +armload/S +armorial +armour/MDRZGS +armoured/U +armourer/M +armoury/SM +armpit/MS +armrest/SM +army/SM +aroma/MS +aromatherapist/MS +aromatherapy/M +aromatic/MS +aromatically +arose +around +arousal/M +arouse/GDS +arpeggio/MS +arr +arraign/DGSL +arraignment/SM +arrange/AESDLG +arrangement's/E +arrangement/ASM +arranger/SM +arrant +arras/MS +array/EGMDS +arrears/M +arrest/AGMDS +arrhythmia/M +arrhythmic +arrhythmical +arrival/MS +arrive/GDS +arrogance/M +arrogant/Y +arrogate/GNDS +arrogation/M +arrow/MS +arrowhead/MS +arrowroot/M +arroyo/MS +arse/DSMG +arsehole/SM! +arsenal/MS +arsenic/M +arson/M +arsonist/SM +art/SM +artefact/MS +arterial +arteriole/MS +arteriosclerosis/M +artery/SM +artful/PY +artfulness/M +arthritic/MS +arthritis/M +arthropod/MS +arthroscope/SM +arthroscopic +arthroscopy +artichoke/SM +article/MDS +articulacy/I +articular +articulate/YGNPDSX +articulateness/IM +articulation/M +artifice/RSMZ +artificer/M +artificial/Y +artificiality/M +artillery/M +artilleryman/M +artillerymen +artiness/M +artisan/MS +artist/MS +artiste/MS +artistic/I +artistically +artistry/M +artless/PY +artlessness/M +artsy/TR +artwork/MS +arty/PTR +arugula +arum/SM +asap +asbestos/M +ascend/AGDS +ascendance/M +ascendancy/M +ascendant/SM +ascension/MS +ascent/MS +ascertain/GDSBL +ascertainment/M +ascetic/MS +ascetically +asceticism/M +ascot/MS +ascribe/GBDS +ascription/M +aseptic +aseptically +asexual/Y +asexuality/M +ash/MDNSG +ashamed/UY +ashcan/MS +ashlar/MS +ashore +ashram/MS +ashtray/SM +ashy/TR +aside/MS +asinine/Y +asininity/SM +ask/SDG +askance +asked/U +askew +aslant +asleep +asocial +asp/SMNX +asparagus/M +aspartame/M +aspect/MS +aspen/M +asperity/SM +aspersion/MS +asphalt/MDGS +asphodel/SM +asphyxia/M +asphyxiate/DSXGN +asphyxiation/M +aspic/MS +aspidistra/MS +aspirant/MS +aspirate/MGNDSX +aspiration/M +aspirator/SM +aspire/GDS +aspirin/MS +ass/MS +assail/GBDS +assailable/U +assailant/SM +assassin/SM +assassinate/GNXDS +assassination/M +assault/MDRGS +assay/ZGMDRS +assayer/M +assemblage/SM +assemble/AEGSD +assembler/MS +assemblies +assembly/AM +assemblyman/M +assemblymen +assemblywoman/M +assemblywomen +assent/GMDS +assert/AGVDS +assertion/AM +assertions +assertive/YP +assertiveness/M +assess/ALGDS +assessment/ASM +assessor/MS +asset/MS +asseverate/DSGN +asseveration/M +assiduity/M +assiduous/PY +assiduousness/M +assign's +assign/ALGDS +assignable +assignation/MS +assigned/U +assignee/M +assigner/MS +assignment/AMS +assignor/MS +assimilate/DSGN +assimilation/M +assist/GMDS +assistance/M +assistant/SM +assisted/U +assize/MS +assn +assoc +associate's +associate/EDSGNV +association/EM +associations +assonance/M +assonant/MS +assort/GLDS +assortment/MS +asst +assuage/GDS +assume/BGDS +assumption/SM +assumptive +assurance/ASM +assure/AGDS +assured/MYS +astatine/M +aster/EMS +asterisk/GMDS +astern +asteroid/MS +asthma/M +asthmatic/SM +asthmatically +astigmatic +astigmatism/SM +astir +astonish/DSLG +astonishing/Y +astonishment/M +astound/GDS +astounding/Y +astraddle +astrakhan/M +astral +astray +astride +astringency/M +astringent/SMY +astrolabe/SM +astrologer/SM +astrological/Y +astrologist/MS +astrology/M +astronaut/MS +astronautic/S +astronautical +astronautics/M +astronomer/SM +astronomic +astronomical/Y +astronomy/M +astrophysical +astrophysicist/MS +astrophysics/M +astute/PYTR +astuteness/M +asunder +asylum/SM +asymmetric +asymmetrical/Y +asymmetry/SM +asymptomatic +asymptotic +asymptotically +asynchronous/Y +at +atavism/M +atavist/SM +atavistic +ataxia/M +ataxic/MS +ate +atelier/SM +atheism/M +atheist/MS +atheistic +atherosclerosis/M +atherosclerotic +athirst +athlete/MS +athletic/S +athletically +athleticism +athletics/M +athwart +atilt +atishoo +atlas/MS +atmosphere/MS +atmospheric/S +atmospherically +atmospherics/M +atoll/MS +atom/SM +atomic +atomically +atomise/ZGDRS +atomiser/M +atonal/Y +atonality/M +atone/LGDS +atonement/M +atop +atria +atrial +atrioventricular +atrium/M +atrocious/PY +atrociousness/M +atrocity/SM +atrophy/DSMG +atropine/M +attach/ALGDS +attache/BM +attached/U +attachment/AM +attachments +attack/ZGMDRS +attacker/M +attain/AGDS +attainability/M +attainable/U +attainder/M +attainment/SM +attar/M +attempt's +attempt/ASDG +attend/SDRZG +attendance/SM +attendant/SM +attended/U +attendee/SM +attention/IM +attentions +attentive/IPY +attentiveness/IM +attenuate/DSGN +attenuation/M +attest/SDG +attestation/SM +attested/U +attic/SM +attire/DSMG +attitude/SM +attitudinal +attitudinise/GDS +attn +attorney/MS +attract/SGVDB +attractant/MS +attraction/MS +attractive/UY +attractiveness/M +attribute/DSMGNVBX +attributed/U +attribution/M +attributive/MYS +attrition/M +attune/DSG +atty +atwitter +atypical/Y +aubergine/S +auburn/M +auction/MDGS +auctioneer/SM +audacious/YP +audaciousness/M +audacity/M +audibility/IM +audible/MS +audibly/I +audience/MS +audio/MS +audiological +audiologist/SM +audiology/M +audiometer/SM +audiophile/SM +audiotape/SM +audiovisual/S +audiovisuals/M +audit/GMDS +audition/SMDG +auditor/MS +auditorium/SM +auditory +auger/MS +aught/MS +augment/DRZGS +augmentation/MS +augmentative +augmenter/M +augur/GMDS +augury/SM +august/PTRY +augustness/M +auk/SM +aunt/SM +auntie/SM +aura/MS +aural/Y +aureole/SM +aureus +auricle/SM +auricular +aurora/SM +auscultate/GNDSX +auscultation/M +auspice/SM +auspicious/IY +auspiciousness/M +austere/RYT +austerity/SM +austral +authentic/IU +authentically +authenticate/XGNDS +authenticated/U +authentication/M +authenticity/M +author/SMDG +authoress/MS +authorial +authorisation/SM +authorise/GDS +authorised/U +authoritarian/MS +authoritarianism/M +authoritative/YP +authoritativeness/M +authority/SM +authorship/M +autism/M +autistic +auto/MS +autobahn/SM +autobiographer/SM +autobiographic +autobiographical/Y +autobiography/SM +autoclave/MS +autocracy/SM +autocrat/SM +autocratic +autocratically +autocross +autodidact/SM +autograph/MDG +autographs +autoimmune +autoimmunity/M +automaker/SM +automate/GNDS +automatic/SM +automatically +automation/M +automatise/GDS +automatism/M +automaton/SM +automobile/DSMG +automotive +autonomic +autonomous/Y +autonomy/M +autopilot/SM +autopsy/GDSM +autosuggestion +autoworker/MS +autumn/SM +autumnal +aux +auxiliary/SM +auxin/M +av/RZ +avail/BGMDS +availability/UM +available/U +avalanche/SM +avarice/M +avaricious/Y +avast +avatar/MS +avaunt +avdp +ave +avenge/ZGDRS +avenger/M +avenue/MS +average/MYGDS +averred +averring +averse/XN +aversion/M +avert/GDS +avg +avian +aviary/SM +aviation/M +aviator/MS +aviatrices +aviatrix/MS +avid/Y +avidity/M +avionic/S +avionics/M +avitaminosis/M +avocado/SM +avocation/MS +avocational +avoid/SDGB +avoidable/U +avoidably/U +avoidance/M +avoirdupois/M +avouch/DSG +avow/EDGS +avowal/ESM +avowed/Y +avuncular/Y +aw +await/GDS +awake/GS +awaken/AGDS +awakening/SM +award/GMDS +awardee/S +aware/UP +awareness/UM +awash +away +awe/DSMG +aweigh +awesome/YP +awesomeness/M +awestruck +awful/YP +awfuller +awfullest +awfulness/M +awhile +awkward/RYPT +awkwardness/M +awl/SM +awn/GJSM +awning/M +awoke +awoken +awry +axe/DSMG +axial/Y +axiom/SM +axiomatic +axiomatically +axis/M +axle/MS +axletree/SM +axolotl/SM +axon/MS +ayah/M +ayahs +ayatollah/M +ayatollahs +aye/SM +azalea/SM +azimuth/M +azimuths +azure/SM +b/KDT +baa/SMDG +babble/MZGDRS +babbler/M +babe/SM +babel/MS +baboon/MS +babushka/SM +baby/TGDRSM +babyhood/M +babyish +babysat +babysit/S +babysitter/MS +babysitting/M +baccalaureate/SM +baccarat/M +bacchanal/MS +bacchanalia/M +bacchanalian/MS +baccy +bachelor/SM +bachelorhood/M +bacillary +bacilli +bacillus/M +back/SJZGMDR +backache/MS +backbench/S +backbit +backbite/ZGRS +backbiter/M +backbitten +backboard/SM +backbone/MS +backbreaking +backchat +backcloth +backcloths +backcomb/DSG +backdate/GDS +backdoor +backdrop/MS +backer/M +backfield/SM +backfire/MGDS +backgammon/M +background/MRZS +backgrounder/M +backhand/MDRSZG +backhanded/Y +backhander/M +backhoe/MS +backing/M +backlash/MS +backless +backlog/MS +backlogged +backlogging +backpack/ZGMDRS +backpacker/M +backpacking/M +backpedal/S +backpedalled +backpedalling +backrest/SM +backroom/S +backscratching/M +backseat/SM +backside/SM +backslapper/SM +backslapping/M +backslash/MS +backslid +backslide/RSZG +backslider/M +backspace/DSMG +backspin/M +backstabber/MS +backstabbing +backstage/M +backstair/S +backstop/SM +backstopped +backstopping +backstory/S +backstreet/S +backstretch/MS +backstroke/MGDS +backtalk/M +backtrack/SDG +backup/MS +backward/PSY +backwardness/M +backwash/M +backwater/SM +backwoods/M +backwoodsman/M +backwoodsmen +backyard/SM +bacon/M +bacteria/M +bacterial +bactericidal +bactericide/SM +bacteriologic +bacteriological +bacteriologist/SM +bacteriology/M +bacterium/M +bad/MYP +badder +baddest +baddie/MS +bade +badge/MZRS +badger/GMD +badinage/M +badlands/M +badman/M +badmen +badminton/M +badmouth/GD +badmouths +badness/M +baffle/MZGDRSL +bafflement/M +baffler/M +bag/SM +bagatelle/SM +bagel/MS +bagful/MS +baggage/M +bagged +baggie/M +baggily +bagginess/M +bagging +baggy/PTRS +bagpipe/MZRS +bagpiper/M +baguette/MS +bah +baht/SM +bail/SBGMD +bailey/S +bailiff/S +bailiwick/MS +bailout/SM +bailsman/M +bailsmen +bairn/MS +bait/SGMD +baize/M +bake/DRSMZG +baked/U +baker/M +bakery/SM +bakeshop/MS +baklava/M +baksheesh/M +balaclava/MS +balalaika/MS +balance's +balance/UDSG +balboa/SM +balcony/SM +bald/STGPDRY +balderdash/M +baldfaced +baldness/M +baldric/SM +baldy/S +bale/DRSMZG +baleen/M +baleful/PY +balefulness/M +baler/M +balky/RT +ball/SGMD +ballad/SM +balladeer/MS +balladry/M +ballast/GSMD +ballcock/MS +ballerina/SM +ballet/SM +balletic +ballgame/MS +ballgirl/S +ballgown/S +ballistic/S +ballistics/M +balloon/SGMD +balloonist/MS +ballot/SMDG +ballpark/MS +ballplayer/MS +ballpoint/MS +ballroom/MS +balls/DSG +ballsy/RT +bally +ballyhoo/SMDG +balm/SM +balminess/M +balmy/RTP +baloney/M +balsa/MS +balsam/SM +balsamic +baluster/SM +balustrade/MS +bamboo/SM +bamboozle/DSG +ban/SM +banal/Y +banality/SM +banana/SM +band's +band/ESGD +bandage/DSMG +bandanna/MS +bandbox/MS +bandeau/M +bandeaux +bandit/SM +banditry/M +bandleader/S +bandmaster/SM +bandoleer/SM +bandsman/M +bandsmen +bandstand/SM +bandwagon/SM +bandwidth +bandwidths +bandy/DRSTG +bane/SM +baneful +bang/SGMDR +bangle/SM +bani +banish/GLDS +banishment/M +banister/SM +banjo/MS +banjoist/SM +bank/SZGBMDR +bankbook/SM +bankcard/SM +banker/M +banking/M +banknote/SM +bankroll/SGMD +bankrupt/SGMD +bankruptcy/SM +banned +banner/SM +banning +bannock/MS +banns/M +banquet/ZGMDRS +banqueter/M +banquette/SM +banshee/MS +bantam/SM +bantamweight/SM +banter/GSMD +bantering/Y +banyan/SM +banzai/SM +baobab/SM +bap/S +baptise/ZGDRS +baptised/U +baptiser/M +baptism/MS +baptismal +baptist/S +baptistery/SM +bar's +bar/ECUTS +barb/SZGMDR +barbacoa +barbarian/SM +barbarianism/MS +barbaric +barbarically +barbarise/DSG +barbarism/SM +barbarity/SM +barbarous/Y +barbecue/DSMG +barbel/SM +barbell/MS +barber/GMD +barberry/SM +barbershop/MS +barbie/S +barbiturate/SM +barbwire/M +barcarole/SM +bard/SM +bardic +bare/DRSPYG +bareback/D +barefaced/Y +barefoot/D +barehanded +bareheaded +barelegged +bareness/M +barf/SGMDY +barfly/SM +bargain/MDRZGS +bargainer/M +barge/MGDS +bargeman/M +bargemen +barhop/S +barhopped +barhopping +barista/MS +baritone/MS +barium/M +bark's +bark/CSGD +barkeep/ZMRS +barkeeper/M +barker/SM +barley/M +barmaid/MS +barman/M +barmen +barmy/RT +barn/SM +barnacle/MDS +barney/S +barnstorm/SDRZG +barnstormer/M +barnyard/SM +barometer/MS +barometric +barometrically +baron/MS +baronage/MS +baroness/MS +baronet/MS +baronetcy/SM +baronial +barony/SM +baroque/M +barque/SM +barrack/MDGS +barracuda/SM +barrage/MGDS +barre/MGJDS +barred/UEC +barrel/SM +barrelled +barrelling +barren/TPSMR +barrenness/M +barrette/SM +barricade/MGDS +barrier/MS +barring/ECU +barrio/SM +barrister/MS +barroom/MS +barrow/SM +bartender/SM +barter/ZGSMDR +barterer/M +baryon/SM +basal/Y +basalt/M +basaltic +base's +base/CDSLTG +baseball/SM +baseboard/MS +baseless +baseline/MS +basely +baseman/M +basemen +basement/CMS +baseness/M +baser +bash/GMDS +bashful/PY +bashfulness/M +bashing/M +basic/MS +basically +basil/M +basilica/MS +basilisk/MS +basin/MS +basinful/MS +basis/M +bask/SGD +basket/SM +basketball/MS +basketry/M +basketwork/M +basque/S +bass/MS +basset/SM +bassinet/MS +bassist/MS +basso/MS +bassoon/MS +bassoonist/SM +basswood/MS +bast/M +bastard/MS +bastardisation/MS +bastardise/GDS +bastardy/M +baste/ZGNXDRS +baster/M +bastion/M +bat/SM +batch/MDSG +bate/KACGSD +bath/ZGMDRS +bathe/M +bather/M +bathetic +bathhouse/MS +bathing/M +bathmat/MS +bathos/M +bathrobe/SM +bathroom/SM +baths +bathtub/MS +bathwater +bathyscaphe/SM +bathysphere/MS +batik/MS +batiste/M +batman/M +batmen +baton/MS +batsman/M +batsmen +battalion/SM +batted +batten/GSMD +batter/JZGSMDR +batterer/M +battery/SM +batting/M +battle/LDRSMZG +battleaxe/MS +battledore/SM +battledress +battlefield/MS +battlefront/MS +battleground/MS +battlement/SM +battler/M +battleship/SM +batty/RT +bauble/SM +baud/SM +baulk/MDGS +bauxite/M +bawd/SM +bawdily +bawdiness/M +bawdy/PRT +bawl/SGMD +bay/SMDG +bayberry/SM +bayonet/SMDG +bayou/MS +bazaar/SM +bazillion/S +bazooka/SM +bbl +bdrm +be +beach/MDSG +beachcomber/SM +beachfront +beachhead/MS +beachwear/M +beacon/SM +bead/SGMD +beading/M +beadle/SM +beady/RT +beagle/SM +beak/SZMDR +beaker/M +beam/SGMD +bean/SGMD +beanbag/MS +beanfeast/S +beanie/SM +beanpole/MS +beansprout/S +beanstalk/MS +bear/SZGBJMR +bearable/U +bearably/U +beard/MDGS +beardless +bearer/M +bearing/M +bearish/PY +bearishness/M +bearlike +bearskin/MS +beast/MS +beastliness/M +beastly/TPRM +beat/SZGBMNRJ +beatable/U +beaten/U +beater/M +beatific +beatifically +beatification/M +beatify/GXNDS +beating/M +beatitude/SM +beatnik/MS +beau/SM +beaut/MS +beauteous/Y +beautician/SM +beautification/M +beautifier/M +beautiful/Y +beautify/NDRSZG +beauty/SM +beaver/SGMD +bebop/MS +becalm/GSD +became +because +beck/SM +beckon/SGD +becloud/GDS +become/S +becoming/UY +becquerel/S +bed/SM +bedaub/GSD +bedazzle/GDSL +bedazzlement/M +bedbug/SM +bedchamber/S +bedclothes/M +bedded +bedder +bedding/M +bedeck/GSD +bedevil/LS +bedevilled +bedevilling +bedevilment/M +bedfellow/SM +bedhead/S +bedim/S +bedimmed +bedimming +bedizen/GDS +bedlam/SM +bedpan/SM +bedpost/SM +bedraggle/GDS +bedridden +bedrock/SM +bedroll/SM +bedroom/SM +bedside/SM +bedsit/S +bedsitter/S +bedsore/SM +bedspread/SM +bedstead/SM +bedtime/SM +bee/RSMZGJ +beebread/M +beech/MS +beechnut/MS +beef/SGMD +beefburger/SM +beefcake/MS +beefiness/M +beefsteak/MS +beefy/RPT +beehive/MS +beekeeper/MS +beekeeping/M +beeline/MS +been +beep/SZGMDR +beeper/M +beer/M +beery/TR +beeswax/M +beet/SM +beetle/MGDS +beetroot/S +beeves +befall/SGN +befell +befit/S +befitted +befitting/Y +befog/S +befogged +befogging +before +beforehand +befoul/DGS +befriend/SGD +befuddle/GLDS +befuddlement/M +beg/S +began +begat +beget/S +begetter/S +begetting +beggar/MDYGS +beggary/M +begged +begging +begin/S +beginner/SM +beginning/MS +begone +begonia/SM +begot +begotten +begrime/DSG +begrudge/DSG +begrudging/Y +beguile/DRSZGL +beguilement/M +beguiler/M +beguiling/Y +beguine/SM +begum/MS +begun +behalf/M +behalves +behave/GDS +behaviour/SM +behavioural/Y +behaviourism/M +behaviourist/SM +behead/DGS +beheld +behemoth/M +behemoths +behest/MS +behind/MS +behindhand +behold/NRZGS +beholder/M +behove/GDS +beige/M +being/M +bejewel/S +bejewelled +bejewelling +belabour/GSD +belated/Y +belay/GDS +belch/GMDS +beleaguer/GSD +belfry/SM +belie/DS +belief/EUM +beliefs +believable/U +believably/U +believe/EDRSZG +believer/EUMS +believing/U +belittle/LDSG +belittlement/M +bell/SGMD +belladonna/M +bellboy/SM +belle/MS +belled/A +belletrist/MS +belletristic +bellhop/SM +bellicose +bellicosity/M +belligerence/M +belligerency/M +belligerent/MYS +belling/A +bellman/M +bellmen +bellow/MDGS +bellwether/MS +belly/GDSM +bellyache/MGDS +bellybutton/SM +bellyful/MS +belong/JDGS +belonging/M +beloved/SM +below +belt/SGMD +beltway/SM +beluga/MS +belying +bemire/GDS +bemoan/DGS +bemuse/LGDS +bemused/Y +bemusement/M +bench/GMDS +benchmark/MS +bend/BSZGMR +bender/M +bendy/TR +beneath +benedictine +benediction/SM +benedictory +benefaction/SM +benefactor/MS +benefactress/MS +benefice/SM +beneficence/M +beneficent/Y +beneficial/Y +beneficiary/SM +benefit/SMDG +benevolence/SM +benevolent/Y +benighted/Y +benign/Y +benignant +benignity/M +bent/SM +bentwood/M +benumb/DSG +benzene/M +benzine/M +benzyl +bequeath/DG +bequeaths +bequest/MS +berate/GDS +bereave/DSLG +bereavement/MS +bereft +beret/MS +berg/SM +beriberi/M +berk/S +berkelium/M +berm/SM +berry/GDSM +berrylike +berserk +berth/GMD +berths +beryl/MS +beryllium/M +beseech/ZGRS +beseecher/M +beseeching/Y +beseem/DSG +beset/S +besetting +beside/S +besiege/ZGDRS +besieger/M +besmear/DSG +besmirch/GDS +besom/MS +besot/S +besotted +besotting +besought +bespangle/DSG +bespatter/GSD +bespeak/SG +bespectacled +bespoke +bespoken +best/SGMD +bestial/Y +bestiality/M +bestiary/SM +bestir/S +bestirred +bestirring +bestow/DGS +bestowal/SM +bestrew/SDG +bestrewn +bestridden +bestride/SG +bestrode +bestseller/MS +bestselling +bet/SM +beta/SM +betake/GS +betaken +betcha +betel/M +bethink/SG +bethought +betide/GDS +betimes +betoken/GDS +betook +betray/DRZGS +betrayal/SM +betrayer/M +betroth/DG +betrothal/SM +betrothed/M +betroths +better/MDGLS +betterment/M +betting +bettor/MS +between +betwixt +bevel/MS +bevelled +bevelling/S +beverage/SM +bevvy/S +bevy/SM +bewail/DGS +beware/GDS +bewhiskered +bewigged +bewilder/LSGD +bewildering/Y +bewilderment/M +bewitch/GLDS +bewitching/Y +bewitchment/M +bey/SM +beyond +bezel/MS +bf +bhaji +bi/SMRZ +biannual/Y +bias/GMDS +biased/U +biathlon/SM +bib/SM +bible/MS +biblical +bibliographer/MS +bibliographic +bibliographical/Y +bibliography/SM +bibliophile/SM +bibulous +bicameral +bicameralism/M +bicarb/MS +bicarbonate/MS +bicentenary/SM +bicentennial/SM +bicep/MS +biceps/M +bicker/MDRZGS +bickerer/M +biconcave +biconvex +bicuspid/MS +bicycle/DRSMZG +bicycler/M +bicyclist/SM +bid/SMG +biddable +bidden/U +bidder/MS +bidding/M +biddy/SM +bide/S +bidet/MS +bidirectional/Y +biennial/MYS +biennium/MS +bier/M +biff/SGD +bifocal/S +bifocals/M +bifurcate/XDSGN +bifurcation/M +big/P +bigamist/SM +bigamous +bigamy/M +bigger +biggest +biggie/MS +biggish +bighead/SM +bighearted/P +bigheartedness/M +bighorn/SM +bight/MS +bigmouth/M +bigmouths +bigness/M +bigot/MDS +bigotry/SM +bigwig/MS +bijou/M +bijoux +bike/DRSMZG +biker/M +bikini/MS +bilabial/MS +bilateral/Y +bilberry/S +bile/M +bilge/MS +bilingual/SMY +bilingualism/M +bilious/P +biliousness/M +bilirubin +bilk/SZGDR +bilker/M +bill/SBJGMD +billboard/MS +billet/GMDS +billfold/SM +billhook/S +billiard/S +billiards/M +billing/M +billingsgate/M +billion/MHS +billionaire/SM +billionth/M +billionths +billow/GMDS +billowy +billy/SM +billycan/S +bimbo/MS +bimetallic/SM +bimetallism/M +bimonthly/SM +bin/SM +binary/SM +bind's +bind/AUGS +binder/MS +bindery/SM +binding/MS +bindweed/M +binge/MDS +bingo/M +binman +binmen +binnacle/SM +binned +binning +binocular/MS +binomial/SM +bio/SM +biochemical/SMY +biochemist/MS +biochemistry/M +biodegradability/M +biodegrade/DSGB +biodiversity/M +bioethics/M +biofeedback/M +biog +biographer/SM +biographic +biographical/Y +biography/SM +biol +biologic +biological/Y +biologist/MS +biology/M +biomass/M +biomedical +bionic/S +bionically +bionics/M +biophysical +biophysicist/MS +biophysics/M +biopic/MS +biopsy/GDSM +bioreactor/S +biorhythm/MS +biosensor/S +biosphere/SM +biosynthesis +biotech +biotechnological +biotechnology/M +biotin/M +bipartisan +bipartisanship/M +bipartite +biped/MS +bipedal +biplane/MS +bipolar +bipolarity/M +biracial +birch/GMDS +bird/SZGMDR +birdbath/M +birdbaths +birdbrain/SMD +birdcage/S +birder/M +birdhouse/MS +birdie/MDS +birdieing +birdlike +birdlime/M +birdseed/M +birdsong +birdwatcher/SM +birdying +biretta/SM +birth/ZGMDR +birthday/MS +birther/M +birthmark/MS +birthplace/MS +birthrate/MS +birthright/MS +births/A +birthstone/SM +biscuit/SM +bisect/DGS +bisection/MS +bisector/SM +bisexual/MYS +bisexuality/M +bishop/MS +bishopric/SM +bismuth/M +bison/M +bisque/M +bistro/MS +bit/CSMG +bitch/GMDS +bitchily +bitchiness/M +bitchy/PRT +bitcoin/SM +bite/RSMZ +biter/M +biting/Y +bitmap/S +bitten +bitter/PMRYTS +bittern/SM +bitterness/M +bitters/M +bittersweet/MS +bitty/TR +bitumen/M +bituminous +bivalent +bivalve/SM +bivouac/MS +bivouacked +bivouacking +biweekly/SM +biyearly +biz/M +bizarre/Y +bk +bl/DG +blab/SM +blabbed +blabber/DGS +blabbermouth/M +blabbermouths +blabbing +black/PXTGMDNRYS +blackamoor/MS +blackball/SGMD +blackberry/GSM +blackbird/SM +blackboard/MS +blackcurrant/S +blacken/DG +blackface +blackguard/SM +blackhead/MS +blacking/M +blackish +blackjack/MDGS +blackleg/S +blacklist/MDSG +blackmail/MDRSZG +blackmailer/M +blackness/M +blackout/SM +blacksmith/M +blacksmiths +blacksnake/SM +blackthorn/SM +blacktop/SM +blacktopped +blacktopping +bladder/MS +blade/MDS +blag/S +blagged +blagging +blah/M +blahs/M +blame/MGDRS +blameable +blameless/YP +blamelessness/M +blameworthiness/M +blameworthy/P +blammo +blanch/GDS +blancmange/MS +bland/PTRY +blandish/DSLG +blandishment/SM +blandness/M +blank/TGPMDRYS +blanket/GMDS +blankness/M +blare/MGDS +blarney/SMDG +blase +blaspheme/ZGDRS +blasphemer/M +blasphemous/Y +blasphemy/SM +blast/ZGMDRS +blaster/M +blastoff/MS +blat/S +blatancy/SM +blatant/Y +blather/SMDG +blaze/MZGDRS +blazer/M +blazon/MDGS +bldg +bleach/MDRSZG +bleached/U +bleacher/M +bleak/TPRY +bleakness/M +blear +blearily +bleariness/M +bleary/PRT +bleat/GMDS +bleed/ZGRS +bleeder/M +bleeding/M +bleep/ZGMDRS +bleeper/M +blemish/GMDS +blemished/U +blench/DSG +blend/ZGMDRS +blender/M +bless/GDSJ +blessed/YP +blessedness/M +blessing/M +bletch +blew +blight/ZGMDRS +blimey +blimp/MS +blimpish +blind/PZTGMDRYS +blinder/M +blindfold/SMDG +blinding/Y +blindness/M +blindside/DSG +blini/MS +blink/ZGMDRS +blinker/MDG +blintz/MS +blintze/M +blip/SM +bliss/M +blissful/YP +blissfulness/M +blister/GMDS +blistering/Y +blistery +blithe/PYTR +blitheness/M +blither/G +blithesome +blitz/GMDS +blitzkrieg/MS +blivet/S +blizzard/SM +bloat/ZGDRS +bloatware +blob/SM +blobbed +blobbing +bloc/SM +block's +block/UGDS +blockade/MZGDRS +blockader/M +blockage/MS +blockbuster/SM +blockbusting/M +blocker/MS +blockhead/SM +blockhouse/MS +blog/SM +blogged +blogger/MS +blogging +bloke/MS +blokish +blond/PTMRS +blonde/MS +blondish +blondness/M +blood/GMDS +bloodbath/M +bloodbaths +bloodcurdling +bloodhound/SM +bloodily +bloodiness/M +bloodless/YP +bloodlessness/M +bloodletting/M +bloodline/SM +bloodmobile/MS +bloodshed/M +bloodshot +bloodstain/SMD +bloodstock/M +bloodstream/SM +bloodsucker/SM +bloodsucking +bloodthirstily +bloodthirstiness/M +bloodthirsty/RPT +bloody/PTGDRS +bloom/ZGMDRS +bloomer/M +bloop/ZGMDRS +blooper/M +blossom/GMDS +blossomy +blot/SM +blotch/GMDS +blotchy/TR +blotted +blotter/MS +blotting +blotto +blouse/MGDS +blow/SZGMR +blower/M +blowfly/SM +blowgun/MS +blowhard/MS +blowhole/S +blowjob/SM +blowlamp/S +blown +blowout/SM +blowpipe/SM +blowsy/RT +blowtorch/MS +blowup/MS +blowy/TR +blubber/GSMD +blubbery +bludgeon/MDGS +blue/DRSPMTG +bluebell/MS +blueberry/SM +bluebird/MS +bluebonnet/SM +bluebottle/SM +bluefish/MS +bluegill/MS +bluegrass/M +blueish +bluejacket/SM +bluejeans/M +blueness/M +bluenose/MS +bluepoint/MS +blueprint/MDGS +bluestocking/SM +bluesy/RT +bluet/MS +bluff/ZTGPMDRYS +bluffer/M +bluffness/M +bluing/M +bluish +blunder/MDRZGS +blunderbuss/MS +blunderer/M +blunt/PTGDRYS +bluntness/M +blur/SM +blurb/MS +blurred +blurriness/M +blurring +blurry/TRP +blurt/GDS +blush/ZGMDRS +blusher/M +bluster/MDRSZG +blusterer/M +blusterous +blustery +blvd +boa/SM +boar/SM +board/ZGMDRS +boarder/M +boarding/M +boardinghouse/MS +boardroom/MS +boardwalk/MS +boast/ZGMDRS +boaster/M +boastful/PY +boastfulness/M +boat/SZGMDR +boater/M +boathouse/MS +boating/M +boatload/S +boatman/M +boatmen +boatswain/SM +boatyard/S +bob/SM +bobbed +bobbin/MS +bobbing +bobble/MGDS +bobby/SM +bobbysoxer/SM +bobcat/MS +bobolink/SM +bobsled/SM +bobsledded +bobsledder/MS +bobsledding +bobsleigh/M +bobsleighs +bobtail/SM +bobwhite/MS +boccie/M +bock/M +bod/SMDG +bodacious +bode/S +bodega/MS +bodge/GDS +bodice/MS +bodily +bodkin/MS +body/DSM +bodybuilder/SM +bodybuilding/M +bodyguard/MS +bodysuit/SM +bodywork/M +boffin/S +boffo +bog/SM +boga +bogey/GMDS +bogeyman/M +bogeymen +bogged +bogging +boggle/GDS +boggy/TR +bogie/MS +bogon +bogosity +bogus +bogyman/M +bogymen +bohemian/SM +bohemianism/M +boil/SJZGMDR +boiler/M +boilermaker/SM +boilerplate/M +boink/GDS +boisterous/YP +boisterousness/M +bola/SM +bold/PTRY +boldface/DM +boldness/M +bole/SM +bolero/MS +bolivar/MS +bolivares +boll/SM +bollard/S +bollix/GMDS +bollocking/S +bollocks +bologna/M +bolshie +bolster/GMDS +bolt's +bolt/USGD +bolthole/S +bolus/MS +bomb/SJZGMDR +bombard/GDLS +bombardier/MS +bombardment/SM +bombast/M +bombastic +bombastically +bomber/M +bombproof +bombshell/SM +bombsite/S +bonanza/MS +bonbon/MS +bonce/S +bond/SGMD +bondage/M +bondholder/MS +bonding/M +bondman/M +bondmen +bondsman/M +bondsmen +bondwoman/M +bondwomen +bone/DRSMZG +bonehead/SMD +boneless +boner/M +boneshaker/S +boneyard +bonfire/MS +bong/SGMD +bongo/MS +bonhomie/M +boniness/M +bonito/MS +bonk/SZGD +bonnet/MS +bonny/TR +bonobo/MS +bonsai/M +bonus/MS +bony/PTR +boo/SMDHG +boob/SGMD +booby/SM +boodle/MS +booger/S +boogeyman/M +boogeymen +boogie/MDS +boogieing +boogieman/M +boohoo/GMDS +book/SBJGMD +bookbinder/SM +bookbindery/SM +bookbinding/M +bookcase/MS +bookend/MS +bookie/MS +booking/M +bookish +bookkeeper/MS +bookkeeping/M +booklet/MS +bookmaker/SM +bookmaking/M +bookmark/SMDG +bookmobile/SM +bookplate/MS +bookseller/MS +bookshelf/M +bookshelves +bookshop/SM +bookstall/S +bookstore/MS +bookworm/SM +boom/SZGMDR +boombox/MS +boomerang/MDGS +boon/SM +boondocks/M +boondoggle/MZGDRS +boondoggler/M +boonies/M +boor/SM +boorish/PY +boorishness/MS +boost/ZGMDRS +booster/M +boot's +boot/ASGD +bootblack/SM +bootee/MS +booth/M +booths +bootlace/S +bootleg/MS +bootlegged +bootlegger/MS +bootlegging/M +bootless +bootstrap/MS +bootstrapped +bootstrapping +booty/SM +booze/MZGDRS +boozer/M +boozy/TR +bop/SM +bopped +bopping +borax/M +bordello/MS +border/GMDS +borderland/MS +borderline/MS +bore/DRSMZG +boredom/M +borehole/S +borer/M +boring/Y +born/IAU +borne +boron/M +borough/M +boroughs +borrow/SDRZGJ +borrower/M +borrowing/M +borscht/M +borstal/S +borzoi/SM +bosh/M +bosom's +bosom/US +bosomy +boss/DSGM +bossily +bossiness/M +bossism/M +bossy/RTP +bot/S +botanic +botanical/Y +botanist/SM +botany/M +botch/DRSZGM +botcher/M +both +bother/SMDG +botheration +bothersome +botnet/SM +bottle/DRSMZG +bottleneck/MS +bottler/M +bottom/SMDG +bottomless +botulinum +botulism/M +boudoir/SM +bouffant/SM +bougainvillea/MS +bough/M +boughs +bought +bouillabaisse/SM +bouillon/MS +boulder/SM +boules +boulevard/SM +bounce/DRSMZG +bouncer/M +bouncily +bounciness/M +bouncy/RTP +bound/ASMGD +boundary/SM +bounden +bounder/SM +boundless/PY +boundlessness/M +bounteous/YP +bounteousness/M +bountiful/YP +bountifulness/M +bounty/SM +bouquet/SM +bourbon/SM +bourgeois/M +bourgeoisie/M +boustrophedon +bout/MS +boutique/SM +boutonniere/MS +bouzouki/MS +bovine/SM +bovver +bow/ZGSMDR +bowdlerisation/MS +bowdlerise/DSG +bowed/U +bowel/SM +bower/M +bowl/MDRZGS +bowleg/SM +bowlegged +bowler/M +bowlful/SM +bowline/SM +bowling/M +bowman/M +bowmen +bowsprit/SM +bowstring/SM +bowwow/SM +box/ZGMDNRS +boxcar/SM +boxer/M +boxing/M +boxlike +boxroom/S +boxwood/M +boxy/RT +boy/SM +boycott/SGMD +boyfriend/MS +boyhood/SM +boyish/YP +boyishness/M +boysenberry/SM +bozo/MS +bpm +bps +bra/SM +brace/MZGDRS +bracelet/MS +bracer/M +bracero/MS +bracken/M +bracket/GMDS +brackish/P +brackishness/M +bract/MS +brad/SM +bradawl/S +bradycardia +brae/SM +brag/SM +braggadocio/SM +braggart/SM +bragged +bragger/MS +bragging +braid/GMDS +braiding/M +braille/M +brain/GMDS +brainchild/M +brainchildren/M +braininess/M +brainless/Y +brainpower +brainstorm/SMDG +brainstorming/M +brainteaser/SM +brainwash/DSG +brainwashing/M +brainwave/S +brainy/PTR +braise/GDS +brake/MGDS +brakeman/M +brakemen +bramble/MS +brambly +bran/M +branch/GMDS +branchlike +brand/ZGMDRS +branded/U +brander/M +brandish/DSG +brandy/GDSM +brash/PTRY +brashness/M +brass/MS +brasserie/MS +brassiere/MS +brassily +brassiness/M +brassy/PTR +brat/SM +bratty/RT +bratwurst/SM +bravado/M +brave/GPMYDTRS +braveness/M +bravery/M +bravo/SM +bravura/SM +brawl/SDRZGM +brawler/M +brawn/M +brawniness/M +brawny/RTP +bray/DGSM +braze/DRSZG +brazen/SDYGP +brazenness/M +brazer/M +brazier/SM +breach/GMDS +bread/GMDHS +breadbasket/SM +breadboard/SM +breadbox/MS +breadcrumb/MS +breadfruit/SM +breadline/MS +breadth/M +breadths +breadwinner/SM +break/BMZGRS +breakable/MS +breakage/MS +breakaway/MS +breakdown/MS +breaker/M +breakfast/MDGS +breakfront/MS +breakneck +breakout/MS +breakpoints +breakthrough/M +breakthroughs +breakup/SM +breakwater/SM +bream/MS +breast/SMDG +breastbone/MS +breastfed +breastfeed/GS +breastplate/SM +breaststroke/SM +breastwork/MS +breath/MDRSZGB +breathalyse/ZGDRS +breathe +breather/M +breathing/M +breathless/PY +breathlessness/M +breaths +breathtaking/Y +breathy/RT +bred/I +breech/MS +breed/SRZGM +breeder/M +breeding/IM +breeze/DSMG +breezeway/SM +breezily +breeziness/M +breezy/RTP +brethren +breve/SM +brevet/SM +brevetted +brevetting +breviary/SM +brevity/M +brew/MDRZGS +brewer/M +brewery/SM +brewpub/SM +briar/SM +bribe/DRSMZG +briber/M +bribery/M +brick/SMDG +brickbat/SM +brickie/S +bricklayer/MS +bricklaying/M +brickwork/M +brickyard/S +bridal/SM +bride/SM +bridegroom/SM +bridesmaid/MS +bridge/DSMG +bridgeable/U +bridgehead/SM +bridgework/M +bridle/DSMG +bridled/U +bridleway/S +brie/M +brief's +brief/CSDTGJ +briefcase/SM +briefer +briefing/CM +briefly +briefness/M +brig/MS +brigade/SM +brigadier/MS +brigand/SM +brigandage/M +brigantine/MS +bright/SPNRYXT +brighten/DRZG +brightener/M +brightness/M +brights/M +brill +brilliance/M +brilliancy/M +brilliant/MYS +brilliantine/M +brim/MS +brimful +brimless +brimmed +brimming +brimstone/M +brindle/DM +brine/M +bring/SRZG +bringer/M +brininess/M +brink/SM +brinkmanship/M +briny/RTP +brioche/SM +briquette/MS +brisk/SDRYTGP +brisket/SM +briskness/M +bristle/DSMG +bristly/TR +britches/M +brittle/PRMT +brittleness/M +bro/SMH +broach/MDSG +broad/SMNRYXTP +broadband/M +broadcast/AMGS +broadcaster/MS +broadcasting/M +broadcloth/M +broaden/DG +broadloom/M +broadminded +broadness/M +broadsheet/SM +broadside/MGDS +broadsword/SM +brocade/DSMG +broccoli/M +brochette/SM +brochure/MS +brogan/SM +brogue/SM +broil/SMDRZG +broiler/M +broke +broken/YP +brokenhearted/Y +brokenness/M +broker/SMDG +brokerage/MS +brolly/S +bromide/SM +bromidic +bromine/M +bronc/SM +bronchi +bronchial +bronchitic +bronchitis/M +bronchus/M +bronco/SM +broncobuster/SM +brontosaur/MS +brontosaurus/MS +bronze/DSMG +brooch/MS +brood/SMDRZG +brooder/M +broodily +brooding/MY +broodmare/MS +broody/RMPT +brook/SMDG +brooklet/SM +broom/SM +broomstick/MS +broth/MRZ +brothel/MS +brother/MY +brotherhood/MS +brotherliness/M +broths +brougham/SM +brought +brouhaha/SM +brow/MS +browbeat/SNG +brown/SMDRPTG +brownfield +brownie/MS +brownish +brownness/M +brownout/SM +brownstone/MS +browse/DRSMZG +browser/M +brr +bruin/SM +bruise/DRSMZG +bruiser/M +bruising/M +bruit/SDG +brunch/MDSG +brunet/SM +brunette/MS +brunt/M +brush/MDSG +brushoff/SM +brushstroke/S +brushwood/M +brushwork/M +brusque/RPYT +brusqueness/M +brutal/Y +brutalisation/M +brutalise/GDS +brutality/SM +brute/SM +brutish/PY +brutishness/M +bu +bub/SM +bubble/DSMG +bubblegum/M +bubbly/RMT +bubo/M +buboes +buccaneer/SGMD +buck/MDGS +buckaroo/SM +buckboard/MS +bucket/SGMD +bucketful/MS +buckeye/MS +buckle's +buckle/UDSG +buckler/MS +buckram/M +bucksaw/MS +buckshot/M +buckskin/MS +buckteeth +bucktooth/MD +buckwheat/M +buckyball/SM +bucolic/MS +bucolically +bud/SM +budded +budding/S +buddy/SM +budge/DSG +budgerigar/MS +budget/SGMD +budgetary +budgie/SM +buff/AMDGS +buffalo/MDG +buffaloes +buffer/SMDG +buffet/SMDGJ +buffoon/SM +buffoonery/M +buffoonish +bug's +bug/CS +bugaboo/SM +bugbear/SM +bugged/C +bugger/SMDG +buggery +bugging/C +buggy/RSMT +bugle/DRSMZG +bugler/M +build/SMRZGJ +builder/M +building/M +buildup/SM +built/AI +builtin +bulb/MS +bulbous +bulge/DSMG +bulgy/RT +bulimarexia/M +bulimia/M +bulimic/SM +bulk/MDGS +bulkhead/MS +bulkiness/M +bulky/RTP +bull/MDGS +bulldog/SM +bulldogged +bulldogging +bulldoze/ZGDRS +bulldozer/M +bullet/SM +bulletin/MDGS +bulletproof/SDG +bullfight/SMRZG +bullfighter/M +bullfighting/M +bullfinch/MS +bullfrog/MS +bullhead/MDS +bullheaded/PY +bullheadedness/M +bullhorn/MS +bullion/M +bullish/YP +bullishness/M +bullock/SM +bullpen/SM +bullring/MS +bullshit/MS! +bullshitted/! +bullshitter/SM! +bullshitting/! +bullwhip/S +bully/DSMG +bulrush/MS +bulwark/MS +bum/SM +bumbag/S +bumble/DRSZG +bumblebee/SM +bumbler/M +bumf +bummed +bummer/SM +bummest +bumming +bump/MDRZGS +bumper/M +bumph +bumpiness/M +bumpkin/MS +bumptious/PY +bumptiousness/M +bumpy/PRT +bun/SM +bunch/MDSG +bunchy/RT +bunco/SMDG +bundle/DSMG +bung/MDGS +bungalow/MS +bungee/SM +bunghole/MS +bungle/DRSMZG +bungler/M +bunion/SM +bunk's +bunk/CDGS +bunker/SM +bunkhouse/SM +bunkum/M +bunny/SM +bunt/MDGSJ +bunting/M +buoy/MDGS +buoyancy/M +buoyant/Y +bur/SMY +burble/DSMG +burbs/M +burden's +burden/USGD +burdensome +burdock/M +bureau/SM +bureaucracy/SM +bureaucrat/MS +bureaucratic +bureaucratically +bureaucratisation/M +bureaucratise/GDS +burg/MRZS +burgeon/DSG +burger/M +burgh/MRZ +burgher/M +burghs +burglar/MS +burglarise/GDS +burglarproof +burglary/SM +burgle/DSG +burgomaster/SM +burgundy/SM +burial/ASM +burka/SM +burl/MDS +burlap/M +burlesque/MGDS +burliness/M +burly/RPT +burn/MDRZGSB +burnable/SM +burner/M +burnish/ZGMDRS +burnisher/M +burnoose/MS +burnout/MS +burnt +burp/MDGS +burqa/SM +burr/MDGS +burrito/MS +burro/SM +burrow/SMDRZG +burrower/M +bursa/M +bursae +bursar/SM +bursary/SM +bursitis/M +burst/SMG +bury/ADSG +bus/AMS +busboy/SM +busby/SM +busgirl/MS +bush/MDSGJ +bushel/SM +bushelled +bushelling/S +bushiness/M +bushing/M +bushman/M +bushmaster/SM +bushmen +bushwhack/DRSZG +bushwhacker/M +bushy/RPT +busily +business/MS +businesslike +businessman/M +businessmen +businessperson/SM +businesswoman/M +businesswomen +busk/DRZGS +buskin/SM +busload/S +buss/MDSG +bussing/M +bust/MDRZGS +buster/M +bustle/DSMG +busty/RZT +busy/DRSTGP +busybody/SM +busyness/M +busywork/M +but/ACS +butane/M +butch/MRSZ +butcher/MDG +butchery/SM +butler/SM +butt/MDRZGS +butte/SM +butted/A +butter/MDG +butterball/MS +buttercream +buttercup/SM +butterfat/M +butterfingered +butterfingers/M +butterfly/GDSM +buttermilk/M +butternut/SM +butterscotch/M +buttery/TRSM +butting/A +buttock/SM +button's +button/USDG +buttonhole/DSMG +buttonwood/MS +buttress/MDSG +butty/S +buxom +buy/ZGSMR +buyback/SM +buyer/M +buyout/SM +buzz/MDRSZG +buzzard/MS +buzzer/M +buzzkill/SM +buzzword/SM +bx +bxs +by/M +bye/SM +bygone/SM +bylaw/SM +byline/SM +bypass/GMDS +bypath/M +bypaths +byplay/M +byproduct/MS +byre/S +byroad/SM +bystander/MS +byte/MS +byway/SM +byword/SM +byzantine +c/IES +ca +cab/SMRZ +cabal/MS +cabala's +caballero/MS +cabana/SM +cabaret/SM +cabbage/MS +cabbed +cabbing +cabby/SM +cabdriver/SM +cabin/MS +cabinet/SM +cabinetmaker/MS +cabinetmaking/M +cabinetry/M +cabinetwork/M +cable/MGDS +cablecast/GMS +cablegram/MS +cabochon/SM +caboodle/M +caboose/SM +cabriolet/SM +cabstand/SM +cacao/MS +cache/MGDS +cachepot/SM +cachet/MS +cackle/MZGDRS +cackler/M +cacophonous +cacophony/SM +cacti +cactus/M +cad/SM +cadaver/SM +cadaverous +caddie/MDS +caddish/YP +caddishness/M +caddying +cadence/DSM +cadenza/SM +cadet/MS +cadge/ZGDRS +cadger/M +cadmium/M +cadre/MS +caducei +caduceus/M +caesium/M +caesura/SM +cafe/SM +cafeteria/MS +cafetiere/S +caff/CS +caffeinated +caffeine/M +cage/DSMG +cagey +cagier +cagiest +cagily +caginess/M +cagoule/S +cahoot/MS +caiman/MS +cairn/MS +caisson/SM +caitiff/SM +cajole/ZGLDRS +cajolement/M +cajoler/M +cajolery/M +cake/DSMG +cakewalk/SM +cal +calabash/MS +calaboose/SM +calamari/SM +calamine/M +calamitous/Y +calamity/SM +calcareous +calciferous +calcification/M +calcify/GNDS +calcimine/DSMG +calcine/DSG +calcite/M +calcium/M +calculable/I +calculate/AGNVDSX +calculated/Y +calculating/Y +calculation/AM +calculator/SM +calculi +calculus/M +caldera/SM +calendar/MDGS +calender's +calf/M +calfskin/M +calibrate/GNDSX +calibration/M +calibrator/SM +calibre/SM +calico/M +calicoes +californium/M +caliper/SGMD +caliph/M +caliphate/MS +caliphs +calisthenic +calisthenics's +call/ASGMD +calla/MS +callable +callback/MS +called/U +caller/MS +calligrapher/SM +calligraphic +calligraphist/MS +calligraphy/M +calling/SM +calliope/MS +callisthenics +callosity/SM +callous/PGDSY +callousness/M +callow/RPT +callowness/M +callus/MDSG +calm/PSTGMDRY +calmness/M +caloric +calorie/MS +calorific +calumet/MS +calumniate/GNDS +calumniation/M +calumniator/MS +calumnious +calumny/SM +calve/GDS +calypso/MS +calyx/MS +cam/SM +camaraderie/M +camber/MDSG +cambial +cambium/SM +cambric/M +camcorder/SM +came +camel/MS +camelhair +camellia/MS +cameo/MS +camera/MS +cameraman/M +cameramen +camerawoman/M +camerawomen +camerawork +camiknickers +camisole/SM +camouflage/MZGDRS +camouflager/M +camp's +camp/CSGD +campaign/SMDRZG +campaigner/M +campanile/SM +campanologist/MS +campanology/M +camper/MS +campfire/SM +campground/SM +camphor/M +camping/M +campsite/SM +campus/MS +campy/TR +camshaft/SM +can't +can/SMDRZG +canal/MS +canalisation/M +canalise/GDS +canape/MS +canard/MS +canary/SM +canasta/M +cancan/MS +cancel/S +cancellation/SM +cancelled +canceller/SM +cancelling +cancer/MS +cancerous +candelabra/SM +candelabrum/M +candid/YP +candida +candidacy/SM +candidate/MS +candidature/SM +candidness/M +candle/MZGDRS +candlelight/M +candlelit +candlepower/M +candler/M +candlestick/MS +candlewick/SM +candour/M +candy/GDSM +candyfloss +cane/SM +canebrake/MS +caner/M +canine/MS +canister/SM +canker/GMDS +cankerous +cannabis/MS +canned +cannelloni/M +cannery/SM +cannibal/SM +cannibalisation/M +cannibalise/GDS +cannibalism/M +cannibalistic +cannily/U +canniness/M +canning +cannon/GMDS +cannonade/MGDS +cannonball/SM +cannot +canny/UTR +canoe/MDS +canoeing +canoeist/SM +canola/M +canon/MS +canonical/Y +canonisation/MS +canonise/DSG +canoodle/DSG +canopy/GDSM +canst +cant's +cant/CZRDGS +cantabile +cantaloupe/SM +cantankerous/PY +cantankerousness/M +cantata/MS +canteen/MS +canter/CM +cantered +cantering +canticle/MS +cantilever/MDGS +canto/MS +canton/MLS +cantonal +cantonment/MS +cantor/MS +canvas/MGDS +canvasback/SM +canvass/MDRSZG +canvasser/M +canyon/MGS +cap/SMDRBZ +capabilities +capability/IM +capable/I +capably/I +capacious/PY +capaciousness/M +capacitance/M +capacities +capacitor/SM +capacity/IM +caparison/MDGS +cape/SM +caper/GMD +capeskin/M +capillarity/M +capillary/SM +capital/MSY +capitalisation/M +capitalise/ADSG +capitalism/M +capitalist/SM +capitalistic +capitalistically +capitation/CSM +capitol/SM +capitulate/ADSXGN +capitulation/AM +caplet/MS +capo/SM +capon/MS +capped/UA +capping/UA +cappuccino/SM +caprice/SM +capricious/PY +capriciousness/M +capsicum/SM +capsize/DSG +capstan/SM +capstone/MS +capsular +capsule/DSMG +capsulise/DSG +capt +captain/SMDG +captaincy/SM +caption/SMDG +captious/YP +captiousness/M +captivate/DSGN +captivation/M +captivator/SM +captive/SM +captivity/SM +captor/MS +capture/ADSMG +car/SMDRZG +carafe/MS +caramel/SM +caramelise/DSG +carapace/SM +carat/MS +caravan/SM +caravansary/SM +caravel/SM +caraway/SM +carbide/SM +carbine/SM +carbohydrate/SM +carbolic +carbon/MS +carbonaceous +carbonate/MGNDS +carbonation/M +carboniferous +carbonise/GDS +carborundum/M +carboy/MS +carbs +carbuncle/SM +carbuncular +carburettor/MS +carcass/MS +carcinogen/SM +carcinogenic/MS +carcinogenicity/M +carcinoma/MS +card/ESGMD +cardamom/SM +cardamon/S +cardboard/M +carder/MS +cardholder/S +cardiac +cardiae +cardies +cardigan/SM +cardinal/SMY +cardio +cardiogram/SM +cardiograph/M +cardiographs +cardiologist/MS +cardiology/M +cardiomyopathy +cardiopulmonary +cardiovascular +cardsharp/MRZS +cardsharper/M +care/SM +careen/DGS +career/MDGS +careerism +careerist/SM +carefree +careful/YP +carefuller +carefullest +carefulness/M +caregiver/SM +careless/PY +carelessness/M +carer/M +caress/MDSG +caret/MS +caretaker/MS +careworn +carfare/M +cargo/M +cargoes +carhop/MS +caribou/SM +caricature/MGDS +caricaturist/SM +caries/M +carillon/SM +caring/M +carious +carjack/JSDRZG +carjacker/M +carjacking/M +carload/SM +carmine/SM +carnage/M +carnal/Y +carnality/M +carnation/IMS +carnelian/MS +carnival/MS +carnivora +carnivore/SM +carnivorous/PY +carnivorousness/M +carny/SM +carob/MS +carol/MS +carolled +caroller/MS +carolling +carom/GMDS +carotene/M +carotid/SM +carousal/SM +carouse/DRSMZG +carousel/SM +carouser/M +carp/SZGMDR +carpal/MS +carpel/MS +carpenter/MDGS +carpentry/M +carper/M +carpet/MDGS +carpetbag/MS +carpetbagged +carpetbagger/MS +carpetbagging +carpeting/M +carpi +carpool/SMDG +carport/SM +carpus/M +carrel/MS +carriage/SM +carriageway/S +carrier/M +carrion/M +carrot/MS +carroty +carry/ZGDRSM +carryall/SM +carrycot/S +carryout +carryover/MS +carsick/P +carsickness/M +cart/SZGMDR +cartage/M +cartel/MS +carter/M +carthorse/SM +cartilage/SM +cartilaginous +cartload/SM +cartographer/SM +cartographic +cartography/M +carton/MS +cartoon/SMDG +cartoonist/MS +cartridge/MS +cartwheel/GMDS +carve/JZGDRS +carver/M +carvery/S +carving/M +caryatid/MS +casaba/MS +cascade/DSMG +cascara/SM +case/LDSJMG +casebook/S +cased/U +caseharden/DGS +casein/M +caseload/MS +casement/MS +casework/ZMR +caseworker/M +cash/GMDS +cashback/M +cashbook/MS +cashew/MS +cashier/GSMD +cashless +cashmere/M +casing/M +casino/MS +cask/SM +casket/MS +cassava/SM +casserole/DSMG +cassette/MS +cassia/MS +cassock/SM +cassowary/SM +cast/ASGM +castanet/MS +castaway/MS +caste/JMZRS +castellated +caster/M +castigate/DSGN +castigation/M +castigator/SM +casting/AM +castle/MGDS +castoff/SM +castor/MS +castrate/GNXDS +castration/M +casual/PMYS +casualness/M +casualty/SM +casuist/SM +casuistic +casuistry/M +cat/SM +cataclysm/MS +cataclysmal +cataclysmic +catacomb/SM +catafalque/MS +catalepsy/M +cataleptic/MS +catalogue/DRSMZG +catalogued/U +cataloguer/M +catalpa/SM +catalyse/GDS +catalysis/M +catalyst/MS +catalytic/M +catamaran/SM +catapult/GMDS +cataract/MS +catarrh/M +catastrophe/MS +catastrophic +catastrophically +catatonia/M +catatonic/SM +catbird/SM +catboat/SM +catcall/GSMD +catch/ZGJLMRS +catchall/MS +catcher/M +catchment/MS +catchpenny +catchphrase/SM +catchword/MS +catchy/RT +catechise/DSG +catechism/SM +catechist/SM +categorical/Y +categorisation/SM +categorise/GDS +category/SM +cater/ZGJDRS +catercorner +caterer/M +caterpillar/MS +caterwaul/SMDG +catfish/MS +catgut/M +catharses +catharsis/M +cathartic/SM +cathedral/SM +catheter/SM +catheterise/DSG +cathode/SM +cathodic +catholic +catholicity/M +cation/MS +catkin/MS +catlike +catnap/MS +catnapped +catnapping +catnip/M +catsuit/S +cattail/SM +catted +cattery/S +cattily +cattiness/M +catting +cattle/M +cattleman/M +cattlemen +catty/TPR +catwalk/SM +caucus/MDSG +caudal/Y +caught/U +cauldron/MS +cauliflower/SM +caulk/ZGMDRS +caulker/M +causal/Y +causality/SM +causation/M +causative +cause/MZGDRS +causeless +causer/M +causerie/SM +causeway/SM +caustic/SM +caustically +causticity/M +cauterisation/M +cauterise/GDS +caution/SMDG +cautionary +cautious/IY +cautiousness/M +cavalcade/MS +cavalier/SMY +cavalry/SM +cavalryman/M +cavalrymen +cave/DRSMZG +caveat/MS +caveman/M +cavemen +cavern/MS +cavernous/Y +caviar/M +cavil/MS +cavilled +caviller/MS +cavilling/S +caving/M +cavity/FSM +cavort/DGS +caw/SMDG +cay/CSM +cayenne/M +cayuse/MS +cc +cease/CMGDS +ceasefire/MS +ceaseless/YP +ceaselessness/M +ceca +cecal +cecum/M +cedar/MS +cede/FAGSD +ceder/MS +cedilla/SM +ceilidh +ceilidhs +ceiling/MS +celandine/M +celeb/S +celebrant/SM +celebrate/DSGNX +celebration/M +celebrator/SM +celebratory +celebrity/SM +celeriac +celerity/M +celery/M +celesta/MS +celestial/Y +celibacy/M +celibate/MS +cell/SMD +cellar/MS +cellist/SM +cellmate/SM +cello/MS +cellophane/M +cellphone/MS +cellular/SM +cellulite/M +cellulitis +celluloid/M +cellulose/M +cement/MDRZGS +cementer/M +cementum/M +cemetery/SM +cenotaph/M +cenotaphs +censer/MS +censor/MDGS +censored/U +censorial +censorious/PY +censoriousness/M +censorship/M +censure/BDRSMZG +censurer/M +census/MDSG +cent/SM +centaur/SM +centavo/SM +centenarian/MS +centenary/SM +centennial/MYS +centigrade +centigram/SM +centilitre/MS +centime/SM +centimetre/MS +centipede/SM +central/SMY +centralisation/CM +centralise/CGDS +centraliser/MS +centralism +centralist +centrality/M +centre/MGDS +centreboard/SM +centrefold/SM +centrepiece/SM +centrifugal/Y +centrifuge/DSMG +centripetal/Y +centrism/M +centrist/MS +centurion/SM +century/SM +cephalic +ceramic/SM +ceramicist/SM +ceramics/M +ceramist/MS +cereal/MS +cerebellar +cerebellum/SM +cerebra +cerebral +cerebrate/GNDS +cerebration/M +cerebrovascular +cerebrum/MS +cerement/MS +ceremonial/SMY +ceremonious/UY +ceremoniousness/M +ceremony/SM +cerise/M +cerium/M +cermet/M +cert/S +certain/UY +certainty/USM +certifiable +certifiably +certificate/MGNXDS +certification/M +certify/DSG +certitude/IM +certitudes +cerulean/M +cervical +cervices +cervix/M +cesarean/MS +cessation/MS +cession/KAFSM +cesspit/S +cesspool/MS +cetacean/MS +cf +cg +ch/IFVT +chad/S +chafe/GDS +chaff/GMDS +chaffinch/MS +chagrin/GSMD +chain's +chain/UGDS +chainsaw/MDGS +chair/GMDS +chairlift/MS +chairman/M +chairmanship/SM +chairmen +chairperson/SM +chairwoman/M +chairwomen +chaise/MS +chalcedony/M +chalet/MS +chalice/SM +chalk/GMDS +chalkboard/SM +chalkiness/M +chalky/PRT +challenge/DRSMZG +challenged/U +challenger/M +challis/M +chamber/SMD +chamberlain/MS +chambermaid/MS +chambray/M +chameleon/SM +chamois/M +chamomile/MS +champ/ZGMDS +champagne/MS +champion/GMDS +championship/MS +chance/MGDS +chancel/SM +chancellery/SM +chancellor/MS +chancellorship/M +chancery/SM +chanciness/M +chancre/SM +chancy/PRT +chandelier/SM +chandler/MS +change/MZGDRS +changeability/M +changeable/P +changeableness/M +changeably +changed/U +changeless/Y +changeling/SM +changeover/SM +changer/M +changing/U +channel/SM +channelisation/M +channelise/DSG +channelled +channelling +chanson/SM +chant/ZGMDRS +chanter/M +chanteuse/MS +chantey/SM +chanticleer/MS +chaos/M +chaotic +chaotically +chap/SM +chaparral/SM +chapati/S +chapatti/S +chapbook/MS +chapeau/SM +chapel/MS +chaperonage/M +chaperone/DSMG +chaperoned/U +chaplain/MS +chaplaincy/SM +chaplet/SM +chapped +chapping +chappy/S +chapter/SM +char/SM +charabanc/MS +character/MS +characterful +characterisation/SM +characterise/DSG +characteristic/SM +characteristically/U +characterless +charade/SM +charbroil/GDS +charcoal/MS +chard/M +chardonnay/SM +charge/AESDGM +chargeable/A +charged/U +charger/SM +charily +chariness/M +chariot/SM +charioteer/MS +charisma/M +charismatic/MS +charitable/P +charitableness/M +charitably/U +charity/SM +charlady/S +charlatan/SM +charlatanism/M +charlatanry/M +charlie/S +charm/ZGMDRS +charmer/M +charming/Y +charmless +charred +charring +chart/GMDS +charted/U +charter's +charter/ASGD +charterer/MS +chartreuse/M +charwoman/M +charwomen +chary/TRP +chase/MZGDRS +chaser/M +chasm/MS +chassis/M +chaste/PYTR +chasten/DGS +chasteness/M +chastise/DRSZGL +chastisement/SM +chastiser/M +chastity/M +chasuble/SM +chat/SM +chateau/SM +chateaux +chatelaine/SM +chatline/S +chatroom/M +chatted +chattel/MS +chatter/MDRZGS +chatterbox/MS +chatterer/M +chattily +chattiness/M +chatting +chatty/TPR +chauffeur/GMDS +chauvinism/M +chauvinist/SM +chauvinistic +chauvinistically +cheap/PXTNRY +cheapen/DG +cheapness/M +cheapo +cheapskate/MS +cheat/ZGMDRS +cheater/M +check/AGMDS +checkbox +checked/U +checker/MS +checkers/M +checklist/MS +checkmate/MGDS +checkoff/SM +checkout/SM +checkpoint/SM +checkroom/MS +checksum +checkup/MS +cheddar/M +cheek/GMDS +cheekbone/SM +cheekily +cheekiness/M +cheeky/TPR +cheep/GMDS +cheer/ZGMDRS +cheerer/M +cheerful/YP +cheerfuller +cheerfullest +cheerfulness/M +cheerily +cheeriness/M +cheerio/MS +cheerleader/SM +cheerless/PY +cheerlessness/M +cheery/TPR +cheese/MGDS +cheeseboard/S +cheeseburger/SM +cheesecake/SM +cheesecloth/M +cheeseparing/M +cheesiness/M +cheesy/TPR +cheetah/M +cheetahs +chef/SM +chem +chemical/SMY +chemise/MS +chemist/MS +chemistry/M +chemo/M +chemotherapeutic +chemotherapy/M +chemurgy/M +chenille/M +cheque/MZGDRS +chequebook/MS +chequer/MDG +chequerboard/MS +chequers/M +cherish/DSG +cheroot/MS +cherry/SM +chert/M +cherub/MS +cherubic +cherubim +chervil/M +chess/M +chessboard/MS +chessman/M +chessmen +chest/MDS +chesterfield/SM +chestful/SM +chestnut/SM +chesty/TR +chevalier/SM +cheviot/M +chevron/MS +chew/SZGMDR +chewer/M +chewiness/M +chewy/PTR +chg +chge +chi/SM +chiaroscuro/M +chic/PTMR +chicane/MS +chicanery/SM +chichi/MS +chick/XMNS +chickadee/SM +chicken/MDG +chickenfeed/M +chickenhearted +chickenpox/M +chickenshit/S! +chickpea/SM +chickweed/M +chicle/M +chicness/M +chicory/SM +chide/GDS +chiding/Y +chief/TMRYS +chiefdom/M +chieftain/MS +chieftainship/SM +chiffon/M +chiffonier/MS +chigger/MS +chignon/MS +chihuahua/SM +chilblain/SM +child/M +childbearing/M +childbirth/M +childbirths +childcare/M +childhood/SM +childish/YP +childishness/M +childless/P +childlessness/M +childlike +childminder/S +childminding +childproof/GSD +children/M +chill/JPZTGMDRS +chiller/M +chilli/TPMR +chilliness/M +chilling/Y +chillness/M +chilly/S +chime/MZGDRS +chimer/M +chimera/MS +chimeric +chimerical +chimney/MS +chimp/MS +chimpanzee/SM +chin/SM +china/M +chinaware/M +chinchilla/MS +chine/MS +chink/GMDS +chinless +chinned +chinning +chino/MS +chinstrap/MS +chintz/M +chintzy/RT +chinwag/S +chip/SM +chipboard +chipmunk/SM +chipolata/S +chipped +chipper/MS +chippie +chipping/S +chippy/S +chirography/M +chiropodist/MS +chiropody/M +chiropractic/SM +chiropractor/SM +chirp/GMDS +chirpily +chirpy/PTR +chirrup/GMDS +chisel/MS +chiselled +chiseller/MS +chiselling +chit/SM +chitchat/SM +chitchatted +chitchatting +chitin/M +chitinous +chitosan +chitterlings/M +chivalrous/PY +chivalrousness/M +chivalry/M +chive/MS +chivy/GDS +chlamydia/MS +chlamydiae +chloral/M +chlordane/M +chloride/MS +chlorinate/GNDS +chlorination/M +chlorine/M +chlorofluorocarbon/SM +chloroform/SGMD +chlorophyll/M +chloroplast/MS +chm +choc/S +chock/GMDS +chockablock +chocoholic/SM +chocolate/MS +chocolatey +choice/MTRS +choir/MS +choirboy/MS +choirmaster/SM +choke/MZGDRS +chokecherry/SM +choker/M +cholecystectomy +cholecystitis +choler/M +cholera/M +choleric +cholesterol/M +chomp/ZGMDRS +choose/ZGRS +chooser/M +choosiness/M +choosy/TPR +chop/SM +chophouse/SM +chopped +chopper/MDGS +choppily +choppiness/M +chopping +choppy/TPR +chopstick/SM +choral/MYS +chorale/MS +chord/MS +chordal +chordate/SM +chore/MS +chorea/M +choreograph/DRZG +choreographer/M +choreographic +choreographically +choreographs +choreography/M +chorister/SM +choroid/MS +chortle/MZGDRS +chortler/M +chorus/GMDS +chose +chosen +chow/SGMD +chowder/MS +chrism/M +christen/ASGD +christening/MS +christian/U +christology +chromatic +chromatically +chromatin/M +chromatography +chrome/MGDS +chromium/M +chromosomal +chromosome/MS +chronic +chronically +chronicle/DRSMZG +chronicler/M +chronograph/M +chronographs +chronological/Y +chronologist/MS +chronology/SM +chronometer/SM +chrysalis/MS +chrysanthemum/MS +chub/SM +chubbiness/M +chubby/TPR +chuck/GMDS +chuckhole/SM +chuckle/MGDS +chuffed +chug/SM +chugged +chugging +chukka/MS +chum/SM +chummed +chummily +chumminess/M +chumming +chummy/PTR +chump/MS +chunder/GDS +chunk/GMDS +chunkiness/M +chunky/PTR +chunter/DGS +church/MS +churchgoer/SM +churchgoing/M +churchman/M +churchmen +churchwarden/MS +churchwoman +churchwomen +churchyard/SM +churl/MS +churlish/PY +churlishness/M +churn/ZGMDRS +churner/M +chute/MS +chutney/MS +chutzpah/M +chyme/M +ciabatta/SM +ciao/S +cicada/MS +cicatrices +cicatrix/M +cicerone/SM +ciceroni +cider's +cider/S +cigar/MS +cigarette/MS +cigarillo/MS +cilantro/M +cilia +cilium/M +cinch/GMDS +cinchona/SM +cincture/SM +cinder/GMDS +cine +cinema/MS +cinematic +cinematographer/MS +cinematographic +cinematography/M +cinnabar/M +cinnamon/M +cipher's +cipher/CGDS +cir +circa +circadian +circle/MGDS +circlet/MS +circuit/MDGS +circuital +circuitous/YP +circuitousness/M +circuitry/M +circuity/M +circular/SMY +circularise/DSG +circularity/M +circulate/ADSG +circulation/SM +circulatory +circumcise/XDSGN +circumcised/U +circumcision/M +circumference/MS +circumferential +circumflex/MS +circumlocution/MS +circumlocutory +circumnavigate/XGNDS +circumnavigation/M +circumpolar +circumscribe/GDS +circumscription/MS +circumspect/Y +circumspection/M +circumstance/MGDS +circumstantial/Y +circumvent/DSG +circumvention/M +circus/MS +cirque/MS +cirrhosis/M +cirrhotic/SM +cirri +cirrus/M +cistern/MS +cit +citadel/MS +citation/AMS +cite's +cite/IAGSD +citified +citizen/MS +citizenry/M +citizenship/M +citric +citron/MS +citronella/M +citrus/MS +city/SM +citywide +civet/MS +civic/S +civically +civics/M +civil/UY +civilian/MS +civilisation/SM +civilise/GDS +civilised/U +civility/ISM +civvies/M +ck +cl +clack/GMDS +clad/U +cladding/M +claim's +claim/CKEAGDS +claimable/A +claimant/MS +claimed/U +claimer/ECSM +clairvoyance/M +clairvoyant/MS +clam/SM +clambake/MS +clamber/ZGMDRS +clamberer/M +clammed +clammily +clamminess/M +clamming +clammy/PTR +clamorous +clamour/GMDS +clamp/GMDS +clampdown/MS +clan/SM +clandestine/Y +clang/ZGMDRS +clangorous/Y +clangour/M +clank/GMDS +clannish/P +clannishness/M +clansman/M +clansmen +clanswoman +clanswomen +clap/SM +clapboard/MDGS +clapped +clapper/MS +clapperboard/S +clapping/M +claptrap/M +claque/MS +claret/MS +clarification/M +clarify/XDSNG +clarinet/SM +clarinettist/MS +clarion/MDGS +clarity/M +clash/GMDS +clasp's +clasp/UGDS +class/GMDS +classic/MS +classical/MY +classicism/M +classicist/MS +classifiable +classification/CAM +classifications +classified's +classified/U +classifieds +classifier/MS +classify/ACSDGN +classiness/M +classless/P +classmate/MS +classroom/MS +classwork/M +classy/TRP +clatter/GMDS +clausal +clause/MS +claustrophobia/M +claustrophobic +clavichord/SM +clavicle/MS +clavier/MS +claw's +claw/CSGD +clay/M +clayey +clayier +clayiest +clean/BJPZTGDRYS +cleaner/M +cleaning/M +cleanliness/UM +cleanly/UTPR +cleanness/UM +cleanse/ZGDRS +cleanser/M +cleanup/MS +clear/JPTGMDRYS +clearance/SM +clearheaded +clearing/M +clearinghouse/SM +clearness/M +clearway/S +cleat/MS +cleavage/MS +cleave/ZGDRS +cleaver/M +clef/SM +cleft/MS +clematis/MS +clemency/IM +clement/Y +clementine/S +clench/GMDS +clerestory/SM +clergy/SM +clergyman/M +clergymen +clergywoman/M +clergywomen +cleric/MS +clerical/Y +clericalism/M +clerk/GMDS +clerkship/M +clever/PTRY +cleverness/M +clevis/MS +clew/SGMD +cliche/MDS +click/BZGMDRS +clicker/M +client/MS +clientele/MS +cliff/MS +cliffhanger/SM +cliffhanging +clifftop/S +clii +climacteric/M +climactic +climate/SM +climatic +climatically +climatologist/SM +climatology/M +climax/MDSG +climb/SMDRZGB +climber/M +climbing/M +clime/SM +clinch/MDRSZG +clincher/M +cling/SMRZG +clinger/M +clingfilm +clingy/RT +clinic/SM +clinical/Y +clinician/SM +clink/SMDRZG +clinker/M +cliometric/S +cliometrician/MS +cliometrics/M +clip/SM +clipboard/MS +clipped +clipper/SM +clipping/SM +clique/SM +cliquey +cliquish/YP +cliquishness/M +clit/SM +clitoral +clitorides +clitoris/MS +clix +cloaca/M +cloacae +cloak's +cloak/USDG +cloakroom/MS +clobber/SMDG +cloche/SM +clock/SMDG +clockwise +clockwork/SM +clod/MS +cloddish +clodhopper/MS +clog's +clog/US +clogged/U +clogging/U +cloisonne/M +cloister/SMDG +cloistral +clomp/SDG +clonal +clone/DSMG +clonk/SMDG +clop/MS +clopped +clopping +close/DRSMYTGJP +closefisted +closemouthed +closeness/M +closeout/MS +closet/SMDG +closeup/SM +closing/M +closure/ESM +clot/MS +cloth/M +clothe/UDSG +clotheshorse/MS +clothesline/SM +clothespin/SM +clothier/MS +clothing/M +cloths +clotted +clotting +cloture/SM +cloud/SMDG +cloudburst/SM +clouded/U +cloudiness/M +cloudless +cloudy/RPT +clout/SMDG +clove/RSMZ +cloven +clover/M +cloverleaf/SM +cloverleaves +clown/SMDG +clownish/YP +clownishness/M +cloy/DGS +cloying/Y +club/MS +clubbable +clubbed +clubber/S +clubbing +clubfeet +clubfoot/MD +clubhouse/SM +clubland +cluck/SMDG +clue/MGDS +clueless +clump/SMDG +clumpy/TR +clumsily +clumsiness/M +clumsy/TRP +clung +clunk/SMDRZG +clunker/M +clunky/TR +cluster/MDSG +clutch/GMDS +clutter/MDSG +cluttered/U +clvi +clvii +clxi +clxii +clxiv +clxix +clxvi +clxvii +cm +cnidarian/MS +co/ESD +coach/MDSG +coachload/S +coachman/M +coachmen +coachwork +coadjutor/MS +coagulant/MS +coagulate/GNDS +coagulation/M +coagulator/MS +coal/MDGS +coalesce/GDS +coalescence/M +coalescent +coalface/MS +coalfield/S +coalition/MS +coalitionist/MS +coalmine/S +coarse/RYTP +coarsen/SDG +coarseness/M +coast/SMDRZG +coastal +coaster/M +coastguard/S +coastline/MS +coat/MDGJS +coating/M +coatroom/S +coattail/SM +coauthor/MDGS +coax/DRSZG +coaxer/M +coaxial +coaxing/Y +cob/SM +cobalt/M +cobber/S +cobble/DRSMZG +cobbler/M +cobblestone/SM +cobnut/S +cobra/SM +cobweb/SM +cobwebbed +cobwebby/RT +coca/M +cocaine/M +cocci/S +coccus/M +coccyges +coccyx/M +cochineal/M +cochlea/SM +cochleae +cochlear +cock/MDGS +cockade/SM +cockamamie +cockatoo/SM +cockatrice/SM +cockchafer/S +cockcrow/SM +cockerel/SM +cockeyed +cockfight/MGS +cockfighting/M +cockily +cockiness/M +cockle/SM +cockleshell/SM +cockney/SM +cockpit/SM +cockroach/MS +cockscomb/SM +cocksucker/MS! +cocksure +cocktail/MS +cocky/RTP +coco/MS +cocoa/SM +coconut/SM +cocoon/SMDG +cod/SM +coda/MS +codded +codding +coddle/DSG +code's +code/CZGDRS +codeine/M +codependency/M +codependent/SM +coder/CM +codex/M +codfish/MS +codger/SM +codices +codicil/SM +codification/M +codifier/M +codify/XDRSNZG +codon/S +codpiece/MS +codswallop +coed/MS +coeducation/M +coeducational +coefficient/MS +coelenterate/MS +coenobite/SM +coenobitic +coequal/MYS +coerce/DRSZGNV +coercer/M +coercion/M +coeval/SMY +coexist/DSG +coexistence/M +coexistent +coextensive +coffee/SM +coffeecake/SM +coffeehouse/MS +coffeemaker/SM +coffeepot/MS +coffer/SM +cofferdam/MS +coffin/SMDG +cog/SM +cogency/M +cogent/Y +cogitate/DSXGNV +cogitation/M +cogitator/MS +cognac/SM +cognate/MS +cognisable +cognisance/AM +cognisant +cognition/AM +cognitional +cognitive/Y +cognomen/SM +cognoscente/M +cognoscenti +cogwheel/SM +cohabit/SGD +cohabitant/MS +cohabitation/M +coheir/SM +cohere/DSG +coherence/IM +coherency/M +coherent/IY +cohesion/M +cohesive/YP +cohesiveness/M +coho/MS +cohort/SM +coif/MS +coiffed +coiffing +coiffure/DSMG +coil's/A +coil/UADGS +coin/MDRZGS +coinage/SM +coincide/DSG +coincidence/MS +coincident +coincidental/Y +coiner/M +coinsurance/M +coir +coital +coitus/M +coke/MGDS +col/S +cola/MS +colander/SM +cold/MRYTPS +coldblooded +coldness/M +coleslaw/M +coleus/MS +coley/S +colic/M +colicky +coliseum/MS +colitis/M +coll +collaborate/DSXGNV +collaboration/M +collaborationist +collaborative/Y +collaborator/MS +collage/SM +collagen +collapse/MGDS +collapsible +collar/SMDG +collarbone/SM +collard/SM +collarless +collate/DSXGN +collateral/MY +collateralise +collation/M +collator/MS +colleague/MS +collect's +collect/ASGVD +collectable/MS +collected/U +collectedly +collection/AMS +collective/MYS +collectivisation/M +collectivise/DSG +collectivism/M +collectivist/SM +collector/MS +colleen/SM +college/SM +collegiality/M +collegian/MS +collegiate +collide/DSG +collie/RSMZ +collier/M +colliery/SM +collision/SM +collocate/MGNDSX +collocation/M +colloid/SM +colloidal +colloq +colloquial/Y +colloquialism/SM +colloquies +colloquium/MS +colloquy/M +collude/DSG +collusion/M +collusive +cologne/SM +colon/SM +colonel/SM +colonelcy/M +colones +colonial/SMY +colonialism/M +colonialist/MS +colonisation/ACM +colonise/CAGSD +coloniser/MS +colonist/SM +colonnade/MDS +colonoscopy/SM +colony/SM +colophon/SM +coloration/EM +coloratura/MS +colossal/Y +colossi +colossus/M +colostomy/SM +colostrum/M +colour's +colour/AEGDS +colourant/SM +colouration/EM +colourblind/P +colourblindness/M +coloured's +coloured/U +coloureds +colourfast/P +colourfastness/M +colourful/YP +colourfulness/M +colouring's +colourisation/M +colourise/DSG +colourist/S +colourless/PY +colourlessness/M +colourway/S +colt/MS +coltish +columbine/SM +column/SMD +columnar +columnist/SM +com/JL +coma/MS +comaker/SM +comatose +comb/MDRZGJS +combat/SMDGV +combatant/SM +combativeness/M +combed/U +comber/M +combination/SM +combine's +combine/ADSG +combined/U +combiner/MS +combings/M +combo/SM +combustibility/M +combustible/MS +combustion/M +combustive +come/IMZGRS +comeback/MS +comedian/MS +comedic +comedienne/MS +comedown/MS +comedy/SM +comeliness/M +comely/RPT +comer's +comestible/SM +comet/SM +comeuppance/SM +comfit's +comfit/ES +comfort/ESMDG +comfortable/P +comfortableness/M +comfortably/U +comforter/MS +comforting/Y +comfortless +comfy/RT +comic/SM +comical/Y +comicality/M +coming/M +comity/M +comm +comma/SM +command/SMDRLZG +commandant/MS +commandeer/GDS +commander/M +commandment/MS +commando/SM +commemorate/XGNVDS +commemoration/M +commemorator/MS +commence/ADSLG +commencement/AM +commencements +commend/ASDBG +commendably +commendation/AMS +commendatory +commensurable +commensurate/IY +comment/GSMD +commentary/SM +commentate/DSG +commentator/SM +commerce/M +commercial/SMY +commercialisation/M +commercialise/GDS +commercialism/M +commie/SM +commingle/DSG +commiserate/GNVDSX +commiseration/M +commissar/SM +commissariat/SM +commissary/SM +commission's +commission/ACSGD +commissionaire/S +commissioner/SM +commit/AS +commitment/MS +committal/SM +committed/AU +committee/SM +committeeman/M +committeemen +committeewoman/M +committeewomen +committer/S +committing/A +commode's +commode/EIS +commodification +commodious/Y +commodity/SM +commodore/SM +common's +common/UPRYT +commonality/S +commonalty/M +commoner/MS +commonness/UM +commonplace/MS +commons +commonsense +commonweal/MH +commonwealth/M +commonwealths +commotion/SM +communal/Y +commune/XDSMGN +communicability/M +communicable/I +communicably +communicant/MS +communicate/GNVDSX +communication/M +communicative/U +communicator/SM +communion/M +communique/SM +communism/M +communist/SM +communistic +community/SM +commutation/MS +commutative +commutator/SM +commute/BDRSMZG +commuter/M +comp/MDYGS +compact/TGSMDRYP +compaction +compactness/M +compactor/SM +companion/SBM +companionably +companionship/M +companionway/MS +company/SM +comparability/M +comparable/I +comparably/I +comparative/MYS +compare/BDSMG +comparison/MS +compartment/SM +compartmental +compartmentalisation/M +compartmentalise/DSG +compass/GMDS +compassion/M +compassionate/Y +compatibility/IM +compatible/IMS +compatibly/I +compatriot/MS +compeer/SM +compel/S +compelled +compelling/Y +compendious +compendium/SM +compensate/DSXGN +compensated/U +compensation/M +compensatory +compere/DSG +compete/DSG +competence/IM +competences +competencies +competency/IM +competent/IY +competition/SM +competitive/PY +competitiveness/M +competitor/SM +compilation/SM +compile/DRSZG +compiler/M +complacence/M +complacency/M +complacent/Y +complain/DRZGS +complainant/MS +complainer/M +complaint/SM +complaisance/M +complaisant/Y +complected +complement/SGMD +complementary +complete/PYTGNXDRS +completed/U +completeness/IM +completion/M +complex/MSY +complexion/MDS +complexional +complexity/SM +compliance/M +compliant/Y +complicate/GDS +complicated/Y +complication/M +complicit +complicity/M +compliment/MDGS +complimentary/U +comply/NDSXG +compo/S +component/SM +comport/LSGD +comportment/M +compose/AECGSD +composedly +composer/MS +composite/MYGNXDS +composition/CM +compositor/SM +compost/SGMD +composure/EM +compote/SM +compound/GMDBS +compounded/U +comprehend/SDG +comprehensibility/IM +comprehensible/I +comprehensibly/I +comprehension/IM +comprehensions +comprehensive/PMYS +comprehensiveness/M +compress's +compress/CGDS +compressed/U +compressible +compression/CM +compressor/SM +comprise/GDS +compromise/MGDS +comptroller/MS +compulsion/MS +compulsive/YP +compulsiveness/M +compulsorily +compulsory/SM +compunction/SM +computation/SM +computational/Y +compute/ADSG +computer/MS +computerate +computerisation/M +computerise/GDS +computing/M +comrade/SMY +comradeship/M +con/GSM +concatenate/XDSGN +concatenation/M +concave/YP +concaveness/M +conceal/SDRZGBL +concealed/U +concealer/M +concealment/M +conceit/SMD +conceited/PY +conceitedness/M +conceivable/I +conceivably/I +conceive/DSGB +concentrate/DSMGNX +concentration/M +concentric +concentrically +concept/SM +conception/SM +conceptional +conceptual/Y +conceptualisation/SM +conceptualise/DSG +concern/UMD +concerned/UY +concerning +concerns +concert's +concert/ESDG +concerted/Y +concertgoer/S +concertina/SGMD +concertise/DSG +concertmaster/MS +concerto/SM +concessionaire/MS +concessional +concessionary +conch/M +conchie/S +conchs +concierge/MS +conciliate/DSGN +conciliation/AM +conciliator/SM +conciliatory +concise/RPYTN +conciseness/M +concision/M +conclave/SM +conclude/DSG +conclusion/MS +conclusive/IYP +conclusiveness/IM +concoct/SDG +concoction/MS +concomitant/MYS +concord/M +concordance/SM +concordant +concordat/SM +concourse/SM +concrete/DSPMYGNX +concreteness/M +concretion/M +concubinage/M +concubine/MS +concupiscence/M +concupiscent +concur/S +concurred +concurrence/SM +concurrency +concurring +concuss/V +concussion/SM +condemn/SDRZG +condemnation/MS +condemnatory +condemner/M +condensate/MNXS +condensation/M +condense/DRSZG +condenser/M +condescending/Y +condescension/M +condign +condiment/MS +condition's +condition/AGSD +conditional/SMY +conditioned/U +conditioner/SM +conditioning/M +condo/SM +condolence/SM +condom/SM +condominium/MS +condone/DSG +condor/SM +conduce/DSGV +conduct/MDGV +conductance/M +conductibility/M +conductible +conduction/M +conductivity/M +conductor/MS +conductress/MS +conduit/SM +cone/M +coneys +confab/SM +confabbed +confabbing +confabulate/XDSGN +confabulation/M +confection/SZMR +confectioner/M +confectionery/SM +confederacy/SM +confederate/M +confer/S +conferee/SM +conference/MGS +conferrable +conferral/M +conferred +conferrer/MS +conferring +confessed/Y +confession/SM +confessional/SM +confessor/MS +confetti/M +confidant/MS +confidante/SM +confide/DRSZG +confidence/SM +confident/Y +confidential/Y +confidentiality/M +confider/M +confiding/Y +configuration/S +configure/B +confined/U +confinement/MS +confirm/ASDG +confirmation/ASM +confirmatory +confirmed/U +confiscate/DSGNX +confiscation/M +confiscator/SM +confiscatory +conflagration/MS +conflate/XDSGN +conflation/M +conflict/SGMD +confluence/MS +confluent +conform/ZB +conformable/U +conformance/M +conformism/M +conformist/SM +conformity/M +confrere/MS +confrontation/SM +confrontational +confuse/RZ +confused/Y +confusing/Y +confutation/M +confute/DSG +conga/SMDG +congeal/SLDG +congealment/M +conger/SM +congeries/M +congest/SDGV +congestion/M +conglomerate/DSXMGN +conglomeration/M +congrats/M +congratulate/XGNDS +congratulation/M +congratulatory +congregant/MS +congregate/GNDSX +congregation/M +congregational +congregationalism/M +congregationalist/MS +congress/MS +congressional +congressman/M +congressmen +congresspeople +congressperson/MS +congresswoman/M +congresswomen +congruence/M +congruent/Y +congruity/ISM +congruous +conic/SM +conical/Y +conifer/SM +coniferous +conjectural +conjecture/MGDS +conjoint +conjugal/Y +conjugate/DSXGN +conjugation/M +conjunct/VMS +conjunctiva/SM +conjunctive/SM +conjunctivitis/M +conjuration/MS +conjure/DRSZG +conjurer/M +conk/MDRZ +conman +connect/AEDVGS +connectable +connected/U +connection/EMS +connective/MS +connectivity/M +connector/MS +conned +conning +conniption/MS +connivance/M +connive/DRSZG +conniver/M +connoisseur/SM +connotative +connubial +conquer/ASDG +conquerable/U +conquered/U +conqueror/MS +conquest/AM +conquistador/SM +cons/DSG +consanguineous +consanguinity/M +conscienceless +conscientious/PY +conscientiousness/M +conscious/UYP +consciousness/UM +consciousnesses +conscription/M +consecrate/ADSGN +consecrated/U +consecration/AM +consecrations +consecutive/Y +consensual +consensus/MS +consent/SMDG +consequence/SM +consequent/Y +consequential/IY +conservancy/SM +conservation/M +conservationism/M +conservationist/SM +conservatism/M +conservative/MYS +conservatoire/S +conservator/SM +conservatory/SM +consider/AGSD +considerable/I +considerably +considerate/IPYN +considerateness/IM +consideration/AIM +considerations +considered/U +consign/ASDG +consignee/MS +consignment/MS +consist/SDG +consistence/MS +consistency/ISM +consistent/IY +consistory/SM +consolable/I +consolation/MS +consolatory +consolidate/XDSGN +consolidated/U +consolidation/M +consolidator/MS +consoling/Y +consomme/M +consonance/SM +consonant/SMY +consortia +consortium/M +conspectus/MS +conspicuous/IPY +conspicuousness/IM +conspiracy/SM +conspirator/MS +conspiratorial/Y +conspire/GD +constable/SM +constabulary/SM +constancy/IM +constant/MYS +constellation/SM +consternation/M +constipate/GNDS +constipation/M +constituency/SM +constituent/SM +constitute/ADSGNV +constitution/AM +constitutional/MYS +constitutionalism +constitutionality/UM +constitutions +constrained/U +constraint/SM +constrict/GVSD +constriction/SM +constrictor/SM +construable +construct's +construct/CADVGS +construction/CAMS +constructional +constructionist's +constructionist/CS +constructive/YP +constructiveness/M +constructor/MS +construe/GDS +consul/KSM +consular/K +consulate/SM +consulship/M +consult/GSD +consultancy/SM +consultant/MS +consultation/MS +consultative +consumable/SM +consume/BDRSZG +consumed/U +consumer/M +consumerism/M +consumerist/MS +consummate/YGNXDS +consummated/U +consumption/M +consumptive/SM +cont +contact/ASDG +contactable +contagion/MS +contagious/PY +contagiousness/M +contain/SBLDRZG +container/M +containerisation/M +containerise/DSG +containment/M +contaminant/SM +contaminate/ACDSG +contaminated/U +contamination/CM +contaminator/SM +contd +contemn/SDG +contemplate/DSGNV +contemplation/M +contemplative/SMY +contemporaneity/M +contemporaneous/Y +contempt/M +contemptible +contemptibly +contemptuous/YP +contemptuousness/M +contender/MS +content/ESLMDG +contented/EY +contentedness/M +contention/SM +contentious/YP +contentiousness/M +contently +contentment/EM +conterminous/Y +contestable/I +contestant/MS +contested/U +contextualisation +contextualise/DSG +contiguity/M +contiguous/Y +continence/IM +continent/SM +continental/SM +contingency/SM +contingent/SMY +continua +continual/Y +continuance/EMS +continuation/EMS +continue/EGDS +continuity/ESM +continuous/EY +continuum/M +contort/GD +contortion/MS +contortionist/SM +contraband/M +contrabassoon/S +contraception/M +contraceptive/SM +contract/MDG +contractible +contractile +contractility +contraction/S +contractual/Y +contradict/SDG +contradiction/SM +contradictory +contradistinction/MS +contraflow/S +contrail/MS +contraindicate/GNXDS +contraindication/M +contralto/SM +contraption/SM +contrapuntal/Y +contrarian/SM +contrarianism +contrariety/M +contrarily +contrariness/M +contrariwise +contrary/PSM +contrast/MDGS +contravene/GDS +contravention/SM +contretemps/M +contribute/XGND +contribution/M +contributor/MS +contributory +contrition/M +contrivance/MS +contrive/ZGDRS +contriver/M +control's +control/CS +controllable/U +controlled/UC +controller/MS +controlling/C +controversial/Y +controversy/SM +controvert/DSG +controvertible/I +contumacious/Y +contumacy/M +contumelious +contumely/SM +contuse/XDSGN +contusion/M +conundrum/SM +conurbation/MS +convalesce/DSG +convalescence/MS +convalescent/SM +convection/M +convectional +convective +convector/S +convene/ADSG +convener/MS +convenience/IMS +convenient/IY +convent/SM +conventicle/MS +convention/SM +conventional/UY +conventionalise/GDS +conventionality/UM +conventioneer/S +convergence/MS +convergent +conversant +conversation/MS +conversational/Y +conversationalist/SM +converse/Y +convert's +convert/AGSD +converted/U +converter/SM +convertibility/M +convertible/SM +convex/Y +convexity/M +convey/SBDG +conveyance/MGS +conveyor/MS +convict/GSMD +conviction/MS +convince/GDS +convinced/U +convincing/UY +convivial/Y +conviviality/M +convoke/DSG +convoluted +convolution/MS +convoy/SMDG +convulse/GNVXDS +convulsion/M +convulsive/Y +cony/M +coo/GSMD +cook's +cook/ADGS +cookbook/MS +cooked/U +cooker/SM +cookery/SM +cookhouse/S +cookie/SM +cooking/M +cookout/SM +cookware/SM +cool/MDRYZTGPS +coolant/SM +cooler/M +coolie/SM +coolness/M +coon/MS! +coonskin/MS +coop/MDRZGS +cooper/MDG +cooperage/M +cooperate/DSGNV +cooperation/M +cooperative/PMYS +cooperativeness/M +cooperator/SM +coordinate/DSMYGN +coordinated/U +coordination/M +coordinator/MS +coot/MS +cootie/SM +cop/GJSMD +copacetic +copay/M +cope/MS +copier/SM +copilot/SM +coping/M +copious/PY +copiousness/M +copped +copper/SM +copperhead/SM +copperplate/M +coppery +copping +copra/M +copse/SM +copter/SM +copula/SM +copulate/GNVDS +copulation/M +copulative/SM +copy's +copy/ADSG +copybook/SM +copycat/MS +copycatted +copycatting +copyist/MS +copyleft +copyright/GSMD +copywriter/MS +coquetry/SM +coquette/DSMG +coquettish/Y +cor +coracle/SM +coral/SM +corbel/SM +cord/EASGDM +cordage/M +cordial/SMY +cordiality/M +cordillera/MS +cordite/M +cordless +cordon/SMDG +cordovan/M +corduroy/MS +corduroys/M +core/MZGDRS +coreligionist/S +corer/M +corespondent/MS +corgi/SM +coriander/M +cork's +cork/UDGS +corkage +corker/SM +corkscrew/SMDG +corm/MS +cormorant/SM +corn/MDRZGS +cornball/MS +cornbread/M +corncob/MS +corncrake/S +cornea/SM +corneal +corner/GMD +cornerstone/SM +cornet/SM +cornfield/S +cornflakes/M +cornflour +cornflower/SM +cornice/MS +cornily +corniness/M +cornmeal/M +cornrow/MDGS +cornstalk/SM +cornstarch/M +cornucopia/MS +corny/PRT +corolla/MS +corollary/SM +corona/SM +coronal/MS +coronary/SM +coronation/SM +coroner/MS +coronet/MS +corp +corpora +corporal/SM +corporate/XYN +corporation/IM +corporatism +corporeal/Y +corporeality/M +corps/MS +corpse/M +corpsman/M +corpsmen +corpulence/M +corpulent +corpus/M +corpuscle/MS +corpuscular +corr +corral/SM +corralled +corralling +correct/DRYTGVSBP +corrected/U +correction/SM +correctional +corrective/SM +correctness/IM +corrector +correlate/XDSMGNV +correlated/U +correlation/M +correlative/MS +correspond/SDG +correspondence/SM +correspondent/SM +corresponding/Y +corridor/SM +corrie/S +corroborate/GNVDSX +corroborated/U +corroboration/M +corroborator/SM +corroboratory +corrode/GDS +corrosion/M +corrosive/SMY +corrugate/GNXDS +corrugation/M +corrupt/DRYPSTG +corruptibility/IM +corruptible/I +corruption/MS +corruptness/M +corsage/MS +corsair/MS +corset/SGMD +cortege/MS +cortex/M +cortical +cortices +cortisone/M +corundum/M +coruscate/GNDS +coruscation/M +corvette/SM +cos/M +cosh/DSG +cosign/ZGSDR +cosignatory/SM +cosigner/M +cosily +cosine/SM +cosiness/M +cosmetic/SM +cosmetically +cosmetician/MS +cosmetologist/MS +cosmetology/M +cosmic +cosmically +cosmogonist/SM +cosmogony/SM +cosmological +cosmologist/SM +cosmology/SM +cosmonaut/SM +cosmopolitan/MS +cosmopolitanism/M +cosmos/MS +cosplay +cosponsor/GSMD +cosset/SGD +cossetted +cossetting +cost/MDYGSJ +costar/SM +costarred +costarring +costliness/M +costly/PTR +costume/MZGDRS +costumer/M +costumiers +costumire +cosy/RSMTP +cot/SM +cotangent/MS +cote/MS +coterie/MS +coterminous +cotillion/SM +cottage/MZGRS +cottager/M +cottar/SM +cotter/SM +cotton/SGMD +cottonmouth/M +cottonmouths +cottonseed/MS +cottontail/MS +cottonwood/SM +cottony +cotyledon/MS +couch/MDSG +couchette/S +cougar/SM +cough/MDG +coughs +could +could've +couldn't +coulee/SM +coulis +coulomb/MS +council/MS +councillor/SM +councilman/M +councilmen +councilperson/SM +councilwoman/M +councilwomen +counsel/JMS +counselled +counselling +counsellor/SM +count/EASMDG +countable/U +countably +countdown/MS +counted/U +countenance's +countenance/EGDS +counter/EMS +counteract/SGVD +counteraction/MS +counterargument/S +counterattack/GMDS +counterbalance/MGDS +counterblast/S +counterclaim/GSMD +counterclockwise +counterculture/SM +countered +counterespionage/M +counterexample/S +counterfactual +counterfeit/ZGMDRS +counterfeiter/M +counterfoil/MS +countering +counterinsurgency/SM +counterintelligence/M +counterman/M +countermand/GMDS +countermeasure/SM +countermelody/S +countermen +countermove/S +counteroffensive/SM +counteroffer/SM +counterpane/SM +counterpart/SM +counterpetition +counterpoint/MDGS +counterpoise/MGDS +counterproductive +counterrevolution/SM +counterrevolutionary/SM +countersign/GSMD +countersignature/MS +countersink/GSM +counterspy/SM +countersunk +countertenor/MS +countervail/GSD +counterweight/MS +countess/MS +countless +countrified +country/SM +countryman/M +countrymen +countryside/MS +countrywide +countrywoman/M +countrywomen +county/SM +countywide +coup's +coup/AS +coupe/SM +couple's +couple/UCGSD +couplet/MS +coupling/SM +coupon/SM +courage/M +courageous/YP +courageousness/M +courgette/S +courier/MDSG +course/EDGMS +coursebook/S +courser/MS +coursework +court/SMDYG +courteous/EY +courteousness/M +courtesan/SM +courtesy/ESM +courthouse/MS +courtier/SM +courtliness/M +courtly/PRT +courtroom/MS +courtship/MS +courtyard/MS +couscous/M +cousin/SM +couture/M +couturier/MS +cove/MS +coven/SM +covenant/MDSG +cover's +cover/AEUGDS +coverage/M +coverall/MS +covering's +coverings +coverlet/MS +covert/SPMY +covertness/M +covet/SDG +covetous/YP +covetousness/M +covey/SM +cow/ZGSMDR +coward/SMY +cowardice/M +cowardliness/M +cowbell/MS +cowbird/MS +cowboy/SM +cowcatcher/MS +cower/DG +cowgirl/MS +cowhand/MS +cowherd/MS +cowhide/MS +cowl/MGSJ +cowlick/MS +cowling/M +cowman/M +cowmen +coworker/MS +cowpat/S +cowpoke/MS +cowpox/M +cowpuncher/SM +cowrie/SM +cowshed/S +cowslip/SM +cox/GDS +coxcomb/MS +coxswain/MS +coy/TPRY +coyness/M +coyote/SM +coypu/SM +cozen/SDG +cozenage/M +cpd +cpl +cps +crab/MS +crabbed +crabber/SM +crabbily +crabbiness/M +crabbing +crabby/PRT +crabgrass/M +crablike +crabwise +crack/SMDRYZGJ +crackdown/MS +cracker/M +crackerjack/MS +crackhead/MS +crackle/DSJMG +crackling/M +crackpot/MS +crackup/SM +cradle/DSMG +craft/SMDG +craftily +craftiness/M +craftsman/M +craftsmanship/M +craftsmen +craftspeople +craftswoman/M +craftswomen +crafty/RTP +crag/MS +cragginess/M +craggy/RPT +cram/S +crammed +crammer/S +cramming +cramp/SMDG +cramping/M +crampon/SM +cranberry/SM +crane/DSMG +cranial +cranium/SM +crank/SMDG +crankcase/SM +crankily +crankiness/M +crankshaft/MS +cranky/PRT +cranny/DSM +crap/MS +crape/SM +crapped +crapper/S +crappie/RSMT +crapping +crappy +craps/M +crapshooter/MS +crash/MDSG +crass/RYTP +crassness/M +crate/DRSMZG +crater/MDG +cravat/SM +crave/DSGJ +craven/SMYP +cravenness/M +craving/M +craw/MS +crawdad/SM +crawl/SMDRZG +crawler/M +crawlspace/SM +crawly/TRSM +cray/S +crayfish/MS +crayola/S +crayon/GSMD +craze/DSMG +crazily +craziness/M +crazy/PRSMT +creak/SMDG +creakily +creakiness/M +creaky/RPT +cream/SMDRZG +creamer/M +creamery/SM +creamily +creaminess/M +creamy/RPT +crease/ICGMSD +create/KADSGNV +creation's/K +creation/ASM +creationism/SM +creationist/SM +creative/SMYP +creativeness/M +creativity/M +creator/MS +creature/SM +creche/SM +cred +credence/M +credential/SGMD +credenza/SM +credibility/IM +credible/I +credibly/I +credit/EGSBMD +creditably/E +creditor/SM +creditworthy/P +credo/SM +credulity/IM +credulous/IY +credulousness/M +creed/SM +creek/SM +creel/SM +creep/SMRZG +creeper/M +creepily +creepiness/M +creepy/TPR +cremains/M +cremate/GNDSX +cremation/M +crematoria +crematorium/MS +crematory/SM +creme/SM +crenellate/DSGNX +crenellation/M +creole/SM +creosote/MGDS +crepe/SM +crept +crepuscular +crescendo/CSM +crescent/MS +cress/M +crest/SMDG +crestfallen +crestless +cretaceous +cretin/SM +cretinism/M +cretinous +cretonne/M +crevasse/SM +crevice/MS +crew/MDGS +crewel/M +crewelwork/M +crewman/M +crewmen +crib/MS +cribbage/M +cribbed +cribber/MS +cribbing +crick/SMDG +cricket/MRSZG +cricketer/M +crier/M +crikey +crime/SM +criminal/MYS +criminalise/CGDS +criminality/M +criminologist/MS +criminology/M +crimp/SMDG +crimson/SMDG +cringe/DSMG +crinkle/DSMG +crinkly/RT +crinoline/SM +cripes +cripple/DRSMZG +crippler/M +crippleware +crippling/Y +crises +crisis/M +crisp/SMDRYTGP +crispbread/S +crispiness/M +crispness/M +crispy/PRT +crisscross/GMDS +criteria +criterion/M +critic/SM +critical/UY +criticise/ZGDRS +criticiser/M +criticism/MS +critique/MGDS +critter/SM +croak/SMDG +croaky/RT +crochet/SMDRZG +crocheter/M +crocheting/M +crock/SMD +crockery/M +crocodile/SM +crocus/MS +croft/SRZG +croissant/MS +crone/SM +crony/SM +cronyism/M +crook/SMDG +crooked/PTRY +crookedness/M +crookneck/SM +croon/SMDRZG +crooner/M +crop/MS +cropland/SM +cropped +cropper/MS +cropping +croquet/M +croquette/SM +cross's +cross/AUGTSD +crossbar/SM +crossbeam/MS +crossbones/M +crossbow/SM +crossbowman/M +crossbowmen +crossbred +crossbreed/SGM +crosscheck/SMDG +crosscurrent/MS +crosscut/SM +crosscutting +crosser +crossfire/MS +crosshatch/GDS +crossing/SM +crossly +crossness/M +crossover/MS +crosspatch/MS +crosspiece/SM +crossroad/MS +crossroads/M +crosstown +crosswalk/MS +crosswind/MS +crosswise +crossword/MS +crotch/MS +crotchet/SM +crotchety +crouch/GMDS +croup/M +croupier/M +croupy/ZTR +crouton/MS +crow/MDGS +crowbar/MS +crowd/SMDG +crowded/U +crowdfund/SDG +crowfeet +crowfoot/SM +crown/SMDG +crowned/U +crozier/MS +crucial/Y +crucible/SM +crucifix/MS +crucifixion/SM +cruciform/SM +crucify/DSG +crud/M +cruddy/TR +crude/RMYTP +crudeness/M +crudites/M +crudity/SM +cruel/YP +crueller +cruellest +cruelness/M +cruelty/SM +cruet/SM +cruft/SD +crufty +cruise/DRSMZG +cruiser/M +cruller/MS +crumb/SMDYG +crumble/MGDS +crumbliness/M +crumbly/TPR +crumby/TR +crumminess/M +crummy/PTR +crumpet/MS +crumple/MGDS +crunch/GMDRS +crunchiness/M +crunchy/TRP +crupper/MS +crusade/MZGDRS +crusader/M +cruse/SM +crush/MDRSZG +crusher/M +crushing/Y +crust/SMDG +crustacean/SM +crustal +crustily +crustiness/M +crusty/TRP +crutch/MS +crux/MS +cry/ZGJDRSM +crybaby/SM +cryogenic/S +cryogenics/M +cryonics +cryosurgery/M +crypt/SM +cryptic +cryptically +cryptogram/SM +cryptographer/SM +cryptography/M +crystal/SM +crystalline +crystallisation/M +crystallise/ADSG +crystallographic +crystallography +ct +ctn +ctr +cu +cub/ZGSMDR +cubbyhole/MS +cube/MS +cuber/M +cubic +cubical +cubicle/MS +cubism/M +cubist/SM +cubit/SM +cuboid/S +cuckold/MDSG +cuckoldry/M +cuckoo/SM +cucumber/SM +cud/SM +cuddle/DSMG +cuddly/TR +cudgel/SM +cudgelled +cudgelling/S +cue/DSMG +cuff/MDGS +cuisine/SM +culinary +cull/MDGS +culminate/XDSGN +culmination/M +culotte/SM +culpability/M +culpable/I +culpably +culprit/SM +cult/MS +cultism/M +cultist/MS +cultivable +cultivar/SM +cultivate/BDSGN +cultivated/U +cultivation/M +cultivator/MS +cultural/Y +culture/MGDS +cultured/U +culvert/MS +cum/SM +cumber/SDG +cumbersome/P +cumbersomeness/M +cumbrous +cumin/M +cummerbund/MS +cumming +cumulative/Y +cumuli +cumulonimbi +cumulonimbus/M +cumulus/M +cuneiform/M +cunnilingus/M +cunning/MRYT +cunt/MS! +cup/SM +cupboard/SM +cupcake/MS +cupful/SM +cupid/SM +cupidity/M +cupola/SMD +cuppa/S +cupped +cupping +cupric +cur/SMY +curability/M +curacao +curacy/SM +curare/M +curate/DSMGV +curative/MS +curator/KMS +curatorial +curb/MDGS +curbing/M +curbside +curbstone/SM +curd/MS +curdle/DSG +cure's +cure/KZGBDRS +cured/U +curer/KM +curettage/M +curfew/SM +curia/M +curiae +curie/SM +curio/SM +curiosity/SM +curious/YP +curiousness/M +curium/M +curl's +curl/UDGS +curler/SM +curlew/SM +curlicue/DSMG +curliness/M +curling/M +curly/RPT +curmudgeon/MYS +currant/MS +currency/SM +current's +current/FAY +currents +curricula +curricular +curriculum/M +curry/DSMG +currycomb/SGMD +curse/DSMGV +cursed/Y +cursive's +cursive/EAY +cursor/SM +cursorily +cursoriness/M +cursory/P +curt/RYTP +curtail/GDSL +curtailment/SM +curtain/GMDS +curtness/M +curtsy/GDSM +curvaceous/P +curvaceousness/M +curvature/SM +curve/DSMG +curvy/RT +cushion/MDSG +cushy/RT +cusp/MS +cuspid/SM +cuspidor/SM +cuss's +cuss/FEGSD +cussed/PY +custard/MS +custodial +custodian/MS +custodianship/M +custody/M +custom/SZMR +customarily +customary/U +customer/M +customhouse/SM +customisation/M +customise/DSG +cut/TSMR +cutaneous +cutaway/MS +cutback/MS +cute/YP +cuteness/M +cutesy/TR +cutey/S +cuticle/MS +cutie/SM +cutlass/MS +cutler/SM +cutlery/M +cutlet/SM +cutoff/SM +cutout/SM +cutter/SM +cutthroat/SM +cutting/MYS +cuttlefish/MS +cutup/SM +cutworm/MS +cw +cwt +cyan/M +cyanide/M +cyberbully/SM +cybercafe/S +cybernetic/S +cybernetics/M +cyberpunk/SM +cybersex +cyberspace/MS +cyborg/SM +cyclamen/MS +cycle/ADSMG +cyclic +cyclical/Y +cyclist/MS +cyclometer/MS +cyclone/MS +cyclonic +cyclopedia/MS +cyclopes +cyclops/M +cyclotron/MS +cygnet/MS +cylinder/MS +cylindrical +cymbal/MS +cymbalist/MS +cynic/SM +cynical/Y +cynicism/M +cynosure/MS +cypress/MS +cyst/MS +cystic +cystitis +cytokines +cytologist/SM +cytology/M +cytoplasm/M +cytoplasmic +cytosine/M +czarina/SM +czarism +czarist/SM +d'Arezzo/M +d'Estaing/M +d/NXGJ +dB +dab/SM +dabbed +dabber/MS +dabbing +dabble/ZGDRS +dabbler/M +dace/SM +dacha/MS +dachshund/MS +dactyl/MS +dactylic/MS +dad/SM +dadaism/M +dadaist/MS +daddy/SM +dado/M +dadoes +daemon/MS +daemonic +daffiness/M +daffodil/SM +daffy/PTR +daft/PTRY +daftness/M +dag/S +dagger/MS +dago/S +dagoes +daguerreotype/DSMG +dahlia/MS +dailiness/M +daily/PSM +daintily +daintiness/M +dainty/RSMTP +daiquiri/MS +dairy/GSM +dairying/M +dairymaid/MS +dairyman/M +dairymen +dairywoman/M +dairywomen +dais/MS +daisy/SM +dale/SM +dalliance/MS +dallier/M +dally/ZGDRS +dalmatian/MS +dam/SM +damage/MGDS +damageable +damaged/U +damages/M +damask/MDGS +dame/SM +dammed +damming +dammit +damn/SBGMD +damnably +damnation/M +damned/T +damp/SPXZTGMDNRY +dampen/ZGDR +dampener/M +damper/M +dampness/M +damsel/MS +damselfly/SM +damson/MS +dance/MZGDRS +dancer/M +dancing/M +dandelion/SM +dander/M +dandify/GDS +dandle/GDS +dandruff/M +dandy/TRSM +dang/SZGDR +danger/M +dangerous/Y +dangle/ZGDRS +dangler/M +danish/MS +dank/PTRY +dankness/M +danseuse/MS +dapper/TR +dapple/MGDS +dare/DRSMZG +daredevil/MS +daredevilry/M +darer/M +daresay +daring/MY +dark/PXTMNRY +darken/ZGDR +darkener/M +darkie/S +darkness/M +darkroom/MS +darling/MS +darn/SZGMDR +darned/TR +darner/M +dart/SZGMDR +dartboard/MS +darter/M +dash/ZGMDRS +dashboard/SM +dasher/M +dashiki/MS +dashing/Y +dastard/MYS +dastardliness/M +data +database/SM +datatype +date/DRSMZGV +datebook/S +dated/U +dateless +dateline/MGDS +dater/M +dative/MS +datum/M +daub/SZGMDR +dauber/M +daughter/SMY +daunt/GDS +daunting/Y +dauntless/YP +dauntlessness/M +dauphin/MS +davenport/MS +davit/MS +dawdle/ZGDRS +dawdler/M +dawn/SGMD +day/SM +daybed/MS +daybreak/M +daycare/M +daydream/MDRZGS +daydreamer/M +daylight/MS +daylights/M +daylong +daytime/M +daze/DSMG +dazed/Y +dazzle/MZGDRS +dazzler/M +dazzling/Y +db +dbl +dc +dd/SDG +dded/K +dding/K +deacon/MS +deaconess/MS +dead/XTMNRY +deadbeat/MS +deadbolt/SM +deaden/GD +deadhead/SDG +deadline/SM +deadliness/M +deadlock/GSMD +deadly/TPR +deadpan/MS +deadpanned +deadpanning +deadwood/M +deaf/PXTNR +deafen/GD +deafening/Y +deafness/M +deal/SJZGMR +dealer/M +dealership/SM +dealing/M +dealt +dean/M +deanery/SM +deanship/M +dear/SPTMRYH +dearest/S +dearness/M +dearth/M +dearths +deary/SM +death/MY +deathbed/SM +deathblow/MS +deathless/Y +deathlike +deaths +deathtrap/MS +deathwatch/MS +deaves +deb/SM +debacle/MS +debarkation/M +debarment/M +debate/BMZR +debater/M +debating/M +debauch/MDSG +debauchee/MS +debauchery/SM +debenture/MS +debilitate/DSGN +debilitation/M +debility/SM +debit/D +debonair/PY +debonairness/M +debouch/GDS +debridement +debris/M +debt/SM +debtor/MS +debugger/S +debut/GMD +debutante/SM +decade/MS +decadence/M +decadency/M +decadent/MYS +decaf/MS +decaffeinate/DSG +decagon/MS +decal/MS +decampment/M +decapitate/XGNDS +decapitator/MS +decathlete/S +decathlon/SM +decay/GD +deceased/M +decedent/MS +deceit/MS +deceitful/YP +deceitfulness/M +deceive/UGDS +deceiver/MS +deceiving/Y +decelerate/GNDS +deceleration/M +decelerator/SM +decency/ISM +decennial/SM +decent/IY +deception/MS +deceptive/YP +deceptiveness/M +decibel/MS +decidable/U +decide/BZGDRS +decided/Y +deciduous +decilitre/MS +decimal/SM +decimalisation +decimate/DSGN +decimation/M +decimetre/MS +decipherable/UI +decision/IM +decisions +decisive/IPY +decisiveness/IM +deck/SGMD +deckchair/S +deckhand/SM +deckle/S +declamation/MS +declamatory +declaration/MS +declarative +declaratory +declare/DRSZGB +declared/U +declarer/M +declension/SM +declination/M +decline/DRSMZG +decliner/M +declivity/SM +decolletage/SM +decollete +decongestant/MS +deconstructionism +decor/MS +decorate/AGNVDS +decorating/M +decoration/AM +decorations +decorative/Y +decorator/MS +decorous/IY +decorousness/M +decorum/M +decoupage/DSMG +decoy/GMDS +decreasing/Y +decree/MDS +decreeing +decremented +decrements +decrepit +decrepitude/M +decriminalisation/M +decry/GDS +decryption +dedicate/AGDS +dedication/SM +dedicator/SM +dedicatory +deduce/GDS +deducible +deduct/GVD +deductible/SM +deduction/SM +deductive/Y +deed/GD +deejay/MS +deem/ASGD +deep/SPXTMNRY +deepen/GD +deepness/M +deer/M +deerskin/M +deerstalker/S +def/Z +defacement/M +defacer/SM +defalcate/DSXGN +defalcation/M +defamation/M +defamatory +defame/ZGDRS +defamer/M +defaulter/SM +defeat/MDRZGS +defeated/U +defeater/M +defeatism/M +defeatist/MS +defecate/GNDS +defecation/M +defect/MDGVS +defection/MS +defective/MPYS +defectiveness/M +defector/MS +defenceless/YP +defencelessness/M +defendant/SM +defended/U +defenestration/S +defensible/I +defensibly/I +defensive/MYP +defensiveness/M +deference/M +deferential/Y +deferral/MS +deferred +deferring +deffer +deffest +defiant/Y +defibrillation +defibrillator/S +deficiency/SM +deficient +deficit/SM +defilement/M +definable/IU +define/AGDS +defined/U +definer/MS +definite/IYVP +definiteness/IM +definition/AM +definitions +definitive/Y +deflate/GNDS +deflation/M +deflationary +deflect/DGVS +deflection/MS +deflector/SM +defogger/SM +defoliant/SM +defoliate/DSGN +defoliation/M +defoliator/MS +deformity/SM +defraud/DRZGS +defrauder/M +defrayal/M +defrock/DG +defroster/MS +deft/PTRY +deftness/M +defunct +defy/GDS +deg +degeneracy/M +degenerate/MV +degrade/B +degree/MS +dehydrator/SM +dehydrogenase +deicer/MS +deification/M +deify/NGDS +deign/GDS +deist/MS +deistic +deity/SM +deject/GDS +dejected/Y +dejection/M +delay/ZDR +delectable +delectably +delectation/M +delegate/GD +delete/XGNDS +deleterious +deletion/M +delft/M +delftware/M +deli/SM +deliberate/XYVP +deliberateness/M +delicacy/ISM +delicate/IY +delicateness/M +delicatessen/SM +delicious/PY +deliciousness/M +delighted/Y +delightful/Y +deliminator +delineate/GNXDS +delineation/M +delinquency/SM +delinquent/SMY +deliquesce/DSG +deliquescent +delirious/YP +deliriousness/M +delirium/SM +deliver/ADGS +deliverable +deliverance/M +delivered/U +deliverer/SM +dell/SM +delphinium/MS +delta/MS +delude/GDS +deluge/MGDS +delusion/MS +delusional +delusive/Y +deluxe +delve/ZGDRS +delver/M +demagogic +demagogically +demagogue/SM +demagoguery/M +demagogy/M +demand/GMDS +demanding/U +demarcate/DSGNX +demarcation/M +demean/GDS +demeanour/M +demented/Y +dementia/M +demesne/MS +demigod/MS +demigoddess/MS +demijohn/SM +demimondaine/SM +demimonde/M +demise/MGDS +demitasse/MS +demo/GMD +democracy/SM +democrat/MS +democratic/U +democratically +democratisation/M +democratise/GDS +demode +demographer/SM +demographic/SM +demographically +demographics/M +demography/M +demolish/DSG +demolition/MS +demon/MS +demonetisation/M +demoniac +demoniacal/Y +demonic +demonically +demonise/GDS +demonology/SM +demonstrability +demonstrable/I +demonstrably +demonstrate/XGNVDS +demonstration/M +demonstrative/MYSP +demonstrativeness/M +demonstrator/MS +demote/GD +demotic +demount +demulcent/SM +demur/TMRS +demure/PY +demureness/M +demurral/SM +demurred +demurrer/SM +demurring +den/M +denationalisation +denaturation +denature/DG +dendrite/SM +dengue/M +deniability +deniable/U +denial/MS +denier/M +denigrate/DSGN +denigration/M +denim/MS +denitrification +denizen/MS +denominational +denotative +denouement/MS +denounce/LDSG +denouncement/SM +dense/PYTR +denseness/M +density/SM +dent/ISGMD +dental/Y +dentifrice/SM +dentine/M +dentist/MS +dentistry/M +dentition/M +denture/IMS +denuclearise/GDS +denudation/M +denude/GDS +denunciation/SM +deny/ZGDRS +deodorant/SM +deodorisation/M +deodorise/DRSZG +deodoriser/M +departed/M +department/MS +departmental/Y +departmentalisation/M +departmentalise/GDS +departure/SM +dependability/M +dependable/U +dependably +dependence/IM +dependency/SM +dependent/IY +depict/GDS +depiction/MS +depilatory/SM +deplete/GNDS +depletion/M +deplorably +deplore/BGDS +deploy/ALGDS +deployment/AM +deployments +deponent/MS +deportation/MS +deportee/MS +deportment/M +deposit/AGMDS +depositor/MS +depository/SM +deprave/GDS +depravity/SM +deprecate/GNDS +deprecating/Y +deprecation/M +deprecatory +depreciate/DSGN +depreciation/M +depredation/SM +depressant/SM +depressing/Y +depression/SM +depressive/SM +depressor/MS +depressurisation +deprive/GDS +deprogramming +depth/M +depths +deputation/MS +depute/DSG +deputise/DSG +deputy/SM +derailleur/SM +derailment/SM +derangement/M +derby/SM +derelict/MS +dereliction/M +deride/GDS +derision/M +derisive/PY +derisiveness/M +derisory +derivation/MS +derivative/MS +derive/B +dermal +dermatitis/M +dermatological +dermatologist/SM +dermatology/M +dermis/M +derogate/DSGN +derogation/M +derogatorily +derogatory +derrick/SM +derriere/SM +derringer/SM +derv +dervish/MS +desalinate/GNDS +desalination/M +desalinisation/M +desalinise/GDS +descant/M +descend/FGDS +descendant/MS +descendent +descender +describable/I +describe/BZGDR +describer/M +description/SM +descriptive/PY +descriptiveness/M +descriptor/S +descry/GDS +desecrate/DSGN +desecration/M +deselection +desert/SDRZGM +deserter/M +desertification +desertion/SM +deserved/UY +deserving/U +desiccant/SM +desiccate/DSGN +desiccation/M +desiccator/SM +desiderata +desideratum/M +design/ASDG +designate/DSGNX +designation/M +desirability/UM +desirableness/M +desirably/U +desire/B +desired/U +desirous +desist/SDG +desk/SM +deskill/G +desktop/SM +desolate/PDSYGN +desolateness/M +desolation/M +despair/SMDG +despairing/Y +desperado/M +desperadoes +desperate/YNP +desperateness/M +desperation/M +despicable +despicably +despise/DSG +despite +despoilment/M +despondence/M +despondency/M +despondent/Y +despotic +despotically +despotism/M +dessert/SM +dessertspoon/S +dessertspoonful/S +destabilisation +destabilization's +destination/SM +destine/DSG +destiny/SM +destitute/N +destitution/M +destroy/SZGDR +destroyer/M +destruct/GVMDS +destructibility/IM +destructible/I +destruction/M +destructive/PY +destructiveness/M +desuetude/M +desultorily +desultory +detach/BLGDS +detachment/MS +detain/LGDS +detainee/MS +detainment/M +detect/SDGVB +detectable/U +detected/U +detection/M +detective/SM +detector/SM +detente/SMNX +detention/M +deter/SL +detergent/SM +deteriorate/DSGN +deterioration/M +determent/M +determinable/I +determinant/SM +determinate +determine/AGDS +determined/U +determinedly +determiner/SM +determinism/M +deterministic +deterred/U +deterrence/M +deterrent/MS +deterring +detestably +detestation/M +dethrone/DSLG +dethronement/M +detonate/GNDSX +detonation/M +detonator/SM +detox/MDSG +detoxification/M +detoxify/DSGN +detract/GD +detriment/SM +detrimental/Y +detritus/M +deuce/SM +deuterium/M +devastate/GNDS +devastating/Y +devastation/M +devastator/MS +develop/ASGDL +developed/U +developer/SM +development/ASM +developmental/Y +deviance/M +deviancy/M +deviant/SM +deviate/DSMGNX +deviating/U +deviation/M +devil/SML +devilish/YP +devilishness/M +devilled +devilling +devilment/M +devilry/SM +deviltry/SM +devious/YP +deviousness/M +devoid +devolution/M +devolve/DSG +devoted/Y +devotee/SM +devotion/MS +devotional/SM +devour/SDG +devout/PRYT +devoutness/M +dew/M +dewberry/SM +dewclaw/SM +dewdrop/SM +dewiness/M +dewlap/SM +dewy/RTP +dexterity/M +dexterous/YP +dexterousness/M +dextrose/M +dharma +dhoti/SM +dhow/MS +diabetes/M +diabetic/SM +diabolic +diabolical/Y +diacritic/MS +diacritical +diadem/SM +diaereses +diaeresis/M +diagnose/DSG +diagnosis/M +diagnostic/S +diagnostically +diagnostician/SM +diagnostics/M +diagonal/SMY +diagram/SM +diagrammatic +diagrammatically +diagrammed +diagramming +dial/AMS +dialect/SM +dialectal +dialectic/SM +dialectical +dialectics/M +dialled/A +dialling/S +dialog +dialogue/SM +dialyses +dialysis/M +diam +diamante +diameter/SM +diametric +diametrical/Y +diamond/SM +diamondback/MS +diapason/SM +diaper/SMDG +diaphanous +diaphragm/SM +diaphragmatic +diarist/SM +diarrhoea/M +diary/SM +diaspora/SM +diastase/M +diastole/M +diastolic +diathermy/M +diatom/SM +diatomic +diatonic +diatribe/SM +dibble/DSMG +dibs/M +dice/GDS +dices/I +dicey +dichotomous +dichotomy/SM +dicier +diciest +dick/MRXZS +dicker/DG +dickey/SM +dickhead/S +dickybird/S +dicotyledon/MS +dicotyledonous +dict +dicta +dictate/DSMGNX +dictation/M +dictator/SM +dictatorial/Y +dictatorship/SM +diction/M +dictionary/SM +dictum/M +did/AU +didactic +didactically +diddle/DRSZG +diddler/M +diddly +diddlysquat +diddums +didgeridoo/S +didn't +dido/M +didoes +didst +die/DSM +dielectric/MS +diereses +dieresis/M +diesel/SMDG +diet/MDRZGS +dietary/SM +dieter/M +dietetic/S +dietetics/M +dietitian/MS +diff/DRZGS +differ/DG +difference/IM +differences +different/IY +differential/SM +differentiate/DSGN +differentiated/U +differentiation/M +difficult/Y +difficulty/SM +diffidence/M +diffident/Y +diffract/GSD +diffraction/M +diffuse/DSYGNVP +diffuseness/M +diffusion/M +dig/SM +digerati/M +digest/SMDGV +digested/U +digestibility/M +digestible/I +digestion/IM +digestions +digestive/S +digger/SM +digging/S +diggings/M +digicam/S +digit/SM +digital/Y +digitalis/M +digitisation +digitise/GDS +dignified/U +dignify/DSG +dignitary/SM +dignity/ISM +digraph/M +digraphs +digress/GVDS +digression/MS +dike/GDS +diktat/S +dilapidated +dilapidation/M +dilatation/M +dilate/DSGN +dilation/M +dilator/SM +dilatory +dildo/S +dilemma/MS +dilettante/SM +dilettantish +dilettantism/M +diligence/M +diligent/Y +dill/MS +dilly/SM +dillydally/DSG +dilute/DSGNX +diluted/U +dilution/M +dim/PSRY +dime/MS +dimension/SM +dimensional +dimensionless +diminish/GDS +diminished/U +diminuendo/SM +diminution/SM +diminutive/SM +dimity/M +dimmed/U +dimmer/SM +dimmest +dimming +dimness/M +dimple/DSMG +dimply +dimwit/SM +dimwitted +din/ZGSMDR +dinar/SM +dine/S +diner/M +dinette/MS +ding/MDG +dingbat/MS +dinghy/SM +dingily +dinginess/M +dingle/SM +dingo/M +dingoes +dingus/MS +dingy/RPT +dink/R +dinky/RSMT +dinned +dinner/SMDG +dinnertime/M +dinnerware/M +dinning +dinosaur/SM +dint/M +diocesan/MS +diocese/MS +diode/SM +diorama/SM +dioxide/SM +dioxin/SM +dip/SM +diphtheria/M +diphthong/SM +diploid/SM +diploma/SM +diplomacy/M +diplomat/MS +diplomata +diplomatic/U +diplomatically +diplomatist/MS +diplopia +dipole/SM +dipped +dipper/SM +dipping +dippy/RT +dipso/S +dipsomania/M +dipsomaniac/MS +dipstick/SM +dipterous +diptych/M +diptychs +dire/YTR +direct/ASDGVT +directer +direction/IM +directional +directionless +directions +directive/SM +directly +directness/IM +director/MS +directorate/SM +directorial +directorship/SM +directory/SM +direful +dirge/SM +dirigible/MS +dirk/MS +dirndl/SM +dirt/M +dirtball/S +dirtily +dirtiness/M +dirty/DRSTGP +dis/M +disable/DSGL +disablement/M +disambiguate/N +disappointing/Y +disarming/Y +disassembly +disastrous/Y +disbandment/M +disbarment/M +disbelieving/Y +disbursal/M +disburse/DSGL +disbursement/MS +disc/M +discern/LSDG +discernible/I +discernibly +discerning/Y +discernment/M +discharged/U +disciple/SM +discipleship/M +disciplinarian/SM +disciplinary +discipline/DSMG +disciplined/U +disclose/DSG +disclosed/U +disco/MG +discography/SM +discoloration/S +discolouration/S +discombobulate/DSGN +discombobulation/M +discomfit/DG +discomfiture/M +discommode/DG +disconcerting/Y +disconnected/PY +disconnectedness/M +disconsolate/Y +discordance/M +discordant/Y +discotheque/SM +discourage/LGDS +discouragement/SM +discouraging/Y +discover/ASDG +discovered/U +discoverer/MS +discovery/ASM +discreet/PRYT +discreetness/M +discrepancy/SM +discrepant +discrete/PYN +discreteness/M +discretion/IM +discretionary +discriminant +discriminate/GNDS +discriminating/U +discrimination/M +discriminator/MS +discriminatory +discursiveness/M +discus/MS +discussant/SM +discussion/SM +disdain/SMDG +disdainful/Y +disembowel/SL +disembowelled +disembowelling +disembowelment/M +disfigurement/SM +disfranchisement/M +disgorgement/M +disgruntle/LGDS +disgruntlement/M +disguise/GD +disguised/U +disgusted/Y +disgusting/Y +dish/MDSG +dishabille/M +disharmonious +dishcloth/M +dishcloths +disheartening/Y +dishevel/LS +dishevelled +dishevelling +dishevelment/M +dishpan/SM +dishrag/SM +dishtowel/MS +dishware/M +dishwasher/MS +dishwater/M +dishy +disillusion/GLD +disillusionment/M +disinfectant/MS +disinfection/M +disinterested/PY +disinterestedness/M +disjointed/YP +disjointedness/M +disjunctive +disjuncture +disk/MS +diskette/MS +dislodge/GDS +dismal/Y +dismantlement/M +dismay/SMDG +dismayed/U +dismember/LGD +dismemberment/M +dismissive/Y +disorder/Y +disorganisation/M +disparage/DSGL +disparagement/M +disparaging/Y +disparate/Y +dispatcher/MS +dispel/S +dispelled +dispelling +dispensary/SM +dispensation/MS +dispense/BZGDRS +dispenser/M +dispersal/M +disperse/GNDS +dispersion/M +dispirit/GDS +displeasure/M +disposable/SM +disposal/SM +disposed/I +disposition/ISM +dispossession/M +disproof/SM +disproportional +disprove/B +disputable/I +disputably/I +disputant/MS +disputation/SM +disputatious/Y +dispute/DRSMZGB +disputed/U +disputer/M +disquiet/GSMD +disquisition/MS +disregardful +disrepair/M +disrepute/MB +disrupt/GVSD +disruption/SM +disruptive/Y +dissect/SDG +dissed +dissemblance/M +dissemble/ZGDRS +dissembler/M +disseminate/GNDS +dissemination/M +dissension/SM +dissent/SMDRZG +dissenter/M +dissertation/SM +dissidence/M +dissident/MS +dissimilar +dissimilitude/S +dissing +dissipate/GNDS +dissipation/M +dissociate/GNDS +dissociation/M +dissoluble/I +dissolute/YNP +dissoluteness/M +dissolve/AGDS +dissolved/U +dissonance/SM +dissonant +dissuade/GDS +dissuasive +dist +distaff/SM +distal/Y +distance/DSMG +distant/Y +distaste/SM +distemper/M +distention/SM +distil/S +distillate/SMNX +distillation/M +distillery/SM +distinct/IYTVP +distincter +distinction/SM +distinctive/YP +distinctiveness/M +distinctness/IM +distinguish/GDSB +distinguishable/I +distinguished/U +distort/GDR +distortion/MS +distract/DG +distracted/Y +distraction/S +distrait +distraught +distress/DG +distressful +distressing/Y +distribute/AGNVDS +distributed/U +distribution/AM +distributional +distributions +distributive/Y +distributor's +distributor/AS +distributorship/S +district's +district/AS +disturb/ZGSDR +disturbance/SM +disturbed/U +disturber/M +disturbing/Y +disunion/M +disyllabic +ditch/MDSG +dither/SMDRZG +ditherer/M +ditransitive +ditsy +ditto/SMDG +ditty/SM +ditz/MS +diuretic/MS +diurnal/Y +div +diva/MS +divalent +divan/SM +dive/MZTGDRS +diver/M +diverge/DSG +divergence/MS +divergent +diverse/XYNP +diverseness/M +diversification/M +diversify/GNDS +diversion/M +diversionary +diversity/SM +divert/SDG +diverticulitis/M +divest/SLDG +divestiture/MS +divestment/M +divide/DRSMZGB +divided/U +dividend/MS +divider/M +divination/M +divine/DRSMYZTG +diviner/M +diving/M +divinity/SM +divisibility/IM +divisible/I +division/MS +divisional +divisive/PY +divisiveness/M +divisor/SM +divorce/DSLMG +divorcee/MS +divorcement/MS +divot/SM +divulge/GDS +divvy/DSMG +dixieland/M +dizzily +dizziness/M +dizzy/DRSPTG +djellaba/MS +do/SJMRHZG +doable +dob/S +dobbed +dobbin/SM +dobbing +doberman/MS +dobro +doc/SM +docent/SM +docile/Y +docility/M +dock/MDRZGS +docket/SMDG +dockland/S +dockside +dockworker/MS +dockyard/MS +doctor/SMDG +doctoral +doctorate/MS +doctrinaire/MS +doctrinal +doctrine/MS +docudrama/SM +document/GMDS +documentary/SM +documentation/SM +documented/U +dodder/SMDG +doddery +doddle +dodge/DRSMZG +dodgem/S +dodger/M +dodgy/RT +dodo/MS +doe/SM +doer/M +does/AU +doeskin/MS +doesn't +doff/DGS +dog/SM +dogcart/SM +dogcatcher/SM +doge/MS +dogeared +dogfight/SM +dogfish/MS +dogged/PY +doggedness/M +doggerel/M +dogging +doggone/TGRS +doggy/RSMT +doghouse/SM +dogie/SM +dogleg/SM +doglegged +doglegging +doglike +dogma/SM +dogmatic +dogmatically +dogmatism/M +dogmatist/SM +dognapper +dogsbody/S +dogsled/S +dogtrot/MS +dogtrotted +dogtrotting +dogwood/MS +doily/SM +doing/USM +doldrums/M +dole's +dole/FGDS +doleful/YP +dolefulness/M +doll/MDGS +dollar/SM +dollhouse/SM +dollop/SGMD +dolly/SM +dolmen/SM +dolomite/M +dolorous/Y +dolour/M +dolphin/MS +dolt/MS +doltish/YP +doltishness/M +domain/SM +dome/MGDS +domestic/SM +domestically +domesticate/DSGN +domesticated/U +domestication/M +domesticity/M +domicile/DSMG +domiciliary +dominance/M +dominant/SMY +dominate/DSGN +domination/M +dominatrices +dominatrix/M +domineer/SGD +domineering/Y +dominion/SM +domino/M +dominoes +don't +don/SM +dona/MS +donate/DSXGN +donation/M +done/FAU +dong/MDGS +dongle/SM +donkey/SM +donned +donning +donnish +donnybrook/MS +donor/SM +donuts +doodad/SM +doodah +doodahs +doodle/DRSMZG +doodlebug/SM +doodler/M +doohickey/SM +doolally +doom/MDGS +doomsayer/MS +doomsday/M +doomster/S +door's +door/IS +doorbell/MS +doorjamb/S +doorkeeper/MS +doorknob/MS +doorknocker/S +doorman/M +doormat/SM +doormen +doorplate/SM +doorpost/S +doorstep/MS +doorstepped +doorstepping +doorstop/MS +doorway/SM +dooryard/MS +dopa/M +dopamine +dope/MZGDRS +doper/M +dopey +dopier +dopiest +dopiness/M +doping/M +doppelganger/S +dork/MS +dorky/RT +dorm/MRZS +dormancy/M +dormant +dormer/M +dormice +dormitory/SM +dormouse/M +dorsal/Y +dory/SM +dosage/SM +dose/MGDS +dosh +dosimeter/SM +doss/DRSZG +dosshouse/S +dossier/MS +dost +dot/ZGSMDR +dotage/M +dotard/SM +dotcom/SM +dote/S +doter/M +doting/Y +dotted +dotting +dotty/RT +double's +double/ADSG +doubleheader/MS +doublespeak/M +doublet/MS +doubloon/SM +doubly +doubt/SMDRZG +doubter/M +doubtful/PY +doubtfulness/M +doubting/Y +doubtless/Y +douche/DSMG +dough/M +doughnut/SM +doughty/RT +doughy/TR +dour/RYTP +dourness/M +douse/DSG +dove/MS +dovecot/S +dovecote/SM +dovetail/MDSG +dovish +dowager/MS +dowdily +dowdiness/M +dowdy/RSPT +dowel/SM +dowelled +dowelling +dower/SMDG +down/MDRZGS +downbeat/SM +downcast +downdrafts +downdraught/M +downer/M +downfall/SMN +downfield +downgrade/DSMG +downhearted/PY +downheartedness/M +downhill/MS +download/MDBSG +downmarket +downplay/DSG +downpour/MS +downrange +downright +downriver +downscale +downshift/SGD +downside/MS +downsize/GDS +downsizing/M +downspout/MS +downstage +downstairs/M +downstate/M +downstream +downswing/MS +downtime/M +downtown/M +downtrend/MS +downtrodden +downturn/MS +downward/S +downwind +downy/RT +dowry/SM +dowse/DRSZG +dowser/M +doxology/SM +doyen/SM +doyenne/MS +doz/XGDNS +doze/M +dozen/MH +dozily +dozy/RTP +dpi +dpt +drab/MYSP +drabber +drabbest +drabness/M +drachma/MS +draconian +draft's +draft/ASDG +draftee/SM +drafter/SM +drafting/M +drag/MS +dragged +dragging +draggy/TR +dragnet/SM +dragon/SM +dragonfly/SM +dragoon/SMDG +dragster/S +drain/SMDRZG +drainage/M +drainboard/SM +drainer/M +drainpipe/MS +drake/SM +dram/MS +drama/SM +dramatic/S +dramatically +dramatics/M +dramatisation/MS +dramatise/DSG +dramatist/SM +drank +drape/DRSMZG +draper/M +drapery/SM +drastic +drastically +drat +dratted +draught/SM +draughtboard/S +draughtily +draughtiness/M +draughtsman/M +draughtsmanship/M +draughtsmen +draughtswoman/M +draughtswomen +draughty/PRT +draw/MRZGSJ +drawback/MS +drawbridge/MS +drawer/M +drawing/M +drawl/SMDG +drawn/A +drawstring/MS +dray/MS +dread/SMDG +dreadful/PY +dreadfulness/M +dreadlocks/M +dreadnought/MS +dream/SMDRZG +dreamboat/MS +dreamed/U +dreamer/M +dreamily +dreaminess/M +dreamland/M +dreamless +dreamlike +dreamt +dreamworld/SM +dreamy/RPT +drear +drearily +dreariness/M +dreary/RPT +dredge/DRSMZG +dredger/M +dregs/M +drench/GDS +dress/AUGSDM +dressage/M +dresser/MS +dressiness/M +dressing/SM +dressmaker/SM +dressmaking/M +dressy/TPR +drew/A +dribble/MZGDRS +dribbler/M +driblet/MS +drier/M +drift/SMDRZG +drifter/M +driftnet/S +driftwood/M +drill/SMDRZG +driller/M +drillmaster/SM +drily +drink/SMRBJZG +drinkable/U +drinker/M +drip/MS +dripped +dripping/SM +drippy/TR +drive/RSMZGJ +drivel/SM +drivelled +driveller/SM +drivelling +driven +driver/M +driveshaft/SM +driveway/MS +drizzle/MGDS +drizzly +drogue/SM +droid/S +droll/RPT +drollery/SM +drollness/M +drolly +dromedary/SM +drone/DSMG +drool/SMDG +droop/GSMD +droopiness/M +droopy/TPR +drop/MS +dropkick/MS +droplet/SM +dropout/SM +dropped +dropper/SM +dropping/S +droppings/M +dropsical +dropsy/M +dross/M +drought/SM +drove/RSMZ +drover/M +drown/GSJD +drowning/M +drowse/MGDS +drowsily +drowsiness/M +drowsy/RTP +drub/S +drubbed +drubber/SM +drubbing/MS +drudge/MGDS +drudgery/M +drug/MS +drugged +druggie/SM +drugging +druggist/SM +druggy +drugstore/MS +druid/SM +druidism/M +drum/MS +drumbeat/SM +drumlin/SM +drummed +drummer/SM +drumming +drumstick/SM +drunk/STMNR +drunkard/MS +drunken/PY +drunkenness/M +drupe/SM +druthers/M +dry/ZTGDRSM +dryad/SM +dryer/SM +dryness/M +drys +drywall/M +dual +dualism/M +duality/M +dub/SM +dubbed +dubber/SM +dubbin/M +dubbing +dubiety/M +dubious/YP +dubiousness/M +ducal +ducat/SM +duchess/MS +duchy/SM +duck/MDGS +duckbill/SM +duckboards +duckling/SM +duckpins/M +duckweed/M +ducky/TRSM +duct's/K +duct/CKIFS +ductile +ductility/M +ducting +ductless +dud/GSMD +dude/MS +dudgeon/M +due/SM +duel/MS +duelled +dueller/SM +duelling/S +duellist/SM +duenna/MS +duet/MS +duff/MDRZGS +duffer/M +dug +dugout/MS +duh +duke/MS +dukedom/SM +dulcet +dulcimer/MS +dull/DRPTGS +dullard/SM +dullness/M +dully +duly/U +dumb/RYPT +dumbbell/SM +dumbfound/SDG +dumbness/M +dumbo/S +dumbstruck +dumbwaiter/SM +dumdum/MS +dummy/SM +dump/MDRZGS +dumpiness/M +dumpling/SM +dumpsite/S +dumpster/SM +dumpy/PTR +dun/SM +dunce/SM +dunderhead/MS +dune/MS +dung/MDGS +dungaree/MS +dungeon/SM +dunghill/MS +dunk/MDGS +dunned +dunner +dunnest +dunning +dunno +duo/SM +duodecimal +duodena +duodenal +duodenum/M +duopoly/S +dupe/MZGDRS +duper/M +duple +duplex/MS +duplicate's +duplicate/AGNDS +duplication/AM +duplicator/MS +duplicitous +duplicity/M +durability/M +durable +durably +durance/M +duration/M +duress/M +during +durst +durum/M +dusk/M +duskiness/M +dusky/RTP +dust/MDRZGS +dustbin/SM +dustcart/S +duster/M +dustiness/M +dustless +dustman +dustmen +dustpan/SM +dustsheet/S +dusty/RTP +dutch +duteous/Y +dutiable +dutiful/YP +dutifulness/M +duty/SM +duvet/SM +dwarf/SGMD +dwarfish +dwarfism/M +dweeb/SM +dwell/SJZGR +dweller/M +dwelling/M +dwelt/I +dwindle/DSG +dyadic +dybbuk/SM +dybbukim +dye/DRSMZG +dyeing/A +dyer/M +dyestuff/M +dying/M +dyke/MS +dynamic/MS +dynamical/Y +dynamics/M +dynamism/M +dynamite/MZGDRS +dynamiter/M +dynamo/SM +dynastic +dynasty/SM +dysentery/M +dysfunction/MS +dysfunctional +dyslectic/SM +dyslexia/M +dyslexic/SM +dyspepsia/M +dyspeptic/MS +dysphagia +dysphoria +dysphoric +dysprosium/M +dystonia +dz +e'en +e'er +e/FDST +eBay/M +eMusic/M +ea +each +eager/PTRY +eagerness/M +eagle/MS +eaglet/MS +ear/SMDY +earache/SM +earbud/SM +eardrum/SM +earful/SM +earl/MS +earldom/SM +earliness/M +earlobe/SM +early/RTP +earmark/SMDG +earmuff/SM +earn/DRZTGJS +earned/U +earner/M +earnest/SMYP +earnestness/M +earnings/M +earphone/MS +earpiece/S +earplug/SM +earring/SM +earshot/M +earsplitting +earth's +earth/UDYG +earthbound +earthen +earthenware/M +earthiness/M +earthling/MS +earthly/RT +earthquake/SM +earths/U +earthshaking +earthward/S +earthwork/MS +earthworm/MS +earthy/RTP +earwax/M +earwig/SM +ease/EDSM +easel/SM +easement/SM +easily/U +easiness/UM +easing +east/M +eastbound +easterly/SM +eastern/ZR +easterner/M +easternmost +eastward/S +easy/URTP +easygoing +eat/ZGBSNR +eatable/SM +eaten/U +eater/M +eatery/SM +eave/MS +eavesdrop/S +eavesdropped +eavesdropper/SM +eavesdropping +ebb/SMDG +ebony/SM +ebullience/M +ebullient/Y +ebullition/M +eccentric/SM +eccentrically +eccentricity/SM +eccl +ecclesial +ecclesiastic/SM +ecclesiastical/Y +echelon/SM +echinoderm/SM +echo's +echo/ADG +echoes/A +echoic +echolocation/M +echos +eclair/SM +eclat/M +eclectic/SM +eclectically +eclecticism/M +eclipse/DSMG +ecliptic/M +eclogue/SM +ecocide/M +ecol +ecologic +ecological/Y +ecologist/MS +ecology/M +econ +econometric +economic/S +economical/UY +economics/M +economise/DRSZG +economiser/M +economist/SM +economy/SM +ecosystem/MS +ecotourism/M +ecotourist/MS +ecru/M +ecstasy/SM +ecstatic +ecstatically +ecu +ecumenical/Y +ecumenicism/M +ecumenism/M +eczema/M +ed/ACSM +edamame +eddy/DSMG +edelweiss/M +edge/MZGJDRS +edger/M +edgewise +edgily +edginess/M +edging/M +edgy/RTP +edibility/M +edible/SMP +edibleness/M +edict/SM +edification/M +edifice/SM +edifier/M +edify/DRSZGN +edifying/U +edit's +edit/ADGS +editable +edited/U +edition/MS +editor/SM +editorial/SMY +editorialise/DSG +editorship/M +educ +educability/M +educable/I +educate/ADSGNV +educated/U +education/AM +educational/Y +educationalist/S +educationist/S +educations +educator/MS +educe/DSGB +edutainment/M +eek +eel/SM +eerie/RT +eerily +eeriness/M +eff/GSD +efface/DSLG +effacement/M +effect/SMDGV +effective/IPY +effectiveness/IM +effectual/IY +effectuate/DSG +effeminacy/M +effeminate/Y +effendi/SM +efferent +effervesce/GDS +effervescence/M +effervescent/Y +effete/YP +effeteness/M +efficacious/Y +efficacy/IM +efficiency/ISM +efficient/IY +effigy/SM +efflorescence/M +efflorescent +effluence/M +effluent/MS +effluvia +effluvium/M +effort/SM +effortless/YP +effortlessness/M +effrontery/M +effulgence/M +effulgent +effuse/DSGNVX +effusion/M +effusive/YP +effusiveness/M +egad +egalitarian/SM +egalitarianism/M +egg/GSMD +eggbeater/MS +eggcup/SM +egghead/SM +eggnog/M +eggplant/MS +eggshell/SM +eglantine/SM +ego/SM +egocentric/MS +egocentrically +egocentricity/M +egoism/M +egoist/SM +egoistic +egoistical/Y +egomania/M +egomaniac/MS +egotism/M +egotist/SM +egotistic +egotistical/Y +egregious/PY +egregiousness/M +egress/MS +egret/SM +eh +eider/SM +eiderdown/MS +eigenvalue/S +eight/SM +eighteen/MHS +eighteenth/M +eighteenths +eighth/M +eighths +eightieth/M +eightieths +eighty/SMH +einsteinium/M +eisteddfod/S +either +ejaculate/GNXDS +ejaculation/M +ejaculatory +eject/SDG +ejection/MS +ejector/SM +eke/DSG +elaborate/YGNDSPX +elaborateness/M +elaboration/M +elan/M +eland/SM +elapse/DSG +elastic/MS +elastically +elasticated +elasticise/DSG +elasticity/M +elate/DSGN +elated/Y +elation/M +elbow/SMDG +elbowroom/M +elder/SMY +elderberry/SM +eldercare/M +eldest +eldritch +elect's +elect/ASDGV +electable +election/AMS +electioneer/DGS +elective/MS +elector/MS +electoral/Y +electorate/MS +electric/S +electrical/Y +electrician/MS +electricity/M +electrification/M +electrifier/M +electrify/ZGNDRS +electrocardiogram/MS +electrocardiograph/M +electrocardiographs +electrocardiography/M +electrocute/DSXGN +electrocution/M +electrode/SM +electrodynamics +electroencephalogram/MS +electroencephalograph/M +electroencephalographic +electroencephalographs +electroencephalography/M +electrologist/SM +electrolysis/M +electrolyte/MS +electrolytic +electromagnet/MS +electromagnetic +electromagnetically +electromagnetism/M +electromotive +electron/MS +electronic/S +electronica/M +electronically +electronics/M +electroplate/DSG +electroscope/SM +electroscopic +electroshock/M +electrostatic/S +electrostatics/M +electrotype/MS +eleemosynary +elegance/IM +elegant/IY +elegiac/MS +elegiacal +elegy/SM +elem +element/MS +elemental/Y +elementary +elephant/SM +elephantiasis/M +elephantine +elev +elevate/XDSGN +elevation/M +elevator/MS +eleven/SMH +elevens/S +eleventh/M +elevenths +elf/M +elfin +elfish +elicit/SDG +elicitation/M +elide/DSG +eligibility/IM +eligible +eliminate/XDSGN +elimination/M +eliminator/S +elision/MS +elite/SM +elitism/M +elitist/MS +elixir/SM +elk/SM +ell/SM +ellipse/MS +ellipsis/M +ellipsoid/SM +ellipsoidal +elliptic +elliptical/Y +elm/SM +elocution/M +elocutionary +elocutionist/SM +elodea/SM +elongate/DSGNX +elongation/M +elope/DSGL +elopement/MS +eloquence/M +eloquent/Y +else +elsewhere +elucidate/DSGNX +elucidation/M +elude/DSG +elusive/YP +elusiveness/M +elver/SM +elves +elvish +em's +em/S +emaciate/GNDS +emaciation/M +email/SMDG +emanate/XDSGN +emanation/M +emancipate/DSGN +emancipation/M +emancipator/MS +emasculate/GNDS +emasculation/M +embalm/SZGDR +embalmer/M +embank/SLGD +embankment/SM +embargo/MDG +embargoes +embark/AEGDS +embarkation/EM +embarkations +embarrass/GLDS +embarrassed/U +embarrassing/Y +embarrassment/SM +embassy/SM +embattled +embed/S +embedded +embedding +embellish/LGDS +embellishment/SM +ember/SM +embezzle/ZGLDRS +embezzlement/M +embezzler/M +embitter/GLDS +embitterment/M +emblazon/GDLS +emblazonment/M +emblem/SM +emblematic +emblematically +embodiment/EM +embody/AEGSD +embolden/DGS +embolisation +embolism/MS +emboss/DRSZG +embosser/M +embouchure/M +embower/SGD +embrace/DSMG +embraceable +embrasure/MS +embrocation/MS +embroider/SDRZG +embroiderer/M +embroidery/SM +embroil/DGLS +embroilment/M +embryo/SM +embryological +embryologist/MS +embryology/M +embryonic +emcee/DSM +emceeing +emend/SDG +emendation/MS +emerald/MS +emerge/ADSG +emergence/AM +emergency/SM +emergent +emerita +emeritus +emery/M +emetic/SM +emf/S +emigrant/SM +emigrate/DSXGN +emigration/M +emigre/SM +eminence/MS +eminent/Y +emir/MS +emirate/MS +emissary/SM +emission/SM +emit/S +emitted +emitter/MS +emitting +emo/SM +emoji/SM +emollient/MS +emolument/MS +emote/XDSGNV +emoticon/SM +emotion/M +emotional/UY +emotionalise/GDS +emotionalism/M +emotionless +emotive/Y +empathetic +empathise/DSG +empathy/M +emperor/MS +emphases +emphasis/M +emphasise/AGDS +emphatic/U +emphatically +emphysema/M +empire/SM +empiric +empirical/Y +empiricism/M +empiricist/SM +emplacement/SM +employ's +employ/ADGLS +employable/U +employee/SM +employer/SM +employment/UAM +employments +emporium/SM +empower/SDGL +empowerment/M +empress/MS +emptily +emptiness/M +empty/TGPDRSM +empyrean/M +emu/SM +emulate/DSGNVX +emulation/M +emulator/SM +emulsification/M +emulsifier/M +emulsify/NDRSZG +emulsion/MS +en/SM +enable/DRSZG +enabler/M +enact/ASLDG +enactment/ASM +enamel/SM +enamelled +enameller/SM +enamelling/S +enamelware/M +enamour/DGS +enc +encamp/LSGD +encampment/MS +encapsulate/XGNDS +encapsulation/M +encase/LDSG +encasement/M +encephalitic +encephalitis/M +enchain/DGS +enchant/ELDGS +enchanter/MS +enchanting/Y +enchantment/EM +enchantments +enchantress/MS +enchilada/SM +encipher/SGD +encircle/DSGL +encirclement/M +encl +enclave/MS +enclose/GDS +enclosed/U +enclosure/SM +encode/DRSZG +encoder/M +encomium/MS +encompass/GDS +encore/DSMG +encounter/GSMD +encourage/DSLG +encouragement/SM +encouraging/Y +encroach/GLDS +encroachment/SM +encrust/DGS +encrustation/SM +encrypt/DGS +encryption +encumber/EGSD +encumbered/U +encumbrance/MS +ency +encyclical/SM +encyclopaedia/SM +encyclopaedic +encyclopedia/MS +encyclopedic +encyst/LSGD +encystment/M +end/GVSJMD +endanger/SGDL +endangerment/M +endear/SGLD +endearing/Y +endearment/SM +endeavour/MDSG +endemic/MS +endemically +endgame/S +ending/M +endive/SM +endless/PY +endlessness/M +endmost +endocarditis +endocrine/MS +endocrinologist/MS +endocrinology/M +endogenous/Y +endometrial +endometriosis +endometrium +endorphin/MS +endorse/LZGDRS +endorsement/MS +endorser/M +endoscope/MS +endoscopic +endoscopy/M +endothelial +endothermic +endow/SDLG +endowment/MS +endpoint/SM +endue/DSG +endurable/U +endurance/M +endure/DSBG +endways +enema/SM +enemy/SM +energetic +energetically +energise/ZGDRS +energiser/M +energy/SM +enervate/GNDS +enervation/M +enfeeble/GDSL +enfeeblement/M +enfilade/DSMG +enfold/SGD +enforce/LZGDRS +enforceable/U +enforced/U +enforcement/M +enforcer/M +enfranchise/EGDSL +enfranchisement/EM +engage/EADSG +engagement/EMS +engagingly +engender/SGD +engine/SM +engineer/MDGS +engineering/M +engorge/LGDS +engorgement/M +engram/SM +engrave/ZGJDRS +engraver/M +engraving/M +engross/GLDS +engrossment/M +engulf/SLGD +engulfment/M +enhance/LZGDRS +enhancement/SM +enigma/SM +enigmatic +enigmatically +enjambment/SM +enjoin/SGD +enjoy/GBLSD +enjoyably +enjoyment/SM +enlarge/LZGDRS +enlargeable +enlargement/MS +enlarger/M +enlighten/SGLD +enlightened/U +enlightenment/M +enlist/ADGSL +enlistee/SM +enlistment/AM +enlistments +enliven/SLDG +enlivenment/M +enmesh/DSGL +enmeshment/M +enmity/SM +ennoble/DSGL +ennoblement/M +ennui/M +enormity/SM +enormous/PY +enormousness/M +enough/M +enplane/DSG +enquire/DRSZG +enquiring/Y +enquiry/SM +enrage/GDS +enrapture/DSG +enrich/DSLG +enrichment/M +enrol/SL +enrolled +enrolling +enrolment/SM +ensconce/DSG +ensemble/SM +enshrine/GLDS +enshrinement/M +enshroud/DGS +ensign/MS +ensilage/M +enslave/DSGL +enslavement/M +ensnare/DSLG +ensnarement/M +ensue/DSG +ensure/ZGDRS +ensurer/M +entail/DSGL +entailment/M +entangle/EDSLG +entanglement/EM +entanglements +entente/SM +enter/ASGD +enteric +enteritis/M +enterprise/MGS +enterprising/Y +entertain/ZGDRSL +entertainer/M +entertaining/MY +entertainment/MS +enthral/SL +enthralled +enthralling +enthralment/M +enthrone/GDSL +enthronement/SM +enthuse/DSG +enthusiasm/MS +enthusiast/MS +enthusiastic/U +enthusiastically +entice/GDSL +enticement/MS +enticing/Y +entire/Y +entirety/M +entitle/DSGL +entitlement/SM +entity/SM +entomb/DSGL +entombment/M +entomological +entomologist/MS +entomology/M +entourage/SM +entr'acte +entrails/M +entrance/LDSMG +entrancement/M +entrancing/Y +entrant/SM +entrap/LS +entrapment/M +entrapped +entrapping +entreat/GSD +entreating/Y +entreaty/SM +entree/MS +entrench/DSGL +entrenchment/MS +entrepreneur/SM +entrepreneurial +entrepreneurship +entropy/M +entrust/SGD +entry/ASM +entryphone/S +entryway/MS +entwine/DSG +enumerable +enumerate/DSGNX +enumeration/M +enumerator/SM +enunciate/DSGN +enunciation/M +enuresis/M +envelop/SLDRZG +envelope/SM +enveloper/M +envelopment/M +envenom/SDG +enviable/U +enviably +envious/PY +enviousness/M +environment/MS +environmental/Y +environmentalism/M +environmentalist/SM +environs/M +envisage/GDS +envision/DGS +envoy/SM +envy/DSMG +envying/Y +enzymatic +enzyme/SM +eolian +eosinophil/S +eosinophilic +epaulette/MS +epee/MS +ephedrine/M +ephemera/M +ephemeral/Y +epic/MS +epicentre/MS +epicure/SM +epicurean/MS +epidemic/SM +epidemically +epidemiological +epidemiologist/SM +epidemiology/M +epidermal +epidermic +epidermis/MS +epidural/S +epiglottis/MS +epigram/SM +epigrammatic +epigraph/M +epigraphs +epigraphy/M +epilepsy/M +epileptic/SM +epilogue/MS +epinephrine/M +epiphany/SM +episcopacy/M +episcopal +episcopate/M +episode/SM +episodic +episodically +epistemic +epistemological +epistemology +epistle/SM +epistolary +epitaph/M +epitaphs +epithelial +epithelium/M +epithet/SM +epitome/SM +epitomise/GDS +epoch/M +epochal +epochs +eponymous +epoxy/DSMG +epsilon/SM +equability/M +equable +equably +equal/SMY +equalisation/M +equalise/ZGDRS +equaliser/M +equality/IM +equalled/U +equalling +equanimity/M +equate/DSGNBX +equation/M +equator/SM +equatorial +equerry/SM +equestrian/SM +equestrianism/M +equestrienne/SM +equidistant/Y +equilateral/SM +equilibrium/EM +equine/SM +equinoctial +equinox/MS +equip/AS +equipage/MS +equipment/M +equipoise/M +equipped/UA +equipping/A +equitable/I +equitably/I +equitation/M +equity/ISM +equiv +equivalence/MS +equivalency/SM +equivalent/MYS +equivocal/UY +equivocalness/M +equivocate/GNXDS +equivocation/M +equivocator/SM +er/C +era/SM +eradicable/I +eradicate/DSGN +eradication/M +eradicator/MS +erase/DRSBZG +eraser/M +erasure/SM +erbium/M +ere +erect/PSGDY +erectile +erection/SM +erectness/M +erector/MS +erelong +eremite/MS +erg/SM +ergo +ergonomic/S +ergonomically +ergonomics/M +ergosterol/M +ergot/M +ermine/SM +erode/DSG +erodible +erogenous +erosion/M +erosive +erotic/S +erotica/M +erotically +eroticism/M +err/GSD +errand/SM +errant/I +errata/SM +erratic +erratically +erratum/M +erroneous/Y +error/SM +ersatz/MS +erst +erstwhile +eruct/SDG +eructation/SM +erudite/YN +erudition/M +erupt/SDGV +eruption/MS +erysipelas/M +erythrocyte/SM +erythromycin +escalate/CDSGN +escalation/CM +escalations +escalator/MS +escallop/SGMD +escalope/S +escapade/MS +escape/LMGDS +escapee/MS +escapement/SM +escapism/M +escapist/MS +escapologist/S +escapology +escargot/MS +escarole/MS +escarpment/MS +eschatological +eschatology +eschew/SDG +escort/SMDG +escritoire/MS +escrow/SM +escudo/SM +escutcheon/SM +esophageal +esophagus's +esoteric +esoterically +esp +espadrille/MS +espalier/MDSG +especial/Y +espionage/M +esplanade/MS +espousal/M +espouse/GDS +espresso/MS +esprit/M +espy/DSG +esquire/SM +essay/SMDRZG +essayer/M +essayist/SM +essence/SM +essential/IMS +essentially +establish/AESDGL +establishment/AEM +establishments +estate/SM +esteem/ESMDG +ester/SM +estimable/I +estimate/MGNDSX +estimation/M +estimator/SM +estoppel +estrange/LDSG +estrangement/MS +estuary/SM +eta/SM +etc +etch/DRSZGJ +etcher/M +etching/M +eternal/YP +eternalness/M +eternity/SM +ethane/M +ethanol/M +ether/M +ethereal/Y +ethic/SM +ethical/UY +ethics/M +ethnic/SM +ethnically +ethnicity/M +ethnocentric +ethnocentrism/M +ethnographer/S +ethnographic +ethnographically +ethnography +ethnological/Y +ethnologist/SM +ethnology/M +ethological +ethologist/MS +ethology/M +ethos/M +ethyl/M +ethylene/M +etiolated +etiologic +etiological +etiologies +etiquette/M +etude/SM +etymological/Y +etymologist/SM +etymology/SM +eucalypti +eucalyptus/MS +euchre/DSMG +euclidean +eugenic/S +eugenically +eugenicist/MS +eugenics/M +eulogise/ZGDRS +eulogiser/M +eulogist/MS +eulogistic +eulogy/SM +eunuch/M +eunuchs +euphemism/SM +euphemistic +euphemistically +euphonious/Y +euphony/M +euphoria/M +euphoric +euphorically +eureka +euro/MS +europium/M +eutectic +euthanasia/M +euthanize/DSG +euthenics/M +evacuate/XDSGN +evacuation/M +evacuee/MS +evade/DRSZG +evader/M +evaluate/AGNVDSX +evaluation/AM +evanescence/M +evanescent +evangelic +evangelical/SMY +evangelicalism/M +evangelise/GDS +evangelism/M +evangelist/MS +evangelistic +evaporate/GNDS +evaporation/M +evaporator/SM +evasion/SM +evasive/YP +evasiveness/M +eve/ASM +even/MDRYTGSJP +evenhanded/Y +evening/M +evenness/UM +evensong/M +event/SM +eventful/UY +eventfulness/M +eventide/M +eventual/Y +eventuality/SM +eventuate/GDS +ever +everglade/SM +evergreen/SM +everlasting/MYS +evermore +every +everybody/M +everyday +everyone/M +everyplace +everything/M +everywhere +evict/SDG +eviction/MS +evidence/MGDS +evident/Y +evil/MRYTSP +evildoer/SM +evildoing/M +eviller +evillest +evilness/M +evince/DSG +eviscerate/DSGN +evisceration/M +evocation/MS +evocative/Y +evoke/DSG +evolution/M +evolutionary +evolutionist/SM +evolve/DSG +ewe/RSMZ +ewer/M +ex/MS +exabyte/MS +exacerbate/GNDS +exacerbation/M +exact/SPDRYTG +exacting/Y +exaction/M +exactitude/M +exactness/IM +exaggerate/XDSGN +exaggerated/Y +exaggeration/M +exaggerator/MS +exalt/SDG +exaltation/M +exam/MS +examination/AMS +examine/AGDS +examiner/MS +example/MGDS +exampled/U +exasperate/DSGN +exasperated/Y +exasperating/Y +exasperation/M +excavate/GNDSX +excavation/M +excavator/SM +exceed/GSD +exceeding/Y +excel/S +excelled +excellence/M +excellency/SM +excellent/Y +excelling +excelsior/M +except/GSD +exception/BSM +exceptionable/U +exceptional/UY +exceptionalism +excerpt/MDGS +excess/VMS +excessive/Y +exchange/DSMG +exchangeable +exchequer/SM +excise/XDSMGN +excision/M +excitability/M +excitably +excitation/M +excite/BDRSLZG +excited/Y +excitement/SM +exciter/M +exciting/Y +excl +exclaim/DGS +exclamation/SM +exclamatory +exclude/GDS +exclusion/MS +exclusionary +exclusive/PMYS +exclusiveness/M +exclusivity/M +excommunicate/GNDSX +excommunication/M +excoriate/DSGNX +excoriation/M +excrement/M +excremental +excrescence/MS +excrescent +excreta/M +excrete/XGNDS +excretion/M +excretory +excruciating/Y +exculpate/DSGN +exculpation/M +exculpatory +excursion/MS +excursionist/MS +excursive/YP +excursiveness/M +excusable/I +excusably/I +excuse/DSBMG +excused/U +exec/MS +execrable +execrably +execrate/DSGN +execration/M +execute/BXGNVDS +execution/ZMR +executioner/M +executive/SM +executor/MS +executrices +executrix/M +exegeses +exegesis/M +exegetic +exegetical +exemplar/SM +exemplary +exemplification/M +exemplify/GDSXN +exempt/SGD +exemption/SM +exercise/DRSMZG +exerciser/M +exert/SDG +exertion/MS +exeunt +exfoliate/GNDS +exhalation/MS +exhale/DSG +exhaust/GVMDS +exhaustible/I +exhaustion/M +exhaustive/YP +exhaustiveness/M +exhibit/GMDS +exhibition/MS +exhibitionism/M +exhibitionist/MS +exhibitor/SM +exhilarate/DSGN +exhilaration/M +exhort/SDG +exhortation/MS +exhumation/MS +exhume/DSG +exigence/MS +exigency/SM +exigent +exiguity/M +exiguous +exile/DSMG +exist/SDG +existence/MS +existent +existential/Y +existentialism/M +existentialist/MS +exit/MDGS +exobiology/M +exodus/MS +exogenous +exon/MS +exonerate/GNDS +exoneration/M +exoplanet/MS +exorbitance/M +exorbitant/Y +exorcise/DSG +exorcism/SM +exorcist/SM +exoskeleton/SM +exosphere/SM +exothermic +exotic/SM +exotica +exotically +exoticism/M +exp +expand/BGSD +expanse/XMNVS +expansible +expansion/M +expansionary +expansionism/M +expansionist/MS +expansive/YP +expansiveness/M +expat/S +expatiate/GNDS +expatiation/M +expatriate/DSMGN +expatriation/M +expect/GSD +expectancy/M +expectant/Y +expectation/SM +expectorant/SM +expectorate/DSGN +expectoration/M +expedience/IM +expediences +expediencies +expediency/IM +expedient/SMY +expedite/DRSZGNX +expediter/M +expedition/M +expeditionary +expeditious/PY +expeditiousness/M +expel/S +expelled +expelling +expend/GSBD +expendable/SM +expenditure/SM +expense/MS +expensive/IYP +expensiveness/IM +experience/IMD +experiences +experiencing +experiential +experiment/MDRSZG +experimental/Y +experimentation/M +experimenter/M +expert/SPMY +expertise/M +expertness/M +expiate/GNDS +expiation/M +expiatory +expiration/M +expire/DSG +expired/U +expiry/M +explain/ADGS +explainable +explained/U +explanation/MS +explanatory +expletive/MS +explicable/I +explicate/XGNDS +explication/M +explicit/PY +explicitness/M +explode/GDS +exploit/ZGBMDRS +exploitation/M +exploitative +exploited/U +exploiter/M +exploration/MS +exploratory +explore/ZGDRS +explored/U +explorer/M +explosion/SM +explosive/SPMY +explosiveness/M +expo/MS +exponent/MS +exponential/Y +exponentiation +export/BSZGMDR +exportation/M +exporter/M +expose/DSMG +exposed/U +exposition/SM +expositor/SM +expository +expostulate/GNXDS +expostulation/M +exposure/MS +expound/ZGDRS +expounder/M +express/GVMDSY +expressed/U +expressible/I +expression/SM +expressionism/M +expressionist/SM +expressionistic +expressionless/Y +expressive/PY +expressiveness/M +expressway/SM +expropriate/GNXDS +expropriation/M +expropriator/SM +expulsion/MS +expunge/GDS +expurgate/DSGNX +expurgated/U +expurgation/M +exquisite/YP +exquisiteness/M +ext +extant +extemporaneous/PY +extemporaneousness/M +extempore +extemporisation/M +extemporise/GDS +extend/SZGDRB +extender/M +extensible +extension/SM +extensional +extensive/YP +extensiveness/M +extent/SM +extenuate/DSGN +extenuation/M +exterior/MS +exterminate/DSXGN +extermination/M +exterminator/MS +external/MYS +externalisation/MS +externalise/DSG +extinct/GDS +extinction/MS +extinguish/ZGBDRS +extinguishable/I +extinguisher/M +extirpate/GNDS +extirpation/M +extol/S +extolled +extolling +extort/SGD +extortion/MRZ +extortionate/Y +extortioner/M +extortionist/MS +extra/SM +extracellular +extract/MDGS +extraction/SM +extractor/MS +extracurricular +extradite/GNBXDS +extradition/M +extrajudicial +extralegal +extramarital +extramural +extraneous/Y +extraordinaire +extraordinarily +extraordinary +extrapolate/XGNDS +extrapolation/M +extrasensory +extraterrestrial/MS +extraterritorial +extraterritoriality/M +extravagance/MS +extravagant/Y +extravaganza/MS +extravehicular +extreme/PMYTRS +extremeness/M +extremism/M +extremist/MS +extremity/SM +extricable/I +extricate/GNDS +extrication/M +extrinsic +extrinsically +extroversion/M +extrovert/SMD +extrude/GDS +extrusion/SM +extrusive +exuberance/M +exuberant/Y +exudation/M +exude/DSG +exult/SDG +exultant/Y +exultation/M +exurb/SM +exurban +exurbanite/SM +exurbia/M +eye/DSM +eyeball/GMDS +eyebrow/SM +eyedropper/SM +eyeful/SM +eyeglass/MS +eyeing +eyelash/MS +eyeless +eyelet/SM +eyelid/SM +eyeliner/MS +eyeopener/MS +eyeopening +eyepiece/MS +eyesight/M +eyesore/MS +eyestrain/M +eyeteeth +eyetooth/M +eyewash/M +eyewitness/MS +f/CIAVTR +fa/M +fab +fable/DSM +fabric/SM +fabricate/DSGNX +fabrication/M +fabricator/SM +fabulous/Y +facade/SM +face's +face/ACSDG +facecloth/M +facecloths +faceless +facet/SMDG +facetious/YP +facetiousness/M +facial/SMY +facile/Y +facilitate/GNDS +facilitation/M +facilitator/MS +facility/SM +facing/SM +facsimile/DSM +facsimileing +fact/MS +faction/SM +factional +factionalism/M +factious +factitious +factoid/SM +factor's +factor/ASDG +factorial/MS +factorisation +factorise/GDS +factory/SM +factotum/SM +factual/Y +faculty/SM +fad/GSMD +faddish/P +faddist/MS +faddy/P +fade/MS +fading/U +faecal +faeces/M +faerie/SM +faff/DGS +fag/SM +fagged +fagging +faggot/SMG +faience/M +fail/MDGJS +failing/M +faille/M +failure/SM +fain/RT +faint/SMDRYTGP +fainthearted +faintness/M +fair/MRYTGJPS +fairground/MS +fairing/M +fairness/UM +fairway/SM +fairy/SM +fairyland/SM +faith/M +faithful's +faithful/UPY +faithfulness/UM +faithfuls +faithless/PY +faithlessness/M +faiths +fajita/SM +fajitas/M +fake/MZGDRS +faker/M +fakir/SM +falcon/SMRZ +falconer/M +falconry/M +fall/MNGS +fallacious/Y +fallacy/SM +fallback +fallibility/IM +fallible/P +fallibleness/M +fallibly/I +falloff/SM +fallout/M +fallow/SMDG +false/PRYT +falsehood/SM +falseness/M +falsetto/SM +falsie/SM +falsifiable +falsification/M +falsifier/M +falsify/DRSZGNX +falsity/SM +falter/GSJMD +faltering/Y +fame's +fame/D +familial +familiar/MYS +familiarisation/M +familiarise/GDS +familiarity/UM +family/SM +famine/SM +famish/DSG +famous/IY +fan/SM +fanatic/SM +fanatical/Y +fanaticism/M +fanboy/SM +fanciable +fancier/M +fanciful/YP +fancifulness/M +fancily +fanciness/M +fancy/DRSMZTGP +fancywork/M +fandango/MS +fandom +fanfare/SM +fang/MDS +fanlight/SM +fanned +fanning +fanny/SM +fantail/MS +fantasia/SM +fantasise/GDS +fantasist/S +fantastic +fantastical/Y +fantasy/DSMG +fanzine/MS +far +farad/SM +faradize/DG +faraway +farce/SM +farcical/Y +fare/MGDS +farewell/SM +farina/M +farinaceous +farm/MDRZGSJ +farmer/M +farmhand/SM +farmhouse/SM +farming/M +farmland/MS +farmstead/MS +farmyard/MS +faro/M +farrago/M +farragoes +farrier/MS +farrow/SMDG +farseeing +farsighted/P +farsightedness/M +fart/MDGS +farther +farthermost +farthest +farthing/SM +fascia/SM +fascicle/SM +fascinate/GNDSX +fascinating/Y +fascination/M +fascism/M +fascist/MS +fascistic +fashion/ZGBMDRS +fashionable/U +fashionably/U +fashioner/M +fashionista/MS +fast/MDRTGSP +fastback/SM +fastball/SM +fasten/UAGDS +fastener/SM +fastening/MS +fastidious/PY +fastidiousness/M +fastness/MS +fat/GSPMD +fatal/Y +fatalism/M +fatalist/SM +fatalistic +fatalistically +fatality/SM +fatback/M +fate/MS +fateful/YP +fatefulness/M +fathead/MDS +father/SGMDY +fatherhood/M +fatherland/MS +fatherless +fathom/SMDGB +fathomable/U +fathomless +fatigue/MDSG +fatigues/M +fatness/M +fatso/S +fatten/SDG +fatter +fattest +fattiness/M +fatty/RSMTP +fatuity/M +fatuous/YP +fatuousness/M +fatwa/SM +faucet/SM +fault/CSMDG +faultfinder/SM +faultfinding/M +faultily +faultiness/M +faultless/PY +faultlessness/M +faulty/PRT +faun/MS +fauna/SM +fauvism/M +fauvist/SM +faux +fave/S +favour/ESMDG +favourable/U +favourably/U +favourite/MS +favouritism/M +fawn/MDRZGS +fawner/M +fax/GMDS +fay/TSM +fayre +faze/GDS +fazed/U +fealty/M +fear/MDGS +fearful/YP +fearfulness/M +fearless/PY +fearlessness/M +fearsome +feasibility/M +feasible/IU +feasibly +feast/SMDRZG +feaster/M +feat/MS +feather/SGMD +featherbedding/M +featherbrained +featherless +featherweight/MS +feathery/TR +feature/DSMG +featureless +febrile +feckless/PY +fecund +fecundate/GNDS +fecundation/M +fecundity/M +fed/SM +federal/SMY +federalisation/M +federalise/GDS +federalism/M +federalist/MS +federate/FXDSGN +federation/FM +fedora/SM +fee/SM +feeble/RTP +feebleness/M +feebly +feed/MRZGSJ +feedback/M +feedbag/SM +feeder/M +feeding/M +feedlot/SM +feel/MRZGSJ +feeler/M +feelgood +feeling/MY +feet +feign/SDG +feigned/U +feint/SMDG +feisty/TR +feldspar/M +felicitate/GNXDS +felicitation/M +felicitous/Y +felicity/ISM +feline/SM +fell/MDRZTGS +fella/S +fellatio/M +fellow/SM +fellowman/M +fellowmen +fellowship/MS +felon/SM +felonious +felony/SM +felt/MDGS +fem +female/PSM +femaleness/M +feminine/SMY +femininity/M +feminise/DSG +feminism/M +feminist/SM +femoral +femur/SM +fen/SM +fence/CDSMG +fencer/SM +fencing/M +fend/CDRZGS +fender/CM +fenestration/M +fennel/M +feral +ferment/FCMS +fermentation/M +fermented +fermenting +fermium/M +fern/MS +ferny/RT +ferocious/PY +ferociousness/M +ferocity/M +ferret/GSMD +ferric +ferromagnetic +ferrous +ferrule/MS +ferry/DSMG +ferryboat/SM +ferryman/M +ferrymen +fertile/I +fertilisation/M +fertilise/DRSZG +fertilised/U +fertiliser/M +fertility/IM +ferule/SM +fervency/M +fervent/Y +fervid/Y +fervour/M +fess/FKGSD +fest/MRZVS +festal +fester/GMD +festival/SM +festive/YP +festiveness/M +festivity/SM +festoon/GMDS +feta/M +fetal +fetch/DRSZG +fetcher/M +fetching/Y +fete/MGDS +fetid/P +fetidness/M +fetish/MS +fetishism/M +fetishist/SM +fetishistic +fetlock/MS +fetter's +fetter/USGD +fettle/M +fettuccine/M +fetus/MS +feud/MDGS +feudal +feudalism/M +feudalistic +fever/SMD +feverish/YP +feverishness/M +few/TPMR +fewness/M +fey +fez/M +fezzes +ff +fiance/CM +fiancee/MS +fiances +fiasco/M +fiascoes +fiat/MS +fib/SM +fibbed +fibber/SM +fibbing +fibre/SM +fibreboard/M +fibrefill/M +fibreglass/M +fibril/SM +fibrillate/GNDS +fibrillation/M +fibrin/M +fibroid +fibrosis/M +fibrous +fibula/M +fibulae +fibular +fiche/SM +fichu/SM +fickle/RPT +fickleness/M +fiction/MS +fictional/Y +fictionalisation/SM +fictionalise/DSG +fictitious/Y +fictive +ficus/M +fiddle/DRSMZG +fiddler/M +fiddlesticks +fiddly/TR +fidelity/IM +fidget/SGMD +fidgety +fiduciary/SM +fie +fief/MS +fiefdom/MS +field/ISMRZ +fielded +fielder/IM +fielding +fieldsman +fieldsmen +fieldwork/MRZ +fieldworker/M +fiend/SM +fiendish/Y +fierce/PRYT +fierceness/M +fieriness/M +fiery/RPT +fiesta/SM +fife/MZRS +fifer/M +fifteen/MHS +fifteenth/M +fifteenths +fifth/MY +fifths +fiftieth/M +fiftieths +fifty/SMH +fig/SLM +fight/SMRZG +fightback +fighter/IMS +fighting/IM +figment/MS +figuration/FM +figurative/Y +figure's +figure/FEGSD +figurehead/SM +figurine/MS +filament/MS +filamentous +filbert/MS +filch/DSG +file's/KC +file/CAKGDS +filename/S +filer/CSM +filet +filial +filibuster/MDRSZG +filibusterer/M +filigree/DSM +filigreeing +filing's +filings +fill's +fill/AIDGS +filled/U +filler/MS +fillet/MDGS +filling/SM +fillip/MDGS +filly/SM +film/MDGS +filminess/M +filmmaker/SM +filmstrip/MS +filmy/TPR +filo +filter/MDRBSZG +filtered/U +filterer/M +filth/M +filthily +filthiness/M +filthy/RPT +filtrate's +filtrate/IGNDS +filtration/IM +fin/SMR +finagle/DRSZG +finagler/M +final/SMY +finale/MS +finalisation/M +finalise/DSG +finalist/SM +finality/M +finance's +finance/ADSG +financial/Y +financier/MS +financing/M +finch/MS +find/JMRZGS +finder/M +finding/M +findings/M +fine's/F +fine/CAFTGDS +finely +fineness/M +finery/AM +finespun +finesse/DSMG +finger/MDGSJ +fingerboard/SM +fingering/M +fingerling/SM +fingermark/S +fingernail/SM +fingerprint/SGMD +fingertip/MS +finial/MS +finical +finickiness/M +finicky/RPT +finis/MS +finish's +finish/ADSG +finished/U +finisher/MS +finite/IY +fink/MDGS +finned +finny +fir/ZGSJMDRH +fire/MS +firearm/SM +fireball/MS +firebomb/MDSJG +firebox/MS +firebrand/SM +firebreak/SM +firebrick/SM +firebug/SM +firecracker/SM +firedamp/M +firefight/MRSZG +firefighter/M +firefighting/M +firefly/SM +fireguard/S +firehouse/SM +firelight/ZMR +fireman/M +firemen +fireplace/SM +fireplug/MS +firepower/M +fireproof/DSG +firer/M +firescreen/S +fireside/MS +firestorm/MS +firetrap/MS +firetruck/MS +firewall/MS +firewater/M +firewood/M +firework/SM +firm/MDRYPTGS +firmament/SM +firmness/M +firmware/M +first/SMY +firstborn/SM +firsthand +firth/M +firths +fiscal/MYS +fish/MDRSZG +fishbowl/SM +fishcake/SM +fisher/M +fisherman/M +fishermen +fishery/SM +fishhook/SM +fishily +fishiness/M +fishing/M +fishmonger/MS +fishnet/SM +fishpond/MS +fishtail/DGS +fishwife/M +fishwives +fishy/TRP +fissile +fission/BM +fissure/SM +fist/MS +fistfight/MS +fistful/SM +fisticuffs/M +fistula/SM +fistulous/M +fit/KAMS +fitful/YP +fitfulness/M +fitly +fitment/S +fitness/UM +fitted/UA +fitter/MS +fittest +fitting/SMY +five/MZRS +fix/ZGBJMDRS +fixate/GNVDSX +fixation/M +fixative/MS +fixed/Y +fixer/M +fixings/M +fixity/M +fixture/MS +fizz/MDSG +fizzle/DSMG +fizzy/RT +fjord/SM +fl/JDG +flab/M +flabbergast/SGD +flabbily +flabbiness/M +flabby/RPT +flaccid/Y +flaccidity/M +flack/SM +flag/MS +flagella +flagellant/S +flagellate/GNDS +flagellation/M +flagellum/M +flagged +flagging/U +flagman/M +flagmen +flagon/MS +flagpole/SM +flagrance/M +flagrancy/M +flagrant/Y +flagship/SM +flagstaff/MS +flagstone/MS +flail/SGMD +flair/SM +flak/M +flake/DSMG +flakiness/M +flaky/TRP +flamage +flambe/MS +flambeed +flambeing +flamboyance/M +flamboyancy/M +flamboyant/Y +flame/DRSJMZG +flamenco/MS +flameproof/DGS +flamethrower/SM +flamingo/MS +flammability/IM +flammable/SM +flan/MS +flange/MS +flank/SZGMDR +flanker/M +flannel/SM +flannelette/M +flannelled +flannelling +flap/MS +flapjack/MS +flapped +flapper/SM +flapping +flare/DSMG +flareup/SM +flash/ZTGMDRS +flashback/SM +flashbulb/SM +flashcard/SM +flashcube/SM +flasher/M +flashgun/SM +flashily +flashiness/M +flashing/M +flashlight/MS +flashy/RTP +flask/SM +flat/MYPS +flatbed/SM +flatboat/SM +flatbread +flatcar/SM +flatfeet +flatfish/MS +flatfoot/SMD +flatiron/SM +flatland/M +flatlet/S +flatmate/S +flatness/M +flatted +flatten/SDG +flatter/SDRZG +flatterer/M +flattering/Y +flattery/M +flattest +flatting +flattish +flattop/SM +flatulence/M +flatulent +flatus/M +flatware/M +flatworm/SM +flaunt/MDSG +flaunting/Y +flautist/SM +flavor/S +flavorful +flavour/SMDJG +flavoured/U +flavourful +flavouring/M +flavourless +flavoursome +flaw/MDGS +flawless/PY +flawlessness/M +flax/MN +flay/DGS +flea/MS +fleabag/SM +fleabite/S +fleapit/S +fleck/SGMD +fledged/U +fledgling/MS +flee/S +fleece/MZGDRS +fleecer/M +fleeciness/M +fleecy/RTP +fleeing +fleet/STGMDRYP +fleetingly/M +fleetingness/M +fleetness/M +flesh/GMDSY +fleshly/TR +fleshpot/MS +fleshy/RT +flew +flex/AMS +flexed +flexibility/IM +flexible/I +flexibly/I +flexing +flexion +flextime/M +flibbertigibbet/SM +flick/SZGMDR +flicker/GMD +flight/MS +flightiness/M +flightless +flighty/PTR +flimflam/SM +flimflammed +flimflamming +flimsily +flimsiness/M +flimsy/TRP +flinch/GMDS +fling/GM +flint/SM +flintlock/SM +flinty/TR +flip/MS +flippancy/M +flippant/Y +flipped +flipper/MS +flippest +flipping +flippy/S +flirt/SGMD +flirtation/MS +flirtatious/YP +flirtatiousness/M +flirty +flit/MS +flitted +flitting +float/SMDRZG +floater/M +flock/SMDG +flocking/M +floe/MS +flog/S +flogged +flogger/SM +flogging/MS +flood/SMDRG +floodgate/MS +floodlight/MDSG +floodlit +floodplain/MS +floodwater/MS +floor/SMDG +floorboard/MS +flooring/M +floorwalker/SM +floozy/SM +flop/MS +flophouse/MS +flopped +floppily +floppiness/M +flopping +floppy/PRSMT +flora/SM +floral +florescence/IM +florescent/I +floret/SM +florid/PY +floridness/M +florin/SM +florist/SM +floss/MDSG +flossy/RT +flotation/SM +flotilla/MS +flotsam/M +flounce/DSMG +flouncy +flounder/MDSG +flour/SMDG +flourish/GMDS +floury +flout/SMDRZG +flouter/M +flow/MDGS +flowchart/SM +flower's +flower/CSDG +flowerbed/MS +floweriness/M +flowering/S +flowerless +flowerpot/MS +flowery/PTR +flown +flt +flu/M +flub/MS +flubbed +flubbing +fluctuate/GNDSX +fluctuation/M +flue/MS +fluency/M +fluent/Y +fluff/SMDG +fluffiness/M +fluffy/RPT +fluid/SMY +fluidity/M +fluke/SM +fluky/RT +flume/SM +flummox/DSG +flung +flunk/SMDG +flunky/SM +fluoresce/DSG +fluorescence/M +fluorescent +fluoridate/GNDS +fluoridation/M +fluoride/SM +fluorine/M +fluorite/M +fluorocarbon/MS +fluoroscope/SM +fluoroscopic +flurry/GDSM +flush/MDRSTG +fluster/MDSG +flute/DSMG +fluting/M +flutter/MDSG +fluttery +fluvial +flux/IMS +fluxed +fluxing +fly/TGBDSM +flyaway +flyblown +flyby/M +flybys +flycatcher/MS +flyer/SM +flying/M +flyleaf/M +flyleaves +flyover/MS +flypaper/SM +flypast/S +flysheet/S +flyspeck/GMDS +flyswatter/MS +flytrap/S +flyway/SM +flyweight/SM +flywheel/MS +foal/MDGS +foam/MDGS +foaminess/M +foamy/RTP +fob/SM +fobbed +fobbing +focal/Y +focus's +focus/ADSG +focused/U +fodder/SM +foe/SM +fog's +fog/CS +fogbound +fogey/SM +fogged/C +foggily +fogginess/M +fogging/C +foggy/RTP +foghorn/MS +fogyish +foible/SM +foil/MDGS +foist/SDG +fol +fold's +fold/AUSGD +foldaway +folder/SM +foldout/MS +foliage/M +folic +folio/SM +folk/MS +folklore/M +folkloric +folklorist/MS +folksiness/M +folksinger/SM +folksinging/M +folksy/PTR +folktale/MS +folkway/MS +foll +follicle/MS +follow/SDRZGJ +follower/M +following/M +followup/S +folly/SM +foment/SGD +fomentation/M +fond/RYTP +fondant/MS +fondle/DSG +fondness/M +fondue/SM +font/MS +fontanelle/MS +foo +foobar +food/MS +foodie/SM +foodstuff/SM +fool/MDGS +foolery/SM +foolhardily +foolhardiness/M +foolhardy/TPR +foolish/YP +foolishness/M +foolproof +foolscap/M +foot/MDRZGSJ +footage/M +football/MRZGS +footballer/M +footbridge/SM +footfall/MS +foothill/MS +foothold/MS +footie +footing/M +footless +footlights/M +footling/MS +footlocker/SM +footloose +footman/M +footmen +footnote/MGDS +footpath/M +footpaths +footplate/S +footprint/SM +footrace/MS +footrest/MS +footsie/SM +footslogging +footsore +footstep/MS +footstool/SM +footwear/M +footwork/M +footy +fop/SM +foppery/M +foppish/P +foppishness/M +for/H +fora +forage/DRSMZG +forager/M +foray/SMDG +forbade +forbear/SMG +forbearance/M +forbid/S +forbidden +forbidding/YS +forbore +forborne +force/DSMG +forced/U +forceful/PY +forcefulness/M +forceps/M +forcible +forcibly +ford/MDGSB +fore/MS +forearm/GSMD +forebear/MS +forebode/GJDS +foreboding/M +forecast/MRZGS +forecaster/M +forecastle/MS +foreclose/DSG +foreclosure/MS +forecourt/SM +foredoom/DGS +forefather/MS +forefeet +forefinger/SM +forefoot/M +forefront/SM +foregather/GDS +forego/G +foregoes +foregone +foreground/GMDS +forehand/MS +forehead/MS +foreign/ZRP +foreigner/M +foreignness/M +foreknew +foreknow/GS +foreknowledge/M +foreknown +foreleg/SM +forelimb/MS +forelock/MS +foreman/M +foremast/MS +foremen +foremost +forename/MDS +forenoon/MS +forensic/MS +forensically +forensics/M +foreordain/GSD +forepart/MS +foreperson/SM +foreplay/M +forequarter/MS +forerunner/MS +foresail/MS +foresaw +foresee/RSBZ +foreseeable/U +foreseeing +foreseen/U +foreseer/M +foreshadow/GDS +foreshore/S +foreshorten/DSG +foresight/MD +foresightedness/M +foreskin/MS +forest's +forest/ACGDS +forestall/SGD +forestation/ACM +forester/MS +forestland/M +forestry/M +foretaste/DSMG +foretell/GS +forethought/M +foretold +forever/M +forevermore +forewarn/DSG +forewent +forewoman/M +forewomen +foreword/MS +forfeit/GSMD +forfeiture/SM +forgave +forge/DRSMZGVJ +forger/M +forgery/SM +forget/S +forgetful/YP +forgetfulness/M +forgettable/U +forgetting +forging/M +forgivable/U +forgive/BRSZGP +forgiven +forgiveness/M +forgiver/M +forgiving/U +forgo/RZG +forgoer/M +forgoes +forgone +forgot +forgotten/U +fork/MDGS +forkful/SM +forklift/MS +forlorn/Y +form's +form/CAIFDGS +formal/SMY +formaldehyde/M +formalin +formalisation/M +formalise/GDS +formalism/M +formalist/MS +formalities +formality/IM +format/SMV +formation/CFASM +formatted/A +formatting/M +formed/U +former/FIAM +formerly +formfitting +formic +formidable +formidably +formless/PY +formlessness/M +formula/MS +formulae +formulaic +formulate/ADSGNX +formulated/U +formulation/AM +formulator/SM +fornicate/GNDS +fornication/M +fornicator/MS +forsake/GS +forsaken +forsook +forsooth +forswear/SG +forswore +forsworn +forsythia/SM +fort/MS +forte/SM +forthcoming/M +forthright/YP +forthrightness/M +forthwith +fortieth/M +fortieths +fortification/M +fortified/U +fortifier/M +fortify/DRSNZGX +fortissimo +fortitude/M +fortnight/MYS +fortress/MS +fortuitous/YP +fortuitousness/M +fortuity/M +fortunate/UY +fortune/MS +fortuneteller/SM +fortunetelling/M +forty/SMH +forum/SM +forward/MDRYZTGSP +forwarder/M +forwardness/M +forwent +fossa +fossil/SM +fossilisation/M +fossilise/GDS +foster/GSD +fought +foul/MDRYTGSP +foulard/M +foulmouthed +foulness/M +found/FSDG +foundation/SM +founded/U +founder/GMDS +foundling/SM +foundry/SM +fount/SM +fountain/SM +fountainhead/MS +four/MHS +fourfold +fourposter/SM +fourscore/M +foursome/SM +foursquare +fourteen/SMH +fourteenth/M +fourteenths +fourth/MY +fourths +fowl/MDGS +fox/GMDS +foxfire/M +foxglove/SM +foxhole/MS +foxhound/SM +foxhunt/GS +foxily +foxiness/M +foxtrot/MS +foxtrotted +foxtrotting +foxy/RTP +foyer/SM +fps +fr +fracas/MS +frack/SDG +fractal/SM +fraction/ISM +fractional/Y +fractious/YP +fractiousness/M +fracture/MGDS +frag/S +fragile/RT +fragility/M +fragment/GMDS +fragmentary/M +fragmentation/M +fragrance/MS +fragrant/Y +frail/RYTP +frailness/M +frailty/SM +frame/DRSMZG +framed/U +framer/M +framework/SM +franc/SM +franchise's +franchise/EDSG +franchisee/SM +franchiser/SM +francium/M +francophone +frangibility/M +frangible +frank/SMDRYTGP +frankfurter/MS +frankincense/M +frankness/M +frantic +frantically +frappe/SM +frat/MS +fraternal/Y +fraternisation/M +fraternise/ZGDRS +fraterniser/M +fraternity/FSM +fratricidal +fratricide/MS +fraud's +fraud/S +fraudster/S +fraudulence/M +fraudulent/Y +fraught +fray's +fray/CDGS +frazzle/MGDS +freak/SMDG +freakish/YP +freakishness/M +freaky/RT +freckle/DSMG +freckly +free/YTDRS +freebase/MGDS +freebie/SM +freebooter/SM +freeborn +freedman/M +freedmen +freedom/SM +freehand +freehold/ZMRS +freeholder/M +freeing +freelance/DRSMZG +freelancer/M +freeload/SDRZG +freeloader/M +freeman/M +freemasonry +freemen +freephone +freesia/S +freestanding +freestone/SM +freestyle/SM +freethinker/SM +freethinking/M +freeware/M +freeway/MS +freewheel/DGS +freewill +freezable +freeze's +freeze/UAGS +freezer/MS +freezing's +freight/MDRZGS +freighter/M +french +frenetic +frenetically +frenzied/Y +frenzy/DSM +freq +frequencies +frequency/IM +frequent/DRYSZTG +frequented/U +frequenter/M +fresco/M +frescoes +fresh/PNRYXZT +freshen/ZGDR +freshener/M +freshet/MS +freshman/M +freshmen +freshness/M +freshwater/M +fret/MS +fretful/YP +fretfulness/M +fretsaw/MS +fretted +fretting +fretwork/M +friable +friar/SM +friary/SM +fricassee/DSM +fricasseeing +fricative/SM +friction/SM +frictional +fridge/SM +friedcake/MS +friend's +friend/UGSDY +friendless +friendlies +friendliness/UM +friendly's +friendly/UPTR +friendship/MS +frieze/SM +frig/S +frigate/MS +frigged +frigging +fright/SXGMDN +frighten/DG +frightening/Y +frightful/PY +frightfulness/M +frigid/YP +frigidity/M +frigidness/M +frill/SMD +frilly/TR +fringe's +fringe/IDSG +frippery/SM +frisk/SDG +friskily +friskiness/M +frisky/TRP +frisson/S +fritter/MDSG +fritz/M +frivolity/SM +frivolous/PY +frivolousness/M +frizz/MDSYG +frizzle/MGDS +frizzy/TR +fro +frock's +frock/CUS +frog/MS +frogging/S +frogman/M +frogmarch/GDS +frogmen +frogspawn +frolic/SM +frolicked +frolicker/SM +frolicking +frolicsome +from +frond/SM +front's +front/FSDG +frontage/MS +frontal/Y +frontbench/ZRS +frontier/MS +frontiersman/M +frontiersmen +frontierswoman +frontierswomen +frontispiece/MS +frontward/S +frosh/M +frost's +frost/CSDG +frostbit +frostbite/MGS +frostbitten +frostily +frostiness/M +frosting/SM +frosty/TPR +froth/MDG +frothiness/M +froths +frothy/TPR +froufrou/M +froward/P +frowardness/M +frown/SMDG +frowzily +frowziness/M +frowzy/TPR +froze/AU +frozen/UA +fructify/DSG +fructose/M +frugal/Y +frugality/M +fruit/SMDG +fruitcake/MS +fruiterer/S +fruitful/YP +fruitfulness/M +fruitiness/M +fruition/M +fruitless/PY +fruitlessness/M +fruity/TPR +frump/SM +frumpish +frumpy/TR +frustrate/GNXDS +frustrating/Y +frustration/M +frustum/MS +fry/GDSM +fryer/SM +ft +ftp/ZGS +fuchsia/MS +fuck/SMGDRZ! +fucker/M! +fuckhead/S! +fuddle/DSMG +fudge/DSMG +fuehrer/MS +fuel's +fuel/AS +fuelled/A +fuelling/A +fug +fugal +fuggy +fugitive/MS +fugue/SM +fuhrer/SM +fulcrum/MS +fulfil/SL +fulfilled/U +fulfilling/U +fulfilment/M +full/MDRZTGSP +fullback/MS +fuller/M +fullness/M +fully +fulminate/DSXGN +fulmination/M +fulsome/PY +fulsomeness/M +fum/S +fumble/DRSMZG +fumbler/M +fumbling/Y +fume/MGDS +fumigant/MS +fumigate/GNDS +fumigation/M +fumigator/SM +fumy/RT +fun/M +function/MDGS +functional/Y +functionalism +functionalist/S +functionality/S +functionary/SM +fund/AMDGS +fundamental/SMY +fundamentalism/M +fundamentalist/SM +funded/U +funding/M +fundraiser/MS +fundraising +funeral/MS +funerary +funereal/Y +funfair/S +fungal +fungi +fungible/MS +fungicidal +fungicide/MS +fungoid +fungous +fungus/M +funicular/SM +funk/MDGS +funkiness/M +funky/PRT +funnel/MS +funnelled +funnelling +funner +funnest +funnily +funniness/M +funny/TPRSM +funnyman/M +funnymen +fur/SM +furbelow/M +furbish/ADSG +furious/Y +furl's +furl/UDGS +furlong/SM +furlough/GMD +furloughs +furn +furnace/SM +furnish/ADSG +furnished/U +furnishings/M +furniture/M +furore/MS +furred +furrier/M +furriness/M +furring/M +furrow/MDSG +furry/ZTRP +further/SGD +furtherance/M +furthermore +furthermost +furthest +furtive/YP +furtiveness/M +fury/SM +furze/M +fuse's/A +fuse/CAIFGDS +fusee/SM +fuselage/SM +fusibility/M +fusible +fusilier/SM +fusillade/MS +fusion/IFKSM +fuss/MDSG +fussbudget/MS +fussily +fussiness/M +fusspot/SM +fussy/TRP +fustian/M +fustiness/M +fusty/TRP +fut +futile/Y +futility/M +futon/SM +future/MS +futurism/M +futurist/MS +futuristic +futurity/SM +futurologist/MS +futurology/M +futz/DSG +fuzz/MDSG +fuzzball/S +fuzzily +fuzziness/M +fuzzy/PTR +fwd +fwy +g/SNXVB +gab/SM +gabardine/SM +gabbed +gabbiness/M +gabbing +gabble/DSMG +gabby/RTP +gaberdine/SM +gabfest/MS +gable/DSM +gad/S +gadabout/SM +gadded +gadder/SM +gadding +gadfly/SM +gadget/SM +gadgetry/M +gadolinium/M +gaff/MDRZGS +gaffe/SM +gaffer/M +gag/SM +gaga +gagged +gagging +gaggle/SM +gaiety/M +gaily +gain's +gain/ADGS +gainer/SM +gainful/Y +gainsaid +gainsay/ZGRS +gainsayer/M +gait/MRZS +gaiter/M +gal/SM +gala/MS +galactic +galaxy/SM +gale's +gale/AS +galena/M +gall/MDGS +gallant/SMY +gallantry/M +gallbladder/MS +galleon/SM +galleria/MS +gallery/SM +galley/SM +gallimaufry/SM +gallium/M +gallivant/GSD +gallon/SM +gallop/SMDG +gallows/M +gallstone/MS +galoot/SM +galore +galosh/MS +galumph/DG +galumphs +galvanic +galvanisation/M +galvanise/DSG +galvanism/M +galvanometer/MS +gambit/SM +gamble/DRSMZG +gambler/M +gambling/M +gambol/SM +gambolled +gambolling +game/MYTGDRSP +gamecock/MS +gamekeeper/MS +gameness/M +gamesmanship/M +gamester/MS +gamete/SM +gametic +gamin/SM +gamine/SM +gaminess/M +gaming/M +gamma/SM +gammon/M +gammy +gamut/SM +gamy/RTP +gander/SM +gang/MDGS +gangbusters/M +gangland/M +ganglia +gangling +ganglion/M +ganglionic +gangplank/SM +gangrene/DSMG +gangrenous +gangsta/S +gangster/SM +gangway/MS +ganja +gannet/SM +gantlet/MS +gantry/SM +gap/GSMD +gape/MS +gar/SLM +garage/DSMG +garb/MDGS +garbage/M +garbageman +garbanzo/SM +garble/DSG +garcon/SM +garden/SZGMDR +gardener/M +gardenia/MS +gardening/M +garfish/MS +gargantuan +gargle/DSMG +gargoyle/SM +garish/PY +garishness/M +garland/MDGS +garlic/M +garlicky +garment/MS +garner/SGD +garnet/SM +garnish/GLMDS +garnishee/DSM +garnisheeing +garnishment/SM +garret/SM +garrison/MDSG +garrote/MZGDRS +garroter/M +garrulity/M +garrulous/PY +garrulousness/M +garter/SM +gas's +gas/CS +gasbag/SM +gaseous +gash/MDSG +gasholder/S +gasket/SM +gaslight/MS +gasman +gasmen +gasohol/M +gasoline/M +gasometer/S +gasp/MDGS +gassed/C +gasses +gassing/C +gassy/RT +gastric +gastritis/M +gastroenteritis/M +gastrointestinal +gastronome/S +gastronomic +gastronomical/Y +gastronomy/M +gastropod/SM +gasworks/M +gate/MGDS +gateau +gateaux +gatecrash/DRSZG +gatecrasher/M +gatehouse/SM +gatekeeper/MS +gatepost/MS +gateway/MS +gather/SJZGMDR +gatherer/M +gathering/M +gator/SM +gauche/RPYT +gaucheness/M +gaucherie/M +gaucho/SM +gaudily +gaudiness/M +gaudy/RPT +gauge/DSMG +gaunt/RPT +gauntlet/MS +gauntness/M +gauze/M +gauziness/M +gauzy/RPT +gave +gavel/SM +gavotte/MS +gawd +gawk/DGS +gawkily +gawkiness/M +gawky/RPT +gawp/DGS +gay/TSPMR +gayness/M +gaze/MZGDRS +gazebo/SM +gazelle/MS +gazer/M +gazette/MGDS +gazetteer/MS +gazillion/S +gazpacho/M +gazump/DGS +gear/MDGS +gearbox/MS +gearing/M +gearshift/MS +gearwheel/SM +gecko/SM +geddit +gee/DS +geeing +geek/MS +geeky/RT +geese +geezer/MS +geisha/M +gel/SM +gelatin/M +gelatinous +gelcap/M +geld/DJGS +gelding/M +gelid +gelignite/M +gelled +gelling +gem/SM +gemmology/M +gemological +gemologist/MS +gemstone/MS +gendarme/MS +gender/MDS +gene/MS +genealogical/Y +genealogist/MS +genealogy/SM +genera +general/SMY +generalisation/MS +generalise/GDS +generalissimo/MS +generalist/MS +generality/SM +generalship/M +generate/CAVNGSD +generation/ACM +generational +generations +generator/SM +generic/SM +generically +generosity/SM +generous/PY +generousness/M +genes/S +genesis/M +genetic/S +genetically +geneticist/MS +genetics/M +genial/FY +geniality/FM +geniculate +genie/SM +genii +genital/FY +genitalia/M +genitals/M +genitive/MS +genitourinary +genius/MS +genned +genning +genocidal +genocide/MS +genome/MS +genomics +genre/SM +gent/AMS +genteel/YP +genteelness/M +gentian/SM +gentile/SM +gentility/M +gentle/TGDRSP +gentlefolk/MS +gentlefolks/M +gentleman/MY +gentlemanly/U +gentlemen +gentleness/M +gentlewoman/M +gentlewomen +gently +gentrification/M +gentrify/DSGN +gentry/SM +genuflect/DGS +genuflection/MS +genuine/PY +genuineness/M +genus/M +geocache/DSG +geocentric +geocentrically +geochemistry/M +geode/SM +geodesic/SM +geodesy/M +geodetic +geoengineering +geog +geographer/SM +geographic +geographical/Y +geography/SM +geologic +geological/Y +geologist/MS +geology/SM +geom +geomagnetic +geomagnetism/M +geometer +geometric +geometrical/Y +geometry/SM +geophysical +geophysicist/SM +geophysics/M +geopolitical +geopolitics/M +geostationary +geosynchronous +geosyncline/MS +geothermal +geothermic +geranium/MS +gerbil/MS +geriatric/S +geriatrician/S +geriatrics/M +germ/MS +germane +germanium/M +germicidal +germicide/MS +germinal/M +germinate/GNDS +germination/M +gerontological +gerontologist/MS +gerontology/M +gerrymander/GMDS +gerrymandering/M +gerund/MS +gestalt/S +gestapo/MS +gestate/GNDS +gestation/M +gestational +gesticulate/DSGNX +gesticulation/M +gestural +gesture/MGDS +gesundheit +get/S +getaway/SM +getting +getup/M +gewgaw/SM +geyser/SM +ghastliness/M +ghastly/TPR +ghat/MS +ghee +gherkin/MS +ghetto/SM +ghettoise/GDS +ghost/SMDYG +ghostliness/M +ghostly/RTP +ghostwrite/ZGRS +ghostwriter/M +ghostwritten +ghostwrote +ghoul/SM +ghoulish/YP +ghoulishness/M +giant/SM +giantess/MS +gibber/GDS +gibberish/M +gibbet/GMDS +gibbon/MS +gibbous +giblet/SM +giddily +giddiness/M +giddy/RTP +gift/MDGS +gig/SM +gigabit/SM +gigabyte/MS +gigahertz/M +gigantic +gigantically +gigapixel/MS +gigawatt/SM +gigged +gigging +giggle/DRSMZG +giggler/M +giggly/RT +gigolo/SM +gild/MDRZGS +gilder/M +gilding/M +gill/MS +gillie/S +gillion/S +gilt/MS +gimbals/M +gimcrack/SM +gimcrackery/M +gimlet/GSMD +gimme/SM +gimmick/MS +gimmickry/M +gimmicky +gimp/MDGS +gimpy +gin/SM +ginger/GSMDY +gingerbread/M +gingersnap/SM +gingery +gingham/M +gingivitis/M +ginkgo/M +ginkgoes +ginned +ginning +ginormous +ginseng/M +giraffe/MS +gird/DRZGS +girder/M +girdle/DSMG +girl/MS +girlfriend/MS +girlhood/SM +girlish/YP +girlishness/M +girly +giro/S +girt/MDGS +girth/M +girths +gist/M +git/S +gite/S +give/ZGJRS +giveaway/MS +giveback/MS +given/SM +giver/M +gizmo/SM +gizzard/MS +glace/S +glaceed +glaceing +glacial/Y +glaciate/XGNDS +glaciation/M +glacier/MS +glad/MYSP +gladden/GDS +gladder +gladdest +glade/SM +gladiator/SM +gladiatorial +gladiola/SM +gladioli +gladiolus/M +gladness/M +gladsome +glam +glamorisation/M +glamorise/DSG +glamorous/Y +glamour/GMDS +glance/DSMG +gland/SM +glandes +glandular +glans/M +glare/DSMG +glaring/Y +glasnost/M +glass/MDSG +glassblower/MS +glassblowing/M +glassful/SM +glasshouse/S +glassily +glassiness/M +glassware/M +glassy/RTP +glaucoma/M +glaze/DSMG +glazier/SM +glazing/M +gleam/SMDGJ +glean/SDRZGJ +gleaner/M +gleanings/M +glee/M +gleeful/YP +gleefulness/M +glen/MS +glenohumeral +glenoid +glib/YP +glibber +glibbest +glibness/M +glide/DRSMZG +glider/M +gliding/M +glimmer/MDGJS +glimmering/M +glimpse/MGDS +glint/SMDG +glissandi +glissando/M +glisten/MDSG +glister/DSG +glitch/GMDS +glitter/MDSG +glitterati +glittery +glitz/M +glitzy/TR +gloaming/SM +gloat/SMDG +gloating/Y +glob/MDGS +global/Y +globalisation/M +globalise/GDS +globalism/M +globalist/MS +globe/SM +globetrotter/MS +globetrotting +globular +globule/MS +globulin/M +glockenspiel/SM +gloom/M +gloomily +gloominess/M +gloomy/TRP +glop/M +gloppy +glorification/M +glorify/GDSN +glorious/IY +glory/DSMG +gloss/MDSG +glossary/SM +glossily +glossiness/M +glossolalia/M +glossy/PTRSM +glottal +glottis/MS +glove/DSMG +glow/MDRZGS +glower/GMD +glowing/Y +glowworm/MS +glucagon +glucose/M +glue/MGDS +glued/U +gluey +gluier +gluiest +glum/YP +glummer +glummest +glumness/M +glut/MNS +gluten/M +glutenous +glutinous/Y +glutted +glutting +glutton/MS +gluttonous/Y +gluttony/M +glycerine/M +glycerol/M +glycogen/M +glyph +gm +gnarl/SMDG +gnarly/TR +gnash/MDSG +gnat/MS +gnaw/DGS +gneiss/M +gnocchi +gnome/SM +gnomic +gnomish +gnu/SM +go/JMRHZG +goad/MDGS +goal/MS +goalie/SM +goalkeeper/MS +goalkeeping/M +goalless +goalmouth +goalmouths +goalpost/MS +goalscorer/S +goaltender/MS +goat/MS +goatee/SM +goatherd/MS +goatskin/MS +gob/SM +gobbed +gobbet/SM +gobbing +gobble/DRSMZG +gobbledegook/M +gobbler/M +goblet/SM +goblin/SM +gobsmacked +gobstopper/S +god/SM +godawful +godchild/M +godchildren/M +goddammit +goddamn/D +goddaughter/MS +goddess/MS +godfather/SM +godforsaken +godhead/M +godhood/M +godless/PY +godlessness/M +godlike +godliness/UM +godly/URTP +godmother/SM +godparent/SM +godsend/SM +godson/SM +godspeed +goer/M +goes +gofer/SM +goggle/DSMG +goggles/M +going/M +goitre/SM +gold/MNS +goldbrick/ZGSMDR +goldbricker/M +golden/TR +goldenrod/M +goldfield/S +goldfinch/MS +goldfish/MS +goldmine/SM +goldsmith/M +goldsmiths +golf/MDRZGS +golfer/M +golliwog/S +golly/SM +gonad/SM +gonadal +gondola/MS +gondolier/SM +gone/ZR +goner/M +gong/MDGS +gonk/S +gonna +gonorrhoea/M +gonorrhoeal +gonzo +goo/M +goober/SM +good/MYSP +goodbye/MS +goodhearted +goodish +goodly/TR +goodness/M +goodnight +goods/M +goodwill/M +goody/SM +gooey +goof/MDGS +goofball/SM +goofiness/M +goofy/RPT +google/DSMG +googly/S +gooier +gooiest +gook/MS +goon/MS +goop/M +goose/DSMG +gooseberry/SM +goosebumps/M +goosestep/S +goosestepped +goosestepping +gopher/SM +gore/MGDS +gorge's +gorge/EDSG +gorgeous/YP +gorgeousness/M +gorgon/SM +gorilla/MS +gorily +goriness/M +gormandise/DRSZG +gormandiser/M +gormless +gorp/MS +gorse/M +gory/RTP +gosh +goshawk/MS +gosling/SM +gospel/MS +gossamer/M +gossip/MDRZGS +gossiper/M +gossipy +got +gotcha/S +goths +gotta +gotten +gouache/S +gouge/DRSMZG +gouger/M +goulash/MS +gourd/SM +gourde/MS +gourmand/SM +gourmet/SM +gout/M +gouty/TR +gov +govern/DGSBL +governable/U +governance/M +governed/U +governess/MS +government/MS +governmental +governor/SM +governorship/M +govt +gown/MDGS +gr +grab/MS +grabbed +grabber/MS +grabbing +grabby/TR +grace/EDSMG +graceful/EPY +gracefulness/EM +graceless/PY +gracelessness/M +gracious/UY +graciousness/M +grackle/MS +grad/MRZSB +gradate/XGNDS +gradation/CM +grade's +grade/CADSG +graded/U +grader/M +gradient/MS +gradual/PY +gradualism/M +gradualness/M +graduate/XMGNDS +graduation/M +graffiti +graffito/M +graft/SMDRZG +grafter/M +graham/S +grail +grain/ISMD +graininess/M +grainy/PTR +gram/KMS +grammar/MS +grammarian/SM +grammatical/UY +gramophone/MS +grampus/MS +gran/S +granary/SM +grand/SMRYPT +grandam/MS +grandaunt/MS +grandchild/M +grandchildren/M +granddad/SM +granddaddy/SM +granddaughter/SM +grandee/MS +grandeur/M +grandfather/GMDYS +grandiloquence/M +grandiloquent +grandiose/Y +grandiosity/M +grandma/MS +grandmother/MYS +grandnephew/MS +grandness/M +grandniece/MS +grandpa/MS +grandparent/MS +grandson/MS +grandstand/SGMD +granduncle/SM +grange/SM +granite/M +granitic +granny/SM +granola/M +grant/SMDRZG +grantee/MS +granter/M +grantsmanship/M +granular +granularity/M +granulate/GNDS +granulation/M +granule/MS +grape/SM +grapefruit/MS +grapeshot/M +grapevine/SM +graph/MDG +graphic/MS +graphical/Y +graphite/M +graphologist/MS +graphology/M +graphs +grapnel/MS +grapple/MGDS +grasp/SMDBG +grass/MDSG +grasshopper/MS +grassland/MS +grassroots +grassy/TR +grate/DRSMZGJ +grateful/UYP +gratefulness/UM +grater/M +gratification/M +gratify/GNXDS +gratifying/Y +gratin/S +grating/MY +gratis +gratitude/IM +gratuitous/YP +gratuitousness/M +gratuity/SM +gravamen/MS +grave/DRSMYTGP +gravedigger/SM +gravel/SMY +gravelled +gravelling +graven +graveness/M +graveside/MS +gravestone/SM +graveyard/MS +gravid +gravimeter/MS +gravitas +gravitate/GNDS +gravitation/M +gravitational +gravity/M +gravy/SM +graybeard/SM +graze/DRSMZG +grazer/M +grease/DRSMZG +greasepaint/M +greasily +greasiness/M +greasy/PTR +great/SMRYPT +greatcoat/SM +greathearted +greatness/M +grebe/SM +greed/M +greedily +greediness/M +greedy/PTR +green/GPSMDRYT +greenback/MS +greenbelt/MS +greenery/M +greenfield +greenfly/S +greengage/MS +greengrocer/SM +greenhorn/SM +greenhouse/SM +greenish +greenmail/M +greenness/M +greenroom/SM +greensward/M +greenwood/M +greet/ZGJSDR +greeter/M +greeting/M +gregarious/PY +gregariousness/M +gremlin/SM +grenade/SM +grenadier/MS +grenadine/M +grep/S +grepped +grepping +grew/A +grey/PMDRTGS +greyhound/SM +greyish +greyness/M +gribble/S +grid/MS +griddle/SM +griddlecake/SM +gridiron/SM +gridlock/SMD +grief/SM +grievance/MS +grieve/ZGDRS +griever/M +grievous/PY +grievousness/M +griffin/SM +griffon/SM +grill/SGMDJ +grille/MS +grim/DYPG +grimace/DSMG +grime/SM +griminess/M +grimmer +grimmest +grimness/M +grimy/TRP +grin/MS +grind/SZGMRJ +grinder/M +grindstone/MS +gringo/MS +grinned +grinning +grip/MDRSZG +gripe/SM +griper/M +grippe/MZGDR +gripper/M +grisliness/M +grisly/RTP +grist/MY +gristle/M +gristmill/MS +grit/MS +grits/M +gritted +gritter/SM +grittiness/M +gritting +gritty/RTP +grizzle/DSG +grizzly/TRSM +groan/SGMD +groat/SM +grocer/MS +grocery/SM +grog/M +groggily +grogginess/M +groggy/PRT +groin/SM +grok/S +grokked +grokking +grommet/SM +groom/SZGMDR +groomer/M +grooming/M +groomsman/M +groomsmen +groove/MGDS +groovy/RT +grope/DRSMZG +groper/M +grosbeak/MS +grosgrain/M +gross/PTGMDRSY +grossness/M +grotesque/SPMY +grotesqueness/M +grotto/M +grottoes +grotty/TR +grouch/GMDS +grouchily +grouchiness/M +grouchy/RTP +ground/ZGMDRJS +groundbreaking/MS +groundcloth +groundcloths +grounder/M +groundhog/MS +grounding/M +groundless/Y +groundnut/MS +groundsheet/S +groundskeeper/S +groundsman +groundsmen +groundswell/SM +groundwater/M +groundwork/M +group/JSZGMDR +grouper/M +groupie/MS +grouping/M +groupware/M +grouse/MZGDRS +grouser/M +grout/SGMD +grove/SM +grovel/GDS +grovelled +groveller/SM +grovelling +grow/AHSG +grower/MS +growing/I +growl/SZGMDR +growler/M +grown/AI +grownup/MS +growth/AM +growths +groyne/MS +grub/MS +grubbed +grubber/MS +grubbily +grubbiness/M +grubbing +grubby/TRP +grubstake/M +grudge/MGDS +grudging/Y +grue/S +gruel/M +gruelling/SY +gruesome/RYTP +gruesomeness/M +gruff/TPRY +gruffness/M +grumble/DRSMZGJ +grumbler/M +grump/SM +grumpily +grumpiness/M +grumpy/PRT +grunge/MS +grungy/RT +grunion/SM +grunt/SGMD +gt +guacamole/M +guanine/M +guano/M +guarani/MS +guarantee/MDS +guaranteeing +guarantor/MS +guaranty/GDSM +guard/SZGMDR +guarded/Y +guarder/M +guardhouse/SM +guardian/SM +guardianship/M +guardrail/SM +guardroom/SM +guardsman/M +guardsmen +guava/SM +gubernatorial +guerrilla/SM +guess/ZGBMDRS +guesser/M +guesstimate/DSMG +guesswork/M +guest/SGMD +guestbook/SM +guesthouse/S +guestroom/S +guff/M +guffaw/MDGS +guidance/M +guide/DRSMZG +guidebook/SM +guided/U +guideline/SM +guidepost/SM +guider/M +guild/SZMR +guilder/M +guildhall/MS +guile/M +guileful +guileless/YP +guilelessness/M +guillemot/S +guillotine/DSMG +guilt/M +guiltily +guiltiness/M +guiltless +guilty/PRT +guinea/MS +guise/ESM +guitar/MS +guitarist/SM +gulag/SM +gulch/MS +gulden/MS +gulf/MS +gull/MDSG +gullet/MS +gullibility/M +gullible +gully/SM +gulp/MDRSZG +gulper/M +gum/SM +gumball/S +gumbo/SM +gumboil/SM +gumboot/S +gumdrop/SM +gummed +gumming +gummy/TR +gumption/M +gumshoe/MDS +gumshoeing +gun/SM +gunboat/SM +gunfight/MRZS +gunfighter/M +gunfire/M +gunge +gungy +gunk/M +gunky +gunman/M +gunmen +gunmetal/M +gunned +gunnel/MS +gunner/MS +gunnery/M +gunning +gunny/M +gunnysack/MS +gunpoint/M +gunpowder/M +gunrunner/MS +gunrunning/M +gunship/MS +gunshot/MS +gunslinger/SM +gunsmith/M +gunsmiths +gunwale/MS +guppy/SM +gurgle/MGDS +gurney/MS +guru/MS +gush/MDRSZG +gusher/M +gushing/Y +gushy/TR +gusset/MSDG +gussy/DSG +gust/EMDSG +gustatory +gustily +gusto/M +gusty/RT +gut/SM +gutless/P +gutlessness/M +gutsy/RT +gutted +gutter/SMDG +guttersnipe/MS +gutting +guttural/MS +gutty/RT +guv/S +guvnor/S +guy/SGMD +guzzle/DRSZG +guzzler/M +gybe/MGDS +gym/SM +gymkhana/MS +gymnasium/MS +gymnast/MS +gymnastic/S +gymnastically +gymnastics/M +gymnosperm/SM +gymslip/S +gynaecologic +gynaecological +gynaecologist/SM +gynaecology/M +gyp/SM +gypped +gypper/SM +gypping +gypster/SM +gypsum/M +gypsy/SM +gyrate/DSGNX +gyration/M +gyrator/SM +gyrfalcon/MS +gyro/MS +gyroscope/MS +gyroscopic +gyve/MGDS +h'm +h/NRSXZGVJ +ha/SH +haberdasher/SM +haberdashery/SM +habiliment/SM +habit's +habit/ISB +habitability/M +habitat/SM +habitation/MS +habitual/YP +habitualness/M +habituate/GNDS +habituation/M +habitue/SM +hacienda/SM +hack/MDRZGS +hacker/M +hacking/M +hackish +hackle/MS +hackney/SMDG +hacksaw/SM +hacktivist/MS +hackwork/M +had +haddock/SM +hadn't +hadst +haem +haematite/M +haematologic +haematological +haematologist/MS +haematology/M +haemoglobin/M +haemophilia/M +haemophiliac/MS +haemorrhage/MGDS +haemorrhoid/S +hafnium/M +haft/MS +hag/SM +haggard/YP +haggardness/M +haggis/MS +haggish +haggle/MZGDRS +haggler/M +hagiographer/SM +hagiography/SM +hahnium/M +haiku/M +hail/MDGS +hailstone/MS +hailstorm/MS +hair/MDS +hairball/MS +hairband/S +hairbreadth/M +hairbreadths +hairbrush/MS +haircloth/M +haircut/SM +hairdo/MS +hairdresser/SM +hairdressing/M +hairdryer/MS +hairgrip/S +hairiness/M +hairless +hairlike +hairline/SM +hairnet/SM +hairpiece/MS +hairpin/SM +hairsbreadth/M +hairsbreadths +hairsplitter/SM +hairsplitting/M +hairspray/S +hairspring/MS +hairstyle/MS +hairstylist/SM +hairy/TRP +haj +hajj/M +hajjes +hajji/SM +hake/MS +halal/M +halberd/SM +halcyon +hale/ITGDRS +half/M +halfback/SM +halfhearted/PY +halfheartedness/M +halfpence +halfpenny/SM +halftime/MS +halftone/MS +halfway +halfwit/SM +halibut/SM +halite/M +halitosis/M +hall/MS +hallelujah/M +hallelujahs +hallmark/GMDS +halloo/MSG +hallow/DSG +hallowed/U +hallucinate/GNXDS +hallucination/M +hallucinatory +hallucinogen/SM +hallucinogenic/SM +hallway/SM +halo/MDGS +halogen/SM +halon +halt/MDRZGS +halter/GMD +halterneck/S +halting/Y +halve/DSG +halyard/MS +ham/SM +hamburg/SZMR +hamburger/M +hamlet/MS +hammed +hammer/MDRSJZG +hammerer/M +hammerhead/SM +hammerlock/SM +hammertoe/MS +hamming +hammock/SM +hammy/TR +hamper/GMDS +hampered/U +hamster/MS +hamstring/GSM +hamstrung +hand's +hand/UDGS +handbag/SM +handball/MS +handbarrow/SM +handbill/MS +handbook/MS +handbrake/S +handcar/SM +handcart/MS +handclasp/MS +handcraft/SMDG +handcuff/MDGS +handed/P +handful/SM +handgun/SM +handheld/MS +handhold/MS +handicap/MS +handicapped +handicapper/MS +handicapping +handicraft/MS +handily +handiness/M +handiwork/M +handkerchief/MS +handle/MZGDRS +handlebar/MS +handler/M +handmade +handmaid/XMNS +handmaiden/M +handout/SM +handover/S +handpick/GDS +handrail/MS +handsaw/SM +handset/SM +handshake/JMGS +handsome/PYTR +handsomeness/M +handspring/MS +handstand/SM +handwork/M +handwoven +handwriting/M +handwritten +handy/UTR +handyman/M +handymen +hang/MDRJZGS +hangar/MS +hangdog +hanger/M +hanging/M +hangman/M +hangmen +hangnail/MS +hangout/SM +hangover/MS +hangup/MS +hank/MRZS +hanker/GJD +hankering/M +hanky/SM +hansom/MS +hap/MY +haphazard/YP +haphazardness/M +hapless/YP +haplessness/M +haploid/MS +happen/SDGJ +happening/M +happenstance/SM +happily/U +happiness/UM +happy/URTP +harangue/MGDS +harass/LZGDRS +harasser/M +harassment/M +harbinger/SM +harbormaster/S +harbour/GMDS +hard/NRYXTP +hardback/MS +hardball/M +hardboard/M +hardbound +hardcore +hardcover/SM +harden/ZGDR +hardened/U +hardener/M +hardhat/MS +hardheaded/PY +hardheadedness/M +hardhearted/PY +hardheartedness/M +hardihood/M +hardily +hardiness/M +hardliner/MS +hardness/M +hardscrabble +hardship/SM +hardstand/SM +hardtack/M +hardtop/SM +hardware/M +hardwired +hardwood/SM +hardworking +hardy/PTR +hare/MGDS +harebell/MS +harebrained +harelip/SM +harelipped +harem/SM +haricot/S +hark/DGS +harlequin/SM +harlot/SM +harlotry/M +harm/MDGS +harmed/U +harmful/YP +harmfulness/M +harmless/PY +harmlessness/M +harmonic/SM +harmonica/MS +harmonically +harmonies +harmonious/PY +harmoniousness/M +harmonisation/M +harmonise/ZGDRS +harmoniser/M +harmonium/MS +harmony/EM +harness's +harness/UDSG +harp/MDGS +harpist/SM +harpoon/ZGSMDR +harpooner/M +harpsichord/MS +harpsichordist/SM +harpy/SM +harridan/MS +harrier/M +harrow/SMDG +harrumph/GD +harrumphs +harry/DRSZG +harsh/RYTP +harshness/M +hart/MS +harvest/SMDRZG +harvested/U +harvester/M +hash/AMDSG +hashish/M +hashtag/SM +hasn't +hasp/MS +hassle/DSMG +hassock/SM +hast/DNXG +haste/SM +hasten/DG +hastily +hastiness/M +hasty/RTP +hat/ZGSMDR +hatband/S +hatbox/MS +hatch/MDSG +hatchback/MS +hatcheck/SM +hatched/U +hatchery/SM +hatchet/SM +hatching/M +hatchway/SM +hate/MS +hateful/PY +hatefulness/M +hatemonger/MS +hater/M +hatpin/S +hatred/SM +hatstand/S +hatted +hatter/SM +hatting +hauberk/SM +haughtily +haughtiness/M +haughty/PRT +haul/MDRZGS +haulage/M +hauler/M +haulier/S +haunch/MS +haunt/SMDRZG +haunter/M +haunting/Y +hauteur/M +have/MGS +haven't +haven/SM +haversack/SM +havoc/M +haw/GSMD +hawk/MDRZGS +hawker/M +hawkish/P +hawkishness/M +hawser/SM +hawthorn/MS +hay/GSMD +haycock/SM +hayloft/SM +haymaking +haymow/SM +hayrick/MS +hayride/MS +hayseed/MS +haystack/SM +haywire +hazard/SMDG +hazardous/Y +haze/MZGJDRS +hazel/SM +hazelnut/MS +hazer/M +hazily +haziness/M +hazing/M +hazmat +hazy/RTP +hdqrs +he'd +he'll +he/M +head/MDRZGJS +headache/MS +headband/MS +headbanger/S +headbanging +headboard/SM +headbutt/DSG +headcase/S +headcheese +headcount/S +headdress/MS +header/M +headfirst +headgear/M +headhunt/DRSZG +headhunter/M +headhunting/M +headily +headiness/M +heading/M +headlamp/MS +headland/MS +headless +headlight/MS +headline/MZGDRS +headliner/M +headlock/MS +headlong +headman/M +headmaster/SM +headmen +headmistress/MS +headphone/MS +headpiece/MS +headpin/SM +headquarter/SDG +headquarters/M +headrest/MS +headroom/M +headscarf +headscarves +headset/SM +headship/SM +headshrinker/SM +headsman/M +headsmen +headstall/SM +headstand/SM +headstone/SM +headstrong +headteacher/S +headwaiter/SM +headwaters/M +headway/M +headwind/SM +headword/SM +heady/RTP +heal/DRHZGS +healed/U +healer/M +health/M +healthcare +healthful/PY +healthfulness/M +healthily/U +healthiness/UM +healthy/UTRP +heap/MDGS +hear/AHGJS +heard/AU +hearer/SM +hearing/AM +hearken/SGD +hearsay/M +hearse's +hearse/AS +heart/SM +heartache/MS +heartbeat/MS +heartbreak/SMG +heartbroken +heartburn/M +hearten/ESGD +heartfelt +hearth/M +hearthrug/S +hearths +hearthstone/SM +heartily +heartiness/M +heartland/MS +heartless/PY +heartlessness/M +heartrending/Y +heartsick/P +heartsickness/M +heartstrings/M +heartthrob/MS +heartwarming +heartwood/M +hearty/RSMPT +heat's +heat/ADGS +heated/U +heatedly +heater/SM +heath/MNRX +heathen/M +heathendom/M +heathenish +heathenism/M +heather/M +heaths +heating/M +heatproof +heatstroke/M +heatwave/S +heave/DRSMZG +heaven/SMY +heavenly/TR +heavens/M +heavenward/S +heaver/M +heavily +heaviness/M +heavy/RSMTP +heavyhearted +heavyset +heavyweight/MS +heck/M +heckle/DRSMZG +heckler/M +heckling/M +hectare/SM +hectic +hectically +hectogram/SM +hectometre/MS +hector/SMDG +hedge/DRSMZG +hedgehog/MS +hedgehop/S +hedgehopped +hedgehopping +hedger/M +hedgerow/SM +hedonism/M +hedonist/MS +hedonistic +heed/MDGS +heeded/U +heedful/Y +heedless/PY +heedlessness/M +heehaw/SMDG +heel/MDGS +heelless +heft/MDGS +heftily +heftiness/M +hefty/PRT +hegemonic +hegemony/M +hegira/SM +heifer/SM +height/XSMN +heighten/DG +heinous/YP +heinousness/M +heir/MS +heiress/MS +heirloom/SM +heist/SMDG +held +helical +helices +helicopter/SGMD +heliocentric +heliotrope/SM +helipad/S +heliport/MS +helium/M +helix/M +hell/M +hellbent +hellcat/MS +hellebore/M +hellfire +hellhole/MS +hellion/MS +hellish/YP +hellishness/M +hello/SM +helluva +helm/MS +helmet/SMD +helmsman/M +helmsmen +helot/SM +help/MDRZGSJ +helper/M +helpful/UY +helpfulness/M +helping/M +helpless/PY +helplessness/M +helpline/SM +helpmate/SM +helve/SM +hem/SM +heme's +hemisphere/SM +hemispheric +hemispherical +hemline/SM +hemlock/SM +hemmed +hemmer/SM +hemming +hemorrhagic +hemorrhoid's +hemostat/MS +hemp/MN +hemstitch/MDSG +hen/M +hence +henceforth +henceforward +henchman/M +henchmen +henna/SMDG +henpeck/GSD +hep +heparin/M +hepatic +hepatitis/M +hepatocyte/S +hepper +heppest +heptagon/MS +heptagonal +heptathlon/SM +herald/SMDG +heralded/U +heraldic +heraldry/M +herb/MS +herbaceous +herbage/M +herbal/S +herbalist/MS +herbicidal +herbicide/MS +herbivore/SM +herbivorous +herculean +herd/MDRZGS +herder/M +herdsman/M +herdsmen +here/M +hereabout/S +hereafter/SM +hereby +hereditary +heredity/M +herein +hereinafter +hereof +hereon +heresy/SM +heretic/SM +heretical +hereto +heretofore +hereunto +hereupon +herewith +heritable/I +heritage/MS +hermaphrodite/SM +hermaphroditic +hermetic +hermetical/Y +hermit/SM +hermitage/MS +hernia/SM +hernial +herniate/GNDS +herniation/M +hero/M +heroes +heroic/S +heroically +heroics/M +heroin/SM +heroine/SM +heroism/M +heron/SM +herpes/M +herpetologist/SM +herpetology/M +herring/MS +herringbone/M +herself +hertz/M +hesitance/M +hesitancy/M +hesitant/Y +hesitate/DSGNX +hesitating/UY +hesitation/M +hessian +hetero/SM +heterodox +heterodoxy/M +heterogeneity/M +heterogeneous/Y +heterosexual/MYS +heterosexuality/M +heuristic/MS +heuristically +heuristics/M +hew/ZGSDR +hewer/M +hex/GMDS +hexadecimal/S +hexagon/MS +hexagonal +hexagram/SM +hexameter/SM +hey +heyday/SM +hf +hgt +hgwy +hi/SD +hiatus/MS +hibachi/MS +hibernate/GNDS +hibernation/M +hibernator/MS +hibiscus/MS +hiccough/DG +hiccoughs +hiccup/GSMD +hick/MS +hickey/SM +hickory/SM +hid +hidden +hide/MZGJDRS +hideaway/SM +hidebound +hideous/YP +hideousness/M +hideout/MS +hider/M +hiding/M +hie/S +hieing +hierarchic +hierarchical/Y +hierarchy/SM +hieroglyph/M +hieroglyphic/MS +hieroglyphs +high/MRYZTP +highball/SM +highborn +highboy/MS +highbrow/SM +highchair/MS +highfalutin +highhanded/PY +highhandedness/M +highland/MRZS +highlander/M +highlight/SMDRZG +highlighter/M +highness/M +highroad/MS +highs +hightail/DSG +highway/MS +highwayman/M +highwaymen +hijab/SM +hijack/SJZGMDR +hijacker/M +hijacking/M +hike/MZGDRS +hiker/M +hiking/M +hilarious/PY +hilariousness/M +hilarity/M +hill/MS +hillbilly/SM +hilliness/M +hillock/MS +hillside/SM +hilltop/MS +hilly/PRT +hilt/MS +him/S +himself +hind/MRZS +hinder/GD +hindered/U +hindmost +hindquarter/MS +hindrance/SM +hindsight/M +hinge's +hinge/UDSG +hint/MDRZGS +hinter/M +hinterland/SM +hip/SPM +hipbath +hipbaths +hipbone/MS +hiphuggers +hipness/M +hipped +hipper +hippest +hipping +hippo/SM +hippodrome/SM +hippopotamus/MS +hippy/SM +hipster/MS +hiragana +hire's +hire/AGDS +hireling/MS +hirsute/P +hirsuteness/M +hiss/MDSG +hist +histamine/MS +histogram/MS +histologist/SM +histology/M +historian/MS +historic +historical/Y +historicity/M +historiographer/MS +historiography/M +history/SM +histrionic/S +histrionically +histrionics/M +hit/SM +hitch's +hitch/UDSG +hitcher/MS +hitchhike/DRSMZG +hitchhiker/M +hither +hitherto +hitter/SM +hitting +hive/MGDS +hiya +hmm +ho/SMDRYZ +hoagie/MS +hoard/SZGMDRJ +hoarder/M +hoarding/M +hoarfrost/M +hoariness/M +hoarse/YTRP +hoarseness/M +hoary/TRP +hoax/MDRSZG +hoaxer/M +hob/SM +hobbit/S +hobble/MZGDRS +hobbler/M +hobby/SM +hobbyhorse/MS +hobbyist/SM +hobgoblin/MS +hobnail/SGMD +hobnob/S +hobnobbed +hobnobbing +hobo/MS +hock/MDSG +hockey/M +hockshop/MS +hod/SM +hodgepodge/SM +hoe/SM +hoecake/SM +hoedown/SM +hoeing +hoer/M +hog/SM +hogan/SM +hogback/SM +hogged +hogging +hoggish/Y +hogshead/SM +hogtie/DS +hogtying +hogwash/M +hoick/SGD +hoist/SGMD +hoke/GDS +hokey +hokier +hokiest +hokum/M +hold/MRJSZG +holdall/S +holder/M +holding/M +holdout/SM +holdover/SM +holdup/MS +hole/MGDS +holey +holiday/SMDG +holidaymaker/S +holiness/UM +holism +holistic +holistically +holler/MDGS +hollow/MDRYPSTG +hollowness/M +holly/SM +hollyhock/MS +holmium/M +holocaust/SM +hologram/MS +holograph/M +holographic +holographs +holography/M +hols +holster/SMDG +holy/URPT +homage/MS +hombre/MS +homburg/SM +home/MYZGDRS +homebody/SM +homeboy/SM +homecoming/SM +homegrown +homeland/MS +homeless/MP +homelessness/M +homelike +homeliness/M +homely/PRT +homemade +homemaker/SM +homemaking/M +homeopath/M +homeopathic +homeopaths +homeopathy/M +homeostasis/M +homeostatic +homeowner/MS +homepage/MS +homer/GMD +homeroom/MS +homeschooling/M +homesick/P +homesickness/M +homespun/M +homestead/SMDRZG +homesteader/M +homestretch/MS +hometown/MS +homeward/S +homework/MRZG +homewrecker/SM +homey/SMP +homeyness/M +homicidal +homicide/MS +homier +homiest +homiletic +homily/SM +hominid/SM +hominoid/S +hominy/M +homo/MS +homoerotic +homogeneity/M +homogeneous/Y +homogenisation/M +homogenise/DSG +homograph/M +homographs +homologous +homonym/SM +homophobia/M +homophobic +homophone/MS +homosexual/SM +homosexuality/M +hon/SZTGMDR +honcho/MS +hone/MS +honer/M +honest/EYT +honester +honesty/EM +honey/SGMD +honeybee/SM +honeycomb/MDSG +honeydew/SM +honeylocust/M +honeymoon/ZGMDRS +honeymooner/M +honeypot/S +honeysuckle/SM +honk/MDRSZG +honker/M +honky/SM +honorarily +honorarium/MS +honorary +honorific/MS +honour/EMDSBG +honourableness/M +honourably/E +honouree/MS +honourer/MS +hooch/M +hood/MDSG +hoodie/MS +hoodlum/SM +hoodoo/MDSG +hoodwink/DGS +hooey/M +hoof/MDRSZG +hook's +hook/UDSG +hookah/M +hookahs +hooker/MS +hookup/MS +hookworm/MS +hooky/M +hooligan/MS +hooliganism/M +hoop/MDSG +hoopla/M +hooray +hoosegow/SM +hoot/MDRSZG +hootenanny/SM +hooter/M +hoover/DSG +hooves +hop/SGMD +hope/MS +hopeful/PSMY +hopefulness/M +hopeless/YP +hopelessness/M +hopped +hopper/MS +hopping +hopscotch/MDSG +hora/MS +horde/DSMG +horehound/SM +horizon/SM +horizontal/SMY +hormonal +hormone/SM +horn/MDS +hornblende/M +hornet/MS +hornless +hornlike +hornpipe/MS +horny/TR +horologic +horological +horologist/MS +horology/M +horoscope/SM +horrendous/Y +horrible/P +horribleness/M +horribly +horrid/Y +horrific +horrifically +horrify/DSG +horrifying/Y +horror/MS +horse's +horse/UDSG +horseback/M +horsebox/S +horseflesh/M +horsefly/SM +horsehair/M +horsehide/M +horselaugh/M +horselaughs +horseless +horseman/M +horsemanship/M +horsemen +horseplay/M +horsepower/M +horseradish/MS +horseshit/! +horseshoe/DSM +horseshoeing +horsetail/SM +horsetrading +horsewhip/SM +horsewhipped +horsewhipping +horsewoman/M +horsewomen +horsey +horsier +horsiest +hortatory +horticultural +horticulturalist/S +horticulture/M +horticulturist/MS +hosanna/SM +hose/MGDS +hosepipe/S +hosier/MS +hosiery/M +hosp +hospholipase +hospice/MS +hospitable/I +hospitably/I +hospital/SM +hospitalisation/SM +hospitalise/DSG +hospitality/M +host/MDSG +hostage/MS +hostel/ZGMDRS +hosteler/M +hostelry/SM +hostess/MDSG +hostile/MYS +hostilities/M +hostility/SM +hostler/MS +hot/SYP +hotbed/MS +hotblooded +hotbox/MS +hotcake/SM +hotel/SM +hotelier/MS +hotfoot/MDGS +hothead/DSM +hotheaded/YP +hotheadedness/M +hothouse/SM +hotkey/S +hotlink/S +hotness/M +hotplate/SM +hotpot/S +hots/M +hotshot/MS +hotted +hotter +hottest +hottie/S +hotting +hound/SGMD +hour/MYS +hourglass/MS +houri/SM +house's +house/ADSG +houseboat/SM +housebound +houseboy/SM +housebreak/RSZG +housebreaker/M +housebreaking/M +housebroke +housebroken +houseclean/DSG +housecleaning/M +housecoat/SM +housefly/SM +houseful/SM +household/SMRZ +householder/M +househusband/SM +housekeeper/MS +housekeeping/M +houselights/M +housemaid/SM +houseman/M +housemaster/S +housemate/S +housemen +housemistress/S +housemother/SM +houseparent/SM +houseplant/MS +houseproud +houseroom +housetop/SM +housewares/M +housewarming/SM +housewife/MY +housewives +housework/M +housing/MS +hove +hovel/SM +hover/SGD +hovercraft/M +how'd +how're +how/SM +howbeit +howdah/M +howdahs +howdy +however +howitzer/SM +howl/MDRSZG +howler/M +howsoever +hoyden/MS +hoydenish +hp +hr/S +ht +huarache/SM +hub/SM +hubbub/SM +hubby/SM +hubcap/SM +hubris/M +huckleberry/SM +huckster/SGMD +hucksterism/M +huddle/DSMG +hue/DSM +huff/MDSG +huffily +huffiness/M +huffy/PRT +hug/STMR +huge/YP +hugeness/M +hugged +hugging +huh +hula/MS +hulk/MSG +hull/MDRSZG +hullabaloo/SM +huller/M +hum/SM +human/SMRYTP +humane/PY +humaneness/M +humanisation/CM +humanise/CDSG +humaniser/SM +humanism/M +humanist/SM +humanistic +humanitarian/MS +humanitarianism/M +humanities/M +humanity/ISM +humankind/M +humanness/M +humanoid/SM +humble/DRSZTGJP +humbleness/M +humbler/M +humbly +humbug/SM +humbugged +humbugging +humdinger/MS +humdrum/M +humeral +humeri +humerus/M +humid/Y +humidification/M +humidifier/CM +humidify/CZGDRS +humidity/M +humidor/SM +humiliate/DSGNX +humiliating/Y +humiliation/M +humility/M +hummed +hummer/SM +humming +hummingbird/SM +hummock/SM +hummocky +hummus/M +humongous +humoresque +humorist/MS +humorlessly +humorous/PY +humorousness/M +humour/GSMD +humourless/P +humourlessness/M +hump/MDSG +humpback/MDS +humph/DG +humphs +humus/M +hunch/MDSG +hunchback/SMD +hundred/SMH +hundredfold +hundredth/M +hundredths +hundredweight/SM +hung +hunger/SMDG +hungover +hungrily +hungriness/M +hungry/PRT +hunk/MRSZ +hunker/DG +hunky/RT +hunt/MDRSZG +hunter/M +hunting/M +huntress/MS +huntsman/M +huntsmen +hurdle/DRSMZG +hurdler/M +hurdling/M +hurl/MDRSZG +hurler/M +hurling/M +hurrah/GMD +hurrahs +hurricane/MS +hurried/UY +hurry/DSMG +hurt/MSG +hurtful/YP +hurtfulness/M +hurtle/DSG +husband/GMDS +husbandman/M +husbandmen +husbandry/M +hush/MDSG +husk/MDRSZG +husker/M +huskily +huskiness/M +husky/PRSMT +hussar/SM +hussy/SM +hustings/M +hustle/DRSMZG +hustler/M +hut/SM +hutch/MS +huzzah/MDG +huzzahs +hwy +hyacinth/M +hyacinths +hybrid/SM +hybridisation/M +hybridise/DSG +hybridism/M +hydra/SM +hydrangea/SM +hydrant/MS +hydrate's +hydrate/CGNDS +hydration/CM +hydraulic/S +hydraulically +hydraulics/M +hydro/M +hydrocarbon/MS +hydrocephalus/M +hydrodynamic/S +hydrodynamics/M +hydroelectric +hydroelectrically +hydroelectricity/M +hydrofoil/MS +hydrogen/M +hydrogenate/CGDS +hydrogenation/M +hydrogenous +hydrologist/MS +hydrology/M +hydrolyse/DSG +hydrolysis/M +hydrometer/SM +hydrometry/M +hydrophobia/M +hydrophobic +hydrophone/SM +hydroplane/GDSM +hydroponic/S +hydroponically +hydroponics/M +hydrosphere/M +hydrotherapy/M +hydrous +hydroxide/SM +hyena/SM +hygiene/M +hygienic/U +hygienically +hygienist/MS +hygrometer/SM +hying +hymen/SM +hymeneal +hymn/MDSG +hymnal/MS +hymnbook/SM +hype/MGDRS +hyperactive +hyperactivity/M +hyperbola/SM +hyperbole/M +hyperbolic +hypercritical/Y +hyperglycemia/M +hyperinflation +hyperlink/GSMD +hypermarket/S +hypermedia/M +hyperparathyroidism +hypersensitive/P +hypersensitiveness/M +hypersensitivity/SM +hyperspace/S +hypertension/M +hypertensive/SM +hypertext/M +hyperthyroid/M +hyperthyroidism/M +hypertrophy/DSMG +hyperventilate/GNDS +hyperventilation/M +hyphen/MDSG +hyphenate/XDSMGN +hyphenation/M +hypnoses +hypnosis/M +hypnotherapist/S +hypnotherapy/M +hypnotic/SM +hypnotically +hypnotise/GDS +hypnotism/M +hypnotist/MS +hypo/MS +hypoallergenic +hypochondria/M +hypochondriac/SM +hypocrisy/SM +hypocrite/MS +hypocritical/Y +hypodermic/MS +hypoglycemia/M +hypoglycemic/SM +hypotenuse/MS +hypothalami +hypothalamus/M +hypothermia/M +hypotheses +hypothesis/MDSG +hypothesise +hypothetical/Y +hypothyroid/M +hypothyroidism/M +hyssop/M +hysterectomy/SM +hysteresis +hysteria/M +hysteric/SM +hysterical/Y +hysterics/M +i/US +iPad/M +iPhone/M +iPod/M +iTunes/M +iamb/MS +iambi +iambic/SM +iambus/MS +ibex/MS +ibid +ibidem +ibis/MS +ibuprofen/M +ice's +ice/CDSG +iceberg/SM +iceboat/SM +icebound +icebox/MS +icebreaker/SM +icecap/SM +iceman/M +icemen +ichthyologist/MS +ichthyology/M +icicle/SM +icily +iciness/M +icing/SM +icky/RT +icon/MS +iconic +iconoclasm/M +iconoclast/SM +iconoclastic +iconography/M +ictus/M +icy/TPR +id/SMY +idea/MS +ideal/SMY +idealisation/SM +idealise/DSG +idealism/M +idealist/SM +idealistic +idealistically +idem +idempotent +identical/Y +identifiable/U +identification/M +identified/U +identify/ZGNDRSX +identikit/S +identity/SM +ideogram/SM +ideograph/M +ideographs +ideological/Y +ideologist/SM +ideologue/MS +ideology/SM +ides/M +idiocy/SM +idiom/SM +idiomatic/U +idiomatically +idiopathic +idiosyncrasy/SM +idiosyncratic +idiosyncratically +idiot/SM +idiotic +idiotically +idle/MZTGDRSP +idleness/M +idler/M +idol/MS +idolater/SM +idolatress/MS +idolatrous +idolatry/M +idolisation/M +idolise/GDS +idyll/SM +idyllic +idyllically +if/SM +iffiness/M +iffy/RTP +igloo/SM +igneous +ignitable +ignite/AGDS +ignition/MS +ignoble +ignobly +ignominious/Y +ignominy/SM +ignoramus/MS +ignorance/M +ignorant/Y +ignore/GDS +iguana/MS +ii +iii +ilea +ileitis/M +ileum/M +ilia +ilium/M +ilk/SM +ill/SMP +illegal/MYS +illegality/SM +illegibility/M +illegible +illegibly +illegitimacy/M +illegitimate/Y +illiberal/Y +illiberality/M +illicit/YP +illicitness/M +illimitable +illiteracy/M +illiterate/MYS +illness/MS +illogical/Y +illogicality/M +illuminate/GNXDS +illuminating/Y +illumination/M +illumine/DSBG +illus/V +illusion/EMS +illusionist/SM +illusory +illustrate/GNVXDS +illustration/M +illustrative/Y +illustrator/SM +illustrious/PY +illustriousness/M +image/DSMG +imagery/M +imaginable/U +imaginably/U +imaginal +imaginary +imagination/MS +imaginative/UY +imagine/DSBJG +imago/M +imagoes +imam/MS +imbalance/DSM +imbecile/MS +imbecilic +imbecility/SM +imbibe/ZGDRS +imbiber/M +imbrication/M +imbroglio/SM +imbue/DSG +imitable/I +imitate/DSGNVX +imitation/M +imitative/PY +imitativeness/M +imitator/SM +immaculate/PY +immaculateness/M +immanence/M +immanency/M +immanent/Y +immaterial/YP +immateriality/M +immaterialness/M +immature/Y +immaturity/M +immeasurable +immeasurably +immediacies/M +immediacy/SM +immediate/PY +immediateness/M +immemorial/Y +immense/Y +immensity/SM +immerse/XDSGNV +immersible +immersion/M +immigrant/SM +immigrate/DSGN +immigration/M +imminence/M +imminent/Y +immobile +immobilisation/M +immobilise/ZGDRS +immobility/M +immoderate/Y +immodest/Y +immodesty/M +immolate/DSGN +immolation/M +immoral/Y +immorality/SM +immortal/MYS +immortalise/DSG +immortality/M +immovability/M +immovable +immovably +immune +immunisation/MS +immunise/GDS +immunity/M +immunodeficiency/M +immunodeficient +immunoglobulin/S +immunologic +immunological +immunologist/MS +immunology/M +immure/DSG +immutability/M +immutable +immutably +imp/SMR +impact/SMDG +impair/SDGL +impaired/U +impairment/MS +impala/SM +impale/DSGL +impalement/M +impalpable +impalpably +impanel/S +impanelled +impanelling +impart/SDG +impartial/Y +impartiality/M +impassably +impasse/BSMV +impassibility/M +impassible +impassibly +impassioned +impassive/YP +impassiveness/M +impassivity/M +impasto/M +impatience/MS +impatiens/M +impatient/Y +impeach/ZGBLDRS +impeachable/U +impeacher/M +impeachment/SM +impeccability/M +impeccable +impeccably +impecunious/PY +impecuniousness/M +impedance/M +impede/DSG +impeded/U +impediment/SM +impedimenta/M +impel/S +impelled +impeller/MS +impelling +impend/SDG +impenetrability/M +impenetrable +impenetrably +impenitence/M +impenitent/Y +imperative/SMY +imperceptibility/M +imperceptible +imperceptibly +imperceptive +imperf +imperfect/SMYP +imperfection/MS +imperfectness/M +imperial/MYS +imperialism/M +imperialist/SM +imperialistic +imperialistically +imperil/SL +imperilled +imperilling +imperilment/M +imperious/PY +imperiousness/M +imperishable +imperishably +impermanence/M +impermanent/Y +impermeability/M +impermeable +impermeably +impermissible +impersonal/Y +impersonate/GNXDS +impersonation/M +impersonator/SM +impertinence/MS +impertinent/Y +imperturbability/M +imperturbable +imperturbably +impervious/Y +impetigo/M +impetuosity/M +impetuous/YP +impetuousness/M +impetus/MS +impiety/SM +impinge/LDSG +impingement/M +impious/PY +impiousness/M +impish/YP +impishness/M +implacability/M +implacable +implacably +implant/BSGMD +implantation/M +implausibility/SM +implausible +implausibly +implement/GBMDRS +implementable/U +implementation/SM +implemented/U +implicate/DSG +implication/M +implicit/PY +implicitness/M +implode/DSG +implore/DSG +imploring/Y +implosion/MS +implosive +imply/XDSGN +impolite/YP +impoliteness/MS +impolitic +imponderable/MS +import/ZGBSMDR +importance/M +important/Y +importation/MS +importer/M +importunate/Y +importune/GDS +importunity/M +impose/ADSG +imposer/MS +imposing/U +imposingly +imposition/MS +impossibility/SM +impossible/S +impossibly +impost/SM +impostor/SM +imposture/MS +impotence/M +impotency/M +impotent/Y +impound/DGS +impoverish/DSLG +impoverishment/M +impracticability +impracticable +impracticably +impractical/Y +impracticality/M +imprecate/DSXGN +imprecation/M +imprecise/PYN +impreciseness/M +imprecision/M +impregnability/M +impregnable +impregnably +impregnate/GNDS +impregnation/M +impresario/SM +impress/MDSGV +impressed/U +impressibility/M +impressible +impression/BSM +impressionability/M +impressionism/M +impressionist/SM +impressionistic +impressive/PY +impressiveness/M +imprimatur/SM +imprint/MDRZGS +imprinter/M +imprison/SDLG +imprisonment/SM +improbability/SM +improbable +improbably +impromptu/SM +improper/Y +impropriety/SM +improve/GBDSL +improved/U +improvement/MS +improvidence/M +improvident/Y +improvisation/SM +improvisational +improvise/ZGDRS +improviser/M +imprudence/M +imprudent/Y +impudence/M +impudent/Y +impugn/ZGSDR +impugner/M +impulse/MGNVDS +impulsion/M +impulsive/PY +impulsiveness/M +impunity/M +impure/RYT +impurity/SM +imputation/SM +impute/BDSG +in/ASM +inaccuracy/S +inaction/M +inadequacy/S +inadvertence/M +inadvertent/Y +inalienability/M +inalienably +inamorata/SM +inane/RYT +inanimate/PY +inanimateness/M +inanity/SM +inappropriate/Y +inarticulate/Y +inasmuch +inaudible +inaugural/SM +inaugurate/XGNDS +inauguration/M +inboard/MS +inbound +inbox/MS +inbreed/S +inc/TGD +incalculably +incandescence/M +incandescent/Y +incantation/SM +incapacitate/GDS +incarcerate/XDSGN +incarceration/M +incarnadine/DSG +incarnate/AXGNDS +incarnation/AM +incendiary/SM +incense/MGDS +incentive's +incentive/ES +inception/SM +incessant/Y +incest/M +incestuous/PY +incestuousness/M +inch/MDSG +inchoate +inchworm/SM +incidence/SM +incident/SM +incidental/MYS +incinerate/DSGN +incineration/M +incinerator/MS +incipience/M +incipient/Y +incise/XGNVDS +incision/M +incisive/PY +incisiveness/M +incisor/MS +incitement/MS +inciter/MS +incl +inclement +inclination/EM +inclinations +incline's +incline/EGDS +include/GDS +inclusion/MS +inclusive/YP +inclusiveness/M +incognito/MS +incombustible +incommode/GD +incommodious +incommunicado +incompatibility/S +incompetent/MS +incomplete/Y +inconceivability/M +incongruous/PY +incongruousness/M +inconsolably +inconstant/Y +incontestability/M +incontestably +incontinent +incontrovertibly +inconvenience/GD +incorporate/ADSGN +incorporated/U +incorporation/AM +incorporeal +incorrect/Y +incorrigibility/M +incorrigible +incorrigibly +incorruptibly +increasing/Y +increment/SMD +incremental/Y +incrementalism +incrementalist/SM +incriminate/GNDS +incrimination/M +incriminatory +incrustation/SM +incubate/GNDS +incubation/M +incubator/SM +incubus/MS +inculcate/DSGN +inculcation/M +inculpate/DSG +incumbency/SM +incumbent/SM +incunabula +incunabulum/M +incur/SB +incurable/MS +incurably +incurious +incurred +incurring +incursion/MS +ind +indebted/P +indebtedness/M +indeed +indefatigable +indefatigably +indefeasible +indefeasibly +indefinably +indelible +indelibly +indemnification/M +indemnify/GDSXN +indemnity/SM +indentation/MS +indention/M +indenture/DG +independent/MS +indescribably +indestructibly +indeterminably +indeterminacy/M +indeterminate/Y +index/ZGMDRS +indexation/SM +indexer/M +indicate/XDSGNV +indication/M +indicative/SMY +indicator/MS +indict/GDSBL +indictment/SM +indie/S +indigence/M +indigenous +indigent/SMY +indignant/Y +indignation/M +indigo/M +indirect/Y +indiscipline +indiscreet/Y +indiscretion/S +indiscriminate/Y +indispensability/M +indispensable/MS +indispensably +indissolubility +indissolubly +indistinguishably +indite/GDS +indium/M +individual/MYS +individualisation/M +individualise/GDS +individualism/M +individualist/MS +individualistic +individualistically +individuality/M +individuate/DSGN +individuation/M +indivisibly +indoctrinate/GNDS +indoctrination/M +indolence/M +indolent/Y +indomitable +indomitably +indubitable +indubitably +induce/DRSZGL +inducement/SM +inducer/M +induct/DGV +inductance/M +inductee/SM +induction/MS +inductive/Y +indulge/DSG +indulgence/SM +indulgent/Y +industrial/Y +industrialisation/M +industrialise/DSG +industrialism/M +industrialist/SM +industrious/YP +industriousness/M +industry/SM +indwell/SG +inebriate/MGNDS +inebriation/M +inedible +ineffability/M +ineffable +ineffably +inelastic +ineligible/MS +ineligibly +ineluctable +ineluctably +inept/YP +ineptitude/M +ineptness/M +inequality/S +inert/YP +inertia/M +inertial +inertness/M +inescapable +inescapably +inestimably +inevitability/M +inevitable/M +inevitably +inexact/Y +inexhaustibly +inexorability +inexorable +inexorably +inexpedient +inexpert/Y +inexpiable +inexplicably +inexpressibly +inexpressive +inextricably +inf/ZT +infallible +infamy/SM +infancy/M +infant/MS +infanticide/MS +infantile +infantry/SM +infantryman/M +infantrymen +infarct/MS +infarction/M +infatuate/DSXGN +infatuation/M +infect/AESDG +infected/U +infection/ASM +infectious/PY +infectiousness/M +infelicitous +inference/SM +inferential +inferior/MS +inferiority/M +infernal/Y +inferno/MS +inferred +inferring +infest/GDS +infestation/MS +infidel/MS +infidelity/S +infiltrator/SM +infinite/MV +infinitesimal/SMY +infinitival +infinitive/MS +infinitude/M +infinity/SM +infirm +infirmary/SM +infirmity/SM +infix +inflame/DSG +inflammable +inflammation/SM +inflammatory +inflatable/SM +inflate/DSGNB +inflation/EM +inflationary +inflect/SDG +inflection/MS +inflectional +inflexion/SM +inflict/SDGV +infliction/M +inflow/SM +influence/MGDS +influenced/U +influential/Y +influenza/M +info/M +infomercial/SM +inform/Z +informal/Y +informant/SM +information/EM +informational +informative/PY +informativeness/M +informed/U +infotainment/M +infra +infrared/M +infrasonic +infrastructural +infrastructure/SM +infrequence/M +infrequent/Y +infringement/MS +infuriate/GDS +infuriating/Y +infuser/SM +ingenious/PY +ingeniousness/M +ingenue/SM +ingenuity/M +ingenuous/EY +ingenuousness/M +ingest/SDG +ingestion/M +inglenook/SM +ingot/SM +ingrain/G +ingrate/SM +ingratiate/GNDS +ingratiating/Y +ingratiation/M +ingredient/MS +ingress/MS +inguinal +inhabit/DG +inhabitable/U +inhabitant/SM +inhabited/U +inhalant/SM +inhalation/MS +inhalator/MS +inhaler/SM +inharmonious +inhere/DSG +inherent/Y +inherit/EGSD +inheritance/EM +inheritances +inheritor/SM +inhibit/GSD +inhibition/SM +inhibitor/SM +inhibitory +inhuman/Y +inhumane/Y +inimical/Y +inimitably +iniquitous/Y +iniquity/SM +initial/SMY +initialisation +initialise/DSG +initialised/AU +initialism +initialled +initialling +initiate/XMGNVDS +initiated/U +initiation/M +initiative/SM +initiator/MS +initiatory +inject/SDG +injection/SM +injector/SM +injure/DRSZG +injured/U +injurer/M +injurious +ink/MD +inkblot/SM +inkiness/M +inkling/SM +inkstand/SM +inkwell/MS +inky/RTP +inland/M +inline +inmate/SM +inmost +inn/SGMRJ +innards/M +innate/PY +innateness/M +innermost +innersole/SM +innerspring +innervate/GNDS +innervation/M +inning/M +innit +innkeeper/MS +innocence/M +innocent/MYS +innocuous/PY +innocuousness/M +innovate/XDSGNV +innovation/M +innovator/MS +innovatory +innuendo/SM +innumerably +innumerate +inoculate/AGDS +inoculation/MS +inoperative +inordinate/Y +inorganic +inquire/ZGDR +inquirer/M +inquiring/Y +inquiry/SM +inquisition/MS +inquisitional +inquisitive/YP +inquisitiveness/M +inquisitor/SM +inquisitorial +inrush/MS +insane/T +insatiability/M +insatiably +inscribe/ZGDR +inscriber/M +inscription/MS +inscrutability/M +inscrutable/P +inscrutableness/M +inscrutably +inseam/SM +insecticidal +insecticide/MS +insectivore/MS +insectivorous +insecure/Y +inseminate/DSGN +insemination/M +insensate +insensible +insensitive/Y +inseparable/MS +insert's +insert/AGSD +insertion/AM +insertions +insetting +inshore +inside/RSMZ +insider/M +insidious/YP +insidiousness/M +insight/MS +insightful +insignia/M +insinuate/GNVDSX +insinuation/M +insinuator/SM +insipid/PY +insipidity/M +insist/SGD +insistence/M +insistent/Y +insisting/Y +insofar +insole/SM +insolence/M +insolent/Y +insoluble +insolubly +insolvency/S +insomnia/M +insomniac/SM +insomuch +insouciance/M +insouciant +inspect/AGDS +inspection/SM +inspector/MS +inspectorate/MS +inspiration/MS +inspirational +inspired/U +inspiring/U +inst +instability/S +installation/MS +installer/UMS +instalment/MS +instance/GD +instant/MRYS +instantaneous/Y +instantiate/DSG +instar +instate/AGDS +instead +instigate/DSGN +instigation/M +instigator/MS +instil/S +instillation/M +instinct/VMS +instinctive/Y +instinctual +institute/XMZGNDRS +instituter/M +institution/M +institutional/Y +institutionalisation/M +institutionalise/DSG +instr +instruct/SDGV +instructed/U +instruction/MS +instructional +instructive/Y +instructor/MS +instrument/MDSG +instrumental/MYS +instrumentalist/SM +instrumentality/M +instrumentation/M +insubordinate +insufferable +insufferably +insular +insularity/M +insulate/GNDS +insulation/M +insulator/MS +insulin/M +insult/SMDG +insulting/Y +insuperable +insuperably +insurance/SM +insure/DRSZGB +insured/SM +insurer/M +insurgence/SM +insurgency/SM +insurgent/MS +insurmountably +insurrection/SM +insurrectionist/SM +int +intact +intaglio/MS +integer/MS +integral/SMY +integrate/AEVNGSD +integration/EAM +integrator +integrity/M +integument/SM +intellect/MS +intellectual/MYS +intellectualise/GDS +intellectualism/M +intelligence/M +intelligent/Y +intelligentsia/M +intelligibility/M +intelligible/U +intelligibly/U +intended/SM +intense/YTVR +intensification/M +intensifier/M +intensify/DRSZGN +intensity/S +intensive/MYPS +intensiveness/M +intent/SMYP +intention/MS +intentional/UY +intentness/M +inter/ESL +interact/SGVD +interaction/SM +interactive/Y +interactivity +interbred +interbreed/GS +intercede/GDS +intercept/GMDS +interception/MS +interceptor/SM +intercession/SM +intercessor/MS +intercessory +interchange/DSMG +interchangeability +interchangeable +interchangeably +intercity +intercollegiate +intercom/SM +intercommunicate/DSGN +intercommunication/M +interconnect/GDS +interconnection/SM +intercontinental +intercourse/M +intercultural +interdenominational +interdepartmental +interdependence/M +interdependent/Y +interdict/GMDS +interdiction/M +interdisciplinary +interest/ESMD +interested/U +interesting/Y +interface/MGDS +interfaith +interfere/GDS +interference/M +interferon/M +interfile/GDS +intergalactic +intergovernmental +interim/M +interior/SM +interj +interject/GDS +interjection/SM +interlace/GDS +interlard/DGS +interleave/DSG +interleukin/M +interline/GDSJ +interlinear +interlining/M +interlink/DSG +interlock/GMDS +interlocutor/SM +interlocutory +interlope/ZGDRS +interloper/M +interlude/MGDS +intermarriage/SM +intermarry/GDS +intermediary/SM +intermediate/MYS +interment/EM +interments +intermezzi +intermezzo/MS +interminably +intermingle/DSG +intermission/SM +intermittent/Y +intermix/GDS +intern/GDL +internal/SY +internalisation/M +internalise/GDS +international/SMY +internationalisation +internationalise/DSG +internationalism/M +internationalist/SM +internecine +internee/SM +internet +internist/MS +internment/M +internship/MS +interoffice +interpenetrate/DSGN +interpersonal +interplanetary +interplay/M +interpolate/XDSGN +interpolation/M +interpose/GDS +interposition/M +interpret/AGVDS +interpretation/AMS +interpretative +interpreted/U +interpreter/MS +interracial +interred/E +interregnum/SM +interrelate/XDSGN +interrelation/M +interrelationship/MS +interring/E +interrogate/DSGNVX +interrogation/M +interrogative/MYS +interrogator/SM +interrogatory/SM +interrupt/ZGMDRS +interrupter/M +interruption/MS +interscholastic +intersect/GDS +intersection/SM +intersession/SM +intersex +intersperse/GNDS +interspersion/M +interstate/MS +interstellar +interstice/MS +interstitial +intertwine/GDS +interurban +interval/SM +intervene/GDS +intervention/SM +interventionism/M +interventionist/SM +interview/ZGMDRS +interviewee/MS +interviewer/M +intervocalic +interwar +interweave/GS +interwove +interwoven +intestacy/M +intestate +intestinal +intestine/MS +intimacy/SM +intimate/MYGNDSX +intimation/M +intimidate/GNDS +intimidating/Y +intimidation/M +intonation/SM +intoxicant/SM +intoxicate/DSGN +intoxication/M +intracranial +intramural +intramuscular +intranet/MS +intransigence/M +intransigent/MYS +intrastate +intrauterine +intravenous/MSY +intrepid/Y +intrepidity/M +intricacy/SM +intricate/Y +intrigue/DRSMZG +intriguer/M +intriguing/Y +intrinsic +intrinsically +intro/SM +introduce/AGDS +introduction/AM +introductions +introductory +introit/SM +introspect/GVDS +introspection/M +introspective/Y +introversion/M +introvert/MDS +intrude/DRSZG +intruder/M +intrusion/SM +intrusive/YP +intrusiveness/M +intuit/SDGV +intuition/S +intuitive/PY +intuitiveness/M +inundate/XDSGN +inundation/M +inure/DSG +invade/DRSZG +invader/M +invalid/GMDYS +invalidism/M +invaluable +invaluably +invariant +invasion/MS +invasive +invective/M +inveigh/GD +inveighs +inveigle/ZGDRS +inveigler/M +invent/ASGVD +invention/AMS +inventive/PY +inventiveness/M +inventor/MS +inventory/DSMG +inverse/SMY +invert/SMDG +invest/ASDGL +investigate/GNVDSX +investigation/M +investigator/SM +investigatory +investiture/MS +investment/AEM +investor/SM +inveteracy/M +inveterate +invidious/YP +invidiousness/M +invigilate/GNDS +invigilator/S +invigorate/ADSG +invigorating/Y +invigoration/M +invincibility/M +invincibly +inviolability/M +inviolably +inviolate +invitation/SM +invitational/SM +invite/DSMG +invited/U +invitee/SM +inviting/Y +invoke/DSG +involuntariness/M +involuntary/P +involution/M +involve/LDSG +involvement/SM +inward/SY +ioctl +iodide/SM +iodine/M +iodise/DSG +ion/USM +ionic +ionisation/UM +ionise/UDSG +ionizer/MS +ionosphere/MS +ionospheric +iota/MS +ipecac/SM +irascibility/M +irascible +irascibly +irate/YP +irateness/M +ire/M +ireful +irenic +irides +iridescence/M +iridescent/Y +iridium/M +iris/MS +irk/SGD +irksome/YP +irksomeness/M +iron/MDSG +ironclad/MS +ironic +ironical/Y +ironing/M +ironmonger/S +ironmongery +ironstone/M +ironware/M +ironwood/MS +ironwork/M +irony/SM +irradiate/DSGN +irradiation/M +irrational/SMY +irrationality/M +irreclaimable +irreconcilability/M +irreconcilable +irreconcilably +irrecoverable +irrecoverably +irredeemable +irredeemably +irreducible +irreducibly +irrefutable +irrefutably +irregardless +irregular/MYS +irregularity/SM +irrelevance/MS +irrelevancy/MS +irrelevant/Y +irreligion +irreligious +irremediable +irremediably +irremovable +irreparable +irreparably +irreplaceable +irrepressible +irrepressibly +irreproachable +irreproachably +irresistible +irresistibly +irresolute/PYN +irresoluteness/M +irresolution/M +irrespective +irresponsibility/M +irresponsible +irresponsibly +irretrievable +irretrievably +irreverence/M +irreverent/Y +irreversible +irreversibly +irrevocable +irrevocably +irrigable +irrigate/DSGN +irrigation/M +irritability/M +irritable +irritably +irritant/SM +irritate/DSXGN +irritating/Y +irritation/M +irrupt/DGVS +irruption/SM +ischaemia +ischaemic +isinglass/M +isl +island/SZMR +islander/M +isle/MS +islet/SM +ism/CM +isms +isn't +isobar/MS +isobaric +isolate/DSMGN +isolation/M +isolationism/M +isolationist/SM +isomer/MS +isomeric +isomerism/M +isometric/S +isometrically +isometrics/M +isomorphic +isosceles +isotherm/SM +isotope/SM +isotopic +isotropic +issuance/M +issue/ADSMG +issuer/MS +isthmian +isthmus/MS +it'd +it'll +it/USM +ital +italic/SM +italicisation/M +italicise/GDS +italics/M +itch/MDSG +itchiness/M +itchy/RPT +item/MS +itemisation/M +itemise/GDS +iterate/AXGNVDS +iteration/AM +iterator/S +itinerant/SM +itinerary/SM +itself +iv/U +ivory/SM +ivy/DSM +ix +j/F +jab/SM +jabbed +jabber/SMDRZG +jabberer/M +jabbing +jabot/SM +jacaranda/MS +jack/MDGS +jackal/SM +jackass/MS +jackboot/SMD +jackdaw/MS +jacket/SMD +jackhammer/MS +jackknife/MGDS +jackknives +jackpot/MS +jackrabbit/MS +jackstraw/MS +jacquard/M +jade/MGDS +jaded/PY +jadedness/M +jadeite/M +jag/SM +jagged/TPRY +jaggedness/M +jaggies +jaguar/SM +jail/MDRZGS +jailbird/SM +jailbreak/SM +jailer/M +jailhouse/S +jalapeno/MS +jalopy/SM +jalousie/MS +jam/SM +jamb/MS +jambalaya/M +jamboree/MS +jammed +jamming +jammy/RT +jangle/DRSMZG +jangler/M +janitor/SM +janitorial +japan/SM +japanned +japanning +jape/MGDS +jar/SM +jardiniere/SM +jarful/MS +jargon/M +jarred +jarring/Y +jasmine/SM +jasper/M +jato/MS +jaundice/DSMG +jaunt/SGMD +jauntily +jauntiness/M +jaunty/RPT +java/M +javelin/SM +jaw/SGMD +jawbone/DSMG +jawbreaker/MS +jawline/S +jay/SM +jaybird/SM +jaywalk/DRSZG +jaywalker/M +jaywalking/M +jazz/MDSG +jazzy/TR +jct +jealous/Y +jealousy/SM +jean/MS +jeans/M +jeep/MS +jeer/MDSG +jeering/MY +jeez +jejuna +jejune +jejunum/M +jell/DSG +jello/S +jelly/GDSM +jellybean/MS +jellyfish/MS +jellylike +jellyroll/SM +jemmy/GDS +jennet/MS +jenny/SM +jeopardise/GDS +jeopardy/M +jeremiad/MS +jerk/MDSG +jerkily +jerkin/MS +jerkiness/M +jerkwater +jerky/TRMP +jeroboam/S +jerrybuilt +jerrycan/S +jersey/MS +jest/MDRSZG +jester/M +jesting/Y +jet/SM +jetliner/SM +jetport/MS +jetsam/M +jetted +jetting +jettison/MDSG +jetty/SM +jew +jewel/SM +jewelled +jeweller/MS +jewellery/M +jewelling +jewelries +jg +jib/SGMD +jibbed +jibbing +jibe/MS +jiff/MS +jiffy/SM +jig's +jig/AS +jigged/A +jigger's +jigger/ASDG +jigging/A +jiggle/DSMG +jiggly +jigsaw/SMDG +jihad/SM +jihadist/SM +jilt/MDSG +jimmy/DSMG +jimsonweed/M +jingle/DSMG +jingly +jingoism/M +jingoist/SM +jingoistic +jink/DSG +jinn +jinni/M +jinrikisha/SM +jinx/MDSG +jitney/SM +jitterbug/MS +jitterbugged +jitterbugger/M +jitterbugging +jitters/M +jittery/RT +jive/MGDS +job/SM +jobbed +jobber/SM +jobbing +jobholder/MS +jobless/P +joblessness/M +jobshare/S +jobsworth +jobsworths +jock/MS +jockey/SGMD +jockstrap/MS +jocose/PY +jocoseness/M +jocosity/M +jocular/Y +jocularity/M +jocund/Y +jocundity/M +jodhpurs/M +joey/S +jog/SM +jogged +jogger/SM +jogging/M +joggle/DSMG +john/MS +johnny/SM +johnnycake/MS +join's +join/AFDSG +joiner/FMS +joinery/M +joint's +joint/EGSD +jointly/F +joist/SM +jojoba +joke/MZGDRS +joker/M +jokey +jokier +jokiest +joking/Y +jollification/SM +jollily +jolliness/M +jollity/M +jolly/TGPDRSM +jolt/MDRSZG +jolter/M +jonquil/SM +josh/MDRSZG +josher/M +jostle/MGDS +jot/SM +jotted +jotter/MS +jotting/MS +joule/SM +jounce/MGDS +jouncy +journal/MS +journalese/M +journalism/M +journalist/SM +journalistic +journey/ZGMDRS +journeyer/M +journeyman/M +journeymen +journo/S +joust/SZGMDR +jouster/M +jousting/M +jovial/Y +joviality/M +jowl/MS +jowly/TR +joy/SGMD +joyful/YP +joyfuller +joyfullest +joyfulness/M +joyless/PY +joylessness/M +joyous/YP +joyousness/M +joyridden +joyride/RSMZG +joyrider/M +joyriding/M +joyrode +joystick/SM +jr +jubilant/Y +jubilation/M +jubilee/SM +judder/GDS +judge's +judge/ADSG +judgement/SM +judgemental +judgeship/M +judgmentally +judicatory/SM +judicature/M +judicial/Y +judiciary/SM +judicious/IYP +judiciousness/IM +judo/M +jug/SM +jugful/MS +jugged +juggernaut/SM +jugging +juggle/MZGDRS +juggler/M +jugglery/M +jugular/SM +juice/DRSMZG +juicer/M +juicily +juiciness/M +juicy/PTR +jujitsu/M +jujube/MS +jukebox/MS +julep/SM +julienne +jumble/MGDS +jumbo/SM +jump/MDRSZG +jumper/M +jumpily +jumpiness/M +jumpsuit/MS +jumpy/TRP +jun +junco/SM +junction/FISM +juncture/FMS +jungle/MS +junior/MS +juniper/SM +junk/MDRSZG +junker/M +junket/MDSG +junketeer/MS +junkie/MTRS +junkyard/MS +junta/SM +juridic +juridical/Y +jurisdiction/SM +jurisdictional +jurisprudence/M +jurist/MS +juristic +juror/SM +jury/ISM +juryman/M +jurymen +jurywoman/M +jurywomen +just/RYPT +justice/IMS +justifiable/U +justifiably/U +justification/M +justified/U +justify/XGDSN +justness/M +jut/SM +jute/M +jutted +jutting +juvenile/SM +juxtapose/DSG +juxtaposition/SM +k/IFGS +kHz +kW +kWh +kabbalah +kaboom +kabuki/M +kaddish/MS +kaffeeklatch/MS +kaffeeklatsch/MS +kaftan/MS +kahuna/S +kaiser/MS +kale/M +kaleidoscope/MS +kaleidoscopic +kaleidoscopically +kamikaze/MS +kana +kangaroo/MS +kanji +kaolin/M +kapok/M +kappa/SM +kaput +karakul/M +karaoke/MS +karat/SM +karate/M +karma/M +karmic +kart/MS +katakana +katydid/SM +kayak/SMDG +kayaking/M +kayo/MDSG +kazoo/SM +kc +kebab/SM +kedgeree +keel/MDSG +keelhaul/DGS +keen/MDRYSTGP +keenness/M +keep/MRSZG +keeper/M +keeping/M +keepsake/MS +keg/SM +kelp/M +kelvin/SM +ken/SM +kenned +kennel/SM +kennelled +kennelling +kenning +keno/M +kepi/MS +kept +keratin/M +keratitis +kerb/MDSG +kerbside +kerchief/SM +kerfuffle/S +kernel/SM +kerosene/M +kestrel/MS +ketch/MS +ketchup/M +kettle/SM +kettledrum/SM +key/SGMD +keybinding/S +keyboard/ZGSMDR +keyboarder/M +keyboardist/SM +keyhole/MS +keynote/MZGDRS +keynoter/M +keypad/SM +keypunch/ZGMDRS +keypuncher/M +keystone/MS +keystroke/SM +keyword/MS +kg +khaki/SM +khan/MS +kibble/DSMG +kibbutz/MS +kibbutzim +kibitz/ZGDRS +kibitzer/M +kibosh/M +kick/MDRSZG +kickback/SM +kickball/M +kickboxing +kicker/M +kickoff/MS +kickstand/MS +kicky/RT +kid/SM +kidded +kidder/SM +kiddie/SM +kidding +kiddish +kiddo/SM +kidnap/S +kidnapped +kidnapper/MS +kidnapping/MS +kidney/SM +kidskin/M +kielbasa/MS +kielbasi +kike/S +kill/JMDRSZG +killdeer/SM +killer/M +killing/M +killjoy/SM +kiln/MDSG +kilo/MS +kilobyte/SM +kilocycle/SM +kilogram/SM +kilohertz/M +kilolitre/MS +kilometre/MS +kiloton/SM +kilowatt/SM +kilt/MDRS +kilter/M +kimono/MS +kin/M +kinase +kind's +kind/UPRYT +kinda +kindergarten/MRZS +kindergartener/M +kindhearted/PY +kindheartedness/M +kindle/AGDS +kindliness/M +kindling/M +kindly/URT +kindness/UM +kindnesses +kindred/M +kinds +kine/S +kinematic/S +kinematics/M +kinetic/S +kinetically +kinetics/M +kinfolk/SM +kinfolks/M +king/MYS +kingdom/SM +kingfisher/SM +kingly/RT +kingmaker/S +kingpin/SM +kingship/M +kink/MDSG +kinkily +kinkiness/M +kinky/TPR +kinsfolk/M +kinship/M +kinsman/M +kinsmen +kinswoman/M +kinswomen +kiosk/SM +kip/SM +kipped +kipper/MDGS +kipping +kirsch/MS +kismet/M +kiss/MDRSBZG +kisser/M +kissoff/SM +kissogram/S +kit/SGMD +kitchen/SM +kitchenette/MS +kitchenware/M +kite/MS +kith/M +kitsch/M +kitschy +kitted +kitten/MS +kittenish +kitting +kitty/SM +kiwi/MS +kiwifruit/MS +kl +klaxon/S +kleptocracy +kleptomania/M +kleptomaniac/SM +kludge/GDS +kluge/DS +klutz/MS +klutziness/M +klutzy/TRP +km +kn +knack/SZMR +knacker/GD +knapsack/MS +knave/SM +knavery/M +knavish/Y +knead/SZGDR +kneader/M +knee/MDS +kneecap/SM +kneecapped +kneecapping +kneeing +kneel/SG +knell/SGMD +knelt +knew +knicker/S +knickerbockers/M +knickers/M +knickknack/MS +knife/DSMG +knight/MDYSG +knighthood/MS +knightliness/M +knish/MS +knit/MS +knitted +knitter/SM +knitting/M +knitwear/M +knives +knob/MS +knobbly +knobby/TR +knock/SZGMDR +knockabout +knockdown/SM +knocker/M +knockoff/SM +knockout/SM +knockwurst/SM +knoll/SM +knot/MS +knothole/SM +knotted +knotting +knotty/TR +know/SB +knowing/UYS +knowledge/M +knowledgeable +knowledgeably +known +knuckle/DSMG +knuckleduster/S +knucklehead/MS +knurl/SGMD +koala/SM +koan/S +kohl +kohlrabi/M +kohlrabies +kola/MS +kook/MS +kookaburra/SM +kookiness/M +kooky/TPR +kopeck/MS +korma +kosher/DSG +kowtow/GMDS +kph +kraal/SM +kraut/SM! +krill/M +krona/M +krone/RM +kronor +kronur +krypton/M +kt +kuchen/SM +kudos/M +kudzu/SM +kumquat/MS +kvetch/ZGMDRS +kvetcher/M +kw +l/SDXTGJ +la/M +lab/SM +label's +label/AS +labelled/UA +labelling/A +labia +labial/SM +labile +labium/M +laboratory/SM +laborious/PY +laboriousness/M +labour/ZGSMDR +labourer/M +laboursaving +laburnum/MS +labyrinth/M +labyrinthine +labyrinths +lac/M +lace's +lace/UGDS +lacerate/DSGNX +laceration/M +lacewing/SM +lacework/M +lachrymal +lachrymose +lack/MDSG +lackadaisical/Y +lackey/SM +lacklustre +laconic +laconically +lacquer/GMDS +lacrosse/M +lactate/GNDS +lactation/M +lacteal +lactic +lactose/M +lacuna/M +lacunae +lacy/RT +lad/SGMDNJ +ladder/GSMD +laddie/SM +laddish/P +lade/S +laden/U +lading/M +ladle/DSMG +lady/SM +ladybird/SM +ladybug/MS +ladyfinger/MS +ladylike/U +ladylove/MS +ladyship/MS +laetrile/M +lag/SZMR +lager/M +laggard/MYS +lagged +lagging/M +lagniappe/SM +lagoon/SM +laid/IA +lain +lair/MS +laird/SM +laity/M +lake/MS +lakefront/S +lakeside +lam/SM +lama/MS +lamasery/SM +lamb/MDSG +lambada/MS +lambaste/GDS +lambda/SM +lambency/M +lambent/Y +lambkin/SM +lambskin/SM +lambswool +lame/MYZTGDRSP +lamebrain/MDS +lameness/M +lament/BSMDG +lamentably +lamentation/MS +lamina/M +laminae +laminar +laminate/MGNDS +lamination/M +lammed +lamming +lamp/MS +lampblack/M +lamplight/MRZ +lamplighter/M +lampoon/SGMD +lamppost/SM +lamprey/MS +lampshade/SM +lanai/SM +lance/DRSMZG +lancer/M +lancet/SM +land/MDRSGJ +landau/SM +landfall/MS +landfill/MS +landholder/SM +landholding/MS +landing/M +landlady/SM +landless/M +landline/MS +landlocked +landlord/MS +landlubber/MS +landmark/MS +landmass/MS +landmine/S +landowner/MS +landownership +landowning/SM +landscape/MZGDRS +landscaper/M +landslid +landslide/MGS +landslip/S +landsman/M +landsmen +landward/S +lane/MS +language/MS +languid/PY +languidness/M +languish/DSG +languor/SM +languorous/Y +lank/RYTP +lankiness/M +lankness/M +lanky/RTP +lanolin/M +lantern/MS +lanthanum/M +lanyard/MS +lap/SM +laparoscopic +laparoscopy +laparotomy +lapboard/SM +lapdog/SM +lapel/SM +lapidary/SM +lapin/SM +lapped +lappet/SM +lapping +lapse/AKGMSD +laptop/SM +lapwing/MS +larboard/SM +larcenist/SM +larcenous +larceny/SM +larch/MS +lard/MDRSZG +larder/M +lardy/RT +large/RSPMYT +largehearted +largeness/M +largess/M +largish +largo/SM +lariat/SM +lark/MDSG +larkspur/SM +larva/M +larvae +larval +laryngeal +larynges +laryngitis/M +larynx/M +lasagne/MS +lascivious/YP +lasciviousness/M +lase/ZGDRS +laser/M +lash/MDSGJ +lashing/M +lass/MS +lassie/SM +lassitude/M +lasso/SMDG +last/MDYSG +lasting/Y +lat/S +latch's +latch/UDSG +latchkey/SM +late/YTRP +latecomer/MS +latency/M +lateness/M +latent +lateral/MDYSG +latest/M +latex/M +lath/MDRSZG +lathe/M +lather/GMD +lathery +laths +latices +latish +latitude/MS +latitudinal +latitudinarian/MS +latrine/MS +latte/RSM +latter/MY +lattice/MDS +latticework/SM +laud/MDSGB +laudably +laudanum/M +laudatory +laugh/BMDG +laughably +laughing/MY +laughingstock/SM +laughs +laughter/M +launch/AGMDS +launcher/SM +launchpad/SM +launder/DRZGS +launderer/M +launderette/SM +laundress/MS +laundromat/MS +laundry/SM +laundryman/M +laundrymen +laundrywoman/M +laundrywomen +laureate/MS +laureateship/M +laurel/SM +lav/SGD +lava/M +lavage/M +lavaliere/SM +lavatorial +lavatory/SM +lave/S +lavender/SM +lavish/PTGDRSY +lavishness/M +law/SM +lawbreaker/SM +lawbreaking/M +lawful/UPY +lawfulness/UM +lawgiver/MS +lawless/PY +lawlessness/M +lawmaker/MS +lawmaking/M +lawman/M +lawmen +lawn/MS +lawnmower/SM +lawrencium/M +lawsuit/MS +lawyer/SM +lax/TRYP +laxative/MS +laxity/M +laxness/M +lay/AICSGM +layabout/S +layaway/M +layer/CSM +layered +layering/M +layette/MS +layman/M +laymen +layoff/SM +layout/SM +layover/MS +laypeople +layperson/MS +layup/SM +laywoman/M +laywomen +laze/MGDS +lazily +laziness/M +lazy/DRSTGP +lazybones/M +lb/S +lbw +lea/SM +leach/DSG +lead/MDNRSZG +leader/M +leaderless +leadership/SM +leading/M +leaf/MDSG +leafage/M +leafless +leaflet/GMDS +leafstalk/MS +leafy/RT +league/DSMG +leak/MDSG +leakage/MS +leakiness/M +leaky/PRT +lean/MDRSTGJP +leaning/M +leanness/M +leap/MRSZG +leaper/M +leapfrog/MS +leapfrogged +leapfrogging +leapt +learn/AUGDS +learnedly +learner/MS +learning's +learnt/U +lease/ADSMG +leaseback/SM +leasehold/MRSZ +leaseholder/M +leaser/SM +leash's +leash/UDSG +least/M +leastwise +leather/MS +leatherette/M +leatherneck/MS +leathery +leave/DRSMZGJ +leaven/SGMD +leavened/U +leavening/M +leaver/M +leavings/M +lech/MDRSZG +lecher/M +lecherous/PY +lecherousness/M +lechery/M +lecithin/M +lectern/MS +lecture/MZGDRS +lecturer/M +lectureship/SM +ledge/RSMZ +ledger/M +lee/RSMZ +leech/MDSG +leek/MS +leer/MDG +leeriness/M +leery/RPT +leeward/SM +leeway/M +left/MRST +leftism/M +leftist/SM +leftmost +leftover/SM +leftward/S +lefty/SM +leg/SM +legacy/SM +legal/SMY +legalese/M +legalisation/M +legalise/GDS +legalism/MS +legalistic +legalistically +legality/SM +legate/CXMNS +legatee/MS +legation's/AC +legato/SM +legend/SM +legendarily +legendary +legerdemain/M +legged +legginess/M +legging/MS +leggy/RPT +leghorn/MS +legibility/M +legible +legibly +legion/SM +legionary/SM +legionnaire/SM +legislate/DSGNV +legislation/M +legislative/Y +legislator/MS +legislature/SM +legit +legitimacy/M +legitimate/DSYG +legitimatise/GDS +legitimisation/M +legitimise/DSG +legless +legman/M +legmen +legroom/SM +legume/MS +leguminous +legwarmer/S +legwork/M +lei/SM +leisure/DMY +leisureliness/M +leisurewear/M +leitmotif/MS +leitmotiv/MS +lemma/S +lemme/JG +lemming/M +lemon/SM +lemonade/SM +lemongrass +lemony +lemur/SM +lend/RSZG +lender/M +length/MNX +lengthen/GD +lengthily +lengthiness/M +lengths +lengthwise +lengthy/PRT +lenience/M +leniency/M +lenient/Y +lenitive +lens/MS +lent +lentil/MS +lento +leonine +leopard/SM +leopardess/MS +leotard/SM +leper/SM +leprechaun/MS +leprosy/M +leprous +lepta +lepton/MS +lesbian/SM +lesbianism/M +lesion/MS +less/MNRX +lessee/MS +lessen/GD +lesson/MS +lessor/MS +let/ISM +letdown/SM +lethal/Y +lethargic +lethargically +lethargy/M +letter/ZGMDRS +letterbomb/S +letterbox/S +lettered/U +letterer/M +letterhead/MS +lettering/M +letterpress/M +letting/S +lettuce/MS +letup/SM +leucine +leucotomy/S +leukaemia/M +leukemic/SM +leukocyte/MS +levee/SM +level/PSMY +levelheaded/P +levelheadedness/M +levelled +leveller/SM +levelling +levelness/M +lever/SGMD +leverage's +leverage/CDSG +leviathan/MS +levier/M +levitate/DSGN +levitation/M +levity/M +levy/DRSMZG +lewd/RYPT +lewdness/M +lexer/S +lexical +lexicographer/MS +lexicographic +lexicographical +lexicography/M +lexicon/SM +lexis +lg +liabilities +liability/AM +liable/A +liaise/GDS +liaison/MS +liar/MS +lib/M +libation/SM +libber/MS +libel/SM +libelled +libeller/SM +libelling +libellous +liberal/MYPS +liberalisation/MS +liberalise/GDS +liberalism/M +liberality/M +liberalness/M +liberate/CDSGN +liberation/CM +liberator/MS +libertarian/SM +libertine/MS +liberty/SM +libidinal +libidinous +libido/MS +librarian/MS +librarianship +library/SM +librettist/MS +libretto/SM +lice +licence/MS +license/GDS +licensed/U +licensee/MS +licentiate/SM +licentious/YP +licentiousness/M +lichen/MS +licit/Y +lick/MDJSG +licking/M +licorices +lid/SM +lidded +lidless +lido/MS +lie/DSM +lied/MR +lief/RT +liege/SM +lien/MS +lieu/M +lieutenancy/M +lieutenant/MS +life/MZR +lifebelt/S +lifeblood/M +lifeboat/MS +lifebuoy/MS +lifeforms +lifeguard/SM +lifeless/YP +lifelessness/M +lifelike +lifeline/MS +lifelong +lifer/M +lifesaver/SM +lifesaving/M +lifespan/S +lifestyle/SM +lifetime/MS +lifework/MS +lift/MDRSZG +lifter/M +liftoff/SM +ligament/MS +ligate/GNDS +ligation/M +ligature/MGDS +light's/C +light/CASTGD +lighted/U +lighten/SDRZG +lightener/M +lighter/SM +lightface/MD +lightheaded +lighthearted/YP +lightheartedness/M +lighthouse/MS +lighting's +lightly +lightness/M +lightning/MDS +lightproof +lightship/MS +lightweight/SM +ligneous +lignin +lignite/M +lii +like/EMGDST +likeability/M +likeable/P +likeableness/M +likelihood/UM +likelihoods +likeliness/UM +likely/UPRT +liken/SGD +likeness/UM +likenesses +liker +likewise +liking/M +lilac/SM +lilliputian +lilo/S +lilt/MDSG +lily/SM +limb/MS +limber/UDSG +limberness/M +limbless +limbo/SM +lime/MGDS +limeade/SM +limelight/M +limerick/SM +limescale +limestone/M +limey/S +limit's +limit/CSZGDR +limitation/CM +limitations +limited/U +limiter's +limiting/S +limitless/P +limitlessness/M +limn/DSG +limo/MS +limousine/MS +limp/MDRYSPTG +limpet/MS +limpid/YP +limpidity/M +limpidness/M +limpness/M +limy/RT +linage/M +linchpin/SM +linden/MS +line/MZGDRSJ +lineage/MS +lineal/Y +lineament/SM +linear/Y +linearity/M +linebacker/MS +lined/U +linefeed +lineman/M +linemen +linen/SM +linens/M +liner/M +linesman/M +linesmen +lineup/MS +ling/M +linger/ZGJDRS +lingerer/M +lingerie/M +lingering/Y +lingo/M +lingoes +lingual +linguine/M +linguist/SM +linguistic/S +linguistically +linguistics/M +liniment/SM +lining/M +link/MDRSG +linkage/MS +linkman +linkmen +linkup/MS +linnet/MS +lino +linoleum/M +linseed/M +lint's +lint/CDG +lintel/MS +lints +linty/TR +lion/MS +lioness/MS +lionhearted +lionisation/M +lionise/GDS +lip/SM +lipid/SM +liposuction/M +lipped +lippy +lipread/GRS +lipreader/M +lipreading/M +lipstick/MDSG +liq +liquefaction/M +liquefy/DSG +liqueur/SM +liquid/MS +liquidate/XGNDS +liquidation/M +liquidator/MS +liquidise/ZGDRS +liquidiser/M +liquidity/M +liquor/MDGS +liquorice/M +lira/M +lire +lisle/M +lisp/MDRSZG +lisper/M +lissom +list/MDNSJXG +listed/U +listen/BMDRZG +listener/M +listeria +listing/M +listless/YP +listlessness/M +lit/U +litany/SM +litchi/MS +lite +literacy/M +literal/SMYP +literalness/M +literariness/M +literary/P +literate/SMY +literati/M +literature/M +lithe/RPYT +litheness/M +lithesome +lithium/M +lithograph/MDRZG +lithographer/M +lithographic +lithographically +lithographs +lithography/M +lithosphere/SM +litigant/SM +litigate/DSGN +litigation/M +litigator/MS +litigious/P +litigiousness/M +litmus/M +litotes/M +litre/SM +litter/MDRSZG +litterateur/MS +litterbug/MS +litterer/M +little/MTRP +littleness/M +littoral/SM +liturgical/Y +liturgist/SM +liturgy/SM +livability/M +live/YZTGDRSJ +liveable +livelihood/SM +liveliness/M +livelong/S +lively/PRT +liven/SGD +liver's +liveried +liverish +liverwort/MS +liverwurst/M +livery/CSM +liveryman/CM +liverymen/C +livestock/M +liveware +livid/Y +living/M +lix/K +lizard/MS +ll +llama/SM +llano/SM +lo +load's +load/AUGSD +loadable +loader/MS +loading's +loaf/MDRSZG +loafer/M +loam/M +loamy/TR +loan/MDRSZG +loaner/M +loansharking/M +loanword/MS +loath/JZGDRS +loathe +loather/M +loathing/M +loathsome/PY +loathsomeness/M +loaves +lob/SMD +lobar +lobbed +lobber/MS +lobbing +lobby/GDSM +lobbyist/MS +lobe/MS +lobotomise/DSG +lobotomy/SM +lobster/MS +local/SMY +locale/MS +localisation/M +localise/DSG +locality/SM +locate/EAGNDS +location's/A +location/ESM +locator/MS +locavore/SM +loci +lock/MDRSBZG +locker/M +locket/MS +lockjaw/M +lockout/MS +locksmith/M +locksmiths +lockstep/M +lockup/MS +loco/S +locomotion/M +locomotive/MS +locoweed/SM +locum/S +locus/M +locust/SM +locution/MS +lode/MS +lodestar/MS +lodestone/MS +lodge/DRSJMZG +lodger/M +lodging/M +lodgings/M +loft/MDSG +loftily +loftiness/M +lofty/PRT +log/SM +loganberry/SM +logarithm/SM +logarithmic +logbook/SM +loge/MS +logged +logger/SM +loggerhead/SM +loggia/SM +logging/M +logic/M +logical/Y +logicality/M +logician/MS +login/SM +logistic/S +logistical/Y +logistics/M +logjam/SM +logo/MS +logoff/SM +logon/SM +logotype/SM +logout/SM +logrolling/M +logy/RT +loin/MS +loincloth/M +loincloths +loiter/ZGSDR +loiterer/M +loitering/M +lolcat/SM +loll/DSG +lollipop/SM +lollop/GSD +lolly/S +lollygag/S +lollygagged +lollygagging +lone/YZR +loneliness/M +lonely/PTR +loner/M +lonesome/YP +lonesomeness/M +long's +long/KDSTG +longboat/MS +longbow/MS +longer +longevity/M +longhair/MS +longhand/M +longhorn/MS +longhouse/S +longing/MYS +longish +longitude/MS +longitudinal/Y +longshoreman/M +longshoremen +longsighted +longstanding +longtime +longueur/SM +longways +loo +loofah/M +loofahs +look/MDRSZG +lookalike/MS +looker/M +lookout/MS +lookup +loom/MDSG +loon/MS +loonie/M +loony/RSMT +loop/MDSG +loophole/MS +loopy/RT +loos/NRX +loose/UDSTG +loosely +loosen/UGSD +looseness/M +loot/MDRSZG +looter/M +looting/M +lop/S +lope/MGDS +lopped +lopping +lopsided/YP +lopsidedness/M +loquacious/PY +loquaciousness/M +loquacity/M +lord/MDYSG +lordliness/M +lordly/TPR +lordship/SM +lore/M +lorgnette/SM +loris/MS +lorn +lorry/SM +lose/ZGRSJ +loser/M +losing/M +loss/MS +lossless +lost +lot/SM +lotion/SM +lottery/SM +lotto/M +lotus/MS +louche +loud/RYTP +loudhailer/SM +loudmouth/MD +loudmouths +loudness/M +loudspeaker/MS +lough +loughs +lounge/MZGDRS +lounger/M +lour/DSG +louse's +louse/CDSG +lousily +lousiness/M +lousy/TPR +lout/MS +loutish/PY +louvre/MDS +lovableness/M +lovably +love/MYZGDRSB +lovebird/SM +lovechild/M +loved/U +loveless +loveliness/M +lovelorn +lovely/RSMTP +lovemaking/M +lover/M +lovesick +lovey/S +loving/Y +low/SZTGMDRYP +lowborn +lowboy/MS +lowbrow/SM +lowdown/M +lower/GD +lowercase/M +lowermost +lowish +lowland/SZMR +lowlander/M +lowlife/SM +lowliness/M +lowly/TPR +lowness/M +lox/M +loyal/ETY +loyaler +loyalism/M +loyalist/SM +loyalties +loyalty/EM +lozenge/SM +ltd +luau/MS +lubber/MYS +lube/MGDS +lubricant/SM +lubricate/DSGN +lubrication/M +lubricator/MS +lubricious/Y +lubricity/M +lucid/PY +lucidity/M +lucidness/M +luck/MDSG +luckily/U +luckiness/UM +luckless +lucky/UPTR +lucrative/YP +lucrativeness/M +lucre/M +lucubrate/GNDS +lucubration/M +ludicrous/YP +ludicrousness/M +ludo +luff/DSG +lug/SM +luge/S +luggage/M +lugged +lugger/MS +lugging +lughole/S +lugsail/SM +lugubrious/YP +lugubriousness/M +lukewarm/YP +lukewarmness/M +lull/MDSG +lullaby/SM +lulu/S +lumbago/M +lumbar +lumber/MDRZGS +lumberer/M +lumbering/M +lumberjack/SM +lumberman/M +lumbermen +lumberyard/SM +luminary/SM +luminescence/M +luminescent +luminosity/M +luminous/Y +lummox/MS +lump/MDNSG +lumpectomy/S +lumpiness/M +lumpish +lumpy/TRP +lunacy/SM +lunar +lunatic/SM +lunch/GMDS +lunchbox/S +luncheon/SM +luncheonette/SM +lunchroom/MS +lunchtime/MS +lung/MDSG +lunge/SM +lungfish/MS +lungful/S +lunkhead/MS +lupin/SM +lupine +lupus/M +lurch/GMDS +lure/MGDS +lurgy +lurid/PY +luridness/M +lurk/DRSZG +luscious/PY +lusciousness/M +lush/MRSYPT +lushness/M +lust/MDSG +lustful/Y +lustily +lustiness/M +lustre/M +lustreless +lustrous/Y +lusty/PTR +lutanist/SM +lute/MS +lutenist/SM +lutetium/M +luxuriance/M +luxuriant/Y +luxuriate/DSGN +luxuriation/M +luxurious/PY +luxuriousness/M +luxury/SM +lvi +lvii +lxi +lxii +lxiv +lxix +lxvi +lxvii +lyceum/MS +lychgate/S +lye/MG +lying/M +lymph/M +lymphatic/SM +lymphocyte/SM +lymphoid +lymphoma/SM +lynch/JZGDRS +lyncher/M +lynching/M +lynx/MS +lyre/MS +lyrebird/MS +lyric/SM +lyrical/Y +lyricism/M +lyricist/SM +lysosomal +lysosomes +m/KAS +ma'am +ma/SM +mac/SGMD +macabre +macadam/M +macadamia/SM +macadamise/GDS +macaque/MS +macaroni/MS +macaroon/MS +macaw/SM +mace/MS +macerate/DSGN +maceration/M +mach/M +machete/SM +machinate/GNDSX +machination/M +machine/DSMGB +machinery/M +machinist/MS +machismo/M +macho/M +mackerel/SM +mackinaw/SM +mackintosh/MS +macrame/M +macro/SM +macrobiotic/S +macrobiotics/M +macrocosm/SM +macroeconomic/S +macroeconomics/M +macrology/S +macron/MS +macrophages +macroscopic +mad/SMYP +madam/SM +madame/M +madcap/MS +madden/DGS +maddening/Y +madder/MS +maddest +madding +made/AU +mademoiselle/MS +madhouse/SM +madman/M +madmen +madness/M +madras/MS +madrasa/SM +madrasah/M +madrasahs +madrassa/SM +madrigal/SM +madwoman/M +madwomen +maelstrom/SM +maestro/SM +mafia/SM +mafiosi +mafioso/M +mag/SM +magazine/SM +mage/MS +magenta/M +maggot/MS +maggoty +magi/M +magic/SM +magical/Y +magician/SM +magicked +magicking +magisterial/Y +magistracy/M +magistrate/SM +magma/M +magnanimity/M +magnanimous/Y +magnate/SM +magnesia/M +magnesium/M +magnet/MS +magnetic +magnetically +magnetisable +magnetisation/CM +magnetise/CGDS +magnetism/M +magnetite/M +magneto/SM +magnetometer/SM +magnetosphere +magnification/M +magnificence/M +magnificent/Y +magnifier/M +magnify/ZGXDRSN +magniloquence/M +magniloquent +magnitude/SM +magnolia/MS +magnum/MS +magpie/MS +magus/M +maharajah/M +maharajahs +maharani/SM +maharishi/SM +mahatma/SM +mahogany/SM +mahout/MS +maid/MNSX +maiden/MY +maidenhair/M +maidenhead/SM +maidenhood/M +maidservant/SM +mail/JMDRSZG +mailbag/SM +mailbomb/GSD +mailbox/MS +mailer/M +mailing/M +maillot/SM +mailman/M +mailmen +mailshot/S +maim/DSG +main/MYS +mainframe/SM +mainland/MS +mainline/MGDS +mainmast/MS +mainsail/MS +mainspring/MS +mainstay/MS +mainstream/SMDG +maintain/ZGBDRS +maintainability +maintenance/M +maintop/SM +maisonette/MS +maize/SM +majestic +majestically +majesty/SM +majolica/M +major/SGMDY +majordomo/MS +majorette/MS +majoritarian/SM +majoritarianism +majority/SM +make's/A +make/UAGS +makeover/MS +maker/SM +makeshift/SM +makeup/MS +makeweight/S +making/MS +makings/M +malachite/M +maladjusted +maladjustment/M +maladministration +maladroit/PY +maladroitness/M +malady/SM +malaise/M +malamute/MS +malapropism/SM +malaria/M +malarial +malarkey/M +malathion/M +malcontent/MS +male/MPS +malediction/SM +malefaction/M +malefactor/SM +malefic +maleficence/M +maleficent +maleness/M +malevolence/M +malevolent/Y +malfeasance/M +malformation/SM +malformed +malfunction/MDSG +malice/M +malicious/PY +maliciousness/M +malign/DSG +malignancy/SM +malignant/Y +malignity/M +malinger/ZGSDR +malingerer/M +mall/MS +mallard/SM +malleability/M +malleable +mallet/MS +mallow/MS +malnourished +malnutrition/M +malocclusion/M +malodorous +malpractice/SM +malt/MDSG +malted/MS +maltose/M +maltreat/GLDS +maltreatment/M +malty/TR +malware/M +mam/S +mama/MS +mamba/SM +mambo/SGMD +mamma/M +mammal/MS +mammalian/MS +mammary +mammogram/MS +mammography/M +mammon/M +mammoth/M +mammoths +mammy/SM +man's/F +man/USY +manacle/DSMG +manage/ZGDRSL +manageability/M +manageable/U +management/MS +manager/M +manageress/S +managerial +manana/MS +manatee/SM +mandala/SM +mandamus/MS +mandarin/MS +mandate/DSMG +mandatory +mandible/MS +mandibular +mandolin/MS +mandrake/MS +mandrel/SM +mandrill/MS +mane/MDS +manege/M +manful/Y +manga/M +manganese/M +mange/DRMZ +manger/M +mangetout/S +manginess/M +mangle/MZGDRS +mango/M +mangoes +mangrove/MS +mangy/TRP +manhandle/GDS +manhole/SM +manhood/M +manhunt/SM +mania/SM +maniac/MS +maniacal/Y +manic/SM +manically +manicure/MGDS +manicurist/MS +manifest/MDYSG +manifestation/SM +manifesto/SM +manifold/GMDS +manikin/SM +manilla/M +manioc/MS +manipulable +manipulate/XGNVDS +manipulation/M +manipulative/Y +manipulator/MS +mankind/M +manky +manlike +manliness/M +manly/UTR +manna/M +manned/U +mannequin/SM +manner/MDYS +mannerism/SM +mannerly/U +manning/U +mannish/YP +mannishness/M +manoeuvrability/M +manoeuvre/DSMGBJ +manometer/SM +manor/SM +manorial +manpower/M +manque +mansard/MS +manse/SXMN +manservant/M +mansion/M +manslaughter/M +manta/SM +mantel/MS +mantelpiece/SM +mantelshelf +mantelshelves +mantilla/SM +mantis/MS +mantissa/SM +mantle's +mantle/EGDS +mantoes +mantra/MS +manual/MYS +manufacture/DRSMZG +manufacturer/M +manufacturing/M +manumission/SM +manumit/S +manumitted +manumitting +manure/MGDS +manuscript/MS +many/M +map's +map/AS +maple/SM +mapmaker/SM +mapped/A +mapper/MS +mapping/S +mar/S +marabou/MS +marabout/SM +maraca/MS +maraschino/MS +marathon/SMRZ +marathoner/M +maraud/ZGDRS +marauder/M +marble/MGDS +marbleise/GDS +marbling/M +march/ZGMDRS +marcher/M +marchioness/MS +mare/MS +margarine/M +margarita/MS +marge +margin/MS +marginal/YS +marginalia/M +marginalisation +marginalise/GDS +marginalization's +maria/M +mariachi/MS +marigold/MS +marijuana/M +marimba/SM +marina/MS +marinade/DSMG +marinara/M +marinate/DSGN +marination/M +marine/MZRS +mariner/M +marionette/MS +marital/Y +maritime +marjoram/M +mark/AMDSG +markdown/SM +marked/U +markedly +marker/MS +market/MDRZGBS +marketability/M +marketable/U +marketeer/SM +marketer/M +marketing/M +marketplace/SM +marking/SM +markka/M +markkaa +marksman/M +marksmanship/M +marksmen +markup/MS +marl/M +marlin/MS +marlinespike/SM +marmalade/M +marmoreal +marmoset/SM +marmot/MS +maroon/MDGS +marque/MS +marquee/SM +marquess/MS +marquetry/M +marquis/MS +marquise/M +marquisette/M +marred/U +marriage/ASM +marriageability/M +marriageable +married/SM +marring +marrow/MS +marry/AGDS +marsh/MS +marshal/SM +marshalled +marshalling +marshland/SM +marshmallow/SM +marshy/RT +marsupial/MS +mart/MNSX +marten/M +martensite +martial/Y +martian/S +martin/MS +martinet/MS +martingale/MS +martini/SM +martyr/MDGS +martyrdom/M +marvel/MS +marvelled +marvelling +marvellous/Y +marzipan/M +masc +mascara/GMDS +mascot/MS +masculine/SM +masculinity/M +maser/SM +mash/MDRSZG +masher/M +mashup/MS +mask's +mask/UDSG +masker/MS +masochism/M +masochist/SM +masochistic +masochistically +mason/SM +masonic +masonry/M +masque/MS +masquerade/DRSMZG +masquerader/M +mass/MDSGV +massacre/MGDS +massage/DSMG +masseur/SM +masseuse/MS +massif/MS +massive/PY +massiveness/M +mast/MDS +mastectomy/SM +master's +master/ADGS +masterclass/S +masterful/Y +masterly +mastermind/SGMD +masterpiece/MS +masterstroke/SM +masterwork/MS +mastery/M +masthead/MS +mastic/M +masticate/GNDS +mastication/M +mastiff/SM +mastitis +mastodon/SM +mastoid/SM +masturbate/GNDS +masturbation/M +masturbatory +mat/SGMDR +matador/SM +match/AMS +matchbook/SM +matchbox/MS +matched/U +matching +matchless +matchlock/SM +matchmaker/MS +matchmaking/M +matchstick/MS +matchwood/M +mate/MS +material/SMY +materialisation/M +materialise/DSG +materialism/M +materialist/SM +materialistic +materialistically +materiel/M +maternal/Y +maternity/M +matey/S +mathematical/Y +mathematician/SM +mathematics/M +maths +matinee/SM +mating/M +matins/M +matres +matriarch/M +matriarchal +matriarchs +matriarchy/SM +matrices +matricidal +matricide/MS +matriculate/DSGN +matriculation/M +matrimonial +matrimony/M +matrix/M +matron/MYS +matt/S +matte/DRSMZG +matter/MDG +matting/M +mattock/SM +mattress/MS +maturate/GNDS +maturation/M +mature/YTGDRS +maturity/SM +matzo/SMH +matzoh/M +matzohs +matzot +maudlin +maul/MDRSZG +mauler/M +maunder/SDG +mausoleum/SM +mauve/M +maven/SM +maverick/SM +maw/SM +mawkish/PY +mawkishness/M +max/GMDS +maxi/MS +maxilla/M +maxillae +maxillary +maxim/SM +maximal/Y +maximisation/M +maximise/GDS +maximum/SM +may/M +maybe/SM +mayday/MS +mayflower/MS +mayfly/SM +mayhem/M +mayn't +mayo/M +mayonnaise/M +mayor/SM +mayoral +mayoralty/M +mayoress/MS +maypole/SM +mayst +maze/MS +mazurka/MS +mdse +me/DSH +mead/M +meadow/MS +meadowlark/MS +meagerly +meagerness/M +meagre +meal/MS +mealiness/M +mealtime/SM +mealy/TPR +mealybug/SM +mealymouthed +mean/MRYJPSTG +meander/SMDJG +meanderings/M +meanie/M +meaning/M +meaningful/PY +meaningfulness/M +meaningless/YP +meaninglessness/M +meanness/M +meant/U +meantime/M +meanwhile/M +meany/SM +meas +measles/M +measly/RT +measurable +measurably +measure's +measure/ADSG +measured/U +measureless +measurement/MS +meat/MS +meatball/MS +meathead/MS +meatiness/M +meatless +meatloaf/M +meatloaves +meatpacking/M +meaty/TPR +mecca/SM +mechanic/MS +mechanical/Y +mechanics/M +mechanisation/M +mechanise/DSG +mechanism/SM +mechanistic +mechanistically +medal/SM +medallion/SM +medallist/SM +meddle/ZGDRS +meddler/M +meddlesome +media/SM +medial/AY +median/MS +mediate/DSGN +mediated/U +mediation/AM +mediator/MS +medic/SM +medicaid/M +medical/SMY +medicament/M +medicare/M +medicate/GNXDS +medication/M +medicinal/Y +medicine/MS +medico/MS +medieval +medievalist/MS +mediocre +mediocrity/SM +meditate/DSGNVX +meditation/M +meditative/Y +medium/MS +medley/MS +medulla/SM +medusa +medusae +meed/M +meek/RYPT +meekness/M +meerschaum/SM +meet/MJSG +meeting/M +meetinghouse/SM +meetup/MS +meg/S +mega +megabit/SM +megabucks/M +megabyte/MS +megachurch/MS +megacycle/SM +megadeath/M +megadeaths +megahertz/M +megalith/M +megalithic +megaliths +megalomania/M +megalomaniac/SM +megalopolis/MS +megaphone/DSMG +megapixel/SM +megastar/S +megaton/SM +megawatt/MS +meh +meiosis/M +meiotic +melamine/M +melancholia/M +melancholic/S +melancholy/M +melange/MS +melanin/M +melanoma/SM +meld/MDSG +melee/SM +meliorate/GNVDS +melioration/M +mellifluous/PY +mellifluousness/M +mellow/PTGDRYS +mellowness/M +melodic +melodically +melodious/YP +melodiousness/M +melodrama/MS +melodramatic/S +melodramatically +melodramatics/M +melody/SM +melon/SM +melt's +melt/ADSG +meltdown/SM +member's +member/EAS +membership/SM +membrane/SM +membranous +meme/MS +memento/MS +memo/MS +memoir/MS +memorabilia/M +memorability/M +memorable/U +memorably +memorandum/MS +memorial/SM +memorialise/DSG +memorisation/M +memorise/DSG +memory/SM +memsahib/S +men/M +menace/MGDS +menacing/Y +menage/MS +menagerie/MS +mend/MDRSZG +mendacious/Y +mendacity/M +mendelevium/M +mender/M +mendicancy/M +mendicant/SM +mending/M +menfolk/MS +menfolks/M +menhaden/M +menial/MYS +meningeal +meninges +meningitis/M +meninx/M +menisci +meniscus/M +menopausal +menopause/M +menorah/M +menorahs +mensch/MS +menservants +menses/M +menstrual +menstruate/GNDS +menstruation/M +mensurable +mensuration/M +menswear/M +mental/Y +mentalist/SM +mentality/SM +menthol/M +mentholated +mention/GSMD +mentioned/U +mentor/MDSG +menu/MS +mercantile +mercantilism/M +mercenary/SM +mercer/MS +mercerise/GDS +merchandise/MZGDRS +merchandiser/M +merchandising/M +merchant/MBS +merchantman/M +merchantmen +merciful/UY +merciless/PY +mercilessness/M +mercurial/Y +mercuric +mercury/M +mercy/SM +mere/MYTS +meretricious/YP +meretriciousness/M +merganser/MS +merge/DRSZG +merger/M +meridian/MS +meringue/MS +merino/MS +merit/CSM +merited/U +meriting +meritocracy/SM +meritocratic +meritorious/PY +meritoriousness/M +mermaid/SM +merman/M +mermen +merrily +merriment/M +merriness/M +merry/TRP +merrymaker/MS +merrymaking/M +mesa/MS +mescal/MS +mescalin +mescaline/M +mesdames +mesdemoiselles +mesh/MDSG +mesmeric +mesmerise/ZGDRS +mesmeriser/M +mesmerism/M +mesomorph/M +mesomorphs +meson/SM +mesosphere/SM +mesquite/SM +mess/MDSG +message/MGDS +messeigneurs +messenger/SM +messiah/M +messiahs +messianic +messieurs +messily +messiness/M +messmate/SM +messy/PTR +mestizo/MS +met +meta +metabolic +metabolically +metabolise/DSG +metabolism/SM +metabolite/SM +metacarpal/SM +metacarpi +metacarpus/M +metadata +metal/SM +metalanguage/MS +metalled +metallic +metallurgic +metallurgical +metallurgist/MS +metallurgy/M +metalwork/MRZG +metalworker/M +metalworking/M +metamorphic +metamorphism/M +metamorphose/GDS +metamorphosis/M +metaphor/MS +metaphoric +metaphorical/Y +metaphysical/Y +metaphysics/M +metastases +metastasis/MDSG +metastasise +metastatic +metatarsal/MS +metatarsi +metatarsus/M +metatheses +metathesis/M +mete/MZGDRS +metempsychoses +metempsychosis/M +meteor/MS +meteoric +meteorically +meteorite/SM +meteoroid/SM +meteorologic +meteorological +meteorologist/SM +meteorology/M +meter/GMD +methadone/M +methamphetamine/M +methane/M +methanol/M +methinks +method/MS +methodical/YP +methodicalness/M +methodological/Y +methodology/SM +methotrexate +methought +meths +methyl/M +meticulous/YP +meticulousness/M +metier/MS +metre/SM +metric/S +metrical/Y +metricate/GNDS +metrication/M +metricise/GDS +metro/SM +metronome/MS +metropolis/MS +metropolitan +mettle/M +mettlesome +mew/SGMD +mewl/DSG +mews/M +mezzanine/MS +mezzo/SM +mfg +mfr/S +mg +mgr +mi/MNX +miaow/SGMD +miasma/MS +mic/S +mica/M +mice +mick/S +mickey/MS +micro/SM +microaggression/SM +microbe/MS +microbial +microbiological +microbiologist/MS +microbiology/M +microbrewery/SM +microchip/MS +microcircuit/SM +microcode +microcomputer/MS +microcosm/MS +microcosmic +microdot/SM +microeconomics/M +microelectronic/S +microelectronics/M +microfiber/MS +microfiche/M +microfilm/GMDS +microfloppies +microgroove/SM +microlight/MS +microloan/MS +micromanage/GDSL +micromanagement/M +micrometeorite/SM +micrometer/MS +micrometre/MS +micron/MS +microorganism/MS +microphone/SM +microprocessor/MS +microscope/SM +microscopic +microscopical/Y +microscopy/M +microsecond/MS +microsurgery/M +microwave/DSMGB +microwaveable +mid +midair/M +midday/M +midden/MS +middle/MGS +middlebrow/SM +middleman/M +middlemen +middlemost +middleweight/MS +middy/SM +midfield/RZ +midge/SM +midget/MS +midi/MS +midland/MS +midlife/M +midmost +midnight/M +midpoint/MS +midrib/MS +midriff/MS +midsection/MS +midshipman/M +midshipmen +midships +midsize +midst/M +midstream/M +midsummer/M +midterm/MS +midtown/M +midway/MS +midweek/MS +midwife/MGDS +midwifery/SM +midwinter/M +midwives +midyear/MS +mien/M +miff/DSG +might've +might/M +mightily +mightiness/M +mightn't +mighty/TRP +mignonette/SM +migraine/MS +migrant/MS +migrate/AGDS +migration/SM +migratory +mikado/MS +mike/MGDS +mil/SZMR +milady/SM +milch +mild/MRYTP +mildew/SMDG +mildness/M +mile/MS +mileage/SM +milepost/MS +miler/M +milestone/MS +milf/MS +milieu/SM +militancy/M +militant/MYS +militarily +militarisation/CM +militarise/CDSG +militarism/M +militarist/SM +militaristic +military/M +militate/GDS +militia/SM +militiaman/M +militiamen +milk/MDRSZG +milker/M +milkiness/M +milkmaid/MS +milkman/M +milkmen +milkshake/SM +milksop/MS +milkweed/SM +milky/RTP +mill/MDRSZGJ +millage/M +millennia +millennial/M +millennium/MS +miller/M +millet/M +milliard/MS +millibar/MS +milligram/MS +millilitre/MS +millimetre/MS +milliner/MS +millinery/M +milling/M +million/HSM +millionaire/SM +millionairess/S +millionth/M +millionths +millipede/SM +millisecond/SM +millpond/SM +millrace/SM +millstone/SM +millstream/MS +millwright/SM +milometer/S +milquetoast/SM +milt/MDSG +mime/MGDS +mimeograph/GMD +mimeographs +mimetic +mimic/SM +mimicked +mimicker/SM +mimicking +mimicry/SM +mimosa/SM +min +minaret/MS +minatory +mince/DRSMZG +mincemeat/M +mincer/M +mind's +mind/ADRSZG +mindbogglingly +minded/P +mindful/YP +mindfulness/M +mindless/YP +mindlessness/M +mindset/MS +mine/MZGNDRSX +minefield/SM +miner/M +mineral/MS +mineralogical +mineralogist/MS +mineralogy/M +minestrone/M +minesweeper/SM +mingle/DSG +mingy +mini/MS +miniature/MS +miniaturisation/M +miniaturise/GDS +miniaturist/MS +minibar/S +minibike/SM +minibus/MS +minicab/S +minicam/MS +minicomputer/SM +minifloppies +minim/SM +minimal/Y +minimalism/M +minimalist/MS +minimisation/M +minimise/DSG +minimum/MS +mining/M +minion/M +miniseries/M +miniskirt/MS +minister/SGMD +ministerial +ministrant/MS +ministration/MS +ministry/SM +minivan/MS +mink/MS +minnesinger/MS +minnow/SM +minor/SMDG +minority/SM +minoxidil/M +minster/MS +minstrel/SM +minstrelsy/M +mint/MDRSZG +mintage/M +minter/M +minty/RT +minuend/MS +minuet/SM +minus/MS +minuscule/MS +minute/PDRSMYTG +minuteman/M +minutemen +minuteness/M +minutia/M +minutiae +minx/MS +miracle/MS +miraculous/Y +mirage/SM +mire/MGDS +mirror/GSMD +mirth/M +mirthful/PY +mirthfulness/M +mirthless/Y +miry/RT +misaddress/DSG +misadventure/MS +misaligned +misalignment/M +misalliance/MS +misanthrope/SM +misanthropic +misanthropically +misanthropist/MS +misanthropy/M +misapplication/M +misapply/DSGNX +misapprehend/GSD +misapprehension/MS +misappropriate/XDSGN +misappropriation/M +misbegotten +misbehave/GDS +misbehaviour/M +misc +miscalculate/DSXGN +miscalculation/M +miscall/DSG +miscarriage/MS +miscarry/GDS +miscast/SG +miscegenation/M +miscellaneous/Y +miscellany/SM +mischance/SM +mischief/M +mischievous/YP +mischievousness/M +miscibility/M +miscible +miscommunication/S +misconceive/GDS +misconception/SM +misconduct/MDGS +misconstruction/MS +misconstrue/GDS +miscount/MDSG +miscreant/SM +miscue/DSMG +misdeal/GMS +misdealt +misdeed/MS +misdemeanour/MS +misdiagnose/GDS +misdiagnosis/M +misdid +misdirect/SDG +misdirection/M +misdo/JG +misdoes +misdoing/M +misdone +miser/SBMY +miserableness/M +miserably +miserliness/M +misery/SM +misfeasance/M +misfeature/S +misfile/GDS +misfire/MGDS +misfit/SM +misfitted +misfitting +misfortune/SM +misgiving/MS +misgovern/SDGL +misgovernment/M +misguidance/M +misguide/DSG +misguided/Y +mishandle/DSG +mishap/SM +mishear/GS +misheard +mishit/S +mishitting +mishmash/MS +misidentify/GDS +misinform/DGS +misinformation/M +misinterpret/SGD +misinterpretation/SM +misjudge/LDSG +misjudgement/SM +mislabel/S +mislabelled +mislabelling +mislaid +mislay/GS +mislead/GS +misleading/Y +misled +mismanage/LGDS +mismanagement/M +mismatch/GMDS +misname/GDS +misnomer/MS +misogamist/MS +misogamy/M +misogynist/SM +misogynistic +misogynous +misogyny/M +misplace/GLDS +misplacement/M +misplay/GMDS +misprint/GMDS +misprision/M +mispronounce/DSG +mispronunciation/SM +misquotation/MS +misquote/MGDS +misread/GJS +misreading/M +misreport/MDGS +misrepresent/GDS +misrepresentation/MS +misrule/MGDS +miss's +miss/EDSGV +missal/ESM +missed/U +misshape/GDS +misshapen +missile/MS +missilery/M +mission/AMS +missionary/SM +missioner/SM +missive/MS +misspeak/GS +misspell/GDJS +misspelling/M +misspend/GS +misspent +misspoke +misspoken +misstate/GDSL +misstatement/SM +misstep/MS +missus/MS +mist's +mist/CDRSZG +mistakable/U +mistake/BMGS +mistaken/Y +mister's +mistily +mistime/GDS +mistiness/M +mistletoe/M +mistook +mistral/MS +mistranslated +mistreat/LDGS +mistreatment/M +mistress/MS +mistrial/MS +mistrust/MDSG +mistrustful/Y +misty/PRT +mistype/GS +misunderstand/SGJ +misunderstanding/M +misunderstood +misuse/DSMG +mite/MS +mitigate/DSGN +mitigated/U +mitigation/M +mitochondria +mitochondrial +mitochondrion +mitoses +mitosis/M +mitotic +mitral +mitre/DSMG +mitt/MNSX +mitten/M +mix/ZGMDRSB +mixed/U +mixer/M +mixture/SM +mizzen/MS +mizzenmast/SM +mkay +mks +ml +mm +mnemonic/MS +mnemonically +mo/CKHS +moan/MDRSZG +moaner/M +moat/MDS +mob's +mob/CS +mobbed/C +mobbing/C +mobile/MS +mobilisation/CM +mobilisations +mobilise/CDSG +mobiliser/MS +mobility/M +mobster/SM +moccasin/SM +mocha/SM +mock/DRSZG +mocker/M +mockery/SM +mocking/Y +mockingbird/SM +mod/STM +modal/SM +modality/S +modded +modding +mode/MS +model's +model/AS +modelled/A +modeller/MS +modelling/MS +modem/SM +moderate/MYGNPDS +moderateness/M +moderation/M +moderator/SM +modern/MYPS +modernisation/M +modernise/DRSZG +moderniser/M +modernism/M +modernist/SM +modernistic +modernity/M +modernness/M +modest/Y +modesty/M +modicum/SM +modifiable +modification/M +modified/U +modifier/M +modify/DRSXZGN +modish/YP +modishness/M +modular +modulate/CGNDS +modulation/CM +modulations +modulator/MS +module/MS +modulo +modulus +moggie +mogul/SM +mohair/M +moi +moiety/SM +moil/MDSG +moire/SM +moist/XTPNRY +moisten/DRZG +moistener/M +moistness/M +moisture/M +moisturise/ZGDRS +moisturiser/M +molar/SM +molasses/M +moldboard/SM +moldiness/M +mole/MS +molecular +molecularity/M +molecule/SM +molehill/SM +moleskin/M +molest/DRZGS +molestation/M +molested/U +molester/M +moll/MS +mollification/M +mollify/DSNG +mollusc/SM +molluscan +molly/SM +mollycoddle/DSMG +molten +molter/MS +molybdenum/M +moment/MS +momenta +momentarily +momentariness/M +momentary/P +momentous/PY +momentousness/M +momentum/M +mommy/SM +monarch/M +monarchic +monarchical +monarchism/M +monarchist/MS +monarchistic +monarchs +monarchy/SM +monastery/SM +monastic/MS +monastical/Y +monasticism/M +monaural +monetarily +monetarism/M +monetarist/MS +monetary +monetise/CGDS +money/SMD +moneybag/MS +moneybox/S +moneylender/SM +moneymaker/SM +moneymaking/M +monger/MDGS +mongol/S +mongolism/M +mongoloid/MS +mongoose/MS +mongrel/SM +monies +moniker/SM +monism/M +monist/MS +monition/SM +monitor/SMDG +monitory +monk/MS +monkey/MDGS +monkeyshine/SM +monkish +monkshood/SM +mono/M +monochromatic +monochrome/MS +monocle/DSM +monoclonal +monocotyledon/SM +monocotyledonous +monocular +monodic +monodist/SM +monody/SM +monogamist/MS +monogamous/Y +monogamy/M +monogram/SM +monogrammed +monogramming +monograph/M +monographs +monolingual/MS +monolith/M +monolithic +monoliths +monologist/SM +monologue/SM +monomania/M +monomaniac/MS +monomaniacal +monomer/SM +mononucleosis/M +monophonic +monoplane/SM +monopolisation/M +monopolise/DRSZG +monopoliser/M +monopolist/SM +monopolistic +monopoly/SM +monorail/MS +monosyllabic +monosyllable/MS +monotheism/M +monotheist/SM +monotheistic +monotone/MS +monotonic +monotonically +monotonous/PY +monotonousness/M +monotony/M +monounsaturated +monoxide/MS +monseigneur/M +monsieur/M +monsignor/SM +monsoon/SM +monsoonal +monster/SM +monstrance/ASM +monstrosity/SM +monstrous/Y +montage/SM +month/MY +monthly/SM +months +monument/MS +monumental/Y +moo/SGMD +mooch/ZGMDRS +moocher/M +mood/MS +moodily +moodiness/M +moody/TPR +moon/MDSG +moonbeam/MS +moonless +moonlight/SMDRZG +moonlighter/M +moonlighting/M +moonlit +moonscape/SM +moonshine/MZRS +moonshiner/M +moonshot/MS +moonstone/MS +moonstruck +moonwalk/MS +moor/MDJSG +moorhen/S +mooring/M +moorland/MS +moose/M +moot/DSG +mop/SZGMDR +mope/MS +moped/SM +moper/M +mopey +mopier +mopiest +mopish +mopped +moppet/MS +mopping +moraine/SM +moral/SMY +morale/M +moralisation/CM +moralise/CGDS +moraliser/MS +moralist/MS +moralistic +moralistically +moralities +morality/UM +morass/MS +moratorium/SM +moray/SM +morbid/YP +morbidity/M +morbidness/M +mordancy/M +mordant/SMY +more/MS +moreish +morel/SM +moreover +mores/M +morgue/MS +moribund +morn/MJSG +morning/M +morocco/M +moron/SM +moronic +moronically +morose/YP +moroseness/M +morph/GD +morpheme/MS +morphemic +morphia/M +morphine/M +morphing/M +morphological +morphology/M +morphs +morrow/MS +morsel/MS +mortal/MYS +mortality/M +mortar/MDSG +mortarboard/SM +mortgage's +mortgage/AGDS +mortgagee/MS +mortgagor/MS +mortician/MS +mortification/M +mortify/NGDS +mortise/DSMG +mortuary/SM +mosaic/MS +mosey/SGD +mosh/DSG +mosque/MS +mosquito/M +mosquitoes +moss/MS +mossback/SM +mossy/TR +most/MY +mot/SM +mote's +mote/KCXSVN +motel/SM +motet/SM +moth/M +mothball/GMDS +mother/MDYSG +motherboard/SM +motherfucker/MS! +motherfucking/! +motherhood/M +motherland/MS +motherless +motherliness/M +moths +motif/SM +motile/S +motility/M +motion/KCM +motioned +motioning +motionless/YP +motionlessness/M +motivate/CDSG +motivated/U +motivation/SM +motivational +motivator/SM +motive/MS +motiveless +motley/MS +motlier +motliest +motocross/MS +motor/SGMD +motorbike/MGDS +motorboat/MS +motorcade/MS +motorcar/SM +motorcycle/DSMG +motorcyclist/MS +motorisation/M +motorise/DSG +motorist/SM +motorman/M +motormen +motormouth/M +motormouths +motorway/SM +mottle/GDS +motto/M +mottoes +moue/MS +mould/JSZGMDR +moulder/MDG +moulding/M +mouldy/TR +moult/SGMD +mound/SGMD +mount/EASGMD +mountable +mountain/SM +mountaineer/SMDG +mountaineering/M +mountainous +mountainside/SM +mountaintop/SM +mountebank/MS +mounted/U +mounter/MS +mounting/SM +mourn/SZGDR +mourned/U +mourner/M +mournful/YP +mournfulness/M +mourning/M +mouse/DRSMZG +mouser/M +mousetrap/SM +mousetrapped +mousetrapping +mousiness/M +moussaka/S +mousse/MGDS +moustache/DSM +mousy/PTR +mouth/GMD +mouthfeel +mouthful/MS +mouthiness/M +mouthpiece/MS +mouths +mouthwash/MS +mouthwatering +mouthy/PTR +mouton/M +movable/SM +move/AMZGDRSB +moved/U +movement/SM +mover/AM +movie/SM +moviegoer/SM +moving/Y +mow/SZGMDR +mower/M +moxie/M +mozzarella/M +mp +mpg +mph +mt +mtg +mtge +mu/SM +much/M +mucilage/M +mucilaginous +muck/MDSG +muckrake/DRSZG +muckraker/M +mucky/TR +mucous +mucus/M +mud/M +muddily +muddiness/M +muddle/MGDS +muddleheaded +muddy/PTGDRS +mudflap/S +mudflat/MS +mudguard/SM +mudpack/S +mudroom/MS +mudslide/MS +mudslinger/SM +mudslinging/M +muenster/M +muesli +muezzin/MS +muff/MDSG +muffin/MS +muffle/ZGDRS +muffler/M +mufti/SM +mug/SM +mugful/MS +mugged +mugger/MS +mugginess/M +mugging/MS +muggins +muggle/MS +muggy/PTR +mugshot/MS +mugwump/MS +mujaheddin +mukluk/MS +mulatto/M +mulattoes +mulberry/SM +mulch/GMDS +mulct/SGMD +mule/MS +muleskinner/MS +muleteer/MS +mulish/PY +mulishness/M +mull/DSG +mullah/M +mullahs +mullein/M +mullet/MS +mulligan/SM +mulligatawny/M +mullion/SMD +multi +multicoloured +multicultural +multiculturalism/M +multidimensional +multidisciplinary +multifaceted +multifamily +multifarious/PY +multifariousness/M +multiform +multigrain +multilateral/Y +multilayered +multilevel +multilingual +multilingualism/M +multimedia/M +multimillionaire/SM +multinational/SM +multiparty +multiplayer/M +multiple/MS +multiplex/ZGMDRS +multiplexer/M +multiplicand/MS +multiplication/M +multiplicative +multiplicity/SM +multiplier/M +multiply/NZGDRSX +multiprocessing +multiprocessor/SM +multipurpose +multiracial +multistage +multistory +multitask/GS +multitasking/M +multitude/SM +multitudinous +multivariate +multiverse/SM +multivitamin/MS +multiyear +mum/SM +mumble/MZGDRS +mumbler/M +mumbletypeg/M +mummer/MS +mummery/M +mummification/M +mummify/GNDS +mummy/SM +mumps/M +mun +munch/GDS +munchies/M +munchkin/SM +mundane/SY +mung/DSG +municipal/SMY +municipality/SM +munificence/M +munificent/Y +munition/MDGS +mural/SM +muralist/SM +murder/ZGMDRS +murderer/M +murderess/MS +murderous/Y +murk/MS +murkily +murkiness/M +murky/PTR +murmur/ZGJMDRS +murmurer/M +murmuring/M +murmurous +murrain/M +muscat/MS +muscatel/SM +muscle/MGDS +musclebound +muscleman +musclemen +muscly +muscular/Y +muscularity/M +musculature/M +muse/MGDSJ +musette/MS +museum/MS +mush/MDRSZG +mushiness/M +mushroom/GSMD +mushy/PTR +music/SM +musical/MYS +musicale/MS +musicality/M +musician/SMY +musicianship/M +musicological +musicologist/MS +musicology/M +musing/MY +musk/M +muskeg/MS +muskellunge/MS +musket/MS +musketeer/MS +musketry/M +muskie/M +muskiness/M +muskmelon/SM +muskox/MN +muskrat/MS +musky/PTRS +muslin/M +muss/MDSG +mussel/MS +mussy/TR +must've +must/MRSZ +mustachio/SMD +mustang/MS +mustard/M +muster/GMD +mustily +mustiness/M +mustn't +musty/PTR +mutability/M +mutably +mutagen/MS +mutant/MS +mutate/XGNVDS +mutation/M +mutational +mute/MYTGDRSPB +muteness/M +mutilate/DSGNX +mutilation/M +mutilator/SM +mutineer/SM +mutinous/Y +mutiny/GDSM +mutt/MS +mutter/ZGJMDRS +mutterer/M +muttering/M +mutton/M +muttonchops/M +muttony +mutual/Y +mutuality/M +muumuu/MS +muzak +muzzily +muzzle/DSMG +muzzy/P +my +mycologist/SM +mycology/M +myelitis/M +mynah/MS +myocardial +myocardium +myopia/M +myopic +myopically +myriad/SM +myrmidon/MS +myrrh/M +myrtle/SM +mys +myself +mysterious/PY +mysteriousness/M +mystery/SM +mystic/SM +mystical/Y +mysticism/M +mystification/CM +mystify/CDSGN +mystique/M +myth/M +mythic +mythical +mythological +mythologise/DSG +mythologist/SM +mythology/SM +myths +myxomatosis +n/IKTH +naan/S +nab/S +nabbed +nabbing +nabob/SM +nacelle/SM +nacho/SM +nacre/M +nacreous +nadir/SM +nae +naff/RT +nag/SM +nagged +nagger/MS +nagging +nagware +nah +naiad/SM +naif/MS +nail/MDSG +nailbrush/MS +naive/RYT +naivete/M +naivety/M +naked/PY +nakedness/M +name's +name/AGDS +nameable/U +named/U +namedrop +namedropping/M +nameless/Y +namely +nameplate/MS +namesake/SM +nanny/SM +nanobot/S +nanosecond/SM +nanotechnology/SM +nap/SM +napalm/MDSG +nape/MS +naphtha/M +naphthalene/M +napkin/MS +napless +napoleon/SM +napped +napper/MS +napping +nappy/TRSM +narc/MS +narcissism/M +narcissist/MS +narcissistic +narcissus/M +narcolepsy/M +narcoleptic +narcoses +narcosis/M +narcotic/SM +narcotisation/M +narcotise/GDS +nark +narky +narrate/GNVDSX +narration/M +narrative/SM +narrator/SM +narrow/PTGMDRYS +narrowness/M +narwhal/MS +nary +nasal/SMY +nasalisation/M +nasalise/DSG +nasality/M +nascence/AM +nascent/A +nastily +nastiness/M +nasturtium/SM +nasty/PTR +natal +natch +nation/MS +national/MYS +nationalisation/SM +nationalise/CDSG +nationalism/M +nationalist/SM +nationalistic +nationalistically +nationality/SM +nationhood/M +nationwide +native/MS +nativity/SM +natl +natter/GMDS +nattily +nattiness/M +natty/PTR +natural's +natural/UPY +naturalisation/M +naturalise/DSG +naturalism/M +naturalist/SM +naturalistic +naturalness/UM +naturals +nature's +nature/CS +naturism +naturist/S +naughtily +naughtiness/M +naughty/PTR +nausea/M +nauseate/GDS +nauseating/Y +nauseous/PY +nauseousness/M +nautical/Y +nautilus/MS +naval +nave/MS +navel/SM +navigability/M +navigable +navigate/DSGN +navigation/M +navigational +navigator/MS +navvy/S +navy/SM +nay/SM +naysayer/MS +ne'er +neanderthal/MS +neap/MS +near/DRYSPTG +nearby +nearness/M +nearshore +nearside +nearsighted/YP +nearsightedness/M +neat/NRYPXT +neaten/GD +neath +neatness/M +nebula/M +nebulae +nebular +nebulous/PY +nebulousness/M +necessarily/U +necessary/SM +necessitate/DSG +necessitous +necessity/SM +neck/MDSG +neckband/S +neckerchief/MS +necking/M +necklace/MGDSJ +neckline/MS +necktie/MS +necrology/M +necromancer/SM +necromancy/M +necrophilia +necrophiliac/S +necropolis/MS +necroses +necrosis/M +necrotic +nectar/M +nectarine/MS +nee +need/MDSG +needed/U +needful/Y +neediness/M +needle/MGDS +needlepoint/M +needless/YP +needlessness/M +needlewoman/M +needlewomen +needlework/M +needn't +needy/PTR +nefarious/YP +nefariousness/M +neg +negate/DSGNVX +negation/M +negative/MYGPDS +negativeness/M +negativism/M +negativity/M +neglect/SGMD +neglectful/YP +neglectfulness/M +negligee/MS +negligence/M +negligent/Y +negligible +negligibly +negotiability/M +negotiable/A +negotiate/ADSGN +negotiation/AM +negotiations +negotiator/MS +negritude/M +negro +negroid +neigh/MDG +neighbour/SGMDY +neighbourhood/MS +neighbourliness/M +neighs +neither +nelson/SM +nematode/SM +nemeses +nemesis/M +neoclassic +neoclassical +neoclassicism/M +neocolonialism/M +neocolonialist/MS +neocon/SM +neoconservative/SM +neodymium/M +neolithic +neologism/SM +neon/M +neonatal +neonate/MS +neophilia +neophyte/MS +neoplasm/MS +neoplastic +neoprene/M +nepenthe/M +nephew/SM +nephrite/M +nephritic +nephritis/M +nephropathy +nepotism/M +nepotist/SM +nepotistic +neptunium/M +nerd/MS +nerdy/RT +nerve's +nerve/UDSG +nerveless/YP +nervelessness/M +nerviness/M +nervous/YP +nervousness/M +nervy/TPR +nest/MDSG +nestle/GJDS +nestling/M +net/SM +netball +netbook/MS +nether +nethermost +netherworld/M +netiquette/S +netted +netter/S +netting/M +nettle/MGDS +nettlesome +network/SGMD +networking/M +neural/Y +neuralgia/M +neuralgic +neurasthenia/M +neurasthenic/MS +neuritic/MS +neuritis/M +neurological/Y +neurologist/SM +neurology/M +neuron/MS +neuronal +neuroses +neurosis/M +neurosurgeon/MS +neurosurgery/M +neurosurgical +neurotic/MS +neurotically +neurotransmitter/SM +neut +neuter/MDGS +neutral/SMY +neutralisation/M +neutralise/DRSZG +neutraliser/M +neutralism/M +neutralist/SM +neutrality/M +neutrino/SM +neutron/SM +never +nevermore +nevertheless +nevi +nevus/M +new/STMRYP +newbie/MS +newborn/SM +newcomer/SM +newel/SM +newfangled +newfound +newline/S +newlywed/SM +newness/M +news/M +newsagent/S +newsboy/SM +newscast/SMRZ +newscaster/M +newsdealer/SM +newsflash/S +newsgirl/SM +newsgroup/MS +newshound/S +newsletter/MS +newsman/M +newsmen +newspaper/MS +newspaperman/M +newspapermen +newspaperwoman/M +newspaperwomen +newspeak +newsprint/M +newsreader/S +newsreel/MS +newsroom/MS +newsstand/SM +newsweekly/SM +newswoman/M +newswomen +newsworthiness/M +newsworthy/P +newsy/TR +newt/MS +newton/MS +next/M +nexus/MS +niacin/M +nib/SM +nibble/MZGDRS +nibbler/M +nice/PYTR +niceness/M +nicety/SM +niche/SM +nick/MDRSZG +nickel/MS +nickelodeon/SM +nicker/MDG +nickle/S +nickname/DSMG +nicotine/M +niece/SM +niff +niffy +nifty/TR +nigga/SM +niggard/SMY +niggardliness/M +niggaz +nigger/SM! +niggle/MZGDRS +niggler/M +nigh/RT +night/SMY +nightcap/SM +nightclothes/M +nightclub/SM +nightclubbed +nightclubbing +nightdress/MS +nightfall/M +nightgown/SM +nighthawk/SM +nightie/SM +nightingale/SM +nightlife/M +nightlight/S +nightlong +nightmare/SM +nightmarish +nightshade/SM +nightshirt/SM +nightspot/MS +nightstand/SM +nightstick/SM +nighttime/M +nightwatchman +nightwatchmen +nightwear/M +nihilism/M +nihilist/MS +nihilistic +nil/M +nimbi +nimble/TPR +nimbleness/M +nimbly +nimbus/M +nimby +nimrod/MS +nincompoop/SM +nine/MS +ninepin/MS +ninepins/M +nineteen/SMH +nineteenth/M +nineteenths +ninetieth/M +ninetieths +ninety/HSM +ninja/SM +ninny/SM +ninth/M +ninths +niobium/M +nip/SM +nipped +nipper/MS +nippiness/M +nipping +nipple/MS +nippy/TPR +nirvana/M +nisei/M +nit/SM +nitpick/SZGDR +nitpicker/M +nitpicking/M +nitrate/DSMGN +nitration/M +nitre/M +nitrification/M +nitrite/SM +nitro +nitrocellulose/M +nitrogen/M +nitrogenous +nitroglycerine/M +nitwit/MS +nix/GMDS +no/SM +nob/SY +nobble/GDS +nobelium/M +nobility/M +noble/RSPMT +nobleman/M +noblemen +nobleness/M +noblewoman/M +noblewomen +nobody/SM +nocturnal/Y +nocturne/MS +nod/SM +nodal +nodded +nodding +noddle/MS +noddy +node/MS +nodular +nodule/MS +noel/MS +noes +noggin/MS +nohow +noise/DSMG +noiseless/PY +noiselessness/M +noisemaker/MS +noisily +noisiness/M +noisome +noisy/PTR +nomad/SM +nomadic +nomenclature/MS +nominal/Y +nominate/ACGNVDS +nomination's/A +nomination/CSM +nominative/SM +nominator/CSM +nominee/MS +non +nonabrasive +nonabsorbent/SM +nonacademic +nonacceptance/M +nonacid +nonactive/MS +nonaddictive +nonadhesive +nonadjacent +nonadjustable +nonadministrative +nonage/MS +nonagenarian/MS +nonaggression/M +nonalcoholic +nonaligned +nonalignment/M +nonallergic +nonappearance/MS +nonassignable +nonathletic +nonattendance/M +nonautomotive +nonavailability/M +nonbasic +nonbeliever/MS +nonbelligerent/MS +nonbinding +nonbreakable +nonburnable +noncaloric +noncancerous +nonce/M +nonchalance/M +nonchalant/Y +nonchargeable +nonclerical/MS +nonclinical +noncollectable +noncom/MS +noncombat +noncombatant/MS +noncombustible +noncommercial/MS +noncommittal/Y +noncommunicable +noncompeting +noncompetitive +noncompliance/M +noncomplying +noncomprehending +nonconducting +nonconductor/MS +nonconforming +nonconformism +nonconformist/MS +nonconformity/M +nonconsecutive +nonconstructive +noncontagious +noncontinuous +noncontributing +noncontributory +noncontroversial +nonconvertible +noncooperation/M +noncorroding +noncorrosive +noncredit +noncriminal/SM +noncritical +noncrystalline +noncumulative +noncustodial +nondairy +nondeductible/M +nondelivery/SM +nondemocratic +nondenominational +nondepartmental +nondepreciating +nondescript +nondestructive +nondetachable +nondisciplinary +nondisclosure/M +nondiscrimination/M +nondiscriminatory +nondramatic +nondrinker/MS +nondrying +none +noneducational +noneffective +nonelastic +nonelectric +nonelectrical +nonempty +nonenforceable +nonentity/SM +nonequivalent/MS +nonessential +nonesuch/MS +nonetheless +nonevent/MS +nonexchangeable +nonexclusive +nonexempt/M +nonexistence/M +nonexistent +nonexplosive/MS +nonfactual +nonfading +nonfat +nonfatal +nonfattening +nonferrous +nonfiction/M +nonfictional +nonflammable +nonflowering +nonfluctuating +nonflying +nonfood/M +nonfreezing +nonfunctional +nongovernmental +nongranular +nonhazardous +nonhereditary +nonhuman +nonidentical +noninclusive +nonindependent +nonindustrial +noninfectious +noninflammatory +noninflationary +noninflected +nonintellectual/MS +noninterchangeable +noninterference/M +nonintervention/M +nonintoxicating +noninvasive +nonirritating +nonissue +nonjudgmental +nonjudicial +nonlegal +nonlethal +nonlinear +nonliterary +nonliving/M +nonmagnetic +nonmalignant +nonmember/MS +nonmetal/SM +nonmetallic +nonmigratory +nonmilitant +nonmilitary +nonnarcotic/SM +nonnative/MS +nonnegotiable +nonnuclear +nonnumerical +nonobjective +nonobligatory +nonobservance/M +nonobservant +nonoccupational +nonoccurence +nonofficial +nonoperational +nonoperative +nonparallel/MS +nonpareil/MS +nonparticipant/MS +nonparticipating +nonpartisan/SM +nonpaying +nonpayment/SM +nonperformance/M +nonperforming +nonperishable +nonperson/MS +nonphysical/Y +nonplus/S +nonplussed +nonplussing +nonpoisonous +nonpolitical +nonpolluting +nonporous +nonpracticing +nonprejudicial +nonprescription +nonproductive +nonprofessional/SM +nonprofit/SMB +nonproliferation/M +nonpublic +nonpunishable +nonracial +nonradioactive +nonrandom +nonreactive +nonreciprocal/SM +nonreciprocating +nonrecognition/M +nonrecoverable +nonrecurring +nonredeemable +nonrefillable +nonrefundable +nonreligious +nonrenewable +nonrepresentational +nonresident/MS +nonresidential +nonresidual/M +nonresistance/M +nonresistant +nonrestrictive +nonreturnable/MS +nonrhythmic +nonrigid +nonsalaried +nonscheduled +nonscientific +nonscoring +nonseasonal +nonsectarian +nonsecular +nonsegregated +nonsense/M +nonsensical/Y +nonsensitive +nonsexist +nonsexual +nonskid +nonslip +nonsmoker/SM +nonsmoking +nonsocial +nonspeaking +nonspecialist/MS +nonspecializing +nonspecific +nonspiritual/SM +nonstaining +nonstandard +nonstarter/MS +nonstick +nonstop +nonstrategic +nonstriking +nonstructural +nonsuccessive +nonsupport/GM +nonsurgical +nonsustaining +nonsympathiser/M +nontarnishable +nontaxable +nontechnical +nontenured +nontheatrical +nonthinking +nonthreatening +nontoxic +nontraditional +nontransferable +nontransparent +nontrivial +nontropical +nonuniform +nonunion +nonuser/MS +nonvenomous +nonverbal +nonviable +nonviolence/M +nonviolent/Y +nonvirulent +nonvocal +nonvocational +nonvolatile +nonvoter/MS +nonvoting +nonwhite/MS +nonworking +nonyielding +nonzero +noodle/MGDS +nook/MS +nookie +nooky +noon/M +noonday/M +noontide/M +noontime/M +noose/SM +nope +nor +nor'easter +norm/MS +normal/MY +normalcy/M +normalisation/M +normalise/DSG +normality/M +normative +north/ZMR +northbound +northeast/MRZ +northeaster/MY +northeastern +northeastward/S +norther/MY +northerly/SM +northern/ZR +northerner/M +northernmost +northward/S +northwest/ZMR +northwester/MY +northwestern +northwestward/S +nose/MGDS +nosebag/S +nosebleed/MS +nosecone/SM +nosedive/DSMG +nosegay/SM +nosh/MDRSZG +nosher/M +nosily +nosiness/M +nostalgia/M +nostalgic +nostalgically +nostril/MS +nostrum/MS +nosy/RPT +not/B +notability/SM +notable/SM +notably +notarial +notarisation +notarise/GDS +notarization's +notary/SM +notate/GDS +notation/FCSM +notch/GMDS +note's +note/FCSDG +notebook/MS +notelet/S +notepad/S +notepaper/M +noteworthiness/M +noteworthy/P +nothing/PSM +nothingness/M +notice/MGDS +noticeable/U +noticeably +noticeboard/S +noticed/U +notifiable +notification/M +notifier/M +notify/NDRSXZG +notion/MS +notional/Y +notoriety/M +notorious/Y +notwithstanding +notwork/S +nougat/MS +nought/MS +noun/KMS +nourish/DSLG +nourishment/M +nous +nova/MS +novae +novel/SM +novelette/SM +novelisation/MS +novelise/DSG +novelist/SM +novella/MS +novelty/SM +novena/MS +novenae +novice/MS +novitiate/MS +now/M +nowadays/M +noway/S +nowhere/M +nowise +nowt +noxious +nozzle/MS +nu/SM +nuance/MDS +nub/SM +nubbin/MS +nubby/TR +nubile +nuclear/K +nucleate/DSGN +nucleation/M +nuclei +nucleic +nucleoli +nucleolus/M +nucleon/SM +nucleoside +nucleotide +nucleus/M +nude/MTRS +nudge/GDSM +nudism/M +nudist/SM +nudity/M +nugatory +nugget/SM +nuisance/MS +nuke/MGDS +null/S +nullification/M +nullify/NDSG +nullity/M +numb/ZTGPDRYS +number's +number/ASDG +numbered/U +numberless +numbness/M +numbskull/SM +numerable/I +numeracy/IM +numeral/SM +numerate/XGNDS +numeration/M +numerator/MS +numeric +numerical/Y +numerologist/MS +numerology/M +numerous/Y +numinous +numismatic/S +numismatics/M +numismatist/SM +nun/SM +nuncio/SM +nunnery/SM +nuptial/MS +nurse/MZGDRS +nurselings +nursemaid/MS +nurser/M +nursery/SM +nurseryman/M +nurserymen +nursing/M +nursling/SM +nurture/DRSMZG +nurturer/M +nut/SM +nutcase/S +nutcracker/MS +nuthatch/MS +nuthouse/S +nutmeat/SM +nutmeg/SM +nutpick/SM +nutria/SM +nutrient/MS +nutriment/MS +nutrition/M +nutritional/Y +nutritionist/SM +nutritious/YP +nutritiousness/M +nutritive +nutshell/MS +nutted +nutter/S +nuttiness/M +nutting +nutty/RTP +nuzzle/DRSMZG +nuzzler/M +nybble/S +nylon/MS +nylons/M +nymph/M +nymphet/MS +nympho/S +nymphomania/M +nymphomaniac/SM +nymphs +o +o'clock +o'er +oaf/SM +oafish/PY +oafishness/M +oak/SMN +oakum/M +oar/SGMD +oarlock/SM +oarsman/M +oarsmen +oarswoman/M +oarswomen +oases +oasis/M +oat/SMN +oatcake/SM +oath/M +oaths +oatmeal/M +oats/M +ob/S +obbligato/MS +obduracy/M +obdurate/PY +obdurateness/M +obedience/EM +obedient/EY +obeisance/SM +obeisant +obelisk/MS +obese +obesity/M +obey/EDSG +obfuscate/GNXDS +obfuscation/M +obi/SM +obit/MS +obituary/SM +obj +object/SGVMD +objectify/NGDS +objection/SMB +objectionable/U +objectionably +objective/SMYP +objectiveness/M +objectivity/M +objector/MS +objurgate/XGNDS +objurgation/M +oblate/NX +oblation/M +obligate/DSXGN +obligation/M +obligatorily +obligatory +oblige/EGDS +obliging/Y +oblique/SMYP +obliqueness/M +obliquity/M +obliterate/DSGN +obliteration/M +oblivion/M +oblivious/YP +obliviousness/M +oblong/MS +obloquy/M +obnoxious/YP +obnoxiousness/M +oboe/MS +oboist/MS +obscene/RYT +obscenity/SM +obscurantism/M +obscurantist/SM +obscure/DRSYTG +obscurity/SM +obsequies +obsequious/PY +obsequiousness/M +obsequy/M +observably +observance/MS +observant/Y +observation/SM +observational +observatory/SM +observe/DRSBZG +observed/U +observer/M +obsess/DSGV +obsession/SM +obsessional/Y +obsessive/PSMY +obsessiveness/M +obsidian/M +obsolesce/DSG +obsolescence/M +obsolescent +obsolete/GDS +obstacle/MS +obstetric/S +obstetrical +obstetrician/SM +obstetrics/M +obstinacy/M +obstinate/Y +obstreperous/YP +obstreperousness/M +obstruct/DGVS +obstructed/U +obstruction/SM +obstructionism/M +obstructionist/MS +obstructive/YP +obstructiveness/M +obtain/DBLGS +obtainable/U +obtainment/M +obtrude/DSG +obtrusion/M +obtrusive/UPY +obtrusiveness/UM +obtuse/YTRP +obtuseness/M +obverse/SM +obviate/DSGN +obviation/M +obvious/PY +obviousness/M +ocarina/MS +occasion/GMDS +occasional/Y +occidental/SM +occlude/GDS +occlusion/SM +occlusive +occult/M +occultism/M +occultist/SM +occupancy/M +occupant/SM +occupation/AM +occupational/Y +occupations +occupied/U +occupier/SM +occupy/ADSG +occur/AS +occurred/A +occurrence/SM +occurring/A +ocean/SM +oceanfront/SM +oceangoing +oceanic/M +oceanographer/SM +oceanographic +oceanography/M +oceanology/M +ocelot/MS +och +ochre/M +ocker/S +octagon/MS +octagonal +octal +octane/MS +octave/MS +octavo/MS +octet/SM +octogenarian/SM +octopus/MS +ocular/MS +oculist/SM +odalisque/SM +odd/STRYLP +oddball/SM +oddity/SM +oddment/SM +oddness/M +odds/M +ode/SM +odious/YP +odiousness/M +odium/M +odometer/MS +odoriferous +odorous +odour/SMD +odourless +odyssey/MS +oecus +oedema/MS +oedipal +oenology/M +oenophile/SM +oesophagi +oesophagus +oestrogen/M +oestrous +oestrus/MS +oeuvre/MS +of +off/SZGDRJ +offal/M +offbeat/MS +offence/MS +offend/ZGDRS +offender/M +offensive's +offensive/IPY +offensiveness/IM +offensives +offer/JGMD +offering/M +offertory/SM +offhand +offhanded/PY +offhandedness/M +office/MZRS +officeholder/SM +officer/M +official/MYS +officialdom/M +officialese +officialism/M +officiant/SM +officiate/DSG +officiator/MS +officious/PY +officiousness/M +offing/M +offish +offline +offload/SDG +offprint/SM +offset/MS +offsetting +offshoot/MS +offshore/G +offside +offsite +offspring/M +offstage/S +offtrack +oft +often/TR +oftentimes +ofttimes +ogle/MZGDRS +ogler/M +ogre/MS +ogreish +ogress/MS +oh/M +ohm/SM +ohmmeter/MS +oho +ohs +oi +oik/S +oil/SGMD +oilcan/S +oilcloth/M +oilcloths +oilfield/S +oiliness/M +oilman +oilmen +oilskin/MS +oilskins/M +oily/RPT +oink/MDSG +ointment/SM +okapi/SM +okay/MDSG +okra/MS +old/TMNRP +oldie/SM +oldish +oldness/M +oldster/MS +ole/SMV +oleaginous +oleander/MS +oleo/M +oleomargarine/M +olfactory/SM +oligarch/M +oligarchic +oligarchical +oligarchs +oligarchy/SM +oligonucleotide/S +oligopoly/SM +olive/SM +om/SMNX +ombudsman/M +ombudsmen +omega/SM +omelette/MS +omen/M +omicron/MS +ominous/YP +ominousness/M +omission/MS +omit/S +omitted +omitting +omnibus/MS +omnipotence/M +omnipotent +omnipresence/M +omnipresent +omniscience/M +omniscient +omnivore/MS +omnivorous/PY +omnivorousness/M +on/Y +once/M +oncogene/SM +oncologist/SM +oncology/M +oncoming +one/SXMNP +oneness/M +onerous/PY +onerousness/M +oneself +onetime +ongoing +onion/M +onionskin/M +online +onlooker/SM +onlooking +onomatopoeia/M +onomatopoeic +onomatopoetic +onrush/MSG +onscreen +onset/MS +onshore +onside +onsite +onslaught/MS +onstage +onto +ontogeny/M +ontological +ontology/M +onus/MS +onward +onyx/MS +oodles/M +ooh/GD +oohs +oomph +oops +ooze/MGDS +oozy/TR +op/SMDG +opacity/M +opal/MS +opalescence/M +opalescent +opaque/PYTGDRS +opaqueness/M +opcode/S +ope/S +open/ZTGJPMDRYS +opencast +opened/U +opener/M +openhanded/P +openhandedness/M +openhearted +opening/M +openness/M +openwork/M +opera/MS +operable/I +operand/S +operate/DSGNVX +operatic +operatically +operation/M +operational/Y +operative/SM +operator/SM +operetta/SM +ophthalmic +ophthalmologist/SM +ophthalmology/M +opiate/SM +opine/GNXDS +opinion/M +opinionated +opium/M +opossum/MS +opp +opponent/SM +opportune/IY +opportunism/M +opportunist/SM +opportunistic +opportunistically +opportunity/SM +oppose/DSG +opposed/U +opposite/SMYNX +opposition/M +oppress/DSGV +oppression/M +oppressive/YP +oppressiveness/M +oppressor/MS +opprobrious/Y +opprobrium/M +opt/SGD +optic/MS +optical/Y +optician/SM +optics/M +optima +optimal/Y +optimisation/SM +optimise/DRSG +optimism/SM +optimist/SM +optimistic +optimistically +optimum/SM +option/SMDG +optional/Y +optometrist/MS +optometry/M +opulence/M +opulent/Y +opus/MS +or +oracle/SM +oracular +oral/MYS +orange/SMP +orangeade/MS +orangery/SM +orangutan/SM +orate/GNXDS +oration/M +orator/SM +oratorical/Y +oratorio/MS +oratory/SM +orb/SM +orbicular +orbit/MDRZGS +orbital/SM +orbiter/M +orc/SM +orchard/SM +orchestra/MS +orchestral +orchestrate/DSXGN +orchestration/M +orchid/SM +ordain/SDLG +ordainment/M +ordeal/SM +order/EAMDGS +orderings +orderliness/EM +orderly/PSM +ordinal/SM +ordinance/SM +ordinarily +ordinariness/M +ordinary/SMP +ordinate/MNSX +ordination/M +ordnance/M +ordure/M +ore/SM +oregano/M +org +organ/MS +organdie/M +organelle/MS +organic/SM +organically/I +organisation/ASM +organisational/Y +organise/AESDG +organised/U +organiser/MS +organism/MS +organismic +organist/MS +organza/M +orgasm/SM +orgasmic +orgiastic +orgy/SM +oriel/MS +orient's +orient/AEDGS +oriental/MS +orientalist/S +orientate/EDSGN +orientation/AEM +orientations +orienteering +orifice/MS +orig +origami/M +origin/SM +original/MYS +originality/M +originate/DSGN +origination/M +originator/SM +oriole/SM +orison/SM +ormolu/M +ornament/SGMD +ornamental +ornamentation/M +ornate/YP +ornateness/M +orneriness/M +ornery/PRT +ornithological +ornithologist/MS +ornithology/M +orotund +orotundity/SM +orphan/SMDG +orphanage/MS +orris/MS +orthodontia/M +orthodontic/S +orthodontics/M +orthodontist/SM +orthodox/U +orthodoxy/SM +orthogonal +orthogonality +orthographic +orthographically +orthography/SM +orthopaedic/S +orthopaedics/M +orthopaedist/MS +orzo/M +oscillate/GNDSX +oscillation/M +oscillator/SM +oscillatory +oscilloscope/MS +osculate/DSXGN +osculation/M +osier/MS +osmium/M +osmosis/M +osmotic +osprey/SM +ossification/M +ossify/NGDS +ostensible +ostensibly +ostentation/M +ostentatious/Y +osteoarthritis/M +osteopath/M +osteopathic +osteopaths +osteopathy/M +osteoporosis/M +ostler/S +ostracise/GDS +ostracism/M +ostrich/MS +other/MSP +otherwise +otherworldly +otiose +otter/MS +ottoman/MS +oubliette/MS +ouch +ought +oughtn't +ounce/MS +our/S +ourselves +oust/ZGDRS +ouster/M +out/SJGMDR +outage/SM +outargue/GDS +outback/MS +outbalance/DSG +outbid/S +outbidding +outboard/MS +outboast/DSG +outbound +outbox/MS +outbreak/MS +outbuilding/MS +outburst/SM +outcast/MS +outclass/DSG +outcome/MS +outcrop/MS +outcropped +outcropping/SM +outcry/SM +outdated +outdid +outdistance/GDS +outdo/G +outdoes +outdone +outdoor/S +outdoors/M +outdoorsy +outdraw/GS +outdrawn +outdrew +outermost +outerwear/M +outface/GDS +outfall/S +outfield/SMRZ +outfielder/M +outfight/SG +outfit/SM +outfitted +outfitter/MS +outfitting +outflank/GSD +outflow/MS +outfought +outfox/GDS +outgo/MJG +outgoes +outgrew +outgrow/HGS +outgrown +outgrowth/M +outgrowths +outguess/GDS +outgun/S +outgunned +outgunning +outhit/S +outhitting +outhouse/SM +outing/M +outlaid +outlandish/PY +outlandishness/M +outlast/DSG +outlaw/SGMD +outlay/SGM +outlet/SM +outlier/S +outline/MGDS +outlive/GDS +outlook/MS +outlying +outmanoeuvre/DSG +outmatch/GDS +outmoded +outnumber/DSG +outpace/GDS +outpatient/MS +outperform/GSD +outplace/L +outplacement/M +outplay/GDS +outpoint/DGS +outpost/MS +outpouring/MS +outproduce/DSG +output/SM +outputted +outputting +outrace/GDS +outrage/MGDS +outrageous/Y +outran +outrank/GDS +outre +outreach/MDSG +outrider/MS +outrigger/SM +outright +outrun/S +outrunning +outscore/GDS +outsell/GS +outset/SM +outshine/GS +outshone +outshout/GDS +outside/MZRS +outsider/M +outsize/MS +outskirt/MS +outsmart/GDS +outsold +outsource/DSG +outsourcing/M +outspend/SG +outspent +outspoken/YP +outspokenness/M +outspread/GS +outstanding/Y +outstation/MS +outstay/DGS +outstretch/DSG +outstrip/S +outstripped +outstripping +outta +outtake/MS +outvote/GDS +outward/YS +outwear/GS +outweigh/GD +outweighs +outwit/S +outwith +outwitted +outwitting +outwore +outwork/MDRSZG +outworn +ouzo/MS +ova +oval/MS +ovarian +ovary/SM +ovate/NX +ovation/M +oven/MS +ovenbird/SM +ovenproof +ovenware +over/MYS +overabundance/M +overabundant +overachieve/ZGDRS +overachiever/M +overact/GVSD +overage/SM +overaggressive +overall/SM +overalls/M +overambitious +overanxious +overarching +overarm/GSD +overate +overattentive +overawe/DSG +overbalance/MGDS +overbear/GS +overbearing/Y +overbid/SM +overbidding +overbite/MS +overblown +overboard +overbold +overbook/DGS +overbore +overborne +overbought +overbuild/SG +overbuilt +overburden/GSD +overbuy/GS +overcame +overcapacity/M +overcapitalise/DSG +overcareful +overcast/MGS +overcautious +overcharge/DSMG +overclock/GD +overcloud/SGD +overcoat/MS +overcome/GS +overcompensate/DSGN +overcompensation/M +overconfidence/M +overconfident +overconscientious +overcook/DGS +overcritical +overcrowd/SDG +overcrowding/M +overdecorate/DSG +overdependent +overdevelop/SDG +overdid +overdo/G +overdoes +overdone +overdose/MGDS +overdraft/SM +overdraw/GS +overdrawn +overdress/GMDS +overdrew +overdrive/SM +overdub/SM +overdubbed +overdubbing +overdue +overeager +overeat/GSN +overemotional +overemphasis/GMDS +overemphasise +overenthusiastic +overestimate/MGNDS +overestimation/M +overexcite/DSG +overexercise/GDS +overexert/SDG +overexertion/M +overexpose/GDS +overexposure/M +overextend/DGS +overfed +overfeed/GS +overfill/DGS +overflew +overflight/MS +overflow/MDSG +overflown +overfly/GS +overfond +overfull +overgeneralise/DSG +overgenerous +overgraze/DSG +overgrew +overground +overgrow/HSG +overgrown +overgrowth/M +overhand/MDS +overhang/MSG +overhasty +overhaul/MDSG +overhead/MS +overhear/SG +overheard +overheat/DSG +overhung +overindulge/GDS +overindulgence/M +overindulgent +overjoy/GSD +overkill/M +overladen +overlaid +overlain +overland +overlap/SM +overlapped +overlapping +overlarge +overlay/GSM +overleaf +overlie +overload/GMDS +overlong +overlook/GMDS +overlord/MS +overly/SG +overmanned +overmanning +overmaster/SDG +overmodest +overmuch/S +overnice +overnight/MS +overoptimism/M +overoptimistic +overpaid +overparticular +overpass/MS +overpay/GS +overplay/GDS +overpopulate/GNDS +overpopulation/M +overpower/SDG +overpowering/Y +overpraise/DSG +overprecise +overprice/DSG +overprint/SMDG +overproduce/GDS +overproduction/M +overprotect/SDGV +overqualified +overran +overrate/GDS +overreach/GDS +overreact/SDG +overreaction/SM +overrefined +overridden +override/MGS +overripe/M +overrode +overrule/GDS +overrun/SM +overrunning +oversampling +oversaw +oversea/S +oversee/RSZ +overseeing +overseen +overseer/M +oversell/GS +oversensitive/P +oversensitiveness/M +oversexed +overshadow/DSG +overshare/DSG +overshoe/MS +overshoot/GS +overshot +oversight/SM +oversimple +oversimplification/M +oversimplify/DSNGX +oversized +oversleep/GS +overslept +oversold +overspecialisation/M +overspecialise/GDS +overspend/SG +overspent +overspread/GS +overstaffed +overstate/DSLG +overstatement/MS +overstay/DSG +overstep/S +overstepped +overstepping +overstimulate/DSG +overstock/GSD +overstretch/GDS +overstrict +overstrung +overstuffed +oversubscribe/DSG +oversubtle +oversupply/GDS +oversuspicious +overt/Y +overtake/GS +overtaken +overtax/GDS +overthink/SG +overthought +overthrew +overthrow/SMG +overthrown +overtime/MS +overtire/GDS +overtone/MS +overtook +overture/MS +overturn/DSG +overuse/DSMG +overvaluation/S +overvalue/DSG +overview/MS +overweening/Y +overweight/M +overwhelm/SGD +overwhelming/Y +overwinter/SDG +overwork/GMDS +overwrite/GS +overwritten +overwrote +overwrought +overzealous +oviduct/SM +oviparous +ovoid/MS +ovular +ovulate/DSGN +ovulation/M +ovule/MS +ovum/M +ow +owe/DSG +owl/SM +owlet/MS +owlish/Y +own/ESGD +owner/MS +ownership/M +ox/MN +oxblood/M +oxbow/MS +oxcart/SM +oxford/SM +oxidant/MS +oxidase +oxidation/M +oxide/MS +oxidisation/M +oxidise/ZGDRS +oxidiser/M +oxtail/S +oxyacetylene/M +oxygen/M +oxygenate/DSGN +oxygenation/M +oxymora +oxymoron/M +oyster/SM +oz +ozone/M +p/NRXTGJ +pH +pa/SMH +pablum/M +pabulum/M +pace/MZGDRS +pacemaker/SM +pacer/M +pacesetter/SM +pacey +pachyderm/MS +pachysandra/MS +pacific +pacifically +pacification/M +pacifier/M +pacifism/M +pacifist/SM +pacifistic +pacify/ZGDRSN +pack's +pack/AUGSD +package's +package/AGDS +packager/SM +packaging/M +packer/MS +packet/MS +packing's +packinghouse/SM +packsaddle/MS +pact/MS +pacy/RT +pad/SM +padded +padding/M +paddle/MZGDRS +paddler/M +paddock/MDGS +paddy/SM +padlock/MDSG +padre/SM +paean/SM +paediatric/S +paediatrician/MS +paedophile/S +paedophilia +paella/MS +pagan/SM +paganism/M +page/MZGDRS +pageant/MS +pageantry/M +pageboy/SM +pager/M +paginate/DSGN +pagination/M +pagoda/MS +pah +paid/AU +pail/MS +pailful/SM +pain/MDSG +painful/PY +painfuller +painfullest +painfulness/M +painkiller/MS +painkilling +painless/PY +painlessness/M +painstaking/MY +paint/SZGJMDR +paintball +paintbox/MS +paintbrush/MS +painted/U +painter/MY +painting/M +paintwork +pair/AMDSG +paired/U +pairing/S +pairwise +paisley/SM +pal/SMY +palace/MS +paladin/SM +palaeolithic +palaeontologist/MS +palaeontology/M +palanquin/SM +palatable/U +palatal/SM +palatalisation/M +palatalise/GDS +palate/MBS +palatial/Y +palatinate/MS +palatine/MS +palaver/GSMD +palazzi +palazzo +pale/MYTGPDRSJ +paleface/MS +paleness/M +paleographer/MS +paleography/M +palette/SM +palfrey/SM +palimony/M +palimpsest/MS +palindrome/MS +palindromic +paling/M +palisade/SM +palish +pall/MDSG +palladium/M +pallbearer/MS +pallet/MS +palliate/DSGNV +palliation/M +palliative/SM +pallid/YP +pallidness/M +pallor/M +palm/MDSG +palmate +palmetto/SM +palmist/SM +palmistry/M +palmtop/SM +palmy/TR +palomino/MS +palpable +palpably +palpate/DSGN +palpation/M +palpitate/XGNDS +palpitation/M +palsy/GDSM +paltriness/M +paltry/RPT +pampas/M +pamper/DSG +pamphlet/MS +pamphleteer/MS +pan/SM +panacea/SM +panache/M +panama/MS +panatella/S +pancake/DSMG +panchromatic +pancreas/MS +pancreatic +pancreatitis +panda/SM +pandemic/SM +pandemonium/M +pander/MDRZGS +panderer/M +pane/KM +panegyric/SM +panel/SM +panelled +panelling/SM +panellist/SM +panes +pang/MS +panhandle/DRSMZG +panhandler/M +panic/SM +panicked +panicking +panicky +panned +pannier/SM +panning +panoply/SM +panorama/SM +panoramic +panpipes/M +pansy/SM +pant/MDSG +pantaloons/M +pantechnicon/S +pantheism/M +pantheist/SM +pantheistic +pantheon/SM +panther/MS +pantie/MS +panto/S +pantomime/MGDS +pantomimic +pantomimist/SM +pantry/SM +pantsuit/SM +pantyhose/M +pantyliner/M +pantywaist/SM +pap/SM +papa/MS +papacy/SM +papal +paparazzi/M +paparazzo +papaya/MS +paper/SZGMDR +paperback/SM +paperbark/S +paperboard/M +paperboy/SM +paperclip/S +paperer/M +papergirl/SM +paperhanger/SM +paperhanging/M +paperless +paperweight/MS +paperwork/M +papery +papilla/M +papillae +papillary +papist/MS +papoose/MS +pappy/SM +paprika/M +papyri +papyrus/M +par/SZGMDRBJ +para/MS +parable/MS +parabola/SM +parabolic +paracetamol/S +parachute/DSMG +parachutist/MS +parade/MZGDRS +parader/M +paradigm/SM +paradigmatic +paradisaical +paradise/SM +paradox/MS +paradoxical/Y +paraffin/M +paragliding +paragon/MS +paragraph/GMD +paragraphs +parakeet/SM +paralegal/MS +parallax/MS +parallel/SGMD +paralleled/U +parallelism/MS +parallelogram/SM +paralyse/DSG +paralysing/Y +paralysis/M +paralytic/SM +paramecia +paramecium/M +paramedic/MS +paramedical/MS +parameter/MS +parametric +paramilitary/SM +paramount +paramountcy +paramour/SM +paranoia/M +paranoiac/MS +paranoid/SM +paranormal +parapet/MS +paraphernalia/M +paraphrase/DSMG +paraplegia/M +paraplegic/SM +paraprofessional/MS +parapsychologist/MS +parapsychology/M +paraquat/M +parasailing +parascending +parasite/SM +parasitic +parasitical/Y +parasitism/M +parasol/MS +parasympathetic/S +parathion/M +parathyroid/MS +paratroop/RZS +paratrooper/M +paratroops/M +paratyphoid/M +parboil/DSG +parcel/MS +parcelled +parcelling +parch/LGDS +parchment/SM +pardner/S +pardon/ZGMDRBS +pardonable/U +pardonably/U +pardoner/M +pare/S +paregoric/M +parent/GMDS +parentage/M +parental +parentheses +parenthesis/MDSG +parenthesise +parenthetic +parenthetical/Y +parenthood/M +parenting/M +parer/M +pares/S +paresis/M +parfait/MS +pariah/M +pariahs +parietal +parimutuel/MS +paring/M +parish/MS +parishioner/MS +parity/ESM +park/MDSG +parka/SM +parking/M +parkland +parkour +parkway/MS +parky +parlance/M +parlay/GMDS +parley/GMDS +parliament/SM +parliamentarian/SM +parliamentary +parlour/MS +parlous +parmigiana +parochial/Y +parochialism/M +parodist/SM +parody/GDSM +parole/MGDS +parolee/MS +parotid +paroxysm/SM +paroxysmal +parquet/MDSG +parquetry/M +parred +parricidal +parricide/MS +parring +parrot/GMDS +parry/GDSM +parse/DRSG +parsec/MS +parsimonious/Y +parsimony/M +parsley/M +parsnip/MS +parson/MS +parsonage/MS +part's +part/CDSG +partake/ZGRS +partaken +partaker/M +parterre/SM +parthenogenesis/M +partial/MYS +partiality/M +participant/SM +participate/DSGN +participation/M +participator/MS +participatory +participial/M +participle/MS +particle/SM +particleboard/M +particular/SMY +particularisation/M +particularise/DSG +particularity/SM +particulate/SM +parting/MS +partisan/SM +partisanship/M +partition/GMDS +partitive/MS +partly +partner/MDSG +partnership/MS +partook +partridge/SM +parturition/M +partway +party/GDSM +parvenu/MS +pascal/MS +paschal +pasha/SM +pass/M +passably +passage/MS +passageway/MS +passbook/MS +passe/DRSBXZGNV +passel/MS +passenger/SM +passer/M +passerby/M +passersby +passim +passing/MY +passion/EM +passionate/EY +passionflower/SM +passionless +passive/PMYS +passiveness/M +passivisation +passivity/M +passivize/DSG +passkey/MS +passphrase/S +passport/MS +password/MS +past/AMS +pasta/SM +paste/DSMG +pasteboard/M +pastel/MS +pastern/MS +pasteurisation/M +pasteurise/ZGDRS +pasteurised/U +pasteuriser/M +pastiche/MS +pastie +pastille/MS +pastime/MS +pastiness/M +pastor/MS +pastoral/MS +pastorate/MS +pastrami/M +pastry/SM +pasturage/M +pasture/DSMG +pastureland/M +pasty/PTRSM +pat/SM +patch/EGMDS +patchily +patchiness/M +patchouli +patchwork/SM +patchy/TPR +pate/MS +patella/MS +patellae +patent/GMDYS +paterfamilias/MS +paternal/Y +paternalism/M +paternalist/S +paternalistic +paternity/M +paternoster/MS +path/M +pathetic +pathetically +pathfinder/SM +pathless +pathogen/SM +pathogenic +pathological/Y +pathologist/SM +pathology/M +pathos/M +paths +pathway/MS +patience/M +patient/IMST +patienter +patiently +patina/MS +patinae +patio/SM +patisserie/S +patois/M +patresfamilias +patriarch/M +patriarchal +patriarchate/MS +patriarchs +patriarchy/SM +patrician/SM +patricide/SM +patrimonial +patrimony/SM +patriot/SM +patriotic/U +patriotically +patriotism/M +patrol/MS +patrolled +patrolling +patrolman/M +patrolmen +patrolwoman/M +patrolwomen +patron/MS +patronage/MS +patroness/MS +patronise/ZGDRS +patroniser/M +patronising/Y +patronymic/SM +patronymically +patroon/SM +patsy/SM +patted +patter/MDGS +pattern/SMDG +patting +patty/SM +paucity/M +paunch/MS +paunchy/RT +pauper/MS +pauperise/DSG +pauperism/M +pause/DSMG +pave/AGDS +paved/U +pavement/MS +pavilion/SM +paving/MS +pavlova/S +paw/SGMD +pawl/MS +pawn/MDSG +pawnbroker/MS +pawnbroking/M +pawnshop/MS +pawpaw/MS +pay's +pay/ASGBL +payback/SM +paycheck/MS +payday/MS +payed +payee/SM +payer/SM +payload/SM +paymaster/SM +payment/ASM +payoff/MS +payola/M +payout/MS +payphone/S +payroll/SM +payslip/SM +paywall/SM +payware +pct +pd +pea/SM +peace/SM +peaceable +peaceably +peaceful/PY +peacefulness/M +peacekeeper/SM +peacekeeping/M +peacemaker/MS +peacemaking/M +peacetime/M +peach/MS +peachy/TR +peacock/MS +peafowl/MS +peahen/MS +peak/MDSG +peaky +peal/AMDSG +peanut/MS +pear/MYS +pearl/SGMD +pearly/RT +peasant/SM +peasantry/M +peashooter/SM +peat/M +peaty/TR +pebble/MGDS +pebbly +pecan/SM +peccadillo/M +peccadilloes +peccary/SM +peck/MDRSZG +peckish +pecs +pectic +pectin/M +pectoral/MS +peculate/GNDS +peculation/M +peculator/SM +peculiar/Y +peculiarity/SM +pecuniary +pedagogic +pedagogical/Y +pedagogue/SM +pedagogy/M +pedal/SM +pedalled +pedalling +pedalo/S +pedant/MS +pedantic +pedantically +pedantry/M +peddle/GDS +pederast/MS +pederasty/M +pedestal/MS +pedestrian/SM +pedestrianisation +pedestrianise/GDS +pediatrics's +pedicab/SM +pedicure/MGDS +pedicurist/MS +pedigree/MDS +pediment/MS +pedlar/MS +pedometer/MS +peduncle/MS +pee/DRSMZ +peeing +peek/MDSG +peekaboo/M +peel/MDRSJZG +peeled/U +peeler/M +peeling/M +peen/MS +peep/MDRSZG +peepbo +peeper/M +peephole/MS +peepshow/MS +peer/MDG +peerage/SM +peeress/MS +peerless +peeve/DSMG +peevish/PY +peevishness/M +peewee/MS +peewit/S +peg/SM +pegboard/MS +pegged +pegging +peignoir/SM +pejoration/M +pejorative/SMY +peke/MS +pekineses +pekingese/SM +pekoe/M +pelagic +pelf/M +pelican/MS +pellagra/M +pellet/GMDS +pellucid +pelmet/S +pelt/MDSG +pelvic +pelvis/MS +pemmican/M +pen/M +penal +penalisation/M +penalise/DSG +penalty/SM +penance/MS +pence +penchant/SM +pencil/MS +pencilled +pencilling/S +pend/CDSG +pendant/CMS +pendent/MS +pendulous +pendulum/MS +penetrability/M +penetrable +penetrate/DSGNVX +penetrating/Y +penetration/M +penfriend/S +penguin/MS +penicillin/M +penile +peninsula/SM +peninsular +penis/MS +penitence/M +penitent/SMY +penitential +penitentiary/SM +penknife/M +penknives +penlight/SM +penman/M +penmanship/M +penmen +pennant/MS +penned +penniless +penning +pennon/MS +penny/SM +pennyweight/MS +pennyworth +penologist/MS +penology/M +pension/BZGMDRS +pensioner/M +pensive/PY +pensiveness/M +pent +pentacle/MS +pentagon/MS +pentagonal +pentagram/SM +pentameter/SM +pentathlete/MS +pentathlon/MS +penthouse/SM +penuche/M +penultimate/SM +penumbra/MS +penumbrae +penurious/PY +penuriousness/M +penury/M +peon/MS +peonage/M +peony/SM +people/MGDS +pep/SM +pepped +pepper/GMDS +peppercorn/SM +peppermint/SM +pepperoni/MS +peppery +peppiness/M +pepping +peppy/TPR +pepsin/M +peptic/MS +peptide/S +peradventure/M +perambulate/XGNDS +perambulation/M +perambulator/MS +percale/MS +perceive/BGDS +perceived/U +percent/MS +percentage/SM +percentile/SM +perceptible +perceptibly +perception/SM +perceptional +perceptive/PY +perceptiveness/M +perceptual/Y +perch/GMDS +perchance +percipience/M +percipient +percolate/GNDS +percolation/M +percolator/SM +percussion/AM +percussionist/MS +percussive +perdition/M +perdurable +peregrinate/DSXGN +peregrination/M +peregrine/MS +peremptorily +peremptory +perennial/SMY +perestroika/M +perfect/PTGMDRYS +perfecta/MS +perfectibility/M +perfectible +perfection/SM +perfectionism/M +perfectionist/SM +perfectness/M +perfidious/Y +perfidy/SM +perforate/GNXDS +perforation/M +perforce +perform/SDRZG +performance/SM +performed/U +performer/M +perfume/DRSMZG +perfumer/M +perfumery/SM +perfunctorily +perfunctory +perfusion +pergola/SM +perhaps +pericardia +pericardial +pericarditis +pericardium/M +perigee/SM +perihelia +perihelion/M +peril/SM +perilled +perilling +perilous/Y +perimeter/SM +perinatal +perinea +perineum/M +period/MS +periodic +periodical/SMY +periodicity/M +periodontal +periodontics/M +periodontist/SM +peripatetic/MS +peripheral/MYS +periphery/SM +periphrases +periphrasis/M +periphrastic +periscope/SM +perish/BDRSZG +perishable/MS +peristalses +peristalsis/M +peristaltic +peristyle/SM +peritoneal +peritoneum/MS +peritonitis/M +periwig/SM +periwinkle/SM +perjure/DRSZG +perjurer/M +perjury/SM +perk/MDSG +perkily +perkiness/M +perky/TPR +perm/MDSG +permafrost/M +permanence/M +permanency/M +permanent/SMY +permeability/M +permeable +permeate/GNDS +permeation/M +permissible +permissibly +permission/MS +permissive/PY +permissiveness/M +permit/MS +permitted +permitting +permutation/SM +permute/DSG +pernicious/YP +perniciousness/M +peroration/MS +peroxide/MGDS +perpendicular/SMY +perpendicularity/M +perpetrate/DSGN +perpetration/M +perpetrator/MS +perpetual/SMY +perpetuate/DSGN +perpetuation/M +perpetuity/M +perplex/GDS +perplexed/Y +perplexity/SM +perquisite/SM +persecute/GNXDS +persecution/M +persecutor/SM +perseverance/M +persevere/DSG +persiflage/M +persimmon/SM +persist/SGD +persistence/M +persistent/Y +persnickety +person/UMS +persona/SM +personable +personae +personage/MS +personal/MYS +personalise/CDSG +personality/SM +personalty/M +personification/M +personify/GDSNX +personnel/M +perspective/MS +perspex +perspicacious/Y +perspicacity/M +perspicuity/M +perspicuous +perspiration/M +perspire/GDS +persuade/BZGDRS +persuaded/U +persuader/M +persuasion/SM +persuasive/PY +persuasiveness/M +pert/RYPT +pertain/GSD +pertinacious/Y +pertinacity/M +pertinence/M +pertinent/Y +pertness/M +perturb/DGS +perturbation/SM +perturbed/U +pertussis/M +peruke/MS +perusal/MS +peruse/GDS +pervade/DSG +pervasive/PY +pervasiveness/M +perverse/PXYN +perverseness/M +perversion/M +perversity/M +pervert/SGMD +pervs +peseta/MS +peskily +peskiness/M +pesky/TPR +peso/MS +pessary/S +pessimal +pessimism/M +pessimist/SM +pessimistic +pessimistically +pest/MRSZ +pester/GD +pesticide/MS +pestiferous +pestilence/SM +pestilent +pestilential +pestle/MGDS +pesto/M +pet/SZMR +petabyte/MS +petal/SM +petalled +petard/MS +petcock/SM +peter/GMD +petiole/SM +petite/MS +petition/ZGMDRS +petitioner/M +petrel/MS +petrifaction/M +petrify/DSG +petrochemical/SM +petrodollar/MS +petrol/M +petrolatum/M +petroleum/M +petrologist/SM +petrology/M +petted +petticoat/MS +pettifog/S +pettifogged +pettifogger/SM +pettifoggery/M +pettifogging +pettily +pettiness/M +petting/M +pettish/Y +petty/PTR +petulance/M +petulant/Y +petunia/MS +pew/SM +pewee/SM +pewit/SM +pewter/MS +peyote/M +pf +pfennig/MS +pg +phaeton/MS +phage/S +phagocyte/SM +phalanger/SM +phalanges +phalanx/MS +phalli +phallic +phallocentric +phallocentrism +phallus/M +phantasm/MS +phantasmagoria/MS +phantasmagorical +phantasmal +phantom/SM +pharaoh/M +pharaohs +pharisaic +pharisee/SM +pharmaceutic/MS +pharmaceutical/SM +pharmaceutics/M +pharmacist/MS +pharmacologic +pharmacological +pharmacologist/SM +pharmacology/M +pharmacopoeia/MS +pharmacy/SM +pharyngeal +pharynges +pharyngitis/M +pharynx/M +phase/DSMG +phaseout/SM +phat +pheasant/MS +phenacetin/M +phenobarbital/M +phenol/M +phenom/MS +phenomena +phenomenal/Y +phenomenological +phenomenology +phenomenon/MS +phenotype +pheromone/MS +phew +phi/SM +phial/SM +philander/ZGDRS +philanderer/M +philandering/M +philanthropic +philanthropically +philanthropist/MS +philanthropy/SM +philatelic +philatelist/MS +philately/M +philharmonic/SM +philippic/MS +philistine/MS +philistinism/M +philodendron/SM +philological +philologist/MS +philology/M +philosopher/MS +philosophic +philosophical/Y +philosophise/DRSZG +philosophiser/M +philosophy/SM +philtre/MS +phish/ZGDR +phisher/M +phlebitis/M +phlegm/M +phlegmatic +phlegmatically +phloem/M +phlox/M +phobia/MS +phobic/MS +phoebe/MS +phoenix/MS +phone/DSMG +phonecard/S +phoneme/MS +phonemic +phonemically +phonetic/S +phonetically +phonetician/SM +phonetics/M +phoney/GMDS +phonic/S +phonically +phonics/M +phonied +phonier +phoniest +phoniness/M +phonograph/M +phonographic +phonographs +phonological/Y +phonologist/MS +phonology/M +phonying +phooey +phosphate/MS +phosphodiesterase +phosphor/MS +phosphorescence/M +phosphorescent/Y +phosphoric +phosphorous +phosphorus/M +phosphorylation +photo/SGMD +photocell/MS +photocopier/M +photocopy/DRSMZG +photoelectric +photoelectrically +photoengrave/DRSJZG +photoengraver/M +photoengraving/M +photofinishing/M +photogenic +photogenically +photograph/MDRZG +photographer/M +photographic +photographically +photographs/A +photography/M +photojournalism/M +photojournalist/SM +photometer/MS +photon/MS +photosensitive +photostat/SM +photostatic +photostatted +photostatting +photosynthesis/GMDS +photosynthesise +photosynthetic +phototropic +phototropism +phototypesetter +phototypesetting +phrasal +phrase's +phrase/AGDS +phrasebook/S +phraseology/M +phrasing/MS +phreaking +phrenologist/SM +phrenology/M +phyla +phylactery/SM +phylogeny/M +phylum/M +phys +physic/SM +physical/MYS +physicality +physician/SM +physicist/SM +physicked +physicking +physics/M +physio/S +physiognomy/SM +physiography/M +physiologic +physiological/Y +physiologist/MS +physiology/M +physiotherapist/MS +physiotherapy/M +physique/MS +pi/SMDRHZG +pianissimo/SM +pianist/MS +piano/SM +pianoforte/SM +pianola/S +piastre/MS +piazza/MS +pibroch/M +pibrochs +pic/SM +pica/M +picador/MS +picante +picaresque +picayune +piccalilli/M +piccolo/MS +pick/MDRSJZG +pickax/GMDS +picker/M +pickerel/MS +picket/ZGMDRS +pickings/M +pickle/MGDS +pickpocket/SM +pickup/MS +picky/PTR +picnic/MS +picnicked +picnicker/SM +picnicking +picot/SM +pictograph/M +pictographs +pictorial/MYS +picture/MGDS +picturesque/PY +picturesqueness/M +piddle/MGDS +piddly +pidgin/MS +pie/SM +piebald/MS +piece/DSMG +piecemeal +piecework/MRZ +pieceworker/M +piecrust/SM +pieing +pier/M +pierce/JGDS +piercing/MY +piety/M +piezoelectric +piffle/MG +pig/SML +pigeon/MS +pigeonhole/DSMG +pigged +piggery/S +pigging +piggish/PY +piggishness/M +piggy/TRSM +piggyback/MDSG +pigheaded/PY +pigheadedness/M +piglet/MS +pigment/MDS +pigmentation/M +pigpen/MS +pigskin/MS +pigsty/SM +pigswill +pigtail/MS +pike/MZGDRS +piker/M +pikestaff/SM +pilaf/SM +pilaster/MS +pilchard/MS +pile/MGDSJ +pileup/MS +pilfer/ZGDRS +pilferage/M +pilferer/M +pilgrim/MS +pilgrimage/MS +piling/M +pill/MDSG +pillage/MZGDRS +pillager/M +pillar/MDS +pillbox/MS +pillion/MS +pillock/S +pillory/GDSM +pillow/GMDS +pillowcase/MS +pillowslip/MS +pilot/DGSM +pilothouse/SM +pimento/MS +pimiento/MS +pimp/GMDYS +pimpernel/MS +pimple/DSM +pimply/RT +pin/SM +pinafore/MS +pinata/MS +pinball/M +pincer/MS +pinch/GMDS +pincushion/MS +pine's +pine/AGDS +pineapple/MS +pinewood/S +piney +pinfeather/SM +ping/GMD +pinhead/SM +pinhole/SM +pinier +piniest +pinion/SMDG +pink/TGPMDRS +pinkeye/M +pinkie/SM +pinkish +pinkness/M +pinko/MS +pinnacle/SM +pinnate +pinned/U +pinning/U +pinny/S +pinochle/M +pinon/MS +pinpoint/SGMD +pinprick/MS +pinsetter/SM +pinstripe/DSM +pint/MS +pinto/MS +pinup/MS +pinwheel/GSMD +pinyin/M +pinyon/SM +pioneer/SGMD +pious/YP +piousness/M +pip/SZGMDR +pipe/MS +pipeline/SM +piper/M +pipette/SM +pipework +piping/M +pipit/MS +pipped +pippin/SM +pipping +pipsqueak/SM +piquancy/M +piquant/Y +pique/MGDS +piracy/M +piranha/SM +pirate/DSMG +piratical/Y +pirogi/M +piroshki/M +pirouette/DSMG +piscatorial +pismire/SM +piss/ZGMDRS +pissoir/S +pistachio/SM +piste/S +pistil/SM +pistillate +pistol/SM +piston/SM +pit/SM +pita/MS +pitapat/SM +pitch/MDRSZG +pitchblende/M +pitcher/M +pitchfork/MDSG +pitchman/M +pitchmen +piteous/YP +piteousness/M +pitfall/SM +pith/M +pithead/S +pithily +pithiness/M +pithy/RTP +pitiable +pitiably +pitiful/Y +pitiless/PY +pitilessness/M +piton/MS +pitta/S +pittance/MS +pitted +pitting +pituitary/SM +pity/GDSM +pitying/Y +pivot/MDGS +pivotal +pix/M +pixel/MS +pixie/MS +pizza/MS +pizzazz/M +pizzeria/SM +pizzicati +pizzicato/M +pj's +pk +pkg +pkt +pkwy +pl +placard/SMDG +placate/DSGN +placation/M +placatory +place's +place/AESDLG +placebo/SM +placed/U +placeholder/MS +placekick/MDRZGS +placekicker/M +placement/EASM +placenta/SM +placental/S +placer/SM +placid/Y +placidity/M +placings +placket/SM +plagiarise/DRSZG +plagiariser/M +plagiarism/SM +plagiarist/SM +plagiary/M +plague/DSMG +plaice +plaid/MS +plain/MRYTSP +plainchant +plainclothes +plainclothesman/M +plainclothesmen +plainness/M +plainsman/M +plainsmen +plainsong/M +plainspoken +plaint/SMV +plaintiff/SM +plaintive/Y +plait/MDGS +plan/ZMRS +planar +plane's +plane/CGDS +planeload/MS +planer/M +planet/SM +planetarium/SM +planetary +plangency/M +plangent +plank/MDGS +planking/M +plankton/M +planned/U +planner/SM +planning/S +plant/MDRZGSJ +plantain/SM +plantar +plantation/MS +planter/M +planting/M +plantlike +plaque/SM +plash/MDSG +plasma/M +plaster/SZGMDR +plasterboard/M +plasterer/M +plastic/SM +plasticise/DSG +plasticity/M +plastique +plat/XGMDNS +plate/MS +plateau/SMDG +plateful/SM +platelet/SM +platen/M +platform/SGMD +plating/M +platinum/M +platitude/SM +platitudinous +platonic +platoon/SGMD +platted +platter/SM +platting +platy/M +platypus/MS +platys +plaudit/SM +plausibility/M +plausible +plausibly +play/AEGMDS +playable/EU +playact/SGD +playacting/M +playback/MS +playbill/MS +playbook/MS +playboy/SM +player/SM +playfellow/SM +playful/PY +playfulness/M +playgirl/MS +playgoer/MS +playground/SM +playgroup/S +playhouse/MS +playlist/MS +playmate/MS +playoff/SM +playpen/SM +playroom/SM +playschool/S +plaything/SM +playtime/M +playwright/SM +plaza/MS +plea/MS +plead/DRZGSJ +pleader/M +pleading/MY +pleasant/UTYP +pleasanter +pleasantness/UM +pleasantry/SM +please/EDSG +pleasing/YS +pleasurably +pleasure/MGDSB +pleasureful +pleat/MDGS +pleb/S +plebby +plebe/MS +plebeian/MS +plebiscite/MS +plectra +plectrum/MS +pledge/DSMG +plenary/SM +plenipotentiary/SM +plenitude/SM +plenteous +plentiful/Y +plenty/M +plenum/S +pleonasm/MS +plethora/M +pleura/M +pleurae +pleurisy/M +plexus/MS +pliability/M +pliable +pliancy/M +pliant/Y +pliers/M +plight/SMDG +plimsoll/S +plinth/M +plinths +plod/S +plodded +plodder/MS +plodding/S +plonk/DRSZG +plop/MS +plopped +plopping +plosive/S +plot/MS +plotted +plotter/SM +plotting +plough/MDG +ploughman/M +ploughmen +ploughs +ploughshare/MS +plover/SM +ploy's +ploy/S +pluck/MDSG +pluckily +pluckiness/M +plucky/RPT +plug's +plug/US +plugged/U +plugging/U +plughole/S +plugin/SM +plum/GMDS +plumage/M +plumb/MDRSZGJ +plumbed/U +plumber/M +plumbing/M +plume/MS +plummet/SGMD +plummy +plump/MDRYSTGP +plumpness/M +plumy/RT +plunder/SZGMDR +plunderer/M +plunge/DRSMZG +plunger/M +plunk/MDSG +pluperfect/SM +plural/SM +pluralisation/M +pluralise/GDS +pluralism/M +pluralist/MS +pluralistic +plurality/SM +plus/MS +plush/MRYTP +plushness/M +plushy/RT +plutocracy/SM +plutocrat/SM +plutocratic +plutonium/M +pluvial +ply/AGDSM +plywood/M +pm +pneumatic +pneumatically +pneumococcal +pneumococci +pneumococcus +pneumonia/M +poach/DRSZG +poacher/M +poaching/M +pock/GMDS +pocket/SMDG +pocketbook/SM +pocketful/SM +pocketknife/M +pocketknives +pockmark/MDGS +pod/SM +podcast/SMG +podded +podding +podiatrist/SM +podiatry/M +podium/SM +poem/MS +poesy/M +poet/MS +poetaster/MS +poetess/MS +poetic/S +poetical/Y +poetry/M +pogrom/SM +poi/M +poignancy/M +poignant/Y +poinciana/SM +poinsettia/SM +point/MDRSZG +pointblank +pointed/Y +pointer/M +pointillism/M +pointillist/SM +pointless/PY +pointlessness/M +pointy/TR +poise/MGDS +poison/SJZGMDR +poisoner/M +poisoning/M +poisonous/Y +poke/MZGDRS +poker/M +pokey/MS +poky/TR +pol/SGMD +polar +polarisation/CM +polarise/CDSG +polarity/SM +pole/MS +poleaxe/GDS +polecat/MS +polemic/MS +polemical/Y +polemicist/SM +polemics/M +polestar/SM +police/DSMG +policeman/M +policemen +policewoman/M +policewomen +policy/SM +policyholder/MS +policymaker/S +polio/MS +poliomyelitis/M +polish/ZGMDRS +polished/U +polisher/M +politburo/MS +polite/RYTP +politeness/M +politesse/M +politic/S +political/Y +politician/SM +politicisation/M +politicise/CDSG +politicking/M +politico/SM +politics/M +polity/SM +polka/MDSG +poll/GMDNS +pollack/MS +pollard/S +pollen/M +pollinate/GNDS +pollination/M +pollinator/SM +polling/M +polliwog/SM +pollster/SM +pollutant/MS +pollute/ZGNDRS +polluted/U +polluter/M +pollution/M +polo/M +polonaise/SM +polonium/M +poltergeist/MS +poltroon/SM +poly +polyacrylamide +polyamory/S +polyandrous +polyandry/M +polyclinic/SM +polyester/MS +polyethylene/M +polygamist/MS +polygamous +polygamy/M +polyglot/SM +polygon/SM +polygonal +polygraph/GMD +polygraphs +polyhedral +polyhedron/SM +polymath/M +polymaths +polymer/SM +polymeric +polymerisation/M +polymerise/GDS +polymorphic +polymorphous +polynomial/MS +polyp/MS +polyphonic +polyphony/M +polypropylene/M +polys +polysemous +polystyrene/M +polysyllabic +polysyllable/MS +polytechnic/MS +polytheism/M +polytheist/SM +polytheistic +polythene +polyunsaturate/DS +polyurethane/MS +polyvinyl +pom/S +pomade/DSMG +pomander/SM +pomegranate/MS +pommel/SM +pommelled +pommelling +pommy/S +pomp/M +pompadour/SMD +pompano/MS +pompom/SM +pomposity/M +pompous/YP +pompousness/M +ponce/GDS +poncho/SM +poncy +pond/MS +ponder/SZGDR +ponderer/M +ponderous/YP +ponderousness/M +pone/MS +pong/GDS +pongee/M +poniard/MS +pontiff/SM +pontifical/Y +pontificate/DSMG +pontoon/SM +pony/GDSM +ponytail/MS +poo/SGD +pooch/MDSG +poodle/SM +poof/MS +poofter/S +pooh/GMD +poohs +pool/GMDS +poolroom/MS +poolside/S +poop/GMDS +poor/TRYP +poorboy/M +poorhouse/SM +poorness/M +pop/SM +popcorn/M +pope/MS +popgun/SM +popinjay/MS +poplar/SM +poplin/M +popover/SM +poppa/MS +poppadom/S +popped +popper/SM +poppet/S +popping +poppy/SM +poppycock/M +populace/MS +popular/Y +popularisation/M +popularise/DSG +popularity/UM +populate/ACGDS +population/CM +populations +populism/M +populist/MS +populous/P +populousness/M +popup/MS +porcelain/SM +porch/MS +porcine +porcupine/SM +pore/MGDS +porgy/SM +pork/ZMR +porker/M +porky/RSMT +porn/M +porno/M +pornographer/MS +pornographic +pornographically +pornography/M +porosity/M +porous/P +porousness/M +porphyritic +porphyry/M +porpoise/MGDS +porridge/M +porringer/SM +port's/A +port/CAEGDS +portability/M +portable/MS +portage/DSMG +portal/SM +portcullis/MS +portend/SGD +portent/SM +portentous/YP +porter/ASM +porterhouse/SM +portfolio/MS +porthole/MS +portico/M +porticoes +portiere/MS +portion/KSGMD +portliness/M +portly/RPT +portmanteau/MS +portrait/MS +portraitist/SM +portraiture/M +portray/SGD +portrayal/MS +portulaca/M +pose's/A +pose/CAKEGDS +poser/EKSM +poseur/SM +posh/TR +posit/DSGV +position/CKEMS +positional/K +positioned/K +positioning/K +positive/MYPS +positiveness/M +positivism +positivist/S +positron/MS +poss +posse/MS +possess/AEVGSD +possession/ASM +possessive/SMYP +possessiveness/M +possessor/SM +possibility/SM +possible/SM +possibly +possum/SM +post/ZGMDRSJ +postage/M +postal +postbag/S +postbox/S +postcard/SM +postcode/S +postcolonial +postconsonantal +postdate/DSG +postdoc/MS +postdoctoral +poster/M +posterior/SM +posterity/M +postgraduate/SM +posthaste +posthumous/Y +posthypnotic +postie/S +postilion/SM +postindustrial +posting/M +postlude/SM +postman/M +postmark/SMDG +postmaster/MS +postmen +postmenopausal +postmeridian +postmistress/MS +postmodern +postmodernism/M +postmodernist/MS +postmortem/SM +postnasal +postnatal +postoperative +postpaid +postpartum +postpone/DSGL +postponement/SM +postprandial +postscript/SM +postseason/SM +postsynaptic +postulate/XDSMGN +postulation/M +postural +posture/MGJDS +posturing/M +postwar +postwoman +postwomen +posy/SM +pot/CSM +potability/M +potable/SM +potash/M +potassium/M +potato/M +potatoes +potbelly/DSM +potboiler/SM +potency/M +potent/Y +potentate/MS +potential/MYS +potentiality/SM +potentiate/GDS +potful/SM +pothead/SM +pother/SMDG +potherb/SM +potholder/MS +pothole/DRSMZG +pothook/SM +potion/SM +potluck/MS +potpie/SM +potpourri/SM +potsherd/SM +potshot/MS +pottage/M +potted +potter/GSMD +pottery/SM +potting +potty/PRSMT +pouch/MDSG +pouf/S +pouffe/S +poulterer/MS +poultice/DSMG +poultry/M +pounce/DSMG +pound's +pound/KDSG +poundage/M +pounding/SM +pour/GDSJ +pout/ZGMDRS +pouter/M +poverty/M +pow +powder/GSMD +powdery +power/MDSG +powerboat/MS +powerful/Y +powerhouse/SM +powerless/PY +powerlessness/M +powwow/SGMD +pox/MS +pp +ppm +ppr +pr +practicability/M +practicably +practical/SMY +practicality/SM +practice/SMB +practicum/SM +practise/DSG +practised/U +practitioner/SM +praetor/SM +praetorian +pragmatic/MS +pragmatical/Y +pragmatism/M +pragmatist/MS +prairie/SM +praise/EDSMG +praiseworthiness/M +praiseworthy/P +praline/SM +pram/MS +prance/DRSMZG +prancer/M +prancing/Y +prang/DSG +prank/MS +prankster/SM +praseodymium/M +prat/S +prate/MZGDRS +prater/M +pratfall/SM +prattle/DRSMZG +prattler/M +prawn/MDSG +pray/ZGDRS +prayer/M +prayerful/Y +preach/DRSZGL +preacher/M +preachment/M +preachy/RT +preadolescence/SM +preamble/MGDS +prearrange/LGDS +prearrangement/M +preassigned +precancel/SMDG +precancerous +precarious/PY +precariousness/M +precast +precaution/MS +precautionary +precede/DSG +precedence/M +precedent/SM +precept/SM +preceptor/SM +precinct/MS +preciosity/M +precious/YP +preciousness/M +precipice/SM +precipitant/MS +precipitate/XMYGNDS +precipitation/M +precipitous/Y +precis/M +precise/DRSYTGNP +preciseness/M +precision/M +preclude/GDS +preclusion/M +precocious/YP +precociousness/M +precocity/M +precognition/M +precognitive +precolonial +preconceive/GDS +preconception/SM +precondition/MDGS +precook/GSD +precursor/SM +precursory +predate/DSG +predator/MS +predatory +predawn +predecease/GDS +predecessor/SM +predefined +predesignate/GDS +predestination/M +predestine/DSG +predetermination/M +predetermine/ZGDRS +predeterminer/M +predicable +predicament/MS +predicate/MGNVDS +predication/M +predicative/Y +predict/BGVSD +predictability/UM +predictable/U +predictably/U +prediction/SM +predictor/MS +predigest/GDS +predilection/SM +predispose/GDS +predisposition/MS +predominance/M +predominant/Y +predominate/YGDS +preemie/SM +preeminence/M +preeminent/Y +preempt/GVSD +preemption/M +preemptive/Y +preen/DSG +preexist/DGS +preexistence/M +pref +prefab/SM +prefabbed +prefabbing +prefabricate/DSGN +prefabrication/M +preface/DSMG +prefatory +prefect/SM +prefecture/MS +prefer/SBL +preferably +preference/MS +preferential/Y +preferment/M +preferred +preferring +prefigure/GDS +prefix/MDSG +preform/GSD +preformative +prefrontal +pregame/SM +pregnancy/SM +pregnant +preheat/GSD +prehensile +prehistorian/S +prehistoric +prehistorical/Y +prehistory/M +prehuman +prejudge/LGDS +prejudgement/MS +prejudice/MGDS +prejudiced/U +prejudicial +prekindergarten/SM +prelacy/M +prelate/SM +prelim/SM +preliminary/SM +preliterate +prelude/MS +premarital +premature/Y +premed/SM +premedical +premeditate/DSGN +premeditated/U +premeditation/M +premenstrual +premier/SGMD +premiere/MS +premiership/MS +premise/DSMG +premium/SM +premix/GDS +premolar/SM +premonition/MS +premonitory +prenatal/Y +prenup/SM +prenuptial +preoccupation/SM +preoccupy/DSG +preoperative +preordain/GDS +prep/MS +prepackage/DSG +prepacked +prepaid +preparation/SM +preparatory +prepare/GDS +prepared/UP +preparedness/UM +prepay/GSL +prepayment/MS +preponderance/SM +preponderant/Y +preponderate/GDS +preposition/SM +prepositional/Y +prepossess/GDS +prepossessing/U +prepossession/SM +preposterous/Y +prepped +prepping +preppy/TRSM +prepubescence/M +prepubescent/SM +prepuce/MS +prequel/MS +prerecord/GSD +preregister/SGD +preregistration/M +prerequisite/MS +prerogative/SM +pres +presage/MGDS +presbyopia/M +presbyter/SM +presbytery/SM +preschool/SZMR +preschooler/M +prescience/M +prescient/Y +prescribe/DSG +prescript/SVM +prescription/SM +prescriptive/Y +preseason/SM +presence/SM +present/LMDRYZGSB +presentably +presentation/ASM +presenter/M +presentiment/SM +presentment/SM +preservation/M +preservationist/SM +preservative/SM +preserve/BDRSMZG +preserver/M +preset/S +presetting +preshrank +preshrink/GS +preshrunk +preside/GDS +presidency/SM +president/MS +presidential +presidium/M +presort/DGS +press's +press/ACGSD +pressed/U +presser/MS +pressie/S +pressing/SMY +pressman/M +pressmen +pressure/DSMG +pressurisation/M +pressurise/CGDS +pressuriser/S +pressurizer's +prestidigitation/M +prestige/M +prestigious +presto/SM +presumably +presume/GDSB +presumption/SM +presumptive +presumptuous/YP +presumptuousness/M +presuppose/DSG +presupposition/MS +pretax +preteen/MS +pretence/SM +pretend/DRZGS +pretender/M +pretension/SM +pretentious/UY +pretentiousness/M +preterite/MS +preterm +preternatural/Y +pretest/DGS +pretext/MS +pretrial/S +prettify/GDS +prettily +prettiness/M +pretty/TGDRSMP +pretzel/MS +prev +prevail/DGS +prevalence/M +prevalent +prevaricate/DSGNX +prevarication/M +prevaricator/SM +prevent/DBSGV +preventable/U +preventative/MS +prevention/M +preventive/SM +preview/MDRSZG +previous/Y +prevision/MS +prewar +prey/GMDS +prezzie/S +priapic +price's +price/AGDS +priceless +pricey +pricier +priciest +prick/MDRYSZG +pricker/M +prickle/MGDS +prickliness/M +prickly/PRT +pride/MGDS +prideful/Y +prier/M +priest/SMY +priestess/MS +priesthood/SM +priestliness/M +priestly/RTP +prig/MS +priggish/P +priggishness/M +prim/ZGDRYP +primacy/M +primal +primarily +primary/SM +primate/MS +prime/MS +primer/M +primeval +priming/M +primitive/SPMY +primitiveness/M +primmer +primmest +primness/M +primogenitor/SM +primogeniture/M +primordial/Y +primp/DSG +primrose/SM +primula/S +prince/SMY +princedom/SM +princeliness/M +princely/PRT +princess/MS +principal/SMY +principality/SM +principle/DSM +principled/U +print/AMDSG +printable/U +printer/MS +printing/SM +printmaking +printout/SM +prion/S +prior/MS +prioress/MS +prioritisation +prioritise/DSG +priority/SM +priory/SM +prise/AGDS +prism/MS +prismatic +prison/SZMR +prisoner/M +prissily +prissiness/M +prissy/PTR +pristine +prithee +privacy/M +private/XMYTNRS +privateer/SM +privation/CSM +privatisation/SM +privatise/DSG +privet/SM +privilege/DSMG +privileged/U +privily +privy/RSMT +prize/MS +prizefight/ZGSMR +prizefighter/M +prizefighting/M +prizewinner/MS +prizewinning +pro/SM +probabilistic +probability/SM +probable/SM +probably +probate/MN +probation/ZMR +probational +probationary +probationer/M +probe/MGDSBJ +probity/M +problem/MS +problematic +problematical/Y +probosces +proboscis/MS +procaine/M +procedural +procedure/SM +proceed/GJDS +proceeding/M +proceeds/M +process's +process/AGDS +processed/U +procession/GD +processional/MS +processor/SM +proclamation/MS +proclivity/SM +procrastinate/DSGN +procrastination/M +procrastinator/MS +procreate/V +proctor/GMDS +procurement/M +prod/MS +prodigal/MYS +prodigality/M +prodigious/Y +prodigy/SM +produce's +produce/AZGDRS +producer/AM +producible/A +production/ASM +productive/UY +productiveness/M +productivity/M +prof/MS +profanation/MS +profane/PYGDS +profaneness/M +profanity/SM +professed/Y +profession/SM +professional/MYS +professionalisation +professionalise/DSG +professionalism/M +professor/SM +professorial/Y +professorship/SM +proffer/GMDS +proficiency/M +proficient/MYS +profit/BGD +profitability/M +profitable/U +profitably/U +profiteer/MDGS +profiteering/M +profiterole/SM +profitless +profligacy/M +profligate/SMY +proforma +profound/RYTP +profoundness/M +profundity/SM +profuse/PY +profuseness/M +progenitor/SM +progeny/M +progesterone/M +progestin/S +prognathous +prognoses +prognosis/M +prognostic/MS +prognosticate/XGNDS +prognostication/M +prognosticator/MS +program/CAS +programmable/MS +programmatic +programme/BJDRSMZG +programmed/AC +programmer/M +programming/M +progress/MDSGV +progression/MS +progressive/PMYS +progressiveness/M +prohibit/DGVS +prohibition/SM +prohibitionist/MS +prohibitive/Y +prohibitory +project/GMDS +projectile/SM +projection/SM +projectionist/SM +projector/MS +prokaryotic +prole/S +proletarian/MS +proletariat/M +proliferate/DSGN +proliferation/M +prolific +prolifically +prolix/Y +prolixity/M +prologue/SM +prolongation/SM +prom/M +promenade/MGDS +promethium/M +prominence/M +prominent/Y +promiscuity/M +promiscuous/Y +promise/DSMG +promising/Y +promissory +promo/M +promontory/SM +promote/DRZG +promoter/M +promotional +prompt/JPSMDRYZTG +prompted/U +prompter/M +prompting/M +promptitude/M +promptness/M +promulgate/GNDS +promulgation/M +promulgator/MS +prone/P +proneness/M +prong/MDS +pronghorn/MS +pronominal/M +pronounce/DSLG +pronounceable/U +pronouncement/SM +pronto +pronunciation/MS +proof/ADGSM +proofread/SRZG +proofreader/M +prop/MS +propaganda/M +propagandise/GDS +propagandist/MS +propagate/DSGN +propagation/M +propagator/SM +propel/S +propellant/MS +propelled +propeller/SM +propelling +propensity/SM +proper/MRYT +property/DSM +prophecy/SM +prophesier/M +prophesy/DRSMZG +prophet/SM +prophetess/MS +prophetic +prophetical/Y +prophylactic/SM +prophylaxes +prophylaxis/M +propinquity/M +propitiate/DSGN +propitiation/M +propitiatory +propitious/Y +proponent/SM +proportion/ESM +proportional/YS +proportionality +proportionate/EY +proposal/MS +propped +propping +proprietary/SM +proprieties/M +proprietor/SM +proprietorial/Y +proprietorship/M +proprietress/MS +propriety/SM +propulsion/M +propulsive +prorate/DSG +prorogation/M +prorogue/GD +prosaic +prosaically +proscenium/SM +prosciutto/M +proscribe/DG +proscription/MS +prose/M +prosecute/DSXGN +prosecution/M +prosecutor/MS +proselyte/DSMG +proselytise/DRSZG +proselytiser/M +proselytism/M +prosody/SM +prospect/MDGVS +prospective/Y +prospector/SM +prospectus/MS +prosper/GSD +prosperity/M +prosperous/Y +prostate/MS +prostheses +prosthesis/M +prosthetic +prostitute/MGNDS +prostitution/M +prostrate/GNXDS +prostration/M +prosy/RT +protactinium/M +protagonist/SM +protean +protect/GVSD +protected/U +protection/SM +protectionism/M +protectionist/MS +protective/PY +protectiveness/M +protector/MS +protectorate/MS +protege/SM +protegee/S +protein/SM +protestant/S +protestation/MS +protocol/MS +proton/SM +protoplasm/M +protoplasmic +prototype/MGS +prototypical +protozoa +protozoan/MS +protozoic +protract/GD +protrude/GDS +protrusile +protrusion/MS +protuberance/MS +protuberant +proud/RYT +prov/NB +provability/M +provably +prove/EAGDS +proved/U +proven/U +provenance/SM +provender/M +provenience/M +proverbial/Y +provide/DRSZG +provided/U +providence/M +provident/Y +providential/Y +provider/M +province/MS +provincial/SMY +provincialism/M +provisional/Y +proviso/SM +provocateur/S +provocative/PY +provocativeness/M +provoke/DRSZG +provoked/U +provoker/M +provoking/Y +provolone/M +provost/SM +prow/MS +prowess/M +prowl/MDRSZG +prowler/M +proximal +proximate +proximity/M +proxy/SM +prude/MS +prudence/M +prudent/Y +prudential/Y +prudery/M +prudish/YP +prudishness/M +prune/MZGDRS +pruner/M +prurience/M +prurient/Y +pry/ZTGDRSM +psalm/MS +psalmist/SM +psaltery/SM +psephologist/S +psephology +pseud/S +pseudo/S +pseudonym/SM +pseudonymous +pseudoscience/MS +pseudy +pshaw/MS +psi/SM +psittacosis/M +psoriasis/M +psst +psych/MDSG +psyche/M +psychedelia +psychedelic/SM +psychedelically +psychiatric +psychiatrist/SM +psychiatry/M +psychic/MS +psychical/Y +psycho/SM +psychoactive +psychoanalyse/DSG +psychoanalysis/M +psychoanalyst/SM +psychoanalytic +psychoanalytical/Y +psychobabble/M +psychodrama/MS +psychogenic +psychokinesis +psychokinetic +psychological/Y +psychologist/MS +psychology/SM +psychometric +psychoneuroses +psychoneurosis/M +psychopath/M +psychopathic +psychopathology +psychopaths +psychopathy/M +psychopharmacology +psychos/S +psychosis/M +psychosomatic +psychotherapist/MS +psychotherapy/SM +psychotic/SM +psychotically +psychotropic/MS +psychs +pt/C +ptarmigan/MS +pterodactyl/MS +ptomaine/SM +pub/SM +pubertal +puberty/M +pubes/M +pubescence/M +pubescent +pubic +pubis/M +public/AM +publican/AMS +publication/ASM +publicise/GDS +publicist/MS +publicity/M +publicly +publish/AGDS +publishable +published/U +publisher/MS +publishing/M +puce/M +puck/ZMRS +pucker/MDG +puckish/YP +puckishness/M +pud/S +pudding/SM +puddle/DSMG +puddling/M +pudenda +pudendum/M +pudginess/M +pudgy/PRT +pueblo/SM +puerile +puerility/M +puerperal +puff/ZGMDRS +puffball/SM +puffer/M +puffin/SM +puffiness/M +puffy/PRT +pug/SM +pugilism/M +pugilist/SM +pugilistic +pugnacious/YP +pugnaciousness/M +pugnacity/M +puke/MGDS +pukka +pulchritude/M +pulchritudinous +pule/GDS +pull/ZGMDRS +pullback/MS +puller/M +pullet/SM +pulley/SM +pullout/MS +pullover/SM +pulmonary +pulp/GMDS +pulpiness/M +pulpit/SM +pulpwood/M +pulpy/RPT +pulsar/SM +pulsate/XGNDS +pulsation/M +pulse/AMGDS +pulverisation/M +pulverise/DSG +puma/MS +pumice/SM +pummel/S +pummelled +pummelling +pump/ZGMDRS +pumper/M +pumpernickel/M +pumpkin/MS +pun/SM +punch/MDRSZG +punchbag/S +puncheon/MS +puncher/M +punchline/S +punchy/TR +punctilio/M +punctilious/PY +punctiliousness/M +punctual/Y +punctuality/M +punctuate/GNDS +punctuation/M +puncture/DSMG +pundit/SM +punditry/M +pungency/M +pungent/Y +puniness/M +punish/BLGDS +punished/U +punishing/Y +punishment/MS +punitive/Y +punk/TMRS +punned +punnet/S +punning +punster/SM +punt/ZGMDRS +punter/M +puny/TRP +pup/SM +pupa/M +pupae +pupal +pupate/DSG +pupil/MS +pupped +puppet/MS +puppeteer/SM +puppetry/M +pupping +puppy/SM +purblind +purchase/DRSMZGB +purchaser/M +purdah/M +pure/PYTR +purebred/SM +puree/MDS +pureeing +pureness/M +purgative/SM +purgatorial +purgatory/SM +purge/MZGDRS +purger/M +purification/M +purifier/M +purify/NDRSZG +purine/MS +purism/M +purist/MS +puristic +puritan/SM +puritanical/Y +puritanism/M +purity/M +purl/GMDS +purlieu/SM +purloin/SGD +purple/MTRS +purplish +purport/SMDG +purported/Y +purpose/DSMYG +purposeful/YP +purposefulness/M +purposeless/PY +purr/GMDS +purse/MZGDRS +purser/M +pursuance/M +pursuant +pursue/ZGDRS +pursuer/M +pursuit/SM +purulence/M +purulent +purvey/DSG +purveyance/M +purveyor/SM +purview/M +pus/M +push/ZGMDRS +pushbike/S +pushcart/SM +pushchair/S +pusher/M +pushily +pushiness/M +pushover/MS +pushpin/S +pushy/TRP +pusillanimity/M +pusillanimous/Y +puss/MS +pussy/TRSM +pussycat/MS +pussyfoot/DSG +pustular +pustule/SM +put/ISM +putative +putout/MS +putrefaction/M +putrefactive +putrefy/GDS +putrescence/M +putrescent +putrid +putsch/MS +putt/ZGMDRS +putted/I +puttee/MS +putter/MDRZG +putterer/M +putting/I +putty/GDSM +putz/S +puzzle/MZGDRSL +puzzlement/M +puzzler/M +pvt +pwn/SGD +pyelonephritis +pygmy/SM +pyjama/S +pyjamas/M +pylon/SM +pylori +pyloric +pylorus/M +pyorrhoea/M +pyramid/GSMD +pyramidal +pyre/MS +pyrimidine/MS +pyrite/SM +pyrites/M +pyromania/M +pyromaniac/SM +pyrotechnic/S +pyrotechnical +pyrotechnics/M +pyruvate +python/SM +pyx/MS +pzazz +q +qr +qt/S +qty +qua +quack/GMDS +quackery/M +quad/MS +quadrangle/SM +quadrangular +quadrant/MS +quadraphonic +quadratic/MS +quadrature +quadrennial +quadrennium/MS +quadriceps/MS +quadrilateral/SM +quadrille/XMNS +quadrillion/M +quadriplegia/M +quadriplegic/SM +quadrivium/M +quadruped/MS +quadrupedal +quadruple/MGDS +quadruplet/MS +quadruplicate/MGNDS +quadruplication/M +quaff/GMDS +quagmire/SM +quahog/MS +quail/GMDS +quaint/PRYT +quaintness/M +quake/MGDS +quaky +qualification/EM +qualified/U +qualifier/SM +qualify/EGXNDS +qualitative/Y +quality/SM +qualm/MS +qualmish +quandary/SM +quango/S +quanta +quantifiable +quantification/M +quantifier/M +quantify/NDRSZG +quantitative/Y +quantity/SM +quantum/M +quarantine/MGDS +quark/MS +quarrel/SM +quarrelled +quarreller/MS +quarrelling +quarrelsome/P +quarrelsomeness/M +quarry/DSMG +quart/MS +quarter/SGMDY +quarterback/GMDS +quarterdeck/MS +quarterfinal/SM +quarterly/SM +quartermaster/MS +quarterstaff/M +quarterstaves +quartet/SM +quarto/MS +quartz/M +quasar/MS +quash/GDS +quasi +quatrain/MS +quaver/MDSG +quavery +quay/MS +quayside/S +queasily +queasiness/M +queasy/TPR +queen/GMDYS +queenly/RT +queer/PTGMDRYS +queerness/M +quell/GDS +quench/ZGDRSB +quenchable/U +quencher/M +quenchless +querulous/YP +querulousness/M +query/DSMG +ques +quesadilla/MS +quest/IFAMS +quested +questing +question/SMDRZGBJ +questionable/U +questionably/U +questioned/U +questioner/M +questioning/MY +questionnaire/SM +queue/MDSG +quibble/DRSMZG +quibbler/M +quiche/SM +quick/MNRYXTP +quicken/DG +quickfire +quickie/SM +quicklime/M +quickness/M +quicksand/MS +quicksilver/M +quickstep/MS +quid/MS +quiescence/M +quiescent/Y +quiet/SMDNRYXTGP +quieten/DG +quietism +quietness/M +quietude/IEM +quietus/MS +quiff/S +quill/SM +quilt/SMDRZG +quilter/M +quilting/M +quin/S +quince/SM +quine/S +quinine/M +quinoa +quinsy/M +quint/SM +quintessence/SM +quintessential/Y +quintet/SM +quintuple/MGDS +quintuplet/MS +quip/MS +quipped +quipping +quipster/SM +quire's +quire/IAS +quirk/SMDG +quirkiness/M +quirky/RTP +quirt/SM +quisling/SM +quit/S +quitclaim/MS +quite +quittance/M +quitter/SM +quitting +quiver/SMDG +quivery +quixotic +quixotically +quiz/M +quizzed +quizzer/SM +quizzes +quizzical/Y +quizzing +quo/H +quoin/SM +quoit/SMDG +quondam +quorate/I +quorum/SM +quot/B +quota/SM +quotability/M +quotation/SM +quote's +quote/UDSG +quotidian +quotient/SM +qwerty +r/S +rabbet/GMDS +rabbi/SM +rabbinate/M +rabbinic +rabbinical +rabbit/GMDS +rabble/MS +rabid/PY +rabidness/M +rabies/M +raccoon/M +race/MZGDRS +racecourse/SM +racegoer/S +racehorse/MS +raceme/MS +racer/M +racetrack/MS +raceway/MS +racial/Y +racialism/M +racialist/MS +racily +raciness/M +racing/M +racism/M +racist/SM +rack/GMDS +racket/SMDG +racketeer/SMDG +racketeering/M +raconteur/SM +racquetball/SM +racy/PRT +rad/SM +radar/SM +radarscope/SM +raddled +radial/SMY +radiance/M +radiant/Y +radiate/DSGNX +radiation/M +radiator/SM +radical/SMY +radicalisation/M +radicalise/DSG +radicalism/M +radicchio/M +radii +radio/MDGS +radioactive/Y +radioactivity/M +radiocarbon/M +radiogram/MS +radiographer/SM +radiography/M +radioisotope/MS +radiologist/SM +radiology/M +radioman/M +radiomen +radiometer/MS +radiometric +radiometry/M +radiophone/SM +radioscopy/M +radiosonde/SM +radiosurgery +radiotelegraph/M +radiotelegraphs +radiotelegraphy/M +radiotelephone/MS +radiotherapist/MS +radiotherapy/M +radish/MS +radium/M +radius/M +radon/M +raffia/M +raffish/YP +raffishness/M +raffle/DSMG +raft/ZGMDRS +rafter/M +rafting/M +rag/SGMD +raga/MS +ragamuffin/MS +ragbag/M +rage/MS +ragga +ragged/RYTP +raggedness/M +raggedy/RT +ragging +raging/Y +raglan/SM +ragout/SM +ragtag/S +ragtime/M +ragweed/M +ragwort +rah +raid/ZGMDRS +raider/M +rail's +rail/CGDS +railcard/S +railing/SM +raillery/SM +railroad/SZGMDR +railroader/M +railroading/M +railway/SM +railwayman +railwaymen +raiment/M +rain/GMDS +rainbow/SM +raincoat/SM +raindrop/SM +rainfall/SM +rainmaker/SM +rainmaking/M +rainproof +rainstorm/MS +rainwater/M +rainy/RT +raise/MZGDRS +raiser/M +raisin/SM +rajah/M +rajahs +rake/MGDS +rakish/YP +rakishness/M +rally/DSMG +ram/SM +ramble/DRSMZGJ +rambler/M +rambunctious/PY +rambunctiousness/M +ramekin/SM +ramie/M +ramification/M +ramify/DSXNG +ramjet/SM +rammed +ramming +ramp/GMS +rampage/DSMG +rampancy/M +rampant/Y +rampart/SM +ramrod/SM +ramrodded +ramrodding +ramshackle +ran/A +ranch/MDRSZG +rancher/M +ranching/M +rancid/P +rancidity/M +rancidness/M +rancorous/Y +rancour/M +rand/M +randiness/M +random/PSY +randomisation/M +randomise/DSG +randomness/MS +randy/RTP +ranee/MS +rang/ZR +range's +range/CGDS +rangefinder/S +ranger/M +ranginess/M +rangy/RTP +rank/TGJPMDRYS +ranking/M +rankle/DSG +rankness/M +ransack/SGD +ransom/SZGMDR +ransomer/M +ransomware +rant/ZGMDJRS +ranter/M +rap/SZGMDR +rapacious/PY +rapaciousness/M +rapacity/M +rape/MS +raper/M +rapeseed/M +rapid/PMRYTS +rapidity/M +rapidness/M +rapier/SM +rapine/M +rapist/SM +rapped +rappel/SM +rappelled +rappelling +rapper/SM +rapping +rapport/MS +rapporteur/S +rapprochement/SM +rapscallion/MS +rapt/YP +raptness/M +raptor/S +rapture/MS +rapturous/Y +rare/YTGPDRS +rarebit/MS +rarefaction/M +rarefy/GDS +rareness/M +rarity/SM +rascal/SMY +rash/ZTMRSYP +rasher/M +rashness/M +rasp/GMDS +raspberry/SM +raspy/RT +raster +rat/SM +ratatouille/M +ratbag/S +ratchet/GMDS +rate/JXMZGNDRS +rated/U +ratepayer/S +rater/M +rather +rathskeller/SM +ratification/M +ratifier/M +ratify/NDRSZG +rating/M +ratio/MS +ratiocinate/GNDS +ratiocination/M +ration/MDG +rational/SMY +rationale/MS +rationalisation/SM +rationalise/DSG +rationalism/M +rationalist/SM +rationalistic +rationality/M +ratlike +ratline/SM +rattan/SM +ratted +ratter/SM +ratting +rattle/DRSMZGJ +rattlebrain/SMD +rattler/M +rattlesnake/SM +rattletrap/SM +rattly +rattrap/SM +ratty/RT +raucous/YP +raucousness/M +raunchily +raunchiness/M +raunchy/TRP +ravage/DRSMZG +ravager/M +ravages/M +rave/JMZGDRS +ravel's +ravel/US +ravelled/U +ravelling/S +raven/MDSG +ravenous/Y +ravine/SM +raving/M +ravioli/SM +ravish/DRSZGL +ravisher/M +ravishing/Y +ravishment/M +raw/PTMR +rawboned +rawhide/M +rawness/M +ray/SM +rayon/M +raze/GDS +razor/MS +razorback/MS +razz/GMDS +razzmatazz/M +rcpt +rd +re/DSMYTGVJ +reach/MDSGB +reachable/U +reacquire/DSG +react/V +reactant/SM +reactionary/SM +reactivity +read/ZGMRBJS +readability/SM +reader/M +readership/SM +readily +readiness/M +reading/M +readmitted +readout/SM +ready/DRSTGP +reafforestation +real/TMRYPS +realisation/SM +realise/DSBG +realised/U +realism/M +realist/SM +realistic/U +realistically/U +realities +reality/UM +realm/MS +realness/M +realpolitik/M +realty/M +ream/ZGMDRS +reamer/M +reap/ZGDRS +reaper/M +rear/GMDS +rearguard/MS +rearmost +rearward/S +reason/SMDRZGB +reasonable/UP +reasonableness/UM +reasonably/U +reasoner/M +reasoning/M +reassuring/Y +reauthorise/S +reauthorized +reauthorizing +rebate/M +rebel/MS +rebellion/MS +rebellious/YP +rebelliousness/M +rebid/S +rebidding +rebirth/M +reboil/SDG +rebuild/SG +rebuke/DSMG +rebuking/Y +rebuttal/MS +rec'd +rec/M +recalcitrance/M +recalcitrant +recant/SDG +recantation/SM +recap/MS +recapitalisation +recce/S +recd +receipt/SMDG +receivables/M +receive/DRSZGB +receiver/M +receivership/M +recent/RYTP +recentness/M +receptacle/SM +reception/MS +receptionist/SM +receptive/PY +receptiveness/M +receptivity/M +receptor/SM +recess/MDSGV +recessional/SM +recessionary +recessive/SM +recherche +recidivism/M +recidivist/SM +recipe/SM +recipient/SM +reciprocal/SMY +reciprocate/GNDS +reciprocation/M +reciprocity/M +recital/SM +recitalist/MS +recitative/MS +reciter/SM +reckless/YP +recklessness/M +reckon/SJDG +reckoning/M +reclamation/M +recline/DRSZG +recliner/M +recluse/SMV +recognisable/U +recognisably +recognise/DRSGB +recognised/U +recombination +recompense/DSMG +recompilation +recompile/GD +recon/S +reconcile/GDSB +reconciliation/S +recondite +reconfiguration +reconfigure/D +reconnaissance/MS +reconnoitre/GDS +reconstruct/V +reconstructed/U +recorded/U +recorder/MS +recording/MS +recoup/DG +recourse/M +recoverable/U +recovery/SM +recreant/MS +recreational +recriminate/DSGNX +recrimination/M +recriminatory +recrudesce/GDS +recrudescence/M +recrudescent +recruit/LSMDRZG +recruiter/M +recruitment/M +rectal/Y +rectangle/MS +rectangular +rectifiable +rectification/M +rectifier/M +rectify/XNDRSZG +rectilinear +rectitude/M +recto/MS +rector/SM +rectory/SM +rectum/SM +recumbent +recuperate/GNVDS +recuperation/M +recur/S +recurred +recurrence/SM +recurring +recursion/S +recuse/DSG +recyclable/SM +recycling/M +red/PSM +redact/SDG +redaction/M +redactor/SM +redbird/SM +redbreast/MS +redbrick +redcap/SM +redcoat/SM +redcurrant/S +redden/SDG +redder +reddest +reddish +redeem/RZB +redeemer/M +redemption/M +redemptive +redhead/SMD +redialling +redirection +redistrict/GD +redivide/GDS +redlining/M +redneck/SM +redness/M +redo/G +redolence/M +redolent +redoubt/SBM +redoubtably +redound/SDG +redraw/SG +redskin/SM +reduce/DRSZG +reducer/M +reducible +reductase/M +reduction/SM +reductionist +reductive +redundancy/SM +redundant/Y +redwood/SM +redye/DS +reediness/M +reedy/RTP +reef/ZGMDRS +reefer/M +reek/GMDS +reel's +reel/UGDS +reeve/G +reexport/SDG +ref/SZM +refashion/DGS +refection/M +refectory/SM +refer/B +referee/DSM +refereeing +reference/MGDS +referendum/MS +referent/SM +referential +referral/SM +referred +referrer/SM +referring +reffed +reffing +refill/BM +refined/U +refinement/SM +refiner/SM +refinery/S +refitting +reflate/XDSGN +reflationary +reflect/GVSD +reflection/MS +reflective/Y +reflector/MS +reflexive/SMY +reflexology +reforge/DSG +reform/MZ +reformat/V +reformatory/SM +reformatting +reformed/U +reformist/S +refortify/GDS +refract/SGVD +refraction/M +refractory/SM +refrain/SGMD +refresh/ZGLDRS +refresher/M +refreshing/Y +refreshment/SM +refreshments/M +refrigerant/SM +refrigerate/DSGN +refrigeration/M +refrigerator/MS +refuge/SM +refugee/SM +refulgence/M +refulgent +refund/B +refurbishment/MS +refusal/MS +refutation/MS +refute/BDRSZG +refuter/M +reg +regal/DYG +regalement/M +regalia/M +regard/ESMDG +regardless +regards/M +regather/DGS +regatta/SM +regency/SM +regeneracy/M +regenerate/V +regex/M +regexp/S +reggae/M +regicide/MS +regime/SM +regimen/SM +regiment/MDGS +regimental +regimentation/M +region/SM +regional/Y +regionalism/MS +register/GMDS +registered/U +registrant/MS +registrar/MS +registration/SM +registry/SM +regnant +regress/MDSGV +regression/MS +regret/SM +regretful/Y +regrettable +regrettably +regretted +regretting +regrind/GS +reground +regroup/DGS +regular/MYS +regularisation/M +regularise/DSG +regularity/SM +regulate/CDSGNV +regulated/U +regulation/CM +regulations +regulator/MS +regulatory +regurgitate/DSGN +regurgitation/M +rehab/MS +rehabbed +rehabbing +rehabilitate/GNVDS +rehabilitation/M +rehang/SDG +rehears/GD +rehearsal/MS +rehearsed/U +rehi +rehung +reign/MDSG +reimburse/BDSGL +reimbursement/MS +rein/GD +reindeer/M +reinforce/LGDS +reinforcement/SM +reinitialise +reinstall/DG +reinstatement/M +reinsurance +reiterate/V +reject/GSMD +rejection/SM +rejoice/JGDS +rejoicing/M +rejoinder/SM +rejuvenate/DSGN +rejuvenation/M +rel +relate/DRSXZGNV +relatedness/M +relater/M +relation/M +relational +relationship/MS +relative/MYS +relativism/M +relativist/S +relativistic +relativity/M +relax/DRSZG +relaxant/MS +relaxation/SM +relaxer/M +relay/D +release/B +released/U +relegate/GNDS +relent/SGD +relentless/PY +relentlessness/M +relevance/M +relevancy/M +relevant/Y +reliability/UM +reliable/U +reliably/U +reliance/M +reliant +relic/MS +relief/SM +relieve/ZGDRS +reliever/M +religion/SM +religiosity +religious/MYP +religiousness/M +reline/DSG +relinquish/LDSG +relinquishment/M +reliquary/SM +relish/GMDS +relist/SGD +relive/DSBG +relocate/B +reluctance/M +reluctant/Y +rely/GDS +rem/M +remain/SGD +remainder/GMDS +remand/SGD +remapping +remark/B +remarkableness/M +remarkably +remarked/U +remediable +remedy/GDSM +remember/DG +remembered/U +remembrance/MS +reminder/M +reminisce/GDS +reminiscence/MS +reminiscent/Y +remiss/PY +remissness/M +remit/S +remittance/SM +remitted +remitting/U +remix/DSG +remnant/MS +remodelling +remonstrant/SM +remonstrate/DSG +remorse/M +remorseful/Y +remorseless/PY +remorselessness/M +remote/RSMYTP +remoteness/M +remould/SDG +removal/SM +remunerate/GNVXDS +remuneration/M +renaissance/MS +renal +renascence/S +rend/GS +render/SGMDJ +rendering/M +rendezvous/GMDS +rendition/MS +renegade/DSMG +renege/DRSZG +reneger/M +renew/DSBG +renewal/MS +rennet/M +rennin/M +renounce/LDSG +renouncement/M +renovate/DSXGN +renovation/M +renovator/MS +renown/MD +rent/ZGMDRS +rental/SM +renter/M +renunciation/SM +reopen/SDG +reorg/MDSG +rep/SM +repaint/GDS +repair/BZR +repairer/M +repairman/M +repairmen +reparable +reparation/MS +reparations/M +repartee/M +repatriate/XDSMGN +repatriation/M +repeat/SMDRZGB +repeatable/U +repeatably +repeated/Y +repeater/M +repeating/M +repel/S +repelled +repellent/SM +repelling +repent/SDG +repentance/M +repentant/Y +repercussion/S +repertoire/MS +repertory/SM +repetition/MS +repetitious/YP +repetitiousness/M +repetitive/YP +repetitiveness/M +rephotograph/DG +replaceable +replant/GSD +replenish/LGDS +replenishment/M +replete/PDSGN +repleteness/M +repletion/M +replica/SM +replicate/DSGNX +replication/M +replicator/S +reportage/M +reported/Y +reportorial +reposeful +repository/SM +reprehend/DGS +reprehensibility/M +reprehensible +reprehensibly +reprehension/M +represent/GDS +representational +representative/MS +represented/U +repression/MS +repressive/PY +reprieve/DSMG +reprimand/GSMD +reprisal/SM +reprise/M +reproach/GMDSB +reproachful/Y +reprobate/MS +reproductive +reprogramming +reproving/Y +reptile/SM +reptilian/MS +republic/S +republicanism/M +repudiate/XGNDS +repudiation/M +repudiator/MS +repugnance/M +repugnant +repulsion/M +repulsive/YP +repulsiveness/M +repurchase/GDS +reputability/M +reputably/E +reputation/MS +repute/DSMGB +reputed/Y +request/GDR +requiem/SM +require/LDG +requirement/MS +requisite/XMNS +requisition/GMD +requital/M +requite/DRSZG +requited/U +requiter/M +reread/SG +rerecord/GDS +rerunning +resale/B +resat +rescind/SDG +rescission/M +rescue/DRSMZG +rescuer/M +reseal/B +resell/SG +resemble/DSG +resend +resent/LSDG +resentful/YP +resentfulness/M +resentment/MS +reserpine/M +reservation/MS +reserved/UY +reservedness/M +reservist/SM +reservoir/SM +resetting +reshipping +residence/SM +residency/SM +resident/MS +residential +residua +residual/MS +residue/SM +residuum/M +resignation/SM +resigned/Y +resilience/M +resiliency/M +resilient/Y +resinous +resist/SMDRZG +resistance/SM +resistant/U +resistible +resistless +resistor/MS +resit/S +resitting +resold +resole/DSG +resolute/PY +resoluteness/M +resolve/RBM +resolved/U +resonance/SM +resonant/Y +resonate/GDS +resonator/SM +resorption/M +resound/SGD +resounding/Y +resourceful/YP +resourcefulness/M +resp +respect/ESGVMD +respectability/M +respectable +respectably +respecter/MS +respectful/EY +respectfulness/M +respective/Y +respell/SGD +respiration/M +respirator/SM +respiratory +respire/DG +resplendence/M +resplendent/Y +respond/SGD +respondent/SM +response/MS +responsibility/SM +responsible +responsibly +responsive/UYP +responsiveness/UM +rest/GVMDS +restate/GDS +restaurant/SM +restaurateur/MS +restful/YP +restfuller +restfullest +restfulness/M +restitution/M +restive/YP +restiveness/M +restless/PY +restlessness/M +restoration/SM +restorative/SM +restorer/SM +restrained/U +restraint/MS +restrict/SDGV +restricted/U +restriction/MS +restrictive/YP +restrictiveness/M +restring/SG +restroom/SM +restructuring/SM +result/GSMD +resultant/SM +resume/DSMG +resumption/MS +resupply/DSG +resurgence/MS +resurgent +resurrect/GSD +resurrection/MS +resuscitate/GNDS +resuscitation/M +resuscitator/SM +retailer/MS +retain/SDRZG +retainer/M +retake/G +retaliate/DSGNVX +retaliation/M +retaliatory +retard/SMDRZG +retardant/SM +retardation/M +retarder/M +retch/DSG +reteach/GS +retention/M +retentive/YP +retentiveness/M +rethink/SGM +rethought +reticence/M +reticent/Y +reticulated +reticulation/MS +retina/SM +retinal +retinue/SM +retiree/SM +retirement/MS +retort/GMD +retrace/GDS +retract/DBG +retractile +retraction/S +retrain/DGS +retread/D +retrenchment/MS +retribution/MS +retributive +retrieval/SM +retrieve/DRSMZGB +retriever/M +retro/MS +retroactive/Y +retrofire/GDS +retrofit/SM +retrofitted +retrofitting +retrograde/DSG +retrogress/GVDS +retrogression/M +retrorocket/MS +retrospect/MDSGV +retrospection/M +retrospective/MYS +retrovirus/MS +retsina/M +returnable/SM +returnee/SM +rev/ZVM +revamping/M +reveal/GJSD +revealed/U +revealing/Y +reveille/M +revel/MS +revelation/SM +revelled +reveller/SM +revelling/S +revelry/SM +revenge/MGDS +revenuer/SM +reverb +reverberate/DSGNX +reverberation/M +revere/DSG +reverence/DSMG +reverend/SM +reverent/Y +reverential/Y +reverie/MS +revers/M +reversal/SM +reverse/Y +reversibility +reversible +reversibly +revert/GSD +revertible +revetment/SM +revile/DRSLZG +revilement/M +reviler/M +reviser/MS +revision/SM +revisionism/M +revisionist/SM +revival/MS +revivalism/M +revivalist/SM +revive/DSG +revivification/M +revocable +revoke/DSG +revolt/GD +revolting/Y +revolution/SM +revolutionary/SM +revolutionise/DSG +revolutionist/SM +revolve/BZGDRS +revolver/M +revue/MS +revulsion/M +revved +revving +rewarded/U +rewarding/U +rewarm/GSD +rewash/GDS +reweave/GS +rewedding +rewind/MB +rewound +rewrite/MGS +rhapsodic +rhapsodical +rhapsodise/GDS +rhapsody/SM +rhea/MS +rhenium/M +rheostat/SM +rhesus/MS +rhetoric/M +rhetorical/Y +rhetorician/SM +rheum/M +rheumatic/MS +rheumatically +rheumatism/M +rheumatoid +rheumy +rhinestone/SM +rhinitis/M +rhino/MS +rhinoceros/MS +rhinoplasty +rhinovirus/MS +rhizome/MS +rho/SM +rhodium/M +rhododendron/SM +rhomboid/SM +rhomboidal +rhombus/MS +rhubarb/MS +rhyme/MZGDRS +rhymer/M +rhymester/MS +rhythm/SM +rhythmic +rhythmical/Y +rial/MS +rib/SM +ribald +ribaldry/M +ribbed +ribber/SM +ribbing +ribbon/SM +riboflavin/M +rice/MZGDRS +ricer/M +rich/TMRSYP +richness/M +rick/GMDS +rickets/M +rickety/RT +rickrack/M +rickshaw/MS +ricochet/GMDS +ricotta/M +rid/S +riddance/M +ridden +ridding +riddle/DSMG +ride/MZGRS +rider/M +riderless +ridership/M +ridge/MGDS +ridgepole/SM +ridgy +ridicule/MGDS +ridiculous/YP +ridiculousness/M +riding/M +rife/TR +riff/GMDS +riffle/DSMG +riffraff/M +rifle/MZGDRS +rifleman/M +riflemen +rifler/M +rifling/M +rift/GMDS +rig/SM +rigatoni/M +rigged +rigger/SM +rigging/M +right/MDRYSPTG +righteous/UP +righteously +righteousness/UM +rightful/PY +rightfulness/M +rightism/M +rightist/SM +rightmost +rightness/M +righto +rightsize/DSG +rightward/S +rigid/YP +rigidity/M +rigidness/M +rigmarole/MS +rigorous/YP +rigorousness/M +rigour/SM +rile/GDS +rill/MS +rim/SGMD +rime/MS +rimless +rimmed +rimming +rind/MS +ring/ZGMDRJ +ringer/M +ringgit/MS +ringleader/MS +ringlet/MS +ringlike +ringmaster/MS +ringside/M +ringtone/SM +ringworm/M +rink/MS +rinse/MGDS +riot/ZGMDRS +rioter/M +rioting/M +riotous/PY +rip/SXTMNR +riparian +ripcord/MS +ripe/YP +ripen/DG +ripened/U +ripeness/M +ripoff/SM +riposte/MGDS +ripped +ripper/SM +ripping +ripple/DSMG +ripply +ripsaw/SM +riptide/MS +rise/JMZGRS +risen +riser/M +risibility/M +risible +rising/M +risk/GMDS +riskily +riskiness/M +risky/RPT +risotto/MS +risque +rissole/S +rite/MS +ritual/SMY +ritualised +ritualism/M +ritualistic +ritualistically +ritzy/RT +riv/ZNR +rival/MS +rivalled/U +rivalling +rivalry/SM +rive/CGDS +river/M +riverbank/SM +riverbed/MS +riverboat/SM +riverfront +riverside/MS +rivet/MDRSZG +riveter/M +riviera/S +rivulet/MS +riyal/MS +rm +roach/GMDS +road/IMS +roadbed/SM +roadblock/MDSG +roadhouse/SM +roadie/MS +roadkill/M +roadrunner/SM +roadshow/SM +roadside/SM +roadster/SM +roadway/SM +roadwork/SM +roadworthy +roam/ZGDRS +roamer/M +roaming/M +roan/MS +roar/ZGMDRS +roarer/M +roaring/M +roast/ZGMDRSJ +roaster/M +roasting/M +rob/S +robbed +robber/MS +robbery/SM +robbing +robe's +robe/EGDS +robin/MS +robocall/SGMD +robot/MS +robotic/S +robotics/M +robotise/GDS +robust/RYPT +robustness/M +rock/ZGMDRS +rockabilly/M +rockbound +rocker/M +rockery/S +rocket/MDSG +rocketry/M +rockfall/SM +rockiness/M +rocky/TRP +rococo/M +rod/SM +rode +rodent/MS +rodeo/MS +roe/SM +roebuck/SM +roentgen/MS +roger/GDS +rogue's +rogue/KS +roguery/M +roguish/YP +roguishness/M +roil/GDS +roister/ZGDRS +roisterer/M +role/MS +roll/MDRZGJS +rollback/SM +roller/M +rollerblading +rollerskating/M +rollick/SDG +rollicking/M +rollmop/S +rollover/SM +romaine/MS +roman/M +romance/MZGDRS +romancer/M +romantic/MS +romantically +romanticise/DSG +romanticism/M +romanticist/SM +romeo/MS +romp/MDRZGS +romper/M +rondo/SM +rood/MS +roof/MDRZGS +roofer/M +roofing/M +roofless +rooftop/SM +rook/MDGS +rookery/SM +rookie/SM +room/MDRZGS +roomer/M +roomette/SM +roomful/SM +roominess/M +roommate/SM +roomy/RTP +roost/SMDRZG +rooster/M +root/MDRZGS +rooter/M +rootkit/SM +rootless/P +rootlet/SM +rope/MZGDRS +roper/M +ropy/RT +rosary/SM +rose/MS +roseate +rosebud/SM +rosebush/MS +rosemary/M +rosette/SM +rosewater/M +rosewood/MS +rosily +rosin/SMDG +rosiness/M +roster/SM +rostrum/MS +rosy/RTP +rot/SM +rota/S +rotary/SM +rotate/DSGNX +rotation/M +rotational +rotatory +rote/M +rotgut/M +rotisserie/SM +rotogravure/MS +rotor/SM +rototiller/MS +rotted +rotten/TPRY +rottenness/M +rotter/S +rotting +rottweiler/S +rotund/P +rotunda/MS +rotundity/M +rotundness/M +rouble/SM +roue/MS +rouge/DSMG +rough/MDNRYXTGP +roughage/M +roughcast +roughen/GD +roughhouse/MGDS +roughneck/GMDS +roughness/M +roughs +roughshod +roulette/M +round/PSMDRYZTG +roundabout/SM +roundel/S +roundelay/MS +roundhouse/SM +roundish +roundness/M +roundup/MS +roundworm/SM +rouse/DSG +roust/SDG +roustabout/SM +rout/MRZS +route's +route/ADSG +routeing +router/M +routine/MYS +routinise/GDS +roux +rove/ZGDRS +rover/M +row/SZGMDR +rowan/S +rowboat/MS +rowdily +rowdiness/M +rowdy/PRSMT +rowdyism/M +rowel/SM +rowelled +rowelling +rower/M +rowing/M +rowlock/S +royal/SMY +royalist/SM +royalties/M +royalty/SM +rpm +rps +rt +rte +rub/SM +rubato/SM +rubbed +rubber/SM +rubberise/GDS +rubberneck/MDRSZG +rubbernecker/M +rubbery +rubbing/S +rubbish/MDSG +rubbishy +rubble/M +rubdown/SM +rube/MS +rubella/M +rubicund +rubidium/M +rubric/SM +ruby/RSMT +ruched +ruck/DGS +rucksack/MS +ruckus/MS +ructions +rudder/SM +rudderless +ruddiness/M +ruddy/RTP +rude/YTRP +rudeness/M +rudiment/SM +rudimentary +rue/DSMG +rueful/PY +ruefulness/M +ruff/MDYGS +ruffian/MYS +ruffle/DSMG +ruffled/U +rug/SM +rugby/M +rugged/PTRY +ruggedness/M +rugger +rugrat/SM +ruin/MDGS +ruination/M +ruinous/Y +rule/MZGJDRS +ruler/M +ruling/M +rum/SM +rumba/SMDG +rumble/DSJMG +rumbling/M +rumbustious +ruminant/MS +ruminate/XGNVDS +rumination/M +ruminative/Y +rummage/DSMG +rummer +rummest +rummy/M +rumour/SMDG +rumourmonger/SM +rump/MYS +rumple/DSMG +rumpus/MS +run/ASM +runabout/MS +runaround/SM +runaway/MS +rundown/SM +rune/MS +rung/MS +runic +runlet/SM +runnel/SM +runner/SM +running/M +runny/RT +runoff/SM +runt/MS +runty/RT +runway/SM +rupee/SM +rupiah/M +rupiahs +rupture/MGDS +rural +ruse/MS +rush/MDRSZG +rusher/M +rushy +rusk/MS +russet/SM +rust/MDGS +rustic/SM +rustically +rusticate/GDS +rustication/M +rusticity/M +rustiness/M +rustle/DRSJMZG +rustler/M +rustproof/SDG +rusty/RPNT +rut/SM +rutabaga/SM +ruthenium/M +rutherfordium/M +ruthless/YP +ruthlessness/M +rutted +rutting +rutty/RT +rye/M +s/NYXB +sabbath/M +sabbaths +sabbatical/SM +sable/MS +sabot/MS +sabotage/DSMG +saboteur/SM +sabra/MS +sabre/MS +sac/SM +saccharin/M +saccharine +sacerdotal +sachem/SM +sachet/SM +sack/ZGMDRJS +sackcloth/M +sacker/M +sackful/MS +sacking/M +sacra +sacrament/MS +sacramental +sacred/YP +sacredness/M +sacrifice/DSMG +sacrificial/Y +sacrilege/MS +sacrilegious/Y +sacristan/MS +sacristy/SM +sacroiliac/MS +sacrosanct/P +sacrosanctness/M +sacrum/M +sad/PY +sadden/SDG +sadder +saddest +saddle's +saddle/UDSG +saddlebag/MS +saddler/S +saddlery +sades +sadhu/S +sadism/M +sadist/SM +sadistic +sadistically +sadness/M +sadomasochism/M +sadomasochist/MS +sadomasochistic +safari/SGMD +safe/MYTPRS +safeguard/SMDG +safekeeping/M +safeness/M +safety/SM +safflower/MS +saffron/MS +sag/SM +saga/MS +sagacious/Y +sagacity/M +sage/MYTRS +sagebrush/M +sagged +sagging +saggy/RT +sago/M +saguaro/MS +sahib/MS +said/U +sail/GMDSJ +sailboard/MRZGS +sailboarder/M +sailboarding/M +sailboat/MS +sailcloth/M +sailfish/MS +sailing/M +sailor/SM +sailplane/MS +saint/MDYS +sainthood/M +saintlike +saintliness/M +saintly/PRT +saith +sake/M +saki/M +salaam/SMDG +salacious/PY +salaciousness/M +salacity/M +salad/MS +salamander/SM +salami/SM +salary/DSM +sale/AMS +saleable/U +saleroom/S +salesclerk/SM +salesgirl/SM +saleslady/SM +salesman/M +salesmanship/M +salesmen +salespeople/M +salesperson/MS +salesroom/S +saleswoman/M +saleswomen +salience/M +salient/SMY +saline/SM +salinity/M +saliva/M +salivary +salivate/GNDS +salivation/M +sallow/RTP +sallowness/M +sally/DSMG +salmon/SM +salmonella/M +salmonellae +salon/MS +saloon/SM +salsa/MS +salt's +salt/CTGDS +saltbox/MS +saltcellar/SM +salted/U +salter +saltine/SM +saltiness/M +saltpetre/M +saltshaker/SM +saltwater/M +salty/RTP +salubrious/I +salutary +salutation/MS +salutatorian/MS +salutatory +salute/DSMG +salvage/DSMG +salvageable +salvation/M +salve/MZGDRS +salver/M +salvo/MS +samarium/M +samba/MDSG +same/SP +sameness/M +samey +samizdat/S +samosa/S +samovar/SM +sampan/SM +sample/DRSMZGJ +sampler/M +sampling/M +samurai/SM +sanatorium/SM +sanctification/M +sanctify/GDSN +sanctimonious/YP +sanctimoniousness/M +sanctimony/M +sanction/GSMD +sanctioned/U +sanctity/M +sanctuary/SM +sanctum/SM +sand/ZGMDRS +sandal/SM +sandalwood/M +sandbag/SM +sandbagged +sandbagger/SM +sandbagging +sandbank/MS +sandbar/SM +sandblast/ZGMDRS +sandblaster/M +sandbox/MS +sandcastle/MS +sander/M +sandhog/SM +sandiness/M +sandlot/SM +sandlotter/MS +sandman/M +sandmen +sandpaper/GMDS +sandpiper/MS +sandpit/S +sandstone/M +sandstorm/SM +sandwich/MDSG +sandy/RTP +sane/IYTR +saneness/M +sang/S +sangfroid/M +sangria/M +sanguinary +sanguine/Y +sanitarian/SM +sanitarium/SM +sanitary/IU +sanitation/M +sanitise/GDS +sanity/IM +sank +sans +sanserif +sap/SM +sapience/M +sapiens +sapient +sapless +sapling/MS +sapped +sapper/S +sapphire/SM +sappiness/M +sapping +sappy/PRT +saprophyte/SM +saprophytic +sapsucker/SM +sapwood/M +saran/M +sarcasm/MS +sarcastic +sarcastically +sarcoma/MS +sarcophagi +sarcophagus/M +sardine/MS +sardonic +sardonically +sarge/MS +sari/MS +sarky +sarnie/S +sarong/SM +sarsaparilla/MS +sartorial/Y +sash/MS +sashay/SGMD +sass/GMDS +sassafras/MS +sassy/RT +sat +satanic +satanical/Y +satanism/M +satanist/MS +satay +satchel/MS +sate/GDS +sateen/M +satellite/DSMG +satiable/I +satiate/GNDS +satiation/M +satiety/M +satin/M +satinwood/SM +satiny +satire/SM +satiric +satirical/Y +satirise/DSG +satirist/SM +satisfaction/EM +satisfactions +satisfactorily/U +satisfactory/U +satisfied/U +satisfy/EDSG +satisfying/U +satisfyingly +satori/M +satrap/SM +satsuma/S +saturate/DSGN +saturated/U +saturation/M +saturnine +satyr/MS +satyriasis/M +satyric +sauce/MZGDRS +saucepan/SM +saucer/M +saucily +sauciness/M +saucy/RPT +sauerkraut/M +sauna/MDSG +saunter/MDGS +saurian +sauropod/SM +sausage/MS +saute/MS +sauteed +sauteing +savage/DRSMYTGP +savageness/M +savagery/SM +savanna/MS +savant/SM +save/BJMZGDRS +saved/U +saver/M +saving/M +savings/M +saviour/MS +savour/SGMD +savouriness/M +savoury/TRSMP +savoy/MS +savvy/DRSMTG +saw/SGMD +sawbones/M +sawbuck/MS +sawdust/M +sawfly/SM +sawhorse/SM +sawmill/MS +sawyer/SM +sax/MS +saxifrage/SM +saxophone/MS +saxophonist/SM +say's +say/USG +saying/SM +scab/MS +scabbard/MS +scabbed +scabbiness/M +scabbing +scabby/PTR +scabies/M +scabrous +scad/MS +scaffold/SMG +scaffolding/M +scag/S +scagged +scalar/S +scalawag/MS +scald/MDSG +scale's +scale/CGDS +scaleless +scalene +scaliness/M +scallion/MS +scallop/GSMD +scalp/MDRSZG +scalpel/SM +scalper/M +scaly/RTP +scam/MS +scammed +scammer/S +scamming +scamp/MRSZ +scamper/GMD +scampi/M +scan/MS +scandal/SM +scandalise/DSG +scandalmonger/SM +scandalous/Y +scandium/M +scanned +scanner/SM +scanning +scansion/M +scant/CDSTG +scanter +scantily +scantiness/M +scantly +scantness/M +scanty/RSPT +scapegoat/SGMD +scapegrace/MS +scapula/M +scapulae +scapular/SM +scar/GMDS +scarab/SM +scarce/RYTP +scarceness/M +scarcity/SM +scare/MS +scarecrow/MS +scaremonger/SMG +scarf/MDSG +scarification/M +scarify/NDSG +scarily +scariness/M +scarlatina/M +scarlet/M +scarp/MDRSZG +scarper/DG +scarred +scarring +scarves +scary/RTP +scat/MS +scathing/Y +scatological +scatology/M +scatted +scatter/GJSMD +scatterbrain/SMD +scattering/M +scattershot +scatting +scatty +scavenge/ZGDRS +scavenger/M +scenario/MS +scenarist/MS +scene/MS +scenery/M +scenic +scenically +scent/CMS +scented/U +scenting +scentless +sceptic/MS +sceptical/Y +scepticism/M +sceptre/MS +sch +schadenfreude +schedule's +schedule/ADSG +scheduled/U +scheduler/S +schema +schemata +schematic/SM +schematically +schematise/GDS +scheme/DRSMZG +schemer/M +scherzo/MS +schilling/MS +schism/SM +schismatic/SM +schist/M +schizo/SM +schizoid/MS +schizophrenia/M +schizophrenic/SM +schlemiel/SM +schlep/SM +schlepped +schlepping +schlock/M +schmaltz/M +schmaltzy/TR +schmo/M +schmoes +schmooze/DRSZG +schmuck/MS +schnapps/M +schnauzer/SM +schnitzel/SM +schnook/MS +schnoz/MS +schnozzle/SM +scholar/MYS +scholarship/MS +scholastic +scholastically +scholasticism +school/SGMD +schoolbag/MS +schoolbook/SM +schoolboy/MS +schoolchild/M +schoolchildren/M +schooldays +schooled/U +schoolfellow/SM +schoolgirl/SM +schoolhouse/SM +schooling/M +schoolkid/S +schoolmarm/SM +schoolmarmish +schoolmaster/MS +schoolmate/SM +schoolmistress/MS +schoolroom/SM +schoolteacher/MS +schoolwork/M +schoolyard/SM +schooner/SM +schuss/GMDS +schussboomer/MS +schwa/MS +sci +sciatic +sciatica/M +science/FMS +scientific/U +scientifically/U +scientist/SM +scimitar/SM +scintilla/MS +scintillate/DSGN +scintillation/M +scion/MS +scissor/GDS +scleroses +sclerosis/M +sclerotic +scoff/MDRSZG +scoffer/M +scofflaw/MS +scold/MDSGJ +scolding/M +scoliosis/M +sconce/SM +scone/MS +scoop/MDSG +scoopful/MS +scoot/DRSZG +scooter/M +scope/MGDS +scorbutic +scorch/MDRSZG +scorcher/M +score/MZGDRS +scoreboard/SM +scorecard/MS +scorekeeper/MS +scoreless +scoreline/S +scorer/M +scorn/MDRSZG +scorner/M +scornful/Y +scorpion/MS +scotch/MDSG +scotchs +scoundrel/MS +scour/DRSZG +scourer/M +scourge/DSMG +scout/MDRSZG +scouting/M +scoutmaster/MS +scow/MS +scowl/MDSG +scrabble/MZGDRS +scrabbler/M +scrag/MS +scraggly/RT +scraggy/TR +scram/S +scramble's +scramble/UGDS +scrambler/MS +scrammed +scramming +scrap/MDRSZGJ +scrapbook/SM +scrape/SM +scraper/M +scrapheap/SM +scrapie +scrapped +scrapper/MS +scrapping +scrappy/TR +scrapyard/SM +scratch/GMDS +scratchcard/S +scratched/U +scratchily +scratchiness/M +scratchpad/S +scratchy/PRT +scrawl/SMDG +scrawly +scrawniness/M +scrawny/PTR +scream/SMDRZG +screamer/M +screaming/Y +scree/MDS +screech/GMDS +screechy/TR +screed/S +screen/SJMDG +screening/M +screenplay/SM +screensaver/SM +screenshot/S +screenwriter/SM +screenwriting/M +screw's +screw/UDSG +screwball/MS +screwdriver/MS +screwiness/M +screwworm/SM +screwy/PRT +scribal +scribble/MZGDRS +scribbler/M +scribe's +scribe/CKIS +scrim/MS +scrimmage/MGDS +scrimp/SDG +scrimshaw/MDGS +scrip/MS +script/FSMDG +scripted/U +scriptural +scripture/MS +scriptwriter/SM +scrivener/SM +scrod/M +scrofula/M +scrofulous +scrog/S +scroll/GSMD +scrooge/MS +scrota +scrotal +scrotum/M +scrounge/DRSZG +scrounger/M +scroungy/TR +scrub/MS +scrubbed +scrubber/SM +scrubbing +scrubby/RT +scruff/SM +scruffily +scruffiness/M +scruffy/RPT +scrum/S +scrumhalf +scrumhalves +scrummage/S +scrummed +scrumming +scrump/SGD +scrumptious/Y +scrumpy +scrunch/MDSG +scrunchy/SM +scruple/MGDS +scrupulosity/M +scrupulous/UPY +scrupulousness/UM +scrutineer/S +scrutinise/GDS +scrutiny/M +scuba/MDSG +scud/MS +scudded +scudding +scuff/MDSG +scuffle/MGDS +scull/MDRSZG +sculler/M +scullery/SM +scullion/SM +sculpt/SGD +sculptor/SM +sculptress/MS +sculptural +sculpture/DSMG +scum/MS +scumbag/MS +scummed +scumming +scummy/TR +scupper/MDGS +scurf/M +scurfy +scurrility/M +scurrilous/PY +scurrilousness/M +scurry/GDSM +scurvily +scurvy/TRM +scutcheon/SM +scuttle/MGDS +scuttlebutt/M +scuzzy/TR +scythe/DSMG +sea/SM +seabed/SM +seabird/MS +seaboard/SM +seaborne +seacoast/SM +seafarer/SM +seafaring/M +seafloor/SM +seafood/M +seafront/SM +seagoing +seagull/MS +seahorse/MS +seal's +seal/AUSDG +sealant/MS +sealer/SM +sealskin/M +seam/GMDNS +seaman/M +seamanship/M +seamless/Y +seamount/MS +seamstress/MS +seamy/RT +seance/SM +seaplane/SM +seaport/MS +sear/GMDS +search/AZGMDRS +searcher/AM +searching/Y +searchlight/MS +searing/Y +seascape/SM +seashell/SM +seashore/SM +seasick/P +seasickness/M +seaside/MS +season/SGMDBJ +seasonable/U +seasonably/U +seasonal/Y +seasonality +seasoned/U +seasoning/M +seat's +seat/UGDS +seating/M +seatmate/SM +seawall/MS +seaward/MS +seawater/M +seaway/SM +seaweed/MS +seaworthiness/M +seaworthy/P +sebaceous +seborrhoea/M +sebum +sec'y +sec/SM +secant/SM +secateurs +secede/DSG +secession/M +secessionist/MS +seclude/GDS +seclusion/M +seclusive +second/SLZGMDRY +secondarily +secondary/SM +seconder/M +secondhand +secondment/S +secrecy/M +secret/SGVMDY +secretarial +secretariat/MS +secretary/SM +secretaryship/M +secrete/XNS +secretion/M +secretive/PY +secretiveness/M +secretory +sect/IMS +sectarian/MS +sectarianism/M +sectary/SM +section/AESM +sectional/MS +sectionalism/M +sectioned +sectioning +sector/ESM +secular +secularisation/M +secularise/DSG +secularism/M +secularist/SM +secure/DRSYTG +secured/U +security/ISM +secy +sedan/MS +sedate/DRSYTGNVP +sedateness/M +sedation/M +sedative/SM +sedentary +sedge/M +sedgy +sediment/MS +sedimentary +sedimentation/M +sedition/M +seditious +seduce/DRSZG +seducer/M +seduction/SM +seductive/YP +seductiveness/M +seductress/MS +sedulous/Y +see/RSMZ +seed's +seed/AGDS +seedbed/MS +seedcase/MS +seeded/U +seeder/SM +seediness/M +seedless +seedling/MS +seedpod/MS +seedy/RPT +seeing/S +seek/ZGRS +seeker/M +seem/GDS +seeming/Y +seemliness/UM +seemly/URTP +seen/U +seep/GDS +seepage/M +seer/M +seersucker/M +seesaw/SMDG +seethe/DSG +segfault/S +segment/GSMD +segmentation/M +segmented/U +segregate/CDSGN +segregated/U +segregation/CM +segregationist/MS +segue/MGDS +segueing +seigneur/SM +seignior/SM +seine/MZGDRS +seiner/M +seismic +seismically +seismograph/ZMR +seismographer/M +seismographic +seismographs +seismography/M +seismologic +seismological +seismologist/MS +seismology/M +seize/GDS +seizure/MS +seldom +select/CSGVD +selection/SM +selective/Y +selectivity/M +selectman/M +selectmen +selectness/M +selector/MS +selenium/M +selenographer/MS +selenography/M +self/M +selfie/SM +selfish/UYP +selfishness/UM +selfless/PY +selflessness/M +selfsame +sell/ZGMRS +seller/M +selloff/MS +sellotape/DSG +sellout/MS +seltzer/MS +selvage/MS +selves +semantic/S +semantically +semanticist/MS +semantics/M +semaphore/DSMG +semblance/ASM +semen/M +semester/SM +semi/MS +semiannual/Y +semiarid +semiautomatic/MS +semibreve/S +semicircle/SM +semicircular +semicolon/MS +semiconducting +semiconductor/MS +semiconscious +semidarkness/M +semidetached +semifinal/SM +semifinalist/MS +semigloss/S +semimonthly/SM +seminal +seminar/MS +seminarian/SM +seminary/SM +semiofficial +semiotic/S +semiotics/M +semipermeable +semiprecious +semiprivate +semipro/S +semiprofessional/SM +semiquaver/S +semiretired +semiskilled +semisolid +semisweet +semitone/SM +semitrailer/MS +semitransparent +semitropical +semivowel/SM +semiweekly/SM +semiyearly +semolina/M +sempstress/MS +senate/SM +senator/MS +senatorial +send/ZGRS +sender/M +sendoff/MS +senescence/M +senescent +senile +senility/M +senior/SM +seniority/M +senna/M +senor/MS +senora/SM +senorita/SM +sensation/MS +sensational/Y +sensationalise/GDS +sensationalism/M +sensationalist/MS +sense/MGDS +senseless/PY +senselessness/M +sensibilities +sensibility/IM +sensible/P +sensibleness/M +sensibly/I +sensitisation/CM +sensitise/CDSG +sensitive/SMYP +sensitiveness/M +sensitivities +sensitivity/IM +sensor/SM +sensory +sensual/Y +sensualist/SM +sensuality/M +sensuous/YP +sensuousness/M +sent/FAU +sentence/MGDS +sententious/Y +sentience/IM +sentient/I +sentiment/SM +sentimental/Y +sentimentalisation/M +sentimentalise/GDS +sentimentalism/M +sentimentalist/MS +sentimentality/M +sentinel/MS +sentry/SM +sepal/MS +separability/IM +separable +separably/I +separate/XMYGNVDSP +separateness/M +separation/M +separatism/M +separatist/MS +separator/MS +sepia/M +sepsis/M +septa +septal +septet/SM +septic +septicaemia/M +septicaemic +septuagenarian/MS +septum/M +sepulchral +sepulchre/MGDS +seq +sequel/SM +sequence/MZGDRS +sequencing/M +sequential/FY +sequester/SDG +sequestrate/XGNDS +sequestration/M +sequin/SMD +sequinned +sequitur +sequoia/MS +seraglio/MS +serape/SM +seraph/M +seraphic +seraphs +sere/TR +serenade/MGDS +serendipitous +serendipity/M +serene/RPYT +sereneness/M +serenity/M +serf/MS +serfdom/M +serge/M +sergeant/MS +serial/SMY +serialisation/SM +serialise/GDS +series/M +serif/MS +serigraph/M +serigraphs +serine +serious/PY +seriousness/M +sermon/SM +sermonise/GDS +serology/M +serotonin +serous +serpent/MS +serpentine/M +serrate/XND +serration/M +serried +serum/MS +servant/MS +serve's/AF +serve/FACGDS +server/SM +servery/S +service/EMS +serviceability/M +serviceable +serviced +serviceman/M +servicemen +servicewoman/M +servicewomen +servicing +serviette/MS +servile +servility/M +serving's +servings +servitor/MS +servitude/M +servo/MS +servomechanism/SM +servomotor/MS +sesame/SM +sesquicentennial/MS +session/MS +set/AISM +setback/MS +setscrew/SM +setsquare/S +sett/BJZGRS +settee/MS +setter/M +setting/M +settle's +settle/AUGDS +settlement/AM +settlements +settler/SM +setup/MS +seven/MHS +seventeen/SMH +seventeenth/M +seventeenths +seventh/M +sevenths +seventieth/M +seventieths +seventy/SMH +sever/ETGDS +several/MY +severance/SM +severe/YPR +severeness/M +severity/M +sew/ASGD +sewage/M +sewer/MS +sewerage/M +sewing/M +sewn/A +sex/GMDS +sexagenarian/SM +sexily +sexiness/M +sexism/M +sexist/MS +sexless +sexologist/SM +sexology/M +sexpot/MS +sextant/SM +sextet/MS +sexting +sexton/MS +sextuplet/SM +sexual/Y +sexuality/M +sexy/PTR +sf +sh +shabbily +shabbiness/M +shabby/PTR +shack/MDSG +shackle's +shackle/UGDS +shad/GMDSJ +shade/MS +shadily +shadiness/M +shading/M +shadow/SGMD +shadowbox/GDS +shadowy/RT +shady/RPT +shaft/MDSG +shag/MS +shagged +shagginess/M +shagging +shaggy/TPR +shah/M +shahs +shake/MZGRS +shakedown/SM +shaken/U +shakeout/MS +shaker/M +shakeup/MS +shakily +shakiness/M +shaky/RPT +shale/M +shall +shallot/MS +shallow/TPMRYS +shallowness/M +shalom +shalt +sham/GMDS +shaman/SM +shamanic +shamanism +shamanistic +shamble/MGDS +shambles/M +shambolic +shame/MS +shamefaced/Y +shameful/PY +shamefulness/M +shameless/YP +shamelessness/M +shammed +shamming +shampoo/ZGMDRS +shampooer/M +shamrock/MS +shan't +shandy/S +shanghai/DSG +shank/MS +shantung/M +shanty/SM +shantytown/SM +shape's +shape/AGDS +shaped/U +shapeless/YP +shapelessness/M +shapeliness/M +shapely/PTR +shard/MS +share/MZGDRS +shareable +sharecrop/S +sharecropped +sharecropper/MS +sharecropping +shareholder/SM +shareholding/S +sharer/M +shareware/M +sharia/M +shariah +shark/MDSG +sharkskin/M +sharp/MDNRYSPXZTG +sharpen/ADGS +sharpener/MS +sharper/M +sharpie/MS +sharpish +sharpness/M +sharpshooter/SM +sharpshooting/M +shatter/GMDS +shatterproof +shave/MZGDRSJ +shaven/U +shaver/M +shaving/M +shawl/MS +shay/MS +she'd +she'll +she/DSM +sheaf/M +shear/MDRSZG +shearer/M +sheath/JM +sheathe/UGDS +sheathing/M +sheaths +sheave/DSMG +shebang/MS +shebeen/S +shed/MS +shedding +sheen/M +sheeny/TR +sheep/M +sheepdog/MS +sheepfold/SM +sheepherder/MS +sheepish/YP +sheepishness/M +sheepskin/MS +sheer/MDRSPTG +sheerness/M +sheet/MSG +sheeting/M +sheetlike +sheikdom/MS +sheikh/M +sheikhs +sheila/S +shekel/SM +shelf/M +shell/MDRSG +shellac/MS +shellacked +shellacking/MS +shellfire/M +shellfish/MS +shelter/GMDS +shelve/GDS +shelving/M +shenanigan/SM +shepherd/SMDG +shepherdess/MS +sherbet/SM +sheriff/SM +sherry/SM +shew/GDS +shewn +shh +shiatsu/M +shibboleth/M +shibboleths +shield/MDGS +shift/GMDS +shiftily +shiftiness/M +shiftless/PY +shiftlessness/M +shifty/RPT +shiitake/SM +shill/GMDSJ +shillelagh/M +shillelaghs +shilling/M +shim/MS +shimmed +shimmer/SMDG +shimmery +shimming +shimmy/DSMG +shin/ZGMDRS +shinbone/SM +shindig/SM +shine/MS +shiner/M +shingle/DSMG +shinguard/M +shininess/M +shinned +shinning +shinny/DSG +shinsplints/M +shiny/TRP +ship's +ship/ALS +shipboard/MS +shipbuilder/SM +shipbuilding/M +shipload/SM +shipmate/SM +shipment/AM +shipments +shipowner/MS +shipped/A +shipper/SM +shipping/M +shipshape +shipwreck/GMDS +shipwright/MS +shipyard/SM +shire/MS +shirk/ZGDRS +shirker/M +shirr/GMDSJ +shirring/M +shirt/GMDS +shirtfront/SM +shirting/M +shirtless +shirtsleeve/SM +shirttail/SM +shirtwaist/MS +shirty +shit/SM! +shitfaced/! +shithead/S! +shitload/! +shitted/! +shitting/! +shitty/RT! +shiv/ZMRS +shiver/MDG +shivery +shoal/GMDS +shoat/MS +shock/ZGMDRS +shocker/M +shocking/Y +shockproof +shod/U +shoddily +shoddiness/M +shoddy/PRMT +shoe/MS +shoehorn/GMDS +shoeing +shoelace/MS +shoemaker/SM +shoeshine/SM +shoestring/SM +shoetree/MS +shogun/MS +shogunate/M +shone +shoo/GDS +shook +shoot/ZGMRSJ +shooter/M +shooting/M +shootout/MS +shop/MS +shopaholic/MS +shopfitter/S +shopfitting +shopfront/S +shopkeeper/MS +shoplift/DRZGS +shoplifter/M +shoplifting/M +shoppe/MZGDRS +shopper/M +shopping/M +shoptalk/M +shopworn +shore/MGDS +shorebird/SM +shoreline/MS +shoring/M +short/XTGMDNRYSP +shortage/MS +shortbread/M +shortcake/MS +shortchange/DSG +shortcoming/MS +shortcrust +shortcut/MS +shorten/JGD +shortening/M +shortfall/MS +shorthand/MD +shorthorn/MS +shortish +shortlist/DGS +shortness/M +shortsighted/PY +shortsightedness/M +shortstop/MS +shortwave/MS +shorty/SM +shot/MS +shotgun/SM +shotgunned +shotgunning +should +should've +shoulder/MDGS +shouldn't +shout/ZGMDRS +shouter/M +shove/MGDS +shovel/MS +shovelful/SM +shovelled +shovelling +show/JZGMDRS +showbiz/M +showboat/MDGS +showcase/MGDS +showdown/MS +shower/MDG +showerproof +showery +showgirl/MS +showground/S +showily +showiness/M +showing/M +showjumping +showman/M +showmanship/M +showmen +shown +showoff/SM +showpiece/SM +showplace/SM +showroom/MS +showstopper/MS +showstopping +showtime +showy/TRP +shpt +shrank +shrapnel/M +shred/MS +shredded +shredder/MS +shredding +shrew/MS +shrewd/RYPT +shrewdness/M +shrewish +shriek/MDSG +shrift/M +shrike/MS +shrill/DRSPTG +shrillness/M +shrilly +shrimp/MDRSZG +shrine/MS +shrink/MSBG +shrinkage/M +shrive/GDS +shrivel/S +shrivelled +shrivelling +shriven +shroud/GMDS +shrub/MS +shrubbery/SM +shrubby/RT +shrug/MS +shrugged +shrugging +shrunk/N +shtick/MS +shuck/GMDS +shucks/S +shudder/MDSG +shuffle/AMGDS +shuffleboard/SM +shuffler/SM +shun/S +shunned +shunning +shunt/MSDG +shush/DSG +shut/S +shutdown/SM +shuteye/M +shutoff/SM +shutout/SM +shutter/SMDG +shutterbug/MS +shutting +shuttle/DSMG +shuttlecock/GMDS +shy/TGDRSMY +shyer +shyest +shyness/M +shyster/SM +sibilant/SM +sibling/SM +sibyl/MS +sibylline +sic/S +sicced +siccing +sick/PXTGDNRYS +sickbay/S +sickbed/SM +sicken/DG +sickening/Y +sickie/MS +sickish +sickle/MS +sickly/RT +sickness/MS +sicko/MS +sickout/SM +sickroom/MS +side's +side/AGDS +sidearm/SM +sidebar/SM +sideboard/SM +sideburns/M +sidecar/SM +sidekick/SM +sidelight/MS +sideline/DSMG +sidelong +sideman/M +sidemen +sidepiece/MS +sidereal +sidesaddle/MS +sideshow/MS +sidesplitting +sidestep/MS +sidestepped +sidestepping +sidestroke/DSMG +sideswipe/DSMG +sidetrack/SMDG +sidewalk/MS +sidewall/MS +sideways +sidewinder/SM +siding/MS +sidle/MGDS +siege/MS +sienna/M +sierra/MS +siesta/MS +sieve/MGDS +sift/ZGDRS +sifted/U +sifter/M +sigh/GMD +sighs +sight/GMDYSJ +sighting/M +sightless +sightly/UTR +sightread +sightseeing/M +sightseer/MS +sigma/MS +sign's/C +sign/AFCGDS +signage/M +signal/MYS +signalisation +signalise/GDS +signalization's +signalled +signaller/MS +signalling +signalman/M +signalmen +signatory/SM +signature/MS +signboard/MS +signed/U +signer/CMS +signet/MS +significance/IM +significant/IY +signification/M +signify/XDSNG +signing's/C +signings +signor/FMS +signora/SM +signore +signori +signorina/MS +signorine +signpost/GSMD +silage/M +silence/DRSMZG +silencer/M +silent/MRYST +silhouette/DSMG +silica/M +silicate/MS +siliceous +silicon/SM +silicone/M +silicosis/M +silk/MNS +silkily +silkiness/M +silkscreen/SM +silkworm/MS +silky/TRP +sill/MS +silliness/M +silly/TRSMP +silo/MS +silt/GMDS +silty/TR +silver/GMDS +silverfish/MS +silversmith/M +silversmiths +silverware/M +silvery +sim/SM +simian/MS +similar/Y +similarity/ESM +simile/MS +similitude/EM +simmer/GMDS +simonise +simonized +simonizes +simonizing +simony/M +simpatico +simper/GMDS +simpering/Y +simple/TRP +simpleminded +simpleness/M +simpleton/SM +simplex +simplicity/M +simplification/M +simplify/DSXNG +simplistic +simplistically +simply +simulacra +simulacrum/S +simulate/EDSGN +simulation/EM +simulations +simulator/EMS +simulcast/GMDS +simultaneity/M +simultaneous/Y +sin/ASM +since +sincere/IYT +sincerer +sincerity/IM +sine/MS +sinecure/MS +sinew/MS +sinewy +sinful/PY +sinfulness/M +sing/BZGMDRYS +singalong/S +singe/MS +singeing +singer/M +singing/M +single/PMGDS +singleness/M +singles/M +singlet/S +singleton/SM +singletree/SM +singsong/SMDG +singular/SMY +singularity/SM +sinister +sink/BZGMRS +sinkable/U +sinker/M +sinkhole/SM +sinless +sinned +sinner/MS +sinning +sinology +sinuosity/M +sinuous/Y +sinus/MS +sinusitis/M +sinusoidal +sip/SM +siphon/GMDS +sipped +sipper/SM +sipping +sir/SXMN +sire/CMGDS +siren/M +sirloin/SM +sirocco/SM +sirrah +sirree/M +sis/MS +sisal/M +sissified +sissy/RSMT +sister/ASM +sisterhood/MS +sisterliness/M +sisterly/P +sit/S +sitar/SM +sitarist/MS +sitcom/SM +site/MGDS +sitemap/SM +sitter/SM +sitting/SM +situate/DSXGN +situation/M +situational +six/MSH +sixfold +sixpence/MS +sixshooter/M +sixteen/SMH +sixteenth/M +sixteenths +sixth/M +sixths +sixtieth/M +sixtieths +sixty/SMH +size's +size/AGDS +sizeable +sizer +sizing/M +sizzle/DRSMZG +ska/M +skate/MZGDRS +skateboard/MDRSZG +skateboarder/M +skateboarding/M +skater/M +skating/M +skedaddle/MGDS +skeet/ZMR +skein/MS +skeletal +skeleton/SM +sketch/MDRSZG +sketchbook/S +sketcher/M +sketchily +sketchiness/M +sketchpad/S +sketchy/RTP +skew/MDRZGS +skewbald/S +skewer/MDG +ski/SZGMDR +skibob/S +skid/MS +skidded +skidding +skidpan/S +skier/M +skiff/SM +skiffle +skiing/M +skilful/YP +skilfulness/M +skill's +skill/CSD +skilled/U +skillet/SM +skim/MS +skimmed +skimmer/SM +skimming +skimp/SDG +skimpily +skimpiness/M +skimpy/RTP +skin/MS +skincare/M +skinflint/MS +skinful +skinhead/MS +skinless +skinned +skinniness/M +skinning +skinny/RMTP +skint +skintight +skip/MS +skipped +skipper/SMDG +skipping +skirmish/ZGMDRS +skirt/SMDG +skit/MS +skitter/GSD +skittish/YP +skittishness/M +skittle/S +skive/DRSZG +skivvy/DSMG +skoal/SM +skua/S +skulduggery/M +skulk/SDRZG +skulker/M +skull/SM +skullcap/MS +skunk/SMDG +sky/GSM +skycap/SM +skydive/DRSZG +skydiver/M +skydiving/M +skyjack/JZGSDR +skyjacker/M +skyjacking/M +skylark/SGMD +skylight/MS +skyline/SM +skyrocket/GSMD +skyscraper/SM +skyward/S +skywriter/SM +skywriting/M +slab/MS +slabbed +slabbing +slack/PXZTGMDNRYS +slacken/DG +slacker/M +slackness/M +slacks/M +slag/MS +slagged +slagging +slagheap/S +slain +slake/GDS +slalom/MSDG +slam/MS +slammed +slammer/SM +slamming +slander/MZGDRS +slanderer/M +slanderous +slang/M +slangy/RT +slant/MSDG +slanting/Y +slantwise +slap/MS +slapdash +slaphappy +slapped +slapper/S +slapping +slapstick/M +slash/MDRSZG +slasher/M +slat/MDGS +slate/SM +slather/SDG +slatted +slattern/SMY +slaughter/MDRZGS +slaughterer/M +slaughterhouse/MS +slave/DRSMZG +slaveholder/MS +slaver/MDG +slavery/M +slavish/PY +slavishness/M +slaw/M +slay/DRZGJS +slayer/M +slaying/M +sleaze/SM +sleazebag/S +sleazeball/S +sleazily +sleaziness/M +sleazy/PRT +sled/MS +sledded +sledder/SM +sledding +sledge/DSMG +sledgehammer/GSMD +sleek/SDRYTGP +sleekness/M +sleep/SMRZG +sleeper/M +sleepily +sleepiness/M +sleepless/PY +sleeplessness/M +sleepover/SM +sleepwalk/ZGSDR +sleepwalker/M +sleepwalking/M +sleepwear/M +sleepy/RPT +sleepyhead/MS +sleet/SMDG +sleety +sleeve/DSM +sleeveless +sleigh/MDG +sleighs +sleight/SM +slender/PRT +slenderise/DSG +slenderness/M +slept +sleuth/MG +sleuths +slew/MDGS +slice/DRSMZG +slicer/M +slick/SMDRYZTGP +slicker/M +slickness/M +slid +slide/RSMZG +slider/M +slideshow/MS +slight/SMDRYTGP +slightness/M +slim/PS +slime/M +sliminess/M +slimline +slimmed +slimmer/S +slimmest +slimming/M +slimness/M +slimy/RTP +sling/SMG +slingback/S +slingshot/SM +slink/SG +slinky/RT +slip/MS +slipcase/MS +slipcover/MS +slipknot/MS +slippage/MS +slipped +slipper/SM +slipperiness/M +slippery/PRT +slipping +slippy +slipshod +slipstream/SM +slipway/SM +slit/MS +slither/SGMD +slithery +slitter +slitting +sliver/GSMD +slob/MS +slobbed +slobber/MDSG +slobbery +slobbing +sloe/MS +slog/MS +slogan/SM +sloganeering +slogged +slogging +sloop/SM +slop/MDGS +slope/SM +slopped +sloppily +sloppiness/M +slopping +sloppy/PTR +slops/M +slosh/DSG +slot/MS +sloth/M +slothful/YP +slothfulness/M +sloths +slotted +slotting +slouch/ZGMDRS +sloucher/M +slouchy/TR +slough/GMD +sloughs +sloven/SMY +slovenliness/M +slovenly/PTR +slow/DRYTGSP +slowcoach/S +slowdown/SM +slowness/M +slowpoke/SM +sludge/M +sludgy/RT +slue/MGDS +slug/MS +sluggard/MS +slugged +slugger/SM +slugging +sluggish/PY +sluggishness/M +sluice/DSMG +slum/MS +slumber/GSMD +slumberous +slumdog/SM +slumlord/MS +slummed +slummer +slumming +slummy/RT +slump/SMDG +slung +slunk +slur/MS +slurp/SMDG +slurred +slurring +slurry/M +slush/M +slushiness/M +slushy/RPT +slut/MS +sluttish +slutty/RT +sly/Y +slyer +slyest +slyness/M +smack/SMDRZG +smacker/M +small/SMRTP +smallholder/S +smallholding/S +smallish +smallness/M +smallpox/M +smarmy/RT +smart/SMDNRYXTGP +smarten/DG +smartness/M +smartphone/SM +smarts/M +smartwatch/MS +smarty/SM +smartypants/M +smash/MDRSZG +smasher/M +smashup/SM +smattering/MS +smear/SMDG +smeary/RT +smell/SMDG +smelliness/M +smelly/RPT +smelt/SMDRZG +smelter/M +smidgen/MS +smilax/M +smile/DSMG +smiley/SM +smiling/Y +smirch/GMDS +smirk/SMDG +smite/SG +smith/M +smithereens/M +smiths +smithy/SM +smitten +smock/SMDG +smocking/M +smog/MS +smoggy/RT +smoke/DRSMZG +smokehouse/MS +smokeless +smoker/M +smokescreen/SM +smokestack/SM +smokey +smokiness/M +smoking/M +smoky/RTP +smooch/MDSG +smoochy +smooth/PDRYTG +smoothie/MS +smoothness/M +smooths +smorgasbord/SM +smote +smother/GSMD +smoulder/GMDS +smudge/DSMG +smudgy/TR +smug/YP +smugger +smuggest +smuggle/ZGDRS +smuggler/M +smuggling/M +smugness/M +smurf/S +smut/MS +smuttiness/M +smutty/TRP +snack/SMDG +snaffle/DSMG +snafu/SM +snag/MS +snagged +snagging +snail/SMDG +snake/DSMG +snakebite/MS +snakelike +snakeskin +snaky/RT +snap's +snap/US +snapdragon/SM +snapped/U +snapper/MS +snappily +snappiness/M +snapping/U +snappish/YP +snappishness/M +snappy/TRP +snapshot/SM +snare/DSMG +snarf/SDG +snark/S +snarky/TR +snarl's +snarl/USDG +snarling/Y +snarly/TR +snatch/ZGMDRS +snatcher/M +snazzily +snazzy/TR +sneak/SMDRZG +sneaker/M +sneakily +sneakiness/M +sneaking/Y +sneaky/TRP +sneer/SJMDG +sneering/Y +sneeze/DSMG +snick/SDRZG +snicker/MDG +snide/RYT +sniff/SMDRZG +sniffer/M +sniffle/DSMG +sniffy/RT +snifter/SM +snip/MDRZGS +snipe/SM +sniper/M +snipped +snippet/SM +snipping +snippy/RT +snips/M +snit/MS +snitch/MDSG +snivel/SM +snivelled +sniveller/SM +snivelling +snob/MS +snobbery/M +snobbish/PY +snobbishness/M +snobby/RT +snog/S +snogged +snogging +snood/SM +snooker/MDSG +snoop/SMDRZG +snooper/M +snoopy/TR +snoot/SM +snootily +snootiness/M +snooty/PTR +snooze/DSMG +snore/DRSMZG +snorer/M +snorkel/ZMRS +snorkeler/M +snorkeling's +snorkelled +snorkelling +snort/SMDRZG +snorter/M +snot/MS +snottily +snottiness/M +snotty/TPR +snout/SM +snow/MDGS +snowball/GSMD +snowbank/SM +snowbird/SM +snowblower/MS +snowboard/ZGMDRS +snowboarder/M +snowboarding/M +snowbound +snowdrift/SM +snowdrop/SM +snowfall/SM +snowfield/SM +snowflake/SM +snowiness/M +snowline +snowman/M +snowmen +snowmobile/DSMG +snowplough/M +snowploughs +snowplowed +snowplowing +snowshoe/DSM +snowshoeing +snowstorm/SM +snowsuit/SM +snowy/PRT +snub/MS +snubbed +snubbing +snuff/SMDRYZG +snuffbox/MS +snuffer/M +snuffle/MGDS +snug/MYSP +snugged +snugger +snuggest +snugging +snuggle/MGDS +snugness/M +so +soak/MDGSJ +soaking/M +soap/MDGS +soapbox/MS +soapiness/M +soapstone/M +soapsuds/M +soapy/RPT +soar/MDGS +sob/SM +sobbed +sobbing/Y +sober/SDRYPTG +soberness/M +sobriety/IM +sobriquet/SM +soc +soccer/M +sociability/M +sociable/SM +sociably +social/SMY +socialisation/M +socialise/DSG +socialism/M +socialist/SM +socialistic +socialite/SM +societal +society/SM +socioeconomic +socioeconomically +sociological/Y +sociologist/SM +sociology/M +sociopath/M +sociopaths +sociopolitical +sock/MDGS +socket/SM +sockeye/SM +sod/SM +soda/MS +sodded +sodden/Y +sodding +sodium/M +sodomise/GDS +sodomite/MS +sodomy/M +soever +sofa/MS +soft/NRYXTP +softback +softball/MS +softbound +softcover +soften/DRZG +softener/M +softhearted +softness/M +software/M +softwood/SM +softy/SM +soggily +sogginess/M +soggy/RTP +soigne +soignee +soil/MDGS +soiled/U +soiree/SM +sojourn/ZGMDRS +sojourner/M +sol/SM +solace/DSMG +solar +solaria +solarium/M +sold +solder/ZGSMDR +solderer/M +soldier/MDYSG +soldiery/M +sole/FSDGM +solecism/SM +solely +solemn/PTRY +solemness/M +solemnify/DSG +solemnisation/M +solemnise/DSG +solemnity/SM +solemnness/M +solenoid/MS +solicit/GDS +solicitation/SM +solicited/U +solicitor/SM +solicitous/PY +solicitousness/M +solicitude/M +solid/PSMRYT +solidarity/M +solidi +solidification/M +solidify/DSNG +solidity/M +solidness/M +solidus/M +soliloquies +soliloquise/DSG +soliloquy/M +solipsism/M +solipsistic +solitaire/MS +solitariness/M +solitary/SMP +solitude/M +solo/MDGS +soloist/MS +solstice/MS +solubility/IM +soluble/MS +solute's +solute/AXN +solutes +solution's/AE +solvable/IU +solve/EADSG +solved/U +solvency/IM +solvent/IMS +solver/SM +somatic +sombre/PY +sombreness/M +sombrero/MS +some +somebody/SM +someday +somehow +someone/MS +someplace +somersault/MDGS +somerset/SM +somersetted +somersetting +something/SM +sometime/S +someway/S +somewhat/S +somewhere +somnambulism/M +somnambulist/SM +somnolence/M +somnolent +son/SM +sonar/SM +sonata/SM +sonatina/SM +song/MS +songbird/SM +songbook/SM +songfest/SM +songster/MS +songstress/MS +songwriter/SM +songwriting +sonic +sonnet/SM +sonny/SM +sonogram/SM +sonority/M +sonorous/YP +sonorousness/M +sonsofbitches +soon/RT +soot/M +sooth/MDRSZG +soothe +soother/M +soothing/Y +soothsayer/MS +soothsaying/M +sooty/RT +sop/SM +soph +sophism/M +sophist/MS +sophistic +sophistical +sophisticate/DSMGN +sophisticated/U +sophistication/M +sophistry/SM +sophomore/MS +sophomoric +soporific/MS +soporifically +sopped +sopping +soppy/RT +soprano/MS +sorbet/SM +sorcerer/MS +sorceress/MS +sorcery/M +sordid/PY +sordidness/M +sore/MYTRSP +sorehead/MS +soreness/M +sorghum/M +sorority/SM +sorrel/SM +sorrily +sorriness/M +sorrow/SMDG +sorrowful/YP +sorrowfulness/M +sorry/RTP +sort/FASGDM +sorta +sorted/U +sorter/SM +sortie/DSM +sortieing +sot/SM +sottish +sou'wester +sou/SMH +souffle/SM +sough/MDG +soughs +sought/U +souk/S +soul/MS +soulful/YP +soulfulness/M +soulless/YP +soulmate/SM +sound/JPSMDRYZTG +soundalike/S +soundbar/S +soundbite/S +soundboard/MS +soundcheck/S +sounder/M +sounding/M +soundless/Y +soundness/UM +soundproof/GDS +soundproofing/M +soundscape/S +soundtrack/SM +soup/MDGS +soupcon/MS +soupy/RT +sour/MDRYTGSP +source/ADSMG +sourdough/M +sourdoughs +sourish +sourness/M +sourpuss/MS +sousaphone/MS +souse/DSMG +south/M +southbound +southeast/ZMR +southeaster/MY +southeastern +southeastward/S +southerly/SM +southern/SZMR +southerner/M +southernmost +southpaw/SM +southward/MS +southwest/ZMR +southwester/MY +southwestern +southwestward/S +souvenir/SM +sovereign/SM +sovereignty/M +soviet/SM +sow's +sow/ASGD +sower/SM +sown/A +soy/M +soybean/MS +sozzled +spa/SM +space/DRSMZG +spacecraft/MS +spaceflight/MS +spaceman/M +spacemen +spaceport/SM +spacer/M +spaceship/SM +spacesuit/SM +spacewalk/SGMD +spacewoman/M +spacewomen +spacey +spacial +spacier +spaciest +spaciness/M +spacing/M +spacious/YP +spaciousness/M +spade/DSMG +spadeful/MS +spadework/M +spadices +spadix/M +spaghetti/M +spake +spam/MS +spammed +spammer/SM +spamming +span/MS +spandex/M +spangle/DSMG +spangly +spaniel/SM +spank/SMDGJ +spanking/M +spanned +spanner/SM +spanning +spar/MS +spare/DRSMYTGP +spareness/M +spareribs/M +sparing/UY +spark/SMDYG +sparkle/DRSMZG +sparkler/M +sparky/RT +sparred +sparring +sparrow/SM +sparrowhawk/S +sparse/RYTP +sparseness/M +sparsity/M +spartan +spasm/SM +spasmodic +spasmodically +spastic/SM +spat/MS +spate/SM +spathe/SM +spatial/Y +spatted +spatter/SGMD +spatting +spatula/SM +spavin/MD +spawn/SMDG +spay/DGS +speak/SRZGJ +speakeasy/SM +speaker/M +speakerphone/S +spear/SMDG +spearfish/GMDS +speargun +spearhead/GMDS +spearmint/M +spec/MS +special/SMY +specialisation/MS +specialise/GDS +specialism/S +specialist/MS +speciality/SM +specie/SM +species/M +specif +specifiable +specific/MS +specifically +specification/M +specificity/M +specified/U +specify/XNZDRSG +specimen/SM +specious/YP +speciousness/M +speck/SMDG +speckle/MGDS +specs/M +spectacle/SM +spectacles/M +spectacular/MYS +spectate/DSG +spectator/SM +spectra +spectral +spectre/MS +spectrometer/MS +spectroscope/MS +spectroscopic +spectroscopy/M +spectrum/M +speculate/DSXGNV +speculation/M +speculative/Y +speculator/MS +sped +speech/MS +speechify/DSG +speechless/YP +speechlessness/M +speechwriter/S +speed/SMRZG +speedboat/SM +speeder/M +speedily +speediness/M +speeding/M +speedometer/MS +speedster/SM +speedup/MS +speedway/SM +speedwell/M +speedy/TPR +speleological +speleologist/MS +speleology/M +spell/JSMDRZG +spellbind/ZGRS +spellbinder/M +spellbound +spellcheck/MDRZGS +spellchecker/M +spelldown/SM +speller/M +spelling/M +spelt +spelunker/MS +spelunking/M +spend/BSRZG +spender/M +spending/M +spendthrift/MS +spent/U +sperm/SM +spermatozoa +spermatozoon/M +spermicidal +spermicide/MS +spew/MDRZGS +spewer/M +sphagnum/MS +sphere/SM +spherical/Y +spheroid/SM +spheroidal +sphincter/MS +sphinx/MS +spic/S +spice/DSMG +spicily +spiciness/M +spicule/MS +spicy/PRT +spider/SM +spiderweb/MS +spidery +spiel/SMDG +spiff/SDG +spiffy/TR +spigot/SM +spike/DSMG +spikiness/M +spiky/RPT +spill/SMDG +spillage/MS +spillover/SM +spillway/MS +spilt +spin/MS +spinach/M +spinal/SMY +spindle/MGDS +spindly/TR +spine/SM +spineless/YP +spinet/SM +spinnaker/SM +spinner/MS +spinneret/SM +spinney/S +spinning/M +spinster/SM +spinsterhood/M +spinsterish +spiny/RT +spiracle/SM +spiraea/MS +spiral/SMY +spiralled +spiralling +spire's +spire/IFAS +spirit's +spirit/ISGD +spirited/Y +spiritless +spiritual/MYS +spiritualism/M +spiritualist/MS +spiritualistic +spirituality/M +spirituous +spirochaete/SM +spiry +spit/MDGS +spitball/SM +spite/ASM +spiteful/PY +spitefuller +spitefullest +spitefulness/M +spitfire/SM +spitted +spitting +spittle/M +spittoon/MS +spiv/S +splash/GMDS +splashdown/MS +splashily +splashiness/M +splashy/RTP +splat/SM +splatted +splatter/GSMD +splatting +splay/SMDG +splayfeet +splayfoot/MD +spleen/SM +splendid/RYT +splendorous +splendour/SM +splenectomy +splenetic +splice/DRSMZG +splicer/M +spliff/S +spline/S +splint/SZGMDR +splinter/MDG +splintery +split/SM +splitting/MS +splodge/S +splosh/DSG +splotch/MDSG +splotchy/TR +splurge/DSMG +splutter/GMDS +spoil's +spoil/CSDRZG +spoilage/M +spoiled/U +spoiler/CM +spoilsport/MS +spoilt +spoke/SM +spoken/U +spokesman/M +spokesmen +spokespeople +spokesperson/MS +spokeswoman/M +spokeswomen +spoliation/CM +sponge/DRSMZG +spongecake/M +sponger/M +sponginess/M +spongy/RPT +sponsor/MDGS +sponsorship/M +spontaneity/M +spontaneous/Y +spoof/SMDG +spook/SMDG +spookiness/M +spooky/RPT +spool/SMDG +spoon/SMDG +spoonbill/MS +spoonerism/MS +spoonful/SM +spoor/SMDG +sporadic +sporadically +spore/DSMG +sporran/S +sport/SMDGV +sportiness/M +sporting/Y +sportive/Y +sportscast/MRZGS +sportscaster/M +sportsman/M +sportsmanlike/U +sportsmanship/M +sportsmen +sportspeople +sportsperson +sportswear/M +sportswoman/M +sportswomen +sportswriter/SM +sporty/TPR +spot/CMS +spotless/PY +spotlessness/M +spotlight/GSMD +spotlit +spotted +spotter/MS +spottily +spottiness/M +spotting +spotty/TPR +spousal/MS +spouse/SM +spout/SMDG +sprain/GSMD +sprang +sprat/SM +sprawl/GSMD +spray's +spray/ASDG +sprayer/MS +spread/ZGBSMR +spreadeagled +spreader/M +spreadsheet/MS +spree/DSM +spreeing +sprig/SM +sprigged +sprightliness/M +sprightly/RTP +spring/GSM +springboard/MS +springbok/MS +springily +springiness/M +springlike +springtime/M +springy/RPT +sprinkle/DRSJMZG +sprinkler/M +sprinkling/M +sprint/ZGSMDR +sprinter/M +sprite/SM +spritz/ZGMDRS +spritzer/M +sprocket/MS +sprog/S +sprout/GSMD +spruce/DRSPMYTG +spruceness/M +sprung +spry/RYT +spryness/M +spud/MS +spume/DSMG +spumoni/M +spumy +spun +spunk/SM +spunky/TR +spur/MS +spurge/M +spurious/PY +spuriousness/M +spurn/SDG +spurred +spurring +spurt/SMDG +sputa +sputnik/MS +sputter/MDGS +sputum/M +spy/GDSM +spyglass/MS +spymaster/S +spyware/M +sq +sqq +squab/SM +squabble/MZGDRS +squabbler/M +squad/SM +squadron/MS +squalid/PTRY +squalidness/M +squall/SGMD +squally +squalor/M +squamous +squander/GDS +square/PDRSMYTG +squareness/M +squarish +squash/GMDS +squashy/TR +squat/SMP +squatness/M +squatted +squatter/MS +squattest +squatting +squaw/SM +squawk/SZGMDR +squawker/M +squeak/SZGMDR +squeaker/M +squeakily +squeakiness/M +squeaky/TRP +squeal/SZGMDR +squealer/M +squeamish/PY +squeamishness/M +squeegee/MDS +squeegeeing +squeeze/BMZGDRS +squeezebox/S +squeezer/M +squelch/GMDS +squelchy +squib/SM +squid/SM +squidgy +squiffy +squiggle/DSMG +squiggly +squint/STGMDR +squire/DSMG +squirm/SGMD +squirmy/RT +squirrel/SM +squirrelled +squirrelling +squirt/SGMD +squish/GMDS +squishy/RT +sriracha +ssh +st +stab/MYS +stabbed +stabber/MS +stabbing/MS +stabilisation/M +stabilise/CDSG +stabiliser/MS +stability/IM +stable/DRSMTG +stableman/M +stablemate/S +stablemen +stably/U +staccato/MS +stack/SMDG +stadium/MS +staff's +staff/ASDG +staffer/MS +staffing/M +stag/MDGSJ +stage/SM +stagecoach/MS +stagecraft/M +stagehand/MS +stagestruck +stagflation/M +stagger/MDGS +staggering/Y +staging/M +stagnancy/M +stagnant/Y +stagnate/DSGN +stagnation/M +stagy/RT +staid/PRYT +staidness/M +stain/SMDG +stained/U +stainless/M +stair/SM +staircase/MS +stairway/MS +stairwell/SM +stake/DSMG +stakeholder/MS +stakeout/SM +stalactite/MS +stalagmite/MS +stale/DRSTGP +stalemate/DSMG +staleness/M +stalk/SMDRJZG +stalker/M +stalking/M +stall's +stall/ISDG +stallholder/S +stallion/MS +stalwart/MYS +stamen/SM +stamina/M +stammer/ZGMDRS +stammerer/M +stammering/Y +stamp/SMDRZG +stampede/MGDS +stamper/M +stance/ISM +stanch/TGDRS +stanchion/SM +stand/SMRJZG +standalone +standard/MS +standardisation/M +standardise/DSG +standby/M +standbys +standee/MS +stander/M +standing/M +standoff/MS +standoffish +standout/MS +standpipe/SM +standpoint/MS +standstill/MS +stank +stanza/SM +staph/M +staphylococcal +staphylococci +staphylococcus/M +staple/DRSMZG +stapler/M +star/MDRZGS +starboard/M +starburst/S +starch/GMDS +starchily +starchiness/M +starchy/PTR +stardom/M +stardust/M +stare/SM +starer/M +starfish/MS +starfruit +stargaze/DRSZG +stargazer/M +stark/RYPZT +starkness/M +starless +starlet/MS +starlight/M +starling/SM +starlit +starred +starring +starry/TR +starstruck +start/ASMDG +starter/MS +startle/GDS +startling/Y +startup/MS +starvation/M +starve/DSJG +starveling/MS +stash/MDSG +stasis +stat/MS +state/DRSMYGNLX +statecraft/M +stated/U +statehood/M +statehouse/MS +stateless/P +statelessness/M +stateliness/M +stately/PRT +statement/AMS +statemented +statementing +stateroom/MS +stateside +statesman/M +statesmanlike +statesmanship/M +statesmen +stateswoman/M +stateswomen +statewide +static/SM +statically +station/MDRZG +stationary +stationer/M +stationery/M +stationmaster/S +statistic/MS +statistical/Y +statistician/SM +statuary/M +statue/SM +statuesque +statuette/MS +stature/MS +status/MS +statute/MS +statutorily +statutory +staunch/PDRSYTG +staunchness/M +stave/DSMG +stay/MDRZGS +std +stdio +stead/SM +steadfast/YP +steadfastness/M +steadily/U +steadiness/UM +steady/TGPDRSM +steak/SM +steakhouse/SM +steal/SMHG +stealth/M +stealthily +stealthiness/M +stealthy/TPR +steam/SMDRZG +steamboat/MS +steamer/M +steamfitter/SM +steamfitting/M +steaminess/M +steampunk +steamroll/ZGDRS +steamroller/MDG +steamship/MS +steamy/TPR +steed/SM +steel/SMDG +steeliness/M +steelmaker/S +steelworker/SM +steelworks/M +steely/PTR +steelyard/SM +steep/SMDNRYPXTG +steepen/GD +steeple/MS +steeplechase/MS +steeplejack/SM +steepness/M +steer/SMDBG +steerage/M +steering/M +steersman/M +steersmen +stegosauri +stegosaurus/MS +stein/SM +stellar +stem/MS +stemless +stemmed +stemming +stemware/M +stench/MS +stencil/MS +stencilled +stencilling +steno/SM +stenographer/SM +stenographic +stenography/M +stenosis +stent/SM +stentorian +step/IMS +stepbrother/SM +stepchild/M +stepchildren/M +stepdad/MS +stepdaughter/SM +stepfather/SM +stepladder/MS +stepmom/MS +stepmother/SM +stepparent/SM +steppe/DRSMZG +stepper/M +steppingstone/SM +stepsister/MS +stepson/MS +stereo/SM +stereophonic +stereoscope/MS +stereoscopic +stereotype/DSMG +stereotypical +sterile +sterilisation/MS +sterilise/DRSZG +steriliser/M +sterility/M +sterling/M +stern/SMRYPT +sternness/M +sternum/MS +steroid/MS +steroidal +stertorous +stet/S +stethoscope/MS +stetson/MS +stetted +stetting +stevedore/SM +stew/MDGS +steward/GMDS +stewardess/MS +stewardship/M +stick/SMRZG +sticker/M +stickily +stickiness/M +stickleback/SM +stickler/MS +stickpin/MS +stickup/MS +sticky/PTRSM +stiff/SMDNRYPXTG +stiffen/ZGDR +stiffener/M +stiffening/M +stiffness/M +stifle/DSJG +stifling/Y +stigma/SM +stigmata +stigmatic +stigmatisation/M +stigmatise/GDS +stile/SM +stiletto/SM +still/TGPSMDR +stillbirth/M +stillbirths +stillborn +stilled/I +stilling/I +stillness/M +stilt/SMD +stilted/Y +stimulant/SM +stimulate/DSGNV +stimulation/M +stimuli +stimulus/M +sting/ZGSMR +stinger/M +stingily +stinginess/M +stingray/SM +stingy/RTP +stink/ZGSMR +stinkbug/SM +stinker/M +stinky/RT +stint/GSMD +stipend/SM +stipendiary/S +stipple/DSMG +stippling/M +stipulate/XDSGN +stipulation/M +stir/MS +stirred +stirrer/SM +stirring/SY +stirrup/SM +stitch's +stitch/ADSG +stitchery/M +stitching/M +stoat/SM +stochastic +stock's +stock/AGSD +stockade/DSMG +stockbreeder/MS +stockbroker/SM +stockbroking/M +stockholder/SM +stockily +stockiness/M +stockinette/M +stocking/SM +stockist/S +stockpile/MGDS +stockpot/SM +stockroom/MS +stocktaking/M +stocky/RTP +stockyard/MS +stodge +stodgily +stodginess/M +stodgy/RTP +stogie/MS +stoic/SM +stoical/Y +stoicism/M +stoke/DRSZG +stoker/M +stole/SM +stolen +stolid/RYTP +stolidity/M +stolidness/M +stolon/MS +stomach/MDRZG +stomachache/SM +stomacher/M +stomachs +stomp/GSMD +stone/DRSMZG +stonemason/MS +stoner/M +stonewall/GSD +stoneware/M +stonewashed +stonework/M +stonily +stoniness/M +stonkered +stonking +stony/TRP +stood +stooge/MS +stool/SM +stoop/GSMD +stop's +stop/US +stopcock/SM +stopgap/SM +stoplight/MS +stopover/MS +stoppable/U +stoppage/MS +stopped/U +stopper/GSMD +stopping/U +stopple/DSMG +stopwatch/MS +storage/M +store's +store/ADSG +storefront/MS +storehouse/MS +storekeeper/SM +storeroom/SM +storey/MS +stork/SM +storm/GSMD +stormily +storminess/M +stormy/RPT +story/DSM +storyboard/MS +storybook/SM +storyteller/MS +storytelling/M +stoup/SM +stout/TSMRYP +stouthearted +stoutness/M +stove/SM +stovepipe/SM +stow/DGS +stowage/M +stowaway/MS +straddle/DRSMZG +straddler/M +strafe/MGDS +straggle/DRSZG +straggler/M +straggly/TR +straight/SPXTMNRY +straightaway/SM +straightedge/SM +straighten/ZGDR +straightener/M +straightforward/YPS +straightforwardness/M +straightness/M +straightway +strain's +strain/FADSG +strainer/ASM +strait/MNSX +straiten/GD +straitjacket/SGMD +straitlaced +strand/MDSG +strange/PRYZT +strangeness/M +stranger/M +strangle/ZGDRS +stranglehold/SM +strangler/M +strangulate/GNDS +strangulation/M +strap's +strap/US +strapless/MS +strapped/U +strapping/M +strata +stratagem/SM +strategic/S +strategical/Y +strategics/M +strategist/SM +strategy/SM +strati +stratification/M +stratify/DSGN +stratosphere/SM +stratospheric +stratum/M +stratus/M +straw/GSMD +strawberry/SM +stray/GSMD +streak/MDRSZG +streaker/M +streaky/TR +stream/MDRSZG +streamer/M +streamline/DSG +street/MS +streetcar/MS +streetlamp/S +streetlight/SM +streetwalker/SM +streetwise +strength/M +strengthen/AGDS +strengthener/MS +strengths +strenuous/PY +strenuousness/M +strep/M +streptococcal +streptococci +streptococcus/M +streptomycin/M +stress/MDSG +stressed/U +stressful +stretch/BZGMDRS +stretcher/MDG +stretchmarks +stretchy/TR +strew/GSDH +strewn +stria/M +striae +striated +striation/MS +stricken +strict/RYPT +strictness/M +stricture/SM +stridden +stride/MGS +stridency/M +strident/Y +strife/M +strike/MZGRSJ +strikebound +strikebreaker/SM +strikebreaking +strikeout/MS +striker/M +striking/Y +string/MDRSZG +stringency/M +stringent/Y +stringer/M +stringiness/M +stringy/PTR +strip/GSMD +stripe/MS +stripey +stripling/MS +stripped +stripper/MS +stripping +striptease/MZGDRS +stripteaser/M +stripy +strive/GS +striven +strobe/MS +stroboscope/MS +stroboscopic +strode +stroke/MGDS +stroll/MDRSZG +stroller/M +strong/RYT +strongbox/MS +stronghold/MS +strongman/M +strongmen +strongroom/S +strontium/M +strop/SM +strophe/SM +strophic +stropped +stroppily +stropping +stroppy/TRP +strove +struck +structural/Y +structuralism +structuralist/S +structure's +structure/AGDS +structured/U +strudel/SM +struggle/MGDS +strum/SM +strummed +strumming +strumpet/MS +strung/UA +strut/SM +strutted +strutting +strychnine/M +stub/MS +stubbed +stubbing +stubble/M +stubbly +stubborn/RYPT +stubbornness/M +stubby/RT +stucco/MDG +stuccoes +stuck/U +stud/MYS +studbook/MS +studded +studding/M +student/SM +studentship/S +studied/U +studiedly +studio/MS +studious/PY +studiousness/M +studly/RT +study's +study/AGDS +stuff/GSMDJ +stuffily +stuffiness/M +stuffing/M +stuffy/RPT +stultification/M +stultify/DSNG +stumble/DRSMZG +stumbler/M +stump/GSMD +stumpy/TR +stun/S +stung +stunk +stunned +stunner/S +stunning/Y +stunt/GSMD +stuntman +stuntmen +stupefaction/M +stupefy/DSG +stupendous/Y +stupid/TMRYS +stupidity/SM +stupor/MS +sturdily +sturdiness/M +sturdy/TRP +sturgeon/SM +stutter/MDRSZG +stutterer/M +sty/SM +style's +style/ADSG +styli +stylise/DSG +stylish/PY +stylishness/M +stylist/SM +stylistic/S +stylistically +stylus/MS +stymie/MDS +stymieing +styptic/SM +suasion/EM +suave/RYTP +suaveness/M +suavity/M +sub/SM +subaltern/MS +subaqua +subarctic +subarea/MS +subatomic +subbasement/SM +subbed +subbing +subbranch/MS +subcategory/SM +subclass +subcommittee/SM +subcompact/SM +subconscious/PMY +subconsciousness/M +subcontinent/SM +subcontinental +subcontract/MDSG +subcontractor/MS +subculture/MS +subcutaneous/Y +subdivide/GDS +subdivision/SM +subdominant +subdue/DSG +subeditor/S +subfamily/SM +subfreezing +subgroup/MS +subhead/GJMS +subheading/M +subhuman/MS +subj +subject/GVMDS +subjection/M +subjective/Y +subjectivity/M +subjoin/GDS +subjugate/GNDS +subjugation/M +subjunctive/SM +sublease/MGDS +sublet/SM +subletting +sublieutenant/S +sublimate/GNDS +sublimation/M +sublime/YTGDRS +subliminal/Y +sublimity/M +sublingual +submarginal +submarine/MZRS +submariner/M +submerge/GDS +submergence/M +submerse/GNDS +submersible/MS +submersion/M +submicroscopic +submission/MS +submissive/PY +submissiveness/M +submit/AS +submitted/A +submitter +submitting/A +subnormal +suborbital +suborder/MS +subordinate/DSMGN +subordination/IM +suborn/SGD +subornation/M +subparagraph +subplot/MS +subpoena/GMDS +subprime +subprofessional/SM +subprogram/S +subroutine/SM +subscribe/UASDG +subscriber/MS +subscript/MS +subscription/MS +subsection/MS +subsequent/Y +subservience/M +subservient/Y +subset/SM +subside/GDS +subsidence/M +subsidiarity +subsidiary/SM +subsidisation/M +subsidise/ZGDRS +subsidiser/M +subsidy/SM +subsist/SDG +subsistence/M +subsoil/M +subsonic +subspace +subspecies/M +substance/SM +substandard +substantial/IY +substantiate/GNDSX +substantiated/U +substantiation/FM +substantive/SMY +substation/MS +substituent +substitute/XMGNDS +substitution/M +substrata +substrate/MS +substratum/M +substructure/SM +subsume/DSG +subsumption +subsurface/M +subsystem/SM +subteen/SM +subtenancy/M +subtenant/SM +subtend/SDG +subterfuge/SM +subterranean +subtext/SM +subtitle/DSMG +subtle/TR +subtlety/SM +subtly +subtopic/SM +subtotal/SM +subtotalled +subtotalling +subtract/GSD +subtraction/SM +subtrahend/SM +subtropic/S +subtropical +subtropics/M +suburb/MS +suburban/SM +suburbanite/SM +suburbia/M +subvention/SM +subversion/M +subversive/SPMY +subversiveness/M +subvert/SDG +subway/MS +subzero +succeed/GDS +success/VMS +successful/UY +succession/SM +successive/Y +successor/SM +succinct/RYTP +succinctness/M +succotash/M +succour/GMDS +succubi +succubus +succulence/M +succulency/M +succulent/SM +succumb/GDS +such +suchlike +suck/MDRZGS +sucker/GMD +suckle/DSJG +suckling/M +sucrose/M +suction/SMDG +sudden/PY +suddenness/M +suds/M +sudsy/TR +sue/DSG +suede/M +suet/M +suety +suffer/DRZGSJ +sufferance/M +sufferer/M +suffering/M +suffice/DSG +sufficiency/IM +sufficient/IY +suffix/MDSG +suffixation/M +suffocate/GNDS +suffocation/M +suffragan/MS +suffrage/M +suffragette/SM +suffragist/MS +suffuse/DSGN +suffusion/M +sugar/GSMD +sugarcane/M +sugarcoat/GDS +sugarless +sugarplum/MS +sugary/RT +suggest/GVSDR +suggestibility/M +suggestible +suggestion/SM +suggestive/YP +suggestiveness/M +suicidal +suicide/SM +suit/BMDGS +suitability/UM +suitableness/M +suitably/U +suitcase/SM +suite/SM +suited/U +suiting/M +suitor/MS +sukiyaki/M +sulfa/M +sulfonamides +sulk/MDGS +sulkily +sulkiness/M +sulky/TRSMP +sullen/RYPT +sullenness/M +sullied/U +sully/GDS +sulphate/MS +sulphide/MS +sulphur/SMDG +sulphuric +sulphurous +sultan/MS +sultana/SM +sultanate/MS +sultrily +sultriness/M +sultry/RPT +sum/SM +sumac/M +summarily +summarise/GDS +summary/SM +summat +summation/FMS +summed +summer/MDSG +summerhouse/SM +summertime/M +summery +summing +summit/MS +summitry/M +summon/DRSZG +summoner/M +summons/GMDS +sumo/M +sump/MS +sumptuous/PY +sumptuousness/M +sun/SM +sunbath/ZGMDRS +sunbathe +sunbather/M +sunbathing/M +sunbaths +sunbeam/SM +sunbed/S +sunbelt/SM +sunblock/MS +sunbonnet/SM +sunburn/SGMD +sunburst/MS +sundae/MS +sundeck/S +sunder/DSG +sundial/SM +sundown/SM +sundress/S +sundries/M +sundry/S +sunfish/MS +sunflower/MS +sung/U +sunglasses/M +sunhat/S +sunk/N +sunlamp/SM +sunless +sunlight/M +sunlit +sunned +sunniness/M +sunning +sunny/TRP +sunrise/SM +sunroof/SM +sunscreen/MS +sunset/MS +sunshade/MS +sunshine/M +sunshiny +sunspot/SM +sunstroke/M +suntan/MS +suntanned +suntanning +suntrap/S +sunup/M +sup/SZMR +super/M +superabundance/MS +superabundant +superannuate/GNDS +superannuation/M +superb/RYT +supercargo/M +supercargoes +supercharge/ZGDRS +supercharger/M +supercilious/PY +superciliousness/M +supercity/SM +supercomputer/MS +superconducting +superconductive +superconductivity/M +superconductor/SM +superego/MS +supererogation/M +supererogatory +superficial/Y +superficiality/M +superfine +superfluity/M +superfluous/YP +superfluousness/M +superglue +supergrass/S +superhero/MS +superheroes +superhighway/SM +superhuman +superimpose/GDS +superimposition/M +superintend/DSG +superintendence/M +superintendency/M +superintendent/SM +superior/MS +superiority/M +superlative/SMY +superman/M +supermarket/SM +supermen +supermodel/SM +supermom/MS +supernal +supernatural/SY +supernova/MS +supernovae +supernumerary/SM +superpose/GDS +superposition/M +superpower/SM +supersaturate/GNDS +supersaturation/M +superscribe/GDS +superscript/MS +superscription/M +supersede/GDS +supersize/GDS +supersonic +superstar/MS +superstate/S +superstition/MS +superstitious/Y +superstore/MS +superstructure/MS +supertanker/MS +superuser/S +supervene/GDS +supervention/M +supervise/XGNDS +supervised/U +supervision/M +supervisor/MS +supervisory +superwoman/M +superwomen +supine/Y +supp/DRZG +supper/M +suppertime +suppl +supplant/SDG +supple/TLPR +supplement/MDGS +supplemental +supplementary +supplementation/M +suppleness/M +suppliant/SM +supplicant/MS +supplicate/GDS +supplication/M +supplier/M +supply/ZGDRSMXN +support/MDRSBZGV +supportable/UI +supported/U +supporter/M +suppose/GDS +supposed/Y +supposition/MS +suppository/SM +suppress/GDS +suppressant/MS +suppressible +suppression/M +suppressor/SM +suppurate/DSGN +suppuration/M +supra +supranational +supremacist/MS +supremacy/M +supreme/Y +supremo/S +supt +surcease/DSMG +surcharge/DSMG +surcingle/SM +sure/PYTR +surefire +surefooted +sureness/M +surety/SM +surf/MDRZGS +surface's +surface/AGDS +surfboard/MDSG +surfeit/MDSG +surfer/M +surfing/M +surge/DSMG +surgeon/MS +surgery/SM +surgical/Y +surliness/M +surly/PTR +surmise/MGDS +surmount/DGSB +surmountable/I +surname/MS +surpass/GDS +surpassed/U +surplice/MS +surplus/MS +surplussed +surplussing +surprise/DSMGJ +surprising/UY +surreal +surrealism/M +surrealist/SM +surrealistic +surrealistically +surrender/MDSG +surreptitious/PY +surreptitiousness/M +surrey/MS +surrogacy/M +surrogate/SM +surround/GSDJ +surrounding/M +surroundings/M +surtax/MDSG +surtitle/S +surveillance/M +survey's +survey/ADGS +surveying/M +surveyor/SM +survival/SM +survivalist/SM +survive/DSGB +survivor/SM +susceptibility/SM +susceptible/I +sushi/M +suspect/SMDG +suspected/U +suspend/SDRZG +suspender/M +suspense/XMN +suspenseful +suspension/M +suspicion/SM +suspicious/Y +suss/DSG +sustain/SDBG +sustainability +sustainable/U +sustenance/M +sutler/MS +suttee +suture/MGDS +suzerain/MS +suzerainty/M +svelte/TR +swab/MS +swabbed +swabbing +swaddle/DSG +swag/MS +swagged +swagger/SMDRG +swagging +swain/SM +swallow/GSMD +swallowtail/MS +swam +swami/SM +swamp/GSMD +swampland/M +swampy/RT +swan/MS +swank/TGSMDR +swankily +swankiness/M +swanky/RPT +swanned +swanning +swansong/S +swap/MS +swapped +swapping +sward/SM +swarm/GSMD +swarthy/TR +swash/GMDS +swashbuckler/SM +swashbuckling/M +swastika/SM +swat/MS +swatch/MS +swath/GMDS +swathe/M +swaths +swatted +swatter/SMDG +swatting +sway/MDGS +swayback/MD +swayed/U +swear/ZGSR +swearer/M +swearword/MS +sweat/ZGSMDR +sweatband/MS +sweater/M +sweatpants/M +sweats/M +sweatshirt/SM +sweatshop/MS +sweatsuit/S +sweaty/RT +swede/SM +sweep/ZGSMRJ +sweeper/M +sweeping/MY +sweepings/M +sweepstake/M +sweet/XTSMNRYP +sweetbread/SM +sweetbrier/SM +sweetcorn +sweetened/U +sweetener/MS +sweetening/M +sweetheart/SM +sweetie/SM +sweetish +sweetmeat/MS +sweetness/M +swell/TGSMDRJ +swellhead/MDS +swelling/M +swelter/SGMD +swept +sweptback +swerve/MGDS +swerving/U +swift/PTSMRY +swiftness/M +swig/MS +swigged +swigging +swill/GSMD +swim/MS +swimmer/SM +swimming/MY +swimsuit/SM +swimwear +swindle/DRSMZG +swindler/M +swine/SM +swineherd/SM +swing/ZGSMR +swingeing +swinger/M +swinish +swipe/DSMG +swirl/GSMD +swirly +swish/TGMDRS +switch/MDRSZGB +switchback/MS +switchblade/SM +switchboard/SM +switcher/M +swivel/MS +swivelled +swivelling +swiz +swizz +swizzle/DSG +swollen +swoon/SGMD +swoop/SGMD +swoosh/MDSG +sword/SM +swordfish/MS +swordplay/M +swordsman/M +swordsmanship/M +swordsmen +swore +sworn +swot/S +swotted +swotting +swum +swung +sybarite/SM +sybaritic +sycamore/MS +sycophancy/M +sycophant/SM +sycophantic +syllabic +syllabicate/GNDS +syllabication/M +syllabification/M +syllabify/DSNG +syllable/MS +syllabub/S +syllabus/MS +syllogism/MS +syllogistic +sylph/M +sylphic +sylphlike +sylphs +sylvan +symbioses +symbiosis/M +symbiotic +symbiotically +symbol/MS +symbolic +symbolical/Y +symbolisation/M +symbolise/DSG +symbolism/M +symmetric +symmetrical/Y +symmetry/SM +sympathetic/U +sympathetically/U +sympathies/M +sympathise/ZGDRS +sympathiser/M +sympathy/SM +symphonic +symphony/SM +symposium/MS +symptom/MS +symptomatic +symptomatically +syn/H +synagogal +synagogue/SM +synapse/MS +synaptic +sync/MDSG +synchronicity +synchronisation/MS +synchronise/GDS +synchronous/Y +syncopate/DSGN +syncopation/M +syncope/M +syndicalism +syndicalist/S +syndicate/DSMGN +syndication/M +syndrome/SM +synergism/M +synergistic +synergy/SM +synfuel/MS +synod/SM +synonym/SM +synonymous +synonymy/M +synopses +synopsis/M +synoptic +synovial +syntactic +syntactical/Y +syntax/M +syntheses +synthesis/GMDS +synthesise +synthesizer/MS +synthetic/SM +synthetically +synths +syphilis/M +syphilitic/SM +syringe/DSMG +syrup/SM +syrupy +sysadmin/S +sysop/S +system/SM +systematic/U +systematical/Y +systematisation/M +systematise/GDS +systemic/MS +systemically +systole/SM +systolic +t/SDNXGBJ +ta +tab/SM +tabbed +tabbing +tabbouleh/M +tabby/SM +tabernacle/SM +tabla/MS +table/MGDS +tableau/M +tableaux +tablecloth/M +tablecloths +tableland/SM +tablespoon/SM +tablespoonful/SM +tablet/SM +tabletop/MS +tableware/M +tabloid/SM +taboo/MDSG +tabor/MS +tabular +tabulate/DSGNX +tabulation/M +tabulator/SM +tachograph +tachographs +tachometer/SM +tachycardia/M +tachyon +tacit/PY +tacitness/M +taciturn/Y +taciturnity/M +tack/ZGMDRS +tacker/M +tackiness/M +tackle/DRSMZG +tackler/M +tacky/RTP +taco/MS +tact/FM +tactful/YP +tactfulness/M +tactic/SM +tactical/Y +tactician/MS +tactile +tactility/M +tactless/PY +tactlessness/M +tad/SM +tadpole/MS +taffeta/M +taffrail/SM +taffy/SM +tag/SM +tagged +tagger/SM +tagging +tagliatelle +tagline/MS +taiga/MS +tail/ACSDMG +tailback/MS +tailboard/S +tailbone/S +tailcoat/MS +tailgate/MZGDRS +tailgater/M +tailless +taillight/MS +tailor/SGMD +tailoring/M +tailpiece/S +tailpipe/SM +tailspin/SM +tailwind/SM +taint/MDSG +tainted/U +take/AIMS +takeaway/S +taken/A +takeoff/MS +takeout/MS +takeover/SM +taker/MS +taking/SM +takings/M +talc/M +talcum/M +tale/MS +talebearer/MS +talent/SMD +talented/U +tali +talisman/MS +talk/ZGMDRS +talkative/PY +talkativeness/M +talker/M +talkie/RSMT +talky +tall/TRP +tallboy/MS +tallier/M +tallish +tallness/M +tallow/M +tallowy +tally/DRSMZG +tallyho/MDGS +talon/MS +talus/MS +tam/SM +tamale/SM +tamarack/MS +tamarind/MS +tambourine/MS +tame/BYZTGDRSP +tamed/U +tameness/M +tamer/M +tamoxifen +tamp/ZGDRS +tamper/ZGDR +tamperer/M +tampon/SM +tan/SM +tanager/MS +tanbark/M +tandem/SM +tandoori/M +tang/MS +tangelo/MS +tangent/MS +tangential/Y +tangerine/MS +tangibility/IM +tangible/IMS +tangibleness/M +tangibly/I +tangle's +tangle/UDSG +tango/MDSG +tangy/RT +tank/ZGMDRS +tankard/MS +tanker/M +tankful/MS +tanned/U +tanner/SM +tannery/SM +tannest +tannin/M +tanning/M +tansy/M +tantalisation/M +tantalise/ZGDRS +tantaliser/M +tantalising/Y +tantalum/M +tantamount +tantra/M +tantrum/SM +tap/SZGMDR +tapas +tape/MS +tapeline/MS +taper/MDG +tapestry/SM +tapeworm/MS +tapioca/M +tapir/MS +tapped/U +tapper/MS +tappet/MS +tapping +taproom/SM +taproot/SM +tar/SGMD +taramasalata +tarantella/MS +tarantula/SM +tarball/S +tardily +tardiness/M +tardy/TPR +tare/MS +target/MDGS +tariff/MS +tarmac/MS +tarmacadam +tarmacked +tarmacking +tarn/MS +tarnish/GMDS +tarnished/U +taro/MS +tarot/MS +tarp/MS +tarpaulin/MS +tarpon/MS +tarragon/SM +tarred +tarring +tarry/TGDRS +tarsal/MS +tarsi +tarsus/M +tart/PTGMDRYS +tartan/MS +tartar/MS +tartaric +tartness/M +tarty/T +taser/GMDS +task/GMDS +taskmaster/MS +taskmistress/MS +tassel/MS +tasselled +tasselling +taste/JMZGDRS +tasted/U +tasteful/EPY +tastefulness/EM +tasteless/PY +tastelessness/M +taster/M +tastily +tastiness/M +tasting/M +tasty/TRP +tat/SZR +tatami/MS +tater/M +tatted +tatter/MDSG +tatterdemalion/MS +tattie +tatting/M +tattle/MZGDRS +tattler/M +tattletale/MS +tattoo/MDRSZG +tattooer/M +tattooist/SM +tatty/TRS +tau/SM +taught/UA +taunt/ZGMDRS +taunter/M +taunting/Y +taupe/M +taut/PXTNRY +tauten/DG +tautness/M +tautological/Y +tautologous +tautology/SM +tavern/MS +tawdrily +tawdriness/M +tawdry/RTP +tawny/TRM +tax/BZGMDRS +taxa +taxation/M +taxer/M +taxi/GMDS +taxicab/SM +taxidermist/SM +taxidermy/M +taximeter/MS +taxiway/S +taxman +taxmen +taxon +taxonomic +taxonomist/MS +taxonomy/SM +taxpayer/MS +taxpaying +tb/S +tbsp +tea/SM +teabag/S +teacake/SM +teach/ZGRSBJ +teachable/U +teacher/M +teaching/M +teacup/MS +teacupful/MS +teak/MS +teakettle/SM +teal/MS +tealight/MS +team/GMDS +teammate/MS +teamster/MS +teamwork/M +teapot/MS +tear/GMDS +tearaway/S +teardrop/SM +tearful/Y +teargas/MS +teargassed +teargassing +tearjerker/MS +tearoom/SM +teary/TR +tease/MZGDRS +teasel/MS +teaser/M +teasing/Y +teaspoon/SM +teaspoonful/SM +teat/MS +teatime/S +tech/M +techie/S +technetium/M +technical/Y +technicality/SM +technician/SM +technicolor +technique/SM +techno +technobabble +technocracy/SM +technocrat/MS +technocratic +technological/Y +technologist/MS +technology/SM +technophobe/S +techs +tectonic/S +tectonics/M +ted/S +teddy/S +tedious/PY +tediousness/M +tedium/M +tee/DSMH +teeing +teem/GDS +teen/MS +teenage/RZ +teenager/M +teeny/TR +teenybopper/MS +teeter/MDSG +teethe/GDS +teething/M +teetotal +teetotalism/M +teetotaller/MS +tektite/SM +tel +telecast/SZGMR +telecaster/M +telecommunication/MS +telecommunications/M +telecommute/ZGDRS +telecommuter/M +telecommuting/M +teleconference/MGDS +teleconferencing/M +telegenic +telegram/MS +telegraph/MDRZG +telegrapher/M +telegraphese +telegraphic +telegraphically +telegraphist/SM +telegraphs +telegraphy/M +telekinesis/M +telekinetic +telemarketer/SM +telemarketing/M +telemeter/SM +telemetry/SM +teleological +teleology +telepathic +telepathically +telepathy/M +telephone/DRSMZG +telephoner/M +telephonic +telephonist/S +telephony/M +telephoto/SM +telephotography/M +teleplay/MS +teleport +teleportation +teleprinter/MS +teleprocessing/M +teleprompter/SM +telesales +telescope/DSMG +telescopic +telescopically +teletext/MS +telethon/MS +teletype/S +teletypewriter/MS +televangelism/M +televangelist/MS +televise/XGNDS +television/M +teleworker/S +teleworking +telex/MDSG +tell/AGS +teller/SM +telling/Y +telltale/SM +tellurium/M +telly/SM +telnet +temblor/MS +temerity/M +temp/MDRZTGS +temper/MDG +tempera/LSM +temperament/MS +temperamental/Y +temperance/IM +temperate/IY +temperateness/M +temperature/SM +tempest/SM +tempestuous/YP +tempestuousness/M +template's +template/S +temple/SM +tempo/SM +temporal/Y +temporarily +temporariness/M +temporary/FSM +temporise/ZGDRS +temporiser/M +tempt/SDRZG +temptation/MS +tempter/M +tempting/Y +temptress/MS +tempura/M +ten/BMH +tenability/M +tenable/U +tenably +tenacious/YP +tenaciousness/M +tenacity/M +tenancy/SM +tenant/SMDG +tenanted/U +tenantry/M +tench +tend/IEFDGS +tended/U +tendency/SM +tendentious/YP +tendentiousness/M +tender/SMDRYTGP +tenderfoot/MS +tenderhearted/P +tenderheartedness/M +tenderise/ZGDRS +tenderiser/M +tenderloin/SM +tenderness/M +tendinitis/M +tendon/SM +tendril/SM +tenement/SM +tenet/SM +tenfold +tenner/S +tennis/M +tenon/SMDG +tenor/SM +tenpin/SM +tenpins/M +tense/DRSMYTGNXP +tenseness/M +tensile +tension/ESM +tensity/IM +tensor/S +tent/DGSM +tentacle/DSM +tentative/PY +tentativeness/M +tenterhook/MS +tenth/MY +tenths +tenuity/M +tenuous/PY +tenuousness/M +tenure/DSMG +tepee/SM +tepid/YP +tepidity/M +tepidness/M +tequila/SM +terabit/SM +terabyte/MS +terahertz/M +terapixel/MS +terbium/M +tercentenary/SM +tercentennial/SM +teriyaki +term/MDYGS +termagant/MS +terminable/IC +terminal/MYS +terminate/DSGNX +termination/CSM +terminator/S +termini +terminological/Y +terminology/SM +terminus/M +termite/SM +tern/IMS +ternary/SM +terr +terrace/DSMG +terracotta/M +terrain/SM +terrapin/MS +terrarium/SM +terrazzo/MS +terrestrial/SMY +terrible/P +terribleness/M +terribly +terrier/M +terrific +terrifically +terrify/GDS +terrifying/Y +terrine/S +territorial/MS +territoriality +territory/SM +terror/SM +terrorise/DSG +terrorism/M +terrorist/SM +terry/RMZ +terrycloth/M +terse/RYTP +terseness/M +tertiary +tessellate/DSXGN +tessellation/M +test's/AFK +test/AKFCDGS +testable/CF +testament/MS +testamentary +testate/S +testator/MS +testatrices +testatrix/M +tested/U +tester/KSM +testes +testicle/MS +testicular +testifier/M +testify/ZGDRS +testily +testimonial/MS +testimony/SM +testiness/M +testings +testis/M +testosterone/M +testy/PRT +tetanus/M +tetchily +tetchy/PRT +tether/SMDG +tetra/SM +tetracycline/M +tetrahedral +tetrahedron/MS +tetrameter/SM +text/FMS +textbook/SM +texted +textile/MS +texting +textual/FY +textural +texture/MGDS +thalami +thalamus/M +thalidomide/M +thallium/M +than +thane/SM +thank/SDG +thankful/YP +thankfulness/M +thankless/PY +thanklessness/M +thanksgiving/SM +that'd +that'll +that/M +thatch/MDRSZG +thatcher/M +thatching/M +thaw/MDGS +the/JG +theatre/SM +theatregoer/MS +theatrical/YS +theatricality/M +theatricals/M +theatrics/M +thee/S +theft/SM +their/S +theism/M +theist/SM +theistic +them +thematic +thematically +theme/DSM +themselves +then/M +thence +thenceforth +thenceforward +theocracy/SM +theocratic +theodolite/S +theologian/SM +theological/Y +theology/SM +theorem/MS +theoretic +theoretical/Y +theoretician/SM +theorise/DSG +theorist/SM +theory/SM +theosophic +theosophical +theosophist/SM +theosophy/M +therapeutic/S +therapeutically +therapeutics/M +therapist/SM +therapy/SM +there/M +thereabout/S +thereafter +thereat +thereby +therefor +therefore +therefrom +therein +theremin/SM +thereof +thereon +thereto +theretofore +thereunto +thereupon +therewith +therm/SM +thermal/MYS +thermionic +thermodynamic/S +thermodynamics/M +thermometer/MS +thermometric +thermonuclear +thermoplastic/SM +thermos/MS +thermostat/MS +thermostatic +thermostatically +thesauri +thesaurus/MS +these/S +thesis/M +thespian/SM +theta/SM +thew/MS +they +they'd +they'll +they're +they've +thiamine/M +thick/PMNRYXT +thicken/DRJZG +thickener/M +thickening/M +thicket/MS +thickheaded/M +thickness/MS +thicko/S +thickset +thief/M +thieve/DSG +thievery/M +thieving/M +thievish +thigh/M +thighbone/MS +thighs +thimble/MS +thimbleful/SM +thin/YSP +thine +thing/M +thingamabob/SM +thingamajig/SM +thingumabob/S +thingummy/S +thingy/S +think/SRBZG +thinkable/U +thinker/M +thinking's +thinned +thinner/MS +thinness/M +thinnest +thinning +third/SMY +thirst/SGMD +thirstily +thirstiness/M +thirsty/TPR +thirteen/SMH +thirteenth/M +thirteenths +thirtieth/M +thirtieths +thirty/HSM +this +thistle/MS +thistledown/M +thither +tho +thole/SM +thong/SM +thoracic +thorax/MS +thorium/M +thorn/SM +thorniness/M +thorny/PRT +thorough/RYPT +thoroughbred/MS +thoroughfare/MS +thoroughgoing +thoroughness/M +those +thou/MS +though +thought/SM +thoughtful/YP +thoughtfulness/M +thoughtless/PY +thoughtlessness/M +thousand/MHS +thousandfold +thousandth/M +thousandths +thraldom/M +thrall/SMDG +thrash/JMDRSZG +thrasher/M +thrashing/M +thread/SMDRZG +threadbare +threader/M +threadlike +thready/TR +threat/SMNX +threaten/DG +threatening/Y +three/SM +threefold +threepence/M +threescore/MS +threesome/SM +threnody/SM +thresh/MDRSZG +thresher/M +threshold/SM +threw +thrice +thrift/SM +thriftily +thriftiness/M +thriftless +thrifty/PTR +thrill/SMDRZG +thriller/M +thrilling/Y +thrive/DSG +throat/SM +throatily +throatiness/M +throaty/RTP +throb/SM +throbbed +throbbing +throe/SM +thrombi +thrombolytic +thromboses +thrombosis/M +thrombotic +thrombus/M +throne's +throne/S +throng/GSMD +throttle/DRSMZG +throttler/M +through +throughout +throughput/M +throughway/MS +throw/SMRZG +throwaway/SM +throwback/SM +thrower/M +thrown +thru +thrum/SM +thrummed +thrumming +thrush/MS +thrust/GSM +thud/MS +thudded +thudding +thug/MS +thuggery/M +thuggish +thulium/M +thumb/SMDG +thumbnail/SM +thumbprint/SM +thumbscrew/SM +thumbtack/SM +thump/SMDG +thumping/M +thunder/ZGMDRS +thunderbolt/SM +thunderclap/SM +thundercloud/MS +thunderer/M +thunderhead/SM +thunderous/Y +thundershower/SM +thunderstorm/SM +thunderstruck +thundery +thunk/S +thus +thwack/ZGSMDR +thwacker/M +thwart/GSMD +thy +thyme/M +thymine/M +thymus/MS +thyroid/MS +thyroidal +thyself +ti/MRZ +tiara/SM +tibia/M +tibiae +tibial +tic/SM +tick/MDRZGS +ticker/M +ticket/GSMD +ticking/M +tickle/DRSMZG +tickler/M +ticklish/YP +ticklishness/M +ticktacktoe/M +ticktock/MS +tidal/Y +tiddler/S +tiddly +tiddlywink/S +tiddlywinks/M +tide/MGJDS +tideland/SM +tidemark/S +tidewater/MS +tideway/MS +tidily/U +tidiness/UM +tidings/M +tidy/DRSMTGP +tie's +tie/AUSD +tieback/MS +tiebreak/RSZ +tiebreaker/M +tiepin/S +tier/MD +tiff/MDGS +tiger/SM +tigerish +tight/SNRYPXT +tighten/ZGDR +tightener/M +tightfisted +tightness/M +tightrope/MS +tights/M +tightwad/MS +tigress/MS +til +tilapia +tilde/SM +tile/MZGDRS +tiler/M +tiling/M +till/MDRZGSB +tillage/M +tilled/E +tiller/ESM +tilling/E +tilt/MDGS +timber/SMDG +timberland/M +timberline/MS +timbre/SM +timbrel/SM +time/MYZGJDRS +timekeeper/MS +timekeeping/M +timeless/PY +timelessness/M +timeline/MS +timeliness/UM +timely/UPRT +timeout/SM +timepiece/MS +timer/M +timescale/S +timeserver/SM +timeserving/M +timeshare/S +timestamp/SMD +timetable/DSMG +timeworn +timezone +timid/RYTP +timidity/M +timidness/M +timing/M +timorous/PY +timorousness/M +timothy/M +timpani/M +timpanist/SM +tin/SM +tincture/MGDS +tinder/M +tinderbox/MS +tine/MS +tinfoil/M +ting/MDYG +tinge/SM +tingeing +tingle/DSMGJ +tingling/M +tininess/M +tinker/ZGSMDR +tinkerer/M +tinkle/DSMG +tinned +tinniness/M +tinning +tinnitus/M +tinny/PRT +tinplate/M +tinpot +tinsel/SM +tinselled +tinselling +tinsmith/M +tinsmiths +tint/MDGS +tintinnabulation/MS +tintype/MS +tinware/M +tiny/RTP +tip/SM +tipped +tipper/SM +tippet/SM +tippex/GDS +tipping +tipple/DRSMZG +tippler/M +tipsily +tipsiness/M +tipster/MS +tipsy/RPT +tiptoe/DSM +tiptoeing +tiptop/SM +tirade/SM +tiramisu/MS +tire's +tire/AGDS +tired/PRYT +tiredness/M +tireless/YP +tirelessness/M +tiresome/PY +tiresomeness/M +tissue/SM +tit/SM +titan/SM +titanic +titanium/M +titbit/SM +titch/S +titchy +tithe/DRSMZG +tither/M +titian/M +titillate/DSGN +titillating/Y +titillation/M +titivate/DSGN +titivation/M +title/DSMG +titled/U +titleholder/MS +titlist/MS +titmice +titmouse/M +titter/SGMD +tittle/SM +titty/S +titular +tizz +tizzy/SM +tn +tnpk +to/IU +toad/MS +toadstool/MS +toady/DSMG +toadyism/M +toast/SMDRZG +toaster/M +toastmaster/SM +toastmistress/MS +toasty/TRS +tobacco/MS +tobacconist/SM +toboggan/ZGSMDR +tobogganer/M +tobogganing/M +toccata/S +tocsin/SM +today/M +toddle/DRSMZG +toddler/M +toddy/SM +toe/DSM +toecap/SM +toehold/MS +toeing +toenail/MS +toerag/S +toff/S +toffee/SM +tofu/M +tog/SM +toga/MDS +together/P +togetherness/M +togged +togging +toggle/DSMG +togs/M +toil/MDRZGS +toiler/M +toilet/MDGS +toiletry/SM +toilette/M +toilsome +toke/MGDS +token/SM +tokenism/M +told/AU +tole/M +tolerable/I +tolerably/I +tolerance/IM +tolerances +tolerant/IY +tolerate/GNDS +toleration/M +toll/MDGS +tollbooth/M +tollbooths +tollgate/SM +tollway/SM +toluene/M +tom/SM +tomahawk/SGMD +tomato/M +tomatoes +tomb/MDGS +tombola/S +tomboy/MS +tomboyish +tombstone/MS +tomcat/MS +tome/MS +tomfoolery/SM +tomographic +tomography/M +tomorrow/MS +tomtit/MS +ton/SM +tonal/Y +tonality/SM +tone's +tone/IZGDRS +tonearm/SM +toneless/Y +toner/IM +tong/MDGS +tongue/MGDS +tongueless +tonic/SM +tonight/M +tonnage/SM +tonne/SM +tonsil/MS +tonsillectomy/SM +tonsillitis/M +tonsorial +tonsure/DSMG +tony/RT +too +took/A +tool's +tool/ADGS +toolbar/SM +toolbox/MS +toolkit +toolmaker/MS +toot/MDRZGS +tooter/M +tooth/MD +toothache/MS +toothbrush/MS +toothily +toothless +toothpaste/SM +toothpick/SM +toothsome +toothy/RT +tootle/GDS +tootsie/S +top/SM +topaz/MS +topcoat/SM +topdressing/SM +topee/S +topflight +topi +topiary/M +topic/SM +topical/Y +topicality/M +topknot/SM +topless +topmast/SM +topmost +topnotch +topographer/SM +topographic +topographical/Y +topography/SM +topological/Y +topology +topped +topper/MS +topping/SM +topple/GDS +topsail/SM +topside/SM +topsoil/M +topspin/M +toque/SM +tor/SM +torch/GMDS +torchbearer/MS +torchlight/M +tore +toreador/MS +torment/SMDG +tormenting/Y +tormentor/MS +torn +tornado/M +tornadoes +torpedo/GMD +torpedoes +torpid/Y +torpidity/M +torpor/M +torque/MGDS +torrent/SM +torrential +torrid/YP +torridity/M +torridness/M +torsion/M +torsional +torso/SM +tort's +tort/FEAS +torte/SM +tortellini/M +tortilla/MS +tortoise/MS +tortoiseshell/SM +tortoni/M +tortuous/PY +tortuousness/M +torture/DRSMZG +torturer/M +torturous +torus +tosh +toss/MDRSZG +tossup/MS +tot/SGMD +total/SMY +totalisator/MS +totalitarian/SM +totalitarianism/M +totality/SM +totalled +totalling +tote/MS +totem/SM +totemic +totted +totter/ZGMDRS +totterer/M +totting +toucan/MS +touch/AGMDS +touchdown/SM +touche/BJ +touched/U +touchily +touchiness/M +touching/Y +touchline/S +touchpaper/S +touchscreen/MS +touchstone/MS +touchy/RPT +tough/XTGMDNRYP +toughen/ZGDR +toughener/M +toughie/SM +toughness/M +toughs +toupee/MS +tour/CFSGDM +tourism/M +tourist/MS +touristic +touristy +tourmaline/M +tournament/SM +tourney/MS +tourniquet/MS +tousle/GDS +tout/MDGS +tow/SZGMDR +toward/S +towboat/MS +towel/SM +towelette/SM +towelled +towelling/SM +tower/GMD +towhead/MDS +towhee/MS +towline/MS +town/MS +townee/S +townhouse/MS +townie/MS +townsfolk/M +township/MS +townsman/M +townsmen +townspeople/M +townswoman/M +townswomen +towpath/M +towpaths +towrope/SM +toxaemia/M +toxic +toxicity/SM +toxicological +toxicologist/SM +toxicology/M +toxin/SM +toy/SGMD +toyboy/S +tr +trabecula +trabeculae +trabecular +trace/JDRSMZG +traceable/U +tracer/M +tracery/SM +trachea/M +tracheae +tracheal +tracheotomy/SM +tracing/M +track/ZGSMDR +trackball/SM +tracker/M +trackless +tracksuit/S +tract's +tract/CEKFAS +tractability/IM +tractable/I +tractably/I +traction/EFACKM +tractor/FCKMS +trad +trade/JDRSMZG +trademark/SGMD +trader/M +tradesman/M +tradesmen +tradespeople/M +tradeswoman/M +tradeswomen +trading/M +tradition/MS +traditional/Y +traditionalism/M +traditionalist/SM +traduce/DRSZG +traducer/M +traffic/SM +trafficked +trafficker/SM +trafficking/M +tragedian/SM +tragedienne/MS +tragedy/SM +tragic +tragically +tragicomedy/SM +tragicomic +trail/ZGSMDR +trailblazer/MS +trailblazing/M +trailer/M +train/ZGSMDRB +trained/U +trainee/SM +trainer/M +training/M +trainload/MS +trainman/M +trainmen +trainspotter/S +trainspotting +traipse/DSMG +trait/SM +traitor/SM +traitorous/Y +trajectory/SM +tram/MS +tramcar/S +tramlines +trammed +trammel/SM +trammelled/U +trammelling +tramming +tramp/ZGSMDR +tramper/M +trample/DRSMZG +trampler/M +trampoline/MGDS +tramway/S +trance/MS +tranche/S +tranquil/RYT +tranquillise/DRSZG +tranquilliser/M +tranquillity/M +trans/I +transact/DGS +transaction/SM +transactor/MS +transatlantic +transceiver/SM +transcend/GSD +transcendence/M +transcendent +transcendental/Y +transcendentalism/M +transcendentalist/SM +transcontinental +transcribe/ZGDRS +transcriber/M +transcript/MS +transcription/SM +transducer/MS +transect/DSG +transept/MS +transfer/MBS +transferal/MS +transference/M +transferred +transferring +transfiguration/M +transfigure/GDS +transfinite +transfix/DSG +transform/BSZGMDR +transformation/SM +transformer/M +transfuse/DSXGN +transfusion/M +transgender/S +transgenic +transgress/GDS +transgression/SM +transgressor/SM +transience/M +transiency/M +transient/SMY +transistor/SM +transistorise/DSG +transit/SGMD +transition/GSMD +transitional/Y +transitive/ISMY +transitiveness/M +transitivity/M +transitory +transl +translatable/U +translate/DSGNBX +translated/U +translation/M +translator/SM +transliterate/DSGNX +transliteration/M +translocation +translucence/M +translucency/M +translucent/Y +transmigrate/GNDS +transmigration/M +transmissible +transmission/MS +transmit/S +transmittable +transmittal/M +transmittance/M +transmitted +transmitter/SM +transmitting +transmogrification/M +transmogrify/DSNG +transmutation/SM +transmute/BDSG +transnational/MS +transoceanic +transom/SM +transpacific +transparency/SM +transparent/Y +transpiration/M +transpire/DSG +transplant/MDGS +transplantation/M +transpolar +transponder/SM +transport/BSZGMDR +transportation/M +transporter/M +transpose/DSG +transposition/MS +transsexual/SM +transsexualism/M +transship/SL +transshipment/M +transshipped +transshipping +transubstantiation/M +transverse/MYS +transvestism/M +transvestite/MS +trap/MS +trapdoor/MS +trapeze/SM +trapezium/SM +trapezoid/SM +trapezoidal +trappable +trapped +trapper/SM +trapping/S +trappings/M +trapshooting/M +trash/GMDS +trashcan/MS +trashiness/M +trashy/RPT +trauma/MS +traumatic +traumatically +traumatise/GDS +travail/SGMD +travel/MS +travelled +traveller/SM +travelling/MS +travelogue/MS +traversal/SM +traverse/DSMG +travesty/GDSM +trawl/ZGSMDR +trawler/M +tray/MS +treacherous/PY +treacherousness/M +treachery/SM +treacle/M +treacly +tread/AGSM +treadle/DSMG +treadmill/MS +treas +treason/BM +treasonous +treasure/DRSMZG +treasurer/M +treasury/SM +treat/AGSMD +treatable +treated/U +treatise/SM +treatment/MS +treaty/SM +treble/MGDS +tree/MDS +treeing +treeless +treelike +treeline +treetop/SM +trefoil/SM +trek/MS +trekked +trekker/SM +trekking +trellis/GMDS +trematode/MS +tremble/DSMG +tremendous/Y +tremolo/SM +tremor/MS +tremulous/PY +tremulousness/M +trench's +trench/ADSG +trenchancy/M +trenchant/Y +trencher/MS +trencherman/M +trenchermen +trend/GSMD +trendily +trendiness/M +trendsetter/S +trendsetting +trendy/RSMPT +trepidation/M +trespass/MDRSZG +trespasser/M +tress/EMS +trestle/MS +trews +trey/MS +triad/SM +triage/M +trial/ASM +trialled +trialling +triangle/SM +triangular/Y +triangulate/GNDS +triangulation/M +triathlete/S +triathlon/SM +tribal +tribalism/M +tribe/SM +tribesman/M +tribesmen +tribeswoman/M +tribeswomen +tribulation/SM +tribunal/SM +tribune/MS +tributary/SM +tribute's +tribute/FS +trice/M +tricentennial/MS +triceps/MS +triceratops/M +trichina/M +trichinae +trichinosis/M +trick/GSMD +trickery/M +trickily +trickiness/M +trickle/MGDS +trickster/SM +tricky/TRP +tricolour/MS +tricycle/SM +trident/MS +tried/U +triennial/MYS +trier/SM +trifecta/SM +trifle/MZGDRS +trifler/M +trifocals/M +trig/M +trigger/MDSG +triglyceride/MS +trigonometric +trigonometrical +trigonometry/M +trike/SM +trilateral/S +trilby/SM +trill/GSMD +trillion/SMH +trillionth/M +trillionths +trillium/M +trilobite/SM +trilogy/SM +trim/PMYS +trimaran/MS +trimester/SM +trimmed/U +trimmer/SM +trimmest +trimming/SM +trimmings/M +trimness/M +trimonthly +trinitrotoluene/M +trinity/SM +trinket/SM +trio/MS +trip/MYS +tripartite +tripe/M +triple/MGDS +triplet/SM +triplex/MS +triplicate/MGDS +tripod/MS +tripodal +tripos +tripped +tripper/SM +tripping +triptych/M +triptychs +tripwire/S +trireme/SM +trisect/SDG +trisection/M +trite/FPYT +triteness/FM +triter +tritium/M +triumph/GMD +triumphal +triumphalism +triumphalist +triumphant/Y +triumphs +triumvir/MS +triumvirate/SM +trivalent +trivet/MS +trivia/M +trivial/Y +trivialisation/M +trivialise/GDS +triviality/SM +trivium/M +trochaic +trochee/SM +trod/AU +trodden/A +troglodyte/SM +troika/MS +troll/SGMD +trolley/SM +trolleybus/MS +trollop/SM +trombone/MS +trombonist/MS +tromp/SGD +tron/S +troop/SZGMDR +trooper/M +troopship/MS +trope/SM +trophy/SM +tropic/MS +tropical/Y +tropics/M +tropism/SM +troposphere/SM +trot/MS +troth/M +trotted +trotter/SM +trotting +troubadour/MS +trouble/DSMG +troubled/U +troublemaker/MS +troubleshoot/DRZGS +troubleshooter/M +troubleshooting/M +troubleshot +troublesome/Y +trough/M +troughs +trounce/DRSZG +trouncer/M +troupe/MZGDRS +trouper/M +trouser/SM +trousers/M +trousseau/M +trousseaux +trout/SM +trove/SM +trow/DSG +trowel/MS +trowelled +trowelling +troy/S +truancy/M +truant/GMDS +truce/SM +truck/SZGMDR +trucker/M +trucking/M +truckle/MGDS +truckload/SM +truculence/M +truculent/Y +trudge/MGDS +true/MTGDRS +truelove/SM +truffle/MS +trug/S +truism/MS +truly/U +trump/SGMD +trumpery/M +trumpet/ZGMDRS +trumpeter/M +truncate/GNDS +truncation/M +truncheon/SM +trundle/MZGDRS +trundler/M +trunk/SGM +truss/GMDS +trust/ESGMD +trustee/MS +trusteeship/SM +trustful/EY +trustfulness/M +trusting/Y +trustworthiness/M +trustworthy/TPR +trusty/TRSM +truth/ZMR +truther/M +truthful/UYP +truthfulness/UM +truthiness +truths/U +try's +try/AGDS +trying/Y +tryout/SM +tryptophan +tryst/SMDG +tsar/MS +tsarists +tsetse/MS +tsp +tsunami/SM +ttys +tub/SZGMDR +tuba/MS +tubal +tubby/TR +tube/MS +tubeless/M +tuber/M +tubercle/SM +tubercular +tuberculin/M +tuberculosis/M +tuberculous +tuberose/M +tuberous +tubful/MS +tubing/M +tubular +tubule/MS +tuck/MDRSZG +tucker/MDG +tuft/MDRSZG +tufter/M +tug/SM +tugboat/MS +tugged +tugging +tuition/IM +tularaemia +tularemia's +tulip/SM +tulle/M +tum/S +tumble/DRSMZG +tumbledown +tumbler/M +tumbleweed/SM +tumbling/M +tumbril/SM +tumescence/M +tumescent +tumid +tumidity/M +tummy/SM +tumorous +tumour/SM +tumult/SM +tumultuous/Y +tun/SZGMDR +tuna/MS +tundra/SM +tune/MS +tuneful/YP +tunefulness/M +tuneless/Y +tuner/M +tuneup/SM +tungsten/M +tunic/SM +tunnel/SM +tunnelled +tunneller/SM +tunnelling/S +tunny/SM +tuple/S +tuppence +tuppenny +tuque/SM +turban/SMD +turbid +turbidity/M +turbine/SM +turbo/SM +turbocharge/ZGDRS +turbocharger/M +turbofan/SM +turbojet/SM +turboprop/SM +turbot/SM +turbulence/M +turbulent/Y +turd/MS +turducken/SM +tureen/SM +turf/MDSG +turfy +turgid/Y +turgidity/M +turkey/SM +turmeric/SM +turmoil/MS +turn/AMDRSZG +turnabout/SM +turnaround/SM +turnbuckle/SM +turncoat/SM +turner/AM +turning/MS +turnip/SM +turnkey/MS +turnoff/MS +turnout/MS +turnover/MS +turnpike/MS +turnstile/SM +turntable/SM +turpentine/M +turpitude/M +turps +turquoise/SM +turret/SMD +turtle/SM +turtledove/SM +turtleneck/SMD +tush/MS +tusk/MDS +tussle/DSMG +tussock/MS +tussocky +tut/SM +tutelage/M +tutelary +tutor/SMDG +tutored/U +tutorial/SM +tutorship/M +tutted +tutti/SM +tutting +tutu/MS +tux/MS +tuxedo/SM +twaddle/MZGDRS +twaddler/M +twain/M +twang/SMDG +twangy/RT +twas +twat/S +tweak/SMDG +twee +tweed/SM +tweeds/M +tweedy/RT +tween +tweet's +tweet/ASDG +tweeter/SM +tweezers/M +twelfth/M +twelfths +twelve/SM +twelvemonth/M +twelvemonths +twentieth/M +twentieths +twenty/SMH +twerk/SDG +twerp/SM +twice +twiddle/MGDS +twiddly +twig/MS +twigged +twigging +twiggy/TR +twilight/M +twilit +twill/MD +twin/MDRSZG +twine/SM +twiner/M +twinge/DSMG +twink/SY +twinkle/MGJDS +twinkling/M +twinned +twinning +twinset/S +twirl/SMDRZG +twirler/M +twirly +twist's +twist/USDG +twister/MS +twisty/TR +twit/MS +twitch/GMDS +twitchy/RT +twitted +twitter/MDSG +twittery +twitting +twixt +two/SM +twofer/SM +twofold +twopence/SM +twopenny +twosome/SM +twp +tycoon/SM +tying/AU +tyke/MS +tympani/M +tympanic +tympanist/MS +tympanum/SM +type's +type/AGDS +typecast/GS +typeface/MS +typescript/MS +typeset/S +typesetter/MS +typesetting/M +typewrite/RSZG +typewriter/M +typewriting/M +typewritten +typewrote +typhoid/M +typhoon/MS +typhus/M +typical/UY +typicality/M +typification/M +typify/NGDS +typing/M +typist/SM +typo/MS +typographer/SM +typographic +typographical/Y +typography/M +typology/SM +tyrannic +tyrannical/Y +tyrannise/GDS +tyrannosaur/MS +tyrannosaurus/MS +tyrannous +tyranny/SM +tyrant/SM +tyre/MS +tyro/MS +u/S +ubiquitous/Y +ubiquity/M +udder/SM +ufologist/SM +ufology/M +ugh +ugliness/M +ugly/RTP +uh +uhf +ukase/SM +ukulele/SM +ulcer/SM +ulcerate/XDSGN +ulceration/M +ulcerous +ulna/M +ulnae +ulnar +ulster/MS +ult +ulterior +ultimate/MY +ultimatum/MS +ultimo +ultra/SM +ultraconservative/SM +ultrahigh +ultralight/SM +ultramarine/M +ultramodern +ultrasonic +ultrasonically +ultrasound/MS +ultraviolet/M +ululate/DSGNX +ululation/M +um +umbel/SM +umber/M +umbilical +umbilici +umbilicus/M +umbra/SM +umbrage/M +umbrella/SM +umiak/SM +umlaut/MS +ump/SGMD +umpire/MGDS +umpteen/H +unabridged/MS +unacceptability +unacceptable +unaccommodating +unaccountably +unadventurous +unaesthetic +unalterably +unambitious +unanimity/M +unanimous/Y +unapparent +unappetising +unappreciative +unassertive +unassuming/Y +unavailing/Y +unaware/S +unbeknown +unbend/SG +unbent +unbid +unblinking/Y +unblushing/Y +unbosom/DG +unbound/D +unbreakable +unbroken +uncanny/T +uncap/S +uncaring +unceasing/Y +unchangeable +uncharacteristic +uncharitable +unchaste/RT +uncial/M +uncle/SM +unclean/DRPT +uncleanly/T +unclear/DRT +uncomfortable +uncommon/T +uncomplaining/Y +uncomplicated +uncomprehending/Y +uncompromising/Y +unconditional/Y +uncongenial +unconscionable +unconscionably +unconscious/M +unconstitutional/Y +uncontrollably +uncontroversial +uncool +uncooperative +uncouth/Y +uncrushable +unction/SM +unctuous/YP +unctuousness/M +uncut +undaunted/Y +undecided/SM +undemonstrative/Y +undeniably +under +underachieve/LZGDRS +underachiever/M +underact/SDG +underage +underappreciated +underarm/SM +underbelly/SM +underbid/S +underbidding +underbrush/M +undercarriage/MS +undercharge/MGDS +underclass/MS +underclassman/M +underclassmen +underclothes/M +underclothing/M +undercoat/GJSMD +undercoating/M +undercover +undercurrent/SM +undercut/SM +undercutting +underdeveloped +underdevelopment/M +underdog/SM +underdone +underemployed +underemployment/M +underestimate/DSMGNX +underestimation/M +underexpose/GDS +underexposure/MS +underfed +underfeed/GS +underfloor +underflow +underfoot +underfunded +underfur/M +undergarment/SM +undergo/G +undergoes +undergone +undergrad/S +undergraduate/SM +underground/MS +undergrowth/M +underhand +underhanded/PY +underhandedness/M +underlain +underlay/SM +underlie/S +underline/MGDS +underling/MS +underlip/SM +underlying +undermanned +undermentioned +undermine/GDS +undermost +underneath/M +underneaths +undernourished +undernourishment/M +underpaid +underpants/M +underpart/MS +underpass/MS +underpay/GSL +underpayment/SM +underpin/S +underpinned +underpinning/MS +underplay/DGS +underpopulated +underprivileged +underproduction/M +underrate/GDS +underrepresented +underscore/DSMG +undersea/S +undersecretary/SM +undersell/GS +undersexed +undershirt/SM +undershoot/SG +undershorts/M +undershot +underside/MS +undersign/DGS +undersigned/M +undersized +underskirt/SM +undersold +understaffed +understand/SGBJ +understandably +understanding/MY +understate/DSLG +understatement/SM +understood +understudy/GDSM +undertake/ZGJRS +undertaken +undertaker/M +undertaking/M +underthings/M +undertone/MS +undertook +undertow/SM +underused +underutilised +undervaluation/M +undervalue/DSG +underwater +underway +underwear/M +underweight/M +underwent +underwhelm/DGS +underwire/DS +underworld/MS +underwrite/ZGRS +underwriter/M +underwritten +underwrote +undesirable/MS +undies/M +undo +undoubted/Y +undramatic +undue +undulant +undulate/DSXGN +undulation/M +undying +unearthliness/M +unease/M +uneasy/T +uneatable +uneconomic +unemployed/M +unending +unenterprising +unequal/Y +unerring/Y +unessential +uneven/Y +unexceptionably +unexcited +unexciting +unexpected/YP +unexpectedness/M +unfailing/Y +unfair/PTRY +unfaltering +unfamiliar +unfathomably +unfed +unfeeling/Y +unfeminine +unfit/S +unfitting +unfix/GDS +unflagging/Y +unflappability/M +unflappable +unflappably +unflattering +unflinching/Y +unforgettably +unforgivably +unfortunate/MS +unfriendly/T +unfrock/DG +unfruitful +unfunny +ungainliness/M +ungainly/RPT +ungenerous +ungentle +ungodly/T +ungraceful/Y +ungrudging +unguarded +unguent/SM +ungulate/MS +unhandy/T +unhappy/T +unhealthful +unhealthy/T +unhistorical +unholy/T +unhurt +unicameral +unicellular +unicorn/SM +unicycle/SM +unidirectional +unification/AM +uniform/SMDYG +uniformity/M +unify/AGDSN +unilateral/Y +unilateralism +unimportant +unimpressive +uninformative +uninhibited/Y +uninstall/BSZGDR +uninsured +unintelligent +unintended +uninteresting +uninterrupted/Y +uninterruptible +uninviting +union/ASM +unionism/M +unionist/MS +unique/YTRP +uniqueness/M +unisex/M +unison/M +unitary +unite/AEGSD +unitedly +unities +unitise/DSG +unity/EM +univalent +univalve/SM +universal/MYS +universalise/DSG +universality/M +universe/SM +university/SM +unjust/Y +unkempt +unkind/T +unkindly/T +unknowable/M +unknown/SM +unleaded/M +unless +unlike/PB +unlikely/T +unlivable +unlock/DSG +unlovable +unlovely/TR +unloving +unlucky/T +unmanly/T +unmarried +unmeaning +unmentionable/MS +unmentionables/M +unmet +unmindful +unmissable +unmistakably +unmoral +unmovable +unmusical +unnecessary +unnerving/Y +unobservant +unoffensive +unofficial/Y +unoriginal +unpeople +unperceptive +unpersuasive +unpick/GDS +unpin/S +unpleasing +unpolitical +unpopular +unpractical +unprecedented/Y +unprofessional/Y +unpromising +unpropitious +unquestioning/Y +unquiet/TR +unravelling +unread/B +unready +unreal +unreasoning +unregenerate +unrelated +unrelenting/Y +unrelieved/Y +unremarkable +unremitting/Y +unrepentant +unreported +unrepresentative +unrest/M +unripe/TR +unroll/GDS +unromantic +unruliness/M +unruly/RTP +unsafe/YTR +unsalable +unsavoury +unscathed +unsearchable +unseeing/Y +unseemly/T +unseen/M +unsentimental +unset +unshakably +unshakeable +unshapely +unshockable +unshorn +unsightliness/M +unsightly/PT +unskillful/Y +unsmiling +unsociable +unsocial +unsold +unsound/PRYT +unspeakable +unspeakably +unspecific +unspectacular +unsporting +unstable +unsteady/TRP +unstinting/Y +unstrapping +unsubstantial +unsubtle +unsuitable +unsure +unsuspecting/Y +unsymmetrical +untactful +unthinkably +unthinking/Y +untidy/PTR +until +untimely/T +untiring/Y +untouchable/MS +untoward +untraveled +untrue/RT +untrustworthy +untruth/M +unutterable +unutterably +unwarrantable +unwary/T +unwavering +unwed +unwelcome/G +unwell +unwieldiness/M +unwieldy/TRP +unwise/RYT +unworried +unworthy/T +unwound +unwrapping +unyielding +up/S +upbeat/MS +upbraid/SGD +upbringing/MS +upchuck/SGD +upcoming +upcountry/M +update/MGDRS +updraught/SM +upend/SGD +upfront +upgrade/MGDS +upheaval/MS +upheld +uphill/MS +uphold/ZGRS +upholder/M +upholster/ASGD +upholsterer/MS +upholstery/M +upkeep/M +upland/MS +uplift/JSMDG +upload/SDG +upmarket +upmost +upon +upped +upper/SM +uppercase/M +upperclassman/M +upperclassmen +upperclasswoman +upperclasswomen +uppercut/MS +uppercutting +uppermost +upping +uppish +uppity +upraise/DSG +uprear/GSD +upright/MYPS +uprightness/M +uprising/SM +upriver +uproar/SM +uproarious/Y +uproot/GSD +upscale +upset/SM +upsetting +upshot/SM +upside/SM +upsilon/MS +upstage/GDS +upstairs +upstanding +upstart/MDSG +upstate/M +upstream +upstroke/SM +upsurge/MGDS +upswing/MS +uptake/SM +uptempo +upthrust/GSM +uptick/SM +uptight +uptown/M +uptrend +upturn/GSMD +upward/SY +upwind +uracil/M +uraemia/M +uraemic +uranium/M +urban +urbane/RYT +urbanisation/M +urbanise/DSG +urbanity/M +urbanologist/MS +urbanology/M +urchin/SM +urea/M +ureter/SM +urethane/M +urethra/M +urethrae +urethral +urge/MGDS +urgency/M +urgent/Y +uric +urinal/SM +urinalyses +urinalysis/M +urinary +urinate/GNDS +urination/M +urine/M +urn/SM +urogenital +urological +urologist/MS +urology/M +ursine +urticaria/M +usability/M +usable/UA +usage/SM +use/AEDSMG +used/U +useful/PY +usefulness/M +useless/YP +uselessness/M +user/MS +username/MS +usher/SMDG +usherette/SM +usu +usual's +usual/UY +usurer/SM +usurious +usurp/SDRZG +usurpation/M +usurper/M +usury/M +utensil/SM +uteri +uterine +uterus/M +utilisation/M +utilise/GBDS +utilitarian/MS +utilitarianism/M +utility/SM +utmost/M +utopia/SM +utter/SDYG +utterance/SM +uttermost/M +uveitis +uvula/SM +uvular/MS +uxorious +v/AS +vac/S +vacancy/SM +vacant/Y +vacate/DSG +vacation/ZGMDRS +vacationer/M +vacationist/SM +vaccinate/GNDSX +vaccination/M +vaccine/SM +vacillate/XGNDS +vacillation/M +vacuity/M +vacuole/MS +vacuous/YP +vacuousness/M +vacuum/GSMD +vagabond/SMDG +vagabondage/M +vagarious +vagary/SM +vagina/SM +vaginae +vaginal/Y +vagrancy/M +vagrant/MS +vague/RYTP +vagueness/M +vagus +vain/RYT +vainglorious/Y +vainglory/M +val +valance/MS +vale/MS +valediction/MS +valedictorian/SM +valedictory/SM +valence/MS +valency/SM +valentine/SM +valet/SMDG +valetudinarian/MS +valetudinarianism/M +valiance/M +valiant/Y +valid/Y +validate/IGNDS +validation/IM +validations +validity/IM +validness/M +valise/SM +valley/SM +valorous/Y +valour/M +valuable/MS +valuate/DSG +valuation/CAMS +value's +value/CAGSD +valueless +valuer/SM +valve/DSMG +valveless +valvular +vamoose/DSG +vamp/AMDGS +vampire/SM +van/SM +vanadium/M +vandal/SM +vandalise/DSG +vandalism/M +vane/MS +vanguard/MS +vanilla/SM +vanish/JDSG +vanity/SM +vanned +vanning +vanquish/ZGDRS +vanquisher/M +vantage/SM +vape/GDS +vapid/YP +vapidity/M +vapidness/M +vaporisation/M +vaporise/DRSZG +vaporiser/M +vaporous +vaporware +vapour/SM +vapoury +vaquero/MS +var/S +variability/IM +variable/ISM +variably/I +variance/SM +variant/MS +variate/NX +variation/M +varicoloured +varicose +varied/U +variegate/DSGN +variegation/M +varietal/SM +variety/SM +various/Y +varlet/SM +varmint/MS +varnish/GMDS +varnished/U +varsity/SM +vary/DSG +varying/U +vascular +vase/MS +vasectomy/SM +vasoconstriction +vasomotor +vassal/SM +vassalage/M +vast/MRYTSP +vastness/M +vat/SM +vatted +vatting +vaudeville/M +vaudevillian/MS +vault/SMDRZG +vaulter/M +vaulting/M +vaunt/SMDG +vb +veal/M +vector/SGMD +veejay/SM +veep/MS +veer/MDGS +veg/M +vegan/SM +veganism +vegeburger/S +veges +vegetable/SM +vegetarian/SM +vegetarianism/M +vegetate/GNVDS +vegetation/M +vegged +vegges +veggie/SM +veggieburger/S +vegging +vehemence/M +vehemency/M +vehement/Y +vehicle/MS +vehicular +veil's +veil/UDGS +vein/MDGS +vela +velar/SM +veld/MS +vellum/M +velocipede/MS +velocity/SM +velodrome/S +velour/MS +velum/M +velvet/M +velveteen/M +velvety +venal/Y +venality/M +venation/M +vend/DGS +vendetta/SM +vendible +vendor/MS +veneer/MDGS +venerability/M +venerable +venerate/DSGN +veneration/M +venereal +vengeance/M +vengeful/AY +venial +venireman/M +veniremen +venison/M +venom/M +venomous/Y +venous +vent's +vent/DGS +ventilate/GNDS +ventilation/M +ventilator/SM +ventral +ventricle/SM +ventricular +ventriloquism/M +ventriloquist/SM +ventriloquy/M +venture/DSMG +venturesome/PY +venturesomeness/M +venturous/PY +venturousness/M +venue/ASM +veracious/Y +veracity/M +veranda/SM +verb/KMS +verbal/MYS +verbalisation/M +verbalise/GDS +verbatim +verbena/SM +verbiage/MS +verbose/Y +verbosity/M +verboten +verdant/Y +verdict/SM +verdigris/GMDS +verdure/M +verge's +verge/FDSG +verger/MS +verifiable/U +verification/M +verified/U +verify/DSNG +verily +verisimilitude/M +veritable +veritably +verity/SM +vermicelli/M +vermiculite/M +vermiform +vermilion/M +vermin/M +verminous +vermouth/M +vernacular/MS +vernal +vernier/SM +veronica/M +verruca/SM +verrucae +versa +versatile +versatility/M +verse/AFNGMSDX +versed/U +versification/M +versifier/M +versify/ZGNDRS +version/AFIMS +versioned +versioning +verso/SM +versus +vert/A +vertebra/M +vertebrae +vertebral +vertebrate/IMS +vertex/MS +vertical/MYS +vertices +vertiginous +vertigo/M +verve/M +very/RT +vesicle/SM +vesicular +vesiculate +vesper/MS +vessel/MS +vest's +vest/ILDGS +vestal/MS +vestibule/MS +vestige/SM +vestigial/Y +vesting/M +vestment/IMS +vestry/SM +vestryman/M +vestrymen +vet/SM +vetch/MS +veteran/SM +veterinarian/MS +veterinary/SM +veto/MDG +vetoes +vetted +vetting +vex/GDS +vexation/SM +vexatious/Y +vhf +vi +via +viability/M +viable +viably +viaduct/SM +vial/MS +viand/SM +vibe/MS +vibes/M +vibraharp/SM +vibrancy/M +vibrant/Y +vibraphone/MS +vibraphonist/MS +vibrate/GNDSX +vibration/M +vibrato/MS +vibrator/SM +vibratory +viburnum/SM +vicar/SM +vicarage/SM +vicarious/YP +vicariousness/M +vice/CMS +viced +vicegerent/SM +vicennial +viceregal +viceroy/MS +vichyssoise/M +vicing +vicinity/M +vicious/YP +viciousness/M +vicissitude/SM +victim/MS +victimisation/M +victimise/GDS +victor/MS +victorious/Y +victory/SM +victual/SM +victualled +victualling +vicuna/MS +videlicet +video/GSMD +videocassette/SM +videoconferencing +videodisc/MS +videophone/MS +videotape/DSMG +videotex +vie/DS +view/AMDRSZG +viewer/AM +viewership/M +viewfinder/SM +viewing/SM +viewpoint/MS +vigesimal +vigil/SM +vigilance/M +vigilant/Y +vigilante/SM +vigilantism/M +vigilantist/M +vignette/DSMG +vignettist/MS +vigorous/Y +vigour/M +vii +viii +viking/MS +vile/YTPR +vileness/M +vilification/M +vilify/DSNG +villa/SM +village/RSMZ +villager/M +villain/SM +villainous +villainy/SM +villein/SM +villeinage/M +villi +villus/M +vim/M +vinaigrette/M +vincible/I +vindicate/XDSGN +vindication/M +vindicator/MS +vindictive/PY +vindictiveness/M +vine/MS +vinegar/M +vinegary +vineyard/MS +vino/M +vinous +vintage/MS +vintner/MS +vinyl/SM +viol/MBS +viola/SM +violable/I +violate/GNDSX +violation/M +violator/SM +violence/M +violent/Y +violet/MS +violin/MS +violincello/S +violinist/SM +violist/MS +violoncellist/SM +violoncello/MS +viper/SM +viperous +virago/M +viragoes +viral +vireo/SM +virgin/MS +virginal/SM +virginity/M +virgule/MS +virile +virility/M +virologist/SM +virology/M +virtual/Y +virtualisation +virtue/SM +virtuosity/M +virtuoso/M +virtuous/YP +virtuousness/M +virulence/M +virulent/Y +virus/MS +visa/MDSG +visage/MS +viscera +visceral/Y +viscid +viscose/M +viscosity/M +viscount/SM +viscountcy/SM +viscountess/MS +viscous +viscus/M +vise/ACMGDS +visibility/IM +visible/I +visibly/I +vision/KGDSM +visionary/SM +visit's +visit/ASGD +visitant/MS +visitation/MS +visitor/MS +visor/SM +vista/SM +visual/SMY +visualisation/SM +visualise/DRSZG +visualiser/M +vita/M +vitae +vital/SY +vitalisation/AM +vitalise/CAGSD +vitality/M +vitals/M +vitamin/MS +vitiate/GNDS +vitiation/M +viticulture/M +viticulturist/MS +vitreous +vitrifaction/M +vitrification/M +vitrify/GNDS +vitrine/SM +vitriol/M +vitriolic +vitriolically +vittles/M +vituperate/GNVDS +vituperation/M +viva/MS +vivace +vivacious/PY +vivaciousness/M +vivacity/M +vivaria +vivarium/SM +vivid/RYTP +vividness/M +vivify/ADSG +viviparous +vivisect/DGS +vivisection/M +vivisectional +vivisectionist/SM +vixen/SM +vixenish/Y +viz +vizier/SM +vlf +vocab +vocable/MS +vocabulary/SM +vocal/SMY +vocalic +vocalisation/SM +vocalise/DSG +vocalist/SM +vocation/FIKASM +vocational/Y +vocative/MS +vociferate/DSGN +vociferation/M +vociferous/YP +vociferousness/M +vodka/SM +vogue/SM +voguish +voice/IDSMG +voiced/U +voiceless/PY +voicelessness/M +voicemail/SM +void/MDSGB +voila +voile/M +vol/S +volatile +volatilise/DSG +volatility/M +volcanic +volcano/M +volcanoes +vole/MS +volition/M +volitional +volley/GSMD +volleyball/MS +volt/AMS +voltage/MS +voltaic +voltmeter/SM +volubility/M +voluble +volubly +volume/SM +voluminous/YP +voluminousness/M +voluntarily/I +voluntarism/M +voluntary/SM +volunteer/SGMD +volunteerism/M +voluptuary/SM +voluptuous/PY +voluptuousness/M +volute/SM +vomit/SMDG +voodoo/GSMD +voodooism/M +voracious/PY +voraciousness/M +voracity/M +vortex/MS +votary/SM +vote's +vote/CGVDS +voter/SM +vouch/DRSZG +voucher/M +vouchsafe/DSG +vow/SGMD +vowel/SM +voyage/MZGDRS +voyager/M +voyageur/SM +voyeur/MS +voyeurism/M +voyeuristic +vulcanisation/M +vulcanise/GDS +vulgar/RYT +vulgarian/MS +vulgarisation/M +vulgarise/ZGDRS +vulgariser/M +vulgarism/MS +vulgarity/SM +vulnerabilities +vulnerability/IM +vulnerable/I +vulnerably/I +vulpine +vulture/SM +vulturous +vulva/M +vulvae +vuvuzela/MS +vying +w/DNXTGVJ +wabbit/S +wack/MRTS +wackiness/M +wacko/SM +wacky/RPT +wad/SZGMDR +wadded +wadding/M +waddle/DSMG +wade/MS +wader/M +waders/M +wadge/S +wadi/MS +wafer/SM +waffle/MZGDRS +waffler/M +waft/MDGS +wag/SZGMDR +wage/MS +waged/U +wager/ZGMDR +wagerer/M +wagged +waggery/SM +wagging +waggish/YP +waggishness/M +waggle/MGDS +wagon/ZSMR +wagoner/M +wagtail/SM +waif/MS +wail/MDRZGS +wailer/M +wailing/M +wain/MS +wainscot/SJMDG +wainscoting/M +wainwright/MS +waist/SM +waistband/MS +waistcoat/MS +waistline/MS +wait/MDRZGS +waiter/M +waiting/M +waitperson/MS +waitress/MS +waitstaff/M +waive/DRSZG +waiver/M +wake/MGJDS +wakeful/PY +wakefulness/M +waken/GSD +waldo/S +waldoes +wale/MGDS +walk/MDRZGS +walkabout/S +walkaway/MS +walker/M +walkies +walking/M +walkout/SM +walkover/MS +walkway/SM +wall/MDGS +wallaby/SM +wallah +wallahs +wallboard/M +wallet/MS +walleye/DSM +wallflower/MS +wallop/MDSJG +walloping/M +wallow/MDSG +wallpaper/SMDG +wally/S +walnut/MS +walrus/MS +waltz/ZGMDRS +waltzer/M +wampum/M +wan/GPDY +wand/MS +wander/DRSJZG +wanderer/M +wanderings/M +wanderlust/SM +wane/MS +wangle/MZGDRS +wangler/M +wank/DRZGS +wanna +wannabe/SM +wannabee/S +wanner +wanness/M +wannest +want/MDGS +wanted/U +wanton/MDYSPG +wantonness/M +wapiti/MS +war/SM +warble/MZGDRS +warbler/M +warbonnet/SM +ward/AMDGS +warden/MS +warder/MS +wardress/S +wardrobe/SM +wardroom/SM +ware/MS +warehouse/DSMG +warez +warfare/M +warhead/MS +warhorse/SM +warily/U +wariness/UM +warlike +warlock/MS +warlord/MS +warm/PDRYHZTGS +warmblooded +warmer/M +warmhearted/P +warmheartedness/M +warmish +warmness/M +warmonger/SMG +warmongering/M +warmth/M +warn/JDGS +warning/M +warp/MDGS +warpaint +warpath/M +warpaths +warplane/MS +warrant/GMDS +warranted/U +warranty/DSMG +warred +warren/MS +warring +warrior/SM +warship/SM +wart/MS +warthog/SM +wartime/M +warty/TR +wary/UPRT +was +wasabi +wash/BJMDRSZG +washable/SM +washbasin/SM +washboard/SM +washbowl/SM +washcloth/M +washcloths +washed/U +washer/M +washerwoman/M +washerwomen +washing/M +washout/MS +washrag/MS +washroom/MS +washstand/SM +washtub/MS +washy/TR +wasn't +wasp/MS +waspish/YP +waspishness/M +wassail/SMDG +wast +wastage/M +waste/DRSMZG +wastebasket/MS +wasteful/PY +wastefulness/M +wasteland/SM +wastepaper/M +waster/M +wastewater +wastrel/SM +watch/BZGMDRS +watchable/U +watchband/MS +watchdog/SM +watcher/M +watchful/YP +watchfulness/M +watchmaker/MS +watchmaking/M +watchman/M +watchmen +watchstrap/S +watchtower/SM +watchword/MS +water/GSMD +waterbed/MS +waterbird/SM +waterboard/MDJSG +waterboarding/M +waterborne +watercolour/MS +watercourse/SM +watercraft/M +watercress/M +waterfall/SM +waterfowl/SM +waterfront/MS +waterhole/SM +wateriness/M +waterlily/SM +waterline/MS +waterlogged +watermark/MDGS +watermelon/SM +watermill/MS +waterproof/SMDG +waterproofing/M +waters/M +watershed/MS +waterside/MS +waterspout/SM +watertight +waterway/MS +waterwheel/SM +waterworks/M +watery/PTR +watt/MS +wattage/M +wattle/MGDS +wave/MZGDRS +waveband/S +waveform +wavelength/M +wavelengths +wavelet/SM +wavelike +waver/ZGMDR +waverer/M +wavering/Y +waviness/M +wavy/PRT +wax/GMDNS +waxiness/M +waxwing/SM +waxwork/SM +waxy/RPT +way/SM +waybill/SM +wayfarer/MS +wayfaring/SM +waylaid +waylay/RSZG +waylayer/M +wayside/SM +wayward/PY +waywardness/M +wazoo/S +we +we'd +we'll +we're +we've +weak/PNRYXT +weaken/DRZG +weakener/M +weakfish/MS +weakish +weakling/SM +weakness/MS +weal/MHS +wealth/M +wealthiness/M +wealthy/TRP +wean/DGS +weapon/MS +weaponize/GDS +weaponless +weaponry/M +wear/MRBJSZG +wearable/U +wearer/M +wearied/U +wearily +weariness/M +wearisome/Y +weary/TGDRSP +weasel/MYS +weaselled +weaselling +weather/SMDG +weatherboard/SG +weathercock/MS +weathering/M +weatherise/DSG +weatherization/M +weatherman/M +weathermen +weatherperson/MS +weatherproof/GSD +weatherstrip/S +weatherstripped +weatherstripping/M +weave/DRSMZG +weaver/M +weaving/M +web/SM +webbed +webbing/M +webcam/MS +webcast/SMG +webfeet +webfoot/M +webinar/SM +webisode/MS +weblog/MS +webmaster/SM +webmistress/MS +website/SM +wed/AS +wedded/A +wedder +wedding/SM +wedge/DSMG +wedgie/MS +wedlock/M +wee/RSMT +weed/MDRSZG +weeder/M +weedkiller/S +weedless +weedy/TR +weeing +week/MYS +weekday/SM +weekend/SZGMDR +weekly/SM +weeknight/SM +ween/DSG +weenie/MTRS +weensy/RT +weeny +weep/MRJSZG +weeper/M +weepie +weepy/TRSM +weevil/MS +weft/MS +weigh's +weigh/AGD +weighbridge/S +weighs/A +weight/MDSJG +weighted/U +weightily +weightiness/M +weightless/YP +weightlessness/M +weightlifter/MS +weightlifting/M +weighty/PTR +weir/MS +weird/PTRY +weirdie/MS +weirdness/M +weirdo/MS +welcome/MGDS +weld/MDRBSZG +welder/M +welfare/M +welkin/M +well/MDPSG +wellhead/SM +wellie +wellington/MS +wellness/M +wellspring/MS +welly/S +welsh/ZGDRS +welsher/M +welt/MDRSZG +welter/GMD +welterweight/SM +wen/M +wench/MS +wend/DSG +went +wept +were +weren't +werewolf/M +werewolves +west/M +westbound +westerly/SM +western/SZMR +westerner/M +westernisation/M +westernise/GDS +westernmost +westward/S +wet/SMYP +wetback/SM +wetland/SM +wetness/M +wetter/SM +wettest +wetting +wetware/S +whack/SJZGMDR +whacker/M +whale/DRSMZG +whaleboat/MS +whalebone/M +whaler/M +whaling/M +wham/MS +whammed +whamming +whammy/SM +wharf/M +wharves +what/MS +whatchamacallit/MS +whatever +whatnot/M +whatshername +whatshisname +whatsit/S +whatsoever +wheal/SM +wheat/MN +wheatgerm +wheatmeal +whee +wheedle/DRSZG +wheedler/M +wheel/SMDRG +wheelbarrow/SM +wheelbase/SM +wheelchair/SM +wheelhouse/MS +wheelie/SM +wheelwright/MS +wheeze/DSMG +wheezily +wheeziness/M +wheezy/PRT +whelk/SMD +whelm/SDG +whelp/SMDG +when/MS +whence +whenever +whensoever +where/SM +whereabouts/M +whereas +whereat +whereby +wherefore/MS +wherein +whereof +whereon +wheresoever +whereto +whereupon +wherever +wherewith +wherewithal/M +wherry/SM +whet/S +whether +whetstone/SM +whetted +whetting +whew +whey/M +which +whichever +whiff/SMDG +whiffletree/MS +while/DSMG +whilom +whilst +whim/MS +whimper/MDGS +whimsical/Y +whimsicality/M +whimsy/SM +whine/DRSMZG +whiner/M +whinge/DRSZG +whingeing +whinny/GDSM +whiny/RT +whip/MS +whipcord/M +whiplash/MS +whipped +whipper/MS +whippersnapper/MS +whippet/MS +whipping/SM +whippletree/SM +whippoorwill/MS +whipsaw/MDGS +whirl/SMDG +whirligig/MS +whirlpool/MS +whirlwind/MS +whirlybird/SM +whirr/SMDG +whisk/SMDRZG +whisker/MD +whiskery +whisky/SM +whiskys +whisper/MDRSZG +whisperer/M +whist/M +whistle/MZGDRS +whistler/M +whit/MDNRSXTGJ +white/SPM +whitebait +whiteboard/S +whitecap/SM +whitefish/MS +whitehead/MS +whiten/ZGDRJ +whitener/M +whiteness/M +whitening/M +whiteout/SM +whitetail/MS +whitewall/SM +whitewash/MDSG +whitewater/M +whitey/SM +whither +whiting/M +whitish +whittle/ZGDRS +whittler/M +whizkid/M +whizz/MDSG +whizzbang/MS +who'd +who'll +who're +who've +who/M +whoa +whodunit/MS +whoever +whole/SMP +wholefood/S +wholegrain +wholehearted/YP +wholeheartedness/M +wholemeal +wholeness/M +wholesale/MZGDRS +wholesaler/M +wholesome/UP +wholesomely +wholesomeness/UM +wholewheat +wholly +whom +whomever +whomsoever +whoop/SMDRZG +whoopee/S +whooper/M +whoosh/MDSG +whop/S +whopped +whopper/SM +whopping +whore/SMG +whorehouse/MS +whoreish +whorish +whorl/SMD +whose +whoso +whosoever +whup/S +whupped +whupping +why'd +why/M +whys +wick/MDRSZ +wicked/TPRY +wickedness/M +wicker/M +wickerwork/M +wicket/SM +wide/YTRP +widemouthed +widen/SDRZG +widener/M +wideness/M +widescreen/MS +widespread +widget/S +widow/SMDRZG +widower/M +widowhood/M +width/M +widths +wield/SDRZG +wielder/M +wiener/SM +wienie/SM +wife/MY +wifeless +wig/SM +wigeon/M +wigged +wigging +wiggle/DRSMZG +wiggler/M +wiggly/TR +wight/SM +wiglet/SM +wigwag/SM +wigwagged +wigwagging +wigwam/SM +wiki/MS +wild/MRYSTP +wildcard/MS +wildcat/MS +wildcatted +wildcatter/MS +wildcatting +wildebeest/MS +wilderness/MS +wildfire/MS +wildflower/SM +wildfowl/M +wildlife/M +wildness/M +wilds/M +wile/MGDS +wilful/PY +wilfulness/M +wiliness/M +will/MDS +willies/M +willing/UPY +willingness/UM +williwaw/MS +willow/SM +willowy +willpower/M +willy/S +wilt/MDSG +wily/RTP +wimp/MDSG +wimpish +wimple/DSMG +wimpy/RT +win/SGMD +wince/DSMG +winch/MDSG +wind's +wind/UASG +windbag/SM +windblown +windbreak/SZMR +windbreaker/M +windburn/MD +windcheater/S +windchill/M +winded +winder/SM +windfall/MS +windflower/MS +windily +windiness/M +winding's +windjammer/SM +windlass/MS +windless +windmill/MDGS +window/SMDG +windowless +windowpane/SM +windowsill/SM +windpipe/MS +windproof +windrow/SM +windscreen/SM +windshield/SM +windsock/MS +windstorm/MS +windsurf/ZGDRS +windsurfer/M +windsurfing/M +windswept +windup/SM +windward/M +windy/RTP +wine/MS +wineglass/MS +winegrower/MS +winemaker/MS +winery/SM +wing/MDRZG +wingding/MS +wingless +winglike +wingnut/SM +wingspan/MS +wingspread/SM +wingtip/SM +wink/MDRSZG +winker/M +winkle/DSMG +winnable/U +winner/SM +winning/MYS +winnow/ZGSDR +winnower/M +wino/MS +winsome/YTRP +winsomeness/M +winter/GSMD +wintergreen/M +winterise/GDS +wintertime/M +wintry/TR +winy/RT +wipe/MZGDRS +wiper/M +wire's +wire/AGDS +wired/S +wirehair/MS +wireless/MS +wiretap/MS +wiretapped +wiretapper/SM +wiretapping/M +wiriness/M +wiring/M +wiry/RTP +wisdom/M +wise/MYTGDRS +wiseacre/SM +wisecrack/MDSG +wiseguy/S +wish/MDRSZG +wishbone/SM +wisher/M +wishful/Y +wishlist's +wisp/MS +wispy/RT +wist +wisteria/SM +wistful/YP +wistfulness/M +wit/SM +witch/MDSG +witchcraft/M +witchery/M +with +withal +withdraw/SG +withdrawal/MS +withdrawn +withdrew +withe/DRSMZG +wither/JGD +withering/Y +withers/M +withheld +withhold/SG +withholding/M +within/M +without +withstand/GS +withstood +witless/PY +witlessness/M +witness/MDSG +wits/M +witted +witter/SGD +witticism/SM +wittily +wittiness/M +witting/UY +witty/RPT +wive/GDS +wiz +wizard/SMY +wizardry/M +wizened +wk/Y +woad/M +wobble/MGDS +wobbliness/M +wobbly/RTP +wodge/S +woe/SM +woebegone +woeful/YP +woefuller +woefullest +woefulness/M +wog/S +wok/SMN +woke +wold/MS +wolf/MDSG +wolfhound/SM +wolfish +wolfram/M +wolverine/SM +wolves +woman/M +womanhood/M +womanise/DRSZG +womaniser/M +womanish +womankind/M +womanlike/M +womanliness/M +womanly/RPT +womb/MS +wombat/MS +womble/S +women/M +womenfolk/SM +womenfolks/M +won't +won/M +wonder/MDGLS +wonderful/YP +wonderfulness/M +wondering/Y +wonderland/MS +wonderment/M +wondrous/Y +wonk/MS +wonky/TR +wont/MD +wonted/U +woo/SZGDR +wood/MDNSG +woodbine/M +woodblock/MS +woodcarver/MS +woodcarving/SM +woodchuck/MS +woodcock/SM +woodcraft/M +woodcut/SM +woodcutter/SM +woodcutting/M +wooden/RYTP +woodenness/M +woodiness/M +woodland/SM +woodlice +woodlot/SM +woodlouse +woodman/M +woodmen +woodpecker/MS +woodpile/SM +woods/M +woodshed/SM +woodsiness/M +woodsman/M +woodsmen +woodsy/RTP +woodwind/MS +woodwork/MRZG +woodworker/M +woodworking/M +woodworm/S +woody/TPRSM +wooer/M +woof/MDRSZG +woofer/M +wool/M +woolgathering/M +wooliness +woollen/SM +woolliness/M +woolly/RSMPT +woozily +wooziness/M +woozy/TRP +wop/S! +word's +word/ADSG +wordage/M +wordbook/SM +wordily +wordiness/M +wording/SM +wordless/Y +wordplay/M +wordsmith +wordsmiths +wordy/TPR +wore +work's +work/ADJSG +workable/U +workaday +workaholic/SM +workaround/S +workbasket/S +workbench/MS +workbook/MS +workday/SM +worker/MS +workfare/M +workflow/MS +workforce/M +workhorse/SM +workhouse/SM +working's +workingman/M +workingmen +workings/M +workingwoman/M +workingwomen +workload/MS +workman/M +workmanlike +workmanship/M +workmate/S +workmen +workout/SM +workplace/MS +workroom/MS +works/M +worksheet/MS +workshop/MS +workshy +workstation/MS +worktable/MS +worktop/S +workup/MS +workweek/SM +world/SM +worldlier +worldliness/UM +worldly/UTP +worldview/SM +worldwide +worm/MDSG +wormhole/MS +wormwood/M +wormy/TR +worn/U +worried/Y +worrier/M +worriment/M +worrisome +worry/ZGDRSMJ +worrying/Y +worrywart/SM +worse/M +worsen/DSG +worship/SM +worshipful +worshipped +worshipper/MS +worshipping +worst/SGMD +worsted/M +wort/M +worth/M +worthies +worthily/U +worthiness/UM +worthless/PY +worthlessness/M +worthwhile +worthy's +worthy/UPRT +wot +wotcha +would've +would/S +wouldn't +wouldst +wound/SGMDR +wove/A +woven/AU +wow/SGMD +wpm +wrack/GSMD +wraith/M +wraiths +wrangle/DRSMZGJ +wrangler/M +wrap's +wrap/US +wraparound/SM +wrapped/U +wrapper/SM +wrapping/MS +wrasse/MS +wrath/M +wrathful/Y +wreak/SGD +wreath/MDSG +wreathe +wreaths +wreck/SZGMDR +wreckage/M +wrecker/M +wren/MS +wrench/MDSG +wrest/SGMD +wrestle/MZGDRS +wrestler/M +wrestling/M +wretch/MS +wretched/TPRY +wretchedness/M +wriggle/MZGDRS +wriggler/M +wriggly +wright/MS +wring/SZGMR +wringer/M +wrinkle/MGDS +wrinkled/U +wrinkly/TRSM +wrist/SM +wristband/MS +wristwatch/MS +writ/MRBJSZG +write/S +writer/M +writhe/MGDS +writing/M +written/AU +wrong/STGMPDRY +wrongdoer/SM +wrongdoing/SM +wrongful/PY +wrongfulness/M +wrongheaded/YP +wrongheadedness/M +wrongness/M +wrote/A +wroth +wrought +wrung +wry/Y +wryer +wryest +wryness/M +wt +wunderkind/S +wurst/SM +wuss/MS +wussy/RSMT +x +xci +xcii +xciv +xcix +xcvi +xcvii +xenon/M +xenophobe/MS +xenophobia/M +xenophobic +xerographic +xerography/M +xerox/MDSG +xi/SM +xii +xiii +xiv +xix +xor +xref/S +xterm/M +xv +xvi +xvii +xviii +xx +xxi +xxii +xxiii +xxiv +xxix +xxv +xxvi +xxvii +xxviii +xxx +xxxi +xxxii +xxxiii +xxxiv +xxxix +xxxv +xxxvi +xxxvii +xxxviii +xylem/M +xylene +xylophone/SM +xylophonist/MS +y'all +y/F +ya +yacht/SMDG +yachting/M +yachtsman/M +yachtsmen +yachtswoman/M +yachtswomen +yahoo/SM +yak/SM +yakked +yakking +yam/SM +yammer/SZGMDR +yammerer/M +yang/M +yank/MDSG +yap/SM +yapped +yapping +yard/MS +yardage/MS +yardarm/MS +yardman/M +yardmaster/MS +yardmen +yardstick/MS +yarmulke/SM +yarn/MS +yarrow/M +yashmak/S +yaw/SGMD +yawl/MS +yawn/MDRSZG +yawner/M +yaws/M +yd +ye/RST +yea/SM +yeah/M +yeahs +year/MYS +yearbook/MS +yearling/MS +yearlong +yearly/SM +yearn/GSJD +yearning/M +yeast/SM +yeasty/RT +yegg/MS +yell/MDSG +yellow/MDRTGPS +yellowhammer/S +yellowish +yellowness/M +yellowy +yelp/MDSG +yen/SM +yeoman/M +yeomanry/M +yeomen +yep/SM +yes/MS +yeshiva/SM +yessed +yessing +yesterday/MS +yesteryear/M +yet +yeti/MS +yew/SM +yid/S +yield/JSGMD +yikes +yin/M +yip/SM +yipe +yipped +yippee +yipping +yo +yob/S +yobbo/S +yodel/SM +yodelled +yodeller/MS +yodelling +yoga/M +yogi/MS +yogic +yogurt/SM +yoke's +yoke/UGDS +yokel/SM +yolk/MDS +yon +yonder +yonks +yore/M +you'd +you'll +you're +you've +you/SMH +young/TMR +youngish +youngster/MS +your/S +yourself +yourselves +youth/M +youthful/YP +youthfulness/M +youths +yow +yowl/MDSG +yr/S +ytterbium/M +yttrium/M +yuan/M +yucca/SM +yuck +yucky/TR +yuk/SM +yukked +yukking +yukky +yule/M +yuletide/M +yum +yummy/TR +yup/SM +yuppie/MS +yuppify/GDS +yurt/MS +z/DNXTGJ +zaniness/M +zany/RSMPT +zap/SM +zapped +zapper/MS +zapping +zappy +zeal/M +zealot/MS +zealotry/M +zealous/YP +zealousness/M +zebra/SM +zebu/MS +zed/SM +zeitgeist/SM +zenith/M +zeniths +zenned +zeolite/S +zephyr/MS +zeppelin/MS +zero/MDHSG +zeroes +zest/MS +zestful/YP +zestfulness/M +zesty/RT +zeta/MS +zigzag/SM +zigzagged +zigzagging +zilch/M +zillion/MS +zinc/MS +zincked +zincking +zine/S +zinfandel/M +zing/MDRZG +zinger/M +zingy/RT +zinnia/MS +zip's +zip/US +zipped/U +zipper/MDGS +zipping/U +zippy/TR +zircon/MS +zirconium/M +zit/SM +zither/MS +zloty/SM +zlotys +zodiac/MS +zodiacal +zombie/MS +zonal/Y +zone's +zone/AGDS +zoning/M +zonked +zoo/SM +zookeeper/SM +zoological/Y +zoologist/SM +zoology/M +zoom/MDSG +zoophyte/SM +zoophytic +zooplankton +zorch +zoster +zounds +zucchini/MS +zwieback/M +zydeco/M +zygote/SM +zygotic +zymurgy/M diff --git a/config/Typora/typora-dictionaries/en_US.aff b/config/Typora/typora-dictionaries/en_US.aff new file mode 100644 index 0000000..bb2fcbc --- /dev/null +++ b/config/Typora/typora-dictionaries/en_US.aff @@ -0,0 +1,466 @@ +SET ISO8859-1 +KEY qwertyuiop|asdfghjkl|zxcvbnm +TRY esianrtolcdugmphbyfvkwzESIANRTOLCDUGMPHBYFVKWZ'- +NOSUGGEST ! + +# ordinal numbers (1st, 2nd, 3th, 11th) and decads (0s, 10s, 1990s) +COMPOUNDMIN 1 +# only in compounds: 1th, 2th, 3th +ONLYINCOMPOUND c +# compound rules: +# 1. [0-9]*1[0-9]th (10th, 11th, 12th, 56714th, etc.) +# 2. [0-9]*[02-9](1st|2nd|3rd|[4-9]th) (21st, 22nd, 123rd, 1234th, etc.) +COMPOUNDRULE 2 +COMPOUNDRULE n*1t +COMPOUNDRULE n*mp +WORDCHARS 0123456789' + +PFX A Y 1 +PFX A 0 re . + +PFX I Y 1 +PFX I 0 in . + +PFX U Y 1 +PFX U 0 un . + +PFX C Y 1 +PFX C 0 de . + +PFX E Y 1 +PFX E 0 dis . + +PFX F Y 1 +PFX F 0 con . + +PFX K Y 1 +PFX K 0 pro . + +SFX V N 2 +SFX V e ive e +SFX V 0 ive [^e] + +SFX N Y 3 +SFX N e ion e +SFX N y ication y +SFX N 0 en [^ey] + +SFX X Y 3 +SFX X e ions e +SFX X y ications y +SFX X 0 ens [^ey] + +SFX H N 2 +SFX H y ieth y +SFX H 0 th [^y] + +SFX Y Y 1 +SFX Y 0 ly . + +SFX G Y 2 +SFX G e ing e +SFX G 0 ing [^e] + +SFX J Y 2 +SFX J e ings e +SFX J 0 ings [^e] + +SFX D Y 4 +SFX D 0 d e +SFX D y ied [^aeiou]y +SFX D 0 ed [^ey] +SFX D 0 ed [aeiou]y + +SFX T N 4 +SFX T 0 st e +SFX T y iest [^aeiou]y +SFX T 0 est [aeiou]y +SFX T 0 est [^ey] + +SFX R Y 4 +SFX R 0 r e +SFX R y ier [^aeiou]y +SFX R 0 er [aeiou]y +SFX R 0 er [^ey] + +SFX Z Y 4 +SFX Z 0 rs e +SFX Z y iers [^aeiou]y +SFX Z 0 ers [aeiou]y +SFX Z 0 ers [^ey] + +SFX S Y 4 +SFX S y ies [^aeiou]y +SFX S 0 s [aeiou]y +SFX S 0 es [sxzh] +SFX S 0 s [^sxzhy] + +SFX P Y 3 +SFX P y iness [^aeiou]y +SFX P 0 ness [aeiou]y +SFX P 0 ness [^y] + +SFX M Y 1 +SFX M 0 's . + +SFX B Y 3 +SFX B 0 able [^aeiou] +SFX B 0 able ee +SFX B e able [^aeiou]e + +SFX L Y 1 +SFX L 0 ment . + +REP 97 +REP nt n't +REP alot a_lot +REP avengence a_vengeance +REP ninties 1990s +REP teached taught +REP rised rose +REP a ei +REP ei a +REP a ey +REP ey a +REP ai ie +REP ie ai +REP are air +REP are ear +REP are eir +REP air are +REP air ere +REP ere air +REP ere ear +REP ere eir +REP ear are +REP ear air +REP ear ere +REP eir are +REP eir ere +REP ch te +REP te ch +REP ch ti +REP ti ch +REP ch tu +REP tu ch +REP ch s +REP s ch +REP ch k +REP k ch +REP f ph +REP ph f +REP gh f +REP f gh +REP i igh +REP igh i +REP i uy +REP uy i +REP i ee +REP ee i +REP j di +REP di j +REP j gg +REP gg j +REP j ge +REP ge j +REP s ti +REP ti s +REP s ci +REP ci s +REP k cc +REP cc k +REP k qu +REP qu k +REP kw qu +REP o eau +REP eau o +REP o ew +REP ew o +REP oo ew +REP ew oo +REP ew ui +REP ui ew +REP oo ui +REP ui oo +REP ew u +REP u ew +REP oo u +REP u oo +REP u oe +REP oe u +REP u ieu +REP ieu u +REP ue ew +REP ew ue +REP uff ough +REP oo ieu +REP ieu oo +REP ier ear +REP ear ier +REP ear air +REP air ear +REP w qu +REP qu w +REP z ss +REP ss z +REP shun tion +REP shun sion +REP shun cion +REP tion ssion +REP ys ies +REP u ough + +# PHONEtic_english.h - #PHONEtic transformation rules for use with #PHONEtic.c +# Copyright (C) 2000 Bjrn Jacke +# +# This rule set is based on Lawrence Phillips original metaPHONE +# algorithm with modifications made by Michael Kuhn in his +# C implantation, more modifications by Bjrn Jacke when +# converting the algorithm to a rule set and minor +# touch ups by Kevin Atkinson +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License version 2.1 as published by the Free Software Foundation; +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# Bjrn Jacke may be reached by email at bjoern.jacke@gmx.de +# +# Changelog: +# +# 2000-01-05 Bjrn Jacke +# - first version with translation rules derived from +# metaPHONE.cc distributed with aspell 0.28.3 +# - "TH" is now representated as "@" because "0" is a +# meta character +# - removed TH(!vowel) --> T; always use TH --> # instead +# - dropped "^AE" -> "E" (redundant) +# - "ing" is transformed to "N", not "NK" +# - "SCH(EO)" transforms to "SK" now +# - added R --> SILENT if (after a vowel) and no (vowel or +# "y" follows) like in "Marcy" or "abort" +# - H is SILENT in RH at beginning of words +# - H is SILENT if vowel leads and "Y" follows +# - some ".OUGH.." --> ...F exceptions added +# - "^V" transforms to "W" +# 2000-01-07 Kevin Atkinson +# Converted from header to data file. +# +# 2007-08-23 László Németh +# Add PHONE header and #PHONE keywords +# +# version 1.1 + +# Documentation: http://aspell.net/man-html/PHONEtic-Code.html + +PHONE 105 +PHONE AH(AEIOUY)-^ *H +PHONE AR(AEIOUY)-^ *R +PHONE A(HR)^ * +PHONE A^ * +PHONE AH(AEIOUY)- H +PHONE AR(AEIOUY)- R +PHONE A(HR) _ +PHONE BB- _ +PHONE B B +PHONE CQ- _ +PHONE CIA X +PHONE CH X +PHONE C(EIY)- S +PHONE CK K +PHONE COUGH^ KF +PHONE CC< C +PHONE C K +PHONE DG(EIY) K +PHONE DD- _ +PHONE D T +PHONE < E +PHONE EH(AEIOUY)-^ *H +PHONE ER(AEIOUY)-^ *R +PHONE E(HR)^ * +PHONE ENOUGH^$ *NF +PHONE E^ * +PHONE EH(AEIOUY)- H +PHONE ER(AEIOUY)- R +PHONE E(HR) _ +PHONE FF- _ +PHONE F F +PHONE GN^ N +PHONE GN$ N +PHONE GNS$ NS +PHONE GNED$ N +PHONE GH(AEIOUY)- K +PHONE GH _ +PHONE GG9 K +PHONE G K +PHONE H H +PHONE IH(AEIOUY)-^ *H +PHONE IR(AEIOUY)-^ *R +PHONE I(HR)^ * +PHONE I^ * +PHONE ING6 N +PHONE IH(AEIOUY)- H +PHONE IR(AEIOUY)- R +PHONE I(HR) _ +PHONE J K +PHONE KN^ N +PHONE KK- _ +PHONE K K +PHONE LAUGH^ LF +PHONE LL- _ +PHONE L L +PHONE MB$ M +PHONE MM M +PHONE M M +PHONE NN- _ +PHONE N N +PHONE OH(AEIOUY)-^ *H +PHONE OR(AEIOUY)-^ *R +PHONE O(HR)^ * +PHONE O^ * +PHONE OH(AEIOUY)- H +PHONE OR(AEIOUY)- R +PHONE O(HR) _ +PHONE PH F +PHONE PN^ N +PHONE PP- _ +PHONE P P +PHONE Q K +PHONE RH^ R +PHONE ROUGH^ RF +PHONE RR- _ +PHONE R R +PHONE SCH(EOU)- SK +PHONE SC(IEY)- S +PHONE SH X +PHONE SI(AO)- X +PHONE SS- _ +PHONE S S +PHONE TI(AO)- X +PHONE TH @ +PHONE TCH-- _ +PHONE TOUGH^ TF +PHONE TT- _ +PHONE T T +PHONE UH(AEIOUY)-^ *H +PHONE UR(AEIOUY)-^ *R +PHONE U(HR)^ * +PHONE U^ * +PHONE UH(AEIOUY)- H +PHONE UR(AEIOUY)- R +PHONE U(HR) _ +PHONE V^ W +PHONE V F +PHONE WR^ R +PHONE WH^ W +PHONE W(AEIOU)- W +PHONE X^ S +PHONE X KS +PHONE Y(AEIOU)- Y +PHONE ZZ- _ +PHONE Z S + +#The rules in a different view: +# +# Exceptions: +# +# Beginning of word: "gn", "kn-", "pn-", "wr-" ----> drop first letter +# "Aebersold", "Gnagy", "Knuth", "Pniewski", "Wright" +# +# Beginning of word: "x" ----> change to "s" +# as in "Deng Xiaopeng" +# +# Beginning of word: "wh-" ----> change to "w" +# as in "Whalen" +# Beginning of word: leading vowels are transformed to "*" +# +# "[crt]ough" and "enough" are handled separately because of "F" sound +# +# +# A --> A at beginning +# _ otherwise +# +# B --> B unless at the end of word after "m", as in "dumb", "McComb" +# +# C --> X (sh) if "-cia-" or "-ch-" +# S if "-ci-", "-ce-", or "-cy-" +# SILENT if "-sci-", "-sce-", or "-scy-", or "-cq-" +# K otherwise, including in "-sch-" +# +# D --> K if in "-dge-", "-dgy-", or "-dgi-" +# T otherwise +# +# E --> A at beginnig +# _ SILENT otherwise +# +# F --> F +# +# G --> SILENT if in "-gh-" and not at end or before a vowel +# in "-gn" or "-gned" or "-gns" +# in "-dge-" etc., as in above rule +# K if before "i", or "e", or "y" if not double "gg" +# +# K otherwise (incl. "GG"!) +# +# H --> SILENT if after vowel and no vowel or "Y" follows +# or after "-ch-", "-sh-", "-ph-", "-th-", "-gh-" +# or after "rh-" at beginning +# H otherwise +# +# I --> A at beginning +# _ SILENT otherwise +# +# J --> K +# +# K --> SILENT if after "c" +# K otherwise +# +# L --> L +# +# M --> M +# +# N --> N +# +# O --> A at beginning +# _ SILENT otherwise +# +# P --> F if before "h" +# P otherwise +# +# Q --> K +# +# R --> SILENT if after vowel and no vowel or "Y" follows +# R otherwise +# +# S --> X (sh) if before "h" or in "-sio-" or "-sia-" +# SK if followed by "ch(eo)" (SCH(EO)) +# S otherwise +# +# T --> X (sh) if "-tia-" or "-tio-" +# 0 (th) if before "h" +# silent if in "-tch-" +# T otherwise +# +# U --> A at beginning +# _ SILENT otherwise +# +# V --> V if first letter of word +# F otherwise +# +# W --> SILENT if not followed by a vowel +# W if followed by a vowel +# +# X --> KS +# +# Y --> SILENT if not followed by a vowel +# Y if followed by a vowel +# +# Z --> S diff --git a/config/Typora/typora-dictionaries/en_US.dic b/config/Typora/typora-dictionaries/en_US.dic new file mode 100644 index 0000000..440b1ce --- /dev/null +++ b/config/Typora/typora-dictionaries/en_US.dic @@ -0,0 +1,62131 @@ +62119 +0/nm +1/n1 +2/nm +3/nm +4/nm +5/nm +6/nm +7/nm +8/nm +9/nm +1990s +0th/pt +1st/p +1th/tc +2nd/p +2th/tc +3rd/p +3th/tc +4th/pt +5th/pt +6th/pt +7th/pt +8th/pt +9th/pt +0s/pt +a +A +AA +AAA +Aachen/M +aardvark/SM +Aaren/M +Aarhus/M +Aarika/M +Aaron/M +AB +aback +abacus/SM +abaft +Abagael/M +Abagail/M +abalone/SM +abandoner/M +abandon/LGDRS +abandonment/SM +abase/LGDSR +abasement/S +abaser/M +abashed/UY +abashment/MS +abash/SDLG +abate/DSRLG +abated/U +abatement/MS +abater/M +abattoir/SM +Abba/M +Abbe/M +abb/S +abbess/SM +Abbey/M +abbey/MS +Abbie/M +Abbi/M +Abbot/M +abbot/MS +Abbott/M +abbr +abbrev +abbreviated/UA +abbreviates/A +abbreviate/XDSNG +abbreviating/A +abbreviation/M +Abbye/M +Abby/M +ABC/M +Abdel/M +abdicate/NGDSX +abdication/M +abdomen/SM +abdominal/YS +abduct/DGS +abduction/SM +abductor/SM +Abdul/M +ab/DY +abeam +Abelard/M +Abel/M +Abelson/M +Abe/M +Aberdeen/M +Abernathy/M +aberrant/YS +aberrational +aberration/SM +abet/S +abetted +abetting +abettor/SM +Abeu/M +abeyance/MS +abeyant +Abey/M +abhorred +abhorrence/MS +abhorrent/Y +abhorrer/M +abhorring +abhor/S +abidance/MS +abide/JGSR +abider/M +abiding/Y +Abidjan/M +Abie/M +Abigael/M +Abigail/M +Abigale/M +Abilene/M +ability/IMES +abjection/MS +abjectness/SM +abject/SGPDY +abjuration/SM +abjuratory +abjurer/M +abjure/ZGSRD +ablate/VGNSDX +ablation/M +ablative/SY +ablaze +abler/E +ables/E +ablest +able/U +abloom +ablution/MS +Ab/M +ABM/S +abnegate/NGSDX +abnegation/M +Abner/M +abnormality/SM +abnormal/SY +aboard +abode/GMDS +abolisher/M +abolish/LZRSDG +abolishment/MS +abolitionism/SM +abolitionist/SM +abolition/SM +abominable +abominably +abominate/XSDGN +abomination/M +aboriginal/YS +aborigine/SM +Aborigine/SM +aborning +abortionist/MS +abortion/MS +abortiveness/M +abortive/PY +abort/SRDVG +Abo/SM! +abound/GDS +about/S +aboveboard +aboveground +above/S +abracadabra/S +abrader/M +abrade/SRDG +Abraham/M +Abrahan/M +Abra/M +Abramo/M +Abram/SM +Abramson/M +Abran/M +abrasion/MS +abrasiveness/S +abrasive/SYMP +abreaction/MS +abreast +abridge/DSRG +abridged/U +abridger/M +abridgment/SM +abroad +abrogate/XDSNG +abrogation/M +abrogator/SM +abruptness/SM +abrupt/TRYP +ABS +abscess/GDSM +abscissa/SM +abscission/SM +absconder/M +abscond/SDRZG +abseil/SGDR +absence/SM +absenteeism/SM +absentee/MS +absentia/M +absentmindedness/S +absentminded/PY +absent/SGDRY +absinthe/SM +abs/M +absoluteness/SM +absolute/NPRSYTX +absolution/M +absolutism/MS +absolutist/SM +absolve/GDSR +absolver/M +absorb/ASGD +absorbed/U +absorbency/MS +absorbent/MS +absorber/SM +absorbing/Y +absorption/MS +absorptive +absorptivity/M +abstainer/M +abstain/GSDRZ +abstemiousness/MS +abstemious/YP +abstention/SM +abstinence/MS +abstinent/Y +abstractedness/SM +abstracted/YP +abstracter/M +abstractionism/M +abstractionist/SM +abstraction/SM +abstractness/SM +abstractor/MS +abstract/PTVGRDYS +abstruseness/SM +abstruse/PRYT +absurdity/SM +absurdness/SM +absurd/PRYST +Abuja +abundance/SM +abundant/Y +abused/E +abuse/GVZDSRB +abuser/M +abuses/E +abusing/E +abusiveness/SM +abusive/YP +abut/LS +abutment/SM +abutted +abutter/MS +abutting +abuzz +abysmal/Y +abyssal +Abyssinia/M +Abyssinian +abyss/SM +AC +acacia/SM +academe/MS +academia/SM +academical/Y +academicianship +academician/SM +academic/S +academy/SM +Acadia/M +acanthus/MS +Acapulco/M +accede/SDG +accelerated/U +accelerate/NGSDXV +accelerating/Y +acceleration/M +accelerator/SM +accelerometer/SM +accented/U +accent/SGMD +accentual/Y +accentuate/XNGSD +accentuation/M +acceptability/SM +acceptability's/U +acceptableness/SM +acceptable/P +acceptably/U +acceptance/SM +acceptant +acceptation/SM +accepted/Y +accepter/M +accepting/PY +acceptor/MS +accept/RDBSZVG +accessed/A +accessibility/IMS +accessible/IU +accessibly/I +accession/SMDG +accessors +accessory/SM +access/SDMG +accidence/M +accidentalness/M +accidental/SPY +accident/MS +acclaimer/M +acclaim/SDRG +acclamation/MS +acclimate/XSDGN +acclimation/M +acclimatisation +acclimatise/DG +acclimatization/AMS +acclimatized/U +acclimatize/RSDGZ +acclimatizes/A +acclivity/SM +accolade/GDSM +accommodated/U +accommodate/XVNGSD +accommodating/Y +accommodation/M +accommodativeness/M +accommodative/P +accompanied/U +accompanier/M +accompaniment/MS +accompanist/SM +accompany/DRSG +accomplice/MS +accomplished/U +accomplisher/M +accomplishment/SM +accomplish/SRDLZG +accordance/SM +accordant/Y +accorder/M +according/Y +accordionist/SM +accordion/MS +accord/SZGMRD +accost/SGD +accountability/MS +accountability's/U +accountableness/M +accountable/U +accountably/U +accountancy/SM +accountant/MS +account/BMDSGJ +accounted/U +accounting/M +accouter/GSD +accouterments +accouterment's +accoutrement/M +Accra/M +accreditation/SM +accredited/U +accredit/SGD +accretion/SM +accrual/MS +accrue/SDG +acct +acculturate/XSDVNG +acculturation/M +accumulate/VNGSDX +accumulation/M +accumulativeness/M +accumulative/YP +accumulator/MS +accuracy/IMS +accurate/IY +accurateness/SM +accursedness/SM +accursed/YP +accusal/M +accusation/SM +accusative/S +accusatory +accused/M +accuser/M +accuse/SRDZG +accusing/Y +accustomedness/M +accustomed/P +accustom/SGD +ac/DRG +aced/M +acerbate/DSG +acerbic +acerbically +acerbity/MS +ace/SM +acetaminophen/S +acetate/MS +acetic +acetone/SM +acetonic +acetylene/MS +Acevedo/M +Achaean/M +Achebe/M +ached/A +ache/DSG +achene/SM +Achernar/M +aches/A +Acheson/M +achievable/U +achieved/UA +achieve/LZGRSDB +achievement/SM +achiever/M +Achilles +aching/Y +achoo +achromatic +achy/TR +acidic +acidification/M +acidify/NSDG +acidity/SM +acidness/M +acidoses +acidosis/M +acid/SMYP +acidulous +acing/M +Ackerman/M +acknowledgeable +acknowledgedly +acknowledged/U +acknowledge/GZDRS +acknowledger/M +acknowledgment/SAM +acknowledgement/SAM +ACLU +Ac/M +ACM +acme/SM +acne/MDS +acolyte/MS +Aconcagua/M +aconite/MS +acorn/SM +Acosta/M +acoustical/Y +acoustician/M +acoustic/S +acoustics/M +acquaintance/MS +acquaintanceship/S +acquainted/U +acquaint/GASD +acquiesce/GSD +acquiescence/SM +acquiescent/Y +acquirable +acquire/ASDG +acquirement/SM +acquisition's/A +acquisition/SM +acquisitiveness/MS +acquisitive/PY +acquit/S +acquittal/MS +acquittance/M +acquitted +acquitter/M +acquitting +acreage/MS +acre/MS +acridity/MS +acridness/SM +acrid/TPRY +acrimoniousness/MS +acrimonious/YP +acrimony/MS +acrobatically +acrobatic/S +acrobatics/M +acrobat/SM +acronym/SM +acrophobia/SM +Acropolis/M +acropolis/SM +across +acrostic/SM +Acrux/M +acrylate/M +acrylic/S +ACT +Actaeon/M +Acta/M +ACTH +acting/S +actinic +actinide/SM +actinium/MS +actinometer/MS +action/DMSGB +actions/AI +action's/IA +activate/AXCDSNGI +activated/U +activation/AMCI +activator/SM +active/APY +actively/I +activeness/MS +actives +activism/MS +activist/MS +activities/A +activity/MSI +Acton/M +actor/MAS +actress/SM +act's +Acts +act/SADVG +actuality/SM +actualization/MAS +actualize/GSD +actualizes/A +actual/SY +actuarial/Y +actuary/MS +actuate/GNXSD +actuation/M +actuator/SM +acuity/MS +acumen/SM +acupressure/S +acupuncture/SM +acupuncturist/S +acuteness/MS +acute/YTSRP +acyclic +acyclically +acyclovir/S +AD +adage/MS +adagio/S +Adah/M +Adair/M +Adaline/M +Ada/M +adamant/SY +Adamo/M +Adam/SM +Adamson/M +Adana/M +Adan/M +adaptability/MS +adaptable/U +adaptation/MS +adaptedness/M +adapted/P +adapter/M +adapting/A +adaption +adaptively +adaptiveness/M +adaptive/U +adaptivity +adapt/SRDBZVG +Adara/M +ad/AS +ADC +Adda/M +Addams +addenda +addend/SM +addendum/M +adder/M +Addia/M +addiction/MS +addictive/P +addict/SGVD +Addie/M +Addi/M +Addison/M +additional/Y +addition/MS +additive/YMS +additivity +addle/GDS +addressability +addressable/U +addressed/A +addressee/SM +addresser/M +addresses/A +address/MDRSZGB +Addressograph/M +adduce/GRSD +adducer/M +adduct/DGVS +adduction/M +adductor/M +Addy/M +add/ZGBSDR +Adelaida/M +Adelaide/M +Adela/M +Adelbert/M +Adele/M +Adelheid/M +Adelice/M +Adelina/M +Adelind/M +Adeline/M +Adella/M +Adelle/M +Adel/M +Ade/M +Adena/M +Adenauer/M +adenine/SM +Aden/M +adenoidal +adenoid/S +adeptness/MS +adept/RYPTS +adequacy/IMS +adequate/IPY +adequateness's/I +adequateness/SM +Adey/M +Adham/M +Adhara/M +adherence/SM +adherent/YMS +adherer/M +adhere/ZGRSD +adhesion/MS +adhesiveness/MS +adhesive/PYMS +adiabatic +adiabatically +Adiana/M +Adidas/M +adieu/S +Adi/M +Adina/M +adis +adipose/S +Adirondack/SM +adj +adjacency/MS +adjacent/Y +adjectival/Y +adjective/MYS +adjoin/SDG +adjoint/M +adjourn/DGLS +adjournment/SM +adjudge/DSG +adjudicate/VNGXSD +adjudication/M +adjudicator/SM +adjudicatory +adjunct/VSYM +adjuration/SM +adjure/GSD +adjustable/U +adjustably +adjust/DRALGSB +adjusted/U +adjuster's/A +adjuster/SM +adjustive +adjustment/MAS +adjustor's +adjutant/SM +Adkins/M +Adlai/M +Adler/M +adman/M +admen +administer/GDJS +administrable +administrate/XSDVNG +administration/M +administrative/Y +administrator/MS +administratrix/M +admirableness/M +admirable/P +admirably +admiral/SM +admiralty/MS +Admiralty/S +admiration/MS +admirer/M +admire/RSDZBG +admiring/Y +admissibility/ISM +admissible/I +admissibly +admission/AMS +admit/AS +admittance/MS +admitted/A +admittedly +admitting/A +admix/SDG +admixture/SM +Adm/M +Ad/MN +admonisher/M +admonish/GLSRD +admonishing/Y +admonishment/SM +admonition/MS +admonitory +adobe/MS +adolescence/MS +adolescent/SYM +Adolf/M +Adolfo/M +Adolphe/M +Adolph/M +Adolpho/M +Adolphus/M +Ado/M +ado/MS +Adonis/SM +adopted/AU +adopter/M +adoption/MS +adoptive/Y +adopt/RDSBZVG +adopts/A +adorableness/SM +adorable/P +adorably +Adora/M +adoration/SM +adore/DSRGZB +Adoree/M +Adore/M +adorer/M +adoring/Y +adorned/U +Adorne/M +adornment/SM +adorn/SGLD +ADP +Adrea/M +adrenalin +adrenaline/MS +Adrenalin/MS +adrenal/YS +Adria/MX +Adriana/M +Adriane/M +Adrian/M +Adrianna/M +Adrianne/M +Adriano/M +Adriatic +Adriena/M +Adrien/M +Adrienne/M +adrift +adroitness/MS +adroit/RTYP +ads +ad's +adsorbate/M +adsorbent/S +adsorb/GSD +adsorption/MS +adsorptive/Y +adulate/GNDSX +adulation/M +adulator/SM +adulatory +adulterant/SM +adulterated/U +adulterate/NGSDX +adulteration/M +adulterer/SM +adulteress/MS +adulterous/Y +adultery/SM +adulthood/MS +adult/MYPS +adultness/M +adumbrate/XSDVGN +adumbration/M +adumbrative/Y +adv +advance/DSRLZG +advancement/MS +advancer/M +advantage/GMEDS +advantageous/EY +advantageousness/M +Adventist/M +adventist/S +adventitiousness/M +adventitious/PY +adventive/Y +Advent/SM +advent/SVM +adventurer/M +adventuresome +adventure/SRDGMZ +adventuress/SM +adventurousness/SM +adventurous/YP +adverbial/MYS +adverb/SM +adversarial +adversary/SM +adverse/DSRPYTG +adverseness/MS +adversity/SM +advert/GSD +advertised/U +advertise/JGZSRDL +advertisement/SM +advertiser/M +advertising/M +advertorial/S +advice/SM +Advil/M +advisability/SIM +advisable/I +advisableness/M +advisably +advisedly/I +advised/YU +advisee/MS +advisement/MS +adviser/M +advise/ZRSDGLB +advisor/S +advisor's +advisory/S +advocacy/SM +advocate/NGVDS +advocation/M +advt +adze's +adz/MDSG +Aegean +aegis/SM +Aelfric/M +Aeneas +Aeneid/M +aeolian +Aeolus/M +aeon's +aerate/XNGSD +aeration/M +aerator/MS +aerialist/MS +aerial/SMY +Aeriela/M +Aeriell/M +Aeriel/M +aerie/SRMT +aeroacoustic +aerobatic/S +aerobically +aerobic/S +aerodrome/SM +aerodynamically +aerodynamic/S +aerodynamics/M +aeronautical/Y +aeronautic/S +aeronautics/M +aerosolize/D +aerosol/MS +aerospace/SM +Aeschylus/M +Aesculapius/M +Aesop/M +aesthete/S +aesthetically +aestheticism/MS +aesthetics/M +aesthetic/U +aether/M +aetiology/M +AF +AFAIK +afar/S +AFB +AFC +AFDC +affability/MS +affable/TR +affably +affair/SM +affectation/MS +affectedness/EM +affected/UEYP +affect/EGSD +affecter/M +affecting/Y +affectionate/UY +affectioned +affection/EMS +affectioning +affective/MY +afferent/YS +affiance/GDS +affidavit/SM +affiliated/U +affiliate/EXSDNG +affiliation/EM +affine +affinity/SM +affirm/ASDG +affirmation/SAM +affirmative/SY +affix/SDG +afflatus/MS +afflict/GVDS +affliction/SM +afflictive/Y +affluence/SM +affluent/YS +afford/DSBG +afforest/A +afforestation/SM +afforested +afforesting +afforests +affray/MDSG +affricate/VNMS +affrication/M +affricative/M +affright +affront/GSDM +Afghani/SM +Afghanistan/M +afghan/MS +Afghan/SM +aficionado/MS +afield +afire +aflame +afloat +aflutter +afoot +afore +aforementioned +aforesaid +aforethought/S +afoul +Afr +afraid/U +afresh +Africa/M +African/MS +Afrikaans/M +Afrikaner/SM +afro +Afrocentric +Afrocentrism/S +Afro/MS +afterbirth/M +afterbirths +afterburner/MS +aftercare/SM +aftereffect/MS +afterglow/MS +afterimage/MS +afterlife/M +afterlives +aftermath/M +aftermaths +aftermost +afternoon/SM +aftershave/S +aftershock/SM +afters/M +aftertaste/SM +afterthought/MS +afterward/S +afterworld/MS +Afton/M +aft/ZR +Agace/M +again +against +Agamemnon/M +agapae +agape/S +agar/MS +Agassiz/M +Agata/M +agate/SM +Agatha/M +Agathe/M +agave/SM +agedness/M +aged/PY +age/GJDRSMZ +ageism/S +ageist/S +agelessness/MS +ageless/YP +agency/SM +agenda/MS +agent/AMS +agented +agenting +agentive +ageratum/M +Aggie/M +Aggi/M +agglomerate/XNGVDS +agglomeration/M +agglutinate/VNGXSD +agglutination/M +agglutinin/MS +aggrandize/LDSG +aggrandizement/SM +aggravate/SDNGX +aggravating/Y +aggravation/M +aggregated/U +aggregate/EGNVD +aggregately +aggregateness/M +aggregates +aggregation/SM +aggregative/Y +aggression/SM +aggressively +aggressiveness/S +aggressive/U +aggressor/MS +aggrieved/Y +aggrieve/GDS +Aggy/SM +aghast +agile/YTR +agility/MS +agitated/Y +agitate/XVNGSD +agitation/M +agitator/SM +agitprop/MS +Aglaia/M +agleam +aglitter +aglow +Ag/M +Agna/M +Agnella/M +Agnese/M +Agnes/M +Agnesse/M +Agneta/M +Agnew/M +Agni/M +Agnola/M +agnosticism/MS +agnostic/SM +ago +agog +agonizedly/S +agonized/Y +agonize/ZGRSD +agonizing/Y +agony/SM +agoraphobia/MS +agoraphobic/S +Agosto/M +Agra/M +agrarianism/MS +agrarian/S +agreeable/EP +agreeableness/SME +agreeably/E +agreeing/E +agree/LEBDS +agreement/ESM +agreer/S +Agretha/M +agribusiness/SM +Agricola/M +agriculturalist/S +agricultural/Y +agriculture/MS +agriculturist/SM +Agrippa/M +Agrippina/M +agrochemicals +agronomic/S +agronomist/SM +agronomy/MS +aground +Aguascalientes/M +ague/MS +Aguie/M +Aguilar/M +Aguinaldo/M +Aguirre/M +Aguistin/M +Aguste/M +Agustin/M +ah +Ahab/M +Aharon/M +aha/S +ahead +ahem/S +Ahmadabad +Ahmad/M +Ahmed/M +ahoy/S +Ahriman/M +AI +Aida/M +Aidan/M +aided/U +aide/MS +aider/M +AIDS +aid/ZGDRS +Aigneis/M +aigrette/SM +Aiken/M +Aila/M +Ailbert/M +Ailee/M +Aileen/M +Aile/M +Ailene/M +aileron/MS +Ailey/M +Ailina/M +Aili/SM +ail/LSDG +ailment/SM +Ailsun/M +Ailyn/M +Aimee/M +Aime/M +aimer/M +Aimil/M +aimlessness/MS +aimless/YP +aim/ZSGDR +Aindrea/M +Ainslee/M +Ainsley/M +Ainslie/M +ain't +Ainu/M +airbag/MS +airbase/S +airborne +airbrush/SDMG +Airbus/M +airbus/SM +aircraft/MS +aircrew/M +airdrop/MS +airdropped +airdropping +Airedale/SM +Aires +airfare/S +airfield/MS +airflow/SM +airfoil/MS +airframe/MS +airfreight/SGD +airhead/MS +airily +airiness/MS +airing/M +airlessness/S +airless/P +airlift/MDSG +airliner/M +airline/SRMZ +airlock/MS +airmail/DSG +airman/M +airmass +air/MDRTZGJS +airmen +airpark +airplane/SM +airplay/S +airport/MS +airship/MS +airsickness/SM +airsick/P +airspace/SM +airspeed/SM +airstrip/MS +airtightness/M +airtight/P +airtime +airwaves +airway/SM +airworthiness/SM +airworthy/PTR +airy/PRT +Aisha/M +aisle/DSGM +aitch/MS +ajar +Ajax/M +Ajay/M +AK +aka +Akbar/M +Akihito/M +akimbo +Akim/M +akin +Akita/M +Akkad/M +Akron/M +Aksel/M +AL +Alabama/M +Alabaman/S +Alabamian/MS +alabaster/MS +alack/S +alacrity/SM +Aladdin/M +Alaine/M +Alain/M +Alair/M +Alameda/M +Alamogordo/M +Alamo/SM +ala/MS +Ala/MS +Alanah/M +Alana/M +Aland/M +Alane/M +alanine/M +Alan/M +Alanna/M +Alano/M +Alanson/M +Alard/M +Alaric/M +Alar/M +alarming/Y +alarmist/MS +alarm/SDG +Alasdair/M +Alaska/M +Alaskan/S +alas/S +Alastair/M +Alasteir/M +Alaster/M +Alayne/M +albacore/SM +alba/M +Alba/M +Albania/M +Albanian/SM +Albany/M +albatross/SM +albedo/M +Albee/M +albeit +Alberich/M +Alberik/M +Alberio/M +Alberta/M +Albertan/S +Albertina/M +Albertine/M +Albert/M +Alberto/M +Albie/M +Albigensian +Albina/M +albinism/SM +albino/MS +Albion/M +Albireo/M +alb/MS +Albrecht/M +albumen/M +albumin/MS +albuminous +album/MNXS +Albuquerque/M +Alcatraz/M +Alcestis/M +alchemical +alchemist/SM +alchemy/MS +Alcibiades/M +Alcmena/M +Alcoa/M +alcoholically +alcoholic/MS +alcoholism/SM +alcohol/MS +Alcott/M +alcove/MSD +Alcuin/M +Alcyone/M +Aldan/M +Aldebaran/M +aldehyde/M +Alden/M +Alderamin/M +alderman/M +aldermen +alder/SM +alderwoman +alderwomen +Aldin/M +Aldis/M +Aldo/M +Aldon/M +Aldous/M +Aldrich/M +Aldric/M +Aldridge/M +Aldrin/M +Aldus/M +Aldwin/M +aleatory +Alecia/M +Aleck/M +Alec/M +Aleda/M +alee +Aleece/M +Aleen/M +alehouse/MS +Aleichem/M +Alejandra/M +Alejandrina/M +Alejandro/M +Alejoa/M +Aleksandr/M +Alembert/M +alembic/SM +ale/MVS +Alena/M +Alene/M +aleph/M +Aleppo/M +Aler/M +alerted/Y +alertness/MS +alert/STZGPRDY +Alessandra/M +Alessandro/M +Aleta/M +Alethea/M +Aleutian/S +Aleut/SM +alewife/M +alewives +Alexa/M +Alexander/SM +Alexandra/M +Alexandre/M +Alexandria/M +Alexandrian/S +Alexandrina/M +Alexandr/M +Alexandro/MS +Alexei/M +Alexia/M +Alexina/M +Alexine/M +Alexio/M +Alexi/SM +Alex/M +alfalfa/MS +Alfa/M +Alfie/M +Alfi/M +Alf/M +Alfonse/M +Alfons/M +Alfonso/M +Alfonzo/M +Alford/M +Alfreda/M +Alfred/M +Alfredo/M +alfresco +Alfy/M +algae +algaecide +algal +alga/M +algebraic +algebraical/Y +algebraist/M +algebra/MS +Algenib/M +Algeria/M +Algerian/MS +Alger/M +Algernon/M +Algieba/M +Algiers/M +alginate/SM +ALGOL +Algol/M +Algonquian/SM +Algonquin/SM +algorithmic +algorithmically +algorithm/MS +Alhambra/M +Alhena/M +Alia/M +alias/GSD +alibi/MDSG +Alica/M +Alicea/M +Alice/M +Alicia/M +Alick/M +Alic/M +Alida/M +Alidia/M +Alie/M +alienable/IU +alienate/SDNGX +alienation/M +alienist/MS +alien/RDGMBS +Alighieri/M +alight/DSG +aligned/U +aligner/SM +align/LASDG +alignment/SAM +Alika/M +Alikee/M +alikeness/M +alike/U +alimentary +aliment/SDMG +alimony/MS +Ali/MS +Alina/M +Aline/M +alinement's +Alioth/M +aliquot/S +Alisa/M +Alisander/M +Alisha/M +Alison/M +Alissa/M +Alistair/M +Alister/M +Alisun/M +aliveness/MS +alive/P +Alix/M +aliyah/M +aliyahs +Aliza/M +Alkaid/M +alkalies +alkali/M +alkaline +alkalinity/MS +alkalize/SDG +alkaloid/MS +alkyd/S +alkyl/M +all-time +Allahabad/M +Allah/M +Alla/M +Allan/M +Allard/M +allay/GDS +Allayne/M +Alleen/M +allegation/SM +alleged/Y +allege/SDG +Allegheny/MS +allegiance/SM +allegiant +allegoric +allegoricalness/M +allegorical/YP +allegorist/MS +allegory/SM +Allegra/M +allegretto/MS +allegri +allegro/MS +allele/SM +alleluia/S +allemande/M +Allendale/M +Allende/M +Allene/M +Allen/M +Allentown/M +allergenic +allergen/MS +allergic +allergically +allergist/MS +allergy/MS +alleviate/SDVGNX +alleviation/M +alleviator/MS +Alley/M +alley/MS +Alleyn/M +alleyway/MS +Allhallows +alliance/MS +Allianora/M +Allie/M +allier +allies/M +alligator/DMGS +Alli/MS +Allina/M +Allin/M +Allison/M +Allissa/M +Allister/M +Allistir/M +alliterate/XVNGSD +alliteration/M +alliterative/Y +Allix/M +allocable/U +allocatable +allocate/ACSDNGX +allocated/U +allocation/AMC +allocative +allocator/AMS +allophone/MS +allophonic +allotment/MS +allotments/A +allotrope/M +allotropic +allots/A +allot/SDL +allotted/A +allotter/M +allotting/A +allover/S +allowableness/M +allowable/P +allowably +allowance/GSDM +allowed/Y +allowing/E +allow/SBGD +allows/E +alloyed/U +alloy/SGMD +all/S +allspice/MS +Allstate/M +Allsun/M +allude/GSD +allure/GLSD +allurement/SM +alluring/Y +allusion/MS +allusiveness/MS +allusive/PY +alluvial/S +alluvions +alluvium/MS +Allx/M +ally/ASDG +Allyce/M +Ally/MS +Allyn/M +Allys +Allyson/M +alma +Almach/M +Almaden/M +almagest +Alma/M +almanac/MS +Almaty/M +Almeda/M +Almeria/M +Almeta/M +almightiness/M +Almighty/M +almighty/P +Almira/M +Almire/M +almond/SM +almoner/MS +almost +Al/MRY +alms/A +almshouse/SM +almsman/M +alnico +Alnilam/M +Alnitak/M +aloe/MS +aloft +aloha/SM +Aloin/M +Aloise/M +Aloisia/M +aloneness/M +alone/P +along +alongshore +alongside +Alon/M +Alonso/M +Alonzo/M +aloofness/MS +aloof/YP +aloud +Aloysia/M +Aloysius/M +alpaca/SM +Alpert/M +alphabetical/Y +alphabetic/S +alphabetization/SM +alphabetizer/M +alphabetize/SRDGZ +alphabet/SGDM +alpha/MS +alphanumerical/Y +alphanumeric/S +Alphard/M +Alphecca/M +Alpheratz/M +Alphonse/M +Alphonso/M +Alpine +alpine/S +alp/MS +Alps +already +Alric/M +alright +Alsace/M +Alsatian/MS +also +Alsop/M +Alston/M +Altaic/M +Altai/M +Altair/M +Alta/M +altar/MS +altarpiece/SM +alterable/UI +alteration/MS +altercate/NX +altercation/M +altered/U +alternate/SDVGNYX +alternation/M +alternativeness/M +alternative/YMSP +alternator/MS +alter/RDZBG +Althea/M +although +altimeter/SM +Altiplano/M +altitude/SM +altogether/S +Alton/M +alto/SM +Altos/M +altruism/SM +altruistic +altruistically +altruist/SM +alt/RZS +ALU +Aludra/M +Aluin/M +Aluino/M +alumina/SM +aluminum/MS +alumnae +alumna/M +alumni +alumnus/MS +alum/SM +alundum +Alva/M +Alvan/M +Alvarado/M +Alvarez/M +Alvaro/M +alveolar/Y +alveoli +alveolus/M +Alvera/M +Alverta/M +Alvie/M +Alvina/M +Alvinia/M +Alvin/M +Alvira/M +Alvis/M +Alvy/M +alway/S +Alwin/M +Alwyn/M +Alyce/M +Alyda/M +Alyosha/M +Alysa/M +Alyse/M +Alysia/M +Alys/M +Alyson/M +Alyss +Alyssa/M +Alzheimer/M +AM +AMA +Amabelle/M +Amabel/M +Amadeus/M +Amado/M +amain +Amalea/M +Amalee/M +Amaleta/M +amalgamate/VNGXSD +amalgamation/M +amalgam/MS +Amalia/M +Amalie/M +Amalita/M +Amalle/M +Amanda/M +Amandie/M +Amandi/M +Amandy/M +amanuenses +amanuensis/M +Amara/M +amaranth/M +amaranths +amaretto/S +Amargo/M +Amarillo/M +amaryllis/MS +am/AS +amasser/M +amass/GRSD +Amata/M +amateurishness/MS +amateurish/YP +amateurism/MS +amateur/SM +Amati/M +amatory +amazed/Y +amaze/LDSRGZ +amazement/MS +amazing/Y +amazonian +Amazonian +amazon/MS +Amazon/SM +ambassadorial +ambassador/MS +ambassadorship/MS +ambassadress/SM +ambergris/SM +Amberly/M +amber/MS +Amber/YM +ambiance/MS +ambidexterity/MS +ambidextrous/Y +ambience's +ambient/S +ambiguity/MS +ambiguously/U +ambiguousness/M +ambiguous/YP +ambition/GMDS +ambitiousness/MS +ambitious/PY +ambit/M +ambivalence/SM +ambivalent/Y +amble/GZDSR +Amble/M +ambler/M +ambrose +Ambrose/M +ambrosial/Y +ambrosia/SM +Ambrosi/M +Ambrosio/M +Ambrosius/M +Ambros/M +ambulance/MS +ambulant/S +ambulate/DSNGX +ambulation/M +ambulatory/S +Ambur/M +ambuscade/MGSRD +ambuscader/M +ambusher/M +ambush/MZRSDG +Amby/M +Amdahl/M +ameba's +Amelia/M +Amelie/M +Amelina/M +Ameline/M +ameliorate/XVGNSD +amelioration/M +Amelita/M +amenability/SM +amenably +amended/U +amender/M +amendment/SM +amen/DRGTSB +amend/SBRDGL +amends/M +Amenhotep/M +amenity/MS +amenorrhea/M +Amerada/M +Amerasian/S +amercement/MS +amerce/SDLG +Americana/M +Americanism/SM +Americanization/SM +americanized +Americanize/SDG +American/MS +America/SM +americium/MS +Amerigo/M +Amerindian/MS +Amerind/MS +Amer/M +Amery/M +Ameslan/M +Ame/SM +amethystine +amethyst/MS +Amharic/M +Amherst/M +amiability/MS +amiableness/M +amiable/RPT +amiably +amicability/SM +amicableness/M +amicable/P +amicably +amide/SM +amid/S +amidships +amidst +Amie/M +Amiga/M +amigo/MS +Amii/M +Amil/M +Ami/M +amines +aminobenzoic +amino/M +amir's +Amish +amiss +Amitie/M +Amity/M +amity/SM +Ammamaria/M +Amman/M +Ammerman/M +ammeter/MS +ammo/MS +ammoniac +ammonia/MS +ammonium/M +Am/MR +ammunition/MS +amnesiac/MS +amnesia/SM +amnesic/S +amnesty/GMSD +amniocenteses +amniocentesis/M +amnion/SM +amniotic +Amoco/M +amoeba/SM +amoebic +amoeboid +amok/MS +among +amongst +Amontillado/M +amontillado/MS +amorality/MS +amoral/Y +amorousness/SM +amorous/PY +amorphousness/MS +amorphous/PY +amortization/SUM +amortized/U +amortize/SDG +Amory/M +Amos +amount/SMRDZG +amour/MS +Amparo/M +amperage/SM +Ampere/M +ampere/MS +ampersand/MS +Ampex/M +amphetamine/MS +amphibian/SM +amphibiousness/M +amphibious/PY +amphibology/M +amphitheater/SM +amphorae +amphora/M +ampleness/M +ample/PTR +amplification/M +amplifier/M +amplify/DRSXGNZ +amplitude/MS +ampoule's +amp/SGMDY +ampule/SM +amputate/DSNGX +amputation/M +amputee/SM +Amritsar/M +ams +Amsterdam/M +amt +Amtrak/M +amuck's +amulet/SM +Amundsen/M +Amur/M +amused/Y +amuse/LDSRGVZ +amusement/SM +amuser/M +amusingness/M +amusing/YP +Amway/M +Amye/M +amylase/MS +amyl/M +Amy/M +Anabal/M +Anabaptist/SM +Anabella/M +Anabelle/M +Anabel/M +anabolic +anabolism/MS +anachronism/SM +anachronistic +anachronistically +Anacin/M +anaconda/MS +Anacreon/M +anaerobe/SM +anaerobic +anaerobically +anaglyph/M +anagrammatic +anagrammatically +anagrammed +anagramming +anagram/MS +Anaheim/M +Analects/M +analgesia/MS +analgesic/S +Analiese/M +Analise/M +Anallese/M +Anallise/M +analogical/Y +analogize/SDG +analogousness/MS +analogous/YP +analog/SM +analogue/SM +analogy/MS +anal/Y +analysand/MS +analyses +analysis/AM +analyst/SM +analytical/Y +analyticity/S +analytic/S +analytics/M +analyzable/U +analyze/DRSZGA +analyzed/U +analyzer/M +Ana/M +anamorphic +Ananias/M +anapaest's +anapestic/S +anapest/SM +anaphora/M +anaphoric +anaphorically +anaplasmosis/M +anarchic +anarchical/Y +anarchism/MS +anarchistic +anarchist/MS +anarchy/MS +Anastasia/M +Anastasie/M +Anastassia/M +anastigmatic +anastomoses +anastomosis/M +anastomotic +anathema/MS +anathematize/GSD +Anatola/M +Anatole/M +Anatolia/M +Anatolian +Anatollo/M +Anatol/M +anatomic +anatomical/YS +anatomist/MS +anatomize/GSD +anatomy/MS +Anaxagoras/M +Ancell/M +ancestor/SMDG +ancestral/Y +ancestress/SM +ancestry/SM +Anchorage/M +anchorage/SM +anchored/U +anchorite/MS +anchoritism/M +anchorman/M +anchormen +anchorpeople +anchorperson/S +anchor/SGDM +anchorwoman +anchorwomen +anchovy/MS +ancientness/MS +ancient/SRYTP +ancillary/S +an/CS +Andalusia/M +Andalusian +Andaman +andante/S +and/DZGS +Andean/M +Andeee/M +Andee/M +Anderea/M +Andersen/M +Anders/N +Anderson/M +Andes +Andie/M +Andi/M +andiron/MS +Andonis/M +Andorra/M +Andover/M +Andra/SM +Andrea/MS +Andreana/M +Andree/M +Andrei/M +Andrej/M +Andre/SM +Andrew/MS +Andrey/M +Andria/M +Andriana/M +Andriette/M +Andris +androgenic +androgen/SM +androgynous +androgyny/SM +android/MS +Andromache/M +Andromeda/M +Andropov/M +Andros/M +Andrus/M +Andy/M +anecdotal/Y +anecdote/SM +anechoic +anemia/SM +anemically +anemic/S +anemometer/MS +anemometry/M +anemone/SM +anent +aneroid +Anestassia/M +anesthesia/MS +anesthesiologist/MS +anesthesiology/SM +anesthetically +anesthetic/SM +anesthetist/MS +anesthetization/SM +anesthetizer/M +anesthetize/ZSRDG +Anet/M +Anetta/M +Anette/M +Anett/M +aneurysm/MS +anew +Angara/M +Angela/M +Angeleno/SM +Angele/SM +angelfish/SM +Angelia/M +angelic +angelical/Y +Angelica/M +angelica/MS +Angelico/M +Angelika/M +Angeli/M +Angelina/M +Angeline/M +Angelique/M +Angelita/M +Angelle/M +Angel/M +angel/MDSG +Angelo/M +Angelou/M +Ange/M +anger/GDMS +Angevin/M +Angie/M +Angil/M +angina/MS +angiography +angioplasty/S +angiosperm/MS +Angkor/M +angle/GMZDSRJ +angler/M +Angles +angleworm/MS +Anglia/M +Anglicanism/MS +Anglican/MS +Anglicism/SM +Anglicization/MS +anglicize/SDG +Anglicize/SDG +angling/M +Anglo/MS +Anglophile/SM +Anglophilia/M +Anglophobe/MS +Anglophobia/M +Angola/M +Angolan/S +angora/MS +Angora/MS +angrily +angriness/M +angry/RTP +angst/MS +ngstrm/M +angstrom/MS +Anguilla/M +anguish/DSMG +angularity/MS +angular/Y +Angus/M +Angy/M +Anheuser/M +anhydride/M +anhydrite/M +anhydrous/Y +Aniakchak/M +Ania/M +Anibal/M +Anica/M +aniline/SM +animadversion/SM +animadvert/DSG +animalcule/MS +animal/MYPS +animated/A +animatedly +animately/I +animateness/MI +animates/A +animate/YNGXDSP +animating/A +animation/AMS +animator/SM +animism/SM +animistic +animist/S +animized +animosity/MS +animus/SM +anionic/S +anion/MS +aniseed/MS +aniseikonic +anise/MS +anisette/SM +anisotropic +anisotropy/MS +Anissa/M +Anita/M +Anitra/M +Anjanette/M +Anjela/M +Ankara/M +ankh/M +ankhs +anklebone/SM +ankle/GMDS +anklet/MS +Annabal/M +Annabela/M +Annabella/M +Annabelle/M +Annabell/M +Annabel/M +Annadiana/M +Annadiane/M +Annalee/M +Annaliese/M +Annalise/M +annalist/MS +annal/MNS +Anna/M +Annamaria/M +Annamarie/M +Annapolis/M +Annapurna/M +anneal/DRSZG +annealer/M +Annecorinne/M +annelid/MS +Anneliese/M +Annelise/M +Anne/M +Annemarie/M +Annetta/M +Annette/M +annexation/SM +annexe/M +annex/GSD +Annice/M +Annie/M +annihilate/XSDVGN +annihilation/M +annihilator/MS +Anni/MS +Annissa/M +anniversary/MS +Ann/M +Annmaria/M +Annmarie/M +Annnora/M +Annora/M +annotated/U +annotate/VNGXSD +annotation/M +annotator/MS +announced/U +announcement/SM +announcer/M +announce/ZGLRSD +annoyance/MS +annoyer/M +annoying/Y +annoy/ZGSRD +annualized +annual/YS +annuitant/MS +annuity/MS +annular/YS +annuli +annulled +annulling +annulment/MS +annul/SL +annulus/M +annum +annunciate/XNGSD +annunciation/M +Annunciation/S +annunciator/SM +Anny/M +anode/SM +anodic +anodize/GDS +anodyne/SM +anoint/DRLGS +anointer/M +anointment/SM +anomalousness/M +anomalous/YP +anomaly/MS +anomic +anomie/M +anon/S +anonymity/MS +anonymousness/M +anonymous/YP +anopheles/M +anorak/SM +anorectic/S +anorexia/SM +anorexic/S +another/M +Anouilh/M +Ansell/M +Ansel/M +Anselma/M +Anselm/M +Anselmo/M +Anshan/M +ANSI/M +Ansley/M +ans/M +Anson/M +Anstice/M +answerable/U +answered/U +answerer/M +answer/MZGBSDR +antacid/MS +Antaeus/M +antagonism/MS +antagonistic +antagonistically +antagonist/MS +antagonized/U +antagonize/GZRSD +antagonizing/U +Antananarivo/M +antarctic +Antarctica/M +Antarctic/M +Antares +anteater/MS +antebellum +antecedence/MS +antecedent/SMY +antechamber/SM +antedate/GDS +antediluvian/S +anteing +antelope/MS +ante/MS +antenatal +antennae +antenna/MS +anterior/SY +anteroom/SM +ant/GSMD +Anthea/M +Anthe/M +anthem/MGDS +anther/MS +Anthia/M +Anthiathia/M +anthill/S +anthologist/MS +anthologize/GDS +anthology/SM +Anthony/M +anthraces +anthracite/MS +anthrax/M +anthropic +anthropocentric +anthropogenic +anthropoid/S +anthropological/Y +anthropologist/MS +anthropology/SM +anthropometric/S +anthropometry/M +anthropomorphic +anthropomorphically +anthropomorphism/SM +anthropomorphizing +anthropomorphous +antiabortion +antiabortionist/S +antiaircraft +antibacterial/S +antibiotic/SM +antibody/MS +anticancer +Antichrist/MS +anticipated/U +anticipate/XVGNSD +anticipation/M +anticipative/Y +anticipatory +anticked +anticking +anticlerical/S +anticlimactic +anticlimactically +anticlimax/SM +anticline/SM +anticlockwise +antic/MS +anticoagulant/S +anticoagulation/M +anticommunism/SM +anticommunist/SM +anticompetitive +anticyclone/MS +anticyclonic +antidemocratic +antidepressant/SM +antidisestablishmentarianism/M +antidote/DSMG +Antietam/M +antifascist/SM +antiformant +antifreeze/SM +antifundamentalist/M +antigenic +antigenicity/SM +antigen/MS +antigone +Antigone/M +Antigua/M +antiheroes +antihero/M +antihistamine/MS +antihistorical +antiknock/MS +antilabor +Antillean +Antilles +antilogarithm/SM +antilogs +antimacassar/SM +antimalarial/S +antimatter/SM +antimicrobial/S +antimissile/S +antimony/SM +anting/M +Antin/M +antinomian +antinomy/M +antinuclear +Antioch/M +antioxidant/MS +antiparticle/SM +Antipas/M +antipasti +antipasto/MS +antipathetic +antipathy/SM +antipersonnel +antiperspirant/MS +antiphonal/SY +antiphon/SM +antipodal/S +antipodean/S +antipode/MS +Antipodes +antipollution/S +antipoverty +antiquarianism/MS +antiquarian/MS +antiquary/SM +antiquate/NGSD +antiquation/M +antique/MGDS +antiquity/SM +antiredeposition +antiresonance/M +antiresonator +anti/S +antisemitic +antisemitism/M +antisepses +antisepsis/M +antiseptically +antiseptic/S +antiserum/SM +antislavery/S +antisocial/Y +antispasmodic/S +antisubmarine +antisymmetric +antisymmetry +antitank +antitheses +antithesis/M +antithetic +antithetical/Y +antithyroid +antitoxin/MS +antitrust/MR +antivenin/MS +antiviral/S +antivivisectionist/S +antiwar +antler/SDM +Antofagasta/M +Antoine/M +Antoinette/M +Antonella/M +Antone/M +Antonetta/M +Antonia/M +Antonie/M +Antonietta/M +Antoni/M +Antonina/M +Antonin/M +Antonino/M +Antoninus/M +Antonio/M +Antonius/M +Anton/MS +Antonovics/M +Antony/M +antonymous +antonym/SM +antral +antsy/RT +Antwan/M +Antwerp/M +Anubis/M +anus/SM +anvil/MDSG +anxiety/MS +anxiousness/SM +anxious/PY +any +Anya/M +anybody/S +anyhow +Any/M +anymore +anyone/MS +anyplace +anything/S +anytime +anyway/S +anywhere/S +anywise +AOL/M +aorta/MS +aortic +AP +apace +apache/MS +Apache/MS +Apalachicola/M +apartheid/SM +apart/LP +apartment/MS +apartness/M +apathetic +apathetically +apathy/SM +apatite/MS +APB +aped/A +apelike +ape/MDRSG +Apennines +aper/A +aperiodic +aperiodically +aperiodicity/M +aperitif/S +aperture/MDS +apex/MS +aphasia/SM +aphasic/S +aphelia +aphelion/SM +aphid/MS +aphonic +aphorism/MS +aphoristic +aphoristically +aphrodisiac/SM +Aphrodite/M +Apia/M +apiarist/SM +apiary/SM +apical/YS +apices's +apiece +apishness/M +apish/YP +aplenty +aplomb/SM +APO +Apocalypse/M +apocalypse/MS +apocalyptic +apocryphalness/M +apocryphal/YP +apocrypha/M +Apocrypha/M +apogee/MS +apolar +apolitical/Y +Apollinaire/M +Apollonian +Apollo/SM +apologetically/U +apologetic/S +apologetics/M +apologia/SM +apologist/MS +apologize/GZSRD +apologizer/M +apologizes/A +apologizing/U +apology/MS +apoplectic +apoplexy/SM +apostasy/SM +apostate/SM +apostatize/DSG +apostleship/SM +apostle/SM +apostolic +apostrophe/SM +apostrophized +apothecary/MS +apothegm/MS +apotheoses +apotheosis/M +apotheosized +apotheosizes +apotheosizing +Appalachia/M +Appalachian/MS +appalling/Y +appall/SDG +Appaloosa/MS +appaloosa/S +appanage/M +apparatus/SM +apparel/SGMD +apparency +apparently/I +apparentness/M +apparent/U +apparition/SM +appealer/M +appealing/UY +appeal/SGMDRZ +appear/AEGDS +appearance/AMES +appearer/S +appease/DSRGZL +appeased/U +appeasement/MS +appeaser/M +appellant/MS +appellate/VNX +appellation/M +appellative/MY +appendage/MS +appendectomy/SM +appendices +appendicitis/SM +appendix/SM +append/SGZDR +appertain/DSG +appetite/MVS +appetizer/SM +appetizing/YU +Appia/M +Appian/M +applauder/M +applaud/ZGSDR +applause/MS +applecart/M +applejack/MS +Apple/M +apple/MS +applesauce/SM +Appleseed/M +Appleton/M +applet/S +appliance/SM +applicabilities +applicability/IM +applicable/I +applicably +applicant/MS +applicate/V +application/MA +applicative/Y +applicator/MS +applier/SM +appliqud +appliqu/MSG +apply/AGSDXN +appointee/SM +appoint/ELSADG +appointer/MS +appointive +appointment/ASEM +Appolonia/M +Appomattox/M +apportion/GADLS +apportionment/SAM +appose/SDG +appositeness/MS +apposite/XYNVP +apposition/M +appositive/SY +appraisal/SAM +appraised/A +appraisees +appraiser/M +appraises/A +appraise/ZGDRS +appraising/Y +appreciable/I +appreciably/I +appreciated/U +appreciate/XDSNGV +appreciation/M +appreciativeness/MI +appreciative/PIY +appreciator/MS +appreciatory +apprehend/DRSG +apprehender/M +apprehensible +apprehension/SM +apprehensiveness/SM +apprehensive/YP +apprentice/DSGM +apprenticeship/SM +apprise/DSG +apprizer/SM +apprizingly +apprizings +approachability/UM +approachable/UI +approach/BRSDZG +approacher/M +approbate/NX +approbation/EMS +appropriable +appropriated/U +appropriately/I +appropriateness/SMI +appropriate/XDSGNVYTP +appropriation/M +appropriator/SM +approval/ESM +approve/DSREG +approved/U +approver's/E +approver/SM +approving/YE +approx +approximate/XGNVYDS +approximation/M +approximative/Y +appurtenance/MS +appurtenant/S +APR +apricot/MS +Aprilette/M +April/MS +Apr/M +apron/SDMG +apropos +apse/MS +apsis/M +apter +aptest +aptitude/SM +aptness/SMI +aptness's/U +apt/UPYI +Apuleius/M +aquaculture/MS +aqualung/SM +aquamarine/SM +aquanaut/SM +aquaplane/GSDM +aquarium/MS +Aquarius/MS +aqua/SM +aquatically +aquatic/S +aquavit/SM +aqueduct/MS +aqueous/Y +aquiculture's +aquifer/SM +Aquila/M +aquiline +Aquinas/M +Aquino/M +Aquitaine/M +AR +Arabela/M +Arabele/M +Arabella/M +Arabelle/M +Arabel/M +arabesque/SM +Arabia/M +Arabian/MS +Arabic/M +arability/MS +Arabist/MS +arable/S +Arab/MS +Araby/M +Araceli/M +arachnid/MS +arachnoid/M +arachnophobia +Arafat/M +Araguaya/M +Araldo/M +Aral/M +Ara/M +Aramaic/M +Aramco/M +Arapahoes +Arapahoe's +Arapaho/MS +Ararat/M +Araucanian/M +Arawakan/M +Arawak/M +arbiter/MS +arbitrage/GMZRSD +arbitrager/M +arbitrageur/S +arbitrament/MS +arbitrarily +arbitrariness/MS +arbitrary/P +arbitrate/SDXVNG +arbitration/M +arbitrator/SM +arbor/DMS +arboreal/Y +arbores +arboretum/MS +arborvitae/MS +arbutus/SM +ARC +arcade/SDMG +Arcadia/M +Arcadian +arcana/M +arcane/P +arc/DSGM +archaeological/Y +archaeologist/SM +archaically +archaic/P +Archaimbaud/M +archaism/SM +archaist/MS +archaize/GDRSZ +archaizer/M +Archambault/M +archangel/SM +archbishopric/SM +archbishop/SM +archdeacon/MS +archdiocesan +archdiocese/SM +archduchess/MS +archduke/MS +Archean +archenemy/SM +archeologist's +archeology/MS +archer/M +Archer/M +archery/MS +archetypal +archetype/SM +archfiend/SM +archfool +Archibald/M +Archibaldo/M +Archibold/M +Archie/M +archiepiscopal +Archimedes/M +arching/M +archipelago/SM +architect/MS +architectonic/S +architectonics/M +architectural/Y +architecture/SM +architrave/MS +archival +archive/DRSGMZ +archived/U +archivist/MS +Arch/MR +archness/MS +arch/PGVZTMYDSR +archway/SM +Archy/M +arclike +ARCO/M +arcsine +arctangent +Arctic/M +arctic/S +Arcturus/M +Ardabil +Arda/MH +Ardath/M +Ardeen/M +Ardelia/M +Ardelis/M +Ardella/M +Ardelle/M +ardency/M +Ardene/M +Ardenia/M +Arden/M +ardent/Y +Ardine/M +Ardisj/M +Ardis/M +Ardith/M +ardor/SM +Ardra/M +arduousness/SM +arduous/YP +Ardyce/M +Ardys +Ardyth/M +areal +area/SM +areawide +are/BS +Arel/M +arenaceous +arena/SM +aren't +Arequipa/M +Ares +Aretha/M +Argentina/M +Argentinean/S +Argentine/SM +Argentinian/S +argent/MS +arginine/MS +Argonaut/MS +argonaut/S +argon/MS +Argonne/M +Argo/SM +argosy/SM +argot/SM +arguable/IU +arguably/IU +argue/DSRGZ +arguer/M +argumentation/SM +argumentativeness/MS +argumentative/YP +argument/SM +Argus/M +argyle/S +Ariadne/M +Ariana/M +Arianism/M +Arianist/SM +aria/SM +Aridatha/M +aridity/SM +aridness/M +arid/TYRP +Ariela/M +Ariella/M +Arielle/M +Ariel/M +Arie/SM +Aries/S +aright +Ari/M +Arin/M +Ario/M +Ariosto/M +arise/GJSR +arisen +Aristarchus/M +Aristides +aristocracy/SM +aristocratic +aristocratically +aristocrat/MS +Aristophanes/M +Aristotelean +Aristotelian/M +Aristotle/M +arithmetical/Y +arithmetician/SM +arithmetic/MS +arithmetize/SD +Arius/M +Ariz/M +Arizona/M +Arizonan/S +Arizonian/S +Arjuna/M +Arkansan/MS +Arkansas/M +Arkhangelsk/M +Ark/M +ark/MS +Arkwright/M +Arlana/M +Arlan/M +Arlee/M +Arleen/M +Arlena/M +Arlene/M +Arlen/M +Arleta/M +Arlette/M +Arley/M +Arleyne/M +Arlie/M +Arliene/M +Arlina/M +Arlinda/M +Arline/M +Arlington/M +Arlin/M +Arluene/M +Arly/M +Arlyne/M +Arlyn/M +Armada/M +armada/SM +armadillo/MS +Armageddon/SM +Armagnac/M +armament/EAS +armament's/E +Armand/M +Armando/M +Arman/M +arm/ASEDG +Armata/M +armature/MGSD +armband/SM +armchair/MS +Armco/M +armed/U +Armenia/M +Armenian/MS +armer/MES +armful/SM +armhole/MS +arming/M +Arminius/M +Armin/M +armistice/MS +armless +armlet/SM +armload/M +Armonk/M +armored/U +armorer/M +armorial/S +armory/DSM +armor/ZRDMGS +Armour/M +armpit/MS +armrest/MS +arm's +Armstrong/M +Ar/MY +army/SM +Arnaldo/M +Arneb/M +Arne/M +Arney/M +Arnhem/M +Arnie/M +Arni/M +Arnold/M +Arnoldo/M +Arno/M +Arnuad/M +Arnulfo/M +Arny/M +aroma/SM +aromatherapist/S +aromatherapy/S +aromatically +aromaticity/M +aromaticness/M +aromatic/SP +Aron/M +arose +around +arousal/MS +aroused/U +arouse/GSD +ARPA/M +Arpanet/M +ARPANET/M +arpeggio/SM +arrack/M +Arragon/M +arraignment/MS +arraign/SDGL +arrangeable/A +arranged/EA +arrangement/AMSE +arranger/M +arranges/EA +arrange/ZDSRLG +arranging/EA +arrant/Y +arras/SM +arrayer +array/ESGMD +arrear/SM +arrest/ADSG +arrestee/MS +arrester/MS +arresting/Y +arrestor/MS +Arrhenius/M +arrhythmia/SM +arrhythmic +arrhythmical +Arri/M +arrival/MS +arriver/M +arrive/SRDG +arrogance/MS +arrogant/Y +arrogate/XNGDS +arrogation/M +Arron/M +arrowhead/SM +arrowroot/MS +arrow/SDMG +arroyo/MS +arr/TV +arsenal/MS +arsenate/M +arsenic/MS +arsenide/M +arsine/MS +arsonist/MS +arson/SM +Artair/M +Artaxerxes/M +artefact's +Arte/M +Artemas +Artemis/M +Artemus/M +arterial/SY +arteriolar +arteriole/SM +arterioscleroses +arteriosclerosis/M +artery/SM +artesian +artfulness/SM +artful/YP +Arther/M +arthritic/S +arthritides +arthritis/M +arthrogram/MS +arthropod/SM +arthroscope/S +arthroscopic +Arthurian +Arthur/M +artichoke/SM +article/GMDS +articulable/I +articular +articulated/EU +articulately/I +articulateness/IMS +articulates/I +articulate/VGNYXPSD +articulation/M +articulator/SM +articulatory +Artie/M +artifact/MS +artificer/M +artifice/ZRSM +artificiality/MS +artificialness/M +artificial/PY +artillerist +artilleryman/M +artillerymen +artillery/SM +artiness/MS +artisan/SM +artiste/SM +artistically/I +artistic/I +artist/MS +artistry/SM +artlessness/MS +artless/YP +Art/M +art/SM +artsy/RT +Artur/M +Arturo/M +Artus/M +artwork/MS +Arty/M +arty/TPR +Aruba/M +arum/MS +Arvie/M +Arvin/M +Arv/M +Arvy/M +Aryan/MS +Aryn/M +as +As +A's +Asa/M +Asama/M +asap +ASAP +asbestos/MS +Ascella/M +ascend/ADGS +ascendancy/MS +ascendant/SY +ascender/SM +Ascension/M +ascension/SM +ascent/SM +ascertain/DSBLG +ascertainment/MS +ascetically +asceticism/MS +ascetic/SM +ASCII +ascot/MS +ascribe/GSDB +ascription/MS +ascriptive +Ase/M +aseptically +aseptic/S +asexuality/MS +asexual/Y +Asgard/M +ashame/D +ashamed/UY +Ashanti/M +Ashbey/M +Ashby/M +ashcan/SM +Ashely/M +Asher/M +Asheville/M +Ashia/M +Ashien/M +Ashil/M +Ashkenazim +Ashkhabad/M +Ashla/M +Ashland/M +Ashlan/M +ashlar/GSDM +Ashlee/M +Ashleigh/M +Ashlen/M +Ashley/M +Ashlie/M +Ashli/M +Ashlin/M +Ashly/M +ashman/M +ash/MNDRSG +Ashmolean/M +Ash/MRY +ashore +ashram/SM +Ashton/M +ashtray/MS +Ashurbanipal/M +ashy/RT +Asia/M +Asian/MS +Asiatic/SM +aside/S +Asilomar/M +Asimov +asinine/Y +asininity/MS +askance +ask/DRZGS +asked/U +asker/M +askew/P +ASL +aslant +asleep +Asmara/M +asocial/S +Asoka/M +asparagus/MS +aspartame/S +ASPCA +aspect/SM +Aspell/M +aspen/M +Aspen/M +asperity/SM +asper/M +aspersion/SM +asphalt/MDRSG +asphodel/MS +asphyxia/MS +asphyxiate/GNXSD +asphyxiation/M +aspic/MS +Aspidiske/M +aspidistra/MS +aspirant/MS +aspirate/NGDSX +aspirational +aspiration/M +aspirator/SM +aspire/GSRD +aspirer/M +aspirin/SM +asplenium +asp/MNRXS +Asquith/M +Assad/M +assailable/U +assailant/SM +assail/BGDS +Assamese/M +Assam/M +assassinate/DSGNX +assassination/M +assassin/MS +assaulter/M +assaultive/YP +assault/SGVMDR +assayer/M +assay/SZGRD +assemblage/MS +assemble/ADSREG +assembled/U +assembler/EMS +assemblies/A +assembly/EAM +assemblyman/M +assemblymen +Assembly/MS +assemblywoman +assemblywomen +assent/SGMRD +assert/ADGS +asserter/MS +assertional +assertion/AMS +assertiveness/SM +assertive/PY +assess/BLSDG +assessed/A +assesses/A +assessment/SAM +assessor/MS +asset/SM +asseverate/XSDNG +asseveration/M +asshole/MS! +assiduity/SM +assiduousness/SM +assiduous/PY +assign/ALBSGD +assignation/MS +assigned/U +assignee/MS +assigner/MS +assignment/MAS +assignor/MS +assigns/CU +assimilate/VNGXSD +assimilationist/M +assimilation/M +Assisi/M +assistance/SM +assistantship/SM +assistant/SM +assisted/U +assister/M +assist/RDGS +assize/MGSD +ass/MNS +assn +assoc +associable +associated/U +associate/SDEXNG +associateship +associational +association/ME +associative/Y +associativity/S +associator/MS +assonance/SM +assonant/S +assorter/M +assort/LRDSG +assortment/SM +asst +assuaged/U +assuage/SDG +assumability +assumer/M +assume/SRDBJG +assuming/UA +assumption/SM +assumptive +assurance/AMS +assure/AGSD +assuredness/M +assured/PYS +assurer/SM +assuring/YA +Assyria/M +Assyrian/SM +Assyriology/M +Astaire/SM +Astarte/M +astatine/MS +aster/ESM +asteria +asterisked/U +asterisk/SGMD +astern +asteroidal +asteroid/SM +asthma/MS +asthmatic/S +astigmatic/S +astigmatism/SM +astir +astonish/GSDL +astonishing/Y +astonishment/SM +Aston/M +Astoria/M +Astor/M +astounding/Y +astound/SDG +astraddle +Astrakhan/M +astrakhan/SM +astral/SY +Astra/M +astray +astride +Astrid/M +astringency/SM +astringent/YS +Astrix/M +astrolabe/MS +astrologer/MS +astrological/Y +astrologist/M +astrology/SM +astronautical +astronautic/S +astronautics/M +astronaut/SM +astronomer/MS +astronomic +astronomical/Y +astronomy/SM +astrophysical +astrophysicist/SM +astrophysics/M +Astroturf/M +AstroTurf/S +Asturias/M +astuteness/MS +astute/RTYP +Asuncin/M +asunder +Aswan/M +asylum/MS +asymmetric +asymmetrical/Y +asymmetry/MS +asymptomatic +asymptomatically +asymptote/MS +asymptotically +asymptotic/Y +asynchronism/M +asynchronous/Y +asynchrony +at +Atacama/M +Atahualpa/M +Atalanta/M +Atari/M +Atatrk/M +atavism/MS +atavistic +atavist/MS +ataxia/MS +ataxic/S +atelier/SM +atemporal +ate/S +Athabasca/M +Athabascan's +Athabaskan/MS +Athabaska's +atheism/SM +atheistic +atheist/SM +Athena/M +Athene/M +Athenian/SM +Athens/M +atheroscleroses +atherosclerosis/M +athirst +athlete/MS +athletically +athleticism/M +athletic/S +athletics/M +athwart +atilt +Atkins/M +Atkinson/M +Atlanta/M +Atlante/MS +atlantes +Atlantic/M +Atlantis/M +atlas/SM +Atlas/SM +At/M +Atman +ATM/M +atmosphere/DSM +atmospherically +atmospheric/S +atoll/MS +atomically +atomicity/M +atomic/S +atomics/M +atomistic +atomization/SM +atomize/GZDRS +atomizer/M +atom/SM +atonality/MS +atonal/Y +atone/LDSG +atonement/SM +atop +ATP +Atreus/M +atria +atrial +Atria/M +atrium/M +atrociousness/SM +atrocious/YP +atrocity/SM +atrophic +atrophy/DSGM +atropine/SM +Atropos/M +Ats +attach/BLGZMDRS +attached/UA +attacher/M +attach/S +attachment/ASM +attacker/M +attack/GBZSDR +attainabilities +attainability/UM +attainableness/M +attainable/U +attainably/U +attain/AGSD +attainder/MS +attained/U +attainer/MS +attainment/MS +attar/MS +attempt/ADSG +attempter/MS +attendance/MS +attendant/SM +attended/U +attendee/SM +attender/M +attend/SGZDR +attentional +attentionality +attention/IMS +attentiveness/IMS +attentive/YIP +attenuated/U +attenuate/SDXGN +attenuation/M +attenuator/MS +attestation/SM +attested/U +attester/M +attest/GSDR +Attic +Attica/M +attic/MS +Attila/M +attire/SDG +attitude/MS +attitudinal/Y +attitudinize/SDG +Attlee/M +attn +Attn +attorney/SM +attractant/SM +attract/BSDGV +attraction/MS +attractivenesses +attractiveness/UM +attractive/UYP +attractor/MS +attributable/U +attribute/BVNGRSDX +attributed/U +attributer/M +attributional +attribution/M +attributive/SY +attrition/MS +Attucks +attune/SDG +atty +ATV/S +atwitter +Atwood/M +atypical/Y +Aube/M +Auberge/M +aubergine/MS +Auberon/M +Auberta/M +Aubert/M +Aubine/M +Aubree/M +Aubrette/M +Aubrey/M +Aubrie/M +Aubry/M +auburn/SM +Auckland/M +auctioneer/SDMG +auction/MDSG +audaciousness/SM +audacious/PY +audacity/MS +Auden/M +audibility/MSI +audible/I +audibles +audibly/I +Audie/M +audience/MS +Audi/M +audiogram/SM +audiological +audiologist/MS +audiology/SM +audiometer/MS +audiometric +audiometry/M +audiophile/SM +audio/SM +audiotape/S +audiovisual/S +audited/U +audition/MDSG +auditorium/MS +auditor/MS +auditory/S +audit/SMDVG +Audra/M +Audre/M +Audrey/M +Audrie/M +Audrye/M +Audry/M +Audubon/M +Audy/M +Auerbach/M +Augean +auger/SM +aught/S +Augie/M +Aug/M +augmentation/SM +augmentative/S +augment/DRZGS +augmenter/M +augur/GDMS +augury/SM +Augusta/M +Augustan/S +Auguste/M +Augustina/M +Augustine/M +Augustinian/S +Augustin/M +augustness/SM +Augusto/M +August/SM +august/STPYR +Augustus/M +Augy/M +auk/MS +Au/M +Aundrea/M +auntie/MS +aunt/MYS +aunty's +aural/Y +Aura/M +aura/SM +Aurea/M +Aurelea/M +Aurelia/M +Aurelie/M +Aurelio/M +Aurelius/M +Aurel/M +aureole/GMSD +aureomycin +Aureomycin/M +Auria/M +auric +auricle/SM +auricular +Aurie/M +Auriga/M +Aurilia/M +Aurlie/M +Auroora/M +auroral +Aurora/M +aurora/SM +Aurore/M +Aurthur/M +Auschwitz/M +auscultate/XDSNG +auscultation/M +auspice/SM +auspicious/IPY +auspiciousnesses +auspiciousness/IM +Aussie/MS +Austen/M +austereness/M +austere/TYRP +austerity/SM +Austina/M +Austine/M +Austin/SM +austral +Australasia/M +Australasian/S +australes +Australia/M +Australian/MS +Australis/M +australites +Australoid +Australopithecus/M +Austria/M +Austrian/SM +Austronesian +authentically +authenticated/U +authenticate/GNDSX +authentication/M +authenticator/MS +authenticity/MS +authentic/UI +author/DMGS +authoress/S +authorial +authoritarianism/MS +authoritarian/S +authoritativeness/SM +authoritative/PY +authority/SM +authorization/MAS +authorize/AGDS +authorized/U +authorizer/SM +authorizes/U +authorship/MS +autism/MS +autistic/S +autobahn/MS +autobiographer/MS +autobiographic +autobiographical/Y +autobiography/MS +autoclave/SDGM +autocollimator/M +autocorrelate/GNSDX +autocorrelation/M +autocracy/SM +autocratic +autocratically +autocrat/SM +autodial/R +autodidact/MS +autofluorescence +autograph/MDG +autographs +autoignition/M +autoimmune +autoimmunity/S +autoloader +automaker/S +automata's +automate/NGDSX +automatically +automatic/S +automation/M +automatism/SM +automatize/DSG +automaton/SM +automobile/GDSM +automorphism/SM +automotive +autonavigator/SM +autonomic/S +autonomous/Y +autonomy/MS +autopilot/SM +autopsy/MDSG +autoregressive +autorepeat/GS +auto/SDMG +autostart +autosuggestibility/M +autotransformer/M +autoworker/S +autumnal/Y +Autumn/M +autumn/MS +aux +auxiliary/S +auxin/MS +AV +availability/USM +availableness/M +available/U +availably +avail/BSZGRD +availing/U +avalanche/MGSD +Avalon/M +Ava/M +avant +avarice/SM +avariciousness/M +avaricious/PY +avast/S +avatar/MS +avaunt/S +avdp +Aveline/M +Ave/MS +avenged/U +avenger/M +avenge/ZGSRD +Aventine/M +Aventino/M +avenue/MS +average/DSPGYM +Averell/M +Averill/M +Averil/M +Avernus/M +averred +averrer +averring +Averroes/M +averseness/M +averse/YNXP +aversion/M +avers/V +avert/GSD +Averyl/M +Avery/M +ave/S +aves/C +Avesta/M +avg +avian/S +aviary/SM +aviate/NX +aviation/M +aviator/SM +aviatrices +aviatrix/SM +Avicenna/M +Avictor/M +avidity/MS +avid/TPYR +Avie/M +Avigdor/M +Avignon/M +Avila/M +avionic/S +avionics/M +Avior/M +Avis +avitaminoses +avitaminosis/M +Avivah/M +Aviva/M +Aviv/M +avocado/MS +avocational +avocation/SM +Avogadro/M +avoidable/U +avoidably/U +avoidance/SM +avoider/M +avoid/ZRDBGS +avoirdupois/MS +Avon/M +avouch/GDS +avowal/EMS +avowed/Y +avower/M +avow/GEDS +Avram/M +Avril/M +Avrit/M +Avrom/M +avuncular +av/ZR +AWACS +await/SDG +awake/GS +awakened/U +awakener/M +awakening/S +awaken/SADG +awarder/M +award/RDSZG +awareness/MSU +aware/TRP +awash +away/PS +aweigh +awe/SM +awesomeness/SM +awesome/PY +awestruck +awfuller +awfullest +awfulness/SM +awful/YP +aw/GD +awhile/S +awkwardness/MS +awkward/PRYT +awl/MS +awning/DM +awn/MDJGS +awoke +awoken +AWOL +awry/RT +ax/DRSZGM +axehead/S +Axel/M +Axe/M +axeman +axial/Y +axillary +axiological/Y +axiology/M +axiomatically +axiomatic/S +axiomatization/MS +axiomatize/GDS +axiom/SM +axion/SM +axis/SM +axle/MS +axletree/MS +Ax/M +axolotl/SM +axon/SM +ayah/M +ayahs +Ayala/M +ayatollah +ayatollahs +aye/MZRS +Ayers +Aylmar/M +Aylmer/M +Aymara/M +Aymer/M +Ayn/M +AZ +azalea/SM +Azania/M +Azazel/M +Azerbaijan/M +azimuthal/Y +azimuth/M +azimuths +Azores +Azov/M +AZT +Aztecan +Aztec/MS +azure/MS +BA +Baal/SM +baa/SDG +Babara/M +Babar's +Babbage/M +Babbette/M +Babbie/M +babbitt/GDS +Babbitt/M +babbler/M +babble/RSDGZ +Babb/M +Babcock/M +Babel/MS +babel/S +babe/SM +Babette/M +Babita/M +Babka/M +baboon/MS +Bab/SM +babushka/MS +babyhood/MS +babyish +Babylonia/M +Babylonian/SM +Babylon/MS +babysat +babysit/S +babysitter/S +babysitting +baby/TDSRMG +Bacall/M +Bacardi/M +baccalaureate/MS +baccarat/SM +bacchanalia +Bacchanalia/M +bacchanalian/S +bacchanal/SM +Bacchic +Bacchus/M +bachelorhood/SM +bachelor/SM +Bach/M +bacillary +bacilli +bacillus/MS +backache/SM +backarrow +backbencher/M +backbench/ZR +backbiter/M +backbite/S +backbitten +backbit/ZGJR +backboard/SM +backbone/SM +backbreaking +backchaining +backcloth/M +backdate/GDS +backdrop/MS +backdropped +backdropping +backed/U +backer/M +backfield/SM +backfill/SDG +backfire/GDS +backgammon/MS +background/SDRMZG +back/GZDRMSJ +backhanded/Y +backhander/M +backhand/RDMSZG +backhoe/S +backing/M +backlash/GRSDM +backless +backlogged +backlogging +backlog/MS +backorder +backpacker/M +backpack/ZGSMRD +backpedal/DGS +backplane/MS +backplate/SM +backrest/MS +backscatter/SMDG +backseat/S +backside/SM +backslapper/MS +backslapping/M +backslash/DSG +backslider/M +backslide/S +backslid/RZG +backspace/GSD +backspin/SM +backstabber/M +backstabbing +backstage +backstair/S +backstitch/GDSM +backstop/MS +backstopped +backstopping +backstreet/M +backstretch/SM +backstroke/GMDS +backtalk/S +backtrack/SDRGZ +backup/SM +Backus/M +backwardness/MS +backward/YSP +backwash/SDMG +backwater/SM +backwood/S +backwoodsman/M +backwoodsmen +backyard/MS +baconer/M +Bacon/M +bacon/SRM +bacterial/Y +bacteria/MS +bactericidal +bactericide/SM +bacteriologic +bacteriological +bacteriologist/MS +bacteriology/SM +bacterium/M +Bactria/M +badder +baddest +baddie/MS +bade +Baden/M +badge/DSRGMZ +badger/DMG +badinage/DSMG +badland/S +Badlands/M +badman/M +badmen +badminton/MS +badmouth/DG +badmouths +badness/SM +bad/PSNY +Baedeker/SM +Baez/M +Baffin/M +bafflement/MS +baffler/M +baffle/RSDGZL +baffling/Y +bagatelle/MS +bagel/SM +bagful/MS +baggageman +baggagemen +baggage/SM +bagged/M +bagger/SM +baggily +bagginess/MS +bagging/M +baggy/PRST +Baghdad/M +bagpiper/M +bagpipe/RSMZ +Bagrodia/MS +bag/SM +baguette/SM +Baguio/M +bah +Baha'i +Bahama/MS +Bahamanian/S +Bahamian/MS +Baha'ullah +Bahia/M +Bahrain/M +bahs +Baikal/M +Bailey/SM +bail/GSMYDRB +Bailie/M +bailiff/SM +bailiwick/MS +Baillie/M +Bail/M +bailout/MS +bailsman/M +bailsmen +Baily/M +Baird/M +bairn/SM +baiter/M +bait/GSMDR +baize/GMDS +Baja/M +baked/U +bakehouse/M +Bakelite/M +baker/M +Baker/M +Bakersfield/M +bakery/SM +bakeshop/S +bake/ZGJDRS +baking/M +baklava/M +baksheesh/SM +Baku/M +Bakunin/M +balaclava/MS +balalaika/MS +balanced/A +balancedness +balancer/MS +balance's +balance/USDG +Balanchine/M +Balboa/M +balboa/SM +balcony/MSD +balderdash/MS +Balder/M +baldfaced +Bald/MR +baldness/MS +bald/PYDRGST +baldric/SM +Balduin/M +Baldwin/M +baldy +Balearic/M +baleen/MS +balefuller +balefullest +balefulness/MS +baleful/YP +Bale/M +bale/MZGDRS +baler/M +Balfour/M +Bali/M +Balinese +balkanization +balkanize/DG +Balkan/SM +balker/M +balk/GDRS +Balkhash/M +balkiness/M +balky/PRT +balladeer/MS +ballade/MS +balladry/MS +ballad/SM +Ballard/SM +ballast/SGMD +ballcock/S +ballerina/MS +baller/M +balletic +ballet/MS +ballfields +ballgame/S +ball/GZMSDR +ballistic/S +ballistics/M +Ball/M +balloonist/S +balloon/RDMZGS +balloter/M +ballot/MRDGS +ballpark/SM +ballplayer/SM +ballpoint/SM +ballroom/SM +ballsy/TR +ballyhoo/SGMD +balminess/SM +balm/MS +balmy/PRT +baloney/SM +balsam/GMDS +balsamic +balsa/MS +Balthazar/M +Baltic/M +Baltimore/M +Baluchistan/M +baluster/MS +balustrade/SM +Balzac/M +Ba/M +Bamako/M +Bamberger/M +Bambie/M +Bambi/M +bamboo/SM +bamboozle/GSD +Bamby/M +Banach/M +banality/MS +banal/TYR +banana/SM +Bancroft/M +bandager/M +bandage/RSDMG +bandanna/SM +bandbox/MS +bandeau/M +bandeaux +band/EDGS +bander/M +banding/M +bandit/MS +banditry/MS +bandmaster/MS +bandoleer/SM +bandpass +band's +bandsman/M +bandsmen +bandstand/SM +bandstop +Bandung/M +bandwagon/MS +bandwidth/M +bandwidths +bandy/TGRSD +banefuller +banefullest +baneful/Y +bane/MS +Bangalore/M +banger/M +bang/GDRZMS +bangkok +Bangkok/M +Bangladeshi/S +Bangladesh/M +bangle/MS +Bangor/M +Bangui/M +bani +banisher/M +banishment/MS +banish/RSDGL +banister/MS +Banjarmasin/M +banjoist/SM +banjo/MS +Banjul/M +bankbook/SM +bankcard/S +banker/M +bank/GZJDRMBS +banking/M +Bank/MS +banknote/S +bankroll/DMSG +bankruptcy/MS +bankrupt/DMGS +Banky/M +Ban/M +banned/U +Banneker/M +banner/SDMG +banning/U +Bannister/M +bannister's +bannock/SM +banns +banqueter/M +banquet/SZGJMRD +banquette/MS +ban/SGMD +banshee/MS +bans/U +bantam/MS +bantamweight/MS +banterer/M +bantering/Y +banter/RDSG +Banting/M +Bantu/SM +banyan/MS +banzai/S +baobab/SM +Baotou/M +baptismal/Y +baptism/SM +Baptiste/M +baptistery/MS +baptist/MS +Baptist/MS +baptistry's +baptized/U +baptizer/M +baptize/SRDZG +baptizes/U +Barabbas/M +Barbabas/M +Barbabra/M +Barbadian/S +Barbados/M +Barbaraanne/M +Barbara/M +Barbarella/M +barbarianism/MS +barbarian/MS +barbaric +barbarically +barbarism/MS +barbarity/SM +barbarize/SDG +Barbarossa/M +barbarousness/M +barbarous/PY +Barbary/M +barb/DRMSGZ +barbecue/DRSMG +barbed/P +Barbee/M +barbell/SM +barbel/MS +Barbe/M +barbeque's +barber/DMG +barbered/U +Barber/M +barberry/MS +barbershop/MS +Barbette/M +Barbey/M +Barbie/M +Barbi/M +barbital/M +barbiturate/MS +Barbour/M +Barbra/M +Barb/RM +Barbuda/M +barbwire/SM +Barby/M +barcarole/SM +Barcelona/M +Barclay/M +Bardeen/M +Barde/M +bardic +Bard/M +bard/MDSG +bareback/D +barefacedness/M +barefaced/YP +barefoot/D +barehanded +bareheaded +barelegged +bareness/MS +Barents/M +bare/YSP +barfly/SM +barf/YDSG +bargainer/M +bargain/ZGSDRM +barge/DSGM +bargeman/M +bargemen +bargepole/M +barhopped +barhopping +barhop/S +Bari/M +baritone/MS +barium/MS +barked/C +barkeeper/M +barkeep/SRZ +barker/M +Barker/M +bark/GZDRMS +Barkley/M +barks/C +barleycorn/MS +barley/MS +Barlow/M +barmaid/SM +barman/M +barmen +Bar/MH +Barnabas +Barnabe/M +Barnaby/M +barnacle/MDS +Barnard/M +Barnaul/M +Barnebas/M +Barnes +Barnett/M +Barney/M +barnful +barn/GDSM +Barnhard/M +Barnie/M +Barn/M +barnsful +barnstorm/DRGZS +barnstormer/M +Barnum/M +barnyard/MS +Barny/M +Baroda/M +barometer/MS +barometric +barometrically +baronage/MS +baroness/MS +baronetcy/SM +baronet/MS +baronial +Baron/M +baron/SM +barony/SM +baroque/SPMY +barque's +Barquisimeto/M +barracker/M +barrack/SDRG +barracuda/MS +barrage/MGSD +Barranquilla/M +barred/ECU +barre/GMDSJ +barrel/SGMD +barrenness/SM +barren/SPRT +Barrera/M +Barret/M +barrette/SM +Barrett/M +barricade/SDMG +Barrie/M +barrier/MS +barring/R +barrio/SM +Barri/SM +barrister/MS +Barr/M +Barron/M +barroom/SM +barrow/MS +Barry/M +Barrymore/MS +bars/ECU +barstool/SM +Barstow/M +Bartel/M +bartender/M +bartend/ZR +barterer/M +barter/SRDZG +bar/TGMDRS +Barthel/M +Barth/M +Bartholdi/M +Bartholemy/M +Bartholomeo/M +Bartholomeus/M +Bartholomew/M +Bartie/M +Bartlet/M +Bartlett/M +Bart/M +Bartk/M +Bartolemo/M +Bartolomeo/M +Barton/M +Bartram/M +Barty/M +barycenter +barycentre's +barycentric +Bary/M +baryon/SM +Baryram/M +Baryshnikov/M +basaltic +basalt/SM +basal/Y +Bascom/M +bas/DRSTG +baseball/MS +baseband +baseboard/MS +base/CGRSDL +baseless +baseline/SM +Basel/M +basely +Base/M +baseman/M +basemen +basement/CSM +baseness/MS +baseplate/M +base's +basetting +bashfulness/MS +bashful/PY +bash/JGDSR +Basho/M +Basia/M +BASIC +basically +basic/S +Basie/M +basilar +Basile/M +basilica/SM +Basilio/M +basilisk/SM +Basilius/M +Basil/M +basil/MS +basin/DMS +basinful/S +basis/M +basketball/MS +basketry/MS +basket/SM +basketwork/SM +bask/GSD +basophilic +Basque/SM +Basra/M +Basseterre/M +basset/GMDS +Bassett/M +bassinet/SM +bassist/MS +Bass/M +basso/MS +bassoonist/MS +bassoon/MS +bass/SM +basswood/SM +bastardization/MS +bastardized/U +bastardize/SDG +bastard/MYS +bastardy/MS +baste/NXS +baster/M +Bastian/M +Bastien/M +Bastille/M +basting/M +bastion/DM +bast/SGZMDR +Basutoland/M +Bataan/M +Batavia/M +batch/MRSDG +bated/U +bate/KGSADC +bater/AC +Bates +bathe +bather/M +bathetic +bathhouse/SM +bath/JMDSRGZ +bathmat/S +Batholomew/M +bathos/SM +bathrobe/MS +bathroom/SDM +baths +Bathsheba/M +bathtub/MS +bathwater +bathyscaphe's +bathysphere/MS +batik/DMSG +Batista/M +batiste/SM +Bat/M +batman/M +Batman/M +batmen +baton/SM +Batsheva/M +batsman/M +bat/SMDRG +batsmen +battalion/MS +batted +batten/SDMG +batter/SRDZG +battery/MS +batting/MS +battledore/MS +battledress +battlefield/SM +battlefront/SM +battle/GMZRSDL +battleground/SM +Battle/M +battlement/SMD +battler/M +battleship/MS +batty/RT +Batu/M +batwings +bauble/SM +Baudelaire/M +baud/M +Baudoin/M +Baudouin/M +Bauer/M +Bauhaus/M +baulk/GSDM +Bausch/M +bauxite/SM +Bavaria/M +Bavarian/S +bawdily +bawdiness/MS +bawd/SM +bawdy/PRST +bawler/M +bawl/SGDR +Baxie/M +Bax/M +Baxter/M +Baxy/M +Bayamon +Bayard/M +bayberry/MS +Bayda/M +Bayer/M +Bayes +Bayesian +bay/GSMDY +Baylor/M +Bay/MR +bayonet/SGMD +Bayonne/M +bayou/MS +Bayreuth/M +bazaar/MS +bazillion/S +bazooka/MS +BB +BBB +BBC +bbl +BBQ +BBS +BC +BCD +bdrm +beachcomber/SM +beachhead/SM +Beach/M +beach/MSDG +beachwear/M +beacon/DMSG +beading/M +Beadle/M +beadle/SM +bead/SJGMD +beadsman/M +beadworker +beady/TR +beagle/SDGM +beaker/M +beak/ZSDRM +Beale/M +Bealle/M +Bea/M +beam/MDRSGZ +beanbag/SM +bean/DRMGZS +beanie/SM +Bean/M +beanpole/MS +beanstalk/SM +bearable/U +bearably/U +beard/DSGM +bearded/P +beardless +Beard/M +Beardmore/M +Beardsley/M +bearer/M +bearing/M +bearishness/SM +bearish/PY +bearlike +Bear/M +Bearnaise/M +Bearnard/M +bearskin/MS +bear/ZBRSJG +Beasley/M +beasties +beastings/M +beastliness/MS +beastly/PTR +beast/SJMY +beatable/U +beatably/U +beaten/U +beater/M +beatific +beatifically +beatification/M +beatify/GNXDS +beating/M +beatitude/MS +Beatlemania/M +Beatles/M +beatnik/SM +beat/NRGSBZJ +Beatrice/M +Beatrisa/M +Beatrix/M +Beatriz/M +Beauchamps +Beaufort/M +Beaujolais/M +Beau/M +Beaumarchais/M +Beaumont/M +beau/MS +Beauregard/M +beauteousness/M +beauteous/YP +beautician/MS +beautification/M +beautifier/M +beautifully/U +beautifulness/M +beautiful/PTYR +beautify/SRDNGXZ +beaut/SM +beauty/SM +Beauvoir/M +beaux's +beaver/DMSG +Beaverton/M +Bebe/M +bebop/MS +becalm/GDS +became +because +Becca/M +Bechtel/M +Becka/M +Becker/M +Becket/M +Beckett/M +beck/GSDM +Beckie/M +Becki/M +beckon/SDG +Beck/RM +Becky/M +becloud/SGD +become/GJS +becoming/UY +Becquerel/M +bedaub/GDS +bedazzle/GLDS +bedazzlement/SM +bedbug/SM +bedchamber/M +bedclothes +bedded +bedder/MS +bedding/MS +bedeck/DGS +Bede/M +bedevil/DGLS +bedevilment/SM +bedfast +bedfellow/MS +Bedford/M +bedimmed +bedimming +bedim/S +bedizen/DGS +bedlam/MS +bedlinen +bedmaker/SM +bedmate/MS +bed/MS +Bedouin/SM +bedpan/SM +bedpost/SM +bedraggle/GSD +bedridden +bedrock/SM +bedroll/SM +bedroom/DMS +bedsheets +bedside/MS +bedsit +bedsitter/M +bedsore/MS +bedspread/SM +bedspring/SM +bedstead/SM +bedstraw/M +bedtime/SM +Beebe/M +beebread/MS +Beecher/M +beech/MRSN +beechnut/MS +beechwood +beefburger/SM +beefcake/MS +beef/GZSDRM +beefiness/MS +beefsteak/MS +beefy/TRP +beehive/MS +beekeeper/MS +beekeeping/SM +beeline/MGSD +Beelzebub/M +Bee/M +bee/MZGJRS +been/S +beeper/M +beep/GZSMDR +Beerbohm/M +beer/M +beermat/S +beery/TR +beeswax/DSMG +Beethoven/M +beetle/GMRSD +Beeton/M +beetroot/M +beet/SM +beeves/M +befall/SGN +befell +befit/SM +befitted +befitting/Y +befogged +befogging +befog/S +before +beforehand +befoul/GSD +befriend/DGS +befuddle/GLDS +befuddlement/SM +began +beget/S +begetting +beggar/DYMSG +beggarliness/M +beggarly/P +beggary/MS +begged +begging +Begin/M +beginner/MS +beginning/MS +begin/S +begone/S +begonia/SM +begot +begotten +begrime/SDG +begrudge/GDRS +begrudging/Y +beg/S +beguilement/SM +beguiler/M +beguile/RSDLZG +beguiling/Y +beguine/SM +begum/MS +begun +behalf/M +behalves +Behan/M +behave/GRSD +behavioral/Y +behaviorism/MS +behavioristic/S +behaviorist/S +behavior/SMD +behead/GSD +beheld +behemoth/M +behemoths +behest/SM +behindhand +behind/S +beholder/M +behold/ZGRNS +behoofs +behoove/SDJMG +behooving/YM +Behring/M +Beiderbecke/M +beige/MS +Beijing +Beilul/M +being/M +Beirut/M +Beitris/M +bejewel/SDG +Bekesy/M +Bekki/M +be/KS +belabor/MDSG +Bela/M +Belarus +belate/D +belatedness/M +belated/PY +Belau/M +belay/GSD +belch/GSD +beleaguer/GDS +Belem/M +Belfast/M +belfry/SM +Belgian/MS +Belgium/M +Belg/M +Belgrade/M +Belia/M +Belicia/M +belie +belief/ESUM +belier/M +believability's +believability/U +believable/U +believably/U +believed/U +believe/EZGDRS +believer/MUSE +believing/U +Belinda/M +Belita/M +belittlement/MS +belittler/M +belittle/RSDGL +Belize/M +belladonna/MS +Bella/M +Bellamy/M +Bellanca/M +Bellatrix/M +bellboy/MS +belled/A +Belle/M +belle/MS +belletristic +belletrist/SM +Belleville/M +bellflower/M +bell/GSMD +bellhop/MS +bellicoseness/M +bellicose/YP +bellicosity/MS +belligerence/SM +belligerency/MS +belligerent/SMY +Bellina/M +belling/A +Bellini/M +Bell/M +bellman/M +bellmen +Bellovin/M +bellow/DGS +Bellow/M +bellows/M +bells/A +bellwether/MS +Bellwood/M +bellyacher/M +bellyache/SRDGM +bellybutton/MS +bellyfull +bellyful/MS +belly/SDGM +Bel/M +Belmont/M +Belmopan/M +Beloit/M +belong/DGJS +belonging/MP +Belorussian/S +Belorussia's +belove/D +beloved/S +below/S +Belshazzar/M +belted/U +belt/GSMD +belting/M +Belton/M +Beltran/M +Beltsville/M +beltway/SM +beluga/SM +Belushi/M +Belva/M +belvedere/M +Belvia/M +bely/DSRG +beman +Be/MH +bemire/SDG +bemoan/GDS +bemused/Y +bemuse/GSDL +bemusement/SM +Benacerraf/M +Benares's +bencher/M +benchmark/GDMS +bench/MRSDG +bend/BUSG +bended +Bender/M +bender/MS +Bendick/M +Bendicty/M +Bendite/M +Bendix/M +beneath +Benedetta/M +Benedetto/M +Benedick/M +Benedicta/M +Benedictine/MS +benediction/MS +Benedict/M +Benedicto/M +benedictory +Benedikta/M +Benedikt/M +benefaction/MS +benefactor/MS +benefactress/S +benefice/MGSD +beneficence/SM +beneficent/Y +beneficialness/M +beneficial/PY +beneficiary/MS +benefiter/M +benefit/SRDMZG +Benelux/M +Benet/M +Benetta/M +Benetton/M +benevolence/SM +benevolentness/M +benevolent/YP +Bengali/M +Bengal/SM +Benghazi/M +Bengt/M +Beniamino/M +benightedness/M +benighted/YP +benignant +benignity/MS +benign/Y +Beninese +Benin/M +Benita/M +Benito/M +Benjamen/M +Benjamin/M +Benjie/M +Benji/M +Benjy/M +Ben/M +Bennett/M +Bennie/M +Benni/M +Bennington/M +Benn/M +Benny/M +Benoite/M +Benoit/M +Benson/M +Bentham/M +Bentlee/M +Bentley/MS +Bent/M +Benton/M +bents +bent/U +bentwood/SM +benumb/SGD +Benyamin/M +Benzedrine/M +benzene/MS +benzine/SM +Benz/M +Beograd's +Beowulf/M +bequeath/GSD +bequeaths +bequest/MS +berate/GSD +Berber/MS +bereave/GLSD +bereavement/MS +bereft +Berenice/M +Beret/M +beret/SM +Bergen/M +Bergerac/M +Berger/M +Berget/M +Berglund/M +Bergman/M +Berg/NRM +berg/NRSM +Bergson/M +Bergsten/M +Bergstrom/M +beribbon/D +beriberi/SM +Beringer/M +Bering/RM +Berkeley/M +berkelium/SM +Berke/M +Berkie/M +Berkley/M +Berkly/M +Berkowitz/M +Berkshire/SM +Berky/M +Berk/YM +Berle/M +Berliner/M +Berlin/SZRM +Berlioz/M +Berlitz/M +Berman/M +Ber/MG +berm/SM +Bermuda/MS +Bermudan/S +Bermudian/S +Bernadene/M +Bernadette/M +Bernadina/M +Bernadine/M +Berna/M +Bernardina/M +Bernardine/M +Bernardino/M +Bernard/M +Bernardo/M +Bernarr/M +Bernays/M +Bernbach/M +Bernelle/M +Berne's +Bernese +Bernete/M +Bernetta/M +Bernette/M +Bernhard/M +Bernhardt/M +Bernice/M +Berniece/M +Bernie/M +Berni/M +Bernini/M +Bernita/M +Bern/M +Bernoulli/M +Bernstein/M +Berny/M +Berra/M +Berrie/M +Berri/M +berrylike +Berry/M +berry/SDMG +berserker/M +berserk/SR +Berta/M +Berte/M +Bertha/M +Berthe/M +berth/MDGJ +berths +Bertie/M +Bertillon/M +Berti/M +Bertina/M +Bertine/M +Bert/M +Berton/M +Bertram/M +Bertrand/M +Bertrando/M +Berty/M +Beryle/M +beryllium/MS +Beryl/M +beryl/SM +Berzelius/M +bes +beseecher/M +beseeching/Y +beseech/RSJZG +beseem/GDS +beset/S +besetting +beside/S +besieger/M +besiege/SRDZG +besmear/GSD +besmirch/GSD +besom/GMDS +besot/S +besotted +besotting +besought +bespangle/GSD +bespatter/SGD +bespeak/SG +bespectacled +bespoke +bespoken +Bess +Bessel/M +Bessemer/M +Bessie/M +Bessy/M +best/DRSG +bestiality/MS +bestial/Y +bestiary/MS +bestirred +bestirring +bestir/S +Best/M +bestowal/SM +bestow/SGD +bestrew/DGS +bestrewn +bestridden +bestride/SG +bestrode +bestseller/MS +bestselling +bestubble/D +betaken +betake/SG +beta/SM +betatron/M +betcha +Betelgeuse/M +betel/MS +Bethanne/M +Bethany/M +bethel/M +Bethe/M +Bethena/M +Bethesda/M +Bethina/M +bethink/GS +Bethlehem/M +beth/M +Beth/M +bethought +Bethune +betide/GSD +betimes +bet/MS +betoken/GSD +betook +betrayal/SM +betrayer/M +betray/SRDZG +betrothal/SM +betrothed/U +betroth/GD +betroths +Betsey/M +Betsy/M +Betta/M +Betteanne/M +Betteann/M +Bette/M +betterment/MS +better/SDLG +Bettie/M +Betti/M +Bettina/M +Bettine/M +betting +bettor/SM +Bettye/M +Betty/SM +betweenness/M +between/SP +betwixt +Beulah/M +Bevan/M +bevel/SJGMRD +beverage/MS +Beverie/M +Beverlee/M +Beverley/M +Beverlie/M +Beverly/M +Bevin/M +Bevon/M +Bev's +Bevvy/M +bevy/SM +bewail/GDS +beware/GSD +bewhisker/D +bewigged +bewildered/PY +bewildering/Y +bewilder/LDSG +bewilderment/SM +bewitching/Y +bewitch/LGDS +bewitchment/SM +bey/MS +beyond/S +bezel/MS +bf +B/GT +Bhopal/M +Bhutanese +Bhutan/M +Bhutto/M +Bialystok/M +Bianca/M +Bianco/M +Bianka/M +biannual/Y +bias/DSMPG +biased/U +biathlon/MS +biaxial/Y +bibbed +Bibbie/M +bibbing +Bibbye/M +Bibby/M +Bibi/M +bible/MS +Bible/MS +biblical/Y +biblicists +bibliographer/MS +bibliographical/Y +bibliographic/S +bibliography/MS +bibliophile/MS +Bib/M +bib/MS +bibulous +bicameral +bicameralism/MS +bicarb/MS +bicarbonate/MS +bicentenary/S +bicentennial/S +bicep/S +biceps/M +bichromate/DM +bickerer/M +bickering/M +bicker/SRDZG +biconcave +biconnected +biconvex +bicuspid/S +bicycler/M +bicycle/RSDMZG +bicyclist/SM +biddable +bidden/U +bidder/MS +Biddie/M +bidding/MS +Biddle/M +Biddy/M +biddy/SM +bider/M +bide/S +bidet/SM +Bidget/M +bid/GMRS +bidiagonal +bidirectional/Y +bids/A +biennial/SY +biennium/SM +Bienville/M +Bierce/M +bier/M +bifocal/S +bifurcate/SDXGNY +bifurcation/M +bigamist/SM +bigamous +bigamy/SM +Bigelow/M +Bigfoot +bigged +bigger +biggest +biggie/SM +bigging +biggish +bighead/MS +bigheartedness/S +bighearted/P +bighorn/MS +bight/SMDG +bigmouth/M +bigmouths +bigness/SM +bigoted/Y +bigot/MDSG +bigotry/MS +big/PYS +bigwig/MS +biharmonic +bijection/MS +bijective/Y +bijou/M +bijoux +bike/MZGDRS +biker/M +bikini/SMD +Biko/M +bilabial/S +bilateralness/M +bilateral/PY +bilayer/S +Bilbao/M +bilberry/MS +Bilbo/M +bile/SM +bilge/GMDS +biliary +Bili/M +bilinear +bilingualism/SM +bilingual/SY +biliousness/SM +bilious/P +bilker/M +bilk/GZSDR +billboard/MDGS +biller/M +billet/MDGS +billfold/MS +billiard/SM +Billie/M +Billi/M +billing/M +billingsgate/SM +Billings/M +billionaire/MS +billion/SHM +billionths +bill/JGZSBMDR +Bill/JM +billow/DMGS +billowy/RT +billposters +Billye/M +Billy/M +billy/SM +Bil/MY +bi/M +Bi/M +bimbo/MS +bimetallic/S +bimetallism/MS +Bimini/M +bimodal +bimolecular/Y +bimonthly/S +binary/S +binaural/Y +binder/M +bindery/MS +binding/MPY +bindingness/M +bind/JDRGZS +bindle/M +binds/AU +bindweed/MS +binge/MS +bing/GNDM +Bingham/M +Binghamton/M +Bing/M +bingo/MS +Bini/M +Bink/M +Binky/M +binnacle/MS +binned +Binnie/M +Binni/M +binning +Binny/M +binocular/SY +binodal +binomial/SYM +bin/SM +binuclear +biochemical/SY +biochemist/MS +biochemistry/MS +biodegradability/S +biodegradable +biodiversity/S +bioengineering/M +bioethics +biofeedback/SM +biographer/M +biographic +biographical/Y +biograph/RZ +biography/MS +biog/S +Bioko/M +biol +biological/SY +biologic/S +biologist/SM +biology/MS +biomass/SM +biomedical +biomedicine/M +biometric/S +biometrics/M +biometry/M +biomolecule/S +biomorph +bionically +bionic/S +bionics/M +biophysical/Y +biophysicist/SM +biophysic/S +biophysics/M +biopic/S +biopsy/SDGM +biorhythm/S +BIOS +bioscience/S +biosphere/MS +biostatistic/S +biosynthesized +biotechnological +biotechnologist +biotechnology/SM +biotic +biotin/SM +bipartisan +bipartisanship/MS +bipartite/YN +bipartition/M +bipedal +biped/MS +biplane/MS +bipolar +bipolarity/MS +biracial +Birch/M +birch/MRSDNG +birdbath/M +birdbaths +birdbrain/SDM +birdcage/SM +birder/M +birdhouse/MS +birdieing +Birdie/M +birdie/MSD +birdlike +birdlime/MGDS +Bird/M +birdseed/MS +Birdseye/M +bird/SMDRGZ +birdsong +birdtables +birdwatch/GZR +birefringence/M +birefringent +biretta/SM +Birgit/M +Birgitta/M +Birkenstock/M +Birk/M +Birmingham/M +Biro/M +Biron/M +birthday/SM +birthmark/MS +birth/MDG +birthplace/SM +birthrate/MS +birthright/MS +birth's/A +births/A +birthstone/SM +bis +Biscay/M +Biscayne/M +biscuit/MS +bisect/DSG +bisection/MS +bisector/MS +biserial +bisexuality/MS +bisexual/YMS +Bishkek +bishop/DGSM +Bishop/M +bishopric/SM +Bismarck/M +Bismark/M +bismuth/M +bismuths +bison/M +bisque/SM +Bissau/M +bistable +bistate +bistro/SM +bisyllabic +bitblt/S +bitchily +bitchiness/MS +bitch/MSDG +bitchy/PTR +biter/M +bite/S +biting/Y +bitmap/SM +bit/MRJSZG +BITNET/M +bit's/C +bits/C +bitser/M +bitted +bitten +bitterness/SM +bittern/SM +bitternut/M +bitter/PSRDYTG +bitterroot/M +bittersweet/YMSP +bitting +bitty/PRT +bitumen/MS +bituminous +bitwise +bivalent/S +bivalve/MSD +bivariate +bivouacked +bivouacking +bivouac/MS +biweekly/S +biyearly +bizarreness/M +bizarre/YSP +Bizet/M +biz/M +bizzes +Bjorn/M +bk +b/KGD +Bk/M +blabbed +blabber/GMDS +blabbermouth/M +blabbermouths +blabbing +blab/S +blackamoor/SM +blackball/SDMG +blackberry/GMS +blackbirder/M +blackbird/SGDRM +blackboard/SM +blackbody/S +Blackburn/M +blackcurrant/M +blackener/M +blacken/GDR +Blackfeet +Blackfoot/M +blackguard/MDSG +blackhead/SM +blacking/M +blackish +blackjack/SGMD +blackleg/M +blacklist/DRMSG +blackmail/DRMGZS +blackmailer/M +Blackman/M +Blackmer/M +blackness/MS +blackout/SM +Blackpool/M +Black's +black/SJTXPYRDNG +blacksmith/MG +blacksmiths +blacksnake/MS +blackspot +Blackstone/M +blackthorn/MS +blacktop/MS +blacktopped +blacktopping +Blackwell/MS +bladder/MS +bladdernut/M +bladderwort/M +blade/DSGM +blah/MDG +blahs +Blaine/M +Blaire/M +Blair/M +Blakelee/M +Blakeley/M +Blake/M +Blakey/M +blame/DSRBGMZ +blamelessness/SM +blameless/YP +blamer/M +blameworthiness/SM +blameworthy/P +Blanca/M +Blancha/M +Blanchard/M +blanch/DRSG +Blanche/M +blancher/M +Blanch/M +blanc/M +blancmange/SM +blandishment/MS +blandish/SDGL +blandness/MS +bland/PYRT +Blane/M +Blankenship/M +blanketing/M +blanket/SDRMZG +blankness/MS +blank/SPGTYRD +Blanton/M +Blantyre/M +blare/DSG +blarney/DMGS +blas +blasphemer/M +blaspheme/RSDZG +blasphemousness/M +blasphemous/PY +blasphemy/SM +blaster/M +blasting/M +blastoff/SM +blast/SMRDGZ +blatancy/SM +blatant/YP +blather/DRGS +blatting +Blatz/M +Blavatsky/M +Blayne/M +blaze/DSRGMZ +blazer/M +blazing/Y +blazoner/M +blazon/SGDR +bl/D +bldg +bleach/DRSZG +bleached/U +bleacher/M +bleakness/MS +bleak/TPYRS +blear/GDS +blearily +bleariness/SM +bleary/PRT +bleater/M +bleat/RDGS +bleeder/M +bleed/ZRJSG +Bleeker/M +bleep/GMRDZS +blemish/DSMG +blemished/U +blench/DSG +blender/M +blend/GZRDS +Blenheim/M +blessedness/MS +blessed/PRYT +blessing/M +bless/JGSD +Blevins/M +blew +Bligh/M +blighter/M +blight/GSMDR +blimey/S +blimp/MS +blinded/U +blinder/M +blindfold/SDG +blinding/MY +blind/JGTZPYRDS +blindness/MS +blindside/SDG +blinker/MDG +blinking/U +blink/RDGSZ +blinks/M +Blinnie/M +Blinni/M +Blinny/M +blintze/M +blintz/SM +blip/MS +blipped +blipping +Blisse/M +blissfulness/MS +blissful/PY +Bliss/M +bliss/SDMG +blistering/Y +blister/SMDG +blistery +Blithe/M +blitheness/SM +blither/G +blithesome +blithe/TYPR +blitz/GSDM +blitzkrieg/SM +blizzard/MS +bloater/M +bloat/SRDGZ +blobbed +blobbing +blob/MS +Bloch/M +blockader/M +blockade/ZMGRSD +blockage/MS +blockbuster/SM +blockbusting/MS +blocker/MS +blockhead/MS +blockhouse/SM +block's +block/USDG +blocky/R +bloc/MS +Bloemfontein/M +bloke/SM +Blomberg/M +Blomquist/M +Blondelle/M +Blondell/M +blonde's +Blondie/M +blondish +blondness/MS +blond/SPMRT +Blondy/M +bloodbath +bloodbaths +bloodcurdling +bloodhound/SM +bloodied/U +bloodiness/MS +bloodlessness/SM +bloodless/PY +bloodletting/MS +bloodline/SM +bloodmobile/MS +bloodroot/M +bloodshed/SM +bloodshot +blood/SMDG +bloodsport/S +bloodstain/MDS +bloodstock/SM +bloodstone/M +bloodstream/SM +bloodsucker/SM +bloodsucking/S +bloodthirstily +bloodthirstiness/MS +bloodthirsty/RTP +bloodworm/M +bloodymindedness +bloody/TPGDRS +bloomer/M +Bloomer/M +Bloomfield/M +Bloomington/M +Bloom/MR +bloom/SMRDGZ +blooper/M +bloop/GSZRD +blossom/DMGS +blossomy +blotch/GMDS +blotchy/RT +blot/MS +blotted +blotter/MS +blotting +blotto +blouse/GMSD +blower/M +blowfish/M +blowfly/MS +blowgun/SM +blow/GZRS +blowing/M +blown/U +blowout/MS +blowpipe/SM +blowtorch/SM +blowup/MS +blowy/RST +blowzy/RT +BLT +blubber/GSDR +blubbery +Blucher/M +bludgeon/GSMD +blueback +Bluebeard/M +bluebell/MS +blueberry/SM +bluebill/M +bluebird/MS +bluebonnet/SM +bluebook/M +bluebottle/MS +bluebush +bluefish/SM +bluegill/SM +bluegrass/MS +blueing's +blueish +bluejacket/MS +bluejeans +blue/JMYTGDRSP +blueness/MS +bluenose/MS +bluepoint/SM +blueprint/GDMS +bluer/M +bluest/M +bluestocking/SM +bluesy/TR +bluet/MS +bluffer/M +bluffness/MS +bluff/SPGTZYRD +bluing/M +bluishness/M +bluish/P +Blumenthal/M +Blum/M +blunderbuss/MS +blunderer/M +blunder/GSMDRJZ +blundering/Y +bluntness/MS +blunt/PSGTYRD +blurb/GSDM +blur/MS +blurred/Y +blurriness/S +blurring/Y +blurry/RPT +blurt/GSRD +blusher/M +blushing/UY +blush/RSDGZ +blusterer/M +blustering/Y +blusterous +bluster/SDRZG +blustery +blvd +Blvd +Blythe/M +BM +BMW/M +BO +boarded +boarder/SM +boardgames +boardinghouse/SM +boarding/SM +board/IS +boardroom/MS +board's +boardwalk/SM +boar/MS +boa/SM +boaster/M +boastfulness/MS +boastful/YP +boast/SJRDGZ +boatclubs +boater/M +boathouse/SM +boating/M +boatload/SM +boatman/M +boat/MDRGZJS +boatmen +boatswain/SM +boatyard/SM +bobbed +Bobbee/M +Bobbe/M +Bobbette/M +Bobbie/M +Bobbi/M +bobbing/M +bobbin/MS +Bobbitt/M +bobble/SDGM +Bobbsey/M +Bobbye/M +Bobby/M +bobby/SM +bobbysoxer's +bobcat/MS +Bobette/M +Bobina/M +Bobine/M +Bobinette/M +Bob/M +bobolink/SM +Bobrow/M +bobsledded +bobsledder/MS +bobsledding/M +bobsled/MS +bobsleigh/M +bobsleighs +bobs/M +bob/SM +bobtail/SGDM +bobwhite/SM +Boca/M +Boccaccio/M +boccie/SM +bock/GDS +bockwurst +bodega/MS +Bodenheim/M +bode/S +Bodhidharma/M +bodhisattva +Bodhisattva/M +bodice/SM +bodied/M +bodiless +bodily +boding/M +bodkin/SM +bod/SGMD +bodybuilder/SM +bodybuilding/S +body/DSMG +bodyguard/MS +bodying/M +bodysuit/S +bodyweight +bodywork/SM +Boeing/M +Boeotia/M +Boeotian +Boer/M +Bogartian/M +Bogart/M +Bogey/M +bogeyman/M +bogeymen +bogey/SGMD +bogged +bogging +boggle/SDG +boggling/Y +boggy/RT +bogie's +bog/MS +Bogot/M +bogus +bogyman +bogymen +bogy's +Boheme/M +bohemianism/S +bohemian/S +Bohemian/SM +Bohemia/SM +Bohr/M +Boigie/M +boiled/AU +boiler/M +boilermaker/MS +boilerplate/SM +boil/JSGZDR +boils/A +Boise/M +Bois/M +boisterousness/MS +boisterous/YP +bola/SM +boldface/SDMG +boldness/MS +bold/YRPST +bole/MS +bolero/MS +Boleyn/M +bolivares +Bolivar/M +bolivar/MS +Bolivia/M +Bolivian/S +bollard/SM +bollix/GSD +boll/MDSG +Bologna/M +bologna/MS +bolometer/MS +bolo/MS +boloney's +Bolshevik/MS +Bolshevism/MS +Bolshevistic/M +Bolshevist/MS +Bolshoi/M +bolsterer/M +bolster/SRDG +bolted/U +bolter/M +bolt/MDRGS +Bolton/M +bolts/U +Boltzmann/M +bolus/SM +bombardier/MS +bombard/LDSG +bombardment/SM +bombastic +bombastically +bombast/RMS +Bombay/M +bomber/M +bombproof +bomb/SGZDRJ +bombshell/SM +Bo/MRZ +bona +bonanza/MS +Bonaparte/M +Bonaventure/M +bonbon/SM +bondage/SM +bonder/M +bondholder/SM +Bondie/M +bond/JMDRSGZ +Bond/M +bondman/M +bondmen +Bondon/M +bonds/A +bondsman/M +bondsmen +bondwoman/M +bondwomen +Bondy/M +boned/U +bonehead/SDM +boneless +Bone/M +bone/MZDRSG +boner/M +bonfire/MS +bong/GDMS +bongo/MS +Bonham/M +bonhomie/MS +Boniface/M +boniness/MS +Bonita/M +bonito/MS +bonjour +bonkers +Bonnee/M +Bonner/M +bonneted/U +bonnet/SGMD +Bonneville/M +Bonnibelle/M +bonnie +Bonnie/M +Bonni/M +Bonn/RM +Bonny/M +bonny/RT +bonsai/SM +Bontempo/M +bonus/SM +bony/RTP +bonzes +boob/DMSG +booby/SM +boodle/GMSD +boogeyman's +boogieing +boogie/SD +boo/GSDH +boohoo/GDS +bookbinder/M +bookbindery/SM +bookbinding/M +bookbind/JRGZ +bookcase/MS +booked/U +bookend/SGD +Booker/M +book/GZDRMJSB +bookie/SM +booking/M +bookishness/M +bookish/PY +bookkeeper/M +bookkeep/GZJR +bookkeeping/M +booklet/MS +bookmaker/MS +bookmaking/MS +bookmark/MDGS +bookmobile/MS +bookplate/SM +bookseller/SM +bookshelf/M +bookshelves +bookshop/MS +bookstall/MS +bookstore/SM +bookwork/M +bookworm/MS +Boolean +boolean/S +Boole/M +boom/DRGJS +boomerang/MDSG +boomer/M +boomtown/S +boondocks +boondoggle/DRSGZ +boondoggler/M +Boone/M +Boonie/M +boonies +boon/MS +Boony/M +boorishness/SM +boorish/PY +boor/MS +boosterism +booster/M +boost/SGZMRD +boot/AGDS +bootblack/MS +bootee/MS +Boote/M +Botes +Boothe/M +booth/M +Booth/M +booths +bootie's +bootlaces +bootlegged/M +bootlegger/SM +bootlegging/M +bootleg/S +Bootle/M +bootless +Boot/M +bootprints +boot's +bootstrapped +bootstrapping +bootstrap/SM +booty/SM +booze/DSRGMZ +boozer/M +boozy/TR +bopped +bopping +bop/S +borate/MSD +borax/MS +Bordeaux/M +bordello/MS +Borden/M +borderer/M +border/JRDMGS +borderland/SM +borderline/MS +Bordie/M +Bord/MN +Bordon/M +Bordy/M +Borealis/M +Boreas/M +boredom/MS +boreholes +borer/M +bore/ZGJDRS +Borges +Borgia/M +Borg/M +boric +boring/YMP +Boris +Bork/M +born/AIU +Borneo/M +borne/U +Born/M +Borodin/M +boron/SM +borosilicate/M +borough/M +boroughs +Borroughs/M +borrower/M +borrowing/M +borrow/JZRDGBS +borscht/SM +borstal/MS +Boru/M +borzoi/MS +Bosch/M +Bose/M +bosh/MS +Bosnia/M +Bosnian/S +bosom's +bosom/SGUD +bosomy/RT +boson/SM +Bosporus/M +boss/DSRMG +bossily +bossiness/MS +bossism/MS +bossy/PTSR +Bostitch/M +Bostonian/SM +Boston/MS +bosun's +Boswell/MS +botanical/SY +botanic/S +botanist/SM +botany/SM +botcher/M +botch/SRDGZ +botfly/M +bother/DG +bothersome +bothy/M +both/ZR +bot/S +Botswana/M +Botticelli/M +bottle/GMZSRD +bottleneck/GSDM +bottler/M +bottomlessness/M +bottomless/YP +bottommost +bottom/SMRDG +botulin/M +botulinus/M +botulism/SM +Boucher/M +boudoir/MS +bouffant/S +bougainvillea/SM +bough/MD +boughs +bought/N +bouillabaisse/MS +bouillon/MS +boulder/GMDS +Boulder/M +boulevard/MS +bouncer/M +bounce/SRDGZ +bouncily +bouncing/Y +bouncy/TRP +boundary/MS +bound/AUDI +boundedness/MU +bounded/UP +bounden +bounder/AM +bounders +bounding +boundlessness/SM +boundless/YP +bounds/IA +bounteousness/MS +bounteous/PY +bountifulness/SM +bountiful/PY +bounty/SDM +bouquet/SM +Bourbaki/M +bourbon/SM +Bourbon/SM +bourgeoisie/SM +bourgeois/M +Bourke/M +Bourne/M +Bournemouth/M +boutique/MS +bout/MS +boutonnire/MS +Bouvier +Bovary/M +bovine/YS +Bowditch/M +bowdlerization/MS +bowdlerize/GRSD +bowed/U +bowel/GMDS +Bowell/M +Bowen/M +bower/DMG +Bowers +Bowery/M +Bowes +bowie +Bowie/M +bowing/M +bowlder's +bowlegged +bowleg/SM +bowler/M +bowlful/S +bowl/GZSMDR +bowline/MS +bowling/M +bowman/M +Bowman/M +bowmen +bowser/M +bowsprit/SM +bows/R +bowstring/GSMD +bow/SZGNDR +bowwow/DMGS +boxcar/SM +box/DRSJZGM +boxer/M +boxful/M +boxing/M +boxlike +boxtops +boxwood/SM +boxy/TPR +Boyce/M +Boycey/M +Boycie/M +boycotter/M +boycott/RDGS +Boyd/M +Boyer/M +boyfriend/MS +boyhood/SM +boyishness/MS +boyish/PY +Boyle/M +Boy/MR +boy/MRS +boyscout +boysenberry/SM +bozo/SM +bpi +bps +BR +brace/DSRJGM +braced/U +bracelet/MS +bracer/M +brachia +brachium/M +bracken/SM +bracketed/U +bracketing/M +bracket/SGMD +brackishness/SM +brackish/P +bract/SM +Bradan/M +bradawl/M +Bradbury/M +Bradburys +bradded +bradding +Braddock/M +Brade/M +Braden/M +Bradford/M +Bradley/M +Bradly/M +Brad/MYN +Bradney/M +Bradshaw/M +brad/SM +Bradstreet/M +Brady/M +brae/SM +braggadocio/SM +braggart/SM +bragged +bragger/MS +braggest +bragging +Bragg/M +brag/S +Brahe/M +Brahma/MS +Brahmanism/MS +Brahman/SM +Brahmaputra/M +Brahmin's +Brahms +braider/M +braiding/M +braid/RDSJG +braille/DSG +Braille/GDSM +Brainard/SM +braincell/S +brainchild/M +brainchildren +brain/GSDM +braininess/MS +brainlessness/M +brainless/YP +Brain/M +brainpower/M +brainstorm/DRMGJS +brainstorming/M +brainteaser/S +brainteasing +brainwasher/M +brainwashing/M +brainwash/JGRSD +brainwave/S +brainy/RPT +braise/SDG +brake/DSGM +brakeman/M +brakemen/M +bramble/DSGM +brambling/M +brambly/RT +Bram/M +Brampton/M +bra/MS +Brana/M +branched/U +branching/M +branchlike +Branch/M +branch/MDSJG +Branchville/M +Brandais/M +Brandea/M +branded/U +Brandeis/M +Brandel/M +Brande/M +Brandenburg/M +Branden/M +brander/GDM +Brander/M +Brandice/M +Brandie/M +Brandi/M +Brandise/M +brandish/GSD +Brand/MRN +Brando/M +Brandon/M +brand/SMRDGZ +Brandt/M +Brandtr/M +brandy/GDSM +Brandy/M +Brandyn/M +brandywine +Braniff/M +Bran/M +branned +branning +Brannon/M +bran/SM +Brantley/M +Brant/M +Braque/M +brashness/MS +brash/PYSRT +Brasilia +brasserie/SM +brass/GSDM +brassiere/MS +brassily +brassiness/SM +brassy/RSPT +Bratislava/M +brat/SM +Brattain/M +bratty/RT +bratwurst/MS +Braun/M +bravadoes +bravado/M +brave/DSRGYTP +braveness/MS +bravery/MS +bravest/M +bravo/SDG +bravura/SM +brawler/M +brawl/MRDSGZ +brawniness/SM +brawn/MS +brawny/TRP +brayer/M +Bray/M +bray/SDRG +braze/GZDSR +brazenness/MS +brazen/PYDSG +brazer/M +brazier/SM +Brazilian/MS +Brazil/M +Brazos/M +Brazzaville/M +breacher/M +breach/MDRSGZ +breadbasket/SM +breadboard/SMDG +breadbox/S +breadcrumb/S +breadfruit/MS +breadline/MS +bread/SMDHG +breadth/M +breadths +breadwinner/MS +breakables +breakable/U +breakage/MS +breakaway/MS +breakdown/MS +breaker/M +breakfaster/M +breakfast/RDMGZS +breakfront/S +breaking/M +breakneck +breakout/MS +breakpoint/SMDG +break/SZRBG +breakthroughs +breakthrough/SM +breakup/SM +breakwater/SM +bream/SDG +Breanne/M +Brear/M +breastbone/MS +breastfed +breastfeed/G +breasting/M +breast/MDSG +breastplate/SM +breaststroke/SM +breastwork/MS +breathable/U +breathalyser/S +Breathalyzer/SM +breathe +breather/M +breathing/M +breathlessness/SM +breathless/PY +breaths +breathtaking/Y +breathy/TR +breath/ZBJMDRSG +Brecht/M +Breckenridge/M +bred/DG +bredes +breeching/M +breech/MDSG +breeder/I +breeder's +breeding/IM +breeds/I +breed/SZJRG +Bree/M +Breena/M +breeze/GMSD +breezeway/SM +breezily +breeziness/SM +breezy/RPT +Bremen/M +bremsstrahlung/M +Brena/M +Brenda/M +Brendan/M +Brenden/M +Brendin/M +Brendis/M +Brendon/M +Bren/M +Brenna/M +Brennan/M +Brennen/M +Brenner/M +Brenn/RNM +Brent/M +Brenton/M +Bresenham/M +Brest/M +brethren +Bret/M +Breton +Brett/M +breve/SM +brevet/MS +brevetted +brevetting +breviary/SM +brevity/MS +brew/DRGZS +brewer/M +Brewer/M +brewery/MS +brewing/M +brewpub/S +Brew/RM +Brewster/M +Brezhnev/M +Bria/M +Briana/M +Brian/M +Brianna/M +Brianne/M +Briano/M +Briant/M +briar's +bribe/GZDSR +briber/M +bribery/MS +Brice/M +brickbat/SM +brick/GRDSM +bricklayer/MS +bricklaying/SM +brickmason/S +brickwork/SM +brickyard/M +bridal/S +Bridalveil/M +bridegroom/MS +Bride/M +bride/MS +bridesmaid/MS +Bridewell/M +bridgeable/U +bridged/U +bridgehead/MS +Bridgeport/M +Bridger/M +Bridges +bridge/SDGM +Bridget/M +Bridgetown/M +Bridgette/M +Bridgett/M +Bridgewater/M +bridgework/MS +bridging/M +Bridgman/M +Bridie/M +bridled/U +bridle/SDGM +bridleway/S +briefcase/SM +briefed/C +briefing/M +briefness/MS +briefs/C +brief/YRDJPGTS +Brien/M +Brier/M +brier/MS +Brie/RSM +Brietta/M +brigade/GDSM +brigadier/MS +Brigadoon +brigandage/MS +brigand/MS +brigantine/MS +Brigg/MS +Brigham/M +brightener/M +brighten/RDZG +bright/GXTPSYNR +Bright/M +brightness/SM +Brighton/M +Brigida/M +Brigid/M +Brigit/M +Brigitta/M +Brigitte/M +Brig/M +brig/SM +brilliance/MS +brilliancy/MS +brilliantine/MS +brilliantness/M +brilliant/PSY +Brillo +Brillouin/M +brimful +brimless +brimmed +brimming +brim/SM +brimstone/MS +Brina/M +Brindisi/M +brindle/DSM +brine/GMDSR +briner/M +Briney/M +bringer/M +bring/RGZS +brininess/MS +Brinkley/M +brinkmanship/SM +brink/MS +Brinna/M +Brinn/M +Briny/M +briny/PTSR +brioche/SM +Brion/M +briquet's +briquette/MGSD +Brisbane/M +brisket/SM +briskness/MS +brisk/YRDPGTS +bristle/DSGM +bristly/TR +Bristol/M +bristol/S +Britain/M +Brita/M +Britannia/M +Britannic +Britannica/M +britches +Briticism/MS +Britisher/M +Britishly/M +British/RYZ +Brit/MS +Britney/M +Britni/M +Briton/MS +Britta/M +Brittaney/M +Brittani/M +Brittan/M +Brittany/MS +Britte/M +Britten/M +Britteny/M +brittleness/MS +brittle/YTPDRSG +Britt/MN +Brittne/M +Brittney/M +Brittni/M +Brnaba/M +Brnaby/M +Brno/M +broach/DRSG +broacher/M +broadband +broadcaster/M +broadcast/RSGZJ +broadcasts/A +broadcloth/M +broadcloths +broaden/JGRDZ +broadleaved +broadloom/SM +broadminded/P +broadness/S +broadsheet/MS +broadside/SDGM +broadsword/MS +broad/TXSYRNP +Broadway/SM +Brobdingnagian +Brobdingnag/M +brocade/DSGM +broccoli/MS +brochette/SM +brochure/SM +Brockie/M +Brock/M +Brocky/M +Broddie/M +Broddy/M +Broderick/M +Broderic/M +Brodie/M +Brod/M +Brody/M +brogan/MS +Broglie/M +brogue/MS +broiler/M +broil/RDSGZ +brokenhearted/Y +brokenness/MS +broken/YP +brokerage/MS +broker/DMG +broke/RGZ +Brok/M +bromide/MS +bromidic +bromine/MS +bronchial +bronchi/M +bronchiolar +bronchiole/MS +bronchiolitis +bronchitic/S +bronchitis/MS +broncho's +bronchus/M +broncobuster/SM +bronco/SM +bronc/S +Bron/M +Bronnie/M +Bronny/M +Bronson/M +Bronte +brontosaur/SM +brontosaurus/SM +Bronx/M +bronzed/M +bronze/SRDGM +bronzing/M +brooch/MS +brooder/M +broodiness/M +brooding/Y +broodmare/SM +brood/SMRDGZ +broody/PTR +Brookdale/M +Brooke/M +Brookfield/M +Brookhaven/M +brooklet/MS +Brooklyn/M +Brookmont/M +brook/SGDM +brookside +Brook/SM +broom/SMDG +broomstick/MS +Bros +Brose/M +bro/SH +bros/S +brothel/MS +brother/DYMG +brotherhood/SM +brotherliness/MS +brotherly/P +broths +broth/ZMR +brougham/MS +brought +brouhaha/MS +browbeat/NSG +brow/MS +Brownell/M +Browne/M +Brownian/M +Brownie/MS +brownie/MTRS +browning/M +Browning/M +brownish +Brown/MG +brownness/MS +brownout/MS +brownstone/MS +Brownsville/M +brown/YRDMSJGTP +browse +browser/M +brows/SRDGZ +brr +Br/TMN +Brubeck/M +brucellosis/M +Bruce/M +Brucie/M +Bruckner/M +Bruegel/M +Brueghel's +bruin/MS +bruised/U +bruise/JGSRDZ +bruiser/M +Bruis/M +bruit/DSG +Brumidi/M +Brummel/M +brunch/MDSG +Brunei/M +Brunelleschi/M +brunet/S +brunette/SM +Brunhilda/M +Brunhilde/M +Bruno/M +Brunswick/M +brunt/GSMD +brusher/M +brushfire/MS +brushlike +brush/MSRDG +brushoff/S +brushwood/SM +brushwork/MS +brushy/R +brusqueness/MS +brusque/PYTR +Brussels +brutality/SM +brutalization/SM +brutalized/U +brutalizes/AU +brutalize/SDG +brutal/Y +brute/DSRGM +brutishness/SM +brutish/YP +Brutus/M +Bruxelles/M +Bryana/M +Bryan/M +Bryant/M +Bryanty/M +Bryce/M +Bryna/M +Bryn/M +Brynna/M +Brynne/M +Brynner/M +Brynn/RM +Bryon/M +Brzezinski/M +B's +BS +BSA +BSD +Btu +BTU +BTW +bu +bubblegum/S +bubbler/M +bubble/RSDGM +bubbly/TRS +Buber/M +bub/MS +buboes +bubo/M +bubonic +buccaneer/GMDS +Buchanan/M +Bucharest/M +Buchenwald/M +Buchwald/M +buckaroo/SM +buckboard/SM +bucker/M +bucketful/MS +bucket/SGMD +buckeye/SM +buck/GSDRM +buckhorn/M +Buckie/M +Buckingham/M +buckled/U +buckler/MDG +buckle/RSDGMZ +buckles/U +Buckley/M +buckling's +buckling/U +Buck/M +Buckner/M +buckram/GSDM +bucksaw/SM +buckshot/MS +buckskin/SM +buckteeth +bucktooth/DM +buckwheat/SM +Bucky/M +bucolically +bucolic/S +Budapest/M +budded +Buddha/MS +Buddhism/SM +Buddhist/SM +Buddie/M +budding/S +Budd/M +buddy/GSDM +Buddy/M +budge/GDS +budgerigar/MS +budgetary +budgeter/M +budget/GMRDZS +budgie/MS +budging/U +Bud/M +bud/MS +Budweiser/MS +Buehring/M +Buena/M +buffaloes +Buffalo/M +buffalo/MDG +buff/ASGD +buffered/U +bufferer/M +buffer/RDMSGZ +buffet/GMDJS +bufflehead/M +buffoonery/MS +buffoonish +buffoon/SM +buff's +Buffy/M +Buford/M +bugaboo/SM +Bugatti/M +bugbear/SM +bug/CS +bugeyed +bugged/C +buggered +buggering +bugger/SCM! +buggery/M +bugging/C +buggy/RSMT +bugle/GMDSRZ +bugler/M +bug's +Buick/M +builder/SM +building/SM +build/SAG +buildup/MS +built/AUI +Buiron/M +Bujumbura/M +Bukhara/M +Bukharin/M +Bulawayo/M +Bulba/M +bulb/DMGS +bulblet +bulbous +Bulfinch/M +Bulganin/M +Bulgaria/M +Bulgarian/S +bulge/DSGM +bulgy/RT +bulimarexia/S +bulimia/MS +bulimic/S +bulk/GDRMS +bulkhead/SDM +bulkiness/SM +bulky/RPT +bulldogged +bulldogger +bulldogging +bulldog/SM +bulldoze/GRSDZ +bulldozer/M +bullet/GMDS +bulletin/SGMD +bulletproof/SGD +bullfighter/M +bullfighting/M +bullfight/SJGZMR +bullfinch/MS +bullfrog/SM +bullhead/DMS +bullheadedness/SM +bullheaded/YP +bullhide +bullhorn/SM +bullied/M +bullion/SM +bullishness/SM +bullish/PY +bull/MDGS +Bullock/M +bullock/MS +bullpen/MS +bullring/SM +bullseye +bullshit/MS! +bullshitted/! +bullshitter/S! +bullshitting/! +bullwhackers +Bullwinkle/M +bullyboy/MS +bullying/M +bully/TRSDGM +bulrush/SM +Bultmann/M +bulwark/GMDS +bumblebee/MS +bumble/JGZRSD +bumbler/M +bumbling/Y +Bumbry/M +bummed/M +bummer/MS +bummest +bumming/M +bumper/DMG +bump/GZDRS +bumpiness/MS +bumpkin/MS +Bumppo/M +bumptiousness/SM +bumptious/PY +bumpy/PRT +bum/SM +Bunche/M +bunch/MSDG +bunchy/RT +buncombe's +bunco's +Bundestag/M +bundled/U +bundle/GMRSD +bundler/M +Bundy/M +bungalow/MS +bungee/SM +bung/GDMS +bunghole/MS +bungle/GZRSD +bungler/M +bungling/Y +Bunin/M +bunion/SM +bunk/CSGDR +Bunker/M +bunker's/C +bunker/SDMG +bunkhouse/SM +bunkmate/MS +bunko's +bunk's +bunkum/SM +Bunnie/M +Bunni/M +Bunny/M +bunny/SM +Bunsen/SM +bun/SM +bunt/GJZDRS +bunting/M +Buuel/M +Bunyan/M +buoyancy/MS +buoyant/Y +buoy/SMDG +Burbank/M +burbler/M +burble/RSDG +burbs +Burch/M +burden's +burdensomeness/M +burdensome/PY +burden/UGDS +burdock/SM +bureaucracy/MS +bureaucratically +bureaucratic/U +bureaucratization/MS +bureaucratize/SDG +bureaucrat/MS +bureau/MS +burgeon/GDS +burger/M +Burger/M +Burgess/M +burgess/MS +burgher/M +burgh/MRZ +burghs +burglarize/GDS +burglarproof/DGS +burglar/SM +burglary/MS +burgle/SDG +burgomaster/SM +Burgoyne/M +Burg/RM +burg/SZRM +Burgundian/S +Burgundy/MS +burgundy/S +burial/ASM +buried/U +burier/M +Burke/M +Burk/SM +burlap/MS +burler/M +burlesquer/M +burlesque/SRDMYG +burley/M +Burlie/M +burliness/SM +Burlingame/M +Burlington/M +Burl/M +burl/SMDRG +burly/PRT +Burma/M +Burmese +bur/MYS +burnable/S +Burnaby/M +Burnard/M +burned/U +Burne/MS +burner/M +Burnett/M +burn/GZSDRBJ +burning/Y +burnisher/M +burnish/GDRSZ +burnoose/MS +burnout/MS +Burns +Burnside/MS +burnt/YP +burp/SGMD +burr/GSDRM +Burris/M +burrito/S +Burr/M +burro/SM +Burroughs/M +burrower/M +burrow/GRDMZS +bursae +bursa/M +Bursa/M +bursar/MS +bursary/MS +bursitis/MS +burster/M +burst/SRG +Burtie/M +Burt/M +Burton/M +Burty/M +Burundian/S +Burundi/M +bury/ASDG +busboy/MS +busby/SM +Busch/M +buses/A +busgirl/S +bus/GMDSJ +bushel/MDJSG +Bushido/M +bushiness/MS +bushing/M +bush/JMDSRG +bushland +Bush/M +bushman/M +bushmaster/SM +bushmen +Bushnell/M +bushwhacker/M +bushwhacking/M +bushwhack/RDGSZ +bushy/PTR +busily +businesslike +businessman/M +businessmen +business/MS +businesspeople +businessperson/S +businesswoman/M +businesswomen +busker/M +busk/GRM +buskin/SM +bus's/A +buss/D +bustard/MS +buster/M +bustle/GSD +bustling/Y +bust/MSDRGZ +busty/RT +busybody/MS +busy/DSRPTG +busyness/MS +busywork/SM +but/ACS +butane/MS +butcherer/M +butcher/MDRYG +butchery/MS +Butch/M +butch/RSZ +butene/M +Butler/M +butler/SDMG +butted/A +butte/MS +butterball/MS +buttercup/SM +buttered/U +butterfat/MS +Butterfield/M +butterfingered +butterfingers/M +butterfly/MGSD +buttermilk/MS +butternut/MS +butter/RDMGZ +butterscotch/SM +buttery/TRS +butting/M +buttock/SGMD +buttoner/M +buttonhole/GMRSD +buttonholer/M +button's +button/SUDG +buttonweed +buttonwood/SM +buttress/MSDG +butt/SGZMDR +butyl/M +butyrate/M +buxomness/M +buxom/TPYR +Buxtehude/M +buyback/S +buyer/M +buyout/S +buy/ZGRS +buzzard/MS +buzz/DSRMGZ +buzzer/M +buzzword/SM +buzzy +bx +bxs +byelaw's +Byelorussia's +bye/MZS +Byers/M +bygone/S +bylaw/SM +byliner/M +byline/RSDGM +BYOB +bypass/GSDM +bypath/M +bypaths +byplay/S +byproduct/SM +Byram/M +Byran/M +Byrann/M +Byrd/M +byre/SM +Byrle/M +Byrne/M +byroad/MS +Byrom/M +Byronic +Byronism/M +Byron/M +bystander/SM +byte/SM +byway/SM +byword/SM +byzantine +Byzantine/S +Byzantium/M +by/ZR +C +ca +CA +cabala/MS +caballed +caballero/SM +caballing +cabal/SM +cabana/MS +cabaret/SM +cabbage/MGSD +cabbed +cabbing +cabby's +cabdriver/SM +caber/M +Cabernet/M +cabinetmaker/SM +cabinetmaking/MS +cabinet/MS +cabinetry/SM +cabinetwork/MS +cabin/GDMS +cablecast/SG +cable/GMDS +cablegram/SM +cabochon/MS +caboodle/SM +caboose/MS +Cabot/M +Cabrera/M +Cabrini/M +cabriolet/MS +cab/SMR +cabstand/MS +cacao/SM +cacciatore +cache/DSRGM +cachepot/MS +cachet/MDGS +Cacilia/M +Cacilie/M +cackler/M +cackle/RSDGZ +cackly +CACM +cacophonist +cacophonous +cacophony/SM +cacti +cactus/M +CAD +cadaverous/Y +cadaver/SM +caddishness/SM +caddish/PY +Caddric/M +caddy/GSDM +cadence/CSM +cadenced +cadencing +cadent/C +cadenza/MS +cadet/SM +Cadette/S +cadge/DSRGZ +cadger/M +Cadillac/MS +Cadiz/M +Cad/M +cadmium/MS +cadre/SM +cad/SM +caducei +caduceus/M +Caedmon/M +Caesar/MS +caesura/SM +caf/MS +cafeteria/SM +caffeine/SM +caftan/SM +caged/U +Cage/M +cage/MZGDRS +cager/M +cagey/P +cagier +cagiest +cagily +caginess/MS +Cagney/M +Cahokia/M +cahoot/MS +Cahra/M +CAI +Caiaphas/M +caiman's +Caine/M +Cain/MS +Cairistiona/M +cairn/SDM +Cairo/M +caisson/SM +caitiff/MS +Caitlin/M +Caitrin/M +cajole/LGZRSD +cajolement/MS +cajoler/M +cajolery/SM +Cajun/MS +cake/MGDS +cakewalk/SMDG +calabash/SM +calaboose/MS +Calais/M +calamari/S +calamine/GSDM +calamitousness/M +calamitous/YP +calamity/MS +cal/C +calcareousness/M +calcareous/PY +calciferous +calcification/M +calcify/XGNSD +calcimine/GMSD +calcine/SDG +calcite/SM +calcium/SM +Calcomp/M +CalComp/M +CALCOMP/M +calculability/IM +calculable/IP +calculate/AXNGDS +calculated/PY +calculatingly +calculating/U +calculation/AM +calculative +calculator/SM +calculi +calculus/M +Calcutta/M +caldera/SM +Calder/M +Calderon/M +caldron's +Caldwell/M +Caleb/M +Caledonia/M +Cale/M +calendar/MDGS +calender/MDGS +calf/M +calfskin/SM +Calgary/M +Calhoun/M +Caliban/M +caliber/SM +calibrated/U +calibrater's +calibrate/XNGSD +calibrating/A +calibration/M +calibrator/MS +calicoes +calico/M +Calida/M +Calif/M +California/M +Californian/MS +californium/SM +calif's +Caligula/M +Cali/M +caliper/SDMG +caliphate/SM +caliph/M +caliphs +calisthenic/S +calisthenics/M +Callaghan/M +call/AGRDBS +Callahan/M +calla/MS +Calla/MS +Callao/M +callback/S +Callean/M +called/U +callee/M +caller/MS +Calley/M +Callida/M +Callie/M +calligrapher/M +calligraphic +calligraphist/MS +calligraph/RZ +calligraphy/MS +Calli/M +calling/SM +Calliope/M +calliope/SM +callisthenics's +Callisto/M +callosity/MS +callousness/SM +callous/PGSDY +callowness/MS +callow/RTSP +callus/SDMG +Cally/M +calming/Y +calmness/MS +calm/PGTYDRS +Cal/MY +Caloocan/M +caloric/S +calorie/SM +calorific +calorimeter/MS +calorimetric +calorimetry/M +Caltech/M +Calumet/M +calumet/MS +calumniate/NGSDX +calumniation/M +calumniator/SM +calumnious +calumny/MS +calvary/M +Calvary/M +calve/GDS +Calvert/M +calves/M +Calvinism/MS +Calvinistic +Calvinist/MS +Calvin/M +Calv/M +calyces's +Calypso/M +calypso/SM +calyx/MS +Ca/M +CAM +Camacho/M +Camala/M +camaraderie/SM +camber/DMSG +cambial +cambium/SM +Cambodia/M +Cambodian/S +Cambrian/S +cambric/MS +Cambridge/M +camcorder/S +Camden/M +camelhair's +Camella/M +Camellia/M +camellia/MS +Camel/M +Camelopardalis/M +Camelot/M +camel/SM +Camembert/MS +cameo/GSDM +camerae +cameraman/M +cameramen +camera/MS +camerawoman +camerawomen +Cameron/M +Cameroonian/S +Cameroon/SM +came/N +Camey/M +Camila/M +Camile/M +Camilla/M +Camille/M +Cami/M +Camino/M +camion/M +camisole/MS +Cam/M +cammed +Cammie/M +Cammi/M +cam/MS +Cammy/M +Camoens/M +camomile's +camouflage/DRSGZM +camouflager/M +campaigner/M +campaign/ZMRDSG +campanile/SM +campanological +campanologist/SM +campanology/MS +Campbell/M +Campbellsport/M +camper/SM +campesinos +campest +campfire/SM +campground/MS +camphor/MS +Campinas/M +camping/S +Campos +camp's +camp/SCGD +campsite/MS +campus/GSDM +campy/RT +Camry/M +camshaft/SM +Camus/M +Canaanite/SM +Canaan/M +Canada/M +Canadianism/SM +Canadian/S +Canad/M +Canaletto/M +canalization/MS +canalize/GSD +canal/SGMD +canap/S +canard/MS +Canaries +canary/SM +canasta/SM +Canaveral/M +Canberra/M +cancan/SM +cancelate/D +canceled/U +canceler/M +cancellation/MS +cancel/RDZGS +cancer/MS +Cancer/MS +cancerous/Y +Cancun/M +Candace/M +candelabra/S +candelabrum/M +Candice/M +candidacy/MS +Candida/M +candidate/SM +candidature/S +Candide/M +candidly/U +candidness/SM +candid/TRYPS +Candie/M +Candi/SM +candle/GMZRSD +candlelight/SMR +candlelit +candlepower/SM +candler/M +candlestick/SM +Candlewick/M +candlewick/MS +candor/MS +Candra/M +candy/GSDM +Candy/M +canebrake/SM +caner/M +cane/SM +canine/S +caning/M +Canis/M +canister/SGMD +cankerous +canker/SDMG +Can/M +can/MDRSZGJ +cannabis/MS +canned +cannelloni +canner/SM +cannery/MS +Cannes +cannibalism/MS +cannibalistic +cannibalization/SM +cannibalize/GSD +cannibal/SM +cannily/U +canninesses +canniness/UM +canning/M +cannister/SM +cannonade/SDGM +cannonball/SGDM +Cannon/M +cannon/SDMG +cannot +canny/RPUT +canoe/DSGM +canoeist/SM +Canoga/M +canonic +canonicalization +canonicalize/GSD +canonical/SY +canonist/M +canonization/MS +canonized/U +canonize/SDG +canon/SM +Canopus/M +canopy/GSDM +canst +can't +cantabile/S +Cantabrigian +cantaloupe/MS +cantankerousness/SM +cantankerous/PY +cantata/SM +cant/CZGSRD +canted/IA +canteen/MS +Canterbury/M +canter/CM +cantered +cantering +canticle/SM +cantilever/SDMG +canto/MS +cantonal +Cantonese/M +Canton/M +cantonment/SM +canton/MGSLD +Cantor/M +cantor/MS +Cantrell/M +cant's +cants/A +Cantu/M +Canute/M +canvasback/MS +canvas/RSDMG +canvasser/M +canvass/RSDZG +canyon/MS +CAP +capability/ISM +capableness/IM +capable/PI +capabler +capablest +capably/I +capaciousness/MS +capacious/PY +capacitance/SM +capacitate/V +capacitive/Y +capacitor/MS +capacity/IMS +caparison/SDMG +Capek/M +Capella/M +caper/GDM +capeskin/SM +cape/SM +Capet/M +Capetown/M +Caph/M +capillarity/MS +capillary/S +Capistrano/M +capitalism/SM +capitalistic +capitalistically +capitalist/SM +capitalization/SMA +capitalized/AU +capitalizer/M +capitalize/RSDGZ +capitalizes/A +capital/SMY +capita/M +Capitan/M +capitation/CSM +Capitoline/M +Capitol/MS +capitol/SM +capitulate/AXNGSD +capitulation/MA +caplet/S +cap/MDRSZB +Capone/M +capon/SM +capo/SM +Capote/M +capped/UA +capping/M +cappuccino/MS +Cappy/M +Capra/M +Caprice/M +caprice/MS +capriciousness/MS +capricious/PY +Capricorn/MS +Capri/M +caps/AU +capsicum/MS +capsize/SDG +capstan/MS +capstone/MS +capsular +capsule/MGSD +capsulize/GSD +captaincy/MS +captain/SGDM +caption/GSDRM +captiousness/SM +captious/PY +captivate/XGNSD +captivation/M +captivator/SM +captive/MS +captivity/SM +Capt/M +captor/SM +capture/AGSD +capturer/MS +capt/V +Capulet/M +Caputo/M +Caracalla/M +Caracas/M +caracul's +carafe/SM +Caralie/M +Cara/M +caramelize/SDG +caramel/MS +carapace/SM +carapaxes +carat/SM +Caravaggio/M +caravan/DRMGS +caravaner/M +caravansary/MS +caravanserai's +caravel/MS +caraway/MS +carbide/MS +carbine/MS +carbohydrate/MS +carbolic +Carboloy/M +carbonaceous +carbonate/SDXMNG +carbonation/M +Carbondale/M +Carbone/MS +carbonic +carboniferous +Carboniferous +carbonization/SAM +carbonizer/AS +carbonizer's +carbonizes/A +carbonize/ZGRSD +carbon/MS +carbonyl/M +carborundum +Carborundum/MS +carboy/MS +carbuncle/SDM +carbuncular +carburetor/MS +carburetter/S +carburettor/SM +carcase/MS +carcass/SM +Carce/M +carcinogenic +carcinogenicity/MS +carcinogen/SM +carcinoma/SM +cardamom/MS +cardboard/MS +card/EDRSG +Cardenas/M +carder/MS +carder's/E +cardholders +cardiac/S +Cardiff/M +cardigan/SM +cardinality/SM +cardinal/SYM +carding/M +Cardin/M +Cardiod/M +cardiogram/MS +cardiograph/M +cardiographs +cardioid/M +cardiologist/SM +cardiology/MS +cardiomegaly/M +cardiopulmonary +cardiovascular +card's +cardsharp/ZSMR +CARE +cared/U +careen/DSG +careerism/M +careerist/MS +career/SGRDM +carefree +carefuller +carefullest +carefulness/MS +careful/PY +caregiver/S +carelessness/MS +careless/YP +Care/M +Carena/M +Caren/M +carer/M +care/S +Caresa/M +Caressa/M +Caresse/M +caresser/M +caressing/Y +caressive/Y +caress/SRDMVG +caretaker/SM +caret/SM +careworn +Carey/M +carfare/MS +cargoes +cargo/M +carhopped +carhopping +carhop/SM +Caria/M +Caribbean/S +Carib/M +caribou/MS +caricature/GMSD +caricaturisation +caricaturist/MS +caricaturization +Carie/M +caries/M +carillonned +carillonning +carillon/SM +Caril/M +Carilyn/M +Cari/M +Carina/M +Carine/M +caring/U +Carin/M +Cariotta/M +carious +Carissa/M +Carita/M +Caritta/M +carjack/GSJDRZ +Carla/M +Carlee/M +Carleen/M +Carlene/M +Carlen/M +Carletonian/M +Carleton/M +Carley/M +Carlie/M +Carlina/M +Carline/M +Carling/M +Carlin/M +Carlita/M +Carl/MNG +carload/MSG +Carlo/SM +Carlota/M +Carlotta/M +Carlsbad/M +Carlson/M +Carlton/M +Carlye/M +Carlyle/M +Carly/M +Carlyn/M +Carlynne/M +Carlynn/M +Carma/M +Carmela/M +Carmelia/M +Carmelina/M +Carmelita/M +Carmella/M +Carmelle/M +Carmel/M +Carmelo/M +Carmencita/M +Carmen/M +Carmichael/M +Carmina/M +Carmine/M +carmine/MS +Carmita/M +Car/MNY +Carmon/M +carnage/MS +carnality/SM +carnal/Y +Carnap/M +carnation/IMS +Carnegie/M +carnelian/SM +Carney/M +carney's +carnival/MS +carnivore/SM +carnivorousness/MS +carnivorous/YP +Carnot/M +Carny/M +carny/SDG +carob/SM +Carola/M +Carolan/M +Carolann/M +Carolee/M +Carole/M +caroler/M +Carolina/MS +Caroline/M +Carolingian +Carolinian/S +Carolin/M +Caroljean/M +Carol/M +carol/SGZMRD +Carolus/M +Carolyne/M +Carolyn/M +Carolynn/M +Caro/M +carom/GSMD +Caron/M +carotene/MS +carotid/MS +carousal/MS +carousel/MS +carouser/M +carouse/SRDZG +carpal/SM +Carpathian/MS +carpel/SM +carpenter/DSMG +carpentering/M +Carpenter/M +carpentry/MS +carper/M +carpetbagged +carpetbagger/MS +carpetbagging +carpetbag/MS +carpeting/M +carpet/MDJGS +carpi/M +carping/Y +carp/MDRSGZ +carpool/DGS +carport/MS +carpus/M +carrageen/M +Carree/M +carrel/SM +carriage/SM +carriageway/SM +Carrie/M +carrier/M +Carrier/M +Carrillo/M +Carri/M +carrion/SM +Carrissa/M +Carr/M +Carroll/M +Carrol/M +carrot/MS +carroty/RT +carrousel's +carryall/MS +Carry/MR +carryout/S +carryover/S +carry/RSDZG +carsickness/SM +carsick/P +Carson/M +cartage/MS +cartel/SM +carte/M +carter/M +Carter/M +Cartesian +Carthage/M +Carthaginian/S +carthorse/MS +Cartier/M +cartilage/MS +cartilaginous +cartload/MS +cart/MDRGSZ +Cart/MR +cartographer/MS +cartographic +cartography/MS +carton/GSDM +cartoon/GSDM +cartoonist/MS +cartridge/SM +cartwheel/MRDGS +Cartwright/M +Carty/RM +Caruso/M +carve/DSRJGZ +carven +carver/M +Carver/M +carving/M +caryatid/MS +Caryl/M +Cary/M +Caryn/M +car/ZGSMDR +casaba/SM +Casablanca/M +Casals/M +Casandra/M +Casanova/SM +Casar/M +casbah/M +cascade/MSDG +Cascades/M +cascara/MS +casebook/SM +case/DSJMGL +cased/U +caseharden/SGD +casein/SM +caseload/MS +Case/M +casement/SM +caseworker/M +casework/ZMRS +Casey/M +cashbook/SM +cashew/MS +cash/GZMDSR +cashier/SDMG +cashless +Cash/M +cashmere/MS +Casie/M +Casi/M +casing/M +casino/MS +casket/SGMD +cask/GSDM +Caspar/M +Casper/M +Caspian +Cass +Cassandra/SM +Cassandre/M +Cassandry/M +Cassatt/M +Cassaundra/M +cassava/MS +casserole/MGSD +cassette/SM +Cassey/M +cassia/MS +Cassie/M +Cassi/M +cassino's +Cassiopeia/M +Cassite/M +Cassius/M +cassock/SDM +Cassondra/M +cassowary/SM +Cassy/M +Castaneda/M +castanet/SM +castaway/SM +castellated +caste/MHS +caster/M +cast/GZSJMDR +castigate/XGNSD +castigation/M +castigator/SM +Castile's +Castillo/M +casting/M +castle/GMSD +castoff/S +Castor/M +castor's +castrate/DSNGX +castration/M +Castries/M +Castro/M +casts/A +casualness/SM +casual/SYP +casualty/SM +casuistic +casuist/MS +casuistry/SM +cataclysmal +cataclysmic +cataclysm/MS +catacomb/MS +catafalque/SM +Catalan/MS +catalepsy/MS +cataleptic/S +Catalina/M +cataloger/M +catalog/SDRMZG +Catalonia/M +catalpa/SM +catalysis/M +catalyst/SM +catalytic +catalytically +catalyze/DSG +catamaran/MS +catapult/MGSD +cataract/MS +Catarina/M +catarrh/M +catarrhs +catastrophe/SM +catastrophic +catastrophically +catatonia/MS +catatonic/S +Catawba/M +catbird/MS +catboat/SM +catcall/SMDG +catchable/U +catchall/MS +catch/BRSJLGZ +catcher/M +catchment/SM +catchpenny/S +catchphrase/S +catchup/MS +catchword/MS +catchy/TR +catechism/MS +catechist/SM +catechize/SDG +catecholamine/MS +categoric +categorical/Y +categorization/MS +categorized/AU +categorize/RSDGZ +category/MS +Cate/M +catenate/NF +catenation/MF +catercorner +caterer/M +cater/GRDZ +Caterina/M +catering/M +Caterpillar +caterpillar/SM +caterwaul/DSG +catfish/MS +catgut/SM +Catha/M +Catharina/M +Catharine/M +catharses +catharsis/M +cathartic/S +Cathay/M +cathedral/SM +Cathee/M +Catherina/M +Catherine/M +Catherin/M +Cather/M +Cathe/RM +catheterize/GSD +catheter/SM +Cathie/M +Cathi/M +Cathleen/M +Cathlene/M +cathode/MS +cathodic +catholicism +Catholicism/SM +catholicity/MS +catholic/MS +Catholic/S +Cathrine/M +Cathrin/M +Cathryn/M +Cathyleen/M +Cathy/M +Catie/M +Catiline/M +Cati/M +Catina/M +cationic +cation/MS +catkin/SM +Catlaina/M +Catlee/M +catlike +Catlin/M +catnapped +catnapping +catnap/SM +catnip/MS +Cato/M +Catrina/M +Catriona/M +Catskill/SM +cat/SMRZ +catsup's +cattail/SM +catted +cattery/M +cattily +cattiness/SM +catting +cattle/M +cattleman/M +cattlemen +Catt/M +catty/PRST +Catullus/M +CATV +catwalk/MS +Caty/M +Caucasian/S +Caucasoid/S +Caucasus/M +Cauchy/M +caucus/SDMG +caudal/Y +caught/U +cauldron/MS +cauliflower/MS +caulker/M +caulk/JSGZRD +causality/SM +causal/YS +causate/XVN +causation/M +causative/SY +cause/DSRGMZ +caused/U +causeless +causerie/MS +causer/M +causeway/SGDM +caustically +causticity/MS +caustic/YS +cauterization/SM +cauterized/U +cauterize/GSD +cautionary +cautioner/M +caution/GJDRMSZ +cautiousness's/I +cautiousness/SM +cautious/PIY +cavalcade/MS +cavalierness/M +cavalier/SGYDP +cavalryman/M +cavalrymen +cavalry/MS +caveat/SM +caveatted +caveatting +cave/GFRSD +caveman/M +cavemen +Cavendish/M +caver/M +cavern/GSDM +cavernous/Y +cave's +caviar/MS +caviler/M +cavil/SJRDGZ +caving/MS +cavity/MFS +cavort/SDG +Cavour/M +caw/SMDG +Caxton/M +Caye/M +Cayenne/M +cayenne/SM +Cayla/M +Cayman/M +cayman/SM +cay's +cay/SC +Cayuga/M +cayuse/SM +Caz/M +Cazzie/M +c/B +CB +CBC +Cb/M +CBS +cc +Cchaddie/M +CCTV +CCU +CD +CDC/M +Cd/M +CDT +Ce +cease/DSCG +ceasefire/S +ceaselessness/SM +ceaseless/YP +ceasing/U +Ceausescu/M +Cebuano/M +Cebu/M +ceca +cecal +Cecelia/M +Cece/M +Cecile/M +Ceciley/M +Cecilia/M +Cecilio/M +Cecilius/M +Cecilla/M +Cecil/M +Cecily/M +cecum/M +cedar/SM +ceded/A +cede/FRSDG +ceder's/F +ceder/SM +cedes/A +cedilla/SM +ceding/A +Ced/M +Cedric/M +ceilidh/M +ceiling/MDS +Ceil/M +celandine/MS +Celanese/M +Celebes's +celebrant/MS +celebratedness/M +celebrated/P +celebrate/XSDGN +celebration/M +celebrator/MS +celebratory +celebrity/MS +Cele/M +Celene/M +celerity/SM +celery/SM +Celesta/M +celesta/SM +Celeste/M +celestial/YS +Celestia/M +Celestina/M +Celestine/M +Celestyna/M +Celestyn/M +Celia/M +celibacy/MS +celibate/SM +Celie/M +Celina/M +Celinda/M +Celine/M +Celinka/M +Celisse/M +Celka/M +cellarer/M +cellar/RDMGS +Celle/M +cell/GMDS +Cellini/M +cellist/SM +Cello/M +cello/MS +cellophane/SM +cellphone/S +cellular/SY +cellulite/S +celluloid/SM +cellulose/SM +Celsius/S +Celtic/SM +Celt/MS +cementa +cementer/M +cementum/SM +cement/ZGMRDS +cemetery/MS +cenobite/MS +cenobitic +cenotaph/M +cenotaphs +Cenozoic +censer/MS +censored/U +censor/GDMS +censorial +censoriousness/MS +censorious/YP +censorship/MS +censure/BRSDZMG +censurer/M +census/SDMG +centaur/SM +Centaurus/M +centavo/SM +centenarian/MS +centenary/S +centennial/YS +center/AC +centerboard/SM +centered +centerer/S +centerfold/S +centering/SM +centerline/SM +centerpiece/SM +center's +Centigrade +centigrade/S +centigram/SM +centiliter/MS +centime/SM +centimeter/SM +centipede/MS +Centralia/M +centralism/M +centralist/M +centrality/MS +centralization/CAMS +centralize/CGSD +centralizer/SM +centralizes/A +central/STRY +centrefold's +Centrex +CENTREX/M +centric/F +centrifugal/SY +centrifugate/NM +centrifugation/M +centrifuge/GMSD +centripetal/Y +centrist/MS +centroid/MS +cent/SZMR +centurion/MS +century/MS +CEO +cephalic/S +Cepheid +Cepheus/M +ceramicist/S +ceramic/MS +ceramist/MS +cerate/MD +Cerberus/M +cereal/MS +cerebellar +cerebellum/MS +cerebra +cerebral/SY +cerebrate/XSDGN +cerebration/M +cerebrum/MS +cerement/SM +ceremonial/YSP +ceremoniousness/MS +ceremoniousness's/U +ceremonious/YUP +ceremony/MS +Cerenkov/M +Ceres/M +Cerf/M +cerise/SM +cerium/MS +cermet/SM +CERN/M +certainer +certainest +certainty/UMS +certain/UY +cert/FS +certifiable +certifiably +certificate/SDGM +certification/AMC +certified/U +certifier/M +certify/DRSZGNX +certiorari/M +certitude/ISM +cerulean/MS +Cervantes/M +cervical +cervices/M +cervix/M +Cesarean +cesarean/S +Cesare/M +Cesar/M +Cesaro/M +cesium/MS +cessation/SM +cession/FAMSK +Cessna/M +cesspit/M +cesspool/SM +Cesya/M +cetacean/S +cetera/S +Cetus/M +Ceylonese +Ceylon/M +Cezanne/S +cf +CF +CFC +Cf/M +CFO +cg +Chablis/SM +Chaddie/M +Chadd/M +Chaddy/M +Chadian/S +Chad/M +Chadwick/M +chafe/GDSR +chafer/M +chaffer/DRG +chafferer/M +Chaffey/M +chaff/GRDMS +chaffinch/SM +Chagall/M +chagrin/DGMS +Chaim/M +chainlike +chain's +chainsaw/SGD +chain/SGUD +chairlady/M +chairlift/MS +chairman/MDGS +chairmanship/MS +chairmen +chairperson/MS +chair/SGDM +chairwoman/M +chairwomen +chaise/SM +chalcedony/MS +Chaldea/M +Chaldean/M +chalet/SM +chalice/DSM +chalkboard/SM +chalk/DSMG +chalkiness/S +chalkline +chalky/RPT +challenged/U +challenger/M +challenge/ZGSRD +challenging/Y +challis/SM +Chalmers +chamberer/M +Chamberlain/M +chamberlain/MS +chambermaid/MS +chamberpot/S +Chambers/M +chamber/SZGDRM +chambray/MS +chameleon/SM +chamfer/DMGS +chammy's +chamois/DSMG +chamomile/MS +champagne/MS +champaign/M +champ/DGSZ +champion/MDGS +championship/MS +Champlain/M +chanced/M +chance/GMRSD +chancellery/SM +chancellorship/SM +chancellor/SM +Chancellorsville/M +chancel/SM +Chance/M +chancery/SM +Chancey/M +chanciness/S +chancing/M +chancre/SM +chancy/RPT +Chandal/M +Chanda/M +chandelier/SM +Chandigarh/M +Chandler/M +chandler/MS +Chandragupta/M +Chandra/M +Chandrasekhar/M +Chandy/M +Chanel/M +Chane/M +Chaney/M +Changchun/M +changeabilities +changeability/UM +changeableness/SM +changeable/U +changeably/U +changed/U +change/GZRSD +changeless +changeling/M +changeover/SM +changer/M +changing/U +Chang/M +Changsha/M +Chan/M +Channa/M +channeler/M +channeling/M +channelization/SM +channelize/GDS +channellings +channel/MDRZSG +Channing/M +chanson/SM +Chantalle/M +Chantal/M +chanter/M +chanteuse/MS +chantey/SM +chanticleer/SM +Chantilly/M +chantry/MS +chant/SJGZMRD +chanty's +Chanukah's +Chao/M +chaos/SM +chaotic +chaotically +chaparral/MS +chapbook/SM +chapeau/MS +chapel/MS +chaperonage/MS +chaperoned/U +chaperone's +chaperon/GMDS +chaplaincy/MS +chaplain/MS +chaplet/SM +Chaplin/M +Chapman/M +chap/MS +Chappaquiddick/M +chapped +chapping +chapter/SGDM +Chara +charabanc/MS +characterful +characteristically/U +characteristic/SM +characterizable/MS +characterization/MS +characterize/DRSBZG +characterized/U +characterizer/M +characterless +character/MDSG +charade/SM +charbroil/SDG +charcoal/MGSD +Chardonnay +chardonnay/S +chard/SM +chargeableness/M +chargeable/P +charged/U +charge/EGRSDA +charger/AME +chargers +char/GS +Charil/M +charily +chariness/MS +Charin/M +charioteer/GSDM +Chariot/M +chariot/SMDG +Charis +charisma/M +charismata +charismatically +charismatic/S +Charissa/M +Charisse/M +charitablenesses +charitableness/UM +charitable/UP +charitably/U +Charita/M +Charity/M +charity/MS +charlady/M +Charla/M +charlatanism/MS +charlatanry/SM +charlatan/SM +Charlean/M +Charleen/M +Charlemagne/M +Charlena/M +Charlene/M +Charles/M +Charleston/SM +Charley/M +Charlie/M +Charline/M +Charlot/M +Charlotta/M +Charlotte/M +Charlottesville/M +Charlottetown/M +Charlton/M +Charmaine/M +Charmain/M +Charmane/M +charmer/M +Charmian/M +Charmine/M +charming/RYT +Charmin/M +Charmion/M +charmless +charm/SGMZRD +Charolais +Charo/M +Charon/M +charred +charring +charted/U +charter/AGDS +chartered/U +charterer/SM +charter's +chartist/SM +Chartres/M +chartreuse/MS +chartroom/S +chart/SJMRDGBZ +charwoman/M +charwomen +Charybdis/M +Charyl/M +chary/PTR +Chas +chase/DSRGZ +Chase/M +chaser/M +chasing/M +Chasity/M +chasm/SM +chassis/M +chastely +chasteness/SM +chasten/GSD +chaste/UTR +chastisement/SM +chastiser/M +chastise/ZGLDRS +Chastity/M +chastity/SM +chastity's/U +chasuble/SM +Chateaubriand +chteau/M +chateaus +chteaux +chtelaine/SM +chat/MS +Chattahoochee/M +Chattanooga/M +chatted +chattel/MS +chatterbox/MS +chatterer/M +Chatterley/M +chatter/SZGDRY +Chatterton/M +chattily +chattiness/SM +chatting +chatty/RTP +Chaucer/M +chauffeur/GSMD +Chaunce/M +Chauncey/M +Chautauqua/M +chauvinism/MS +chauvinistic +chauvinistically +chauvinist/MS +Chavez/M +chaw +Chayefsky/M +cheapen/DG +cheapish +cheapness/MS +cheapskate/MS +cheap/YRNTXSP +cheater/M +cheat/RDSGZ +Chechen/M +Chechnya/M +checkable/U +checkbook/MS +checked/UA +checkerboard/MS +checker/DMG +check/GZBSRDM +checklist/S +checkmate/MSDG +checkoff/SM +checkout/S +checkpoint/MS +checkroom/MS +check's/A +checks/A +checksummed +checksumming +checksum/SM +checkup/MS +Cheddar/MS +cheddar/S +cheekbone/SM +cheek/DMGS +cheekily +cheekiness/SM +cheeky/PRT +cheep/GMDS +cheerer/M +cheerfuller +cheerfullest +cheerfulness/MS +cheerful/YP +cheerily +cheeriness/SM +cheerio/S +Cheerios/M +cheerleader/SM +cheerlessness/SM +cheerless/PY +cheers/S +cheery/PTR +cheer/YRDGZS +cheeseburger/SM +cheesecake/SM +cheesecloth/M +cheesecloths +cheeseparing/S +cheese/SDGM +cheesiness/SM +cheesy/PRT +cheetah/M +cheetahs +Cheeto/M +Cheever/M +cheffed +cheffing +chef/SM +Chekhov/M +chelate/XDMNG +chelation/M +Chelsae/M +Chelsea/M +Chelsey/M +Chelsie/M +Chelsy/M +Chelyabinsk/M +chem +Che/M +chemic +chemical/SYM +chemiluminescence/M +chemiluminescent +chemise/SM +chemistry/SM +chemist/SM +chemotherapeutic/S +chemotherapy/SM +chemurgy/SM +Chengdu +Cheng/M +chenille/SM +Chen/M +Cheops/M +Chere/M +Cherey/M +Cherianne/M +Cherice/M +Cherida/M +Cherie/M +Cherilyn/M +Cherilynn/M +Cheri/M +Cherin/M +Cherise/M +cherisher/M +cherish/GDRS +Cherish/M +Cheriton/M +Cherlyn/M +Cher/M +Chernenko/M +Chernobyl/M +Cherokee/MS +cheroot/MS +Cherri/M +Cherrita/M +Cherry/M +cherry/SM +chert/MS +cherubic +cherubim/S +cherub/SM +chervil/MS +Cherye/M +Cheryl/M +Chery/M +Chesapeake/M +Cheshire/M +Cheslie/M +chessboard/SM +chessman/M +chessmen +chess/SM +Chesterfield/M +chesterfield/MS +Chester/M +Chesterton/M +chestful/S +chest/MRDS +chestnut/SM +Cheston/M +chesty/TR +Chet/M +Chevalier/M +chevalier/SM +Cheviot/M +cheviot/S +Chev/M +Chevrolet/M +chevron/DMS +Chevy/M +chewer/M +chew/GZSDR +chewiness/S +chewy/RTP +Cheyenne/SM +chg +chge +Chiang/M +chianti/M +Chianti/S +chiaroscuro/SM +Chiarra/M +Chiba/M +Chicagoan/SM +Chicago/M +Chicana/MS +chicane/MGDS +chicanery/MS +Chicano/MS +chichi/RTS +chickadee/SM +Chickasaw/SM +chickenfeed +chicken/GDM +chickenhearted +chickenpox/MS +Chickie/M +Chick/M +chickpea/MS +chickweed/MS +chick/XSNM +Chicky/M +chicle/MS +Chic/M +chicness/S +Chico/M +chicory/MS +chic/SYRPT +chide/GDS +chiding/Y +chiefdom/MS +chieftain/SM +chief/YRMST +chiffonier/MS +chiffon/MS +chigger/MS +chignon/MS +Chihuahua/MS +chihuahua/S +chilblain/MS +childbearing/MS +childbirth/M +childbirths +childcare/S +childes +child/GMYD +childhood/MS +childishness/SM +childish/YP +childlessness/SM +childless/P +childlikeness/M +childlike/P +childminders +childproof/GSD +childrearing +children/M +Chilean/S +Chile/MS +chile's +chilies +chili/M +chiller/M +chilliness/MS +chilling/Y +chilli's +chill/MRDJGTZPS +chillness/MS +chilly/TPRS +Chilton/M +Chi/M +chimaera's +chimaerical +Chimborazo/M +chime/DSRGMZ +Chimera/S +chimera/SM +chimeric +chimerical +chimer/M +Chimiques +chimney/SMD +chimpanzee/SM +chimp/MS +chi/MS +Chimu/M +Ch'in +China/M +Chinaman/M +Chinamen +china/MS +Chinatown/SM +chinchilla/SM +chine/MS +Chinese/M +Ching/M +chink/DMSG +chinless +Chin/M +chinned +chinner/S +chinning +chino/MS +Chinook/MS +chin/SGDM +chinstrap/S +chintz/SM +chintzy/TR +chipboard/M +Chipewyan/M +Chip/M +chipmunk/SM +chipped +Chippendale/M +chipper/DGS +Chippewa/MS +chipping/MS +chip/SM +Chiquia/M +Chiquita/M +chiral +Chirico/M +chirography/SM +chiropodist/SM +chiropody/MS +chiropractic/MS +chiropractor/SM +chirp/GDS +chirpy/RT +chirrup/DGS +chiseler/M +chisel/ZGSJMDR +Chisholm/M +Chisinau/M +chitchat/SM +chitchatted +chitchatting +chitinous +chitin/SM +chit/SM +Chittagong/M +chitterlings +chivalric +chivalrously/U +chivalrousness/MS +chivalrous/YP +chivalry/SM +chive/GMDS +chivvy/D +chivying +chlamydiae +chlamydia/S +Chloe/M +Chloette/M +Chlo/M +chloral/MS +chlorate/M +chlordane/MS +chloride/MS +chlorinated/C +chlorinates/C +chlorinate/XDSGN +chlorination/M +chlorine/MS +Chloris +chlorofluorocarbon/S +chloroform/DMSG +chlorophyll/SM +chloroplast/MS +chloroquine/M +chm +Ch/MGNRS +chockablock +chock/SGRDM +chocoholic/S +chocolate/MS +chocolaty +Choctaw/MS +choiceness/M +choice/RSMTYP +choirboy/MS +choirmaster/SM +choir/SDMG +chokeberry/M +chokecherry/SM +choke/DSRGZ +choker/M +chokes/M +choking/Y +cholera/SM +choleric +choler/SM +cholesterol/SM +choline/M +cholinesterase/M +chomp/DSG +Chomsky/M +Chongqing +choose/GZRS +chooser/M +choosiness/S +choosy/RPT +chophouse/SM +Chopin/M +chopped +chopper/SDMG +choppily +choppiness/MS +chopping +choppy/RPT +chop/S +chopstick/SM +chorale/MS +choral/SY +chordal +chordata +chordate/MS +chording/M +chord/SGMD +chorea/MS +chore/DSGNM +choreographer/M +choreographic +choreographically +choreographs +choreography/MS +choreograph/ZGDR +chorines +chorion/M +chorister/SM +choroid/S +chortler/M +chortle/ZGDRS +chorus/GDSM +chosen/U +chose/S +Chou/M +chowder/SGDM +chow/DGMS +Chretien/M +Chris/M +chrism/SM +chrissake +Chrisse/M +Chrissie/M +Chrissy/M +Christabella/M +Christabel/M +Christalle/M +Christal/M +Christa/M +Christan/M +Christchurch/M +Christean/M +Christel/M +Christendom/MS +christened/U +christening/SM +Christen/M +christen/SAGD +Christensen/M +Christenson/M +Christiana/M +Christiane/M +Christianity/SM +Christianize/GSD +Christian/MS +Christiano/M +Christiansen/M +Christians/N +Christie/SM +Christi/M +Christina/M +Christine/M +Christin/M +Christlike +Christmas/SM +Christmastide/SM +Christmastime/S +Christoffel/M +Christoffer/M +Christoforo/M +Christoper/M +Christophe/M +Christopher/M +Christoph/MR +Christophorus/M +Christos/M +Christ/SMN +Christye/M +Christyna/M +Christy's +Chrisy/M +chroma/M +chromate/M +chromatically +chromaticism/M +chromaticness/M +chromatic/PS +chromatics/M +chromatin/MS +chromatogram/MS +chromatograph +chromatographic +chromatography/M +chrome/GMSD +chromic +chromite/M +chromium/SM +chromosomal +chromosome/MS +chromosphere/M +chronically +chronicled/U +chronicler/M +chronicle/SRDMZG +chronic/S +chronograph/M +chronographs +chronography +chronological/Y +chronologist/MS +chronology/MS +chronometer/MS +chronometric +Chrotoem/M +chrysalids +chrysalis/SM +Chrysa/M +chrysanthemum/MS +Chrysler/M +Chrysostom/M +Chrystal/M +Chrystel/M +Chryste/M +chubbiness/SM +chubby/RTP +chub/MS +Chucho/M +chuck/GSDM +chuckhole/SM +chuckle/DSG +chuckling/Y +Chuck/M +chuff/DM +chugged +chugging +chug/MS +Chukchi/M +chukka/S +Chumash/M +chummed +chummily +chumminess/MS +chumming +chum/MS +chummy/SRTP +chumping/M +chump/MDGS +Chungking's +Chung/M +chunkiness/MS +chunk/SGDM +chunky/RPT +chuntering +churchgoer/SM +churchgoing/SM +Churchillian +Churchill/M +churchliness/M +churchly/P +churchman/M +church/MDSYG +churchmen +Church/MS +churchwarden/SM +churchwoman/M +churchwomen +churchyard/SM +churlishness/SM +churlish/YP +churl/SM +churner/M +churning/M +churn/SGZRDM +chute/DSGM +chutney/MS +chutzpah/M +chutzpahs +chutzpa/SM +Chuvash/M +ch/VT +chyme/SM +Ci +CIA +ciao/S +cicada/MS +cicatrice/S +cicatrix's +Cicely/M +Cicero/M +cicerone/MS +ciceroni +Ciceronian +Cicily/M +CID +cider's/C +cider/SM +Cid/M +Ciel/M +cigarette/MS +cigarillo/MS +cigar/SM +cilantro/S +cilia/M +ciliate/FDS +ciliately +cilium/M +Cilka/M +cinch/MSDG +cinchona/SM +Cincinnati/M +cincture/MGSD +Cinda/M +Cindee/M +Cindelyn/M +cinder/DMGS +Cinderella/MS +Cindie/M +Cindi/M +Cindra/M +Cindy/M +cine/M +cinema/SM +cinematic +cinematographer/MS +cinematographic +cinematography/MS +Cinerama/M +cinnabar/MS +Cinnamon/M +cinnamon/MS +ciphered/C +cipher/MSGD +ciphers/C +cir +circa +circadian +Circe/M +circler/M +circle/RSDGM +circlet/MS +circuital +circuit/GSMD +circuitousness/MS +circuitous/YP +circuitry/SM +circuity/MS +circulant +circularity/SM +circularize/GSD +circularness/M +circular/PSMY +circulate/ASDNG +circulation/MA +circulations +circulative +circulatory +circumcise/DRSXNG +circumcised/U +circumciser/M +circumcision/M +circumference/SM +circumferential/Y +circumflex/MSDG +circumlocution/MS +circumlocutory +circumnavigate/DSNGX +circumnavigational +circumnavigation/M +circumpolar +circumscribe/GSD +circumscription/SM +circumspection/SM +circumspect/Y +circumsphere +circumstance/SDMG +circumstantial/YS +circumvention/MS +circumvent/SBGD +circus/SM +Cirillo/M +Cirilo/M +Ciro/M +cirque/SM +cirrhoses +cirrhosis/M +cirrhotic/S +cirri/M +cirrus/M +Cissiee/M +Cissy/M +cistern/SM +citadel/SM +citations/I +citation/SMA +cit/DSG +cite/ISDAG +Citibank/M +citified +citizenry/SM +citizenship/MS +citizen/SYM +citrate/DM +citric +Citroen/M +citronella/MS +citron/MS +citrus/SM +city/DSM +cityscape/MS +citywide +civet/SM +civic/S +civics/M +civilian/SM +civility/IMS +civilizational/MS +civilization/AMS +civilizedness/M +civilized/PU +civilize/DRSZG +civilizer/M +civilizes/AU +civil/UY +civvies +ck/C +clack/SDG +cladding/SM +clads +clad/U +Claiborne/M +Claiborn/M +claimable +claimant/MS +claim/CDRSKAEGZ +claimed/U +claimer/KMACE +Claire/M +Clair/M +Clairol/M +clairvoyance/MS +clairvoyant/YS +clambake/MS +clamberer/M +clamber/SDRZG +clammed +clammily +clamminess/MS +clamming +clam/MS +clammy/TPR +clamorer/M +clamor/GDRMSZ +clamorousness/UM +clamorous/PUY +clampdown/SM +clamper/M +clamp/MRDGS +clamshell/MS +Clancy/M +clandestineness/M +clandestine/YP +clanger/M +clangor/MDSG +clangorous/Y +clang/SGZRD +clanking/Y +clank/SGDM +clan/MS +clannishness/SM +clannish/PY +clansman/M +clansmen +clapboard/SDGM +Clapeyron/M +clapped +clapper/GMDS +clapping +clap/S +Clapton/M +claptrap/SM +claque/MS +Clarabelle/M +Clara/M +Clarance/M +Clare/M +Claremont/M +Clarence/M +Clarendon/M +Claresta/M +Clareta/M +claret/MDGS +Claretta/M +Clarette/M +Clarey/M +Claribel/M +Clarice/M +Clarie/M +clarification/M +clarifier/M +clarify/NGXDRS +Clari/M +Clarinda/M +Clarine/M +clarinetist/SM +clarinet/SM +clarinettist's +clarion/GSMD +Clarissa/M +Clarisse/M +Clarita/M +clarities +clarity/UM +Clarke/M +Clark/M +Clarridge/M +Clary/M +clasher/M +clash/RSDG +clasped/M +clasper/M +clasp's +clasp/UGSD +classer/M +class/GRSDM +classical/Y +classicism/SM +classicist/SM +classic/S +classics/M +classifiable/U +classification/AMC +classificatory +classified/S +classifier/SM +classify/CNXASDG +classiness/SM +classless/P +classmate/MS +classroom/MS +classwork/M +classy/PRT +clatterer/M +clattering/Y +clatter/SGDR +clattery +Claudelle/M +Claudell/M +Claude/M +Claudetta/M +Claudette/M +Claudia/M +Claudian/M +Claudianus/M +Claudie/M +Claudina/M +Claudine/M +Claudio/M +Claudius/M +clausal +clause/MS +Clausen/M +Clausewitz/M +Clausius/M +Claus/NM +claustrophobia/SM +claustrophobic +clave/RM +clave's/F +clavichord/SM +clavicle/MS +clavier/MS +clawer/M +claw/GDRMS +Clayborne/M +Clayborn/M +Claybourne/M +clayey +clayier +clayiest +Clay/M +clay/MDGS +claymore/MS +Clayson/M +Clayton/M +Clea/M +cleanable +cleaner/MS +cleaning/SM +cleanliness/UMS +cleanly/PRTU +cleanness/MSU +cleanse +cleanser/M +cleans/GDRSZ +cleanup/MS +clean/UYRDPT +clearance/MS +clearcut +clearer/M +clearheadedness/M +clearheaded/PY +clearinghouse/S +clearing/MS +clearly +clearness/MS +clears +clear/UTRD +Clearwater/M +clearway/M +cleat/MDSG +cleavage/MS +cleaver/M +cleave/RSDGZ +Cleavland/M +clef/SM +cleft/MDGS +clematis/MS +clemence +Clemenceau/M +Clemence/M +clemency/ISM +Clemente/M +Clementia/M +Clementina/M +Clementine/M +Clementius/M +clement/IY +Clement/MS +clements +Clemmie/M +Clemmy/M +Clemons +Clemson/M +Clem/XM +clenches +clenching +clench/UD +Cleo/M +Cleon/M +Cleopatra/M +Clerc/M +clerestory/MS +clergyman/M +clergymen +clergy/MS +clergywoman +clergywomen +clericalism/SM +clerical/YS +cleric/SM +Clerissa/M +clerk/SGYDM +clerkship/MS +Cletis +Cletus/M +Cleveland/M +Cleve/M +cleverness/SM +clever/RYPT +Clevey/M +Clevie/M +clevis/SM +clew/DMGS +cl/GJ +Cliburn/M +clichd +clich/SM +clicker/M +click/GZSRDM +clientle/SM +client/SM +cliffhanger/MS +cliffhanging +Cliff/M +Clifford/M +cliff/SM +Clifton/M +climacteric/SM +climactic +climate/MS +climatic +climatically +climatological/Y +climatologist/SM +climatology/MS +climax/MDSG +climbable/U +climb/BGZSJRD +climbdown +climbed/U +climber/M +clime/SM +Clim/M +clinch/DRSZG +clincher/M +clinching/Y +Cline/M +clinger/MS +clinging +cling/U +clingy/TR +clinical/Y +clinician/MS +clinic/MS +clinker/GMD +clink/RDGSZ +clinometer/MIS +Clint/M +Clinton/M +Clio/M +cliometrician/S +cliometric/S +clipboard/SM +clipped/U +clipper/MS +clipping/SM +clip/SM +clique/SDGM +cliquey +cliquier +cliquiest +cliquishness/SM +cliquish/YP +clitoral +clitorides +clitoris/MS +Clive/M +cloacae +cloaca/M +cloakroom/MS +cloak's +cloak/USDG +clobber/DGS +cloche/MS +clocker/M +clockmaker/M +clock/SGZRDMJ +clockwatcher +clockwise +clockwork/MS +clodded +clodding +cloddishness/M +cloddish/P +clodhopper/SM +clod/MS +Cloe/M +clogged/U +clogging/U +clog's +clog/US +cloisonn +cloisonnes +cloister/MDGS +cloistral +Clo/M +clomp/MDSG +clonal +clone/DSRGMZ +clonk/SGD +clopped +clopping +clop/S +Cloris/M +closed/U +close/EDSRG +closefisted +closely +closemouthed +closeness/MS +closeout/MS +closer/EM +closers +closest +closet/MDSG +closeup/S +closing/S +closured +closure/EMS +closure's/I +closuring +clothbound +clothesbrush +clotheshorse/MS +clothesline/SDGM +clothesman +clothesmen +clothespin/MS +clothe/UDSG +cloth/GJMSD +clothier/MS +clothing/M +Clotho/M +cloths +Clotilda/M +clot/MS +clotted +clotting +cloture/MDSG +cloudburst/MS +clouded/U +cloudiness/SM +cloudlessness/M +cloudless/YP +cloudscape/SM +cloud/SGMD +cloudy/TPR +clout/GSMD +cloven +cloverleaf/MS +clover/M +clove/SRMZ +Clovis/M +clown/DMSG +clownishness/SM +clownish/PY +cloy/DSG +cloying/Y +clubbed/M +clubbing/M +clubfeet +clubfoot/DM +clubhouse/SM +club/MS +clubroom/SM +cluck/GSDM +clueless +clue/MGDS +Cluj/M +clump/MDGS +clumpy/RT +clumsily +clumsiness/MS +clumsy/PRT +clung +clunk/SGZRDM +clunky/PRYT +clustered/AU +clusters/A +cluster/SGJMD +clutch/DSG +cluttered/U +clutter/GSD +Cl/VM +Clyde/M +Clydesdale/M +Cly/M +Clytemnestra/M +Clyve/M +Clywd/M +cm +Cm/M +CMOS +cnidarian/MS +CNN +CNS +CO +coacher/M +coachman/M +coachmen +coach/MSRDG +coachwork/M +coadjutor/MS +coagulable +coagulant/SM +coagulate/GNXSD +coagulation/M +coagulator/S +coaler/M +coalesce/GDS +coalescence/SM +coalescent +coalface/SM +coalfield/MS +coalitionist/SM +coalition/MS +coal/MDRGS +coalminers +coarseness/SM +coarsen/SGD +coarse/TYRP +coastal +coaster/M +coastguard/MS +coastline/SM +coast/SMRDGZ +coated/U +Coates/M +coating/M +coat/MDRGZJS +coattail/S +coattest +coauthor/MDGS +coaxer/M +coax/GZDSR +coaxial/Y +coaxing/Y +Cobain/M +cobalt/MS +cobbed +Cobbie/M +cobbing +cobbler/M +cobble/SRDGMZ +cobblestone/MSD +Cobb/M +Cobby/M +coble/M +Cob/M +COBOL +Cobol/M +cobra/MS +cob/SM +cobwebbed +cobwebbing +cobwebby/RT +cobweb/SM +cocaine/MS +coca/MS +cocci/MS +coccus/M +coccyges +coccyx/M +Cochabamba/M +cochineal/SM +Cochin/M +Cochise/M +cochleae +cochlear +cochlea/SM +Cochran/M +cockade/SM +cockamamie +cockatoo/SM +cockatrice/MS +cockcrow/MS +cockerel/MS +cocker/M +cockeye/DM +cockeyed/PY +cockfighting/M +cockfight/MJSG +cock/GDRMS +cockily +cockiness/MS +cocklebur/M +cockle/SDGM +cockleshell/SM +Cockney +cockney/MS +cockpit/MS +cockroach/SM +cockscomb/SM +cockshies +cocksucker/S! +cocksure +cocktail/GDMS +cocky/RPT +cocoa/SM +coco/MS +coconut/SM +cocoon/GDMS +Cocteau/M +COD +coda/SM +codded +codding +coddle/GSRD +coddler/M +codebook/S +codebreak/R +coded/UA +Codee/M +codeine/MS +codename/D +codependency/S +codependent/S +coder/CM +code's +co/DES +codes/A +code/SCZGJRD +codetermine/S +codeword/SM +codex/M +codfish/SM +codger/MS +codices/M +codicil/SM +Codie/M +codification/M +codifier/M +codify/NZXGRSD +Codi/M +coding/M +codling/M +Cod/M +cod/MDRSZGJ +codpiece/MS +Cody/M +coedited +coediting +coeditor/MS +coedits +coed/SM +coeducational +coeducation/SM +coefficient/SYM +coelenterate/MS +coequal/SY +coercer/M +coerce/SRDXVGNZ +coercible/I +coercion/M +coerciveness/M +coercive/PY +coeval/YS +coexistence/MS +coexistent +coexist/GDS +coextensive/Y +cofactor/MS +coffeecake/SM +coffeecup +coffeehouse/SM +coffeemaker/S +coffeepot/MS +coffee/SM +cofferdam/SM +coffer/DMSG +Coffey/M +coffin/DMGS +Coffman/M +cogency/MS +cogent/Y +cogged +cogging +cogitate/DSXNGV +cogitation/M +cogitator/MS +cog/MS +Cognac/M +cognac/SM +cognate/SXYN +cognation/M +cognitional +cognition/SAM +cognitive/SY +cognizable +cognizance/MAI +cognizances/A +cognizant/I +cognomen/SM +cognoscente +cognoscenti +cogwheel/SM +cohabitant/MS +cohabitational +cohabitation/SM +cohabit/SDG +Cohan/M +coheir/MS +Cohen/M +cohere/GSRD +coherence/SIM +coherencies +coherency/I +coherent/IY +coherer/M +cohesion/MS +cohesiveness/SM +cohesive/PY +Cohn/M +cohoes +coho/MS +cohort/SM +coiffed +coiffing +coiffure/MGSD +coif/SM +coil/UGSAD +Coimbatore/M +coinage's/A +coinage/SM +coincide/GSD +coincidence/MS +coincidental/Y +coincident/Y +coined/U +coiner/M +coin/GZSDRM +coinsurance/SM +Cointon/M +cointreau +coital/Y +coitus/SM +coke/MGDS +Coke/MS +COL +COLA +colander/SM +Colan/M +Colas +cola/SM +colatitude/MS +Colbert/M +Colby/M +coldblooded +coldish +coldness/MS +cold/YRPST +Coleen/M +Cole/M +Coleman/M +Colene/M +Coleridge/M +coleslaw/SM +Colet/M +Coletta/M +Colette/M +coleus/SM +Colfax/M +Colgate/M +colicky +colic/SM +coliform +Colin/M +coliseum/SM +colitis/MS +collaborate/VGNXSD +collaboration/M +collaborative/SY +collaborator/SM +collage/MGSD +collagen/M +collapse/SDG +collapsibility/M +collapsible +collarbone/MS +collar/DMGS +collard/SM +collarless +collated/U +collateral/SYM +collate/SDVNGX +collation/M +collator/MS +colleague/SDGM +collectedness/M +collected/PY +collectible/S +collection/AMS +collective/SY +collectivism/SM +collectivist/MS +collectivity/MS +collectivization/MS +collectivize/DSG +collector/MS +collect/SAGD +Colleen/M +colleen/SM +college/SM +collegiality/S +collegian/SM +collegiate/Y +Collen/M +Collete/M +Collette/M +coll/G +collide/SDG +Collie/M +collie/MZSRD +collier/M +Collier/M +colliery/MS +collimate/C +collimated/U +collimates +collimating +collimation/M +collimator/M +collinear +collinearity/M +Colline/M +Collin/MS +collisional +collision/SM +collocate/XSDGN +collocation/M +colloidal/Y +colloid/MS +colloq +colloquialism/MS +colloquial/SY +colloquies +colloquium/SM +colloquy/M +collude/SDG +collusion/SM +collusive +collying +Colly/RM +Colman/M +Col/MY +Cologne/M +cologne/MSD +Colo/M +Colombia/M +Colombian/S +Colombo/M +colonelcy/MS +colonel/MS +colonialism/MS +colonialist/MS +colonial/SPY +colonist/SM +colonization/ACSM +colonize/ACSDG +colonized/U +colonizer/MS +colonizes/U +Colon/M +colonnade/MSD +colon/SM +colony/SM +colophon/SM +Coloradan/S +Coloradoan/S +Colorado/M +colorant/SM +coloration/EMS +coloratura/SM +colorblindness/S +colorblind/P +colored/USE +colorer/M +colorfastness/SM +colorfast/P +colorfulness/MS +colorful/PY +colorimeter/SM +colorimetry +coloring/M +colorization/S +colorize/GSD +colorizing/C +colorlessness/SM +colorless/PY +colors/EA +color/SRDMGZJ +colossal/Y +Colosseum/M +colossi +colossus/M +colostomy/SM +colostrum/SM +col/SD +colter/M +coltishness/M +coltish/PY +Colt/M +colt/MRS +Coltrane/M +Columbia/M +Columbian +Columbine/M +columbine/SM +Columbus/M +columnar +columnist/MS +columnize/GSD +column/SDM +Colver/M +Co/M +comae +comaker/SM +Comanche/MS +coma/SM +comatose +combatant/SM +combativeness/MS +combative/PY +combat/SVGMD +combed/U +comber/M +combinational/A +combination/ASM +combinatorial/Y +combinatoric/S +combinator/SM +combined/AU +combiner/M +combines/A +combine/ZGBRSD +combining/A +combo/MS +comb/SGZDRMJ +Combs/M +combusted +combustibility/SM +combustible/SI +combustion/MS +combustive +Comdex/M +Comdr/M +comeback/SM +comedian/SM +comedic +comedienne/SM +comedown/MS +comedy/SM +come/IZSRGJ +comeliness/SM +comely/TPR +comer/IM +comes/M +comestible/MS +cometary +cometh +comet/SM +comeuppance/SM +comfit's +comfit/SE +comfortability/S +comfortableness/MS +comfortable/U +comfortably/U +comforted/U +comforter/MS +comfort/ESMDG +comforting/YE +comfy/RT +comicality/MS +comical/Y +comic/MS +Cominform/M +comity/SM +com/LJRTZG +comm +Com/M +comma/MS +commandant/MS +commandeer/SDG +commander/M +commanding/Y +commandment/SM +commando/SM +command/SZRDMGL +commemorate/SDVNGX +commemoration/M +commemorative/YS +commemorator/S +commence/ALDSG +commencement/AMS +commencer/M +commendably +commendation/ASM +commendatory/A +commender/AM +commend/GSADRB +commensurable/I +commensurate/IY +commensurates +commensuration/SM +commentary/MS +commentate/GSD +commentator/SM +commenter/M +comment's +comment/SUGD +commerce/MGSD +commercialism/MS +commercialization/SM +commercialize/GSD +commercial/PYS +Commie +commie/SM +commingle/GSD +commiserate/VGNXSD +commiseration/M +commissariat/MS +commissar/MS +commissary/MS +commission/ASCGD +commissioner/SM +commission's/A +commitment/SM +commit/SA +committable +committal/MA +committals +committed/UA +committeeman/M +committeemen +committee/MS +committeewoman/M +committeewomen +committing/A +commode/MS +commodes/IE +commodiousness/MI +commodious/YIP +commodity/MS +commodore/SM +commonality/MS +commonalty/MS +commoner/MS +commonness/MSU +commonplaceness/M +commonplace/SP +common/RYUPT +commonsense +commons/M +Commons/M +commonweal/SHM +commonwealth/M +Commonwealth/M +commonwealths +Commonwealths +commotion/MS +communality/M +communal/Y +commune/XSDNG +communicability/MS +communicable/IU +communicably +communicant/MS +communicate/VNGXSD +communicational +communication/M +communicativeness/M +communicative/PY +communicator/SM +communion/M +Communion/SM +communique/S +communism/MS +Communism/S +communistic +communist/MS +Communist/S +communitarian/M +community/MS +communize/SDG +commutable/I +commutate/XVGNSD +commutation/M +commutative/Y +commutativity +commutator/MS +commute/BZGRSD +commuter/M +Comoros +compaction/M +compactness/MS +compactor/MS +compact/TZGSPRDY +companionableness/M +companionable/P +companionably +companion/GBSMD +companionship/MS +companionway/MS +company/MSDG +Compaq/M +comparabilities +comparability/IM +comparableness/M +comparable/P +comparably/I +comparativeness/M +comparative/PYS +comparator/SM +compare/GRSDB +comparer/M +comparison/MS +compartmental +compartmentalization/SM +compartmentalize/DSG +compartment/SDMG +compassionateness/M +compassionate/PSDGY +compassion/MS +compass/MSDG +compatibility/IMS +compatibleness/M +compatible/SI +compatibly/I +compatriot/SM +compeer/DSGM +compellable +compelled +compelling/YM +compel/S +compendious +compendium/MS +compensable +compensated/U +compensate/XVNGSD +compensation/M +compensator/M +compensatory +compete/GSD +competence/ISM +competency/IS +competency's +competent/IY +competition/SM +competitiveness/SM +competitive/YP +competitor/MS +comp/GSYD +compilable/U +compilation/SAM +compile/ASDCG +compiler/CS +compiler's +complacence/S +complacency/SM +complacent/Y +complainant/MS +complainer/M +complain/GZRDS +complaining/YU +complaint/MS +complaisance/SM +complaisant/Y +complected +complementariness/M +complementarity +complementary/SP +complementation/M +complementer/M +complement/ZSMRDG +complete/BTYVNGPRSDX +completed/U +completely/I +completeness/ISM +completer/M +completion/MI +complexional +complexion/DMS +complexity/MS +complexness/M +complex/TGPRSDY +compliance/SM +compliant/Y +complicatedness/M +complicated/YP +complicate/SDG +complication/M +complicator/SM +complicit +complicity/MS +complier/M +complimentary/U +complimenter/M +compliment/ZSMRDG +comply/ZXRSDNG +component/SM +comport/GLSD +comportment/SM +compose/CGASDE +composedness/M +composed/PY +composer/CM +composers +composite/YSDXNG +compositional/Y +composition/CMA +compositions/C +compositor/MS +compost/DMGS +composure/ESM +compote/MS +compounded/U +compounder/M +compound/RDMBGS +comprehend/DGS +comprehending/U +comprehensibility/SIM +comprehensibleness/IM +comprehensible/PI +comprehensibly/I +comprehension/IMS +comprehensiveness/SM +comprehensive/YPS +compressed/Y +compressibility/IM +compressible/I +compressional +compression/CSM +compressive/Y +compressor/MS +compress/SDUGC +comprise/GSD +compromiser/M +compromise/SRDGMZ +compromising/UY +Compton/M +comptroller/SM +compulsion/SM +compulsiveness/MS +compulsive/PYS +compulsivity +compulsorily +compulsory/S +compunction/MS +Compuserve/M +CompuServe/M +computability/M +computable/UI +computably +computational/Y +computation/SM +computed/A +computerese +computerization/MS +computerize/SDG +computer/M +compute/RSDZBG +computes/A +computing/A +comradely/P +comradeship/MS +comrade/YMS +Comte/M +Conakry/M +Conan/M +Conant/M +concatenate/XSDG +concaveness/MS +concave/YP +conceal/BSZGRDL +concealed/U +concealer/M +concealing/Y +concealment/MS +conceded/Y +conceitedness/SM +conceited/YP +conceit/SGDM +conceivable/IU +conceivably/I +conceive/BGRSD +conceiver/M +concentrate/VNGSDX +concentration/M +concentrator/MS +concentrically +Concepcin/M +conceptional +conception/MS +concept/SVM +conceptuality/M +conceptualization/A +conceptualizations +conceptualization's +conceptualize/DRSG +conceptualizing/A +conceptual/Y +concerned/YU +concern/USGD +concerted/PY +concert/EDSG +concertina/MDGS +concertize/GDS +concertmaster/MS +concerto/SM +concert's +concessionaire/SM +concessional +concessionary +concession/R +Concetta/M +Concettina/M +Conchita/M +conch/MDG +conchs +concierge/SM +conciliar +conciliate/GNVX +conciliation/ASM +conciliator/MS +conciliatory/A +conciseness/SM +concise/TYRNPX +concision/M +conclave/S +concluder/M +conclude/RSDG +conclusion/SM +conclusive/IPY +conclusiveness/ISM +concocter/M +concoction/SM +concoct/RDVGS +concomitant/YS +concordance/MS +concordant/Y +concordat/SM +Concorde/M +Concordia/M +Concord/MS +concourse +concreteness/MS +concrete/NGXRSDPYM +concretion/M +concubinage/SM +concubine/SM +concupiscence/SM +concupiscent +concurrence/MS +concur/S +concussion/MS +concuss/VD +condemnate/XN +condemnation/M +condemnatory +condemner/M +condemn/ZSGRDB +condensate/NMXS +condensation/M +condenser/M +condense/ZGSD +condensible +condescend +condescending/Y +condescension/MS +condign +condiment/SM +condition/AGSJD +conditionals +conditional/UY +conditioned/U +conditioner/MS +conditioning/M +condition's +condole +condolence/MS +condominium/MS +condom/SM +condone/GRSD +condoner/M +Condorcet/M +condor/MS +condo/SM +conduce/VGSD +conduciveness/M +conducive/P +conductance/SM +conductibility/SM +conductible +conduction/MS +conductive/Y +conductivity/MS +conductor/MS +conductress/MS +conduct/V +conduit/MS +coneflower/M +Conestoga +coney's +confabbed +confabbing +confab/MS +confabulate/XSDGN +confabulation/M +confectioner/M +confectionery/SM +confectionist +confection/RDMGZS +confect/S +Confederacy/M +confederacy/MS +confederate/M +Confederate/S +conferee/MS +conference/DSGM +conferrable +conferral/SM +conferred +conferrer/SM +conferring +confer/SB +confessed/Y +confessional/SY +confession/MS +confessor/SM +confetti/M +confidante/SM +confidant/SM +confidence/SM +confidentiality/MS +confidentialness/M +confidential/PY +confident/Y +confider/M +confide/ZGRSD +confiding/PY +configuration/ASM +configure/AGSDB +confined/U +confine/L +confinement/MS +confiner/M +confirm/AGDS +confirmation/ASM +confirmatory +confirmedness/M +confirmed/YP +confiscate/DSGNX +confiscation/M +confiscator/MS +confiscatory +conflagration/MS +conflate/NGSDX +conflation/M +conflicting/Y +conflict/SVGDM +confluence/MS +conformable/U +conformal +conformance/SM +conformational/Y +conform/B +conformer/M +conformism/SM +conformist/SM +conformities +conformity/MUI +confounded/Y +confound/R +confrre/MS +confrontational +confrontation/SM +confronter/M +confront/Z +Confucianism/SM +Confucian/S +Confucius/M +confusedness/M +confused/PY +confuse/RBZ +confusing/Y +confutation/MS +confute/GRSD +confuter/M +conga/MDG +congeal/GSDL +congealment/MS +congeniality/UM +congenial/U +congeries/M +conger/SM +congestion/MS +congest/VGSD +conglomerate/XDSNGVM +conglomeration/M +Cong/M +Congolese +Congo/M +congrats +congratulate/NGXSD +congratulation/M +congratulatory +congregate/DSXGN +congregational +Congregational +congregationalism/MS +congregationalist/MS +Congregationalist/S +congregation/M +congressional/Y +congressman/M +congressmen +Congress/MS +congress/MSDG +congresspeople +congressperson/S +congresswoman/M +congresswomen +Congreve/M +congruence/IM +congruences +congruency/M +congruential +congruent/YI +congruity/MSI +congruousness/IM +congruous/YIP +conicalness/M +conical/PSY +conic/S +conics/M +conifer/MS +coniferous +conjectural/Y +conjecture/GMDRS +conjecturer/M +conjoint +conjugacy +conjugal/Y +conjugate/XVNGYSDP +conjugation/M +conjunct/DSV +conjunctiva/MS +conjunctive/YS +conjunctivitis/SM +conjuration/MS +conjurer/M +conjure/RSDZG +conjuring/M +conker/M +conk/ZDR +Conley/M +Con/M +conman +connect/ADGES +connectedly/E +connectedness/ME +connected/U +connectible +Connecticut/M +connection/AME +connectionless +connections/E +connective/SYM +connectivity/MS +connector/MS +Connelly/M +Conner/M +Connery/M +connexion/MS +Conney/M +conn/GVDR +Connie/M +Conni/M +conniption/MS +connivance/MS +conniver/M +connive/ZGRSD +connoisseur/MS +Connor/SM +connotative/Y +Conn/RM +connubial/Y +Conny/M +conquerable/U +conquered/AU +conqueror/MS +conquer/RDSBZG +conquers/A +conquest/ASM +conquistador/MS +Conrade/M +Conrad/M +Conrado/M +Conrail/M +Conroy/M +Consalve/M +consanguineous/Y +consanguinity/SM +conscienceless +conscientiousness/MS +conscientious/YP +conscionable/U +consciousness/MUS +conscious/UYSP +conscription/SM +consecrated/AU +consecrates/A +consecrate/XDSNGV +consecrating/A +consecration/AMS +consecutiveness/M +consecutive/YP +consensus/SM +consenter/M +consenting/Y +consent/SZGRD +consequence +consequentiality/S +consequential/IY +consequentialness/M +consequently/I +consequent/PSY +conservancy/SM +conservationism +conservationist/SM +conservation/SM +conservatism/SM +conservativeness/M +Conservative/S +conservative/SYP +conservator/MS +conservatory/MS +con/SGM +considerable/I +considerables +considerably/I +considerateness/MSI +considerate/XIPNY +consideration/ASMI +considered/U +considerer/M +consider/GASD +considering/S +consign/ASGD +consignee/SM +consignment/SM +consist/DSG +consistence/S +consistency/IMS +consistent/IY +consistory/MS +consolable/I +Consolata/M +consolation/MS +consolation's/E +consolatory +consoled/U +consoler/M +console/ZBG +consolidated/AU +consolidate/NGDSX +consolidates/A +consolidation/M +consolidator/SM +consoling/Y +consomm/S +consonance/IM +consonances +consonantal +consonant/MYS +consortia +consortium/M +conspectus/MS +conspicuousness/IMS +conspicuous/YIP +conspiracy/MS +conspiratorial/Y +conspirator/SM +constable +Constable/M +constabulary/MS +constance +Constance/M +Constancia/M +constancy/IMS +Constancy/M +Constanta/M +Constantia/M +Constantina/M +Constantine/M +Constantin/M +Constantino/M +Constantinople/M +constant/IY +constants +constellation/SM +consternate/XNGSD +consternation/M +constipate/XDSNG +constipation/M +constituency/MS +constituent/SYM +constituted/A +constitute/NGVXDS +constitutes/A +constituting/A +Constitution +constitutionality's +constitutionality/US +constitutionally/U +constitutional/SY +constitution/AMS +constitutive/Y +constrain +constrainedly +constrained/U +constraint/MS +constriction/MS +constrictor/MS +constrict/SDGV +construable +construct/ASDGV +constructibility +constructible/A +constructional/Y +constructionist/MS +construction/MAS +constructions/C +constructiveness/SM +constructive/YP +constructor/MS +construe/GSD +Consuela/M +Consuelo/M +consular/S +consulate/MS +consul/KMS +consulship/MS +consultancy/S +consultant/MS +consultation/SM +consultative +consulted/A +consulter/M +consult/RDVGS +consumable/S +consumed/Y +consume/JZGSDB +consumerism/MS +consumerist/S +consumer/M +consuming/Y +consummate/DSGVY +consummated/U +consumption/SM +consumptive/YS +cont +contact/BGD +contacted/A +contact's/A +contacts/A +contagion/SM +contagiousness/MS +contagious/YP +containerization/SM +containerize/GSD +container/M +containment/SM +contain/SLZGBRD +contaminant/SM +contaminated/AU +contaminates/A +contaminate/SDCXNG +contaminating/A +contamination/CM +contaminative +contaminator/MS +contd +cont'd +contemn/SGD +contemplate/DVNGX +contemplation/M +contemplativeness/M +contemplative/PSY +contemporaneity/MS +contemporaneousness/M +contemporaneous/PY +contemptibleness/M +contemptible/P +contemptibly +contempt/M +contemptuousness/SM +contemptuous/PY +contentedly/E +contentedness/SM +contented/YP +content/EMDLSG +contention/MS +contentiousness/SM +contentious/PY +contently +contentment/ES +contentment's +conterminous/Y +contestable/I +contestant/SM +contested/U +contextualize/GDS +contiguity/MS +contiguousness/M +contiguous/YP +continence/ISM +Continental/S +continental/SY +continent/IY +Continent/M +continents +continent's +contingency/SM +contingent/SMY +continua +continuable +continual/Y +continuance/ESM +continuant/M +continuation/ESM +continue/ESDG +continuer/M +continuity/SEM +continuousness/M +continuous/YE +continuum/M +contortionist/SM +contortion/MS +contort/VGD +contour +contraband/SM +contrabass/M +contraception/SM +contraceptive/S +contract/DG +contractible +contractile +contractual/Y +contradict/GDS +contradiction/MS +contradictorily +contradictoriness/M +contradictory/PS +contradistinction/MS +contraflow/S +contrail/M +contraindicate/SDVNGX +contraindication/M +contralto/SM +contrapositive/S +contraption/MS +contrapuntal/Y +contrariety/MS +contrarily +contrariness/MS +contrariwise +contrary/PS +contra/S +contrasting/Y +contrastive/Y +contrast/SRDVGZ +contravene/GSRD +contravener/M +contravention/MS +Contreras/M +contretemps/M +contribute/XVNZRD +contribution/M +contributive/Y +contributorily +contributor/SM +contributory/S +contriteness/M +contrite/NXP +contrition/M +contrivance/SM +contriver/M +contrive/ZGRSD +control/CS +controllability/M +controllable/IU +controllably/U +controlled/CU +controller/SM +controlling/C +control's +controversialists +controversial/UY +controversy/MS +controvert/DGS +controvertible/I +contumacious/Y +contumacy/MS +contumelious +contumely/MS +contuse/NGXSD +contusion/M +conundrum/SM +conurbation/MS +convalesce/GDS +convalescence/SM +convalescent/S +convect/DSVG +convectional +convection/MS +convector +convene/ASDG +convener/MS +convenience/ISM +convenient/IY +conventicle/SM +conventionalism/M +conventionalist/M +conventionality/SUM +conventionalize/GDS +conventional/UY +convention/MA +conventions +convergence/MS +convergent +conversant/Y +conversationalist/SM +conversational/Y +conversation/SM +conversazione/M +converse/Y +conversion/AM +conversioning +converted/U +converter/MS +convert/GADS +convertibility's/I +convertibility/SM +convertibleness/M +convertible/PS +convexity/MS +convex/Y +conveyance/DRSGMZ +conveyancer/M +conveyancing/M +convey/BDGS +conveyor/MS +conviction/MS +convict/SVGD +convinced/U +convincer/M +convince/RSDZG +convincingness/M +convincing/PUY +conviviality/MS +convivial/Y +convoke/GSD +convolute/XDNY +convolution/M +convolve/C +convolved +convolves +convolving +convoy/GMDS +convulse/SDXVNG +convulsion/M +convulsiveness/M +convulsive/YP +Conway/M +cony/SM +coo/GSD +cookbook/SM +cooked/AU +Cooke/M +cooker/M +cookery/MS +cook/GZDRMJS +Cookie/M +cookie/SM +cooking/M +Cook/M +cookout/SM +cooks/A +cookware/SM +cooky's +coolant/SM +cooled/U +cooler/M +Cooley/M +coolheaded +Coolidge/M +coolie/MS +coolness/MS +cool/YDRPJGZTS +coon/MS! +coonskin/MS +cooperage/MS +cooperate/VNGXSD +cooperation/M +cooperativeness/SM +cooperative/PSY +cooperator/MS +cooper/GDM +Cooper/M +coop/MDRGZS +Coop/MR +coordinated/U +coordinateness/M +coordinate/XNGVYPDS +coordination/M +coordinator/MS +Coors/M +cootie/SM +coot/MS +copay/S +Copeland/M +Copenhagen/M +coper/M +Copernican +Copernicus/M +cope/S +copied/A +copier/M +copies/A +copilot/SM +coping/M +copiousness/SM +copious/YP +coplanar +Copland/M +Copley/M +copolymer/MS +copora +copped +Copperfield/M +copperhead/MS +copper/MSGD +copperplate/MS +coppersmith/M +coppersmiths +coppery +coppice's +copping +Coppola/M +copra/MS +coprolite/M +coprophagous +copse/M +cops/GDS +cop/SJMDRG +copter/SM +Coptic/M +copula/MS +copulate/XDSNGV +copulation/M +copulative/S +copybook/MS +copycat/SM +copycatted +copycatting +copyist/SM +copy/MZBDSRG +copyrighter/M +copyright/MSRDGZ +copywriter/MS +coquetry/MS +coquette/DSMG +coquettish/Y +Corabella/M +Corabelle/M +Corabel/M +coracle/SM +Coralie/M +Coraline/M +coralline +Coral/M +coral/SM +Coralyn/M +Cora/M +corbel/GMDJS +Corbet/M +Corbett/M +Corbie/M +Corbin/M +Corby/M +cordage/MS +corded/AE +Cordelia/M +Cordelie/M +Cordell/M +corder/AM +Cordey/M +cord/FSAEM +cordiality/MS +cordialness/M +cordial/PYS +Cordie/M +cordillera/MS +Cordilleras +Cordi/M +cording/MA +cordite/MS +cordless +Cord/M +Cordoba +cordon/DMSG +cordovan/SM +Cordula/M +corduroy/GDMS +Cordy/M +cored/A +Coreen/M +Corella/M +core/MZGDRS +Corenda/M +Corene/M +corer/M +corespondent/MS +Coretta/M +Corette/M +Corey/M +Corfu/M +corgi/MS +coriander/SM +Corie/M +Corilla/M +Cori/M +Corina/M +Corine/M +coring/M +Corinna/M +Corinne/M +Corinthian/S +Corinthians/M +Corinth/M +Coriolanus/M +Coriolis/M +Corissa/M +Coriss/M +corked/U +corker/M +cork/GZDRMS +Cork/M +corkscrew/DMGS +corks/U +Corliss/M +Corly/M +Cormack/M +corm/MS +cormorant/MS +Cornall/M +cornball/SM +cornbread/S +corncob/SM +corncrake/M +corneal +cornea/SM +Corneille/M +Cornela/M +Cornelia/M +Cornelius/M +Cornelle/M +Cornell/M +corner/GDM +cornerstone/MS +cornet/SM +Corney/M +cornfield/SM +cornflake/S +cornflour/M +cornflower/SM +corn/GZDRMS +cornice/GSDM +Cornie/M +cornily +corniness/S +Cornish/S +cornmeal/S +cornrow/GDS +cornstalk/MS +cornstarch/SM +cornucopia/MS +Cornwallis/M +Cornwall/M +Corny/M +corny/RPT +corolla/MS +corollary/SM +Coronado/M +coronal/MS +coronary/S +corona/SM +coronate/NX +coronation/M +coroner/MS +coronet/DMS +Corot/M +coroutine/SM +Corp +corporal/SYM +corpora/MS +corporate/INVXS +corporately +corporation/MI +corporatism/M +corporatist +corporeality/MS +corporeal/IY +corporealness/M +corp/S +corpse/M +corpsman/M +corpsmen +corps/SM +corpulence/MS +corpulentness/S +corpulent/YP +corpuscle/SM +corpuscular +corpus/M +corr +corralled +corralling +corral/MS +correctable/U +correct/BPSDRYTGV +corrected/U +correctional +correction/MS +corrective/YPS +correctly/I +correctness/MSI +corrector/MS +Correggio/M +correlated/U +correlate/SDXVNG +correlation/M +correlative/YS +Correna/M +correspond/DSG +correspondence/MS +correspondent/SM +corresponding/Y +Correy/M +Corrianne/M +corridor/SM +Corrie/M +corrigenda +corrigendum/M +corrigible/I +Corri/M +Corrina/M +Corrine/M +Corrinne/M +corroborated/U +corroborate/GNVXDS +corroboration/M +corroborative/Y +corroborator/MS +corroboratory +corrode/SDG +corrodible +corrosion/SM +corrosiveness/M +corrosive/YPS +corrugate/NGXSD +corrugation/M +corrupt/DRYPTSGV +corrupted/U +corrupter/M +corruptibility/SMI +corruptible/I +corruption/IM +corruptions +corruptive/Y +corruptness/MS +Corry/M +corsage/MS +corsair/SM +corset/GMDS +Corsica/M +Corsican/S +cortge/MS +Cortes/S +cortex/M +Cortez's +cortical/Y +cortices +corticosteroid/SM +Cortie/M +cortisone/SM +Cortland/M +Cort/M +Cortney/M +Corty/M +corundum/MS +coruscate/XSDGN +coruscation/M +Corvallis/M +corvette/MS +Corvus/M +Cory/M +Cos +Cosby/M +Cosetta/M +Cosette/M +cos/GDS +cosignatory/MS +cosign/SRDZG +cosily +Cosimo/M +cosine/MS +cosiness/MS +Cosme/M +cosmetically +cosmetician/MS +cosmetic/SM +cosmetologist/MS +cosmetology/MS +cosmic +cosmical/Y +cosmogonist/MS +cosmogony/SM +cosmological/Y +cosmologist/MS +cosmology/SM +Cosmo/M +cosmonaut/MS +cosmopolitanism/MS +cosmopolitan/SM +cosmos/SM +cosponsor/DSG +cossack/S +Cossack/SM +cosset/GDS +Costa/M +Costanza/M +costarred +costarring +costar/S +Costello/M +costiveness/M +costive/PY +costless +costliness/SM +costly/RTP +cost/MYGVJS +Costner/M +costumer/M +costume/ZMGSRD +cotangent/SM +Cote/M +cote/MS +coterie/MS +coterminous/Y +cotillion/SM +Cotonou/M +Cotopaxi/M +cot/SGMD +cottager/M +cottage/ZMGSRD +cottar's +cotted +cotter/SDM +cotton/GSDM +Cotton/M +cottonmouth/M +cottonmouths +cottonseed/MS +cottontail/SM +cottonwood/SM +cottony +cotyledon/MS +couching/M +couch/MSDG +cougar/MS +cougher/M +cough/RDG +coughs +couldn't +could/T +could've +coule/MS +Coulomb/M +coulomb/SM +councilman/M +councilmen +councilor/MS +councilperson/S +council/SM +councilwoman/M +councilwomen +counsel/GSDM +counsellings +counselor/MS +countability/E +countable/U +countably/U +countdown/SM +counted/U +count/EGARDS +countenance/EGDS +countenancer/M +countenance's +counteract/DSVG +counteraction/SM +counterargument/SM +counterattack/DRMGS +counterbalance/MSDG +counterclaim/GSDM +counterclockwise +counterculture/MS +countercyclical +counterespionage/MS +counterexample/S +counterfeiter/M +counterfeit/ZSGRD +counterflow +counterfoil/MS +counterforce/M +counter/GSMD +counterinsurgency/MS +counterintelligence/MS +counterintuitive +countermand/DSG +counterman/M +countermeasure/SM +countermen +counteroffensive/SM +counteroffer/SM +counterpane/SM +counterpart/SM +counterpoint/GSDM +counterpoise/GMSD +counterproductive +counterproposal/M +counterrevolutionary/MS +counterrevolution/MS +counter's/E +counters/E +countersignature/MS +countersign/SDG +countersink/SG +counterspy/MS +counterstrike +countersunk +countertenor/SM +countervail/DSG +counterweight/GMDS +countess/MS +countless/Y +countrify/D +countryman/M +countrymen +country/MS +countryside/MS +countrywide +countrywoman/M +countrywomen +county/SM +coup/ASDG +coupe/MS +Couperin/M +couple/ACU +coupled/CU +coupler/C +couplers +coupler's +couple's +couples/CU +couplet/SM +coupling's/C +coupling/SM +coupon/SM +coup's +courage/MS +courageously +courageousness/MS +courageous/U +courages/E +Courbet/M +courgette/MS +courier/GMDS +course/EGSRDM +courser's/E +courser/SM +course's/AF +courses/FA +coursework +coursing/M +Courtenay/M +courteousness/EM +courteousnesses +courteous/PEY +courtesan/MS +courtesied +courtesy/ESM +courtesying +court/GZMYRDS +courthouse/MS +courtier/SM +courtliness/MS +courtly/RTP +Court/M +Courtnay/M +Courtney/M +courtroom/MS +courtship/SM +courtyard/SM +couscous/MS +cousinly/U +cousin/YMS +Cousteau/M +couture/SM +couturier/SM +covalent/Y +covariance/SM +covariant/S +covariate/SN +covary +cove/DRSMZG +covenanted/U +covenanter/M +covenant/SGRDM +coven/SM +Covent/M +Coventry/MS +coverable/E +cover/AEGUDS +coverage/MS +coverall/DMS +coverer/AME +covering/MS +coverlet/MS +coversheet +covers/M +covertness/SM +covert/YPS +coveter/M +coveting/Y +covetousness/SM +covetous/PY +covet/SGRD +covey/SM +covington +cowardice/MS +cowardliness/MS +cowardly/P +Coward/M +coward/MYS +cowbell/MS +cowbird/MS +cowboy/MS +cowcatcher/SM +cowed/Y +cowering/Y +cower/RDGZ +cowgirl/MS +cowhand/S +cowherd/SM +cowhide/MGSD +Cowley/M +cowlick/MS +cowling/M +cowl/SGMD +cowman/M +cow/MDRSZG +cowmen +coworker/MS +Cowper/M +cowpoke/MS +cowpony +cowpox/MS +cowpuncher/M +cowpunch/RZ +cowrie/SM +cowshed/SM +cowslip/MS +coxcomb/MS +Cox/M +cox/MDSG +coxswain/GSMD +coy/CDSG +coyer +coyest +coyly +Coy/M +coyness/MS +coyote/SM +coypu/SM +cozenage/MS +cozen/SGD +cozily +coziness/MS +Cozmo/M +Cozumel/M +cozy/DSRTPG +CPA +cpd +CPI +cpl +Cpl +CPO +CPR +cps +CPU/SM +crabapple +crabbedness/M +crabbed/YP +Crabbe/M +crabber/MS +crabbily +crabbiness/S +crabbing/M +crabby/PRT +crabgrass/S +crablike +crab/MS +crackable/U +crackdown/MS +crackerjack/S +cracker/M +crackle/GJDS +crackling/M +crackly/RT +crackpot/SM +crackup/S +crack/ZSBYRDG +cradler/M +cradle/SRDGM +cradling/M +craftily +craftiness/SM +Craft/M +craft/MRDSG +craftsman/M +craftsmanship/SM +craftsmen +craftspeople +craftspersons +craftswoman +craftswomen +crafty/TRP +Craggie/M +cragginess/SM +Craggy/M +craggy/RTP +crag/SM +Craig/M +Cramer/M +crammed +crammer/M +cramming +cramper/M +cramp/MRDGS +crampon/SM +cram/S +Cranach/M +cranberry/SM +Crandall/M +crane/DSGM +cranelike +Crane/M +Cranford/M +cranial +cranium/MS +crankcase/MS +crankily +crankiness/MS +crank/SGTRDM +crankshaft/MS +cranky/TRP +Cranmer/M +cranny/DSGM +Cranston/M +crape/SM +crapped +crappie/M +crapping +crappy/RST +crapshooter/SM +crap/SMDG! +crasher/M +crashing/Y +crash/SRDGZ +crassness/MS +crass/TYRP +crate/DSRGMZ +crater/DMG +Crater/M +cravat/SM +cravatted +cravatting +crave/DSRGJ +cravenness/SM +craven/SPYDG +craver/M +craving/M +crawdad/S +crawfish's +Crawford/M +crawler/M +crawl/RDSGZ +crawlspace/S +crawlway +crawly/TRS +craw/SYM +crayfish/GSDM +Crayola/M +crayon/GSDM +Cray/SM +craze/GMDS +crazily +craziness/MS +crazy/SRTP +creakily +creakiness/SM +creak/SDG +creaky/PTR +creamer/M +creamery/MS +creamily +creaminess/SM +cream/SMRDGZ +creamy/TRP +creased/CU +crease/IDRSG +crease's +creases/C +creasing/C +created/U +create/XKVNGADS +creationism/MS +creationist/MS +Creation/M +creation/MAK +creativeness/SM +creative/YP +creativities +creativity/K +creativity's +Creator/M +creator/MS +creatureliness/M +creaturely/P +creature/YMS +crche/SM +credence/MS +credent +credential/SGMD +credenza/SM +credibility/IMS +credible/I +credibly/I +creditability/M +creditableness/M +creditable/P +creditably/E +credited/U +credit/EGBSD +creditor/MS +credit's +creditworthiness +credo/SM +credulity/ISM +credulous/IY +credulousness/SM +creedal +creed/C +creeds +creed's +creekside +creek/SM +Creek/SM +creel/SMDG +Cree/MDS +creeper/M +creepily +creepiness/SM +creep/SGZR +creepy/PRST +Creigh/M +Creight/M +Creighton/M +cremate/XDSNG +cremation/M +crematoria +crematorium/MS +crematory/S +creme/S +crenelate/XGNSD +crenelation/M +Creole/MS +creole/SM +Creon/M +creosote/MGDS +crepe/DSGM +crept +crescendoed +crescendoing +crescendo/SCM +crescent/MS +cress/S +crestfallenness/M +crestfallen/PY +cresting/M +crestless +crest/SGMD +Crestview/M +cretaceous +Cretaceously/M +Cretaceous/Y +Cretan/S +Crete/M +cretinism/MS +cretin/MS +cretinous +cretonne/SM +crevasse/DSMG +crevice/SM +crew/DMGS +crewel/SM +crewelwork/SM +crewman/M +crewmen +cribbage/SM +cribbed +cribber/SM +cribbing/M +crib/SM +Crichton/M +cricketer/M +cricket/SMZRDG +crick/GDSM +Crick/M +cried/C +crier/CM +cries/C +Crimea/M +Crimean +crime/GMDS +criminality/MS +criminalization/C +criminalize/GC +criminal/SYM +criminologist/SM +criminology/MS +crimper/M +crimp/RDGS +crimson/DMSG +cringer/M +cringe/SRDG +crinkle/DSG +crinkly/TRS +Crin/M +crinoline/SM +cripple/GMZDRS +crippler/M +crippling/Y +Crisco/M +crises +crisis/M +Cris/M +crisper/M +crispiness/SM +crispness/MS +crisp/PGTYRDS +crispy/RPT +criss +crisscross/GDS +Crissie/M +Crissy/M +Cristabel/M +Cristal/M +Crista/M +Cristen/M +Cristian/M +Cristiano/M +Cristie/M +Cristi/M +Cristina/M +Cristine/M +Cristin/M +Cristionna/M +Cristobal/M +Cristy/M +criteria +criterion/M +criticality +critically/U +criticalness/M +critical/YP +criticism/MS +criticized/U +criticize/GSRDZ +criticizer/M +criticizes/A +criticizingly/S +criticizing/UY +critic/MS +critique/MGSD +critter/SM +Cr/M +croaker/M +croak/SRDGZ +croaky/RT +Croatia/M +Croatian/S +Croat/SM +Croce/M +crocheter/M +crochet/RDSZJG +crockery/SM +Crockett/M +Crockpot/M +crock/SGRDM +crocodile/MS +crocus/SM +Croesus/SM +crofter/M +croft/MRGZS +croissant/MS +Croix/M +Cromwellian +Cromwell/M +crone/SM +Cronin/M +Cronkite/M +Cronus/M +crony/SM +crookedness/SM +crooked/TPRY +Crookes/M +crookneck/MS +crook/SGDM +crooner/M +croon/SRDGZ +cropland/MS +crop/MS +cropped +cropper/SM +cropping +croquet/MDSG +croquette/SM +Crosby/M +crosier/SM +crossarm +crossbarred +crossbarring +crossbar/SM +crossbeam/MS +crossbones +crossbowman/M +crossbowmen +crossbow/SM +crossbred/S +crossbreed/SG +crosscheck/SGD +crosscurrent/SM +crosscut/SM +crosscutting +crossed/UA +crosses/UA +crossfire/SM +crosshatch/GDS +crossing/M +Cross/M +crossness/MS +crossover/MS +crosspatch/MS +crosspiece/SM +crosspoint +crossproduct/S +crossroad/GSM +crossroads/M +crosstalk/M +crosstown +crosswalk/MS +crossway/M +crosswind/SM +crosswise +crossword/MS +cross/ZTYSRDMPBJG +crotchetiness/M +crotchet/MS +crotchety/P +crotchless +crotch/MDS +crouch/DSG +croupier/M +croup/SMDG +croupy/TZR +croton/MS +crowbait +crowbarred +crowbarring +crowbar/SM +crowdedness/M +crowded/P +crowd/MRDSG +crowfeet +crowfoot/M +crow/GDMS +Crowley/M +crowned/U +crowner/M +crown/RDMSJG +crozier's +CRT/S +crucial/Y +crucible/MS +crucifiable +crucifixion/MS +Crucifixion/MS +crucifix/SM +cruciform/S +crucify/NGDS +crudded +crudding +cruddy/TR +crudeness/MS +crude/YSP +crudits +crudity/MS +crud/STMR +cruelness/MS +cruelty/SM +cruel/YRTSP +cruet/MS +cruft +crufty +Cruikshank/M +cruise/GZSRD +cruiser/M +cruller/SM +crumb/GSYDM +crumble/DSJG +crumbliness/MS +crumbly/PTRS +crumby/RT +crumminess/S +crummy/SRTP +crump +crumpet/SM +crumple/DSG +crunch/DSRGZ +crunchiness/MS +crunchy/TRP +crupper/MS +crusade/GDSRMZ +crusader/M +cruse/MS +crushable/U +crusher/M +crushing/Y +crushproof +crush/SRDBGZ +Crusoe/M +crustacean/MS +crustal +crust/GMDS +crustily +crustiness/SM +crusty/SRTP +crutch/MDSG +Crux/M +crux/MS +Cruz/M +crybaby/MS +cry/JGDRSZ +cryogenic/S +cryogenics/M +cryostat/M +cryosurgery/SM +cryptanalysis/M +cryptanalyst/M +cryptanalytic +crypt/CS +cryptic +cryptically +cryptogram/MS +cryptographer/MS +cryptographic +cryptographically +cryptography/MS +cryptologic +cryptological +cryptologist/M +cryptology/M +Cryptozoic/M +crypt's +crystalline/S +crystallite/SM +crystallization/AMS +crystallized/UA +crystallizes/A +crystallize/SRDZG +crystallizing/A +crystallographer/MS +crystallographic +crystallography/M +Crystal/M +crystal/SM +Crysta/M +Crystie/M +Cs +C's +cs/EA +cs's +CST +ct +CT +Cthrine/M +Ct/M +ctn +ctr +Cuba/M +Cuban/S +cubbed +cubbing +cubbyhole/MS +cuber/M +cube/SM +cubical/Y +cubicle/SM +cubic/YS +cubism/SM +cubist/MS +cubit/MS +cub/MDRSZG +cuboid +Cuchulain/M +cuckold/GSDM +cuckoldry/MS +cuckoo/SGDM +cucumber/MS +cuddle/GSD +cuddly/TRP +cu/DG +cudgel/GSJMD +cud/MS +cue/MS +cuff/GSDM +Cuisinart/M +cuisine/MS +Culbertson/M +culinary +Cullan/M +cull/DRGS +cullender's +Cullen/M +culler/M +Culley/M +Cullie/M +Cullin/M +Cull/MN +Cully/M +culminate/XSDGN +culmination/M +culotte/S +culpability/MS +culpable/I +culpableness/M +culpably +culpa/SM +culprit/SM +cultism/SM +cultist/SM +cultivable +cultivated/U +cultivate/XBSDGN +cultivation/M +cultivator/SM +cult/MS +cultural/Y +cultured/U +culture/SDGM +Culver/MS +culvert/SM +Cu/M +cumber/DSG +Cumberland/M +cumbersomeness/MS +cumbersome/YP +cumbrous +cumin/MS +cummerbund/MS +Cummings +cumquat's +cum/S +cumulate/XVNGSD +cumulation/M +cumulative/Y +cumuli +cumulonimbi +cumulonimbus/M +cumulus/M +Cunard/M +cuneiform/S +cunnilingus/SM +Cunningham/M +cunningness/M +cunning/RYSPT +cunt/SM! +cupboard/SM +cupcake/SM +Cupertino/M +cupful/SM +cupidinously +cupidity/MS +Cupid/M +cupid/S +cup/MS +cupola/MDGS +cupped +cupping/M +cupric +cuprous +curability/MS +curable/IP +curableness/MI +curably/I +Curacao/M +curacy/SM +curare/MS +curate/VGMSD +curative/YS +curatorial +curator/KMS +curbing/M +curbside +curb/SJDMG +curbstone/MS +Curcio/M +curdle/SDG +curd/SMDG +cured/U +cure/KBDRSGZ +curer/MK +curettage/SM +curfew/SM +curfs +curiae +curia/M +cur/IBS +Curie/M +curie/SM +curiosity/SM +curio/SM +curiousness/SM +curious/TPRY +Curitiba/M +curium/MS +curler/SM +curlew/MS +curlicue/MGDS +curliness/SM +curling/M +curl/UDSG +curlycue's +curly/PRT +curmudgeon/MYS +Curran/M +currant/SM +curred/AFI +currency's +currency/SF +current/FSY +currently/A +currentness/M +Currey/M +curricle/M +curricula +curricular +curriculum/M +Currie/M +currier/M +Currier/M +curring/FAI +Curr/M +currycomb/DMGS +Curry/MR +curry/RSDMG +cur's +curs/ASDVG +curse/A +cursedness/M +cursed/YRPT +curse's +cursive/EPYA +cursiveness/EM +cursives +cursor/DMSG +cursorily +cursoriness/SM +cursory/P +curtailer/M +curtail/LSGDR +curtailment/SM +curtain/GSMD +Curtice/M +Curtis/M +Curt/M +curtness/MS +curtsey's +curtsy/SDMG +curt/TYRP +curvaceousness/S +curvaceous/YP +curvature/MS +curved/A +curved's +curve/DSGM +curvilinearity/M +curvilinear/Y +curving/M +curvy/RT +cushion/SMDG +Cushman/M +cushy/TR +cuspid/MS +cuspidor/MS +cusp/MS +cussedness/M +cussed/YP +cuss/EGDSR +cusses/F +cussing/F +cuss's +custard/MS +Custer/M +custodial +custodianship/MS +custodian/SM +custody/MS +customarily +customariness/M +customary/PS +customer/M +customhouse/S +customization/SM +customize/ZGBSRD +custom/SMRZ +cutaneous/Y +cutaway/SM +cutback/SM +cuteness/MS +cute/SPY +cutesy/RT +cuticle/SM +cutlass/MS +cutler/SM +cutlery/MS +cutlet/SM +cut/MRST +cutoff/MS +cutout/SM +cutter/SM +cutthroat/SM +cutting/MYS +cuttlebone/SM +cuttlefish/MS +cuttle/M +cutup/MS +cutworm/MS +Cuvier/M +Cuzco/M +CV +cw +cwt +Cyanamid/M +cyanate/M +cyanic +cyanide/GMSD +cyan/MS +cyanogen/M +Cybele/M +cybernetic/S +cybernetics/M +cyberpunk/S +cyberspace/S +Cybill/M +Cybil/M +Cyb/M +cyborg/S +Cyclades +cyclamen/MS +cycle/ASDG +cycler +cycle's +cycleway/S +cyclic +cyclical/SY +cycling/M +cyclist/MS +cyclohexanol +cycloidal +cycloid/SM +cyclometer/MS +cyclone/SM +cyclonic +cyclopean +cyclopedia/MS +cyclopes +Cyclopes +cyclops +Cyclops/M +cyclotron/MS +cyder/SM +cygnet/MS +Cygnus/M +cylinder/GMDS +cylindric +cylindrical/Y +Cy/M +cymbalist/MS +cymbal/SM +Cymbre/M +Cynde/M +Cyndia/M +Cyndie/M +Cyndi/M +Cyndy/M +cynical/UY +cynicism/MS +cynic/MS +cynosure/SM +Cynthea/M +Cynthia/M +Cynthie/M +Cynthy/M +cypher/MGSD +cypreses +cypress/SM +Cyprian +Cypriot/SM +Cyprus/M +Cyrano/M +Cyrille/M +Cyrillic +Cyrill/M +Cyrillus/M +Cyril/M +Cyrus/M +cystic +cyst/MS +cytochemistry/M +cytochrome/M +cytologist/MS +cytology/MS +cytolysis/M +cytoplasmic +cytoplasm/SM +cytosine/MS +cytotoxic +CZ +czarevitch/M +czarina/SM +czarism/M +czarist/S +czarship +czar/SM +Czech +Czechoslovakia/M +Czechoslovakian/S +Czechoslovak/S +Czechs +Czerniak/M +Czerny/M +D +DA +dabbed +dabber/MS +dabbing +dabbler/M +dabble/RSDZG +dab/S +Dacca's +dace/MS +Dacey/M +dacha/SM +Dachau/M +dachshund/SM +Dacia/M +Dacie/M +Dacron/MS +dactylic/S +dactyl/MS +Dacy/M +Dadaism/M +dadaism/S +Dadaist/M +dadaist/S +Dada/M +daddy/SM +Dade/M +dado/DMG +dadoes +dad/SM +Daedalus/M +Dael/M +daemonic +daemon/SM +Daffie/M +Daffi/M +daffiness/S +daffodil/MS +Daffy/M +daffy/PTR +daftness/MS +daft/TYRP +DAG +dagger/DMSG +Dag/M +Dagmar/M +Dagny/M +Daguerre/M +daguerreotype/MGDS +Dagwood/M +Dahlia/M +dahlia/MS +Dahl/M +Dahomey/M +Daile/M +dailiness/MS +daily/PS +Daimler/M +daintily +daintiness/MS +dainty/TPRS +daiquiri/SM +dairying/M +dairyland +dairymaid/SM +dairyman/M +dairymen +dairy/MJGS +dairywoman/M +dairywomen +Daisey/M +Daisie/M +Daisi/M +dais/SM +Daisy/M +daisy/SM +Dakar/M +Dakotan +Dakota/SM +Dale/M +Dalenna/M +dale/SMH +daleth/M +Daley/M +Dalhousie/M +Dalia/M +Dalian/M +Dalila/M +Dali/SM +Dallas/M +dalliance/SM +dallier/M +Dalli/MS +Dall/M +Dallon/M +dally/ZRSDG +Dal/M +Dalmatia/M +dalmatian/S +Dalmatian/SM +Daloris/M +Dalston/M +Dalt/M +Dalton/M +Daly/M +damageable +damaged/U +damage/MZGRSD +damager/M +damaging/Y +Damara/M +Damaris/M +Damascus/M +damask/DMGS +dame/SM +Dame/SMN +Damian/M +Damiano/M +Damien/M +Damion/M +Damita/M +dam/MDS +dammed +damming +dammit/S +damnably +damnation/MS +damnedest/MS +damned/TR +damn/GSBRD +damning/Y +Damocles/M +Damon/M +damped/U +dampener/M +dampen/RDZG +damper/M +dampness/MS +damp/SGZTXYRDNP +damselfly/MS +damsel/MS +damson/MS +Dana +Dana/M +Danbury/M +dancelike +dancer/M +dance/SRDJGZ +dandelion/MS +dander/DMGS +dandify/SDG +dandily +dandle/GSD +dandruff/MS +dandy/TRSM +Danelaw/M +Danella/M +Danell/M +Dane/SM +Danette/M +danger/DMG +Dangerfield/M +dangerousness/M +dangerous/YP +dangler/M +dangle/ZGRSD +dangling/Y +dang/SGZRD +Danial/M +Dania/M +Danica/M +Danice/M +Daniela/M +Daniele/M +Daniella/M +Danielle/M +Daniel/SM +Danielson/M +Danie/M +Danika/M +Danila/M +Dani/M +Danish +danish/S +Danita/M +Danit/M +dankness/MS +dank/TPYR +Danna/M +Dannel/M +Dannie/M +Danni/M +Dannye/M +Danny/M +danseuse/SM +Dan/SM +Dante/M +Danton/M +Danube/M +Danubian +Danville/M +Danya/M +Danyelle/M +Danyette/M +Danzig/M +Daphene/M +Daphna/M +Daphne/M +dapperness/M +dapper/PSTRY +dapple/SDG +Dara/M +Darbee/M +Darbie/M +Darb/M +Darby/M +Darcee/M +Darcey/M +Darcie/M +Darci/M +D'Arcy +Darcy/M +Darda/M +Dardanelles +daredevil/MS +daredevilry/S +Dareen/M +Darelle/M +Darell/M +Dare/M +Daren/M +darer/M +daresay +dare/ZGDRSJ +d'Arezzo +Daria/M +Darice/M +Darill/M +Dari/M +daringness/M +daring/PY +Darin/M +Dario/M +Darius/M +Darjeeling/M +darkener/M +darken/RDZG +dark/GTXYRDNSP +darkish +darkly/TR +darkness/MS +darkroom/SM +Darla/M +Darleen/M +Darlene/M +Darline/M +Darling/M +darlingness/M +Darlington/M +darling/YMSP +Darlleen/M +Dar/MNH +Darnall/M +darned/TR +Darnell/M +darner/M +darn/GRDZS +darning/M +Darn/M +Daron/M +DARPA/M +Darrelle/M +Darrell/M +Darrel/M +Darren/M +Darrick/M +Darrin/M +Darrow/M +Darryl/M +Darsey/M +Darsie/M +d'art +dartboard/SM +darter/M +Darth/M +Dartmouth/M +dart/MRDGZS +Darvon/M +Darwinian/S +Darwinism/MS +Darwinist/MS +Darwin/M +Darya/M +Daryle/M +Daryl/M +Daryn/M +Dasha/M +dashboard/SM +dasher/M +dash/GZSRD +dashiki/SM +dashing/Y +Dasie/M +Dasi/M +dastardliness/SM +dastardly/P +dastard/MYS +Dasya/M +DAT +database/DSMG +datafile +datagram/MS +data/M +Datamation/M +Datamedia/M +dataset/S +datedly +datedness +date/DRSMZGV +dated/U +dateless +dateline/DSMG +dater/M +Datha/M +dative/S +Datsun/M +datum/MS +dauber/M +daub/RDSGZ +Daugherty/M +daughter/MYS +Daumier/M +Daune/M +daunt/DSG +daunted/U +daunting/Y +dauntlessness/SM +dauntless/PY +dauphin/SM +Davao/M +Daveen/M +Dave/M +Daven/M +Davenport/M +davenport/MS +Daveta/M +Davey/M +Davida/M +Davidde/M +Davide/M +David/SM +Davidson/M +Davie/M +Davina/M +Davine/M +Davinich/M +Davin/M +Davis/M +Davita/M +davit/SM +Dav/MN +Davon/M +Davy/SM +dawdler/M +dawdle/ZGRSD +Dawes/M +Dawna/M +dawn/GSDM +Dawn/M +Dawson/M +daybed/S +daybreak/SM +daycare/S +daydreamer/M +daydream/RDMSZG +Dayle/M +daylight/GSDM +Day/M +Dayna/M +daysack +day/SM +daytime/SM +Dayton/M +dazed/PY +daze/DSG +dazzler/M +dazzle/ZGJRSD +dazzling/Y +db +DB +dbl +dB/M +DBMS +DC +DD +Ddene/M +DDS +DDT +DE +deacon/DSMG +deaconess/MS +deadbeat/SM +deadbolt/S +deadener/M +deadening/MY +deaden/RDG +deadhead/MS +deadline/MGDS +deadliness/SM +deadlock/MGDS +deadly/RPT +deadness/M +deadpanned +deadpanner +deadpanning +deadpan/S +dead/PTXYRN +deadwood/SM +deafening/MY +deafen/JGD +deafness/MS +deaf/TXPYRN +dealer/M +dealership/MS +dealing/M +deallocator +deal/RSGZJ +dealt +Deana/M +dean/DMG +Deandre/M +Deane/M +deanery/MS +Dean/M +Deanna/M +Deanne/M +Deann/M +deanship/SM +Dearborn/M +dearness/MS +dearth/M +dearths +dear/TYRHPS +deary/MS +deassign +deathbed/MS +deathblow/SM +deathless/Y +deathlike +deathly/TR +death/MY +deaths +deathtrap/SM +deathward +deathwatch/MS +debacle/SM +debarkation/SM +debark/G +debar/L +debarment/SM +debarring +debaser/M +debatable/U +debate/BMZ +debater/M +debauchedness/M +debauched/PY +debauchee/SM +debaucher/M +debauchery/SM +debauch/GDRS +Debbie/M +Debbi/M +Debby/M +Debee/M +debenture/MS +Debera/M +debilitate/NGXSD +debilitation/M +debility/MS +Debi/M +debit/DG +deb/MS +Deb/MS +debonairness/SM +debonair/PY +Deborah/M +Debora/M +Debor/M +debouch/DSG +Debra/M +debrief/GJ +debris/M +debtor/SM +debt/SM +Debussy/M +dbutante/SM +debut/MDG +decade/MS +decadency/S +decadent/YS +decaffeinate/DSG +decaf/S +decagon/MS +Decalogue/M +decal/SM +decamp/L +decampment/MS +decapitate/GSD +decapitator/SM +decathlon/SM +Decatur/M +decay/GRD +Decca/M +Deccan/M +decease/M +decedent/MS +deceitfulness/SM +deceitful/PY +deceit/SM +deceived/U +deceiver/M +deceives/U +deceive/ZGRSD +deceivingly +deceiving/U +decelerate/XNGSD +deceleration/M +decelerator/SM +December/SM +decency/ISM +decennial/SY +decent/TIYR +deception/SM +deceptiveness/SM +deceptive/YP +decertify/N +dechlorinate/N +decibel/MS +decidability/U +decidable/U +decidedness/M +decided/PY +decide/GRSDB +deciduousness/M +deciduous/YP +decile/SM +deciliter/SM +decimal/SYM +decimate/XNGDS +decimation/M +decimeter/MS +decipherable/IU +decipher/BRZG +decipherer/M +decisional +decisioned +decisioning +decision/ISM +decisive/IPY +decisiveness/MSI +deckchair +decker/M +Decker/M +deck/GRDMSJ +deckhand/S +decking/M +Deck/RM +declamation/SM +declamatory +declarable +declaration/MS +declaration's/A +declarative/SY +declarator/MS +declaratory +declare/AGSD +declared/U +declarer/MS +declension/SM +declination/MS +decliner/M +decline/ZGRSD +declivity/SM +Dec/M +DEC/M +DECNET +DECnet/M +deco +dcolletage/S +dcollet +decolletes +decolorising +decomposability/M +decomposable/IU +decompose/B +decompress/R +decongestant/S +deconstruction +deconvolution +decorated/AU +decorate/NGVDSX +decorates/A +decorating/A +decoration/ASM +decorativeness/M +decorative/YP +decorator/SM +decorousness/MS +decorousness's/I +decorous/PIY +decor/S +decorticate/GNDS +decortication/M +decorum/MS +decoupage/MGSD +decouple/G +decoy/M +decrease +decreasing/Y +decreeing +decree/RSM +decremental +decrement/DMGS +decrepit +decrepitude/SM +decriminalization/S +decriminalize/DS +decry/G +decrypt/GD +decryption +DECstation/M +DECsystem/M +DECtape/M +decustomised +Dedekind/M +Dede/M +dedicate/AGDS +dedicated/Y +dedication/MS +dedicative +dedicator/MS +dedicatory +Dedie/M +Dedra/M +deduce/RSDG +deducible +deductibility/M +deductible/S +deduction/SM +deductive/Y +deduct/VG +Deeanne/M +Deeann/M +deeded +Deedee/M +deeding +deed/IS +deed's +deejay/MDSG +Dee/M +deem/ADGS +deemphasis +Deena/M +deepen/DG +deepish +deepness/MS +deep/PTXSYRN +Deerdre/M +Deere/M +deerskin/MS +deer/SM +deerstalker/SM +deerstalking/M +Deeyn/M +deface/LZ +defacement/SM +defaecate +defalcate/NGXSD +defalcation/M +defamation/SM +defamatory +defamer/M +defame/ZR +defaulter/M +default/ZR +defeated/U +defeater/M +defeatism/SM +defeatist/SM +defeat/ZGD +defecate/DSNGX +defecation/M +defection/SM +defectiveness/MS +defective/PYS +defect/MDSVG +defector/MS +defendant/SM +defended/U +defenestrate/GSD +defenselessness/MS +defenseless/PY +defenses/U +defense/VGSDM +defensibility/M +defensible/I +defensibly/I +defensiveness/MS +defensive/PSY +deference/MS +deferential/Y +deferent/S +deferrable +deferral/SM +deferred +deferrer/MS +deferring +deffer +defiance/MS +defiant/Y +defibrillator/M +deficiency/MS +deficient/SY +deficit/MS +defier/M +defile/L +defilement/MS +definable/UI +definably/I +define/AGDRS +defined/U +definer/SM +definite/IPY +definiteness/IMS +definitional +definition/ASM +definitiveness/M +definitive/SYP +defis +deflate/XNGRSDB +deflationary +deflation/M +deflect/DSGV +deflected/U +deflection/MS +deflector/MS +defocus +defocussing +Defoe/M +defog +defogger/S +defoliant/SM +defoliator/SM +deformational +deform/B +deformed/U +deformity/SM +defrauder/M +defraud/ZGDR +defrayal/SM +defroster/M +defrost/RZ +deftness/MS +deft/TYRP +defunct/S +defying/Y +defy/RDG +def/Z +deg +Degas/M +degassing +degauss/GD +degeneracy/MS +degenerateness/M +degenerate/PY +degrade/B +degradedness/M +degraded/YP +degrading/Y +degrease +degree/SM +degum +Dehlia/M +dehumanize +dehydrator/MS +deicer/M +deice/ZR +deictic +Deidre/M +deification/M +deify/SDXGN +deign/DGS +Deimos/M +Deina/M +Deirdre/MS +deistic +deist/SM +Deity/M +deity/SM +deja +deject/DSG +dejectedness/M +dejected/PY +dejection/SM +Dejesus/M +DeKalb/M +DeKastere/M +Delacroix/M +Delacruz/M +Delainey/M +Dela/M +Delaney/M +Delano/M +Delawarean/SM +Delaware/MS +delay/D +delayer/G +Delbert/M +Delcina/M +Delcine/M +delectableness/M +delectable/SP +delectably +delectation/MS +delegable +Deleon/M +deleted/U +deleteriousness/M +deleterious/PY +delete/XBRSDNG +deletion/M +delfs +Delft/M +delft/MS +delftware/S +Delgado/M +Delhi/M +Delia/M +deliberateness/SM +deliberate/PVY +deliberativeness/M +deliberative/PY +Delibes/M +delicacy/IMS +delicate/IYP +delicatenesses +delicateness/IM +delicates +delicatessen/MS +deliciousness/MS +delicious/YSP +delicti +delightedness/M +delighted/YP +delightfulness/M +delightful/YP +Delilah/M +Delilahs +Delila/M +Delinda/M +delineate/SDXVNG +delineation/M +delinquency/MS +delinquent/SYM +deliquesce/GSD +deliquescent +deliriousness/MS +delirious/PY +delirium/SM +deli/SM +Delius/M +deliverables +deliverable/U +deliver/AGSD +deliverance/SM +delivered/U +deliverer/SM +delivery/AM +deliverymen/M +Della/M +Dell/M +dell/SM +Dellwood/M +Delly/M +Delmar/M +Delmarva/M +Delmer/M +Delmonico +Delmore/M +Delmor/M +Del/MY +Delora/M +Delores/M +Deloria/M +Deloris/M +Delphic +Delphi/M +Delphine/M +Delphinia/M +delphinium/SM +Delphinus/M +Delta/M +delta/MS +deltoid/SM +deluder/M +delude/RSDG +deluding/Y +deluge/SDG +delusional +delusion/SM +delusiveness/M +delusive/PY +deluxe +delve/GZSRD +delver/M +demagnify/N +demagogic +demagogue/GSDM +demagoguery/SM +demagogy/MS +demander/M +demand/GSRD +demandingly +demanding/U +demarcate/SDNGX +demarcation/M +Demavend/M +demean/GDS +demeanor/SM +dementedness/M +demented/YP +dementia/MS +Demerol/M +demesne/SM +Demeter/M +Demetra/M +Demetre/M +Demetria/M +Demetri/MS +Demetrius/M +demigod/MS +demijohn/MS +demimondaine/SM +demimonde/SM +demineralization/SM +Deming/M +demise/DMG +demit +demitasse/MS +demitted +demitting +Dem/MG +democracy/MS +Democratic +democratically/U +democratic/U +democratization/MS +democratize/DRSG +democratizes/U +Democrat/MS +democrat/SM +Democritus/M +dmod +demo/DMPG +demographer/MS +demographical/Y +demographic/S +demography/MS +demolisher/M +demolish/GSRD +demolition/MS +demonetization/S +demoniacal/Y +demoniac/S +demonic +demonology/M +demon/SM +demonstrable/I +demonstrableness/M +demonstrably/I +demonstrate/XDSNGV +demonstration/M +demonstrativenesses +demonstrativeness/UM +demonstratives +demonstrative/YUP +demonstrator/MS +demoralization/M +demoralizer/M +demoralizing/Y +DeMorgan/M +Demosthenes/M +demote/DGX +demotic/S +Demott/M +demount/B +Dempsey/M +demulcent/S +demultiplex +demureness/SM +demure/YP +demurral/MS +demurred +demurrer/MS +demurring +demur/RTS +demythologization/M +demythologize/R +den +Dena/M +dendrite/MS +Deneb/M +Denebola/M +Deneen/M +Dene/M +Deng/M +dengue/MS +deniable/U +denial/SM +Denice/M +denier/M +denigrate/VNGXSD +denigration/M +denim/SM +Denise/M +Deni/SM +denizen/SMDG +Den/M +De/NM +Denmark/M +Denna/M +denned +Dennet/M +Denney/M +Dennie/M +Denni/MS +denning +Dennison/M +Denny/M +denominate/V +denominational/Y +denote/B +denouement/MS +denounce/LZRSDG +denouncement/SM +denouncer/M +dense/FR +densely +denseness/SM +densitometer/MS +densitometric +densitometry/M +density/MS +dens/RT +dental/YS +dentifrice/SM +dentine's +dentin/SM +dent/ISGD +dentistry/MS +dentist/SM +dentition/MS +dent's +denture/IMS +denuclearize/GSD +denudation/SM +denude/DG +denuder/M +denunciate/VNGSDX +denunciation/M +Denver/M +denying/Y +Deny/M +Denys +Denyse/M +deny/SRDZG +deodorant/SM +deodorization/SM +deodorize/GZSRD +deodorizer/M +Deon/M +Deonne/M +deoxyribonucleic +depart/L +departmentalization/SM +departmentalize/DSG +departmental/Y +department/MS +departure/MS +dependability/MS +dependableness/M +dependable/P +dependably +Dependant/MS +depend/B +dependence/ISM +dependency/MS +dependent/IYS +dependent's +depicted/U +depicter/M +depiction/SM +depict/RDSG +depilatory/S +deplete/VGNSDX +depletion/M +deplorableness/M +deplorable/P +deplorably +deplorer/M +deplore/SRDBG +deploring/Y +deployable +deploy/AGDLS +deployment/SAM +depolarize +deponent/S +deportation/MS +deportee/SM +deport/LG +deportment/MS +depose +deposit/ADGS +depositary/M +deposition/A +depositor/SAM +depository/MS +depravedness/M +depraved/PY +deprave/GSRD +depraver/M +depravity/SM +deprecate/XSDNG +deprecating/Y +deprecation/M +deprecatory +depreciable +depreciate/XDSNGV +depreciating/Y +depreciation/M +depreciative/Y +depressant/S +depressible +depression/MS +depressive/YS +depressor/MS +depress/V +deprive/GSD +depth/M +depths +Dept/M +deputation/SM +depute/SDG +deputize/DSG +deputy/MS +dequeue +derail/L +drailleur/MS +derailment/MS +derange/L +derangement/MS +Derbyshire/M +derby/SM +Derby/SM +dereference/Z +Derek/M +dereliction/SM +derelict/S +Derick/M +deride/D +deriding/Y +derision/SM +derisiveness/MS +derisive/PY +derisory +derivable/U +derivate/XNV +derivation/M +derivativeness/M +derivative/SPYM +derive/B +derived/U +Derk/M +Der/M +dermal +dermatitides +dermatitis/MS +dermatological +dermatologist/MS +dermatology/MS +dermis/SM +Dermot/M +derogate/XDSNGV +derogation/M +derogatorily +derogatory +Derrek/M +Derrick/M +derrick/SMDG +Derrida/M +derrire/S +Derrik/M +Derril/M +derringer/SM +Derron/M +Derry/M +dervish/SM +Derward/M +Derwin/M +Des +desalinate/NGSDX +desalination/M +desalinization/MS +desalinize/GSD +desalt/G +descant/M +Descartes/M +descendant/SM +descended/FU +descendent's +descender/M +descending/F +descends/F +descend/ZGSDR +descent +describable/I +describe/ZB +description/MS +descriptiveness/MS +descriptive/SYP +descriptor/SM +descry/SDG +Desdemona/M +desecrater/M +desecrate/SRDGNX +desecration/M +deserter/M +desertification +desertion/MS +desert/ZGMRDS +deservedness/M +deserved/YU +deserve/J +deserving/Y +dshabill's +desiccant/S +desiccate/XNGSD +desiccation/M +desiccator/SM +desiderata +desideratum/M +designable +design/ADGS +designate/VNGSDX +designational +designation/M +designator/SM +designed/Y +designer/M +designing/U +Desi/M +desirabilia +desirability's +desirability/US +desirableness/SM +desirableness's/U +desirable/UPS +desirably/U +Desirae/M +desire/BR +desired/U +Desiree/M +desirer/M +Desiri/M +desirousness/M +desirous/PY +desist/DSG +desk/SM +desktop/S +Desmond/M +Desmund/M +desolateness/SM +desolate/PXDRSYNG +desolater/M +desolating/Y +desolation/M +desorption/M +despairer/M +despairing/Y +despair/SGDR +desperadoes +desperado/M +desperateness/SM +desperate/YNXP +desperation/M +despicable +despicably +despiser/M +despise/SRDG +despoil/L +despoilment/MS +despond +despondence/S +despondency/MS +despondent/Y +despotic +despotically +despotism/SM +dessert/SM +dessicate/DN +d'Estaing +destinate/NX +destination/M +destine/GSD +destiny/MS +destituteness/M +destitute/NXP +destitution/M +destroy/BZGDRS +destroyer/M +destructibility/SMI +destructible/I +destruction/SM +destructiveness/MS +destructive/YP +destructor/M +destruct/VGSD +desuetude/MS +desultorily +desultoriness/M +desultory/P +detachedness/M +detached/YP +detacher/M +detach/LSRDBG +detachment/SM +detailedness/M +detailed/YP +detainee/S +detainer/M +detain/LGRDS +detainment/MS +d'etat +detectability/U +detectable/U +detectably/U +detect/DBSVG +detected/U +detection/SM +detective/MS +detector/MS +dtente +detentes +detention/SM +detergency/M +detergent/SM +deteriorate/XDSNGV +deterioration/M +determent/SM +determinability/M +determinable/IP +determinableness/IM +determinacy/I +determinant/MS +determinateness/IM +determinate/PYIN +determination/IM +determinativeness/M +determinative/P +determinedly +determinedness/M +determined/U +determine/GASD +determiner/SM +determinism/MS +determinism's/I +deterministically +deterministic/I +deterred/U +deterrence/SM +deterrent/SMY +deterring +detersive/S +deter/SL +deters/V +detestableness/M +detestable/P +detestably +detestation/SM +dethrone/L +dethronement/SM +detonable +detonated/U +detonate/XDSNGV +detonation/M +detonator/MS +detour/G +detoxification/M +detoxify/NXGSD +detox/SDG +detract/GVD +detractive/Y +d'etre +detribalize/GSD +detrimental/SY +detriment/SM +detritus/M +Detroit/M +deuced/Y +deuce/SDGM +deus +deuterium/MS +deuteron/M +Deuteronomy/M +Deutsch/M +Deva/M +Devanagari/M +Devan/M +devastate/XVNGSD +devastating/Y +devastation/M +devastator/SM +develop/ALZSGDR +developed/U +developer/MA +developmental/Y +development/ASM +deviance/MS +deviancy/S +deviant/YMS +deviated/U +deviate/XSDGN +deviating/U +deviation/M +devilishness/MS +devilish/PY +devilment/SM +devilry/MS +devil/SLMDG +deviltry/MS +Devi/M +Devina/M +Devin/M +Devinne/M +deviousness/SM +devious/YP +devise/JR +deviser/M +Devland/M +Devlen/M +Devlin/M +Dev/M +devoice +devolution/MS +devolve/GSD +Devondra/M +Devonian +Devon/M +Devonna/M +Devonne/M +Devonshire/M +Devora/M +devoted/Y +devotee/MS +devote/XN +devotional/YS +devotion/M +devourer/M +devour/SRDZG +devoutness/MS +devout/PRYT +Devy/M +Dewain/M +dewar +Dewar/M +Dewayne/M +dewberry/MS +dewclaw/SM +dewdrop/MS +Dewey/M +Dewie/M +dewiness/MS +Dewitt/M +dewlap/MS +Dew/M +dew/MDGS +dewy/TPR +Dexedrine/M +dexes/I +Dex/M +dexter +dexterity/MS +Dexter/M +dexterousness/MS +dexterous/PY +dextrose/SM +DH +Dhaka +Dhaulagiri/M +dhoti/SM +dhow/MS +DI +diabase/M +diabetes/M +diabetic/S +diabolic +diabolicalness/M +diabolical/YP +diabolism/M +diachronic/P +diacritical/YS +diacritic/MS +diadem/GMDS +diaereses +diaeresis/M +Diaghilev/M +diagnometer/SM +diagnosable/U +diagnose/BGDS +diagnosed/U +diagnosis/M +diagnostically +diagnostician/SM +diagnostic/MS +diagnostics/M +diagonalize/GDSB +diagonal/YS +diagrammable +diagrammatic +diagrammaticality +diagrammatically +diagrammed +diagrammer/SM +diagramming +diagram/MS +Diahann/M +dialectal/Y +dialectical/Y +dialectic/MS +dialect/MS +dialed/A +dialer/M +dialing/M +dial/MRDSGZJ +dialogged +dialogging +dialog/MS +dialogue/DS +dials/A +dialysis/M +dialyzed/U +dialyzes +diam +diamagnetic +diameter/MS +diametric +diametrical/Y +diamondback/SM +diamond/GSMD +Diana/M +Diandra/M +Diane/M +Dianemarie/M +Dian/M +Dianna/M +Dianne/M +Diann/M +Diannne/M +diapason/MS +diaper/SGDM +diaphanousness/M +diaphanous/YP +diaphragmatic +diaphragm/SM +diarist/SM +Diarmid/M +diarrheal +diarrhea/MS +diary/MS +diaspora +Diaspora/SM +diastase/SM +diastole/MS +diastolic +diathermy/SM +diathesis/M +diatomic +diatom/SM +diatonic +diatribe/MS +Diaz's +dibble/SDMG +dibs +DiCaprio/M +dice/GDRS +dicer/M +dicey +dichloride/M +dichotomization/M +dichotomize/DSG +dichotomous/PY +dichotomy/SM +dicier +diciest +dicing/M +Dickensian/S +dickens/M +Dickens/M +dicker/DG +Dickerson/M +dickey/SM +dick/GZXRDMS! +Dickie/M +dickier +dickiest +Dickinson/M +Dickson/M +Dick/XM +Dicky/M +dicky's +dicotyledonous +dicotyledon/SM +dicta/M +Dictaphone/SM +dictate/SDNGX +dictation/M +dictatorialness/M +dictatorial/YP +dictator/MS +dictatorship/SM +dictionary/SM +diction/MS +dictum/M +didactically +didactic/S +didactics/M +did/AU +diddler/M +diddle/ZGRSD +Diderot/M +Didi/M +didn't +didoes +dido/M +Dido/M +didst +die/DS +Diefenbaker/M +Diego/M +dieing +dielectric/MS +diem +Diem/M +Diena/M +Dierdre/M +diereses +dieresis/M +diesel/GMDS +Diesel's +dies's +dies/U +dietary/S +dieter/M +Dieter/M +dietetic/S +dietetics/M +diethylaminoethyl +diethylstilbestrol/M +dietitian/MS +diet/RDGZSM +Dietrich/M +Dietz/M +difference/DSGM +difference's/I +differences/I +differentiability +differentiable +differential/SMY +differentiated/U +differentiate/XSDNG +differentiation/M +differentiator/SM +differentness +different/YI +differ/SZGRD +difficile +difficult/Y +difficulty/SM +diffidence/MS +diffident/Y +diffract/GSD +diffraction/SM +diffractometer/SM +diffuseness/MS +diffuse/PRSDZYVXNG +diffuser/M +diffusible +diffusional +diffusion/M +diffusiveness/M +diffusive/YP +diffusivity/M +digerati +digested/IU +digester/M +digestibility/MS +digestible/I +digestifs +digestion/ISM +digestive/YSP +digest/RDVGS +digger/MS +digging/S +digitalis/M +digitalization/MS +digitalized +digitalizes +digitalizing +digital/SY +digitization/M +digitizer/M +digitize/ZGDRS +digit/SM +dignified/U +dignify/DSG +dignitary/SM +dignity/ISM +digram +digraph/M +digraphs +digress/GVDS +digression/SM +digressiveness/M +digressive/PY +dig/TS +dihedral +Dijkstra/M +Dijon/M +dike/DRSMG +diker/M +diktat/SM +Dilan/M +dilapidate/XGNSD +dilapidation/M +dilatation/SM +dilated/YP +dilate/XVNGSD +dilation/M +dilatoriness/M +dilator/SM +dilatory/P +Dilbert/M +dilemma/MS +dilettante/MS +dilettantish +dilettantism/MS +diligence/SM +diligentness/M +diligent/YP +dilithium +Dillard/M +Dillie/M +Dillinger/M +dilling/R +dillis +Dill/M +Dillon/M +dill/SGMD +dillydally/GSD +Dilly/M +dilly/SM +dilogarithm +diluent +diluted/U +diluteness/M +dilute/RSDPXYVNG +dilution/M +Di/M +DiMaggio/M +dimensionality/M +dimensional/Y +dimensionless +dimension/MDGS +dimer/M +dime/SM +dimethylglyoxime +dimethyl/M +diminished/U +diminish/SDGBJ +diminuendo/SM +diminution/SM +diminutiveness/M +diminutive/SYP +Dimitri/M +Dimitry/M +dimity/MS +dimmed/U +dimmer/MS +dimmest +dimming +dimness/SM +dimorphism/M +dimple/MGSD +dimply/RT +dim/RYPZS +dimwit/MS +dimwitted +Dinah/M +Dina/M +dinar/SM +diner/M +dine/S +dinette/MS +dingbat/MS +ding/GD +dinghy/SM +dingily +dinginess/SM +dingle/MS +dingoes +dingo/MS +dingus/SM +dingy/PRST +dinky/RST +din/MDRZGS +dinned +dinner/SM +dinnertime/S +dinnerware/MS +Dinnie/M +dinning +Dinny/M +Dino/M +dinosaur/MS +dint/SGMD +diocesan/S +diocese/SM +Diocletian/M +diode/SM +Diogenes/M +Dione/M +Dionisio/M +Dionis/M +Dion/M +Dionne/M +Dionysian +Dionysus/M +Diophantine/M +diopter/MS +diorama/SM +Dior/M +dioxalate +dioxide/MS +dioxin/S +diphtheria/SM +diphthong/SM +diplexers +diploid/S +diplomacy/SM +diploma/SMDG +diplomata +diplomatically +diplomatic/S +diplomatics/M +diplomatist/SM +diplomat/MS +dipodic +dipody/M +dipole/MS +dipped +Dipper/M +dipper/SM +dipping/S +dippy/TR +dip/S +dipsomaniac/MS +dipsomania/SM +dipstick/MS +dipterous +diptych/M +diptychs +Dir +Dirac/M +directed/IUA +directionality +directional/SY +direction/MIS +directions/A +directive/SM +directivity/M +directly/I +directness/ISM +director/AMS +directorate/SM +directorial +directorship/SM +directory/SM +direct/RDYPTSVG +directrix/MS +directs/IA +direful/Y +direness/M +dire/YTRP +dirge/GSDM +Dirichlet/M +dirigible/S +dirk/GDMS +Dirk/M +dirndl/MS +dirtily +dirtiness/SM +dirt/MS +dirty/GPRSDT +Dis +disable/LZGD +disablement/MS +disabler/M +disabuse +disadvantaged/P +disagreeable/S +disallow/D +disambiguate/DSGNX +disappointed/Y +disappointing/Y +disarming/Y +disarrange/L +disastrous/Y +disband/L +disbandment/SM +disbar/L +disbarment/MS +disbarring +disbelieving/Y +disbursal/S +disburse/GDRSL +disbursement/MS +disburser/M +discerner/M +discernibility +discernible/I +discernibly +discerning/Y +discernment/MS +discern/SDRGL +disc/GDM +discharged/U +disciple/DSMG +discipleship/SM +disciplinarian/SM +disciplinary +disciplined/U +discipline/IDM +discipliner/M +disciplines +disciplining +disclosed/U +discography/MS +discolored/MP +discoloreds/U +discolor/G +discombobulate/SDGNX +discomfit/DG +discomfiture/MS +disco/MG +discommode/DG +disconcerting/Y +disconnectedness/S +disconnected/P +disconnecter/M +disconnect/R +disconsolate/YN +discordance/SM +discordant/Y +discord/G +discorporate/D +discotheque/MS +discount/B +discourage/LGDR +discouragement/MS +discouraging/Y +discoverable/I +discover/ADGS +discovered/U +discoverer/S +discovery/SAM +discreetly/I +discreetness's/I +discreetness/SM +discreet/TRYP +discrepancy/SM +discrepant/Y +discreteness/SM +discrete/YPNX +discretionary +discretion/IMS +discretization +discretized +discriminable +discriminant/MS +discriminated/U +discriminate/SDVNGX +discriminating/YI +discrimination/MI +discriminator/MS +discriminatory +discursiveness/S +discussant/MS +discussed/UA +discusser/M +discussion/SM +discus/SM +disdainfulness/M +disdainful/YP +disdain/MGSD +disease/G +disembowelment/SM +disembowel/SLGD +disengage/L +disfigure/L +disfigurement/MS +disfranchise/L +disfranchisement/MS +disgorge +disgrace/R +disgracer/M +disgruntle/DSLG +disgruntlement/MS +disguised/UY +disguise/R +disguiser/M +disgust +disgusted/Y +disgustful/Y +disgusting/Y +dishabille/SM +disharmonious +dishcloth/M +dishcloths +dishevel/LDGS +dishevelment/MS +dish/GD +dishonest +dishonored/U +dishpan/MS +dishrag/SM +dishtowel/SM +dishwasher/MS +dishwater/SM +disillusion/LGD +disillusionment/SM +disinfectant/MS +disinherit +disinterestedness/SM +disinterested/P +disinvest/L +disjoin +disjointedness/S +disjunctive/YS +disjunct/VS +disk/D +diskette/S +dislike/G +dislodge/LG +dislodgement/M +dismalness/M +dismal/PSTRY +dismantle/L +dismantlement/SM +dismay/D +dismayed/U +dismaying/Y +dis/MB +dismember/LG +dismemberment/MS +dismissive/Y +dismiss/RZ +Disneyland/M +Disney/M +disoblige/G +disorderedness/M +disordered/YP +disorderliness/M +disorderly/P +disorder/Y +disorganize +disorganized/U +disparagement/MS +disparager/M +disparage/RSDLG +disparaging/Y +disparateness/M +disparate/PSY +dispatch/Z +dispelled +dispelling +dispel/S +dispensable/I +dispensary/MS +dispensate/NX +dispensation/M +dispenser/M +dispense/ZGDRSB +dispersal/MS +dispersant/M +dispersed/Y +disperser/M +disperse/XDRSZLNGV +dispersible +dispersion/M +dispersiveness/M +dispersive/PY +dispirit/DSG +displace/L +display/AGDS +displayed/U +displeased/Y +displease/G +displeasure +disport +disposable/S +disposal/SM +dispose/IGSD +dispositional +disposition/ISM +disproportional +disproportionate/N +disproportionation/M +disprove/B +disputable/I +disputably/I +disputant/SM +disputation/SM +disputatious/Y +disputed/U +disputer/M +dispute/ZBGSRD +disquieting/Y +disquiet/M +disquisition/SM +Disraeli/M +disregardful +disrepair/M +disreputableness/M +disreputable/P +disrepute/M +disrespect +disrupted/U +disrupter/M +disrupt/GVDRS +disruption/MS +disruptive/YP +disruptor/M +dissatisfy +dissect/DG +dissed +dissembler/M +dissemble/ZGRSD +disseminate/XGNSD +dissemination/M +dissension/SM +dissenter/M +dissent/ZGSDR +dissertation/SM +disservice +disses +dissever +dissidence/SM +dissident/MS +dissimilar/S +dissing +dissipatedly +dissipatedness/M +dissipated/U +dissipater/M +dissipate/XRSDVNG +dissipation/M +dissociable/I +dissociate/DSXNGV +dissociated/U +dissociation/M +dissociative/Y +dissoluble/I +dissoluteness/SM +dissolute/PY +dissolve/ASDG +dissolved/U +dissonance/SM +dissonant/Y +dissuade/GDRS +dissuader/M +dissuasive +dist +distaff/SM +distal/Y +distance/DSMG +distantness/M +distant/YP +distaste +distemper +distend +distension +distention/SM +distillate/XNMS +distillation/M +distillery/MS +distincter +distinctest +distinction/MS +distinctiveness/MS +distinctive/YP +distinct/IYVP +distinctness/MSI +distinguishable/I +distinguishably/I +distinguish/BDRSG +distinguished/U +distinguisher/M +distort/BGDR +distorted/U +distorter/M +distortion/MS +distract/DG +distractedness/M +distracted/YP +distracting/Y +distrait +distraught/Y +distress +distressful +distressing/Y +distribute/ADXSVNGB +distributed/U +distributer +distributional +distribution/AM +distributiveness/M +distributive/SPY +distributivity +distributorship/M +distributor/SM +district/GSAD +district's +distrust/G +disturbance/SM +disturbed/U +disturber/M +disturbing/Y +disturb/ZGDRS +disulfide/M +disuse/M +disyllable/M +Dita/M +ditcher/M +ditch/MRSDG +dither/RDZSG +ditsy/TR +ditto/DMGS +ditty/SDGM +Ditzel/M +ditz/S +diuresis/M +diuretic/S +diurnal/SY +divalent/S +diva/MS +divan/SM +dived/M +divergence/SM +divergent/Y +diverge/SDG +diver/M +diverseness/MS +diverse/XYNP +diversification/M +diversifier/M +diversify/GSRDNX +diversionary +diversion/M +diversity/SM +divert/GSD +diverticulitis/SM +divertimento/M +dive/S +divestiture/MS +divest/LDGS +divestment/S +dividable +divide/AGDS +divided/U +dividend/MS +divider/MS +divination/SM +diviner/M +divine/RSDTZYG +divinity/MS +divisibility/IMS +divisible/I +divisional +division/SM +divisiveness/MS +divisive/PY +divisor/SM +divorce/MS +divorce/GSDLM +divorcement/MS +divot/MS +div/TZGJDRS +divulge/GSD +divvy/GSDM +Dixiecrat/MS +dixieland +Dixieland/MS +Dixie/M +Dix/M +Dixon/M +dizzily +dizziness/SM +dizzying/Y +dizzy/PGRSDT +DJ +Djakarta's +djellabah's +djellaba/S +d/JGVX +Djibouti/M +DMD +Dmitri/M +DMZ +DNA +Dnepropetrovsk/M +Dnepr's +Dnieper's +Dniester/M +Dniren/M +DOA +doable +DOB +Dobbin/M +dobbin/MS +Doberman +Dobro/M +docent/SM +docile/Y +docility/MS +docker/M +docket/GSMD +dock/GZSRDM +dockland/MS +dockside/M +dockworker/S +dockyard/SM +doc/MS +Doctor +doctoral +doctorate/SM +doctor/GSDM +Doctorow/M +doctrinaire/S +doctrinal/Y +doctrine/SM +docudrama/S +documentary/MS +documentation/MS +documented/U +document/RDMZGS +DOD +dodder/DGS +dodecahedra +dodecahedral +dodecahedron/M +Dode/M +dodge/GZSRD +Dodge/M +dodgem/S +dodger/M +Dodgson/M +Dodie/M +Dodi/M +Dodington/M +Dodoma/M +dodo/SM +Dodson/M +Dody/M +DOE +Doe/M +doe/MS +doer/MU +does/AU +doeskin/MS +doesn't +d'oeuvre +doff/SGD +dogcart/SM +dogcatcher/MS +dogeared +Doge/M +doge/SM +dogfight/GMS +dogfish/SM +dogfought +doggedness/SM +dogged/PY +doggerel/SM +dogging +doggone/RSDTG +doggy/SRMT +doghouse/SM +dogie/SM +doglegged +doglegging +dogleg/SM +dogma/MS +dogmatically/U +dogmatic/S +dogmatics/M +dogmatism/SM +dogmatist/SM +dogsbody/M +dog/SM +dogtooth/M +Dogtown/M +dogtrot/MS +dogtrotted +dogtrotting +dogwood/SM +dogy's +Doha/M +doh's +doily/SM +doing/MU +Dolby/SM +doldrum/S +doldrums/M +doled/F +dolefuller +dolefullest +dolefulness/MS +doleful/PY +Dole/M +dole/MGDS +doles/F +Dolf/M +doling/F +dollar/SM +Dolley/M +Dollie/M +Dolli/M +Doll/M +doll/MDGS +dollop/GSMD +Dolly/M +dolly/SDMG +dolmen/MS +dolomite/SM +dolomitic +Dolores/M +Dolorita/SM +dolorous/Y +dolor/SM +dolphin/SM +Dolph/M +doltishness/SM +doltish/YP +dolt/MS +domain/MS +dome/DSMG +Domenic/M +Domenico/M +Domeniga/M +Domesday/M +domestically +domesticate/DSXGN +domesticated/U +domestication/M +domesticity/MS +domestic/S +domicile/SDMG +domiciliary +dominance/MS +dominant/YS +dominate/VNGXSD +domination/M +dominator/M +dominatrices +dominatrix +domineer/DSG +domineeringness/M +domineering/YP +Dominga/M +Domingo/M +Dominguez/M +Dominica/M +Dominican/MS +Dominick/M +Dominic/M +Dominik/M +Domini/M +dominion/MS +Dominique/M +dominoes +domino/M +Domitian/M +Dom/M +Donahue/M +Donald/M +Donaldson/M +Donall/M +Donal/M +Donalt/M +Dona/M +dona/MS +Donatello/M +donate/XVGNSD +donation/M +donative/M +Donaugh/M +Donavon/M +done/AUF +Donella/M +Donelle/M +Donetsk/M +Donetta/M +dong/GDMS +dongle/S +Donia/M +Donica/M +Donielle/M +Donizetti/M +donkey/MS +Donna/M +Donnamarie/M +donned +Donnell/M +Donnelly/M +Donne/M +Donner/M +Donnie/M +Donni/M +donning +donnishness/M +donnish/YP +Donn/RM +donnybrook/MS +Donny/M +donor/MS +Donovan/M +don/S +Don/SM +don't +donut/MS +donutted +donutting +doodad/MS +doodlebug/MS +doodler/M +doodle/SRDZG +doohickey/MS +Dooley/M +Doolittle/M +doom/MDGS +doomsday/SM +Doonesbury/M +doorbell/SM +door/GDMS +doorhandles +doorkeeper/M +doorkeep/RZ +doorknob/SM +doorman/M +doormat/SM +doormen +doornail/M +doorplate/SM +doors/I +doorstep/MS +doorstepped +doorstepping +doorstop/MS +doorway/MS +dooryard/SM +dopamine +dopant/M +dopa/SM +dope/DRSMZG +doper/M +dopey +dopier +dopiest +dopiness/S +Doppler/M +Dorado/M +Doralia/M +Doralin/M +Doralyn/M +Doralynne/M +Doralynn/M +Dora/M +Dorcas +Dorchester/M +Doreen/M +Dorelia/M +Dorella/M +Dorelle/M +Dor/M +Dorena/M +Dorene/M +Doretta/M +Dorette/M +Dorey/M +Doria/M +Dorian/M +Doric +Dorice/M +Dorie/M +Dori/MS +Dorine/M +Dorisa/M +Dorise/M +Dorita/M +dork/S +dorky/RT +dormancy/MS +dormant/S +dormer/M +dormice +dormitory/SM +dorm/MRZS +dormouse/M +Dorolice/M +Dorolisa/M +Doro/M +Dorotea/M +Doroteya/M +Dorothea/M +Dorothee/M +Dorothy/M +Dorree/M +Dorrie/M +Dorri/SM +Dorry/M +dorsal/YS +Dorsey/M +Dorthea/M +Dorthy/M +Dortmund/M +Dory/M +dory/SM +DOS +dosage/SM +dose/M +dos/GDS +Dosi/M +dosimeter/MS +dosimetry/M +dossier/MS +dost +Dostoevsky/M +DOT +dotage/SM +dotard/MS +doter/M +dote/S +Doti/M +doting/Y +Dot/M +dot/MDRSJZG +Dotson/M +dotted +Dottie/M +Dotti/M +dottiness/M +dotting +Dotty/M +dotty/PRT +do/TZRHGJ +Douala/M +Douay/M +Doubleday/M +doubled/UA +double/GPSRDZ +doubleheader/MS +doubleness/M +doubler/M +doubles/M +doublespeak/S +doublethink/M +doublet/MS +doubleton/M +doubling/A +doubloon/MS +doubly +doubt/AGSDMB +doubted/U +doubter/SM +doubtfulness/SM +doubtful/YP +doubting/Y +doubtlessness/M +doubtless/YP +douche/GSDM +Dougherty/M +dough/M +doughs +doughty/RT +doughy/RT +Dougie/M +Douglas/M +Douglass +Doug/M +Dougy/M +dourness/MS +Douro/M +dour/TYRP +douser/M +douse/SRDG +dovecote/MS +Dover/M +dove/RSM +dovetail/GSDM +dovish +Dov/MR +dowager/SM +dowdily +dowdiness/MS +dowdy/TPSR +dowel/GMDS +dower/GDMS +Dow/M +downbeat/SM +downcast/S +downdraft/M +downer/M +Downey/M +downfall/NMS +downgrade/GSD +down/GZSRD +downheartedness/MS +downhearted/PY +downhill/RS +downland +download/DGS +downpipes +downplay/GDS +downpour/MS +downrange +downrightness/M +downright/YP +downriver +Downs +downscale/GSD +downside/S +downsize/DSG +downslope +downspout/SM +downstage/S +downstairs +downstate/SR +downstream +downswing/MS +downtime/SM +downtowner/M +downtown/MRS +downtrend/M +downtrodden +downturn/MS +downwardness/M +downward/YPS +downwind +downy/RT +dowry/SM +dowse/GZSRD +dowser/M +doxology/MS +doyenne/SM +doyen/SM +Doyle/M +Doy/M +doze +dozen/GHD +dozenths +dozer/M +doz/XGNDRS +dozy +DP +DPs +dpt +DPT +drabbed +drabber +drabbest +drabbing +drabness/MS +drab/YSP +drachma/MS +Draco/M +draconian +Draconian +Dracula/M +draft/AMDGS +draftee/SM +drafter/MS +draftily +draftiness/SM +drafting/S +draftsman/M +draftsmanship/SM +draftsmen +draftsperson +draftswoman +draftswomen +drafty/PTR +dragged +dragger/M +dragging/Y +draggy/RT +drag/MS +dragnet/MS +dragonfly/SM +dragonhead/M +dragon/SM +dragoon/DMGS +drainage/MS +drainboard/SM +drained/U +drainer/M +drainpipe/MS +drain/SZGRDM +Drake/M +drake/SM +Dramamine/MS +drama/SM +dramatically/U +dramatical/Y +dramatic/S +dramatics/M +dramatist/MS +dramatization/MS +dramatized/U +dramatizer/M +dramatize/SRDZG +dramaturgy/M +Drambuie/M +drammed +dramming +dram/MS +drank +Drano/M +draper/M +drapery/MS +drape/SRDGZ +drastic +drastically +drat/S +dratted +dratting +Dravidian/M +drawable +draw/ASG +drawback/MS +drawbridge/SM +drawer/SM +drawing/SM +drawler/M +drawling/Y +drawl/RDSG +drawly +drawn/AI +drawnly +drawnness +drawstring/MS +dray/SMDG +dreadfulness/SM +dreadful/YPS +dreadlocks +dreadnought/SM +dread/SRDG +dreamboat/SM +dreamed/U +dreamer/M +dreamily +dreaminess/SM +dreaming/Y +dreamland/SM +dreamlessness/M +dreamless/PY +dreamlike +dream/SMRDZG +dreamworld/S +dreamy/PTR +drearily +dreariness/SM +drear/S +dreary/TRSP +Dreddy/M +dredge/MZGSRD +dredger/M +Dredi/M +dreg/MS +Dreiser/M +Dre/M +drencher/M +drench/GDRS +Dresden/M +dress/ADRSG +dressage/MS +dressed/U +dresser/MS +dresser's/A +dresses/U +dressiness/SM +dressing/MS +dressmaker/MS +dressmaking/SM +dressy/PTR +drew/A +Drew/M +Drexel/M +Dreyfus/M +Dreyfuss +dribble/DRSGZ +dribbler/M +driblet/SM +drib/SM +dried/U +drier/M +drifter/M +drifting/Y +drift/RDZSG +driftwood/SM +driller/M +drilling/M +drillmaster/SM +drill/MRDZGS +drinkable/S +drink/BRSZG +drinker/M +dripped +dripping/MS +drippy/RT +drip/SM +driveler/M +drivel/GZDRS +driven/P +driver/M +drive/SRBGZJ +driveway/MS +drizzle/DSGM +drizzling/Y +drizzly/TR +Dr/M +drogue/MS +drollery/SM +drollness/MS +droll/RDSPTG +drolly +dromedary/MS +Drona/M +drone/SRDGM +droning/Y +drool/GSRD +droopiness/MS +drooping/Y +droop/SGD +droopy/PRT +drophead +dropkick/S +droplet/SM +dropout/MS +dropped +dropper/SM +dropping/MS +dropsical +drop/SM +dropsy/MS +drosophila/M +dross/SM +drought/SM +drover/M +drove/SRDGZ +drowner/M +drown/RDSJG +drowse/SDG +drowsily +drowsiness/SM +drowsy/PTR +drubbed +drubber/MS +drubbing/SM +drub/S +Drucie/M +Drucill/M +Druci/M +Drucy/M +drudge/MGSRD +drudger/M +drudgery/SM +drudging/Y +Drud/M +drugged +druggie/SRT +drugging +druggist/SM +Drugi/M +drugless +drug/SM +drugstore/SM +druidism/MS +druid/MS +Druid's +Dru/M +drumbeat/SGM +drumhead/M +drumlin/MS +drummed +drummer/SM +drumming +Drummond/M +drum/SM +drumstick/SM +drunkard/SM +drunkenness/SM +drunken/YP +drunk/SRNYMT +drupe/SM +Drury/M +Drusie/M +Drusilla/M +Drusi/M +Drusy/M +druthers +dryad/MS +Dryden/M +dryer/MS +dry/GYDRSTZ +dryish +dryness/SM +drys +drystone +drywall/GSD +D's +d's/A +Dshubba/M +DST +DTP +dualism/MS +dualistic +dualist/M +duality/MS +dual/YS +Duane/M +Dubai/M +dubbed +dubber/S +dubbing/M +dubbin/MS +Dubcek/M +Dubhe/M +dubiety/MS +dubiousness/SM +dubious/YP +Dublin/M +Dubrovnik/M +dub/S +Dubuque/M +ducal +ducat/SM +duce/CAIKF +duce's +Duchamp/M +duchess/MS +duchy/SM +duckbill/SM +ducker/M +duck/GSRDM +duckling/SM +duckpins +duckpond +duckweed/MS +ducky/RSMT +ducted/CFI +ductile/I +ductility/SM +ducting/F +duct/KMSF +ductless +duct's/A +ducts/CI +ductwork/M +dudder +dude/MS +dudgeon/SM +dud/GMDS +Dudley/M +Dud/M +duelist/MS +duel/MRDGZSJ +dueness/M +duenna/MS +due/PMS +duet/MS +duetted +duetting +duffel/M +duffer/M +duff/GZSRDM +Duffie/M +Duff/M +Duffy/M +Dugald/M +dugout/SM +dug/S +duh +DUI +Duisburg/M +dukedom/SM +duke/DSMG +Duke/M +Dukey/M +Dukie/M +Duky/M +Dulcea/M +Dulce/M +dulcet/SY +Dulcia/M +Dulciana/M +Dulcie/M +dulcify +Dulci/M +dulcimer/MS +Dulcinea/M +Dulcine/M +Dulcy/M +dullard/MS +Dulles/M +dullness/MS +dull/SRDPGT +dully +dulness's +Dulsea/M +Duluth/M +duly/U +Du/M +Dumas +dumbbell/MS +dumbfound/GSDR +dumbness/MS +Dumbo/M +dumb/PSGTYRD +dumbstruck +dumbwaiter/SM +dumdum/MS +dummy/SDMG +Dumont/M +dumper/UM +dumpiness/MS +dumpling/MS +dump/SGZRD +dumpster/S +Dumpster/S +Dumpty/M +dumpy/PRST +Dunant/M +Dunbar/M +Duncan/M +dunce/MS +Dunc/M +Dundee/M +dunderhead/MS +Dunedin/M +dune/SM +dungaree/SM +dungeon/GSMD +dunghill/MS +dung/SGDM +Dunham/M +dunker/M +dunk/GSRD +Dunkirk/M +Dunlap/M +Dun/M +dunned +Dunne/M +dunner +dunnest +dunning +Dunn/M +dunno/M +dun/S +Dunstan/M +duodecimal/S +duodena +duodenal +duodenum/M +duologue/M +duo/MS +duopolist +duopoly/M +dupe/NGDRSMZ +duper/M +dupion/M +duple +duplexer/M +duplex/MSRDG +duplicability/M +duplicable +duplicate/ADSGNX +duplication/AM +duplicative +duplicator/MS +duplicitous +duplicity/SM +Dupont/MS +DuPont/MS +durability/MS +durableness/M +durable/PS +durably +Duracell/M +durance/SM +Durand/M +Duran/M +Durante/M +Durant/M +durational +duration/MS +Durban/M +Drer/M +duress/SM +Durex/M +Durham/MS +during +Durkee/M +Durkheim/M +Dur/M +Durocher/M +durst +durum/MS +Durward/M +Duse/M +Dusenberg/M +Dusenbury/M +Dushanbe/M +dusk/GDMS +duskiness/MS +dusky/RPT +Dsseldorf +dustbin/MS +dustcart/M +dustcover +duster/M +dustily +dustiness/MS +dusting/M +Dustin/M +dustless +dustman/M +dustmen +dust/MRDGZS +dustpan/SM +Dusty/M +dusty/RPT +Dutch/M +Dutchman/M +Dutchmen +dutch/MS +Dutchwoman +Dutchwomen +duteous/Y +dutiable +dutifulness/S +dutiful/UPY +duty/SM +Duvalier/M +duvet/SM +duxes +Dvina/M +Dvork/M +Dwain/M +dwarfish +dwarfism/MS +dwarf/MTGSPRD +Dwayne/M +dweeb/S +dweller/SM +dwell/IGS +dwelling/MS +dwelt/I +DWI +Dwight/M +dwindle/GSD +dyadic +dyad/MS +Dyana/M +Dyane/M +Dyan/M +Dyanna/M +Dyanne/M +Dyann/M +dybbukim +dybbuk/SM +dyed/A +dyeing/M +dye/JDRSMZG +dyer/M +Dyer/M +dyes/A +dyestuff/SM +dying/UA +Dyke/M +dyke's +Dylan/M +Dy/M +Dynah/M +Dyna/M +dynamical/Y +dynamic/S +dynamics/M +dynamism/SM +dynamiter/M +dynamite/RSDZMG +dynamized +dynamo/MS +dynastic +dynasty/MS +dyne/M +dysentery/SM +dysfunctional +dysfunction/MS +dyslectic/S +dyslexia/MS +dyslexically +dyslexic/S +dyspepsia/MS +dyspeptic/S +dysprosium/MS +dystopia/M +dystrophy/M +dz +Dzerzhinsky/M +E +ea +each +Eachelle/M +Eada/M +Eadie/M +Eadith/M +Eadmund/M +eagerness/MS +eager/TSPRYM +eagle/SDGM +eaglet/SM +Eakins/M +Ealasaid/M +Eal/M +Eamon/M +earache/SM +eardrum/SM +earful/MS +ear/GSMDYH +Earhart/M +earing/M +earldom/MS +Earle/M +Earlene/M +Earlie/M +Earline/M +earliness/SM +Earl/M +earl/MS +earlobe/S +Early/M +early/PRST +earmark/DGSJ +earmuff/SM +earned/U +earner/M +Earnestine/M +Earnest/M +earnestness/MS +earnest/PYS +earn/GRDZTSJ +earning/M +earphone/MS +earpieces +earplug/MS +Earp/M +earring/MS +earshot/MS +earsplitting +Eartha/M +earthbound +earthed/U +earthenware/MS +earthiness/SM +earthliness/M +earthling/MS +earthly/TPR +earth/MDNYG +earthmen +earthmover/M +earthmoving +earthquake/SDGM +earthshaking +earths/U +earthward/S +earthwork/MS +earthworm/MS +earthy/PTR +Earvin/M +earwax/MS +earwigged +earwigging +earwig/MS +eased/E +ease/LDRSMG +easel/MS +easement/MS +easer/M +ease's/EU +eases/UE +easies +easily/U +easiness/MSU +easing/M +eastbound +easterly/S +Easter/M +easterner/M +Easterner/M +easternmost +Eastern/RZ +eastern/ZR +easter/Y +east/GSMR +Easthampton/M +easting/M +Eastland/M +Eastman/M +eastward/S +Eastwick/M +Eastwood/M +East/ZSMR +easygoingness/M +easygoing/P +easy/PUTR +eatables +eatable/U +eaten/U +eater/M +eatery/MS +eating/M +Eaton/M +eat/SJZGNRB +eavesdropped +eavesdropper/MS +eavesdropping +eavesdrop/S +eave/SM +Eba/M +Ebba/M +ebb/DSG +EBCDIC +Ebeneezer/M +Ebeneser/M +Ebenezer/M +Eben/M +Eberhard/M +Eberto/M +Eb/MN +Ebola +Ebonee/M +Ebonics +Ebony/M +ebony/SM +Ebro/M +ebullience/SM +ebullient/Y +ebullition/SM +EC +eccentrically +eccentricity/SM +eccentric/MS +eccl +Eccles +Ecclesiastes/M +ecclesiastical/Y +ecclesiastic/MS +ECG +echelon/SGDM +echinoderm/SM +echo/DMG +echoed/A +echoes/A +echoic +echolocation/SM +clair/MS +clat/MS +eclectically +eclecticism/MS +eclectic/S +eclipse/MGSD +ecliptic/MS +eclogue/MS +ecocide/SM +ecol +Ecole/M +ecologic +ecological/Y +ecologist/MS +ecology/MS +Eco/M +econ +Econometrica/M +econometricians +econometric/S +econometrics/M +economical/YU +economic/S +economics/M +economist/MS +economization +economize/GZSRD +economizer/M +economizing/U +economy/MS +ecosystem/MS +ecru/SM +ecstasy/MS +Ecstasy/S +ecstatically +ecstatic/S +ectoplasm/M +Ecuadoran/S +Ecuadorean/S +Ecuadorian/S +Ecuador/M +ecumenical/Y +ecumenicism/SM +ecumenicist/MS +ecumenic/MS +ecumenics/M +ecumenism/SM +ecumenist/MS +eczema/MS +Eda/M +Edam/SM +Edan/M +ed/ASC +Edda/M +Eddie/M +Eddi/M +Edd/M +Eddy/M +eddy/SDMG +Edee/M +Edeline/M +edelweiss/MS +Ede/M +edema/SM +edematous +eden +Eden/M +Edgard/M +Edgardo/M +Edgar/M +edge/DRSMZGJ +edgeless +edger/M +Edgerton/M +Edgewater/M +edgewise +Edgewood/M +edgily +edginess/MS +edging/M +edgy/TRP +edibility/MS +edibleness/SM +edible/SP +edict/SM +Edie/M +edification/M +edifice/SM +edifier/M +edifying/U +edify/ZNXGRSD +Edik/M +Edi/MH +Edinburgh/M +Edin/M +Edison/M +editable +Edita/M +edited/IU +Editha/M +Edithe/M +Edith/M +edition/SM +editorialist/M +editorialize/DRSG +editorializer/M +editorial/YS +editor/MS +editorship/MS +edit/SADG +Ediva/M +Edlin/M +Edmond/M +Edmon/M +Edmonton/M +Edmund/M +Edna/M +Edouard/M +EDP +eds +Edsel/M +Edsger/M +EDT +Eduard/M +Eduardo/M +educability/SM +educable/S +educated/YP +educate/XASDGN +educationalists +educational/Y +education/AM +educationists +educative +educator/MS +educ/DBG +educe/S +eduction/M +Eduino/M +edutainment/S +Edvard/M +Edwardian +Edwardo/M +Edward/SM +Edwina/M +Edwin/M +Ed/XMN +Edy/M +Edythe/M +Edyth/M +EEC +EEG +eek/S +eelgrass/M +eel/MS +e'en +EEO +EEOC +e'er +eerie/RT +eerily +eeriness/MS +Eeyore/M +effaceable/I +effacement/MS +effacer/M +efface/SRDLG +effectiveness/ISM +effectives +effective/YIP +effector/MS +effect/SMDGV +effectual/IYP +effectualness/MI +effectuate/SDGN +effectuation/M +effeminacy/MS +effeminate/SY +effendi/MS +efferent/SY +effervesce/GSD +effervescence/SM +effervescent/Y +effeteness/SM +effete/YP +efficacious/IPY +efficaciousness/MI +efficacy/IMS +efficiency/MIS +efficient/ISY +Effie/M +effigy/SM +effloresce +efflorescence/SM +efflorescent +effluence/SM +effluent/MS +effluvia +effluvium/M +effluxion +efflux/M +effortlessness/SM +effortless/PY +effort/MS +effrontery/MS +effulgence/SM +effulgent +effuse/XSDVGN +effusion/M +effusiveness/MS +effusive/YP +EFL +e/FMDS +Efrain/M +Efrem/M +Efren/M +EFT +egad +egalitarian/I +egalitarianism/MS +egalitarians +EGA/M +Egan/M +Egbert/M +Egerton/M +eggbeater/SM +eggcup/MS +egger/M +egg/GMDRS +eggheaded/P +egghead/SDM +eggnog/SM +eggplant/MS +eggshell/SM +egis's +eglantine/MS +egocentrically +egocentricity/SM +egocentric/S +egoism/SM +egoistic +egoistical/Y +egoist/SM +egomaniac/MS +egomania/MS +Egon/M +Egor/M +ego/SM +egotism/SM +egotistic +egotistical/Y +egotist/MS +egregiousness/MS +egregious/PY +egress/SDMG +egret/SM +Egyptian/S +Egypt/M +Egyptology/M +eh +Ehrlich/M +Eichmann/M +eiderdown/SM +eider/SM +eidetic +Eiffel/M +eigenfunction/MS +eigenstate/S +eigenvalue/SM +eigenvector/MS +eighteen/MHS +eighteenths +eightfold +eighth/MS +eighths +eightieths +eightpence +eight/SM +eighty/SHM +Eileen/M +Eilis/M +Eimile/M +Einsteinian +einsteinium/MS +Einstein/SM +Eire/M +Eirena/M +Eisenhower/M +Eisenstein/M +Eisner/M +eisteddfod/M +either +ejaculate/SDXNG +ejaculation/M +ejaculatory +ejecta +ejection/SM +ejector/SM +eject/VGSD +Ekaterina/M +Ekberg/M +eked/A +eke/DSG +EKG +Ekstrom/M +Ektachrome/M +elaborateness/SM +elaborate/SDYPVNGX +elaboration/M +elaborators +Elaina/M +Elaine/M +Elana/M +eland/SM +Elane/M +lan/M +Elanor/M +elans +elapse/SDG +el/AS +elastically/I +elasticated +elasticity/SM +elasticize/GDS +elastic/S +elastodynamics +elastomer/M +elatedness/M +elated/PY +elater/M +elate/SRDXGN +elation/M +Elayne/M +Elba/MS +Elbe/M +Elberta/M +Elbertina/M +Elbertine/M +Elbert/M +elbow/GDMS +elbowroom/SM +Elbrus/M +Elden/M +elderberry/MS +elderflower +elderliness/M +elderly/PS +elder/SY +eldest +Eldin/M +Eldon/M +Eldorado's +Eldredge/M +Eldridge/M +Eleanora/M +Eleanore/M +Eleanor/M +Eleazar/M +electable/U +elect/ASGD +elected/U +electioneer/GSD +election/SAM +electiveness/M +elective/SPY +electoral/Y +electorate/SM +elector/SM +Electra/M +electress/M +electricalness/M +electrical/PY +electrician/SM +electricity/SM +electric/S +electrification/M +electrifier/M +electrify/ZXGNDRS +electrocardiogram/MS +electrocardiograph/M +electrocardiographs +electrocardiography/MS +electrochemical/Y +electrocute/GNXSD +electrocution/M +electrode/SM +electrodynamics/M +electrodynamic/YS +electroencephalogram/SM +electroencephalographic +electroencephalograph/M +electroencephalographs +electroencephalography/MS +electrologist/MS +electroluminescent +electrolysis/M +electrolyte/SM +electrolytic +electrolytically +electrolyze/SDG +electro/M +electromagnetic +electromagnetically +electromagnetism/SM +electromagnet/SM +electromechanical +electromechanics +electromotive +electromyograph +electromyographic +electromyographically +electromyography/M +electronegative +electronically +electronic/S +electronics/M +electron/MS +electrophoresis/M +electrophorus/M +electroplate/DSG +electroscope/MS +electroscopic +electroshock/GDMS +electrostatic/S +electrostatics/M +electrotherapist/M +electrotype/GSDZM +electroweak +eleemosynary +Eleen/M +elegance/ISM +elegant/YI +elegiacal +elegiac/S +elegy/SM +elem +elemental/YS +elementarily +elementariness/M +elementary/P +element/MS +Elena/M +Elene/M +Eleni/M +Elenore/M +Eleonora/M +Eleonore/M +elephantiases +elephantiasis/M +elephantine +elephant/SM +elevated/S +elevate/XDSNG +elevation/M +elevator/SM +eleven/HM +elevens/S +elevenths +elev/NX +Elfie/M +elfin/S +elfish +elf/M +Elfreda/M +Elfrida/M +Elfrieda/M +Elga/M +Elgar/M +Elianora/M +Elianore/M +Elia/SM +Elicia/M +elicitation/MS +elicit/GSD +elide/GSD +Elie/M +eligibility/ISM +eligible/SI +Elihu/M +Elijah/M +Eli/M +eliminate/XSDYVGN +elimination/M +eliminator/SM +Elinore/M +Elinor/M +Eliot/M +Elisabeth/M +Elisabet/M +Elisabetta/M +Elisa/M +Elise/M +Eliseo/M +Elisha/M +elision/SM +Elissa/M +Elita/M +elite/MPS +elitism/SM +elitist/SM +elixir/MS +Elizabethan/S +Elizabeth/M +Elizabet/M +Eliza/M +Elka/M +Elke/M +Elkhart/M +elk/MS +Elladine/M +Ella/M +Ellary/M +Elle/M +Ellene/M +Ellen/M +Ellerey/M +Ellery/M +Ellesmere/M +Ellette/M +Ellie/M +Ellington/M +Elliot/M +Elliott/M +ellipse/MS +ellipsis/M +ellipsoidal +ellipsoid/MS +ellipsometer/MS +ellipsometry +elliptic +elliptical/YS +ellipticity/M +Elli/SM +Ellison/M +Ellissa/M +ell/MS +Ellswerth/M +Ellsworth/M +Ellwood/M +Elly/M +Ellyn/M +Ellynn/M +Elma/M +Elmer/M +Elmhurst/M +Elmira/M +elm/MRS +Elmo/M +Elmore/M +Elmsford/M +El/MY +Elna/MH +Elnar/M +Elnath/M +Elnora/M +Elnore/M +elocutionary +elocutionist/MS +elocution/SM +elodea/S +Elohim/M +Eloisa/M +Eloise/M +elongate/NGXSD +elongation/M +Elonore/M +elopement/MS +eloper/M +elope/SRDLG +eloquence/SM +eloquent/IY +Elora/M +Eloy/M +Elroy/M +els +Elsa/M +Elsbeth/M +else/M +Else/M +Elset/M +elsewhere +Elsey/M +Elsie/M +Elsi/M +Elsinore/M +Elspeth/M +Elston/M +Elsworth/M +Elsy/M +Eltanin/M +Elton/M +eluate/SM +elucidate/SDVNGX +elucidation/M +elude/GSD +elusiveness/SM +elusive/YP +elute/DGN +elution/M +Elva/M +elven +Elvera/M +elver/SM +elves/M +Elvia/M +Elvina/M +Elvin/M +Elvira/M +elvish +Elvis/M +Elvyn/M +Elwin/M +Elwira/M +Elwood/M +Elwyn/M +Ely/M +Elyn/M +Elyse/M +Elysees +Elyse/M +Elysha/M +Elysia/M +elysian +Elysian +Elysium/SM +Elyssa/M +EM +emaciate/NGXDS +emaciation/M +emacs/M +Emacs/M +email/SMDG +Emalee/M +Emalia/M +Ema/M +emanate/XSDVNG +emanation/M +emancipate/DSXGN +emancipation/M +emancipator/MS +Emanuele/M +Emanuel/M +emasculate/GNDSX +emasculation/M +embalmer/M +embalm/ZGRDS +embank/GLDS +embankment/MS +embarcadero +embargoes +embargo/GMD +embark/ADESG +embarkation/EMS +embarrassedly +embarrassed/U +embarrassing/Y +embarrassment/MS +embarrass/SDLG +embassy/MS +embattle/DSG +embeddable +embedded +embedder +embedding/MS +embed/S +embellished/U +embellisher/M +embellish/LGRSD +embellishment/MS +ember/MS +embezzle/LZGDRS +embezzlement/MS +embezzler/M +embitter/LGDS +embitterment/SM +emblazon/DLGS +emblazonment/SM +emblematic +emblem/GSMD +embodier/M +embodiment/ESM +embody/ESDGA +embolden/DSG +embolism/SM +embosom +embosser/M +emboss/ZGRSD +embouchure/SM +embower/GSD +embraceable +embracer/M +embrace/RSDVG +embracing/Y +embrasure/MS +embrittle +embrocation/SM +embroiderer/M +embroider/SGZDR +embroidery/MS +embroilment/MS +embroil/SLDG +embryologist/SM +embryology/MS +embryonic +embryo/SM +emceeing +emcee/SDM +Emelda/M +Emelen/M +Emelia/M +Emelina/M +Emeline/M +Emelita/M +Emelyne/M +emendation/MS +emend/SRDGB +emerald/SM +Emera/M +emerge/ADSG +emergence/MAS +emergency/SM +emergent/S +emerita +emeritae +emeriti +emeritus +Emerson/M +Emery/M +emery/MGSD +emetic/S +emf/S +emigrant/MS +emigrate/SDXNG +emigration/M +migr/S +Emilee/M +Emile/M +Emilia/M +Emilie/M +Emili/M +Emiline/M +Emilio/M +Emil/M +Emily/M +eminence/MS +Eminence/MS +eminent/Y +emirate/SM +emir/SM +emissary/SM +emission/AMS +emissivity/MS +emit/S +emittance/M +emitted +emitter/SM +emitting +Emlen/M +Emlyn/M +Emlynne/M +Emlynn/M +em/M +Em/M +Emmalee/M +Emmaline/M +Emmalyn/M +Emmalynne/M +Emmalynn/M +Emma/M +Emmanuel/M +Emmeline/M +Emmerich/M +Emmery/M +Emmet/M +Emmett/M +Emmey/M +Emmie/M +Emmi/M +Emmit/M +Emmott/M +Emmye/M +Emmy/SM +Emogene/M +emollient/S +emolument/SM +Emory/M +emote/SDVGNX +emotionalism/MS +emotionality/M +emotionalize/GDS +emotional/UY +emotionless +emotion/M +emotive/Y +empaneled +empaneling +empath +empathetic +empathetical/Y +empathic +empathize/SDG +empathy/MS +emperor/MS +emphases +emphasis/M +emphasize/ZGCRSDA +emphatically/U +emphatic/U +emphysema/SM +emphysematous +empire/MS +empirical/Y +empiricism/SM +empiricist/SM +empiric/SM +emplace/L +emplacement/MS +employability/UM +employable/US +employed/U +employee/SM +employer/SM +employ/LAGDS +employment/UMAS +emporium/MS +empower/GLSD +empowerment/MS +empress/MS +emptier/M +emptily +emptiness/SM +empty/GRSDPT +empyrean/SM +ems/C +EMT +emulate/SDVGNX +emulation/M +emulative/Y +emulator/MS +emulsification/M +emulsifier/M +emulsify/NZSRDXG +emulsion/SM +emu/SM +Emylee/M +Emyle/M +enabler/M +enable/SRDZG +enactment/ASM +enact/SGALD +enameler/M +enamelware/SM +enamel/ZGJMDRS +enamor/DSG +en/BM +enc +encamp/LSDG +encampment/MS +encapsulate/SDGNX +encapsulation/M +encase/GSDL +encasement/SM +encephalitic +encephalitides +encephalitis/M +encephalographic +encephalopathy/M +enchain/SGD +enchanter/MS +enchant/ESLDG +enchanting/Y +enchantment/MSE +enchantress/MS +enchilada/SM +encipherer/M +encipher/SRDG +encircle/GLDS +encirclement/SM +encl +enclave/MGDS +enclosed/U +enclose/GDS +enclosure/SM +encoder/M +encode/ZJGSRD +encomium/SM +encompass/GDS +encore/GSD +encounter/GSD +encouragement/SM +encourager/M +encourage/SRDGL +encouraging/Y +encroacher/M +encroach/LGRSD +encroachment/MS +encrustation/MS +encrust/DSG +encrypt/DGS +encrypted/U +encryption/SM +encumbered/U +encumber/SEDG +encumbrancer/M +encumbrance/SRM +ency +encyclical/SM +encyclopaedia's +encyclopedia/SM +encyclopedic +encyst/GSLD +encystment/MS +endanger/DGSL +endangerment/SM +endear/GSLD +endearing/Y +endearment/MS +endeavored/U +endeavorer/M +endeavor/GZSMRD +endemically +endemicity +endemic/S +ender/M +endgame/M +Endicott/M +ending/M +endive/SM +endlessness/MS +endless/PY +endmost +endnote/MS +endocrine/S +endocrinologist/SM +endocrinology/SM +endogamous +endogamy/M +endogenous/Y +endomorphism/SM +endorse/DRSZGL +endorsement/MS +endorser/M +endoscope/MS +endoscopic +endoscopy/SM +endosperm/M +endothelial +endothermic +endow/GSDL +endowment/SM +endpoint/MS +endue/SDG +endungeoned +endurable/U +endurably/U +endurance/SM +endure/BSDG +enduringness/M +enduring/YP +endways +Endymion/M +end/ZGVMDRSJ +ENE +enema/SM +enemy/SM +energetically +energetic/S +energetics/M +energized/U +energizer/M +energize/ZGDRS +energy/MS +enervate/XNGVDS +enervation/M +enfeeble/GLDS +enfeeblement/SM +enfilade/MGDS +enfold/SGD +enforceability/M +enforceable/U +enforced/Y +enforce/LDRSZG +enforcement/SM +enforcer/M +enforcible/U +enfranchise/ELDRSG +enfranchisement/EMS +enfranchiser/M +engage/ADSGE +engagement/SEM +engaging/Y +Engelbert/M +Engel/MS +engender/DGS +engineer/GSMDJ +engineering/MY +engine/MGSD +England/M +england/ZR +Englebert/M +Englewood/M +English/GDRSM +Englishman/M +Englishmen +Englishwoman/M +Englishwomen +Eng/M +engorge/LGDS +engorgement/MS +Engracia/M +engram/MS +engraver/M +engrave/ZGDRSJ +engraving/M +engrossed/Y +engrosser/M +engross/GLDRS +engrossing/Y +engrossment/SM +engulf/GDSL +engulfment/SM +enhanceable +enhance/LZGDRS +enhancement/MS +enhancer/M +enharmonic +Enid/M +Enif/M +enigma/MS +enigmatic +enigmatically +Eniwetok/M +enjambement's +enjambment/MS +enjoinder +enjoin/GSD +enjoyability +enjoyableness/M +enjoyable/P +enjoyably +enjoy/GBDSL +enjoyment/SM +Enkidu/M +enlargeable +enlarge/LDRSZG +enlargement/MS +enlarger/M +enlightened/U +enlighten/GDSL +enlightening/U +enlightenment/SM +enlistee/MS +enlister/M +enlistment/SAM +enlist/SAGDL +enliven/LDGS +enlivenment/SM +enmesh/DSLG +enmeshment/SM +enmity/MS +Ennis/M +ennoble/LDRSG +ennoblement/SM +ennobler/M +ennui/SM +Enoch/M +enormity/SM +enormousness/MS +enormous/YP +Enos +enough +enoughs +enplane/DSG +enqueue/DS +enquirer/S +enquiringly +enrage/SDG +enrapture/GSD +Enrica/M +enricher/M +Enrichetta/M +enrich/LDSRG +enrichment/SM +Enrico/M +Enrika/M +Enrique/M +Enriqueta/M +enrobed +enrollee/SM +enroll/LGSD +enrollment/SM +ens +ensconce/DSG +ensemble/MS +enshrine/DSLG +enshrinement/SM +enshroud/DGS +ensign/SM +ensilage/DSMG +enslavement/MS +enslaver/M +enslave/ZGLDSR +ensnare/GLDS +ensnarement/SM +Ensolite/M +ensue/SDG +ensurer/M +ensure/SRDZG +entailer/M +entailment/MS +entail/SDRLG +entangle/EGDRSL +entanglement/ESM +entangler/EM +entente/MS +enter/ASDG +entered/U +enterer/M +enteritides +enteritis/SM +enterprise/GMSR +Enterprise/M +enterpriser/M +enterprising/Y +entertainer/M +entertaining/Y +entertainment/SM +entertain/SGZRDL +enthalpy/SM +enthrall/GDSL +enthrallment/SM +enthrone/GDSL +enthronement/MS +enthuse/DSG +enthusiasm/SM +enthusiastically/U +enthusiastic/U +enthusiast/MS +enticement/SM +entice/SRDJLZG +enticing/Y +entire/SY +entirety/SM +entitle/GLDS +entitlement/MS +entity/SM +entomb/GDSL +entombment/MS +entomological +entomologist/S +entomology/MS +entourage/SM +entr'acte/S +entrails +entrainer/M +entrain/GSLDR +entrancement/MS +entrance/MGDSL +entranceway/M +entrancing/Y +entrant/MS +entrapment/SM +entrapped +entrapping +entrap/SL +entreating/Y +entreat/SGD +entreaty/SM +entre/S +entrench/LSDG +entrenchment/MS +entrepreneurial +entrepreneur/MS +entrepreneurship/M +entropic +entropy/MS +entrust/DSG +entry/ASM +entryway/SM +entwine/DSG +enumerable +enumerate/AN +enumerated/U +enumerates +enumerating +enumeration's/A +enumeration/SM +enumerative +enumerator/SM +enunciable +enunciated/U +enunciate/XGNSD +enunciation/M +enureses +enuresis/M +envelope/MS +enveloper/M +envelopment/MS +envelop/ZGLSDR +envenom/SDG +enviableness/M +enviable/U +enviably +envied/U +envier/M +enviousness/SM +envious/PY +environ/LGSD +environmentalism/SM +environmentalist/SM +environmental/Y +environment/MS +envisage/DSG +envision/GSD +envoy/SM +envying/Y +envy/SRDMG +enzymatic +enzymatically +enzyme/SM +enzymology/M +Eocene +EOE +eohippus/M +Eolanda/M +Eolande/M +eolian +eon/SM +EPA +epaulet/SM +pe/S +ephedrine/MS +ephemeral/SY +ephemera/MS +ephemerids +ephemeris/M +Ephesian/S +Ephesians/M +Ephesus/M +Ephraim/M +Ephrayim/M +Ephrem/M +epically +epicenter/SM +epic/SM +Epictetus/M +Epicurean +epicurean/S +epicure/SM +Epicurus/M +epicycle/MS +epicyclic +epicyclical/Y +epicycloid/M +epidemically +epidemic/MS +epidemiological/Y +epidemiologist/MS +epidemiology/MS +epidermal +epidermic +epidermis/MS +epidural +epigenetic +epiglottis/SM +epigrammatic +epigram/MS +epigrapher/M +epigraph/RM +epigraphs +epigraphy/MS +epilepsy/SM +epileptic/S +epilogue/SDMG +Epimethius/M +epinephrine/SM +epiphany/SM +Epiphany/SM +epiphenomena +episcopacy/MS +episcopalian +Episcopalian/S +Episcopal/S +episcopal/Y +episcopate/MS +episode/SM +episodic +episodically +epistemic +epistemological/Y +epistemology/M +epistle/MRS +Epistle/SM +epistolary/S +epistolatory +epitaph/GMD +epitaphs +epitaxial/Y +epitaxy/M +epithelial +epithelium/MS +epithet/MS +epitome/MS +epitomized/U +epitomizer/M +epitomize/SRDZG +epochal/Y +epoch/M +epochs +eponymous +epoxy/GSD +epsilon/SM +Epsom/M +Epstein/M +equability/MS +equableness/M +equable/P +equably +equaling +equality/ISM +equalization/MS +equalize/DRSGJZ +equalized/U +equalizer/M +equalizes/U +equal/USDY +equanimity/MS +equate/NGXBSD +equation/M +equatorial/S +equator/SM +equerry/MS +equestrianism/SM +equestrian/S +equestrienne/SM +equiangular +equidistant/Y +equilateral/S +equilibrate/GNSD +equilibration/M +equilibrium/MSE +equine/S +equinoctial/S +equinox/MS +equipage/SM +equipartition/M +equip/AS +equipment/SM +equipoise/GMSD +equipotent +equipped/AU +equipping/A +equiproportional +equiproportionality +equiproportionate +equitable/I +equitableness/M +equitably/I +equitation/SM +equity/IMS +equiv +equivalence/DSMG +equivalent/SY +equivocalness/MS +equivocal/UY +equivocate/NGSDX +equivocation/M +equivocator/SM +Equuleus/M +ER +ERA +eradicable/I +eradicate/SDXVGN +eradication/M +eradicator/SM +era/MS +Eran/M +erase/N +eraser/M +erasion/M +Erasmus/M +eras/SRDBGZ +Erastus/M +erasure/MS +Erato/M +Eratosthenes/M +erbium/SM +Erda/M +ere +Erebus/M +erect/GPSRDY +erectile +erection/SM +erectness/MS +erector/SM +Erek/M +erelong +eremite/MS +Erena/M +ergo +ergodic +ergodicity/M +ergonomically +ergonomics/M +ergonomic/U +ergophobia +ergosterol/SM +ergot/SM +erg/SM +Erhard/M +Erhart/M +Erica/M +Ericha/M +Erich/M +Ericka/M +Erick/M +Erickson/M +Eric/M +Ericson's +Ericsson's +Eridanus/M +Erie/SM +Erika/M +Erik/M +Erikson/M +Erina/M +Erin/M +Erinna/M +Erinn/M +eris +Eris +Eritrea/M +Erlang/M +Erlenmeyer/M +Erl/M +Er/M +Erma/M +Ermanno/M +Ermengarde/M +Ermentrude/M +Ermina/M +ermine/MSD +Erminia/M +Erminie/M +Ermin/M +Ernaline/M +Erna/M +Ernesta/M +Ernestine/M +Ernest/M +Ernesto/M +Ernestus/M +Ernie/M +Ernst/M +Erny/M +erode/SDG +erodible +erogenous +erosible +erosional +erosion/SM +erosiveness/M +erosive/P +Eros/SM +erotically +erotica/M +eroticism/MS +erotic/S +errancy/MS +errand/MS +errantry/M +errant/YS +errata/SM +erratically +erratic/S +erratum/MS +err/DGS +Errick/M +erring/UY +Erroll/M +Errol/M +erroneousness/M +erroneous/YP +error/SM +ersatz/S +Erse/M +Erskine/M +erst +erstwhile +Ertha/M +eructation/MS +eruct/DGS +erudite/NYX +erudition/M +erupt/DSVG +eruption/SM +eruptive/SY +Ervin/M +ErvIn/M +Erv/M +Erwin/M +Eryn/M +erysipelas/SM +erythrocyte/SM +es +e's +Es +E's +Esau/M +escadrille/M +escalate/CDSXGN +escalation/MC +escalator/SM +escallop/SGDM +escapable/I +escapade/SM +escapee/MS +escape/LGSRDB +escapement/MS +escaper/M +escapism/SM +escapist/S +escapology +escarole/MS +escarpment/MS +eschatology/M +Escherichia/M +Escher/M +eschew/SGD +Escondido/M +escort/SGMD +escritoire/SM +escrow/DMGS +escudo/MS +escutcheon/SM +Esdras/M +ESE +Eskimo/SM +ESL +Esma/M +Esmaria/M +Esmark/M +Esme/M +Esmeralda/M +esophageal +esophagi +esophagus/M +esoteric +esoterica +esoterically +esp +ESP +espadrille/MS +Espagnol/M +espalier/SMDG +especial/Y +Esperanto/M +Esperanza/M +Espinoza/M +espionage/SM +esplanade/SM +Esp/M +Esposito/M +espousal/MS +espouser/M +espouse/SRDG +espresso/SM +esprit/SM +espy/GSD +Esq/M +esquire/GMSD +Esquire/S +Esra/M +Essa/M +essayer/M +essayist/SM +essay/SZMGRD +essence/MS +Essene/SM +Essen/M +essentialist/M +essentially +essentialness/M +essential/USI +Essequibo/M +Essex/M +Essie/M +Essy/M +EST +established/U +establisher/M +establish/LAEGSD +establishment/EMAS +Establishment/MS +Esta/M +estate/GSDM +Esteban/M +esteem/EGDS +Estela/M +Estele/M +Estella/M +Estelle/M +Estell/M +Estel/M +Esterhzy/M +ester/M +Ester/M +Estes +Estevan/M +Esther/M +esthete's +esthetically +esthetic's +esthetics's +estimable/I +estimableness/M +estimate/XDSNGV +estimating/A +estimation/M +estimator/SM +Estonia/M +Estonian/S +estoppal +Estrada/M +estrange/DRSLG +estrangement/SM +estranger/M +Estrella/M +Estrellita/M +estrogen/SM +estrous +estrus/SM +est/RZ +estuarine +estuary/SM +et +ET +ETA +Etan/M +eta/SM +etc +etcetera/SM +etcher/M +etch/GZJSRD +etching/M +ETD +eternalness/SM +eternal/PSY +eternity/SM +ethane/SM +Ethan/M +ethanol/MS +Ethelbert/M +Ethelda/M +Ethelind/M +Etheline/M +Ethelin/M +Ethel/M +Ethelred/M +Ethelyn/M +Ethe/M +etherealness/M +ethereal/PY +etherized +Ethernet/MS +ether/SM +ethically/U +ethicalness/M +ethical/PYS +ethicist/S +ethic/MS +Ethiopia/M +Ethiopian/S +ethnically +ethnicity/MS +ethnic/S +ethnocentric +ethnocentrism/MS +ethnographers +ethnographic +ethnography/M +ethnological +ethnologist/SM +ethnology/SM +ethnomethodology +ethological +ethologist/MS +ethology/SM +ethos/SM +ethylene/MS +Ethyl/M +ethyl/SM +Etienne/M +etiologic +etiological +etiology/SM +etiquette/SM +Etna/M +Etruria/M +Etruscan/MS +Etta/M +Ettie/M +Etti/M +Ettore/M +Etty/M +tude/MS +etymological/Y +etymologist/SM +etymology/MS +EU +eucalypti +eucalyptus/SM +Eucharistic +Eucharist/SM +euchre/MGSD +euclidean +Euclid/M +Eudora/M +Euell/M +Eugene/M +Eugenia/M +eugenically +eugenicist/SM +eugenic/S +eugenics/M +Eugenie/M +Eugenio/M +Eugenius/M +Eugen/M +Eugine/M +Eulalie/M +Eula/M +Eulerian/M +Euler/M +eulogistic +eulogist/MS +eulogized/U +eulogize/GRSDZ +eulogizer/M +eulogy/MS +Eu/M +Eumenides +Eunice/M +eunuch/M +eunuchs +Euphemia/M +euphemism/MS +euphemistic +euphemistically +euphemist/M +euphonious/Y +euphonium/M +euphony/SM +euphoria/SM +euphoric +euphorically +Euphrates/M +Eurasia/M +Eurasian/S +eureka/S +Euripides/M +Eur/M +Eurodollar/SM +Europa/M +Europeanization/SM +Europeanized +European/MS +Europe/M +europium/MS +Eurydice/M +Eustace/M +Eustachian/M +Eustacia/M +eutectic +Euterpe/M +euthanasia/SM +euthenics/M +evacuate/DSXNGV +evacuation/M +evacuee/MS +evader/M +evade/SRDBGZ +Evaleen/M +evaluable +evaluate/ADSGNX +evaluated/U +evaluational +evaluation/MA +evaluative +evaluator/MS +Eva/M +evanescence/MS +evanescent +Evangelia/M +evangelic +evangelicalism/SM +Evangelical/S +evangelical/YS +Evangelina/M +Evangeline/M +Evangelin/M +evangelism/SM +evangelistic +evangelist/MS +Evangelist/MS +evangelize/GDS +Evania/M +Evan/MS +Evanne/M +Evanston/M +Evansville/M +evaporate/VNGSDX +evaporation/M +evaporative/Y +evaporator/MS +evasion/SM +evasiveness/SM +evasive/PY +Eveleen/M +Evelina/M +Eveline/M +Evelin/M +Evelyn/M +Eve/M +evened +evener/M +evenhanded/YP +evening/SM +Evenki/M +Even/M +evenness/MSU +even/PUYRT +evens +evensong/MS +eventfulness/SM +eventful/YU +eventide/SM +event/SGM +eventuality/MS +eventual/Y +eventuate/GSD +Everard/M +Eveready/M +Evered/M +Everest/M +Everette/M +Everett/M +everglade/MS +Everglades +evergreen/S +Everhart/M +everlastingness/M +everlasting/PYS +everliving +evermore +EverReady/M +eve/RSM +ever/T +every +everybody/M +everydayness/M +everyday/P +everyman +everyone/MS +everyplace +everything +everywhere +eve's/A +eves/A +Evey/M +evict/DGS +eviction/SM +evidence/MGSD +evidential/Y +evident/YS +Evie/M +evildoer/SM +evildoing/MS +evilness/MS +evil/YRPTS +evince/SDG +Evin/M +eviscerate/GNXDS +evisceration/M +Evita/M +Ev/MN +evocable +evocate/NVX +evocation/M +evocativeness/M +evocative/YP +evoke/SDG +evolute/NMXS +evolutionarily +evolutionary +evolutionist/MS +evolution/M +evolve/SDG +Evonne/M +Evvie/M +Evvy/M +Evy/M +Evyn/M +Ewan/M +Eward/M +Ewart/M +Ewell/M +ewe/MZRS +Ewen/M +ewer/M +Ewing/M +exacerbate/NGXDS +exacerbation/M +exacter/M +exactingness/M +exacting/YP +exaction/SM +exactitude/ISM +exactly/I +exactness/MSI +exact/TGSPRDY +exaggerate/DSXNGV +exaggerated/YP +exaggeration/M +exaggerative/Y +exaggerator/MS +exaltation/SM +exalted/Y +exalter/M +exalt/ZRDGS +examen/M +examination/AS +examination's +examine/BGZDRS +examined/AU +examinees +examiner/M +examines/A +examining/A +exam/MNS +example/DSGM +exampled/U +exasperate/DSXGN +exasperated/Y +exasperating/Y +exasperation/M +Excalibur/M +excavate/NGDSX +excavation/M +excavator/SM +Excedrin/M +exceeder/M +exceeding/Y +exceed/SGDR +excelled +excellence/SM +excellency/MS +Excellency/MS +excellent/Y +excelling +excel/S +excelsior/S +except/DSGV +exceptionable/U +exceptionalness/M +exceptional/YU +exception/BMS +excerpter/M +excerpt/GMDRS +excess/GVDSM +excessiveness/M +excessive/PY +exchangeable +exchange/GDRSZ +exchanger/M +exchequer/SM +Exchequer/SM +excise/XMSDNGB +excision/M +excitability/MS +excitableness/M +excitable/P +excitably +excitation/SM +excitatory +excited/Y +excitement/MS +exciter/M +excite/RSDLBZG +excitingly +exciting/U +exciton/M +exclaimer/M +exclaim/SZDRG +exclamation/MS +exclamatory +exclude/DRSG +excluder/M +exclusionary +exclusioner/M +exclusion/SZMR +exclusiveness/SM +exclusive/SPY +exclusivity/MS +excommunicate/XVNGSD +excommunication/M +excoriate/GNXSD +excoriation/M +excremental +excrement/SM +excrescence/MS +excrescent +excreta +excrete/NGDRSX +excreter/M +excretion/M +excretory/S +excruciate/NGDS +excruciating/Y +excruciation/M +exculpate/XSDGN +exculpation/M +exculpatory +excursionist/SM +excursion/MS +excursiveness/SM +excursive/PY +excursus/MS +excusable/IP +excusableness/IM +excusably/I +excuse/BGRSD +excused/U +excuser/M +exec/MS +execrableness/M +execrable/P +execrably +execrate/DSXNGV +execration/M +executable/MS +execute/NGVZBXDRS +executer/M +executional +executioner/M +execution/ZMR +executive/SM +executor/SM +executrices +executrix/M +exegeses +exegesis/M +exegete/M +exegetical +exegetic/S +exemplariness/M +exemplar/MS +exemplary/P +exemplification/M +exemplifier/M +exemplify/ZXNSRDG +exemption/MS +exempt/SDG +exerciser/M +exercise/ZDRSGB +exertion/MS +exert/SGD +Exeter/M +exeunt +exhalation/SM +exhale/GSD +exhausted/Y +exhauster/M +exhaustible/I +exhausting/Y +exhaustion/SM +exhaustiveness/MS +exhaustive/YP +exhaust/VGRDS +exhibitioner/M +exhibitionism/MS +exhibitionist/MS +exhibition/ZMRS +exhibitor/SM +exhibit/VGSD +exhilarate/XSDVNG +exhilarating/Y +exhilaration/M +exhortation/SM +exhort/DRSG +exhorter/M +exhumation/SM +exhume/GRSD +exhumer/M +exigence/S +exigency/SM +exigent/SY +exiguity/SM +exiguous +exile/SDGM +existence/MS +existent/I +existentialism/MS +existentialistic +existentialist/MS +existential/Y +existents +exist/SDG +exit/MDSG +exobiology/MS +exocrine +Exodus/M +exodus/SM +exogamous +exogamy/M +exogenous/Y +exonerate/SDVGNX +exoneration/M +exorbitance/MS +exorbitant/Y +exorcise/SDG +exorcism/SM +exorcist/SM +exorcizer/M +exoskeleton/MS +exosphere/SM +exothermic +exothermically +exotica +exotically +exoticism/SM +exoticness/M +exotic/PS +exp +expandability/M +expand/DRSGZB +expanded/U +expander/M +expanse/DSXGNVM +expansible +expansionary +expansionism/MS +expansionist/MS +expansion/M +expansiveness/S +expansive/YP +expatiate/XSDNG +expatiation/M +expatriate/SDNGX +expatriation/M +expectancy/MS +expectant/YS +expectational +expectation/MS +expected/UPY +expecting/Y +expectorant/S +expectorate/NGXDS +expectoration/M +expect/SBGD +expedience/IS +expediency/IMS +expedients +expedient/YI +expediter/M +expedite/ZDRSNGX +expeditionary +expedition/M +expeditiousness/MS +expeditious/YP +expeditor's +expellable +expelled +expelling +expel/S +expendable/S +expended/U +expender/M +expenditure/SM +expend/SDRGB +expense/DSGVM +expensive/IYP +expensiveness/SMI +experienced/U +experience/ISDM +experiencing +experiential/Y +experimentalism/M +experimentalist/SM +experimental/Y +experimentation/SM +experimenter/M +experiment/GSMDRZ +experted +experting +expertise/SM +expertize/GD +expertnesses +expertness/IM +expert/PISY +expert's +expiable/I +expiate/XGNDS +expiation/M +expiatory +expiration/MS +expired/U +expire/SDG +expiry/MS +explainable/UI +explain/ADSG +explained/U +explainer/SM +explanation/MS +explanatory +expletive/SM +explicable/I +explicate/VGNSDX +explication/M +explicative/Y +explicitness/SM +explicit/PSY +explode/DSRGZ +exploded/U +exploder/M +exploitation/MS +exploitative +exploited/U +exploiter/M +exploit/ZGVSMDRB +exploration/MS +exploratory +explore/DSRBGZ +explored/U +explorer/M +explosion/MS +explosiveness/SM +explosive/YPS +expo/MS +exponential/SY +exponentiate/XSDNG +exponentiation/M +exponent/MS +exportability +exportable +export/AGSD +exportation/SM +exporter/MS +export's +expose +exposed/U +exposer/M +exposit/D +exposition/SM +expositor/MS +expository +expos/RSDZG +expostulate/DSXNG +expostulation/M +exposure/SM +expounder/M +expound/ZGSDR +expressed/U +expresser/M +express/GVDRSY +expressibility/I +expressible/I +expressibly/I +expressionism/SM +expressionistic +expressionist/S +expressionless/YP +expression/MS +expressive/IYP +expressiveness/MS +expressiveness's/I +expressway/SM +expropriate/XDSGN +expropriation/M +expropriator/SM +expulsion/MS +expunge/GDSR +expunger/M +expurgated/U +expurgate/SDGNX +expurgation/M +exquisiteness/SM +exquisite/YPS +ex/S +ext +extant +extemporaneousness/MS +extemporaneous/YP +extempore/S +extemporization/SM +extemporizer/M +extemporize/ZGSRD +extendability/M +extendedly +extendedness/M +extended/U +extender/M +extendibility/M +extendibles +extend/SGZDR +extensibility/M +extensible/I +extensional/Y +extension/SM +extensiveness/SM +extensive/PY +extensor/MS +extent/SM +extenuate/XSDGN +extenuation/M +exterior/MYS +exterminate/XNGDS +extermination/M +exterminator/SM +externalities +externalization/SM +externalize/GDS +external/YS +extern/M +extinct/DGVS +extinction/MS +extinguishable/I +extinguish/BZGDRS +extinguisher/M +extirpate/XSDVNG +extirpation/M +extolled +extoller/M +extolling +extol/S +extort/DRSGV +extorter/M +extortionate/Y +extortioner/M +extortionist/SM +extortion/ZSRM +extracellular/Y +extract/GVSBD +extraction/SM +extractive/Y +extractor/SM +extracurricular/S +extradite/XNGSDB +extradition/M +extragalactic +extralegal/Y +extramarital +extramural +extraneousness/M +extraneous/YP +extraordinarily +extraordinariness/M +extraordinary/PS +extrapolate/XVGNSD +extrapolation/M +extra/S +extrasensory +extraterrestrial/S +extraterritorial +extraterritoriality/MS +extravagance/MS +extravagant/Y +extravaganza/SM +extravehicular +extravert's +extrema +extremal +extreme/DSRYTP +extremeness/MS +extremism/SM +extremist/MS +extremity/SM +extricable/I +extricate/XSDNG +extrication/M +extrinsic +extrinsically +extroversion/SM +extrovert/GMDS +extrude/GDSR +extruder/M +extrusion/MS +extrusive +exuberance/MS +exuberant/Y +exudate/XNM +exudation/M +exude/GSD +exultant/Y +exultation/SM +exult/DGS +exulting/Y +exurban +exurbanite/SM +exurbia/MS +exurb/MS +Exxon/M +Eyck/M +Eyde/M +Eydie/M +eyeball/GSMD +eyebrow/MS +eyed/P +eyedropper/MS +eyeful/MS +eye/GDRSMZ +eyeglass/MS +eyelash/MS +eyeless +eyelet/GSMD +eyelid/SM +eyeliner/MS +eyeopener/MS +eyeopening +eyepiece/SM +eyer/M +eyeshadow +eyesight/MS +eyesore/SM +eyestrain/MS +eyeteeth +eyetooth/M +eyewash/MS +eyewitness/SM +Eyre/M +eyrie's +Eysenck/M +Ezechiel/M +Ezekiel/M +Ezequiel/M +Eziechiele/M +Ezmeralda/M +Ezra/M +Ezri/M +F +FAA +Fabe/MR +Faberg/M +Faber/M +Fabiano/M +Fabian/S +Fabien/M +Fabio/M +fable/GMSRD +fabler/M +fabricate/SDXNG +fabrication/M +fabricator/MS +fabric/MS +fabulists +fabulousness/M +fabulous/YP +facade/GMSD +face/AGCSD +facecloth +facecloths +faceless/P +faceplate/M +facer/CM +face's +facetiousness/MS +facetious/YP +facet/SGMD +facial/YS +facileness/M +facile/YP +facilitate/VNGXSD +facilitation/M +facilitator/SM +facilitatory +facility/MS +facing/MS +facsimileing +facsimile/MSD +factional +factionalism/SM +faction/SM +factiousness/M +factious/PY +factitious +fact/MS +facto +factoid/S +factorial/MS +factoring/A +factoring's +factorisable +factorization/SM +factorize/GSD +factor/SDMJG +factory/MS +factotum/MS +factuality/M +factualness/M +factual/PY +faculty/MS +faddish +faddist/SM +fadedly +faded/U +fadeout +fader/M +fade/S +fading's +fading/U +fad/ZGSMDR +Fae/M +faerie/MS +Faeroe/M +faery's +Fafnir/M +fagged +fagging +faggoting's +Fagin/M +fag/MS +fagoting/M +fagot/MDSJG +Fahd/M +Fahrenheit/S +faence/S +failing's +failing/UY +fail/JSGD +faille/MS +failsafe +failure/SM +Faina/M +fain/GTSRD +fainter/M +fainthearted +faintness/MS +faint/YRDSGPT +Fairbanks +Fairchild/M +faired +Fairfax/M +Fairfield/M +fairgoer/S +fairground/MS +fairing/MS +fairish +Fairleigh/M +fairless +Fairlie/M +Fair/M +Fairmont/M +fairness's +fairness/US +Fairport/M +fairs +fair/TURYP +Fairview/M +fairway/MS +fairyland/MS +fairy/MS +fairytale +Faisalabad +Faisal/M +faithed +faithfulness/MSU +faithfuls +faithful/UYP +faithing +faithlessness/SM +faithless/YP +Faith/M +faiths +faith's +faith/U +fajitas +faker/M +fake/ZGDRS +fakir/SM +falafel +falconer/M +falconry/MS +falcon/ZSRM +Falito/M +Falkland/MS +Falk/M +Falkner/M +fallaciousness/M +fallacious/PY +fallacy/MS +faller/M +fallibility/MSI +fallible/I +fallibleness/MS +fallibly/I +falloff/S +Fallon/M +fallopian +Fallopian/M +fallout/MS +fallowness/M +fallow/PSGD +fall/SGZMRN +falsehood/SM +falseness/SM +false/PTYR +falsetto/SM +falsie/MS +falsifiability/M +falsifiable/U +falsification/M +falsifier/M +falsify/ZRSDNXG +falsity/MS +Falstaff/M +falterer/M +faltering/UY +falter/RDSGJ +Falwell/M +fa/M +famed/C +fame/DSMG +fames/C +familial +familiarity/MUS +familiarization/MS +familiarized/U +familiarizer/M +familiarize/ZGRSD +familiarizing/Y +familiarly/U +familiarness/M +familiar/YPS +family/MS +famine/SM +faming/C +famish/GSD +famously/I +famousness/M +famous/PY +fanaticalness/M +fanatical/YP +fanaticism/MS +fanatic/SM +Fanchette/M +Fanchon/M +fancied +Fancie/M +fancier/SM +fanciest +fancifulness/MS +fanciful/YP +fancily +fanciness/SM +fancying +fancy/IS +Fancy/M +fancywork/SM +fandango/SM +Fanechka/M +fanfare/SM +fanfold/M +fang/DMS +fangled +Fania/M +fanlight/SM +Fan/M +fanned +Fannie/M +Fanni/M +fanning +fanny/SM +Fanny/SM +fanout +fan/SM +fantail/SM +fantasia/SM +fantasist/M +fantasize/SRDG +fantastical/Y +fantastic/S +fantasy/GMSD +Fanya/M +fanzine/S +FAQ/SM +Faraday/M +farad/SM +Farah/M +Fara/M +Farand/M +faraway +Farber/M +farce/SDGM +farcical/Y +fare/MS +farer/M +farewell/DGMS +farfetchedness/M +far/GDR +Fargo/M +Farica/M +farinaceous +farina/MS +Farkas/M +Farlay/M +Farlee/M +Farleigh/M +Farley/M +Farlie/M +Farly/M +farmer/M +Farmer/M +farmhand/S +farmhouse/SM +farming/M +Farmington/M +farmland/SM +farm/MRDGZSJ +farmstead/SM +farmworker/S +Far/MY +farmyard/MS +faro/MS +farragoes +farrago/M +Farragut/M +Farrah/M +Farrakhan/M +Farra/M +Farrand/M +Farrell/M +Farrel/M +farrier/SM +Farris/M +Farr/M +farrow/DMGS +farseeing +farsightedness/SM +farsighted/YP +farther +farthermost +farthest +farthing/SM +fart/MDGS! +fas +fascia/SM +fascicle/DSM +fasciculate/DNX +fasciculation/M +fascinate/SDNGX +fascinating/Y +fascination/M +fascism/MS +Fascism's +fascistic +Fascist's +fascist/SM +fashionableness/M +fashionable/PS +fashionably/U +fashion/ADSG +fashioner/SM +fashion's +Fassbinder/M +fastback/MS +fastball/S +fasten/AGUDS +fastener/MS +fastening/SM +fast/GTXSPRND +fastidiousness/MS +fastidious/PY +fastness/MS +fatalism/MS +fatalistic +fatalistically +fatalist/MS +fatality/MS +fatal/SY +fatback/SM +fatefulness/MS +fateful/YP +fate/MS +Fates +fatheaded/P +fathead/SMD +father/DYMGS +fathered/U +fatherhood/MS +fatherland/SM +fatherless +fatherliness/M +fatherly/P +Father/SM +fathomable/U +fathomless +fathom/MDSBG +fatigued/U +fatigue/MGSD +fatiguing/Y +Fatima/M +fatness/SM +fat/PSGMDY +fatso/M +fatted +fattener/M +fatten/JZGSRD +fatter +fattest/M +fattiness/SM +fatting +fatty/RSPT +fatuity/MS +fatuousness/SM +fatuous/YP +fatwa/SM +faucet/SM +Faulknerian +Faulkner/M +fault/CGSMD +faultfinder/MS +faultfinding/MS +faultily +faultiness/MS +faultlessness/SM +faultless/PY +faulty/RTP +fauna/MS +Faunie/M +Faun/M +faun/MS +Fauntleroy/M +Faustian +Faustina/M +Faustine/M +Faustino/M +Faust/M +Faustus/M +fauvism/S +favorableness/MU +favorable/UMPS +favorably/U +favoredness/M +favored's/U +favored/YPSM +favorer/EM +favor/ESMRDGZ +favoring/MYS +favorings/U +favorite/SMU +favoritism/MS +favors/A +Fawkes/M +Fawne/M +fawner/M +fawn/GZRDMS +Fawnia/M +fawning/Y +Fawn/M +fax/GMDS +Fax/M +Faydra/M +Faye/M +Fayette/M +Fayetteville/M +Fayina/M +Fay/M +fay/MDRGS +Fayre/M +Faythe/M +Fayth/M +faze/DSG +FBI +FCC +FD +FDA +FDIC +FDR/M +fealty/MS +fearfuller +fearfullest +fearfulness/MS +fearful/YP +fearlessness/MS +fearless/PY +fear/RDMSG +fearsomeness/M +fearsome/PY +feasibility/SM +feasibleness/M +feasible/UI +feasibly/U +feaster/M +feast/GSMRD +feater/C +featherbed +featherbedding/SM +featherbrain/MD +feathered/U +feathering/M +featherless +featherlight +Featherman/M +feathertop +featherweight/SM +feathery/TR +feather/ZMDRGS +feat/MYRGTS +feats/C +featureless +feature/MGSD +Feb/M +febrile +February/MS +fecal +feces +fecklessness/M +feckless/PY +fecundability +fecundate/XSDGN +fecundation/M +fecund/I +fecundity/SM +federalism/SM +Federalist +federalist/MS +federalization/MS +federalize/GSD +Federal/S +federal/YS +federated/U +federate/FSDXVNG +federation/FM +federative/Y +Federica/M +Federico/M +FedEx/M +Fedora/M +fedora/SM +feds +Fed/SM +fed/U +feebleness/SM +feeble/TPR +feebly +feedback/SM +feedbag/MS +feeder/M +feed/GRZJS +feeding/M +feedlot/SM +feedstock +feedstuffs +feeing +feeler/M +feel/GZJRS +feelingly/U +feeling/MYP +feelingness/M +Fee/M +fee/MDS +feet/M +feigned/U +feigner/M +feign/RDGS +feint/MDSG +feisty/RT +Felder/M +Feldman/M +feldspar/MS +Felecia/M +Felicdad/M +Felice/M +Felicia/M +Felicio/M +felicitate/XGNSD +felicitation/M +felicitous/IY +felicitousness/M +felicity/IMS +Felicity/M +Felicle/M +Felic/M +Felike/M +Feliks/M +feline/SY +Felipa/M +Felipe/M +Felisha/M +Felita/M +Felix/M +Feliza/M +Felizio/M +fella/S +fellatio/SM +felled/A +feller/M +felling/A +Fellini/M +fellness/M +fellowman +fellowmen +fellow/SGDYM +fellowshipped +fellowshipping +fellowship/SM +fell/PSGZTRD +feloniousness/M +felonious/PY +felon/MS +felony/MS +felt/GSD +felting/M +Fe/M +female/MPS +femaleness/SM +feminineness/M +feminine/PYS +femininity/MS +feminism/MS +feminist/MS +femme/MS +femoral +fem/S +femur/MS +fenced/U +fencepost/M +fencer/M +fence/SRDJGMZ +fencing/M +fender/CM +fend/RDSCZG +Fenelia/M +fenestration/CSM +Fenian/M +fenland/M +fen/MS +fennel/SM +Fenwick/M +Feodora/M +Feodor/M +feral +Ferber/M +Ferdie/M +Ferdinanda/M +Ferdinande/M +Ferdinand/M +Ferdinando/M +Ferd/M +Ferdy/M +fer/FLC +Fergus/M +Ferguson/M +Ferlinghetti/M +Fermat/M +fermentation/MS +fermented +fermenter +ferment/FSCM +fermenting +Fermi/M +fermion/MS +fermium/MS +Fernanda/M +Fernande/M +Fernandez/M +Fernandina/M +Fernando/M +Ferne/M +fernery/M +Fern/M +fern/MS +ferny/TR +ferociousness/MS +ferocious/YP +ferocity/MS +Ferrari/M +Ferraro/M +Ferreira/M +Ferrell/M +Ferrel/M +Ferrer/M +ferreter/M +ferret/SMRDG +ferric +ferris +Ferris +ferrite/M +ferro +ferroelectric +ferromagnetic +ferromagnet/M +ferrous +ferrule/MGSD +ferryboat/MS +ferryman/M +ferrymen +ferry/SDMG +fertileness/M +fertile/YP +fertility/IMS +fertilization/ASM +fertilized/U +fertilizer/M +fertilizes/A +fertilize/SRDZG +ferule/SDGM +fervency/MS +fervent/Y +fervidness/M +fervid/YP +fervor/MS +fess/KGFSD +Fess/M +fess's +festal/S +fester/GD +festival/SM +festiveness/SM +festive/PY +festivity/SM +festoon/SMDG +fest/RVZ +fetal +feta/MS +fetcher/M +fetching/Y +fetch/RSDGZ +feted +fte/MS +fetich's +fetidness/SM +fetid/YP +feting +fetishism/SM +fetishistic +fetishist/SM +fetish/MS +fetlock/MS +fetter's +fetter/UGSD +fettle/GSD +fettling/M +fettuccine/S +fetus/SM +feudalism/MS +feudalistic +feudal/Y +feudatory/M +feud/MDSG +feverishness/SM +feverish/PY +fever/SDMG +fewness/MS +few/PTRS +Fey/M +Feynman/M +fey/RT +fez/M +Fez/M +fezzes +ff +FHA +fiance/S +fianc/MS +Fianna/M +Fiann/M +fiascoes +fiasco/M +Fiat/M +fiat/MS +fibbed +fibber/MS +fibbing +fiberboard/MS +fiber/DM +fiberfill/S +Fiberglas/M +fiberglass/DSMG +Fibonacci/M +fibrillate/XGNDS +fibrillation/M +fibril/MS +fibrin/MS +fibroblast/MS +fibroid/S +fibroses +fibrosis/M +fibrousness/M +fibrous/YP +fib/SZMR +fibulae +fibula/M +fibular +FICA +fices +fiche/SM +Fichte/M +fichu/SM +fickleness/MS +fickle/RTP +ficos +fictionalization/MS +fictionalize/DSG +fictional/Y +fiction/SM +fictitiousness/M +fictitious/PY +fictive/Y +ficus +fiddle/GMZJRSD +fiddler/M +fiddlestick/SM +fiddly +fide/F +Fidela/M +Fidelia/M +Fidelio/M +fidelity/IMS +Fidelity/M +Fidel/M +fidget/DSG +fidgety +Fidole/M +Fido/M +fiducial/Y +fiduciary/MS +fiefdom/S +fief/MS +fielded +fielder/IM +fielding +Fielding/M +Field/MGS +fieldstone/M +fieldworker/M +fieldwork/ZMRS +field/ZISMR +fiendishness/M +fiendish/YP +fiend/MS +fierceness/SM +fierce/RPTY +fierily +fieriness/MS +fiery/PTR +fie/S +fies/C +fiesta/MS +fife/DRSMZG +fifer/M +Fifi/M +Fifine/M +FIFO +fifteen/HRMS +fifteenths +fifths +fifth/Y +fiftieths +fifty/HSM +Figaro/M +figged +figging +fightback +fighter/MIS +fighting/IS +fight/ZSJRG +figment/MS +fig/MLS +Figueroa/M +figural +figuration/FSM +figurativeness/M +figurative/YP +figure/GFESD +figurehead/SM +figurer/SM +figure's +figurine/SM +figuring/S +Fijian/SM +Fiji/M +filamentary +filament/MS +filamentous +Filberte/M +Filbert/M +filbert/MS +Filberto/M +filch/SDG +filed/AC +file/KDRSGMZ +filename/SM +filer/KMCS +files/AC +filet's +filial/UY +Filia/M +filibusterer/M +filibuster/MDRSZG +Filide/M +filigreeing +filigree/MSD +filing/AC +filings +Filipino/SM +Filip/M +Filippa/M +Filippo/M +fill/BAJGSD +filled/U +filler/MS +filleting/M +fillet/MDSG +filling/M +fillip/MDGS +Fillmore/M +filly/SM +filmdom/M +Filmer/M +filminess/SM +filming/M +filmmaker/S +Filmore/M +film/SGMD +filmstrip/SM +filmy/RTP +Filofax/S +filtered/U +filterer/M +filter/RDMSZGB +filthily +filthiness/SM +filth/M +filths +filthy/TRSDGP +filtrated/I +filtrate/SDXMNG +filtrates/I +filtrating/I +filtration/IMS +finagler/M +finagle/RSDZG +finale/MS +finalist/MS +finality/MS +finalization/SM +finalize/GSD +final/SY +Fina/M +financed/A +finance/MGSDJ +finances/A +financial/Y +financier/DMGS +financing/A +Finch/M +finch/MS +findable/U +find/BRJSGZ +finder/M +finding/M +Findlay/M +Findley/M +fine/FGSCRDA +finely +fineness/MS +finery/MAS +fine's +finespun +finesse/SDMG +fingerboard/SM +fingerer/M +fingering/M +fingerless +fingerling/M +fingernail/MS +fingerprint/SGDM +finger/SGRDMJ +fingertip/MS +finial/SM +finical +finickiness/S +finicky/RPT +fining/M +finished/UA +finisher/M +finishes/A +finish/JZGRSD +finis/SM +finite/ISPY +finitely/C +finiteness/MIC +fink/GDMS +Finland/M +Finlay/M +Finley/M +Fin/M +Finnbogadottir/M +finned +Finnegan/M +finner +finning +Finnish +Finn/MS +finny/RT +fin/TGMDRS +Fiona/M +Fionna/M +Fionnula/M +fiord's +Fiorello/M +Fiorenze/M +Fiori/M +f/IRAC +firearm/SM +fireball/SM +fireboat/M +firebomb/MDSG +firebox/MS +firebrand/MS +firebreak/SM +firebrick/SM +firebug/SM +firecracker/SM +firedamp/SM +fired/U +firefight/JRGZS +firefly/MS +Firefox/M +fireguard/M +firehouse/MS +firelight/GZSM +fireman/M +firemen +fire/MS +fireplace/MS +fireplug/MS +firepower/SM +fireproof/SGD +firer/M +firesafe +fireside/SM +Firestone/M +firestorm/SM +firetrap/SM +firetruck/S +firewall/S +firewater/SM +firewood/MS +firework/MS +firing/M +firkin/M +firmament/MS +firmer +firmest +firm/ISFDG +firmly/I +firmness/MS +firm's +firmware/MS +firring +firstborn/S +firsthand +first/SY +firth/M +firths +fir/ZGJMDRHS +fiscal/YS +Fischbein/M +Fischer/M +fishbowl/MS +fishcake/S +fisher/M +Fisher/M +fisherman/M +fishermen/M +fishery/MS +fishhook/MS +fishily +fishiness/MS +fishing/M +fish/JGZMSRD +Fishkill/M +fishmeal +fishmonger/MS +fishnet/SM +fishpond/SM +fishtail/DMGS +fishtanks +fishwife/M +fishwives +fishy/TPR +Fiske/M +Fisk/M +fissile +fissionable/S +fission/BSDMG +fissure/MGSD +fistfight/SM +fistful/MS +fisticuff/SM +fist/MDGS +fistula/SM +fistulous +Fitchburg/M +Fitch/M +fitfulness/SM +fitful/PY +fitments +fitness/USM +fits/AK +fit's/K +fitted/UA +fitter/SM +fittest +fitting/AU +fittingly +fittingness/M +fittings +fit/UYPS +Fitzgerald/M +Fitz/M +Fitzpatrick/M +Fitzroy/M +fivefold +five/MRS +fiver/M +fixable +fixate/VNGXSD +fixatifs +fixation/M +fixative/S +fixedness/M +fixed/YP +fixer/SM +fixes/I +fixing/SM +fixity/MS +fixture/SM +fix/USDG +Fizeau/M +fizzer/M +fizzle/GSD +fizz/SRDG +fizzy/RT +fjord/SM +FL +flabbergast/GSD +flabbergasting/Y +flabbily +flabbiness/SM +flabby/TPR +flab/MS +flaccidity/MS +flaccid/Y +flack/SGDM +flagella/M +flagellate/DSNGX +flagellation/M +flagellum/M +flagged +flaggingly/U +flagging/SMY +flagman/M +flagmen +flag/MS +flagon/SM +flagpole/SM +flagrance/MS +flagrancy/SM +flagrant/Y +flagship/MS +flagstaff/MS +flagstone/SM +flail/SGMD +flair/SM +flaker/M +flake/SM +flakiness/MS +flak/RDMGS +flaky/PRT +Fla/M +flamb/D +flambeing +flambes +flamboyance/MS +flamboyancy/MS +flamboyant/YS +flamenco/SM +flamen/M +flameproof/DGS +flamer/IM +flame's +flame/SIGDR +flamethrower/SM +flamingo/SM +flaming/Y +flammability/ISM +flammable/SI +flam/MRNDJGZ +Flanagan/M +Flanders/M +flange/GMSD +flanker/M +flank/SGZRDM +flan/MS +flannel/DMGS +flannelet/MS +flannelette's +flapjack/SM +flap/MS +flapped +flapper/SM +flapping +flaps/M +flare/SDG +flareup/S +flaring/Y +flashback/SM +flashbulb/SM +flashcard/S +flashcube/MS +flasher/M +flashgun/S +flashily +flashiness/SM +flashing/M +flash/JMRSDGZ +flashlight/MS +flashy/TPR +flask/SM +flatbed/S +flatboat/MS +flatcar/MS +flatfeet +flatfish/SM +flatfoot/SGDM +flathead/M +flatiron/SM +flatland/RS +flatmate/M +flat/MYPS +flatness/MS +flatted +flattener/M +flatten/SDRG +flatter/DRSZG +flatterer/M +flattering/YU +flattery/SM +flattest/M +flatting +flattish +Flatt/M +flattop/MS +flatulence/SM +flatulent/Y +flatus/SM +flatware/MS +flatworm/SM +Flaubert/M +flaunting/Y +flaunt/SDG +flautist/SM +flavored/U +flavorer/M +flavorful +flavoring/M +flavorless +flavor/SJDRMZG +flavorsome +flaw/GDMS +flawlessness/MS +flawless/PY +flax/MSN +flaxseed/M +flayer/M +flay/RDGZS +fleabag/MS +fleabites +flea/SM +fleawort/M +fleck/GRDMS +Fledermaus/M +fledged/U +fledge/GSD +fledgling/SM +fleecer/M +fleece/RSDGMZ +fleeciness/SM +fleecy/RTP +fleeing +flee/RS +fleetingly/M +fleetingness/SM +fleeting/YP +fleet/MYRDGTPS +fleetness/MS +Fleischer/M +Fleischman/M +Fleisher/M +Fleming/M +Flemished/M +Flemish/GDSM +Flemishing/M +Flem/JGM +Flemming/M +flesher/M +fleshiness/M +flesh/JMYRSDG +fleshless +fleshly/TR +fleshpot/SM +fleshy/TPR +fletch/DRSGJ +fletcher/M +Fletcher/M +fletching/M +Fletch/MR +Fleurette/M +Fleur/M +flew/S +flews/M +flexed/I +flexibility/MSI +flexible/I +flexibly/I +flexitime's +flex/MSDAG +flextime/S +flexural +flexure/M +fl/GJD +flibbertigibbet/MS +flicker/GD +flickering/Y +flickery +flick/GZSRD +flier/M +flight/GMDS +flightiness/SM +flightless +flightpath +flighty/RTP +flimflammed +flimflamming +flimflam/MS +flimsily +flimsiness/MS +flimsy/PTRS +flincher/M +flinch/GDRS +flinching/U +flinger/M +fling/RMG +Flin/M +Flinn/M +flintiness/M +flintless +flintlock/MS +Flint/M +flint/MDSG +Flintstones +flinty/TRP +flipflop +flippable +flippancy/MS +flippant/Y +flipped +flipper/SM +flippest +flipping +flip/S +flirtation/SM +flirtatiousness/MS +flirtatious/PY +flirt/GRDS +flit/S +flitted +flitting +floater/M +float/SRDGJZ +floaty +flocculate/GNDS +flocculation/M +flock/SJDMG +floe/MS +flogged +flogger/SM +flogging/SM +flog/S +Flo/M +floodgate/MS +floodlight/DGMS +floodlit +floodplain/S +flood/SMRDG +floodwater/SM +floorboard/MS +floorer/M +flooring/M +floor/SJRDMG +floorspace +floorwalker/SM +floozy/SM +flophouse/SM +flop/MS +flopped +flopper/M +floppily +floppiness/SM +flopping +floppy/TMRSP +floral/SY +Flora/M +Florance/M +flora/SM +Florella/M +Florence/M +Florencia/M +Florentia/M +Florentine/S +Florenza/M +florescence/MIS +florescent/I +Flore/SM +floret/MS +Florette/M +Floria/M +Florian/M +Florida/M +Floridan/S +Floridian/S +floridness/SM +florid/YP +Florie/M +Florina/M +Florinda/M +Florine/M +florin/MS +Flori/SM +florist/MS +Flor/M +Florrie/M +Florri/M +Florry/M +Flory/M +floss/GSDM +Flossie/M +Flossi/M +Flossy/M +flossy/RST +flotation/SM +flotilla/SM +flotsam/SM +flounce/GDS +flouncing/M +flouncy/RT +flounder/SDG +flourisher/M +flourish/GSRD +flourishing/Y +flour/SGDM +floury/TR +flouter/M +flout/GZSRD +flowchart/SG +flowed +flowerbed/SM +flower/CSGD +flowerer/M +floweriness/SM +flowerless +flowerpot/MS +flower's +Flowers +flowery/TRP +flowing/Y +flow/ISG +flown +flowstone +Floyd/M +Flss/M +flt +flubbed +flubbing +flub/S +fluctuate/XSDNG +fluctuation/M +fluency/MS +fluently +fluent/SF +flue/SM +fluffiness/SM +fluff/SGDM +fluffy/PRT +fluidity/SM +fluidized +fluid/MYSP +fluidness/M +fluke/SDGM +fluky/RT +flume/SDGM +flummox/DSG +flu/MS +flung +flunkey's +flunk/SRDG +flunky/MS +fluoresce/GSRD +fluorescence/MS +fluorescent/S +fluoridate/XDSGN +fluoridation/M +fluoride/SM +fluorimetric +fluorinated +fluorine/SM +fluorite/MS +fluorocarbon/MS +fluoroscope/MGDS +fluoroscopic +flurry/GMDS +flushness/M +flush/TRSDPBG +fluster/DSG +fluter/M +flute/SRDGMJ +fluting/M +flutist/MS +flutter/DRSG +flutterer/M +fluttery +fluxed/A +fluxes/A +flux/IMS +fluxing +flyaway +flyblown +flyby/M +flybys +flycatcher/MS +flyer's +fly/JGBDRSTZ +flyleaf/M +flyleaves +Flynn/M +flyover/MS +flypaper/MS +flysheet/S +flyspeck/MDGS +flyswatter/S +flyway/MS +flyweight/MS +flywheel/MS +FM +Fm/M +FNMA/M +foal/MDSG +foaminess/MS +foam/MRDSG +foamy/RPT +fobbed +fobbing +fob/SM +focal/F +focally +Foch/M +foci/M +focused/AU +focuser/M +focuses/A +focus/SRDMBG +fodder/GDMS +foe/SM +foetid +FOFL +fogbound +fogged/C +foggily +fogginess/MS +fogging/C +foggy/RPT +foghorn/SM +fogs/C +fog/SM +fogyish +fogy/SM +foible/MS +foil/GSD +foist/GDS +Fokker/M +foldable/U +foldaway/S +folded/AU +folder/M +foldout/MS +fold/RDJSGZ +folds/UA +Foley/M +foliage/MSD +foliate/CSDXGN +foliation/CM +folio/SDMG +folklike +folklore/MS +folkloric +folklorist/SM +folk/MS +folksiness/MS +folksinger/S +folksinging/S +folksong/S +folksy/TPR +folktale/S +folkway/S +foll +follicle/SM +follicular +follower/M +follow/JSZBGRD +followup's +folly/SM +Folsom +fol/Y +Fomalhaut/M +fomentation/SM +fomenter/M +foment/RDSG +Fonda/M +fondant/SM +fondle/GSRD +fondler/M +fondness/MS +fond/PMYRDGTS +fondue/MS +Fons +Fonsie/M +Fontainebleau/M +Fontaine/M +Fontana/M +fontanelle's +fontanel/MS +font/MS +Fonzie/M +Fonz/M +foodie/S +food/MS +foodstuff/MS +foolery/MS +foolhardily +foolhardiness/SM +foolhardy/PTR +foolishness/SM +foolish/PRYT +fool/MDGS +foolproof +foolscap/MS +footage/SM +football/SRDMGZ +footbridge/SM +Foote/M +footer/M +footfall/SM +foothill/SM +foothold/MS +footing/M +footless +footlights +footling +footlocker/SM +footloose +footman/M +footmarks +footmen +footnote/MSDG +footpad/SM +footpath/M +footpaths +footplate/M +footprint/MS +footrace/S +footrest/MS +footsie/SM +foot/SMRDGZJ +footsore +footstep/SM +footstool/SM +footwear/M +footwork/SM +fop/MS +fopped +foppery/MS +fopping +foppishness/SM +foppish/YP +forage/GSRDMZ +forager/M +forayer/M +foray/SGMRD +forbade +forbearance/SM +forbearer/M +forbear/MRSG +Forbes/M +forbidden +forbiddingness/M +forbidding/YPS +forbid/S +forbore +forborne +forced/Y +forcefield/MS +forcefulness/MS +forceful/PY +forceps/M +forcer/M +force/SRDGM +forcibleness/M +forcible/P +forcibly +fordable/U +Fordham/M +Ford/M +ford/SMDBG +forearm/GSDM +forebear/MS +forebode/GJDS +forebodingness/M +foreboding/PYM +forecaster/M +forecastle/MS +forecast/SZGR +foreclose/GSD +foreclosure/MS +forecourt/SM +foredoom/SDG +forefather/SM +forefeet +forefinger/MS +forefoot/M +forefront/SM +foregoer/M +foregoing/S +foregone +foregos +foreground/MGDS +forehand/S +forehead/MS +foreigner/M +foreignness/SM +foreign/PRYZS +foreknew +foreknow/GS +foreknowledge/MS +foreknown +foreleg/MS +forelimb/MS +forelock/MDSG +foreman/M +Foreman/M +foremast/SM +foremen +foremost +forename/DSM +forenoon/SM +forensically +forensic/S +forensics/M +foreordain/DSG +forepart/MS +forepaws +forepeople +foreperson/S +foreplay/MS +forequarter/SM +forerunner/MS +fore/S +foresail/SM +foresaw +foreseeable/U +foreseeing +foreseen/U +foreseer/M +foresee/ZSRB +foreshadow/SGD +foreshore/M +foreshorten/DSG +foresightedness/SM +foresighted/PY +foresight/SMD +foreskin/SM +forestaller/M +forestall/LGSRD +forestallment/M +forestation/MCS +forestations/A +forest/CSAGD +Forester/M +forester/SM +forestland/S +Forest/MR +forestry/MS +forest's +foretaste/MGSD +foreteller/M +foretell/RGS +forethought/MS +foretold +forevermore +forever/PS +forewarner/M +forewarn/GSJRD +forewent +forewoman/M +forewomen +foreword/SM +forfeiter/M +forfeiture/MS +forfeit/ZGDRMS +forfend/GSD +forgather/GSD +forgave +forged/A +forge/JVGMZSRD +forger/M +forgery/MS +forges/A +forgetfulness/SM +forgetful/PY +forget/SV +forgettable/U +forgettably/U +forgetting +forging/M +forgivable/U +forgivably/U +forgiven +forgiveness/SM +forgiver/M +forgive/SRPBZG +forgivingly +forgivingness/M +forgiving/UP +forgoer/M +forgoes +forgone +forgo/RSGZ +forgot +forgotten/U +for/HT +forkful/S +fork/GSRDM +forklift/DMSG +forlornness/M +forlorn/PTRY +formability/AM +formaldehyde/SM +formalin/M +formalism/SM +formalistic +formalist/SM +formality/SMI +formal/IY +formalization/SM +formalized/U +formalizer/M +formalizes/I +formalize/ZGSRD +formalness/M +formals +formant/MIS +format/AVS +formate/MXGNSD +formation/AFSCIM +formatively/I +formativeness/IM +formative/SYP +format's +formatted/UA +formatter/A +formatters +formatter's +formatting/A +form/CGSAFDI +formed/U +former/FSAI +formerly +formfitting +formic +Formica/MS +formidableness/M +formidable/P +formidably +formlessness/MS +formless/PY +Formosa/M +Formosan +form's +formulaic +formula/SM +formulate/AGNSDX +formulated/U +formulation/AM +formulator/SM +fornicate/GNXSD +fornication/M +fornicator/SM +Forrester/M +Forrest/RM +forsaken +forsake/SG +forsook +forsooth +Forster/M +forswear/SG +forswore +forsworn +forsythia/MS +Fortaleza/M +forte/MS +forthcome/JG +forthcoming/U +FORTH/M +forthrightness/SM +forthright/PYS +forthwith +fortieths +fortification/MS +fortified/U +fortifier/SM +fortify/ADSG +fortiori +fortissimo/S +fortitude/SM +fortnightly/S +fortnight/MYS +FORTRAN +Fortran/M +fortress/GMSD +fort/SM +fortuitousness/SM +fortuitous/YP +fortuity/MS +fortunateness/M +fortunate/YUS +fortune/MGSD +fortuneteller/SM +fortunetelling/SM +forty/SRMH +forum/MS +forwarder/M +forwarding/M +forwardness/MS +forward/PTZSGDRY +forwent +fossiliferous +fossilization/MS +fossilized/U +fossilize/GSD +fossil/MS +Foss/M +fosterer/M +Foster/M +foster/SRDG +Foucault/M +fought +foulard/SM +foulmouth/D +foulness/MS +fouls/M +foul/SYRDGTP +foundational +foundation/SM +founded/UF +founder/MDG +founder's/F +founding/F +foundling/MS +found/RDGZS +foundry/MS +founds/KF +fountainhead/SM +fountain/SMDG +fount/MS +fourfold +Fourier/M +fourpence/M +fourpenny +fourposter/SM +fourscore/S +four/SHM +foursome/SM +foursquare +fourteener/M +fourteen/SMRH +fourteenths +Fourth +fourths +Fourths +fourth/Y +fovea/M +fowler/M +Fowler/M +fowling/M +fowl/SGMRD +foxfire/SM +foxglove/SM +Foxhall/M +foxhole/SM +foxhound/SM +foxily +foxiness/MS +foxing/M +fox/MDSG +Fox/MS +foxtail/M +foxtrot/MS +foxtrotted +foxtrotting +foxy/TRP +foyer/SM +FPO +fps +fr +fracas/SM +fractal/SM +fractional/Y +fractionate/DNG +fractionation/M +fractioned +fractioning +fraction/ISMA +fractiousness/SM +fractious/PY +fracture/MGDS +fragile/Y +fragility/MS +fragmentarily +fragmentariness/M +fragmentary/P +fragmentation/MS +fragment/SDMG +Fragonard/M +fragrance/SM +fragrant/Y +frailness/MS +frail/STPYR +frailty/MS +framed/U +framer/M +frame/SRDJGMZ +framework/SM +framing/M +Francaise/M +France/MS +Francene/M +Francesca/M +Francesco/M +franchisee/S +franchise/ESDG +franchiser/SM +franchise's +Franchot/M +Francie/M +Francine/M +Francis +Francisca/M +Franciscan/MS +Francisco/M +Franciska/M +Franciskus/M +francium/MS +Francklin/M +Francklyn/M +Franck/M +Francoise/M +Francois/M +Franco/M +francophone/M +franc/SM +Francyne/M +frangibility/SM +frangible +Frankel/M +Frankenstein/MS +franker/M +Frankford/M +Frankfort/M +Frankfurter/M +frankfurter/MS +Frankfurt/RM +Frankie/M +frankincense/MS +Frankish/M +franklin/M +Franklin/M +Franklyn/M +frankness/MS +frank/SGTYRDP +Frank/SM +Franky/M +Fran/MS +Frannie/M +Franni/M +Franny/M +Fransisco/M +frantically +franticness/M +frantic/PY +Frants/M +Franzen/M +Franz/NM +frapp +frappeed +frappeing +frappes +Frasco/M +Fraser/M +Frasier/M +Frasquito/M +fraternal/Y +fraternity/MSF +fraternization/SM +fraternize/GZRSD +fraternizer/M +fraternizing/U +frat/MS +fratricidal +fratricide/MS +fraud/CS +fraud's +fraudsters +fraudulence/S +fraudulent/YP +fraught/SGD +Fraulein/S +Frau/MN +fray/CSDG +Frayda/M +Frayne/M +fray's +Fraze/MR +Frazer/M +Frazier/M +frazzle/GDS +freakishness/SM +freakish/YP +freak/SGDM +freaky/RT +freckle/GMDS +freckly/RT +Freda/M +Freddie/M +Freddi/M +Freddy/M +Fredek/M +Fredelia/M +Frederica/M +Frederich/M +Fredericka/M +Frederick/MS +Frederic/M +Frederico/M +Fredericton/M +Frederigo/M +Frederik/M +Frederique/M +Fredholm/M +Fredia/M +Fredi/M +Fred/M +Fredra/M +Fredrick/M +Fredrickson/M +Fredric/M +Fredrika/M +freebase/GDS +freebie/MS +freebooter/M +freeboot/ZR +freeborn +freedman/M +Freedman/M +freedmen +freedom/MS +freehand/D +freehanded/Y +freeholder/M +freehold/ZSRM +freeing/S +freelance/SRDGZM +Freeland/M +freeloader/M +freeload/SRDGZ +Free/M +freeman/M +Freeman/M +freemasonry/M +Freemasonry/MS +Freemason/SM +freemen +Freemon/M +freeness/M +Freeport/M +freestanding +freestone/SM +freestyle/SM +freethinker/MS +freethinking/S +Freetown/M +freeway/MS +freewheeler/M +freewheeling/P +freewheel/SRDMGZ +freewill +free/YTDRSP +freezable +freezer/SM +freeze/UGSA +freezing/S +Freida/M +freighter/M +freight/ZGMDRS +Fremont/M +Frenchman/M +French/MDSG +Frenchmen +Frenchwoman/M +Frenchwomen +frenetically +frenetic/S +frenzied/Y +frenzy/MDSG +freon/S +Freon/SM +freq +frequency/ISM +frequented/U +frequenter/MS +frequentest +frequenting +frequent/IY +frequentness/M +frequents +fresco/DMG +frescoes +fresh/AZSRNDG +freshener/M +freshen/SZGDR +fresher/MA +freshest +freshet/SM +freshly +freshman/M +freshmen +freshness/MS +freshwater/SM +Fresnel/M +Fresno/M +fretboard +fretfulness/MS +fretful/PY +fret/S +fretsaw/S +fretted +fretting +fretwork/MS +Freudian/S +Freud/M +Freya/M +Frey/M +friableness/M +friable/P +friary/MS +friar/YMS +fricasseeing +fricassee/MSD +frication/M +fricative/MS +Frick/M +frictional/Y +frictionless/Y +friction/MS +Friday/SM +fridge/SM +fried/A +Frieda/M +Friedan/M +friedcake/SM +Friederike/M +Friedman/M +Friedrich/M +Friedrick/M +friendlessness/M +friendless/P +friendlies +friendlily +friendliness/USM +friendly/PUTR +friend/SGMYD +friendship/MS +frier's +fries/M +frieze/SDGM +frigate/SM +Frigga/M +frigged +frigging/S +frighten/DG +frightening/Y +frightfulness/MS +frightful/PY +fright/GXMDNS +Frigidaire/M +frigidity/MS +frigidness/SM +frigid/YP +frig/S +frill/MDGS +frilly/RST +Fri/M +fringe/IGSD +fringe's +frippery/SM +Frisbee/MS +Frisco/M +Frisian/SM +frisker/M +friskily +friskiness/SM +frisk/RDGS +frisky/RTP +frisson/M +Frito/M +fritterer/M +fritter/RDSG +Fritz/M +fritz/SM +frivolity/MS +frivolousness/SM +frivolous/PY +frizz/GYSD +frizzle/DSG +frizzly/RT +frizzy/RT +Fr/MD +Frobisher/M +frocking/M +frock's +frock/SUDGC +frogged +frogging +frogman/M +frogmarched +frogmen +frog/MS +fro/HS +Froissart/M +frolicked +frolicker/SM +frolicking +frolic/SM +frolicsome +from +Fromm/M +frond/SM +frontage/MS +frontal/SY +Frontenac/M +front/GSFRD +frontier/SM +frontiersman/M +frontiersmen +frontispiece/SM +frontrunner's +front's +frontward/S +frosh/M +Frostbelt/M +frostbite/MS +frostbit/G +frostbiting/M +frostbitten +frost/CDSG +frosteds +frosted/U +frostily +frostiness/SM +frosting/MS +Frost/M +frost's +frosty/PTR +froth/GMD +frothiness/SM +froths +frothy/TRP +froufrou/MS +frowardness/MS +froward/P +frowner/M +frowning/Y +frown/RDSG +frowzily +frowziness/SM +frowzy/RPT +frozenness/M +frozen/YP +froze/UA +fructify/GSD +fructose/MS +Fruehauf/M +frugality/SM +frugal/Y +fruitcake/SM +fruiterer/M +fruiter/RM +fruitfuller +fruitfullest +fruitfulness/MS +fruitful/UYP +fruit/GMRDS +fruitiness/MS +fruition/SM +fruitlessness/MS +fruitless/YP +fruity/RPT +frumpish +frump/MS +frumpy/TR +Frunze/M +frustrater/M +frustrate/RSDXNG +frustrating/Y +frustration/M +frustum/SM +Frye/M +fryer/MS +Fry/M +fry/NGDS +F's +f's/KA +FSLIC +ft/C +FTC +FTP +fuchsia/MS +Fuchs/M +fucker/M! +fuck/GZJRDMS! +FUD +fuddle/GSD +fudge/GMSD +fuel/ASDG +fueler/SM +fuel's +Fuentes/M +fugal +Fugger/M +fugitiveness/M +fugitive/SYMP +fugue/GMSD +fuhrer/S +Fuji/M +Fujitsu/M +Fujiyama +Fukuoka/M +Fulani/M +Fulbright/M +fulcrum/SM +fulfilled/U +fulfiller/M +fulfill/GLSRD +fulfillment/MS +fullback/SMG +fuller/DMG +Fuller/M +Fullerton/M +fullish +fullness/MS +full/RDPSGZT +fullstops +fullword/SM +fully +fulminate/XSDGN +fulmination/M +fulness's +fulsomeness/SM +fulsome/PY +Fulton/M +Fulvia/M +fumble/GZRSD +fumbler/M +fumbling/Y +fume/DSG +fumigant/MS +fumigate/NGSDX +fumigation/M +fumigator/SM +fuming/Y +fumy/TR +Funafuti +functionalism/M +functionalist/SM +functionality/S +functional/YS +functionary/MS +function/GSMD +functor/SM +fundamentalism/SM +fundamentalist/SM +fundamental/SY +fund/ASMRDZG +funded/U +fundholders +fundholding +funding/S +Fundy/M +funeral/MS +funerary +funereal/Y +funfair/M +fungal/S +fungible/M +fungicidal +fungicide/SM +fungi/M +fungoid/S +fungous +fungus/M +funicular/SM +funk/GSDM +funkiness/S +funky/RTP +fun/MS +funned +funnel/SGMD +funner +funnest +funnily/U +funniness/SM +funning +funny/RSPT +furbelow/MDSG +furbisher/M +furbish/GDRSA +furiousness/M +furious/RYP +furlong/MS +furlough/DGM +furloughs +furl/UDGS +furn +furnace/GMSD +furnished/U +furnisher/MS +furnish/GASD +furnishing/SM +furniture/SM +furore/MS +furor/MS +fur/PMS +furred +furrier/M +furriness/SM +furring/SM +furrow/DMGS +furry/RTZP +furtherance/MS +furtherer/M +furthermore +furthermost +further/TGDRS +furthest +furtiveness/SM +furtive/PY +fury/SM +furze/SM +fusebox/S +fusee/SM +fuse/FSDAGCI +fuselage/SM +fuse's/A +Fushun/M +fusibility/SM +fusible/I +fusiform +fusilier/MS +fusillade/SDMG +fusion/KMFSI +fussbudget/MS +fusser/M +fussily +fussiness/MS +fusspot/SM +fuss/SRDMG +fussy/PTR +fustian/MS +fustiness/MS +fusty/RPT +fut +futileness/M +futile/PY +futility/MS +futon/S +future/SM +futurism/SM +futuristic/S +futurist/S +futurity/MS +futurologist/S +futurology/MS +futz/GSD +fuze's +Fuzhou/M +Fuzzbuster/M +fuzzily +fuzziness/SM +fuzz/SDMG +fuzzy/PRT +fwd +FWD +fwy +FY +FYI +GA +gabardine/SM +gabbed +Gabbey/M +Gabbie/M +Gabbi/M +gabbiness/S +gabbing +gabble/SDG +Gabby/M +gabby/TRP +Gabe/M +gaberdine's +Gabey/M +gabfest/MS +Gabie/M +Gabi/M +gable/GMSRD +Gable/M +Gabonese +Gabon/M +Gaborone/M +Gabriela/M +Gabriele/M +Gabriella/M +Gabrielle/M +Gabriellia/M +Gabriell/M +Gabriello/M +Gabriel/M +Gabrila/M +gab/S +Gaby/M +Gacrux/M +gadabout/MS +gadded +gadder/MS +gadding +gadfly/MS +gadgetry/MS +gadget/SM +gadolinium/MS +gad/S +Gadsden/M +Gaea/M +Gaelan/M +Gaelic/M +Gael/SM +Gae/M +gaffe/MS +gaffer/M +gaff/SGZRDM +gaga +Gagarin/M +gag/DRSG +Gage/M +gager/M +gage/SM +gagged +gagging +gaggle/SDG +gagwriter/S +gaiety/MS +Gaile/M +Gail/M +gaily +gain/ADGS +gainer/SM +Gaines/M +Gainesville/M +gainfulness/M +gainful/YP +gaining/S +gainly/U +gainsaid +gainsayer/M +gainsay/RSZG +Gainsborough/M +gaiter/M +gait/GSZMRD +Gaithersburg/M +galactic +Galahad/MS +Galapagos/M +gal/AS +gala/SM +Galatea/M +Galatia/M +Galatians/M +Galaxy/M +galaxy/MS +Galbraith/M +Galbreath/M +gale/AS +Gale/M +galen +galena/MS +galenite/M +Galen/M +gale's +Galibi/M +Galilean/MS +Galilee/M +Galileo/M +Galina/M +Gallagher/M +gallanted +gallanting +gallantry/MS +gallants +gallant/UY +Gallard/M +gallbladder/MS +Gallegos/M +galleon/SM +galleria/S +gallery/MSDG +galley/MS +Gallic +Gallicism/SM +gallimaufry/MS +galling/Y +gallium/SM +gallivant/GDS +Gall/M +gallonage/M +gallon/SM +galloper/M +gallop/GSRDZ +Galloway/M +gallows/M +gall/SGMD +gallstone/MS +Gallup/M +Gal/MN +Galois/M +galoot/MS +galore/S +galosh/GMSD +gal's +Galsworthy/M +galumph/GD +galumphs +galvanic +Galvani/M +galvanism/MS +galvanization/SM +galvanize/SDG +Galvan/M +galvanometer/SM +galvanometric +Galven/M +Galveston/M +Galvin/M +Ga/M +Gamaliel/M +Gama/M +Gambia/M +Gambian/S +gambit/MS +gamble/GZRSD +Gamble/M +gambler/M +gambol/SGD +gamecock/SM +gamekeeper/MS +gameness/MS +game/PJDRSMYTZG +gamesmanship/SM +gamesmen +gamester/M +gamest/RZ +gamete/MS +gametic +gamine/SM +gaminess/MS +gaming/M +gamin/MS +gamma/MS +gammon/DMSG +Gamow/M +gamut/MS +gamy/TRP +gander/DMGS +Gandhian +Gandhi/M +gangbusters +ganger/M +Ganges/M +gang/GRDMS +gangland/SM +ganglia/M +gangling +ganglionic +ganglion/M +gangplank/SM +gangrene/SDMG +gangrenous +gangster/SM +Gangtok/M +gangway/MS +Gan/M +gannet/SM +Gannie/M +Gannon/M +Ganny/M +gantlet/GMDS +Gantry/M +gantry/MS +Ganymede/M +GAO +gaoler/M +gaol/MRDGZS +gaper/M +gape/S +gaping/Y +gapped +gapping +gap/SJMDRG +garage/GMSD +Garald/M +garbageman/M +garbage/SDMG +garbanzo/MS +garb/DMGS +garbler/M +garble/RSDG +Garbo/M +Garcia/M +garon/SM +gardener/M +Gardener/M +gardenia/SM +gardening/M +garden/ZGRDMS +Gardie/M +Gardiner/M +Gard/M +Gardner/M +Gardy/M +Garek/M +Gare/MH +Gareth/M +Garey/M +Garfield/M +garfish/MS +Garfunkel/M +Gargantua/M +gargantuan +gargle/SDG +gargoyle/DSM +Garibaldi/M +Garik/M +garishness/MS +garish/YP +Garland/M +garland/SMDG +garlicked +garlicking +garlicky +garlic/SM +garment/MDGS +Gar/MH +Garner/M +garner/SGD +Garnet/M +garnet/SM +Garnette/M +Garnett/M +garnish/DSLG +garnisheeing +garnishee/SDM +garnishment/MS +Garold/M +garote's +garotte's +Garrard/M +garred +Garrek/M +Garreth/M +Garret/M +garret/SM +Garrett/M +Garrick/M +Garrik/M +garring +Garrison/M +garrison/SGMD +garroter/M +garrote/SRDMZG +Garrot/M +garrotte's +Garrott/M +garrulity/SM +garrulousness/MS +garrulous/PY +Garry/M +gar/SLM +garter/SGDM +Garth/M +Garvey/M +Garvin/M +Garv/M +Garvy/M +Garwin/M +Garwood/M +Gary/M +Garza/M +gasbag/MS +Gascony/M +gaseousness/M +gaseous/YP +gases/C +gas/FC +gash/GTMSRD +gasification/M +gasifier/M +gasify/SRDGXZN +gasket/SM +gaslight/DMS +gasohol/S +gasoline/MS +gasometer/M +Gaspard/M +Gaspar/M +Gasparo/M +gasper/M +Gasper/M +gasp/GZSRD +gasping/Y +gas's +gassed/C +Gasser/M +gasser/MS +Gasset/M +gassiness/M +gassing/SM +gassy/PTR +Gaston/M +gastric +gastritides +gastritis/MS +gastroenteritides +gastroenteritis/M +gastrointestinal +gastronome/SM +gastronomic +gastronomical/Y +gastronomy/MS +gastropod/SM +gasworks/M +gateau/MS +gateaux +gatecrash/GZSRD +gatehouse/MS +gatekeeper/SM +gate/MGDS +gatepost/SM +Gates +gateway/MS +gathered/IA +gatherer/M +gathering/M +gather/JRDZGS +gathers/A +Gatlinburg/M +Gatling/M +Gatorade/M +gator/MS +Gatsby/M +Gatun/M +gaucheness/SM +gaucherie/SM +gauche/TYPR +gaucho/SM +gaudily +gaudiness/MS +gaudy/PRST +gauge/SM +gaugeable +gauger/M +Gauguin/M +Gaulish/M +Gaulle/M +Gaul/MS +Gaultiero/M +gauntlet/GSDM +Gauntley/M +gauntness/MS +gaunt/PYRDSGT +gauss/C +gausses +Gaussian +Gauss/M +gauss's +Gautama/M +Gauthier/M +Gautier/M +gauze/SDGM +gauziness/MS +gauzy/TRP +Gavan/M +gave +gavel/GMDS +Gaven/M +Gavin/M +Gav/MN +gavotte/MSDG +Gavra/M +Gavrielle/M +Gawain/M +Gawen/M +gawkily +gawkiness/MS +gawk/SGRDM +gawky/RSPT +Gayel/M +Gayelord/M +Gaye/M +gayety's +Gayla/M +Gayleen/M +Gaylene/M +Gayler/M +Gayle/RM +Gaylord/M +Gaylor/M +Gay/M +gayness/SM +Gaynor/M +gay/RTPS +Gaza/M +gazebo/SM +gaze/DRSZG +gazelle/MS +gazer/M +gazetteer/SGDM +gazette/MGSD +Gaziantep/M +gazillion/S +gazpacho/MS +GB +G/B +Gdansk/M +Gd/M +GDP +Gearalt/M +Gearard/M +gearbox/SM +gear/DMJSG +gearing/M +gearshift/MS +gearstick +gearwheel/SM +Geary/M +gecko/MS +GED +geegaw's +geeing +geek/SM +geeky/RT +geese/M +geest/M +gee/TDS +geezer/MS +Gehenna/M +Gehrig/M +Geiger/M +Geigy/M +geisha/M +gelatinousness/M +gelatinous/PY +gelatin/SM +gelcap +gelding/M +geld/JSGD +gelid +gelignite/MS +gelled +gelling +gel/MBS +Gelya/M +Ge/M +GE/M +Gemini/SM +gemlike +Gemma/M +gemmed +gemming +gem/MS +gemological +gemologist/MS +gemology/MS +gemstone/SM +gen +Gena/M +Genaro/M +gendarme/MS +gender/DMGS +genderless +genealogical/Y +genealogist/SM +genealogy/MS +Gene/M +gene/MS +generalissimo/SM +generalist/MS +generality/MS +generalizable/SM +generalization/MS +generalized/U +generalize/GZBSRD +generalizer/M +general/MSPY +generalness/M +generalship/SM +genera/M +generate/CXAVNGSD +generational +generation/MCA +generative/AY +generators/A +generator/SM +generically +generic/PS +generosity/MS +generously/U +generousness/SM +generous/PY +Genesco/M +genesis/M +Genesis/M +genes/S +genetically +geneticist/MS +genetic/S +genetics/M +Genet/M +Geneva/M +Genevieve/M +Genevra/M +Genghis/M +geniality/FMS +genially/F +genialness/M +genial/PY +Genia/M +genies/K +genie/SM +genii/M +genitalia +genitals +genital/YF +genitive/SM +genitourinary +genius/SM +Gen/M +Genna/M +Gennie/M +Gennifer/M +Genni/M +Genny/M +Genoa/SM +genocidal +genocide/SM +Geno/M +genome/SM +genotype/MS +Genovera/M +genre/MS +gent/AMS +genteelness/MS +genteel/PRYT +gentian/SM +gentile/S +Gentile's +gentility/MS +gentlefolk/S +gentlemanliness/M +gentlemanly/U +gentleman/YM +gentlemen +gentleness/SM +gentle/PRSDGT +gentlewoman/M +gentlewomen/M +gently +gentrification/M +gentrify/NSDGX +Gentry/M +gentry/MS +genuflect/GDS +genuflection/MS +genuineness/SM +genuine/PY +genus +Genvieve/M +geocentric +geocentrically +geocentricism +geochemical/Y +geochemistry/MS +geochronology/M +geodesic/S +geode/SM +geodesy/MS +geodetic/S +Geoff/M +Geoffrey/M +Geoffry/M +geog +geographer/MS +geographic +geographical/Y +geography/MS +geologic +geological/Y +geologist/MS +geology/MS +geom +Geo/M +geomagnetic +geomagnetically +geomagnetism/SM +geometer/MS +geometrical/Y +geometrician/M +geometric/S +geometry/MS +geomorphological +geomorphology/M +geophysical/Y +geophysicist/MS +geophysics/M +geopolitical/Y +geopolitic/S +geopolitics/M +Georas/M +Geordie/M +Georgeanna/M +Georgeanne/M +Georgena/M +George/SM +Georgeta/M +Georgetown/M +Georgetta/M +Georgette/M +Georgia/M +Georgiana/M +Georgianna/M +Georgianne/M +Georgian/S +Georgie/M +Georgi/M +Georgina/M +Georgine/M +Georg/M +Georgy/M +geostationary +geosynchronous +geosyncline/SM +geothermal +geothermic +Geralda/M +Geraldine/M +Gerald/M +geranium/SM +Gerard/M +Gerardo/M +Gerber/M +gerbil/MS +Gerda/M +Gerek/M +Gerhardine/M +Gerhard/M +Gerhardt/M +Gerianna/M +Gerianne/M +geriatric/S +geriatrics/M +Gerick/M +Gerik/M +Geri/M +Geritol/M +Gerladina/M +Ger/M +Germaine/M +Germain/M +Germana/M +germane +Germania/M +Germanic/M +germanium/SM +germanized +German/SM +Germantown/M +Germany/M +Germayne/M +germen/M +germicidal +germicide/MS +germinal/Y +germinated/U +germinate/XVGNSD +germination/M +germinative/Y +germ/MNS +Gerome/M +Geronimo/M +gerontocracy/M +gerontological +gerontologist/SM +gerontology/SM +Gerrard/M +Gerrie/M +Gerrilee/M +Gerri/M +Gerry/M +gerrymander/SGD +Gershwin/MS +Gerta/M +Gertie/M +Gerti/M +Gert/M +Gertruda/M +Gertrude/M +Gertrudis/M +Gertrud/M +Gerty/M +gerundive/M +gerund/SVM +Gery/M +gestalt/M +gestapo/S +Gestapo/SM +gestate/SDGNX +gestational +gestation/M +gesticulate/XSDVGN +gesticulation/M +gesticulative/Y +gestural +gesture/SDMG +gesundheit +getaway/SM +Gethsemane/M +get/S +getter/SDM +getting +Getty/M +Gettysburg/M +getup/MS +gewgaw/MS +Gewrztraminer +geyser/GDMS +Ghanaian/MS +Ghana/M +Ghanian's +ghastliness/MS +ghastly/TPR +ghat/MS +Ghats/M +Ghent/M +Gherardo/M +gherkin/SM +ghetto/DGMS +ghettoize/SDG +Ghibelline/M +ghostlike +ghostliness/MS +ghostly/TRP +ghost/SMYDG +ghostwrite/RSGZ +ghostwritten +ghostwrote +ghoulishness/SM +ghoulish/PY +ghoul/SM +GHQ +GHz +GI +Giacinta/M +Giacobo/M +Giacometti/M +Giacomo/M +Giacopo/M +Giana/M +Gianina/M +Gian/M +Gianna/M +Gianni/M +Giannini/M +giantess/MS +giantkiller +giant/SM +Giauque/M +Giavani/M +gibber/DGS +gibberish/MS +gibbet/MDSG +Gibbie/M +Gibb/MS +Gibbon/M +gibbon/MS +gibbousness/M +gibbous/YP +Gibby/M +gibe/GDRS +giber/M +giblet/MS +Gib/M +Gibraltar/MS +Gibson/M +giddap +giddily +giddiness/SM +Giddings/M +giddy/GPRSDT +Gide/M +Gideon/MS +Gielgud/M +Gienah/M +Giffard/M +Giffer/M +Giffie/M +Gifford/M +Giff/RM +Giffy/M +giftedness/M +gifted/PY +gift/SGMD +gigabyte/S +gigacycle/MS +gigahertz/M +gigantically +giganticness/M +gigantic/P +gigavolt +gigawatt/M +gigged +gigging +giggler/M +giggle/RSDGZ +giggling/Y +giggly/TR +Gigi/M +gig/MS +GIGO +gigolo/MS +gila +Gila/M +Gilberta/M +Gilberte/M +Gilbertina/M +Gilbertine/M +gilbert/M +Gilbert/M +Gilberto/M +Gilbertson/M +Gilburt/M +Gilchrist/M +Gilda/M +gilder/M +gilding/M +gild/JSGZRD +Gilead/M +Gilemette/M +Giles +Gilgamesh/M +Gilkson/M +Gillan/M +Gilles +Gillespie/M +Gillette/M +Gilliam/M +Gillian/M +Gillie/M +Gilligan/M +Gilli/M +Gill/M +gill/SGMRD +Gilly/M +Gilmore/M +Gil/MY +gilt/S +gimbaled +gimbals +Gimbel/M +gimcrackery/SM +gimcrack/S +gimlet/MDSG +gimme/S +gimmick/GDMS +gimmickry/MS +gimmicky +gimp/GSMD +gimpy/RT +Gina/M +Ginelle/M +Ginevra/M +gingerbread/SM +gingerliness/M +gingerly/P +Ginger/M +ginger/SGDYM +gingersnap/SM +gingery +gingham/SM +gingivitis/SM +Gingrich/M +ginkgoes +ginkgo/M +ginmill +gin/MS +ginned +Ginnie/M +Ginnifer/M +Ginni/M +ginning +Ginny/M +Gino/M +Ginsberg/M +Ginsburg/M +ginseng/SM +Gioconda/M +Giordano/M +Giorgia/M +Giorgi/M +Giorgio/M +Giorgione/M +Giotto/M +Giovanna/M +Giovanni/M +Gipsy's +giraffe/MS +Giralda/M +Giraldo/M +Giraud/M +Giraudoux/M +girded/U +girder/M +girdle/GMRSD +girdler/M +gird/RDSGZ +girlfriend/MS +girlhood/SM +girlie/M +girlishness/SM +girlish/YP +girl/MS +giro/M +girt/GDS +girth/MDG +girths +Gisela/M +Giselbert/M +Gisele/M +Gisella/M +Giselle/M +Gish/M +gist/MS +git/M +Giuditta/M +Giulia/M +Giuliano/M +Giulietta/M +Giulio/M +Giuseppe/M +Giustina/M +Giustino/M +Giusto/M +giveaway/SM +giveback/S +give/HZGRS +given/SP +giver/M +giving/Y +Giza/M +Gizela/M +gizmo's +gizzard/SM +Gk/M +glac/DGS +glacial/Y +glaciate/XNGDS +glaciation/M +glacier/SM +glaciological +glaciologist/M +glaciology/M +gladded +gladden/GDS +gladder +gladdest +gladding +gladdy +glade/SM +gladiatorial +gladiator/SM +Gladi/M +gladiola/MS +gladioli +gladiolus/M +gladly/RT +Glad/M +gladness/MS +gladsome/RT +Gladstone/MS +Gladys +glad/YSP +glamor/DMGS +glamorization/MS +glamorizer/M +glamorize/SRDZG +glamorousness/M +glamorous/PY +glance/GJSD +glancing/Y +glanders/M +glandes +glandular/Y +gland/ZSM +glans/M +glare/SDG +glaringness/M +glaring/YP +Glaser/M +Glasgow/M +glasnost/S +glassblower/S +glassblowing/MS +glassful/MS +glass/GSDM +glasshouse/SM +glassily +glassiness/SM +glassless +Glass/M +glassware/SM +glasswort/M +glassy/PRST +Glastonbury/M +Glaswegian/S +glaucoma/SM +glaucous +glazed/U +glazer/M +glaze/SRDGZJ +glazier/SM +glazing/M +gleam/MDGS +gleaner/M +gleaning/M +glean/RDGZJS +Gleason/M +Gleda/M +gleed/M +glee/DSM +gleefulness/MS +gleeful/YP +gleeing +Glendale/M +Glenda/M +Glenden/M +Glendon/M +Glenine/M +Glen/M +Glenna/M +Glennie/M +Glennis/M +Glenn/M +glen/SM +glibber +glibbest +glibness/MS +glib/YP +glide/JGZSRD +glider/M +glim/M +glimmer/DSJG +glimmering/M +glimpse/DRSZMG +glimpser/M +glint/DSG +glissandi +glissando/M +glisten/DSG +glister/DGS +glitch/MS +glitter/GDSJ +glittering/Y +glittery +glitz/GSD +glitzy/TR +gloaming/MS +gloater/M +gloating/Y +gloat/SRDG +globalism/S +globalist/S +global/SY +globe/SM +globetrotter/MS +glob/GDMS +globularity/M +globularness/M +globular/PY +globule/MS +globulin/MS +glockenspiel/SM +glommed +gloom/GSMD +gloomily +gloominess/MS +gloomy/RTP +glop/MS +glopped +glopping +gloppy/TR +Gloria/M +Gloriana/M +Gloriane/M +glorification/M +glorifier/M +glorify/XZRSDNG +Glori/M +glorious/IYP +gloriousness/IM +Glory/M +glory/SDMG +glossary/MS +gloss/GSDM +glossily +glossiness/SM +glossolalia/SM +glossy/RSPT +glottal +glottalization/M +glottis/MS +Gloucester/M +gloveless +glover/M +Glover/M +glove/SRDGMZ +glower/GD +glow/GZRDMS +glowing/Y +glowworm/SM +glucose/SM +glue/DRSMZG +glued/U +gluer/M +gluey +gluier +gluiest +glummer +glummest +glumness/MS +glum/SYP +gluon/M +glutamate/M +gluten/M +glutenous +glutinousness/M +glutinous/PY +glut/SMNX +glutted +glutting +glutton/MS +gluttonous/Y +gluttony/SM +glyceride/M +glycerinate/MD +glycerine's +glycerin/SM +glycerolized/C +glycerol/SM +glycine/M +glycogen/SM +glycol/MS +Glynda/M +Glynis/M +Glyn/M +Glynnis/M +Glynn/M +glyph/M +glyphs +gm +GM +GMT +gnarl/SMDG +gnash/SDG +gnat/MS +gnawer/M +gnaw/GRDSJ +gnawing/M +gneiss/SM +Gnni/M +gnomelike +GNOME/M +gnome/SM +gnomic +gnomish +gnomonic +gnosticism +Gnosticism/M +gnostic/K +Gnostic/M +GNP +gnu/MS +goad/MDSG +goalie/SM +goalkeeper/MS +goalkeeping/M +goalless +goal/MDSG +goalmouth/M +goalpost/S +goalscorer +goalscoring +goaltender/SM +Goa/M +goatee/SM +goatherd/MS +goat/MS +goatskin/SM +gobbed +gobbet/MS +gobbing +gobbledegook's +gobbledygook/S +gobbler/M +gobble/SRDGZ +Gobi/M +goblet/MS +goblin/SM +gob/SM +Godard/M +Godart/M +godchild/M +godchildren +goddammit +goddamn/GS +Goddard/M +Goddart/M +goddaughter/SM +godded +goddess/MS +godding +Gdel/M +godfather/GSDM +godforsaken +Godfree/M +Godfrey/M +Godfry/M +godhead/S +godhood/SM +Godiva/M +godlessness/MS +godless/P +godlikeness/M +godlike/P +godliness/UMS +godly/UTPR +God/M +godmother/MS +Godot/M +godparent/SM +godsend/MS +god/SMY +godson/MS +Godspeed/S +Godthaab/M +Godunov/M +Godwin/M +Godzilla/M +Goebbels/M +Goering/M +goer/MG +goes +Goethals/M +Goethe/M +gofer/SM +Goff/M +goggler/M +goggle/SRDGZ +Gogh/M +Gog/M +Gogol/M +Goiania/M +going/M +goiter/SM +Golan/M +Golconda/M +Golda/M +Goldarina/M +Goldberg/M +goldbricker/M +goldbrick/GZRDMS +Golden/M +goldenness/M +goldenrod/SM +goldenseal/M +golden/TRYP +goldfinch/MS +goldfish/SM +Goldia/M +Goldie/M +Goldilocks/M +Goldi/M +Goldina/M +Golding/M +Goldman/M +goldmine/S +gold/MRNGTS +goldsmith/M +Goldsmith/M +goldsmiths +Goldstein/M +Goldwater/M +Goldwyn/M +Goldy/M +Goleta/M +golfer/M +golf/RDMGZS +Golgotha/M +Goliath/M +Goliaths +golly/S +Gomez/M +Gomorrah/M +Gompers/M +go/MRHZGJ +gonadal +gonad/SM +gondola/SM +gondolier/MS +Gondwanaland/M +goner/M +gone/RZN +gong/SGDM +gonion/M +gonna +gonorrheal +gonorrhea/MS +Gonzales/M +Gonzalez/M +Gonzalo/M +Goober/M +goober/MS +goodbye/MS +goodhearted +goodie's +goodish +goodly/TR +Good/M +Goodman/M +goodness/MS +goodnight +Goodrich/M +good/SYP +goodwill/MS +Goodwin/M +Goodyear/M +goody/SM +gooey +goofiness/MS +goof/SDMG +goofy/RPT +Google/M +gooier +gooiest +gook/SM +goo/MS +goon/SM +goop/SM +gooseberry/MS +goosebumps +goose/M +goos/SDG +GOP +Gopher +gopher/SM +Goran/M +Goraud/M +Gorbachev +Gordan/M +Gorden/M +Gordian/M +Gordie/M +Gordimer/M +Gordon/M +Gordy/M +gore/DSMG +Gore/M +Goren/M +Gorey/M +Gorgas +gorged/E +gorge/GMSRD +gorgeousness/SM +gorgeous/YP +gorger/EM +gorges/E +gorging/E +Gorgon/M +gorgon/S +Gorgonzola/M +Gorham/M +gorilla/MS +gorily +goriness/MS +goring/M +Gorky/M +gormandizer/M +gormandize/SRDGZ +gormless +gorp/S +gorse/SM +gory/PRT +gos +goshawk/MS +gosh/S +gosling/M +gospeler/M +gospel/MRSZ +Gospel/SM +gossamer/SM +gossipy +gossip/ZGMRDS +gotcha/SM +Gteborg/M +Gotham/M +Gothart/M +Gothicism/M +Gothic/S +Goth/M +Goths +got/IU +goto +GOTO/MS +gotta +gotten/U +Gottfried/M +Goucher/M +Gouda/SM +gouge/GZSRD +gouger/M +goulash/SM +Gould/M +Gounod/M +gourde/SM +gourd/MS +gourmand/MS +gourmet/MS +gout/SM +gouty/RT +governable/U +governance/SM +governed/U +governess/SM +govern/LBGSD +governmental/Y +government/MS +Governor +governor/MS +governorship/SM +gov/S +govt +gown/GSDM +Goya/M +GP +GPA +GPO +GPSS +gr +grabbed +grabber/SM +grabbing/S +grab/S +Gracchus/M +grace/ESDMG +graceful/EYPU +gracefuller +gracefullest +gracefulness/ESM +Graceland/M +gracelessness/MS +graceless/PY +Grace/M +Gracia/M +Graciela/M +Gracie/M +graciousness/SM +gracious/UY +grackle/SM +gradate/DSNGX +gradation/MCS +grade/ACSDG +graded/U +Gradeigh/M +gradely +grader/MC +grade's +Gradey/M +gradient/RMS +grad/MRDGZJS +gradualism/MS +gradualist/MS +gradualness/MS +gradual/SYP +graduand/SM +graduate/MNGDSX +graduation/M +Grady/M +Graehme/M +Graeme/M +Graffias/M +graffiti +graffito/M +Graff/M +grafter/M +grafting/M +graft/MRDSGZ +Grafton/M +Grahame/M +Graham/M +graham/SM +Graig/M +grail/S +Grail/SM +grainer/M +grain/IGSD +graininess/MS +graining/M +grain's +grainy/RTP +gram/KSM +Gram/M +grammarian/SM +grammar/MS +grammaticality/M +grammaticalness/M +grammatical/UY +grammatic/K +gramme/SM +Grammy/S +gramophone/SM +Grampians +grampus/SM +Granada/M +granary/MS +grandam/SM +grandaunt/MS +grandchild/M +grandchildren +granddaddy/MS +granddad/SM +granddaughter/MS +grandee/SM +grandeur/MS +grandfather/MYDSG +grandiloquence/SM +grandiloquent/Y +grandiose/YP +grandiosity/MS +grandkid/SM +grandma/MS +grandmaster/MS +grandmother/MYS +grandnephew/MS +grandness/MS +grandniece/SM +grandpa/MS +grandparent/MS +grandson/MS +grandstander/M +grandstand/SRDMG +grand/TPSYR +granduncle/MS +Grange/MR +grange/MSR +Granger/M +granite/MS +granitic +Gran/M +Grannie/M +Granny/M +granny/MS +granola/S +grantee/MS +granter/M +Grantham/M +Granthem/M +Grantley/M +Grant/M +grantor's +grant/SGZMRD +grantsmanship/S +granularity/SM +granular/Y +granulate/SDXVGN +granulation/M +granule/SM +granulocytic +Granville/M +grapefruit/SM +grape/SDGM +grapeshot/M +grapevine/MS +grapheme/M +graph/GMD +graphical/Y +graphicness/M +graphic/PS +graphics/M +graphite/SM +graphologist/SM +graphology/MS +graphs +grapnel/SM +grapple/DRSG +grappler/M +grappling/M +grasper/M +graspingness/M +grasping/PY +grasp/SRDBG +grass/GZSDM +grasshopper/SM +grassland/MS +Grass/M +grassroots +grassy/RT +Grata/M +gratefuller +gratefullest +gratefulness/USM +grateful/YPU +grater/M +grates/I +grate/SRDJGZ +Gratia/M +Gratiana/M +graticule/M +gratification/M +gratified/U +gratifying/Y +gratify/NDSXG +grating/YM +gratis +gratitude/IMS +gratuitousness/MS +gratuitous/PY +gratuity/SM +gravamen/SM +gravedigger/SM +gravel/SGMYD +graven +graveness/MS +graver/M +graveside/S +Graves/M +grave/SRDPGMZTY +gravestone/SM +graveyard/MS +gravidness/M +gravid/PY +gravimeter/SM +gravimetric +gravitas +gravitate/XVGNSD +gravitational/Y +gravitation/M +graviton/SM +gravity/MS +gravy/SM +graybeard/MS +Grayce/M +grayish +Gray/M +grayness/S +gray/PYRDGTS +Grayson/M +graze/GZSRD +grazer/M +Grazia/M +grazing/M +grease/GMZSRD +greasepaint/MS +greaseproof +greaser/M +greasily +greasiness/SM +greasy/PRT +greatcoat/DMS +greaten/DG +greathearted +greatness/MS +great/SPTYRN +grebe/MS +Grecian/S +Greece/M +greed/C +greedily +greediness/SM +greeds +greed's +greedy/RTP +Greek/SM +Greeley/M +greenback/MS +greenbelt/S +Greenberg/M +Greenblatt/M +Greenbriar/M +Greene/M +greenery/MS +Greenfeld/M +greenfield +Greenfield/M +greenfly/M +greengage/SM +greengrocer/SM +greengrocery/M +greenhorn/SM +greenhouse/SM +greening/M +greenish/P +Greenland/M +Green/M +greenmail/GDS +greenness/MS +Greenpeace/M +greenroom/SM +Greensboro/M +Greensleeves/M +Greensville/M +greensward/SM +green/SYRDMPGT +Greentree/M +Greenville/M +Greenwich/M +greenwood/MS +Greer/M +greeter/M +greeting/M +greets/A +greet/SRDJGZ +gregariousness/MS +gregarious/PY +Gregg/M +Greggory/M +Greg/M +Gregoire/M +Gregoor/M +Gregorian +Gregorio/M +Gregorius/M +Gregor/M +Gregory/M +gremlin/SM +Grenada/M +grenade/MS +Grenadian/S +grenadier/SM +Grenadines +grenadine/SM +Grendel/M +Grenier/M +Grenoble/M +Grenville/M +Gresham/M +Gretal/M +Greta/M +Gretchen/M +Gretel/M +Grete/M +Grethel/M +Gretna/M +Gretta/M +Gretzky/M +grew/A +greybeard/M +greyhound/MS +Grey/M +greyness/M +gridded +griddlecake/SM +griddle/DSGM +gridiron/GSMD +gridlock/DSG +grids/A +grid/SGM +grief/MS +Grieg/M +Grier/M +grievance/SM +griever/M +grieve/SRDGZ +grieving/Y +grievousness/SM +grievous/PY +Griffie/M +Griffin/M +griffin/SM +Griffith/M +Griff/M +griffon's +Griffy/M +griller/M +grille/SM +grill/RDGS +grillwork/M +grimace/DRSGM +grimacer/M +Grimaldi/M +grime/MS +Grimes +griminess/MS +grimmer +grimmest +Grimm/M +grimness/MS +grim/PGYD +grimy/TPR +Grinch/M +grind/ASG +grinder/MS +grinding/SY +grindstone/SM +gringo/SM +grinned +grinner/M +grinning/Y +grin/S +griper/M +gripe/S +grippe/GMZSRD +gripper/M +gripping/Y +grip/SGZMRD +Griselda/M +grisliness/SM +grisly/RPT +Gris/M +Grissel/M +gristle/SM +gristliness/M +gristly/TRP +gristmill/MS +grist/MYS +Griswold/M +grit/MS +gritted +gritter/MS +grittiness/SM +gritting +gritty/PRT +Griz/M +grizzle/DSG +grizzling/M +grizzly/TRS +Gr/M +groaner/M +groan/GZSRDM +groat/SM +grocer/MS +grocery/MS +groggily +grogginess/SM +groggy/RPT +grog/MS +groin/MGSD +grokked +grokking +grok/S +grommet/GMDS +Gromyko/M +groofs +groomer/M +groom/GZSMRD +groomsman/M +groomsmen +Groot/M +groover/M +groove/SRDGM +groovy/TR +groper/M +grope/SRDJGZ +Gropius/M +grosbeak/SM +grosgrain/MS +Gross +Grosset/M +gross/GTYSRDP +Grossman/M +grossness/MS +Grosvenor/M +Grosz/M +grotesqueness/MS +grotesque/PSY +Grotius/M +Groton/M +grottoes +grotto/M +grouch/GDS +grouchily +grouchiness/MS +grouchy/RPT +groundbreaking/S +grounded/U +grounder/M +groundhog/SM +ground/JGZMDRS +groundlessness/M +groundless/YP +groundnut/MS +groundsheet/M +groundskeepers +groundsman/M +groundswell/S +groundwater/S +groundwork/SM +grouped/A +grouper/M +groupie/MS +grouping/M +groups/A +group/ZJSMRDG +grouse/GMZSRD +grouser/M +grouter/M +grout/GSMRD +groveler/M +grovelike +groveling/Y +grovel/SDRGZ +Grover/M +Grove/RM +grove/SRMZ +grower/M +grow/GZYRHS +growing/I +growingly +growler/M +growling/Y +growl/RDGZS +growly/RP +grown/IA +grownup/MS +grows/A +growth/IMA +growths/IA +grubbed +grubber/SM +grubbily +grubbiness/SM +grubbing +grubby/RTP +grub/MS +grubstake/MSDG +grudge/GMSRDJ +grudger/M +grudging/Y +grueling/Y +gruel/MDGJS +gruesomeness/SM +gruesome/RYTP +gruffness/MS +gruff/PSGTYRD +grumble/GZJDSR +grumbler/M +grumbling/Y +Grumman/M +grumpily +grumpiness/MS +grump/MDGS +grumpy/TPR +Grundy/M +Grnewald/M +grunge/S +grungy/RT +grunion/SM +grunter/M +grunt/SGRD +Grusky/M +Grus/M +Gruyre +Gruyeres +gryphon's +g's +G's +gs/A +GSA +gt +GU +guacamole/MS +Guadalajara/M +Guadalcanal/M +Guadalquivir/M +Guadalupe/M +Guadeloupe/M +Guallatiri/M +Gualterio/M +Guamanian/SM +Guam/M +Guangzhou +guanine/MS +guano/MS +Guantanamo/M +Guarani/M +guarani/SM +guaranteeing +guarantee/RSDZM +guarantor/SM +guaranty/MSDG +guardedness/UM +guarded/UYP +guarder/M +guardhouse/SM +Guardia/M +guardianship/MS +guardian/SM +guardrail/SM +guard/RDSGZ +guardroom/SM +guardsman/M +guardsmen +Guarnieri/M +Guatemala/M +Guatemalan/S +guava/SM +Guayaquil/M +gubernatorial +Gucci/M +gudgeon/M +Guelph/M +Guendolen/M +Guenevere/M +Guenna/M +Guenther/M +guernsey/S +Guernsey/SM +Guerra/M +Guerrero/M +guerrilla/MS +guessable/U +guess/BGZRSD +guessed/U +guesser/M +guesstimate/DSMG +guesswork/MS +guest/SGMD +Guevara/M +guffaw/GSDM +guff/SM +Guggenheim/M +Guglielma/M +Guglielmo/M +Guhleman/M +GUI +Guiana/M +guidance/MS +guidebook/SM +guided/U +guide/GZSRD +guideline/SM +guidepost/MS +guider/M +Guido/M +Guilbert/M +guilder/M +guildhall/SM +guild/SZMR +guileful +guilelessness/MS +guileless/YP +guile/SDGM +Guillaume/M +Guillema/M +Guillemette/M +guillemot/MS +Guillermo/M +guillotine/SDGM +guiltily +guiltiness/MS +guiltlessness/M +guiltless/YP +guilt/SM +guilty/PTR +Gui/M +Guinea/M +Guinean/S +guinea/SM +Guinevere/M +Guinna/M +Guinness/M +guise's +guise/SDEG +guitarist/SM +guitar/SM +Guiyang +Guizot/M +Gujarati/M +Gujarat/M +Gujranwala/M +gulag/S +gulch/MS +gulden/MS +gulf/DMGS +Gullah/M +gullet/MS +gulley's +gullibility/MS +gullible +Gulliver/M +gull/MDSG +gully/SDMG +gulp/RDGZS +gumboil/MS +gumbo/MS +gumboots +gumdrop/SM +gummed +gumminess/M +gumming/C +gum/MS +gummy/RTP +gumption/SM +gumshoeing +gumshoe/SDM +gumtree/MS +Gunar/M +gunboat/MS +Gunderson/M +gunfighter/M +gunfight/SRMGZ +gunfire/SM +gunflint/M +gunfought +Gunilla/M +gunk/SM +gunky/RT +Gun/M +gunman/M +gunmen +gunmetal/MS +gun/MS +Gunnar/M +gunned +gunnel's +Gunner/M +gunner/SM +gunnery/MS +gunning/M +gunnysack/SM +gunny/SM +gunpoint/MS +gunpowder/SM +gunrunner/MS +gunrunning/MS +gunship/S +gunshot/SM +gunslinger/M +gunsling/GZR +gunsmith/M +gunsmiths +Guntar/M +Gunter/M +Gunther/M +gunwale/MS +Guofeng/M +guppy/SM +Gupta/M +gurgle/SDG +Gurkha/M +gurney/S +guru/MS +Gusella/M +gusher/M +gush/SRDGZ +gushy/TR +Gus/M +Guss +gusset/MDSG +Gussie/M +Gussi/M +gussy/GSD +Gussy/M +Gustaf/M +Gustafson/M +Gusta/M +gustatory +Gustave/M +Gustav/M +Gustavo/M +Gustavus/M +gusted/E +Gustie/M +gustily +Gusti/M +gustiness/M +gusting/E +gust/MDGS +gustoes +gusto/M +gusts/E +Gusty/M +gusty/RPT +Gutenberg/M +Guthrey/M +Guthrie/M +Guthry/M +Gutierrez/M +gutlessness/S +gutless/P +gutser/M +gutsiness/M +gut/SM +guts/R +gutsy/PTR +gutted +gutter/GSDM +guttering/M +guttersnipe/M +gutting +gutturalness/M +guttural/SPY +gutty/RSMT +Guyana/M +Guyanese +Guy/M +guy/MDRZGS +Guzman/M +guzzle/GZRSD +guzzler/M +g/VBX +Gwalior/M +Gwendolen/M +Gwendoline/M +Gwendolin/M +Gwendolyn/M +Gweneth/M +Gwenette/M +Gwen/M +Gwenneth/M +Gwennie/M +Gwenni/M +Gwenny/M +Gwenora/M +Gwenore/M +Gwyneth/M +Gwyn/M +Gwynne/M +gymkhana/SM +gym/MS +gymnasia's +gymnasium/SM +gymnastically +gymnastic/S +gymnastics/M +gymnast/SM +gymnosperm/SM +gynecologic +gynecological/MS +gynecologist/SM +gynecology/MS +gypped +gypper/S +gypping +gyp/S +gypsite +gypster/S +gypsum/MS +gypsy/SDMG +Gypsy/SM +gyrate/XNGSD +gyration/M +gyrator/MS +gyrfalcon/SM +gyrocompass/M +gyro/MS +gyroscope/SM +gyroscopic +gyve/GDS +H +Haag/M +Haas/M +Habakkuk/M +habeas +haberdasher/SM +haberdashery/SM +Haber/M +Haberman/M +Habib/M +habiliment/SM +habitability/MS +habitableness/M +habitable/P +habitant/ISM +habitation/MI +habitations +habitat/MS +habit/IBDGS +habit's +habitualness/SM +habitual/SYP +habituate/SDNGX +habituation/M +habitu/MS +hacienda/MS +hacker/M +Hackett/M +hack/GZSDRBJ +hackler/M +hackle/RSDMG +hackney/SMDG +hacksaw/SDMG +hackwork/S +Hadamard/M +Hadar/M +Haddad/M +haddock/MS +hades +Hades +had/GD +hadji's +hadj's +Hadlee/M +Hadleigh/M +Hadley/M +Had/M +hadn't +Hadria/M +Hadrian/M +hadron/MS +hadst +haemoglobin's +haemophilia's +haemorrhage's +Hafiz/M +hafnium/MS +haft/GSMD +Hagan/M +Hagar/M +Hagen/M +Hager/M +Haggai/M +haggardness/MS +haggard/SYP +hagged +hagging +haggish +haggis/SM +haggler/M +haggle/RSDZG +Hagiographa/M +hagiographer/SM +hagiography/MS +hag/SMN +Hagstrom/M +Hague/M +ha/H +hahnium/S +Hahn/M +Haifa/M +haiku/M +Hailee/M +hailer/M +Hailey/M +hail/SGMDR +hailstone/SM +hailstorm/SM +Haily/M +Haiphong/M +hairball/SM +hairbreadth/M +hairbreadths +hairbrush/SM +haircare +haircloth/M +haircloths +haircut/MS +haircutting +hairdo/SM +hairdresser/SM +hairdressing/SM +hairdryer/S +hairiness/MS +hairlessness/M +hairless/P +hairlike +hairline/SM +hairnet/MS +hairpiece/MS +hairpin/MS +hairsbreadth +hairsbreadths +hair/SDM +hairsplitter/SM +hairsplitting/MS +hairspray +hairspring/SM +hairstyle/SMG +hairstylist/S +hairy/PTR +Haitian/S +Haiti/M +hajjes +hajji/MS +hajj/M +Hakeem/M +hake/MS +Hakim/M +Hakka/M +Hakluyt/M +halalled +halalling +halal/S +halberd/SM +halcyon/S +Haldane/M +Haleakala/M +Haleigh/M +hale/ISRDG +Hale/M +haler/IM +halest +Halette/M +Haley/M +halfback/SM +halfbreed +halfheartedness/MS +halfhearted/PY +halfpence/S +halfpenny/MS +halfpennyworth +half/PM +halftime/S +halftone/MS +halfway +halfword/MS +halibut/SM +halide/SM +Halie/M +Halifax/M +Hali/M +Halimeda/M +halite/MS +halitoses +halitosis/M +hallelujah +hallelujahs +Halley/M +halliard's +Hallie/M +Halli/M +Hallinan/M +Hall/M +Hallmark/M +hallmark/SGMD +hallo/GDS +halloo's +Halloween/MS +hallowing +hallows +hallow/UD +hall/SMR +Hallsy/M +hallucinate/VNGSDX +hallucination/M +hallucinatory +hallucinogenic/S +hallucinogen/SM +hallway/SM +Hally/M +halocarbon +halogenated +halogen/SM +halon +halo/SDMG +Halpern/M +Halsey/M +Hal/SMY +Halsy/M +halter/GDM +halt/GZJSMDR +halting/Y +halve/GZDS +halves/M +halyard/MS +Ha/M +Hamal/M +Haman/M +hamburger/M +Hamburg/MS +hamburg/SZRM +Hamel/M +Hamey/M +Hamhung/M +Hamid/M +Hamilcar/M +Hamil/M +Hamiltonian/MS +Hamilton/M +Hamish/M +Hamitic/M +Hamlen/M +Hamlet/M +hamlet/MS +Hamlin/M +Ham/M +Hammad/M +Hammarskjold/M +hammed +hammerer/M +hammerhead/SM +hammering/M +hammerless +hammerlock/MS +Hammerstein/M +hammertoe/SM +hammer/ZGSRDM +Hammett/M +hamming +hammock/MS +Hammond/M +Hammurabi/M +hammy/RT +Hamnet/M +hampered/U +hamper/GSD +Hampshire/M +Hampton/M +ham/SM +hamster/MS +hamstring/MGS +hamstrung +Hamsun/M +Hana/M +Hanan/M +Hancock/M +handbagged +handbagging +handbag/MS +handball/SM +handbarrow/MS +handbasin +handbill/MS +handbook/SM +handbrake/M +handcar/SM +handcart/MS +handclasp/MS +handcraft/GMDS +handcuff/GSD +handcuffs/M +handedness/M +handed/PY +Handel/M +hander/S +handful/SM +handgun/SM +handhold/M +handicapped +handicapper/SM +handicapping +handicap/SM +handicraftsman/M +handicraftsmen +handicraft/SMR +handily/U +handiness/SM +handiwork/MS +handkerchief/MS +handleable +handlebar/SM +handle/MZGRSD +handler/M +handless +handling/M +handmade +handmaiden/M +handmaid/NMSX +handout/SM +handover +handpick/GDS +handrail/SM +hand's +handsaw/SM +handset/SM +handshake/GMSR +handshaker/M +handshaking/M +handsomely/U +handsomeness/MS +handsome/RPTY +handspike/SM +handspring/SM +handstand/MS +hand/UDSG +handwork/SM +handwoven +handwrite/GSJ +handwriting/M +handwritten +Handy/M +handyman/M +handymen +handy/URT +Haney/M +hangar/SGDM +hangdog/S +hanged/A +hanger/M +hang/GDRZBSJ +hanging/M +hangman/M +hangmen +hangnail/MS +hangout/MS +hangover/SM +hangs/A +Hangul/M +hangup/S +Hangzhou +Hankel/M +hankerer/M +hanker/GRDJ +hankering/M +hank/GZDRMS +hankie/SM +Hank/M +hanky's +Hannah/M +Hanna/M +Hannibal/M +Hannie/M +Hanni/MS +Hanny/M +Hanoi/M +Hanoverian +Hanover/M +Hansel/M +Hansen/M +Hansiain/M +Han/SM +Hans/N +hansom/MS +Hanson/M +Hanuka/S +Hanukkah/M +Hanukkahs +Hapgood/M +haphazardness/SM +haphazard/SPY +haplessness/MS +hapless/YP +haploid/S +happed +happening/M +happen/JDGS +happenstance/SM +happily/U +happiness/UMS +happing +Happy/M +happy/UTPR +Hapsburg/M +hap/SMY +Harald/M +harangue/GDRS +haranguer/M +Harare +harasser/M +harass/LSRDZG +harassment/SM +Harbert/M +harbinger/DMSG +Harbin/M +harborer/M +harbor/ZGRDMS +Harcourt/M +hardback/SM +hardball/SM +hardboard/SM +hardboiled +hardbound +hardcore/MS +hardcover/SM +hardened/U +hardener/M +hardening/M +harden/ZGRD +hardhat/S +hardheadedness/SM +hardheaded/YP +hardheartedness/SM +hardhearted/YP +hardihood/MS +hardily +hardiness/SM +Harding/M +Hardin/M +hardliner/S +hardness/MS +hardscrabble +hardshell +hardship/MS +hardstand/S +hardtack/MS +hardtop/MS +hardware/SM +hardwire/DSG +hardwood/MS +hardworking +Hardy/M +hard/YNRPJGXTS +hardy/PTRS +harebell/MS +harebrained +harelip/MS +harelipped +hare/MGDS +harem/SM +Hargreaves/M +hark/GDS +Harland/M +Harlan/M +Harlem/M +Harlene/M +Harlen/M +Harlequin +harlequin/MS +Harley/M +Harlie/M +Harli/M +Harlin/M +harlotry/MS +harlot/SM +Harlow/M +Harman/M +harmed/U +harmer/M +harmfulness/MS +harmful/PY +harmlessness/SM +harmless/YP +harm/MDRGS +Harmonia/M +harmonically +harmonica/MS +harmonic/S +harmonics/M +Harmonie/M +harmonious/IPY +harmoniousness/MS +harmoniousness's/I +harmonium/MS +harmonization/A +harmonizations +harmonization's +harmonized/U +harmonizer/M +harmonizes/UA +harmonize/ZGSRD +Harmon/M +harmony/EMS +Harmony/M +harness/DRSMG +harnessed/U +harnesser/M +harnesses/U +Harold/M +Haroun/M +harper/M +Harper/M +harping/M +harpist/SM +harp/MDRJGZS +Harp/MR +harpooner/M +harpoon/SZGDRM +harpsichordist/MS +harpsichord/SM +harpy/SM +Harpy/SM +Harrell/M +harridan/SM +Harrie/M +harrier/M +Harriet/M +Harrietta/M +Harriette/M +Harriett/M +Harrington/M +Harriot/M +Harriott/M +Harrisburg/M +Harri/SM +Harrisonburg/M +Harrison/M +harrower/M +harrow/RDMGS +harrumph/SDG +Harry/M +harry/RSDGZ +harshen/GD +harshness/SM +harsh/TRNYP +Harte/M +Hartford/M +Hartley/M +Hartline/M +Hart/M +Hartman/M +hart/MS +Hartwell/M +Harvard/M +harvested/U +harvester/M +harvestman/M +harvest/MDRZGS +Harvey/MS +Harv/M +Harwell/M +Harwilll/M +has +Hasbro/M +hash/AGSD +Hasheem/M +hasher/M +Hashim/M +hashing/M +hashish/MS +hash's +Hasidim +Haskell/M +Haskel/M +Haskins/M +Haslett/M +hasn't +hasp/GMDS +hassle/MGRSD +hassock/MS +haste/MS +hastener/M +hasten/GRD +hast/GXJDN +Hastie/M +hastily +hastiness/MS +Hastings/M +Hasty/M +hasty/RPT +hatchback/SM +hatcheck/S +hatched/U +hatcher/M +hatchery/MS +hatchet/MDSG +hatching/M +hatch/RSDJG +Hatchure/M +hatchway/MS +hatefulness/MS +hateful/YP +hater/M +hate/S +Hatfield/M +Hathaway/M +hatless +hat/MDRSZG +hatred/SM +hatstands +hatted +Hatteras/M +hatter/SM +Hattie/M +Hatti/M +hatting +Hatty/M +hauberk/SM +Haugen/M +haughtily +haughtiness/SM +haughty/TPR +haulage/MS +hauler/M +haul/SDRGZ +haunch/GMSD +haunter/M +haunting/Y +haunt/JRDSZG +Hauptmann/M +Hausa/M +Hausdorff/M +Hauser/M +hauteur/MS +Havana/SM +Havarti +Havel/M +haven/DMGS +Haven/M +haven't +haver/G +haversack/SM +have/ZGSR +havocked +havocking +havoc/SM +Haw +Hawaiian/S +Hawaii/M +hawker/M +hawk/GZSDRM +Hawking +hawking/M +Hawkins/M +hawkishness/S +hawkish/P +Hawley/M +haw/MDSG +hawser/M +haws/RZ +Hawthorne/M +hawthorn/MS +haycock/SM +Hayden/M +Haydn/M +Haydon/M +Hayes +hayfield/MS +hay/GSMDR +Hayley/M +hayloft/MS +haymow/MS +Haynes +hayrick/MS +hayride/MS +hayseed/MS +Hay/SM +haystack/SM +haywain +Hayward/M +haywire/MS +Haywood/M +Hayyim/M +hazard/MDGS +hazardousness/M +hazardous/PY +haze/DSRJMZG +Hazel/M +hazel/MS +hazelnut/SM +Haze/M +hazer/M +hazily +haziness/MS +hazing/M +Hazlett/M +Hazlitt/M +hazy/PTR +HBO/M +hdqrs +HDTV +headache/MS +headband/SM +headboard/MS +headcount +headdress/MS +header/M +headfirst +headgear/SM +headhunter/M +headhunting/M +headhunt/ZGSRDMJ +headily +headiness/S +heading/M +headlamp/S +headland/MS +headlessness/M +headless/P +headlight/MS +headline/DRSZMG +headliner/M +headlock/MS +headlong +Head/M +headman/M +headmaster/MS +headmastership/M +headmen +headmistress/MS +headphone/SM +headpiece/SM +headpin/MS +headquarter/GDS +headrest/MS +headroom/SM +headscarf/M +headset/SM +headship/SM +headshrinker/MS +head/SJGZMDR +headsman/M +headsmen +headstall/SM +headstand/MS +headstock/M +headstone/MS +headstrong +headwaiter/SM +headwall/S +headwater/S +headway/MS +headwind/SM +headword/MS +heady/PTR +heal/DRHSGZ +healed/U +healer/M +Heall/M +healthfully +healthfulness/SM +healthful/U +healthily/U +healthiness/MSU +health/M +healths +healthy/URPT +heap/SMDG +heard/UA +hearer/M +hearing/AM +hearken/SGD +hearsay/SM +hearse/M +hears/SDAG +Hearst/M +heartache/SM +heartbeat/MS +heartbreak/GMS +heartbreaking/Y +heartbroke +heartbroken +heartburning/M +heartburn/SGM +hearted/Y +hearten/EGDS +heartening/EY +heartfelt +hearth/M +hearthrug +hearths +hearthstone/MS +heartily +heartiness/SM +heartland/SM +heartlessness/SM +heartless/YP +heartrending/Y +heartsickness/MS +heartsick/P +heart/SMDNXG +heartstrings +heartthrob/MS +heartwarming +Heartwood/M +heartwood/SM +hearty/TRSP +hear/ZTSRHJG +heatedly +heated/UA +heater/M +heathendom/SM +heathenish/Y +heathenism/MS +heathen/M +heather/M +Heather/M +heathery +Heathkit/M +heathland +Heathman/M +Heath/MR +heath/MRNZX +heaths +heatproof +heats/A +heat/SMDRGZBJ +heatstroke/MS +heatwave +heave/DSRGZ +heavenliness/M +heavenly/PTR +heaven/SYM +heavenward/S +heaver/M +heaves/M +heavily +heaviness/MS +Heaviside/M +heavyhearted +heavyset +heavy/TPRS +heavyweight/SM +Hebe/M +hebephrenic +Hebert/M +Heb/M +Hebraic +Hebraism/MS +Hebrew/SM +Hebrides/M +Hecate/M +hecatomb/M +heckler/M +heckle/RSDZG +heck/S +hectare/MS +hectically +hectic/S +hectogram/MS +hectometer/SM +Hector/M +hector/SGD +Hecuba/M +he'd +Heda/M +Hedda/M +Heddie/M +Heddi/M +hedge/DSRGMZ +hedgehog/MS +hedgehopped +hedgehopping +hedgehop/S +hedger/M +hedgerow/SM +hedging/Y +Hedi/M +hedonism/SM +hedonistic +hedonist/MS +Hedvige/M +Hedvig/M +Hedwiga/M +Hedwig/M +Hedy/M +heeded/U +heedfulness/M +heedful/PY +heeding/U +heedlessness/SM +heedless/YP +heed/SMGD +heehaw/DGS +heeler/M +heeling/M +heelless +heel/SGZMDR +Heep/M +Hefner/M +heft/GSD +heftily +heftiness/SM +hefty/TRP +Hegelian +Hegel/M +hegemonic +hegemony/MS +Hegira/M +hegira/S +Heida/M +Heidegger/M +Heidelberg/M +Heidie/M +Heidi/M +heifer/MS +Heifetz/M +heighten/GD +height/SMNX +Heimlich/M +Heindrick/M +Heineken/M +Heine/M +Heinlein/M +heinousness/SM +heinous/PY +Heinrich/M +Heinrick/M +Heinrik/M +Heinze/M +Heinz/M +heiress/MS +heirloom/MS +heir/SDMG +Heisenberg/M +Heiser/M +heister/M +heist/GSMRD +Hejira's +Helaina/M +Helaine/M +held +Helena/M +Helene/M +Helenka/M +Helen/M +Helga/M +Helge/M +helical/Y +helices/M +helicon/M +Helicon/M +helicopter/GSMD +heliocentric +heliography/M +Heliopolis/M +Helios/M +heliosphere +heliotrope/SM +heliport/MS +helium/MS +helix/M +he'll +hellbender/M +hellbent +hellcat/SM +hellebore/SM +Hellene/SM +Hellenic +Hellenism/MS +Hellenistic +Hellenist/MS +Hellenization/M +Hellenize +heller/M +Heller/M +Hellespont/M +hellfire/M +hell/GSMDR +hellhole/SM +Helli/M +hellion/SM +hellishness/SM +hellish/PY +Hellman/M +hello/GMS +Hell's +helluva +helmed +helmet/GSMD +Helmholtz/M +helming +helms +helm's +helmsman/M +helmsmen +helm/U +Helmut/M +Hloise/M +helot/S +helper/M +helpfulness/MS +helpful/UY +help/GZSJDR +helping/M +helplessness/SM +helpless/YP +helpline/S +helpmate/SM +helpmeet's +Helsa/M +Helsinki/M +helve/GMDS +Helvetian/S +Helvetius/M +Helyn/M +He/M +hematite/MS +hematologic +hematological +hematologist/SM +hematology/MS +heme/MS +Hemingway/M +hemisphere/MSD +hemispheric +hemispherical +hemline/SM +hemlock/MS +hemmed +hemmer/SM +hemming +hem/MS +hemoglobin/MS +hemolytic +hemophiliac/SM +hemophilia/SM +hemorrhage/GMDS +hemorrhagic +hemorrhoid/MS +hemostat/SM +hemp/MNS +h/EMS +hemstitch/DSMG +henceforth +henceforward +hence/S +Hench/M +henchman/M +henchmen +Henderson/M +Hendrick/SM +Hendrickson/M +Hendrika/M +Hendrik/M +Hendrix/M +henge/M +Henka/M +Henley/M +hen/MS +henna/MDSG +Hennessey/M +henning +henpeck/GSD +Henrie/M +Henrieta/M +Henrietta/M +Henriette/M +Henrik/M +Henri/M +Henryetta/M +henry/M +Henry/M +Hensley/M +Henson/M +heparin/MS +hepatic/S +hepatitides +hepatitis/M +Hepburn/M +Hephaestus/M +Hephzibah/M +hepper +heppest +Hepplewhite +hep/S +heptagonal +heptagon/SM +heptane/M +heptathlon/S +her +Heracles/M +Heraclitus/M +heralded/U +heraldic +herald/MDSG +heraldry/MS +Hera/M +herbaceous +herbage/MS +herbalism +herbalist/MS +herbal/S +Herbart/M +Herbert/M +herbicidal +herbicide/MS +Herbie/M +herbivore/SM +herbivorous/Y +Herb/M +herb/MS +Herby/M +Herc/M +Herculaneum/M +herculean +Herculean +Hercule/MS +Herculie/M +herder/M +Herder/M +herd/MDRGZS +herdsman/M +herdsmen +hereabout/S +hereafter/S +hereby +hereditary +heredity/MS +Hereford/SM +herein +hereinafter +here/IS +hereof +hereon +here's +heres/M +heresy/SM +heretical +heretic/SM +hereto +heretofore +hereunder +hereunto +hereupon +herewith +Heriberto/M +heritable +heritage/MS +heritor/IM +Herkimer/M +Herman/M +Hermann/M +hermaphrodite/SM +hermaphroditic +Hermaphroditus/M +hermeneutic/S +hermeneutics/M +Hermes +hermetical/Y +hermetic/S +Hermia/M +Hermie/M +Hermina/M +Hermine/M +Herminia/M +Hermione/M +hermitage/SM +Hermite/M +hermitian +hermit/MS +Hermon/M +Hermosa/M +Hermosillo/M +Hermy/M +Hernandez/M +Hernando/M +hernial +hernia/MS +herniate/NGXDS +Herod/M +Herodotus/M +heroes +heroically +heroics +heroic/U +heroine/SM +heroin/MS +heroism/SM +Herold/M +hero/M +heron/SM +herpes/M +herpetologist/SM +herpetology/MS +Herrera/M +Herrick/M +herringbone/SDGM +Herring/M +herring/SM +Herrington/M +Herr/MG +Herschel/M +Hersch/M +herself +Hersey/M +Hershel/M +Hershey/M +Hersh/M +Herta/M +Hertha/M +hertz/M +Hertz/M +Hertzog/M +Hertzsprung/M +Herve/M +Hervey/M +Herzegovina/M +Herzl/M +hes +Hesiod/M +hesitance/S +hesitancy/SM +hesitantly +hesitant/U +hesitater/M +hesitate/XDRSNG +hesitating/UY +hesitation/M +Hesperus/M +Hesse/M +Hessian/MS +Hess/M +Hester/M +Hesther/M +Hestia/M +Heston/M +heterodox +heterodoxy/MS +heterodyne +heterogamous +heterogamy/M +heterogeneity/SM +heterogeneousness/M +heterogeneous/PY +heterosexuality/SM +heterosexual/YMS +heterostructure +heterozygous +Hettie/M +Hetti/M +Hetty/M +Heublein/M +heuristically +heuristic/SM +Heusen/M +Heuser/M +he/VMZ +hew/DRZGS +Hewe/M +hewer/M +Hewet/M +Hewett/M +Hewie/M +Hewitt/M +Hewlett/M +Hew/M +hexachloride/M +hexadecimal/YS +hexafluoride/M +hexagonal/Y +hexagon/SM +hexagram/SM +hexameter/SM +hex/DSRG +hexer/M +hey +heyday/MS +Heyerdahl/M +Heywood/M +Hezekiah/M +hf +HF +Hf/M +Hg/M +hgt +hgwy +HHS +HI +Hialeah/M +hiatus/SM +Hiawatha/M +hibachi/MS +hibernate/XGNSD +hibernation/M +hibernator/SM +Hibernia/M +Hibernian/S +hibiscus/MS +hiccup/MDGS +hickey/SM +Hickey/SM +Hickman/M +Hickok/M +hickory/MS +hick/SM +Hicks/M +hi/D +hidden/U +hideaway/SM +hidebound +hideousness/SM +hideous/YP +hideout/MS +hider/M +hide/S +hiding/M +hid/ZDRGJ +hieing +hierarchal +hierarchic +hierarchical/Y +hierarchy/SM +hieratic +hieroglyph +hieroglyphic/S +hieroglyphics/M +hieroglyphs +Hieronymus/M +hie/S +hifalutin +Higashiosaka +Higgins/M +highball/GSDM +highborn +highboy/MS +highbrow/SM +highchair/SM +highfalutin +Highfield/M +highhandedness/SM +highhanded/PY +highish +Highlander/SM +Highlands +highland/ZSRM +highlight/GZRDMS +Highness/M +highness/MS +highpoint +high/PYRT +highroad/MS +highs +hight +hightail/DGS +highwayman/M +highwaymen +highway/MS +hijacker/M +hijack/JZRDGS +hiker/M +hike/ZGDSR +Hilario/M +hilariousness/MS +hilarious/YP +hilarity/MS +Hilarius/M +Hilary/M +Hilbert/M +Hildagarde/M +Hildagard/M +Hilda/M +Hildebrand/M +Hildegaard/M +Hildegarde/M +Hilde/M +Hildy/M +Hillard/M +Hillary/M +hillbilly/MS +Hillcrest/M +Hillel/M +hiller/M +Hillery/M +hill/GSMDR +Hilliard/M +Hilliary/M +Hillie/M +Hillier/M +hilliness/SM +Hill/M +hillman +hillmen +hillock/SM +Hillsboro/M +Hillsdale/M +hillside/SM +hilltop/MS +hillwalking +Hillyer/M +Hilly/RM +hilly/TRP +hilt/MDGS +Hilton/M +Hi/M +Himalaya/MS +Himalayan/S +Himmler/M +him/S +himself +Hinayana/M +Hinda/M +Hindemith/M +Hindenburg/M +hindered/U +hinderer/M +hinder/GRD +Hindi/M +hindmost +hindquarter/SM +hindrance/SM +hind/RSZ +hindsight/SM +Hinduism/SM +Hindu/MS +Hindustani/MS +Hindustan/M +Hines/M +hinger +hinge's +hinge/UDSG +Hinkle/M +Hinsdale/M +hinterland/MS +hinter/M +hint/GZMDRS +Hinton/M +Hinze/M +hipbone/SM +hipness/S +Hipparchus/M +hipped +hipper +hippest +hippie/MTRS +hipping/M +Hippocrates/M +Hippocratic +hippodrome/MS +hippo/MS +hippopotamus/SM +hip/PSM +hippy's +hipster/MS +hiragana +Hiram/M +hire/AGSD +hireling/SM +hirer/SM +Hirey/M +hiring/S +Hirohito/M +Hiroshi/M +Hiroshima/M +Hirsch/M +hirsuteness/MS +hirsute/P +his +Hispanic/SM +Hispaniola/M +hiss/DSRMJG +hisser/M +hissing/M +Hiss/M +histamine/SM +histidine/SM +histochemic +histochemical +histochemistry/M +histogram/MS +histological +histologist/MS +histology/SM +historian/MS +historic +historicalness/M +historical/PY +historicism/M +historicist/M +historicity/MS +historiographer/SM +historiography/MS +history/MS +histrionically +histrionic/S +histrionics/M +hist/SDG +Hitachi/M +Hitchcock/M +hitcher/MS +hitchhike/RSDGZ +hitch/UGSD +hither +hitherto +Hitler/SM +hitless +hit/MS +hittable +hitter/SM +hitting +Hittite/SM +HIV +hive/MGDS +h'm +HM +HMO +Hmong +HMS +hoarder/M +hoarding/M +hoard/RDJZSGM +hoarfrost/SM +hoariness/MS +hoar/M +hoarseness/SM +hoarse/RTYP +hoary/TPR +hoaxer/M +hoax/GZMDSR +Hobard/M +Hobart/M +hobbed +Hobbes/M +hobbing +hobbit +hobbler/M +hobble/ZSRDG +Hobbs/M +hobbyhorse/SM +hobbyist/SM +hobby/SM +Hobday/M +Hobey/M +hobgoblin/MS +Hobie/M +hobnail/GDMS +hobnobbed +hobnobbing +hobnob/S +Hoboken/M +hobo/SDMG +hob/SM +hoc +hocker/M +hockey/SM +hock/GDRMS +Hockney/M +hockshop/SM +hodge/MS +Hodge/MS +hodgepodge/SM +Hodgkin/M +ho/DRYZ +hod/SM +Hoebart/M +hoecake/SM +hoedown/MS +hoeing +hoer/M +hoe/SM +Hoffa/M +Hoff/M +Hoffman/M +Hofstadter/M +Hogan/M +hogan/SM +Hogarth/M +hogback/MS +hogged +hogger +hogging +hoggish/Y +hogshead/SM +hog/SM +hogtie/SD +hogtying +hogwash/SM +Hohenlohe/M +Hohenstaufen/M +Hohenzollern/M +Hohhot/M +hoister/M +hoist/GRDS +hoke/DSG +hokey/PRT +hokier +hokiest +Hokkaido/M +hokum/MS +Hokusai/M +Holbein/M +Holbrook/M +Holcomb/M +holdall/MS +Holden/M +holder/M +Holder/M +holding/IS +holding's +hold/NRBSJGZ +holdout/SM +holdover/SM +holdup/MS +hole/MGDS +holey +holiday/GRDMS +Holiday/M +holidaymaker/S +holier/U +Holiness/MS +holiness/MSU +holistic +holistically +hollandaise +Hollandaise/M +Hollander/M +Holland/RMSZ +holler/GDS +Hollerith/M +Holley/M +Hollie/M +Holli/SM +Hollister/M +Holloway/M +hollowness/MS +hollow/RDYTGSP +hollowware/M +Hollyanne/M +hollyhock/MS +Holly/M +holly/SM +Hollywood/M +Holman/M +Holmes +holmium/MS +Holm/M +Holocaust +holocaust/MS +Holocene +hologram/SM +holograph/GMD +holographic +holographs +holography/MS +Holstein/MS +holster/MDSG +Holst/M +Holt/M +Holyoke/M +holy/SRTP +holystone/MS +Holzman/M +Ho/M +homage/MGSRD +homager/M +hombre/SM +homburg/SM +homebody/MS +homebound +homeboy/S +homebuilder/S +homebuilding +homebuilt +homecoming/MS +home/DSRMYZG +homegrown +homeland/SM +homelessness/SM +homeless/P +homelike +homeliness/SM +homely/RPT +homemade +homemake/JRZG +homemaker/M +homemaking/M +homeomorphic +homeomorphism/MS +homeomorph/M +homeopath +homeopathic +homeopaths +homeopathy/MS +homeostases +homeostasis/M +homeostatic +homeowner/S +homeownership +homepage +Homere/M +homer/GDM +Homeric +homerists +Homer/M +homeroom/MS +Homerus/M +homeschooling/S +homesickness/MS +homesick/P +homespun/S +homesteader/M +homestead/GZSRDM +homestretch/SM +hometown/SM +homeward +homeworker/M +homework/ZSMR +homeyness/MS +homey/PS +homicidal/Y +homicide/SM +homier +homiest +homiletic/S +homily/SM +hominess's +homing/M +hominid/MS +hominy/SM +Hom/MR +homogamy/M +homogenate/MS +homogeneity/ISM +homogeneous/PY +homogenization/MS +homogenize/DRSGZ +homogenizer/M +homograph/M +homographs +homological +homologous +homologue/M +homology/MS +homomorphic +homomorphism/SM +homonym/SM +homophobia/S +homophobic +homophone/MS +homopolymers +homosexuality/SM +homosexual/YMS +homo/SM +homotopy +homozygous/Y +honcho/DSG +Honda/M +Hondo/M +Honduran/S +Honduras/M +Honecker/M +hone/SM +honestly/E +honest/RYT +honesty/ESM +honeybee/SM +honeycomb/SDMG +honeydew/SM +honey/GSMD +honeylocust +Honey/M +honeymooner/M +honeymoon/RDMGZS +honeysuckle/MS +Honeywell/M +hong/M +Honiara/M +honker/M +honk/GZSDRM +honky/SM +Hon/M +hon/MDRSZTG +Honolulu/M +honorableness/SM +honorable/PSM +honorables/U +honorablies/U +honorably/UE +honorarily +honorarium/SM +honorary/S +honored/U +honoree/S +honor/ERDBZGS +honorer/EM +Honoria/M +honorific/S +Honor/M +honor's +honors/A +Honshu/M +hooch/MS +hoodedness/M +hooded/P +hoodlum/SM +Hood/M +hood/MDSG +hoodoo/DMGS +hoodwinker/M +hoodwink/SRDG +hooey/SM +hoof/DRMSG +hoofer/M +hoofmark/S +hookah/M +hookahs +hookedness/M +hooked/P +Hooke/MR +hooker/M +Hooker/M +hookey's +hook/GZDRMS +hooks/U +hookup/SM +hookworm/MS +hooky/SRMT +hooliganism/SM +hooligan/SM +hooper/M +Hooper/M +hoopla/SM +hoop/MDRSG +hooray/SMDG +hoosegow/MS +Hoosier/SM +hootch's +hootenanny/SM +hooter/M +hoot/MDRSGZ +Hoover/MS +hooves/M +hoped/U +hopefulness/MS +hopeful/SPY +hopelessness/SM +hopeless/YP +Hope/M +hoper/M +hope/SM +Hopewell/M +Hopi/SM +Hopkinsian/M +Hopkins/M +hopped +Hopper/M +hopper/MS +hopping/M +hoppled +hopples +hopscotch/MDSG +hop/SMDRG +Horace/M +Horacio/M +Horatia/M +Horatio/M +Horatius/M +horde/DSGM +horehound/MS +horizon/MS +horizontal/YS +Hormel/M +hormonal/Y +hormone/MS +Hormuz/M +hornbeam/M +hornblende/MS +Hornblower/M +hornedness/M +horned/P +Horne/M +hornet/MS +horn/GDRMS +horniness/M +hornless +hornlike +Horn/M +hornpipe/MS +horny/TRP +horologic +horological +horologist/MS +horology/MS +horoscope/MS +Horowitz/M +horrendous/Y +horribleness/SM +horrible/SP +horribly +horridness/M +horrid/PY +horrific +horrifically +horrify/DSG +horrifying/Y +horror/MS +hors/DSGX +horseback/MS +horsedom +horseflesh/M +horsefly/MS +horsehair/SM +horsehide/SM +horselaugh/M +horselaughs +horseless +horselike +horsely +horseman/M +horsemanship/MS +horsemen +horseplayer/M +horseplay/SMR +horsepower/SM +horseradish/SM +horse's +horseshoeing +horseshoe/MRSD +horseshoer/M +horsetail/SM +horse/UGDS +horsewhipped +horsewhipping +horsewhip/SM +horsewoman/M +horsewomen +horsey +horsier +horsiest +horsing/M +Horst/M +hortatory +Horten/M +Hortense/M +Hortensia/M +horticultural +horticulture/SM +horticulturist/SM +Hort/MN +Horton/M +Horus/M +hosanna/SDG +Hosea/M +hose/M +hosepipe +hos/GDS +hosier/MS +hosiery/SM +hosp +hospice/MS +hospitable/I +hospitably/I +hospitality/MS +hospitality's/I +hospitalization/MS +hospitalize/GSD +hospital/MS +hostage/MS +hosteler/M +hostelry/MS +hostel/SZGMRD +hostess/MDSG +hostile/YS +hostility/SM +hostler/MS +Host/MS +host/MYDGS +hotbed/MS +hotblooded +hotbox/MS +hotcake/S +hotchpotch/M +hotelier/MS +hotelman/M +hotel/MS +hotfoot/DGS +hothead/DMS +hotheadedness/SM +hotheaded/PY +hothouse/MGDS +hotness/MS +hotplate/SM +hotpot/M +hot/PSY +hotrod +hotshot/S +hotted +Hottentot/SM +hotter +hottest +hotting +Houdaille/M +Houdini/M +hough/M +hounder/M +hounding/M +hound/MRDSG +hourglass/MS +houri/MS +hourly/S +hour/YMS +house/ASDG +houseboat/SM +housebound +houseboy/SM +housebreaker/M +housebreaking/M +housebreak/JSRZG +housebroke +housebroken +housebuilding +housecleaning/M +houseclean/JDSG +housecoat/MS +housefly/MS +houseful/SM +householder/M +household/ZRMS +househusband/S +housekeeper/M +housekeeping/M +housekeep/JRGZ +houselights +House/M +housemaid/MS +houseman/M +housemen +housemother/MS +housemoving +houseparent/SM +houseplant/S +houser +house's +housetop/MS +housewares +housewarming/MS +housewifeliness/M +housewifely/P +housewife/YM +housewives +houseworker/M +housework/ZSMR +housing/MS +Housman/M +Houston/M +Houyhnhnm/M +HOV +hovel/GSMD +hovercraft/M +hoverer/M +hover/GRD +hove/ZR +Howard/M +howbeit +howdah/M +howdahs +howdy/GSD +Howell/MS +Howe/M +however +Howey/M +Howie/M +howitzer/MS +howler/M +howl/GZSMDR +Howrah/M +how/SM +howsoever +hoyden/DMGS +hoydenish +Hoyle/SM +hoy/M +Hoyt/M +hp +HP +HQ +hr +HR +HRH +Hrothgar/M +hrs +h's +H's +HS +HST +ht +HTML +Hts/M +HTTP +Huang/M +huarache/SM +hubba +Hubbard/M +Hubble/M +hubbub/SM +hubby/SM +hubcap/SM +Huber/M +Hube/RM +Hubert/M +Huberto/M +Hubey/M +Hubie/M +hub/MS +hubris/SM +huckleberry/SM +Huck/M +huckster/SGMD +HUD +Huddersfield/M +huddler/M +huddle/RSDMG +Hudson/M +hue/MDS +Huerta/M +Huey/M +huffily +huffiness/SM +Huff/M +Huffman/M +huff/SGDM +huffy/TRP +hugeness/MS +huge/YP +hugged +hugger +hugging/S +Huggins +Hughie/M +Hugh/MS +Hugibert/M +Hugo/M +hug/RTS +Huguenot/SM +Hugues/M +huh +huhs +Hui/M +Huitzilopitchli/M +hula/MDSG +Hulda/M +hulk/GDMS +hullabaloo/SM +huller/M +hulling/M +Hull/M +hull/MDRGZS +hullo/GSDM +humane/IY +humaneness/SM +humaner +humanest +human/IPY +humanism/SM +humanistic +humanist/SM +humanitarianism/SM +humanitarian/S +humanity/ISM +humanization/CSM +humanized/C +humanizer/M +humanize/RSDZG +humanizes/IAC +humanizing/C +humankind/M +humannesses +humanness/IM +humanoid/S +humans +Humbert/M +Humberto/M +humbleness/SM +humble/TZGPRSDJ +humbly +Humboldt/M +humbugged +humbugging +humbug/MS +humdinger/MS +humdrum/S +Hume/M +humeral/S +humeri +humerus/M +Humfrey/M +Humfrid/M +Humfried/M +humidification/MC +humidifier/CM +humidify/RSDCXGNZ +humidistat/M +humidity/MS +humidor/MS +humid/Y +humiliate/SDXNG +humiliating/Y +humiliation/M +humility/MS +hummed +Hummel/M +hummer/SM +humming +hummingbird/SM +hummock/MDSG +hummocky +hummus/S +humongous +humored/U +humorist/MS +humorlessness/MS +humorless/PY +humorousness/MS +humorous/YP +humor/RDMZGS +humpback/SMD +hump/GSMD +humph/DG +Humphrey/SM +humphs +Humpty/M +hum/S +humus/SM +Humvee +hunchback/DSM +hunch/GMSD +hundredfold/S +hundred/SHRM +hundredths +hundredweight/SM +Hunfredo/M +hung/A +Hungarian/MS +Hungary/M +hunger/SDMG +Hung/M +hungover +hungrily +hungriness/SM +hungry/RTP +hunker/DG +hunky/RST +hunk/ZRMS +Hun/MS +hunter/M +Hunter/M +hunt/GZJDRS +hunting/M +Huntington/M +Huntlee/M +Huntley/M +Hunt/MR +huntress/MS +huntsman/M +huntsmen +Huntsville/M +hurdle/JMZGRSD +hurdler/M +hurl/DRGZJS +Hurlee/M +Hurleigh/M +hurler/M +Hurley/M +hurling/M +Huron/SM +hurray/SDG +hurricane/MS +hurriedness/M +hurried/UY +hurry/RSDG +Hurst/M +hurter/M +hurtfulness/MS +hurtful/PY +hurting/Y +hurtle/SDG +hurts +hurt/U +Hurwitz/M +Hus +Husain's +husbander/M +husband/GSDRYM +husbandman/M +husbandmen +husbandry/SM +Husein/M +hush/DSG +husker/M +huskily +huskiness/MS +husking/M +husk/SGZDRM +husky/RSPT +hussar/MS +Hussein/M +Husserl/M +hussy/SM +hustings/M +hustler/M +hustle/RSDZG +Huston/M +Hutchins/M +Hutchinson/M +Hutchison/M +hutch/MSDG +hut/MS +hutted +hutting +Hutton/M +Hutu/M +Huxley/M +Huygens/M +huzzah/GD +huzzahs +hwy +Hyacintha/M +Hyacinthe/M +Hyacinthia/M +Hyacinthie/M +hyacinth/M +Hyacinth/M +hyacinths +Hyades +hyaena's +Hyannis/M +Hyatt/M +hybridism/SM +hybridization/S +hybridize/GSD +hybrid/MS +Hyde/M +Hyderabad/M +Hydra/M +hydra/MS +hydrangea/SM +hydrant/SM +hydrate/CSDNGX +hydrate's +hydration/MC +hydraulically +hydraulicked +hydraulicking +hydraulic/S +hydraulics/M +hydrazine/M +hydride/MS +hydrocarbon/SM +hydrocephali +hydrocephalus/MS +hydrochemistry +hydrochloric +hydrochloride/M +hydrodynamical +hydrodynamic/S +hydrodynamics/M +hydroelectric +hydroelectrically +hydroelectricity/SM +hydrofluoric +hydrofoil/MS +hydrogenate/CDSGN +hydrogenate's +hydrogenation/MC +hydrogenations +hydrogen/MS +hydrogenous +hydrological/Y +hydrologist/MS +hydrology/SM +hydrolysis/M +hydrolyzed/U +hydrolyze/GSD +hydromagnetic +hydromechanics/M +hydrometer/SM +hydrometry/MS +hydrophilic +hydrophobia/SM +hydrophobic +hydrophone/SM +hydroplane/DSGM +hydroponic/S +hydroponics/M +hydro/SM +hydrosphere/MS +hydrostatic/S +hydrostatics/M +hydrotherapy/SM +hydrothermal/Y +hydrous +hydroxide/MS +hydroxy +hydroxylate/N +hydroxyl/SM +hydroxyzine/M +hyena/MS +hygiene/MS +hygienically +hygienic/S +hygienics/M +hygienist/MS +hygrometer/SM +hygroscopic +hying +Hy/M +Hyman/M +hymeneal/S +Hymen/M +hymen/MS +Hymie/M +hymnal/SM +hymnbook/S +hymn/GSDM +Hynda/M +hype/MZGDSR +hyperactive/S +hyperactivity/SM +hyperbola/MS +hyperbole/MS +hyperbolic +hyperbolically +hyperboloidal +hyperboloid/SM +hypercellularity +hypercritical/Y +hypercube/MS +hyperemia/M +hyperemic +hyperfine +hypergamous/Y +hypergamy/M +hyperglycemia/MS +hyperinflation +Hyperion/M +hypermarket/SM +hypermedia/S +hyperplane/SM +hyperplasia/M +hypersensitiveness/MS +hypersensitive/P +hypersensitivity/MS +hypersonic +hyperspace/M +hypersphere/M +hypertension/MS +hypertensive/S +hypertext/SM +hyperthyroid +hyperthyroidism/MS +hypertrophy/MSDG +hypervelocity +hyperventilate/XSDGN +hyperventilation/M +hyphenated/U +hyphenate/NGXSD +hyphenation/M +hyphen/DMGS +hypnoses +hypnosis/M +hypnotherapy/SM +hypnotically +hypnotic/S +hypnotism/MS +hypnotist/SM +hypnotize/SDG +hypoactive +hypoallergenic +hypocellularity +hypochondriac/SM +hypochondria/MS +hypocrisy/SM +hypocrite/MS +hypocritical/Y +hypodermic/S +hypo/DMSG +hypoglycemia/SM +hypoglycemic/S +hypophyseal +hypophysectomized +hypotenuse/MS +hypothalami +hypothalamic +hypothalamically +hypothalamus/M +hypothermia/SM +hypotheses +hypothesis/M +hypothesizer/M +hypothesize/ZGRSD +hypothetic +hypothetical/Y +hypothyroid +hypothyroidism/SM +hypoxia/M +hyssop/MS +hysterectomy/MS +hysteresis/M +hysteria/SM +hysterical/YU +hysteric/SM +Hyundai/M +Hz +i +I +IA +Iaccoca/M +Iago/M +Iain/M +Ia/M +iambi +iambic/S +iamb/MS +iambus/SM +Ian/M +Ianthe/M +Ibadan/M +Ibbie/M +Ibby/M +Iberia/M +Iberian/MS +Ibero/M +ibex/MS +ibid +ibidem +ibis/SM +IBM/M +Ibo/M +Ibrahim/M +Ibsen/M +ibuprofen/S +Icarus/M +ICBM/S +ICC +iceberg/SM +iceboat/MS +icebound +icebox/MS +icebreaker/SM +icecap/SM +ice/GDSC +Icelander/M +Icelandic +Iceland/MRZ +Ice/M +iceman/M +icemen +icepack +icepick/S +ice's +Ichabod/M +ichneumon/M +ichthyologist/MS +ichthyology/MS +icicle/SM +icily +iciness/SM +icing/MS +icky/RT +iconic +icon/MS +iconoclasm/MS +iconoclastic +iconoclast/MS +iconography/MS +icosahedra +icosahedral +icosahedron/M +ictus/SM +ICU +icy/RPT +I'd +ID +Idahoan/S +Idahoes +Idaho/MS +Idalia/M +Idalina/M +Idaline/M +Ida/M +idealism/MS +idealistic +idealistically +idealist/MS +idealization/MS +idealized/U +idealize/GDRSZ +idealizer/M +ideal/MYS +idealogical +idea/SM +ideate/SN +ideation/M +Idelle/M +Idell/M +idem +idempotent/S +identicalness/M +identical/YP +identifiability +identifiable/U +identifiably +identification/M +identified/U +identifier/M +identify/XZNSRDG +identity/SM +ideogram/MS +ideographic +ideograph/M +ideographs +ideological/Y +ideologist/SM +ideologue/S +ideology/SM +ides +Idette/M +idiocy/MS +idiolect/M +idiomatically +idiomatic/P +idiom/MS +idiopathic +idiosyncrasy/SM +idiosyncratic +idiosyncratically +idiotic +idiotically +idiot/MS +idleness/MS +idle/PZTGDSR +idler/M +id/MY +idolater/MS +idolatress/S +idolatrous +idolatry/SM +idolization/SM +idolized/U +idolizer/M +idolize/ZGDRS +idol/MS +ids +IDs +idyllic +idyllically +idyll/MS +IE +IEEE +Ieyasu/M +if +iffiness/S +iffy/TPR +Ifni/M +ifs +Iggie/M +Iggy/M +igloo/MS +Ignace/M +Ignacio/M +Ignacius/M +Ignatius/M +Ignazio/M +Ignaz/M +igneous +ignitable +ignite/ASDG +igniter/M +ignition/MS +ignobleness/M +ignoble/P +ignobly +ignominious/Y +ignominy/MS +ignoramus/SM +ignorance/MS +ignorantness/M +ignorant/SPY +ignorer/M +ignore/SRDGB +Igor/M +iguana/MS +Iguassu/M +ii +iii +Ijsselmeer/M +Ike/M +Ikey/M +Ikhnaton/M +ikon's +IL +Ilaire/M +Ila/M +Ilario/M +ilea +Ileana/M +Ileane/M +ileitides +ileitis/M +Ilene/M +ileum/M +ilia +iliac +Iliad/MS +Ilise/M +ilium/M +Ilka/M +ilk/MS +I'll +Illa/M +illegality/MS +illegal/YS +illegibility/MS +illegible +illegibly +illegitimacy/SM +illegitimate/SDGY +illiberality/SM +illiberal/Y +illicitness/MS +illicit/YP +illimitableness/M +illimitable/P +Illinoisan/MS +Illinois/M +illiquid +illiteracy/MS +illiterateness/M +illiterate/PSY +Ill/M +illness/MS +illogicality/SM +illogicalness/M +illogical/PY +illogic/M +ill/PS +illume/DG +illuminate/XSDVNG +Illuminati +illuminatingly +illuminating/U +illumination/M +illumine/BGSD +illusionary +illusion/ES +illusionist/MS +illusion's +illusiveness/M +illusive/PY +illusoriness/M +illusory/P +illustrated/U +illustrate/VGNSDX +illustration/M +illustrative/Y +illustrator/SM +illustriousness/SM +illustrious/PY +illus/V +illy +Ilona/M +Ilsa/M +Ilse/M +Ilysa/M +Ilyse/M +Ilyssa/M +Ilyushin/M +I'm +image/DSGM +Imagen/M +imagery/MS +imaginableness +imaginable/U +imaginably/U +imaginariness/M +imaginary/PS +imagination/MS +imaginativeness/M +imaginative/UY +imagined/U +imaginer/M +imagine/RSDJBG +imagoes +imago/M +imam/MS +imbalance/SDM +imbecile/YMS +imbecilic +imbecility/MS +imbiber/M +imbibe/ZRSDG +imbrication/SM +Imbrium/M +imbroglio/MS +imbruing +imbue/GDS +Imelda/M +IMF +IMHO +imitable/I +imitate/SDVNGX +imitation/M +imitativeness/MS +imitative/YP +imitator/SM +immaculateness/SM +immaculate/YP +immanence/S +immanency/MS +immanent/Y +Immanuel/M +immateriality/MS +immaterialness/MS +immaterial/PY +immatureness/M +immature/SPY +immaturity/MS +immeasurableness/M +immeasurable/P +immeasurably +immediacy/MS +immediateness/SM +immediate/YP +immemorial/Y +immenseness/M +immense/PRTY +immensity/MS +immerse/RSDXNG +immersible +immersion/M +immigrant/SM +immigrate/NGSDX +immigration/M +imminence/SM +imminentness/M +imminent/YP +immobile +immobility/MS +immobilization/MS +immobilize/DSRG +immoderateness/M +immoderate/NYP +immoderation/M +immodest/Y +immodesty/SM +immolate/SDNGX +immolation/M +immorality/MS +immoral/Y +immortality/SM +immortalized/U +immortalize/GDS +immortal/SY +immovability/SM +immovableness/M +immovable/PS +immovably +immune/S +immunity/SM +immunization/MS +immunize/GSD +immunoassay/M +immunodeficiency/S +immunodeficient +immunologic +immunological/Y +immunologist/SM +immunology/MS +immure/GSD +immutability/MS +immutableness/M +immutable/P +immutably +IMNSHO +IMO +Imogene/M +Imogen/M +Imojean/M +impaction/SM +impactor/SM +impact/VGMRDS +impaired/U +impairer/M +impair/LGRDS +impairment/SM +impala/MS +impale/GLRSD +impalement/SM +impaler/M +impalpable +impalpably +impanel/DGS +impartation/M +impart/GDS +impartiality/SM +impartial/Y +impassableness/M +impassable/P +impassably +impasse/SXBMVN +impassibility/SM +impassible +impassibly +impassion/DG +impassioned/U +impassiveness/MS +impassive/YP +impassivity/MS +impasto/SM +impatience/SM +impatiens/M +impatient/Y +impeachable/U +impeach/DRSZGLB +impeacher/M +impeachment/MS +impeccability/SM +impeccable/S +impeccably +impecuniousness/MS +impecunious/PY +impedance/MS +impeded/U +impeder/M +impede/S +imped/GRD +impedimenta +impediment/SM +impelled +impeller/MS +impelling +impel/S +impend/DGS +impenetrability/MS +impenetrableness/M +impenetrable/P +impenetrably +impenitence/MS +impenitent/YS +imperativeness/M +imperative/PSY +imperceivable +imperceptibility/MS +imperceptible +imperceptibly +imperceptive +imperf +imperfectability +imperfection/MS +imperfectness/SM +imperfect/YSVP +imperialism/MS +imperialistic +imperialistically +imperialist/SM +imperial/YS +imperil/GSLD +imperilment/SM +imperiousness/MS +imperious/YP +imperishableness/M +imperishable/SP +imperishably +impermanence/MS +impermanent/Y +impermeability/SM +impermeableness/M +impermeable/P +impermeably +impermissible +impersonality/M +impersonalized +impersonal/Y +impersonate/XGNDS +impersonation/M +impersonator/SM +impertinence/SM +impertinent/YS +imperturbability/SM +imperturbable +imperturbably +imperviousness/M +impervious/PY +impetigo/MS +impetuosity/MS +impetuousness/MS +impetuous/YP +impetus/MS +impiety/MS +impinge/LS +impingement/MS +imping/GD +impiousness/SM +impious/PY +impishness/MS +impish/YP +implacability/SM +implacableness/M +implacable/P +implacably +implantation/SM +implant/BGSDR +implanter/M +implausibility/MS +implausible +implausibly +implementability +implementable/U +implementation/A +implementations +implementation's +implemented/AU +implementer/M +implementing/A +implementor/MS +implement/SMRDGZB +implicant/SM +implicate/VGSD +implication/M +implicative/PY +implicitness/SM +implicit/YP +implied/Y +implode/GSD +implore/GSD +imploring/Y +implosion/SM +implosive/S +imply/GNSDX +impoliteness/MS +impolite/YP +impoliticness/M +impolitic/PY +imponderableness/M +imponderable/PS +importance/SM +important/Y +importation/MS +importer/M +importing/A +import/SZGBRD +importunateness/M +importunate/PYGDS +importuner/M +importune/SRDZYG +importunity/SM +imposable +impose/ASDG +imposer/SM +imposingly +imposing/U +imposition/SM +impossibility/SM +impossibleness/M +impossible/PS +impossibly +imposter's +impostor/SM +impost/SGMD +imposture/SM +impotence/MS +impotency/S +impotent/SY +impound/GDS +impoundments +impoverisher/M +impoverish/LGDRS +impoverishment/SM +impracticableness/M +impracticable/P +impracticably +impracticality/SM +impracticalness/M +impractical/PY +imprecate/NGXSD +imprecation/M +impreciseness/MS +imprecise/PYXN +imprecision/M +impregnability/MS +impregnableness/M +impregnable/P +impregnably +impregnate/DSXNG +impregnation/M +impresario/SM +impress/DRSGVL +impressed/U +impresser/M +impressibility/MS +impressible +impressionability/SM +impressionableness/M +impressionable/P +impression/BMS +impressionism/SM +impressionistic +impressionist/MS +impressiveness/MS +impressive/YP +impressment/M +imprimatur/SM +imprinter/M +imprinting/M +imprint/SZDRGM +imprison/GLDS +imprisonment/MS +improbability/MS +improbableness/M +improbable/P +improbably +impromptu/S +improperness/M +improper/PY +impropitious +impropriety/SM +improved/U +improvement/MS +improver/M +improve/SRDGBL +improvidence/SM +improvident/Y +improvisational +improvisation/MS +improvisatory +improviser/M +improvise/RSDZG +imprudence/SM +imprudent/Y +imp/SGMDRY +impudence/MS +impudent/Y +impugner/M +impugn/SRDZGB +impulse/XMVGNSD +impulsion/M +impulsiveness/MS +impulsive/YP +impunity/SM +impureness/M +impure/RPTY +impurity/MS +imputation/SM +impute/SDBG +Imus/M +IN +inaction +inactive +inadequate/S +inadvertence/MS +inadvertent/Y +inalienability/MS +inalienably +inalterableness/M +inalterable/P +Ina/M +inamorata/MS +inane/SRPYT +inanimateness/S +inanimate/P +inanity/MS +inappeasable +inappropriate/P +inarticulate/P +in/AS +inasmuch +inaugural/S +inaugurate/XSDNG +inauguration/M +inauthenticity +inbound/G +inbred/S +inbreed/JG +incalculableness/M +incalculably +incandescence/SM +incandescent/YS +incant +incantation/SM +incantatory +incapable/S +incapacitate/GNSD +incapacitation/M +incarcerate/XGNDS +incarceration/M +incarnadine/GDS +incarnate/AGSDNX +incarnation/AM +Inca/SM +incendiary/S +incense/MGDS +incentive/ESM +incentively +incept/DGVS +inception/MS +inceptive/Y +inceptor/M +incessant/Y +incest/SM +incestuousness/MS +incestuous/PY +inch/GMDS +inchoate/DSG +Inchon/M +inchworm/MS +incidence/MS +incidental/YS +incident/SM +incinerate/XNGSD +incineration/M +incinerator/SM +incipience/SM +incipiency/M +incipient/Y +incise/SDVGNX +incision/M +incisiveness/MS +incisive/YP +incisor/MS +incitement/MS +inciter/M +incite/RZL +incl +inclination/ESM +incline/EGSD +incliner/M +inclining/M +include/GDS +inclusion/MS +inclusiveness/MS +inclusive/PY +Inc/M +incognito/S +incoherency/M +income/M +incommode/DG +incommunicado +incomparable +incompetent/MS +incomplete/P +inconceivability/MS +inconceivableness/M +inconceivable/P +incondensable +incongruousness/S +inconsiderableness/M +inconsiderable/P +inconsistence +inconsolableness/M +inconsolable/P +inconsolably +incontestability/SM +incontestably +incontrovertibly +inconvenience/DG +inconvertibility +inconvertible +incorporable +incorporated/UE +incorporate/GASDXN +incorrect/P +incorrigibility/MS +incorrigibleness/M +incorrigible/SP +incorrigibly +incorruptible/S +incorruptibly +increase/JB +increaser/M +increasing/Y +incredibleness/M +incredible/P +incremental/Y +incrementation +increment/DMGS +incriminate/XNGSD +incrimination/M +incriminatory +incrustation/SM +inc/T +incubate/XNGVDS +incubation/M +incubator/MS +incubus/MS +inculcate/SDGNX +inculcation/M +inculpate/SDG +incumbency/MS +incumbent/S +incunabula +incunabulum +incurable/S +incurious +incursion/SM +ind +indebtedness/SM +indebted/P +indefatigableness/M +indefatigable/P +indefatigably +indefeasible +indefeasibly +indefinableness/M +indefinable/PS +indefinite/S +indelible +indelibly +indemnification/M +indemnify/NXSDG +indemnity/SM +indentation/SM +indented/U +indenter/M +indention/SM +indent/R +indenture/DG +Independence/M +indescribableness/M +indescribable/PS +indescribably +indestructibleness/M +indestructible/P +indestructibly +indeterminably +indeterminacy/MS +indeterminism +indexation/S +indexer/M +index/MRDZGB +India/M +Indiana/M +Indianan/S +Indianapolis/M +Indianian/S +Indian/SM +indicant/MS +indicate/DSNGVX +indication/M +indicative/SY +indicator/MS +indices's +indicter/M +indictment/SM +indict/SGLBDR +indifference +indigence/MS +indigenousness/M +indigenous/YP +indigent/SY +indigestible/S +indignant/Y +indignation/MS +indigo/SM +Indira/M +indirect/PG +indiscreet/P +indiscriminateness/M +indiscriminate/PY +indispensability/MS +indispensableness/M +indispensable/SP +indispensably +indisputableness/M +indisputable/P +indissolubleness/M +indissoluble/P +indissolubly +indistinguishableness/M +indistinguishable/P +indite/SDG +indium/SM +individualism/MS +individualistic +individualistically +individualist/MS +individuality/MS +individualization/SM +individualize/DRSGZ +individualized/U +individualizer/M +individualizes/U +individualizing/Y +individual/YMS +individuate/DSXGN +individuation/M +indivisibleness/M +indivisible/SP +indivisibly +Ind/M +Indochina/M +Indochinese +indoctrinate/GNXSD +indoctrination/M +indoctrinator/SM +indolence/SM +indolent/Y +indomitableness/M +indomitable/P +indomitably +Indonesia/M +Indonesian/S +indoor +Indore/M +Indra/M +indubitableness/M +indubitable/P +indubitably +inducement/MS +inducer/M +induce/ZGLSRD +inducible +inductance/MS +inductee/SM +induct/GV +induction/SM +inductiveness/M +inductive/PY +inductor/MS +indulge/GDRS +indulgence/SDGM +indulgent/Y +indulger/M +Indus/M +industrialism/MS +industrialist/MS +industrialization/MS +industrialized/U +industrialize/SDG +industrial/SY +industriousness/SM +industrious/YP +industry/SM +Indy/SM +inebriate/NGSDX +inebriation/M +inedible +ineducable +ineffability/MS +ineffableness/M +ineffable/P +ineffably +inelastic +ineligibly +ineluctable +ineluctably +ineptitude/SM +ineptness/MS +inept/YP +inequivalent +inerrant +inertial/Y +inertia/SM +inertness/MS +inert/SPY +Ines +inescapably +Inesita/M +Inessa/M +inestimably +inevitability/MS +inevitableness/M +inevitable/P +inevitably +inexact/P +inexhaustibleness/M +inexhaustible/P +inexhaustibly +inexorability/M +inexorableness/M +inexorable/P +inexorably +inexpedience/M +inexplicableness/M +inexplicable/P +inexplicably +inexplicit +inexpressibility/M +inexpressibleness/M +inexpressible/PS +inextricably +Inez/M +infamous +infamy/SM +infancy/M +infanticide/MS +infantile +infant/MS +infantryman/M +infantrymen +infantry/SM +infarction/SM +infarct/SM +infatuate/XNGSD +infatuation/M +infauna +infected/U +infecter +infect/ESGDA +infection/EASM +infectiousness/MS +infectious/PY +infective +infer/B +inference/GMSR +inferential/Y +inferiority/MS +inferior/SMY +infernal/Y +inferno/MS +inferred +inferring +infertile +infestation/MS +infester/M +infest/GSDR +infidel/SM +infighting/M +infill/MG +infiltrate/V +infiltrator/MS +infinitesimal/SY +infinite/V +infinitival +infinitive/YMS +infinitude/MS +infinitum +infinity/SM +infirmary/SM +infirmity/SM +infix/M +inflammableness/M +inflammable/P +inflammation/MS +inflammatory +inflatable/MS +inflate/NGBDRSX +inflater/M +inflationary +inflation/ESM +inflect/GVDS +inflectional/Y +inflection/SM +inflexibleness/M +inflexible/P +inflexion/SM +inflict/DRSGV +inflicter/M +infliction/SM +inflow/M +influenced/U +influencer/M +influence/SRDGM +influent +influential/SY +influenza/MS +infomercial/S +Informatica/M +informatics +informational +information/ES +informativeness/S +informative/UY +informatory +informed/U +informer/M +info/SM +infotainment/S +infra +infrared/SM +infrasonic +infrastructural +infrastructure/MS +infrequence/S +infringe/LR +infringement/SM +infringer/M +infuriate/GNYSD +infuriating/Y +infuriation/M +infuser/M +infuse/RZ +infusibleness/M +infusible/P +inf/ZT +Ingaberg/M +Ingaborg/M +Inga/M +Ingamar/M +Ingar/M +Ingeberg/M +Ingeborg/M +Ingelbert/M +Ingemar/M +ingeniousness/MS +ingenious/YP +ingnue/S +ingenuity/SM +ingenuous/EY +ingenuousness/MS +Inger/M +Inge/RM +Ingersoll/M +ingest/DGVS +ingestible +ingestion/SM +Inglebert/M +inglenook/MS +Inglewood/M +Inglis/M +Ingmar/M +ingoing +ingot/SMDG +ingrained/Y +Ingra/M +Ingram/M +ingrate/M +ingratiate/DSGNX +ingratiating/Y +ingratiation/M +ingredient/SM +Ingres/M +ingression/M +ingress/MS +Ingrid/M +Ingrim/M +ingrown/P +inguinal +Ingunna/M +inhabitable/U +inhabitance +inhabited/U +inhabiter/M +inhabit/R +inhalant/S +inhalation/SM +inhalator/SM +inhale/Z +inhere/DG +inherent/Y +inheritableness/M +inheritable/P +inheritance/EMS +inherit/BDSG +inherited/E +inheriting/E +inheritor/S +inheritress/MS +inheritrix/MS +inherits/E +inhibit/DVGS +inhibited/U +inhibiter's +inhibition/MS +inhibitor/MS +inhibitory +inhomogeneous +inhospitableness/M +inhospitable/P +inhospitality +Inigo/M +inimical/Y +inimitableness/M +inimitable/P +inimitably +inion +iniquitousness/M +iniquitous/PY +iniquity/MS +initialer/M +initial/GSPRDY +initialization/A +initializations +initialization's +initialize/ASDG +initialized/U +initializer/S +initiates +initiate/UD +initiating +initiation/SM +initiative/SM +initiator/MS +initiatory +injectable/U +inject/GVSDB +injection/MS +injector/SM +injunctive +injured/U +injurer/M +injure/SRDZG +injuriousness/M +injurious/YP +inkblot/SM +inker/M +inkiness/MS +inkling/SM +inkstand/SM +inkwell/SM +inky/TP +ink/ZDRJ +inland +inlander/M +inlay/RG +inletting +inly/G +inmost +Inna/M +innards +innateness/SM +innate/YP +innermost/S +innersole/S +innerspring +innervate/GNSDX +innervation/M +inner/Y +inning/M +Innis/M +innkeeper/MS +innocence/SM +Innocent/M +innocent/SYRT +innocuousness/MS +innocuous/PY +innovate/SDVNGX +innovation/M +innovative/P +innovator/MS +innovatory +Innsbruck/M +innuendo/MDGS +innumerability/M +innumerableness/M +innumerable/P +innumerably +innumerate +inn/ZGDRSJ +inoculate/ASDG +inoculation/MS +inoculative +inoffensive/P +Inonu/M +inopportuneness/M +inopportune/P +inordinateness/M +inordinate/PY +inorganic +inpatient +In/PM +input/MRDG +inquirer/M +inquire/ZR +inquiring/Y +inquiry/MS +inquisitional +inquisition/MS +Inquisition/MS +inquisitiveness/MS +inquisitive/YP +inquisitorial/Y +inquisitor/MS +INRI +inrush/M +ins +INS +insalubrious +insanitary +insatiability/MS +insatiableness/M +insatiable/P +insatiably +inscribe/Z +inscription/SM +inscrutability/SM +inscrutableness/SM +inscrutable/P +inscrutably +inseam +insecticidal +insecticide/MS +insectivore/SM +insectivorous +insecureness/M +insecure/P +inseminate/NGXSD +insemination/M +insensateness/M +insensate/P +insensible/P +insentient +inseparable/S +insert/ADSG +inserter/M +insertion/AMS +insetting +inshore +insider/M +inside/Z +insidiousness/MS +insidious/YP +insightful/Y +insigne's +insignia/SM +insignificant +insinuate/VNGXSD +insinuating/Y +insinuation/M +insinuator/SM +insipidity/MS +insipid/Y +insistence/SM +insistent/Y +insisting/Y +insist/SGD +insociable +insofar +insole/M +insolence/SM +insolent/YS +insolubleness/M +insoluble/P +insolubly +insomniac/S +insomnia/MS +insomuch +insouciance/SM +insouciant/Y +inspect/AGSD +inspection/SM +inspective +inspectorate/MS +inspector/SM +inspirational/Y +inspiration/MS +inspired/U +inspire/R +inspirer/M +inspiring/U +inspirit/DG +Inst +installable +install/ADRSG +installation/SM +installer/MS +installment/MS +instance/GD +instantaneousness/M +instantaneous/PY +instantiated/U +instantiate/SDXNG +instantiation/M +instant/SRYMP +instate/AGSD +inst/B +instead +instigate/XSDVGN +instigation/M +instigator/SM +instillation/SM +instinctive/Y +instinctual +instinct/VMS +instituter/M +institutes/M +institute/ZXVGNSRD +institutionalism/M +institutionalist/M +institutionalization/SM +institutionalize/GDS +institutional/Y +institution/AM +institutor's +instr +instruct/DSVG +instructed/U +instructional +instruction/MS +instructiveness/M +instructive/PY +instructor/MS +instrumentalist/MS +instrumentality/SM +instrumental/SY +instrumentation/SM +instrument/GMDS +insubordinate +insubstantial +insufferable +insufferably +insularity/MS +insular/YS +insulate/DSXNG +insulated/U +insulation/M +insulator/MS +insulin/MS +insult/DRSG +insulter/M +insulting/Y +insuperable +insuperably +insupportableness/M +insupportable/P +insurance/MS +insurance's/A +insure/BZGS +insured/S +insurer/M +insurgence/SM +insurgency/MS +insurgent/MS +insurmountably +insurrectionist/SM +insurrection/SM +intactness/M +intact/P +intaglio/GMDS +intake/M +intangible/M +integer/MS +integrability/M +integrable +integral/SYM +integrand/MS +integrate/AGNXEDS +integration/EMA +integrative/E +integrator/MS +integrity/SM +integument/SM +intellective/Y +intellect/MVS +intellectualism/MS +intellectuality/M +intellectualize/GSD +intellectualness/M +intellectual/YPS +intelligence/MSR +intelligencer/M +intelligentsia/MS +intelligent/UY +intelligibilities +intelligibility/UM +intelligibleness/MU +intelligible/PU +intelligibly/U +Intel/M +Intelsat/M +intemperate/P +intendant/MS +intendedness/M +intended/SYP +intender/M +intensification/M +intensifier/M +intensify/GXNZRSD +intensional/Y +intensiveness/MS +intensive/PSY +intentionality/M +intentional/UY +intention/SDM +intentness/SM +intent/YP +interaction/MS +interactive/PY +interactivity +interact/VGDS +interaxial +interbank +interbred +interbreed/GS +intercalate/GNVDS +intercalation/M +intercase +intercaste +interceder/M +intercede/SRDG +intercensal +intercept/DGS +interception/MS +interceptor/MS +intercession/MS +intercessor/SM +intercessory +interchangeability/M +interchangeableness/M +interchangeable/P +interchangeably +interchange/DSRGJ +interchanger/M +intercity +interclass +intercohort +intercollegiate +intercommunicate/SDXNG +intercommunication/M +intercom/SM +interconnectedness/M +interconnected/P +interconnect/GDS +interconnection/SM +interconnectivity +intercontinental +interconversion/M +intercorrelated +intercourse/SM +Interdata/M +interdenominational +interdepartmental/Y +interdependence/MS +interdependency/SM +interdependent/Y +interdiction/MS +interdict/MDVGS +interdisciplinary +interested/UYE +interest/GEMDS +interestingly/U +interestingness/M +interesting/YP +inter/ESTL +interface/SRDGM +interfacing/M +interfaith +interference/MS +interferer/M +interfere/SRDG +interfering/Y +interferometer/SM +interferometric +interferometry/M +interferon/MS +interfile/GSD +intergalactic +intergenerational +intergeneration/M +interglacial +intergovernmental +intergroup +interim/S +interindex +interindustry +interior/SMY +interj +interject/GDS +interjectional +interjection/MS +interlace/GSD +interlard/SGD +interlayer/G +interleave/SDG +interleukin/S +interlibrary +interlinear/S +interline/JGSD +interlingual +interlingua/M +interlining/M +interlink/GDS +interlisp/M +interlobular +interlocker/M +interlock/RDSG +interlocutor/MS +interlocutory +interlope/GZSRD +interloper/M +interlude/MSDG +intermarriage/MS +intermarry/GDS +intermediary/MS +intermediateness/M +intermediate/YMNGSDP +intermediation/M +interment/SME +intermeshed +intermetrics +intermezzi +intermezzo/SM +interminably +intermingle/DSG +intermission/MS +intermittent/Y +intermix/GSRD +intermodule +intermolecular/Y +internalization/SM +internalize/GDS +internal/SY +Internationale/M +internationalism/SM +internationalist/SM +internationality/M +internationalization/MS +internationalize/DSG +international/YS +internecine +internee/SM +interne's +Internet/M +INTERNET/M +internetwork +internist/SM +intern/L +internment/SM +internship/MS +internuclear +interocular +interoffice +interoperability +interpenetrates +interpersonal/Y +interplanetary +interplay/GSMD +interpol +interpolate/XGNVBDS +interpolation/M +Interpol/M +interpose/GSRD +interposer/M +interposition/MS +interpretable/U +interpret/AGSD +interpretation/MSA +interpretative/Y +interpreted/U +interpreter/SM +interpretive/Y +interpretor/S +interprocess +interprocessor +interquartile +interracial +interred/E +interregional +interregnum/MS +interrelatedness/M +interrelated/PY +interrelate/GNDSX +interrelation/M +interrelationship/SM +interring/E +interrogate/DSXGNV +interrogation/M +interrogative/SY +interrogator/SM +interrogatory/S +interrupted/U +interrupter/M +interruptibility +interruptible +interruption/MS +interrupt/VGZRDS +interscholastic +intersect/GDS +intersection/MS +intersession/MS +interspecies +intersperse/GNDSX +interspersion/M +interstage +interstate/S +interstellar +interstice/SM +interstitial/SY +intersurvey +intertask +intertwine/GSD +interurban/S +interval/MS +intervene/GSRD +intervener/M +intervenor/M +interventionism/MS +interventionist/S +intervention/MS +interview/AMD +interviewed/U +interviewee/SM +interviewer/SM +interviewing +interviews +intervocalic +interweave/GS +interwove +interwoven +intestacy/SM +intestinal/Y +intestine/SM +inti +intifada +intimacy/SM +intimal +intimateness/M +intimater/M +intimate/XYNGPDRS +intimation/M +intimidate/SDXNG +intimidating/Y +intimidation/M +into +intolerableness/M +intolerable/P +intolerant/PS +intonate/NX +intonation/M +intoxicant/MS +intoxicate/DSGNX +intoxicated/Y +intoxication/M +intra +intracellular +intracity +intraclass +intracohort +intractability/M +intractableness/M +intractable/P +intradepartmental +intrafamily +intragenerational +intraindustry +intraline +intrametropolitan +intramural/Y +intramuscular/Y +intranasal +intransigence/MS +intransigent/YS +intransitive/S +intraoffice +intraprocess +intrapulmonary +intraregional +intrasectoral +intrastate +intratissue +intrauterine +intravenous/YS +intrepidity/SM +intrepidness/M +intrepid/YP +intricacy/SM +intricateness/M +intricate/PY +intrigue/DRSZG +intriguer/M +intriguing/Y +intrinsically +intrinsic/S +introduce/ADSG +introducer/M +introduction/ASM +introductory +introit/SM +introject/SD +intro/S +introspection/MS +introspectiveness/M +introspective/YP +introspect/SGVD +introversion/SM +introvert/SMDG +intruder/M +intrude/ZGDSR +intrusion/SM +intrusiveness/MS +intrusive/SYP +intubate/NGDS +intubation/M +intuit/GVDSB +intuitionist/M +intuitiveness/MS +intuitive/YP +int/ZR +Inuit/MS +inundate/SXNG +inundation/M +inure/GDS +invader/M +invade/ZSRDG +invalid/GSDM +invalidism/MS +invariable/P +invariant/M +invasion/SM +invasive/P +invectiveness/M +invective/PSMY +inveigh/DRG +inveigher/M +inveighs +inveigle/DRSZG +inveigler/M +invent/ADGS +invented/U +invention/ASM +inventiveness/MS +inventive/YP +inventor/MS +inventory/SDMG +Inverness/M +inverse/YV +inverter/M +invertible +invert/ZSGDR +invest/ADSLG +investigate/XDSNGV +investigation/MA +investigator/MS +investigatory +investiture/SM +investment/ESA +investment's/A +investor/SM +inveteracy/MS +inveterate/Y +inviability +invidiousness/MS +invidious/YP +invigilate/GD +invigilator/SM +invigorate/ANGSD +invigorating/Y +invigoration/AM +invigorations +invincibility/SM +invincibleness/M +invincible/P +invincibly +inviolability/MS +inviolably +inviolateness/M +inviolate/YP +inviscid +invisibleness/M +invisible/S +invitational/S +invitation/MS +invited/U +invitee/S +inviter/M +invite/SRDG +inviting/Y +invocable +invocate +invoked/A +invoke/GSRDBZ +invoker/M +invokes/A +involuntariness/S +involuntary/P +involute/XYN +involution/M +involutorial +involvedly +involved/U +involve/GDSRL +involvement/SM +involver/M +invulnerability/M +invulnerableness/M +inwardness/M +inward/PY +ioctl +iodate/MGND +iodation/M +iodide/MS +iodinate/DNG +iodine/MS +iodize/GSD +Iolande/M +Iolanthe/M +Io/M +Iona/M +Ionesco/M +Ionian/M +ionic/S +Ionic/S +ionization's +ionization/SU +ionized/UC +ionize/GNSRDJXZ +ionizer's +ionizer/US +ionizes/U +ionizing/U +ionosphere/SM +ionospheric +ion's/I +ion/SMU +Iorgo/MS +Iormina/M +Iosep/M +iota/SM +IOU +Iowan/S +Iowa/SM +IPA +ipecac/MS +Iphigenia/M +ipso +Ipswich/M +IQ +Iqbal/M +Iquitos/M +Ira/M +Iranian/MS +Iran/M +Iraqi/SM +Iraq/M +IRA/S +irascibility/SM +irascible +irascibly +irateness/S +irate/RPYT +ireful +Ireland/M +ire/MGDS +Irena/M +Irene/M +irenic/S +iridescence/SM +iridescent/Y +irides/M +iridium/MS +irids +Irina/M +Iris +iris/GDSM +Irishman/M +Irishmen +Irish/R +Irishwoman/M +Irishwomen +Irita/M +irk/GDS +irksomeness/SM +irksome/YP +Irkutsk/M +Ir/M +Irma/M +ironclad/S +iron/DRMPSGJ +ironer/M +ironic +ironicalness/M +ironical/YP +ironing/M +ironmonger/M +ironmongery/M +ironside/MS +ironstone/MS +ironware/SM +ironwood/SM +ironworker/M +ironwork/MRS +irony/SM +Iroquoian/MS +Iroquois/M +irradiate/XSDVNG +irradiation/M +irrationality/MS +irrationalness/M +irrational/YSP +Irrawaddy/M +irreclaimable +irreconcilability/MS +irreconcilableness/M +irreconcilable/PS +irreconcilably +irrecoverableness/M +irrecoverable/P +irrecoverably +irredeemable/S +irredeemably +irredentism/M +irredentist/M +irreducibility/M +irreducible +irreducibly +irreflexive +irrefutable +irrefutably +irregardless +irregularity/SM +irregular/YS +irrelevance/SM +irrelevancy/MS +irrelevant/Y +irreligious +irremediableness/M +irremediable/P +irremediably +irremovable +irreparableness/M +irreparable/P +irreparably +irreplaceable/P +irrepressible +irrepressibly +irreproachableness/M +irreproachable/P +irreproachably +irreproducibility +irreproducible +irresistibility/M +irresistibleness/M +irresistible/P +irresistibly +irresoluteness/SM +irresolute/PNXY +irresolution/M +irresolvable +irrespective/Y +irresponsibility/SM +irresponsibleness/M +irresponsible/PS +irresponsibly +irretrievable +irretrievably +irreverence/MS +irreverent/Y +irreversible +irreversibly +irrevocableness/M +irrevocable/P +irrevocably +irrigable +irrigate/DSXNG +irrigation/M +irritability/MS +irritableness/M +irritable/P +irritably +irritant/S +irritate/DSXNGV +irritated/Y +irritating/Y +irritation/M +irrupt/GVSD +irruption/SM +IRS +Irtish/M +Irvine/M +Irving/M +Irvin/M +Irv/MG +Irwin/M +Irwinn/M +is +i's +Isaac/SM +Isaak/M +Isabelita/M +Isabella/M +Isabelle/M +Isabel/M +Isacco/M +Isac/M +Isadora/M +Isadore/M +Isador/M +Isahella/M +Isaiah/M +Isak/M +Isa/M +ISBN +Iscariot/M +Iseabal/M +Isfahan/M +Isherwood/M +Ishim/M +Ishmael/M +Ishtar/M +Isiahi/M +Isiah/M +Isidora/M +Isidore/M +Isidor/M +Isidoro/M +Isidro/M +isinglass/MS +Isis/M +Islamabad/M +Islamic/S +Islam/SM +islander/M +island/GZMRDS +Islandia/M +isle/MS +islet/SM +isl/GD +Ismael/M +ism/MCS +isn't +ISO +isobaric +isobar/MS +Isobel/M +isochronal/Y +isochronous/Y +isocline/M +isocyanate/M +isodine +isolate/SDXNG +isolationism/SM +isolationistic +isolationist/SM +isolation/M +isolator/MS +Isolde/M +isomeric +isomerism/SM +isomer/SM +isometrically +isometric/S +isometrics/M +isomorphic +isomorphically +isomorphism/MS +isomorph/M +isoperimetrical +isopleth/M +isopleths +isosceles +isostatic +isothermal/Y +isotherm/MS +isotonic +isotope/SM +isotopic +isotropic +isotropically +isotropy/M +Ispahan's +ispell/M +Ispell/M +Israeli/MS +Israelite/SM +Israel/MS +Issac/M +Issiah/M +Issie/M +Issi/M +issuable +issuance/MS +issuant +issued/A +issue/GMZDSR +issuer/AMS +issues/A +issuing/A +Issy/M +Istanbul/M +isthmian/S +isthmus/SM +Istvan/M +Isuzu/M +It +IT +Itaipu/M +ital +Italianate/GSD +Italian/MS +italicization/MS +italicized/U +italicize/GSD +italic/S +Ital/M +Italy/M +Itasca/M +itch/GMDS +itchiness/MS +Itch/M +itchy/RTP +ITcorp/M +ITCorp/M +it'd +Itel/M +itemization/SM +itemized/U +itemize/GZDRS +itemizer/M +itemizes/A +item/MDSG +iterate/ASDXVGN +iteration/M +iterative/YA +iterator/MS +Ithaca/M +Ithacan +itinerant/SY +itinerary/MS +it'll +it/MUS +Ito/M +its +itself +ITT +IUD/S +IV +Iva/M +Ivanhoe/M +Ivan/M +Ivar/M +I've +Ive/MRS +Iver/M +Ivette/M +Ivett/M +Ivie/M +iv/M +Ivonne/M +Ivor/M +Ivory/M +ivory/SM +IVs +Ivy/M +ivy/MDS +ix +Izaak/M +Izabel/M +Izak/M +Izanagi/M +Izanami/M +Izhevsk/M +Izmir/M +Izvestia/M +Izzy/M +jabbed +jabberer/M +jabber/JRDSZG +jabbing +Jabez/M +Jablonsky/M +jabot/MS +jab/SM +jacaranda/MS +Jacenta/M +Jacinda/M +Jacinta/M +Jacintha/M +Jacinthe/M +jackal/SM +jackass/SM +jackboot/DMS +jackdaw/SM +Jackelyn/M +jacketed/U +jacket/GSMD +jack/GDRMS +jackhammer/MDGS +Jackie/M +Jacki/M +jackknife/MGSD +jackknives +Jacklin/M +Jacklyn/M +Jack/M +Jackman/M +jackpot/MS +Jackqueline/M +Jackquelin/M +jackrabbit/DGS +Jacksonian +Jackson/SM +Jacksonville/M +jackstraw/MS +Jacky/M +Jaclin/M +Jaclyn/M +Jacobean +Jacobian/M +Jacobi/M +Jacobin/M +Jacobite/M +Jacobo/M +Jacobsen/M +Jacob/SM +Jacobs/N +Jacobson/M +Jacobus +Jacoby/M +jacquard/MS +Jacquard/SM +Jacqueline/M +Jacquelin/M +Jacquelyn/M +Jacquelynn/M +Jacquenetta/M +Jacquenette/M +Jacques/M +Jacquetta/M +Jacquette/M +Jacquie/M +Jacqui/M +jacuzzi +Jacuzzi/S +Jacynth/M +Jada/M +jadedness/SM +jaded/PY +jadeite/SM +Jade/M +jade/MGDS +Jaeger/M +Jae/M +jaggedness/SM +jagged/RYTP +Jagger/M +jaggers +jagging +jag/S +jaguar/MS +jailbird/MS +jailbreak/SM +jailer/M +jail/GZSMDR +Jaime/M +Jaimie/M +Jaine/M +Jainism/M +Jain/M +Jaipur/M +Jakarta/M +Jake/MS +Jakie/M +Jakob/M +jalapeo/S +jalopy/SM +jalousie/MS +Jamaal/M +Jamaica/M +Jamaican/S +Jamal/M +Jamar/M +jambalaya/MS +jamb/DMGS +jamboree/MS +Jamel/M +Jame/MS +Jameson/M +Jamestown/M +Jamesy/M +Jamey/M +Jamie/M +Jamill/M +Jamil/M +Jami/M +Jamima/M +Jamison/M +Jammal/M +jammed/U +Jammie/M +jamming/U +jam/SM +Janacek/M +Jana/M +Janaya/M +Janaye/M +Jandy/M +Janean/M +Janeczka/M +Janeen/M +Janeiro/M +Janek/M +Janela/M +Janella/M +Janelle/M +Janell/M +Janel/M +Jane/M +Janene/M +Janenna/M +Janessa/M +Janesville/M +Janeta/M +Janet/M +Janetta/M +Janette/M +Janeva/M +Janey/M +jangler/M +jangle/RSDGZ +jangly +Jania/M +Janice/M +Janie/M +Janifer/M +Janina/M +Janine/M +Janis/M +janissary/MS +Janith/M +janitorial +janitor/SM +Janka/M +Jan/M +Janna/M +Jannelle/M +Jannel/M +Jannie/M +Janos/M +Janot/M +Jansenist/M +Jansen/M +January/MS +Janus/M +Jany/M +Japanese/SM +Japan/M +japanned +japanner +japanning +japan/SM +jape/DSMG +Japura/M +Jaquelin/M +Jaquelyn/M +Jaquenetta/M +Jaquenette/M +Jaquith/M +Jarad/M +jardinire/MS +Jard/M +Jareb/M +Jared/M +jarful/S +jargon/SGDM +Jarib/M +Jarid/M +Jarlsberg +jar/MS +Jarrad/M +jarred +Jarred/M +Jarret/M +Jarrett/M +Jarrid/M +jarring/SY +Jarrod/M +Jarvis/M +Jase/M +Jasen/M +Jasmina/M +Jasmine/M +jasmine/MS +Jasmin/M +Jason/M +Jasper/M +jasper/MS +Jastrow/M +Jasun/M +jato/SM +jaundice/DSMG +jaundiced/U +jauntily +jauntiness/MS +jaunt/MDGS +jaunty/SRTP +Javanese +Java/SM +JavaScript/M +javelin/SDMG +Javier/M +jawbone/SDMG +jawbreaker/SM +jawline +jaw/SMDG +Jaxartes/M +Jayapura/M +jaybird/SM +Jaycee/SM +Jaye/M +Jay/M +Jaymee/M +Jayme/M +Jaymie/M +Jaynell/M +Jayne/M +jay/SM +Jayson/M +jaywalker/M +jaywalk/JSRDZG +Jazmin/M +jazziness/M +jazzmen +jazz/MGDS +jazzy/PTR +JCS +jct +JD +Jdavie/M +jealousness/M +jealous/PY +jealousy/MS +Jeana/M +Jeanelle/M +Jeane/M +Jeanette/M +Jeanie/M +Jeanine/M +Jean/M +jean/MS +Jeanna/M +Jeanne/M +Jeannette/M +Jeannie/M +Jeannine/M +Jecho/M +Jedd/M +Jeddy/M +Jedediah/M +Jedidiah/M +Jedi/M +Jed/M +jeep/GZSMD +Jeep/S +jeerer/M +jeering/Y +jeer/SJDRMG +Jeeves/M +jeez +Jefferey/M +Jeffersonian/S +Jefferson/M +Jeffery/M +Jeffie/M +Jeff/M +Jeffrey/SM +Jeffry/M +Jeffy/M +jehad's +Jehanna/M +Jehoshaphat/M +Jehovah/M +Jehu/M +jejuna +jejuneness/M +jejune/PY +jejunum/M +Jekyll/M +Jelene/M +jell/GSD +Jello/M +jello's +jellybean/SM +jellyfish/MS +jellying/M +jellylike +jellyroll/S +jelly/SDMG +Jemie/M +Jemimah/M +Jemima/M +Jemmie/M +jemmy/M +Jemmy/M +Jena/M +Jenda/M +Jenelle/M +Jenica/M +Jeniece/M +Jenifer/M +Jeniffer/M +Jenilee/M +Jeni/M +Jenine/M +Jenkins/M +Jen/M +Jenna/M +Jennee/M +Jenner/M +jennet/SM +Jennette/M +Jennica/M +Jennie/M +Jennifer/M +Jennilee/M +Jenni/M +Jennine/M +Jennings/M +Jenn/RMJ +Jenny/M +jenny/SM +Jeno/M +Jensen/M +Jens/N +jeopard +jeopardize/GSD +jeopardy/MS +Jephthah/M +Jerad/M +Jerald/M +Jeralee/M +Jeramey/M +Jeramie/M +Jere/M +Jereme/M +jeremiad/SM +Jeremiah/M +Jeremiahs +Jeremias/M +Jeremie/M +Jeremy/M +Jericho/M +Jeri/M +jerker/M +jerk/GSDRJ +jerkily +jerkiness/SM +jerkin/SM +jerkwater/S +jerky/RSTP +Jermaine/M +Jermain/M +Jermayne/M +Jeroboam/M +Jerold/M +Jerome/M +Jeromy/M +Jerrie/M +Jerrilee/M +Jerrilyn/M +Jerri/M +Jerrine/M +Jerrod/M +Jerrold/M +Jerrome/M +jerrybuilt +Jerrylee/M +jerry/M +Jerry/M +jersey/MS +Jersey/MS +Jerusalem/M +Jervis/M +Jes +Jessalin/M +Jessalyn/M +Jessa/M +Jessamine/M +jessamine's +Jessamyn/M +Jessee/M +Jesselyn/M +Jesse/M +Jessey/M +Jessica/M +Jessie/M +Jessika/M +Jessi/M +jess/M +Jess/M +Jessy/M +jest/DRSGZM +jester/M +jesting/Y +Jesuit/SM +Jesus +Jeth/M +Jethro/M +jetliner/MS +jet/MS +jetport/SM +jetsam/MS +jetted/M +jetting/M +jettison/DSG +jetty/RSDGMT +jeweler/M +jewelery/S +jewel/GZMRDS +Jewelled/M +Jewelle/M +jewellery's +Jewell/MD +Jewel/M +jewelry/MS +Jewess/SM +Jewishness/MS +Jewish/P +Jew/MS +Jewry/MS +Jezebel/MS +j/F +JFK/M +jg/M +jibbed +jibbing +jibe/S +jib/MDSG +Jidda/M +jiff/S +jiffy/SM +jigged +jigger/SDMG +jigging/M +jiggle/SDG +jiggly/TR +jig/MS +jigsaw/GSDM +jihad/SM +Jilin +Jillana/M +Jillane/M +Jillayne/M +Jilleen/M +Jillene/M +Jillian/M +Jillie/M +Jilli/M +Jill/M +Jilly/M +jilt/DRGS +jilter/M +Jimenez/M +Jim/M +Jimmie/M +jimmy/GSDM +Jimmy/M +jimsonweed/S +Jinan +jingler/M +jingle/RSDG +jingly/TR +jingoism/SM +jingoistic +jingoist/SM +jingo/M +Jinnah/M +jinni's +jinn/MS +Jinny/M +jinrikisha/SM +jinx/GMDS +jitney/MS +jitterbugged +jitterbugger +jitterbugging +jitterbug/SM +jitter/S +jittery/TR +jiujitsu's +Jivaro/M +jive/MGDS +Joachim/M +Joana/M +Joane/M +Joanie/M +Joan/M +Joanna/M +Joanne/SM +Joann/M +Joaquin/M +jobbed +jobber/MS +jobbery/M +jobbing/M +Jobey/M +jobholder/SM +Jobie/M +Jobi/M +Jobina/M +joblessness/MS +jobless/P +Jobrel/M +job/SM +Job/SM +Jobye/M +Joby/M +Jobyna/M +Jocasta/M +Joceline/M +Jocelin/M +Jocelyne/M +Jocelyn/M +jockey/SGMD +jock/GDMS +Jock/M +Jocko/M +jockstrap/MS +jocoseness/MS +jocose/YP +jocosity/SM +jocularity/SM +jocular/Y +jocundity/SM +jocund/Y +Jodee/M +jodhpurs +Jodie/M +Jodi/M +Jody/M +Joeann/M +Joela/M +Joelie/M +Joella/M +Joelle/M +Joellen/M +Joell/MN +Joelly/M +Joellyn/M +Joel/MY +Joelynn/M +Joe/M +Joesph/M +Joete/M +joey/M +Joey/M +jogged +jogger/SM +jogging/S +joggler/M +joggle/SRDG +Jogjakarta/M +jog/S +Johan/M +Johannah/M +Johanna/M +Johannes +Johannesburg/M +Johann/M +Johansen/M +Johanson/M +Johna/MH +Johnathan/M +Johnath/M +Johnathon/M +Johnette/M +Johnie/M +Johnna/M +Johnnie/M +johnnycake/SM +Johnny/M +johnny/SM +Johnsen/M +john/SM +John/SM +Johns/N +Johnson/M +Johnston/M +Johnstown/M +Johny/M +Joice/M +join/ADGFS +joined/U +joiner/FSM +joinery/MS +jointed/EYP +jointedness/ME +joint/EGDYPS +jointer/M +jointly/F +joint's +jointures +joist/GMDS +Jojo/M +joke/MZDSRG +joker/M +jokey +jokier +jokiest +jokily +joking/Y +Jolee/M +Joleen/M +Jolene/M +Joletta/M +Jolie/M +Joliet's +Joli/M +Joline/M +Jolla/M +jollification/MS +jollily +jolliness/SM +jollity/MS +jolly/TSRDGP +Jolson/M +jolt/DRGZS +jolter/M +Joly/M +Jolyn/M +Jolynn/M +Jo/MY +Jonah/M +Jonahs +Jonas +Jonathan/M +Jonathon/M +Jonell/M +Jone/MS +Jones/S +Jonie/M +Joni/MS +Jon/M +jonquil/MS +Jonson/M +Joplin/M +Jordain/M +Jordana/M +Jordanian/S +Jordan/M +Jordanna/M +Jordon/M +Jorey/M +Jorgan/M +Jorge/M +Jorgensen/M +Jorgenson/M +Jorie/M +Jori/M +Jorrie/M +Jorry/M +Jory/M +Joscelin/M +Josee/M +Josefa/M +Josefina/M +Josef/M +Joseito/M +Jose/M +Josepha/M +Josephina/M +Josephine/M +Joseph/M +Josephs +Josephson/M +Josephus/M +Josey/M +josh/DSRGZ +josher/M +Joshia/M +Josh/M +Joshuah/M +Joshua/M +Josiah/M +Josias/M +Josie/M +Josi/M +Josselyn/M +joss/M +jostle/SDG +Josue/M +Josy/M +jot/S +jotted +jotter/SM +jotting/SM +Joule/M +joule/SM +jounce/SDG +jouncy/RT +Jourdain/M +Jourdan/M +journalese/MS +journal/GSDM +journalism/SM +journalistic +journalist/SM +journalize/DRSGZ +journalized/U +journalizer/M +journey/DRMZSGJ +journeyer/M +journeyman/M +journeymen +jouster/M +joust/ZSMRDG +Jovanovich/M +Jove/M +joviality/SM +jovial/Y +Jovian +jowl/SMD +jowly/TR +Joya/M +Joyan/M +Joyann/M +Joycean +Joycelin/M +Joyce/M +Joye/M +joyfuller +joyfullest +joyfulness/SM +joyful/PY +joylessness/MS +joyless/PY +Joy/M +joy/MDSG +Joyner/M +joyousness/MS +joyous/YP +joyridden +joyride/SRZMGJ +joyrode +joystick/S +Jozef/M +JP +Jpn +Jr/M +j's +J's +Jsandye/M +Juana/M +Juanita/M +Juan/M +Juarez +Jubal/M +jubilant/Y +jubilate/XNGDS +jubilation/M +jubilee/SM +Judah/M +Judaic +Judaical +Judaism/SM +Judas/S +juddered +juddering +Judd/M +Judea/M +Jude/M +judge/AGDS +judger/M +judge's +judgeship/SM +judgmental/Y +judgment/MS +judicable +judicatory/S +judicature/MS +judicial/Y +judiciary/S +judicious/IYP +judiciousness/SMI +Judie/M +Judi/MH +Juditha/M +Judith/M +Jud/M +judo/MS +Judon/M +Judson/M +Judye/M +Judy/M +jugate/F +jugful/SM +jugged +Juggernaut/M +juggernaut/SM +jugging +juggler/M +juggle/RSDGZ +jugglery/MS +jug/MS +jugular/S +juice/GMZDSR +juicer/M +juicily +juiciness/MS +juicy/TRP +Juieta/M +jujitsu/MS +jujube/SM +juju/M +jujutsu's +jukebox/SM +juke/GS +Julee/M +Jule/MS +julep/SM +Julia/M +Juliana/M +Juliane/M +Julian/M +Julianna/M +Julianne/M +Juliann/M +Julie/M +julienne/GSD +Julienne/M +Julieta/M +Juliet/M +Julietta/M +Juliette/M +Juli/M +Julina/M +Juline/M +Julio/M +Julissa/M +Julita/M +Julius/M +Jul/M +Julys +July/SM +jumble/GSD +jumbo/MS +jumper/M +jump/GZDRS +jumpily +jumpiness/MS +jumpsuit/S +jumpy/PTR +jun +junco/MS +junction/IMESF +juncture/SFM +Juneau/M +June/MS +Junette/M +Jungfrau/M +Jungian +jungle/SDM +Jung/M +Junia/M +Junie/M +Junina/M +juniority/M +junior/MS +Junior/S +juniper/SM +junkerdom +Junker/SM +junketeer/SGDM +junket/SMDG +junk/GZDRMS +junkie/RSMT +junkyard/MS +Jun/M +Juno/M +junta/MS +Jupiter/M +Jurassic +juridic +juridical/Y +juried +jurisdictional/Y +jurisdiction/SM +jurisprudence/SM +jurisprudent +jurisprudential/Y +juristic +jurist/MS +juror/MS +Jurua/M +jury/IMS +jurying +juryman/M +jurymen +jurywoman/M +jurywomen +justed +Justen/M +juster/M +justest +Justice/M +justice/MIS +justiciable +justifiability/M +justifiable/U +justifiably/U +justification/M +justified/UA +justifier/M +justify/GDRSXZN +Justina/M +Justine/M +justing +Justinian/M +Justin/M +Justinn/M +Justino/M +Justis/M +justness/MS +justness's/U +justs +just/UPY +Justus/M +jute/SM +Jutish +Jutland/M +jut/S +jutted +jutting +Juvenal/M +juvenile/SM +juxtapose/SDG +juxtaposition/SM +JV +J/X +Jyoti/M +Kaaba/M +kabob/SM +kaboom +Kabuki +kabuki/SM +Kabul/M +Kacey/M +Kacie/M +Kacy/M +Kaddish/M +kaddish/S +Kaela/M +kaffeeklatch +kaffeeklatsch/S +Kafkaesque +Kafka/M +kaftan's +Kagoshima/M +Kahaleel/M +Kahlil/M +Kahlua/M +Kahn/M +Kaia/M +Kaifeng/M +Kaila/M +Kaile/M +Kailey/M +Kai/M +Kaine/M +Kain/M +kaiser/MS +Kaiser/SM +Kaitlin/M +Kaitlyn/M +Kaitlynn/M +Kaja/M +Kajar/M +Kakalina/M +Kalahari/M +Kala/M +Kalamazoo/M +Kalashnikov/M +Kalb/M +Kaleb/M +Kaleena/M +kaleidescope +kaleidoscope/SM +kaleidoscopic +kaleidoscopically +Kale/M +kale/MS +Kalgoorlie/M +Kalie/M +Kalila/M +Kalil/M +Kali/M +Kalina/M +Kalinda/M +Kalindi/M +Kalle/M +Kalli/M +Kally/M +Kalmyk +Kalvin/M +Kama/M +Kamchatka/M +Kamehameha/M +Kameko/M +Kamikaze/MS +kamikaze/SM +Kamilah/M +Kamila/M +Kamillah/M +Kampala/M +Kampuchea/M +Kanchenjunga/M +Kandace/M +Kandahar/M +Kandinsky/M +Kandy/M +Kane/M +kangaroo/SGMD +Kania/M +Kankakee/M +Kan/MS +Kannada/M +Kano/M +Kanpur/M +Kansan/S +Kansas +Kantian +Kant/M +Kanya/M +Kaohsiung/M +kaolinite/M +kaolin/MS +Kaplan/M +kapok/SM +Kaposi/M +kappa/MS +kaput/M +Karachi/M +Karaganda/M +Karakorum/M +karakul/MS +Karalee/M +Karalynn/M +Kara/M +Karamazov/M +karaoke/S +karate/MS +karat/SM +Karee/M +Kareem/M +Karel/M +Kare/M +Karena/M +Karenina/M +Karen/M +Karia/M +Karie/M +Karil/M +Karilynn/M +Kari/M +Karim/M +Karina/M +Karine/M +Karin/M +Kariotta/M +Karisa/M +Karissa/M +Karita/M +Karla/M +Karlan/M +Karlee/M +Karleen/M +Karlene/M +Karlen/M +Karlie/M +Karlik/M +Karlis +Karl/MNX +Karloff/M +Karlotta/M +Karlotte/M +Karly/M +Karlyn/M +karma/SM +Karmen/M +karmic +Karna/M +Karney/M +Karola/M +Karole/M +Karolina/M +Karoline/M +Karol/M +Karoly/M +Karon/M +Karo/YM +Karp/M +Karrah/M +Karrie/M +Karroo/M +Karry/M +kart/MS +Karylin/M +Karyl/M +Kary/M +Karyn/M +Kasai/M +Kasey/M +Kashmir/SM +Kaspar/M +Kasparov/M +Kasper/M +Kass +Kassandra/M +Kassey/M +Kassia/M +Kassie/M +Kassi/M +katakana +Katalin/M +Kata/M +Katee/M +Katelyn/M +Kate/M +Katerina/M +Katerine/M +Katey/M +Katha/M +Katharina/M +Katharine/M +Katharyn/M +Kathe/M +Katherina/M +Katherine/M +Katheryn/M +Kathiawar/M +Kathie/M +Kathi/M +Kathleen/M +Kathlin/M +Kath/M +Kathmandu +Kathrine/M +Kathryne/M +Kathryn/M +Kathye/M +Kathy/M +Katie/M +Kati/M +Katina/M +Katine/M +Katinka/M +Katleen/M +Katlin/M +Kat/M +Katmai/M +Katmandu's +Katowice/M +Katrina/M +Katrine/M +Katrinka/M +Kattie/M +Katti/M +Katuscha/M +Katusha/M +Katya/M +katydid/SM +Katy/M +Katz/M +Kauai/M +Kauffman/M +Kaufman/M +Kaunas/M +Kaunda/M +Kawabata/M +Kawasaki/M +kayak/SGDM +Kaycee/M +Kaye/M +Kayla/M +Kaylee/M +Kayle/M +Kayley/M +Kaylil/M +Kaylyn/M +Kay/M +Kayne/M +kayo/DMSG +Kazakh/M +Kazakhstan +Kazan/M +Kazantzakis/M +kazoo/SM +Kb +KB +KC +kcal/M +kc/M +KDE/M +Keane/M +Kean/M +Kearney/M +Keary/M +Keaton/M +Keats/M +kebab/SM +Keck/M +Keefe/MR +Keefer/M +Keegan/M +Keelby/M +Keeley/M +keel/GSMDR +keelhaul/SGD +Keelia/M +Keely/M +Keenan/M +Keene/M +keener/M +keen/GTSPYDR +keening/M +Keen/M +keenness/MS +keeper/M +keep/GZJSR +keeping/M +keepsake/SM +Keewatin/M +kegged +kegging +keg/MS +Keillor/M +Keir/M +Keisha/M +Keith/M +Kelbee/M +Kelby/M +Kelcey/M +Kelcie/M +Kelci/M +Kelcy/M +Kele/M +Kelila/M +Kellby/M +Kellen/M +Keller/M +Kelley/M +Kellia/M +Kellie/M +Kelli/M +Kellina/M +Kellogg/M +Kellsie/M +Kellyann/M +Kelly/M +kelp/GZMDS +Kelsey/M +Kelsi/M +Kelsy/M +Kelt's +Kelvin/M +kelvin/MS +Kelwin/M +Kemerovo/M +Kempis/M +Kemp/M +Kendall/M +Kendal/M +Kendell/M +Kendra/M +Kendre/M +Kendrick/MS +Kenilworth/M +Ken/M +Kenmore/M +ken/MS +Kenna/M +Kennan/M +Kennecott/M +kenned +Kennedy/M +kennel/GSMD +Kenneth/M +Kennett/M +Kennie/M +kenning +Kennith/M +Kenn/M +Kenny/M +keno/M +Kenon/M +Kenosha/M +Kensington/M +Kent/M +Kenton/M +Kentuckian/S +Kentucky/M +Kenya/M +Kenyan/S +Kenyatta/M +Kenyon/M +Keogh/M +Keokuk/M +kepi/SM +Kepler/M +kept +keratin/MS +kerbside +Kerby/M +kerchief/MDSG +Kerensky/M +Kerianne/M +Keriann/M +Keri/M +Kerk/M +Ker/M +Kermie/M +Kermit/M +Kermy/M +kerned +kernel/GSMD +kerning +Kern/M +kerosene/MS +Kerouac/M +Kerrie/M +Kerrill/M +Kerri/M +Kerrin/M +Kerr/M +Kerry/M +Kerstin/M +Kerwin/M +Kerwinn/M +Kesley/M +Keslie/M +Kessiah/M +Kessia/M +Kessler/M +kestrel/SM +ketch/MS +ketchup/SM +ketone/M +ketosis/M +Kettering/M +Kettie/M +Ketti/M +kettledrum/SM +kettleful +kettle/SM +Ketty/M +Kevan/M +Keven/M +Kevina/M +Kevin/M +Kevlar +Kev/MN +Kevon/M +Kevorkian/M +Kevyn/M +Kewaskum/M +Kewaunee/M +Kewpie/M +keyboardist/S +keyboard/RDMZGS +keyclick/SM +keyhole/MS +Key/M +Keynesian/M +Keynes/M +keynoter/M +keynote/SRDZMG +keypad/MS +keypuncher/M +keypunch/ZGRSD +keyring +key/SGMD +keystone/SM +keystroke/SDMG +keyword/SM +k/FGEIS +kg +K/G +KGB +Khabarovsk/M +Khachaturian/M +khaki/SM +Khalid/M +Khalil/M +Khan/M +khan/MS +Kharkov/M +Khartoum/M +Khayyam/M +Khmer/M +Khoisan/M +Khomeini/M +Khorana/M +Khrushchev/SM +Khufu/M +Khulna/M +Khwarizmi/M +Khyber/M +kHz/M +KIA +Kiah/M +Kial/M +kibble/GMSD +kibbutzim +kibbutz/M +kibitzer/M +kibitz/GRSDZ +kibosh/GMSD +Kickapoo/M +kickback/SM +kickball/MS +kicker/M +kick/GZDRS +kickoff/SM +kickstand/MS +kicky/RT +kidded +kidder/SM +kiddie/SD +kidding/YM +kiddish +Kidd/M +kiddo/SM +kiddying +kiddy's +kidless +kid/MS +kidnaper's +kidnaping's +kidnap/MSJ +kidnapped +kidnapper/SM +kidnapping/S +kidney/MS +kidskin/SM +Kieffer/M +kielbasa/SM +kielbasi +Kiele/M +Kiel/M +Kienan/M +kier/I +Kierkegaard/M +Kiersten/M +Kieth/M +Kiev/M +Kigali/M +Kikelia/M +Kikuyu/M +Kilauea/M +Kile/M +Kiley/M +Kilian/M +Kilimanjaro/M +kill/BJGZSDR +killdeer/SM +Killebrew/M +killer/M +Killian/M +Killie/M +killing/Y +killjoy/S +Killy/M +kiln/GDSM +kilobaud/M +kilobit/S +kilobuck +kilobyte/S +kilocycle/MS +kilogauss/M +kilogram/MS +kilohertz/M +kilohm/M +kilojoule/MS +kiloliter/MS +kilometer/SM +kilo/SM +kiloton/SM +kilovolt/SM +kilowatt/SM +kiloword +kilter/M +kilt/MDRGZS +Ki/M +Kimball/M +Kimbell/M +Kimberlee/M +Kimberley/M +Kimberli/M +Kimberly/M +Kimberlyn/M +Kimble/M +Kimbra/M +Kim/M +Kimmie/M +Kimmi/M +Kimmy/M +kimono/MS +Kincaid/M +kinda +kindergarten/MS +kindergrtner/SM +kinder/U +kindheartedness/MS +kindhearted/YP +kindle/AGRSD +kindler/M +kindliness/SM +kindliness's/U +kindling/M +kindly/TUPR +kindness's +kindness/US +kind/PSYRT +kindred/S +kinematic/S +kinematics/M +kinesics/M +kine/SM +kinesthesis +kinesthetically +kinesthetic/S +kinetically +kinetic/S +kinetics/M +kinfolk/S +kingbird/M +kingdom/SM +kingfisher/MS +kinglet/M +kingliness/M +kingly/TPR +King/M +kingpin/MS +Kingsbury/M +king/SGYDM +kingship/SM +Kingsley/M +Kingsly/M +Kingston/M +Kingstown/M +Kingwood/M +kink/GSDM +kinkily +kinkiness/SM +kinky/PRT +Kin/M +kin/MS +Kinna/M +Kinney/M +Kinnickinnic/M +Kinnie/M +Kinny/M +Kinsey/M +kinsfolk/S +Kinshasa/M +Kinshasha/M +kinship/SM +Kinsley/M +kinsman/M +kinsmen/M +kinswoman/M +kinswomen +kiosk/SM +Kiowa/SM +Kipling/M +Kip/M +kip/MS +Kippar/M +kipped +kipper/DMSG +Kipper/M +Kippie/M +kipping +Kipp/MR +Kippy/M +Kira/M +Kirbee/M +Kirbie/M +Kirby/M +Kirchhoff/M +Kirchner/M +Kirchoff/M +Kirghistan/M +Kirghizia/M +Kirghiz/M +Kiribati +Kiri/M +Kirinyaga/M +kirk/GDMS +Kirkland/M +Kirk/M +Kirkpatrick/M +Kirkwood/M +Kirov/M +kirsch/S +Kirsteni/M +Kirsten/M +Kirsti/M +Kirstin/M +Kirstyn/M +Kisangani/M +Kishinev/M +kismet/SM +kiss/DSRBJGZ +Kissee/M +kisser/M +Kissiah/M +Kissie/M +Kissinger/M +Kitakyushu/M +kitbag's +kitchener/M +Kitchener/M +kitchenette/SM +kitchen/GDRMS +kitchenware/SM +kiter/M +kite/SM +kith/MDG +kiths +Kit/M +kit/MDRGS +kitsch/MS +kitschy +kitted +kittenishness/M +kittenish/YP +kitten/SGDM +Kittie/M +Kitti/M +kitting +kittiwakes +Kitty/M +kitty/SM +Kiwanis/M +kiwifruit/S +kiwi/SM +Kizzee/M +Kizzie/M +KKK +kl +Klan/M +Klansman/M +Klara/M +Klarika/M +Klarrisa/M +Klaus/M +klaxon/M +Klee/M +Kleenex/SM +Klein/M +Kleinrock/M +Klemens/M +Klement/M +Kleon/M +kleptomaniac/SM +kleptomania/MS +Kliment/M +Kline/M +Klingon/M +Klondike/SDMG +kludger/M +kludge/RSDGMZ +kludgey +klutziness/S +klutz/SM +klutzy/TRP +Klux/M +klystron/MS +km +kn +knacker/M +knack/SGZRDM +knackwurst/MS +Knapp/M +knapsack/MS +Knauer/M +knavery/MS +knave/SM +knavish/Y +kneader/M +knead/GZRDS +kneecap/MS +kneecapped +kneecapping +knee/DSM +kneeing +kneeler/M +kneel/GRS +kneepad/SM +knell/SMDG +knelt +Knesset/M +knew +Kngwarreye/M +Knickerbocker/MS +knickerbocker/S +knickknack/SM +knick/ZR +Knievel/M +knife/DSGM +knighthood/MS +knightliness/MS +knightly/P +Knight/M +knight/MDYSG +knish/MS +knit/AU +knits +knitted +knitter/MS +knitting/SM +knitwear/M +knives/M +knobbly +knobby/RT +Knobeloch/M +knob/MS +knockabout/M +knockdown/S +knocker/M +knock/GZSJRD +knockoff/S +knockout/MS +knockwurst's +knoll/MDSG +Knopf/M +Knossos/M +knothole/SM +knot/MS +knotted +knottiness/M +knotting/M +knotty/TPR +knowable/U +knower/M +know/GRBSJ +knowhow +knowingly/U +knowing/RYT +knowings/U +knowledgeableness/M +knowledgeable/P +knowledgeably +knowledge/SM +Knowles +known/SU +Knox/M +Knoxville/M +knuckleball/R +knuckle/DSMG +knuckleduster +knucklehead/MS +Knudsen/M +Knudson/M +knurl/DSG +Knuth/M +Knutsen/M +Knutson/M +KO +koala/SM +Kobayashi/M +Kobe/M +Kochab/M +Koch/M +Kodachrome/M +Kodak/SM +Kodaly/M +Kodiak/M +Koenig/M +Koenigsberg/M +Koenraad/M +Koestler/M +Kohinoor/M +Kohler/M +Kohl/MR +kohlrabies +kohlrabi/M +kola/SM +Kolyma/M +Kommunizma/M +Kong/M +Kongo/M +Konrad/M +Konstance/M +Konstantine/M +Konstantin/M +Konstanze/M +kookaburra/SM +kook/GDMS +kookiness/S +kooky/PRT +Koo/M +Koontz/M +kopeck/MS +Koppers/M +Koralle/M +Koral/M +Kora/M +Koranic +Koran/SM +Kordula/M +Korea/M +Korean/S +Korella/M +Kore/M +Koren/M +Koressa/M +Korey/M +Korie/M +Kori/M +Kornberg/M +Korney/M +Korrie/M +Korry/M +Kort/M +Kory/M +Korzybski/M +Kosciusko/M +kosher/DGS +Kossuth/M +Kosygin/M +Kovacs/M +Kowalewski/M +Kowalski/M +Kowloon/M +kowtow/SGD +KP +kph +kraal/SMDG +Kraemer/M +kraft/M +Kraft/M +Krakatau's +Krakatoa/M +Krakow/M +Kramer/M +Krasnodar/M +Krasnoyarsk/M +Krause/M +kraut/S! +Krebs/M +Kremlin/M +Kremlinologist/MS +Kremlinology/MS +Kresge/M +Krieger/M +kriegspiel/M +krill/MS +Kringle/M +Krisha/M +Krishnah/M +Krishna/M +Kris/M +Krispin/M +Krissie/M +Krissy/M +Kristal/M +Krista/M +Kristan/M +Kristel/M +Kriste/M +Kristen/M +Kristian/M +Kristie/M +Kristien/M +Kristi/MN +Kristina/M +Kristine/M +Kristin/M +Kristofer/M +Kristoffer/M +Kristofor/M +Kristoforo/M +Kristo/MS +Kristopher/M +Kristy/M +Kristyn/M +Kr/M +Kroc/M +Kroger/M +krna/M +Kronecker/M +krone/RM +kronor +krnur +Kropotkin/M +Krueger/M +Kruger/M +Krugerrand/S +Krupp/M +Kruse/M +krypton/SM +Krystalle/M +Krystal/M +Krysta/M +Krystle/M +Krystyna/M +ks +K's +KS +k's/IE +kt +Kublai/M +Kubrick/M +kuchen/MS +kudos/M +kudzu/SM +Kuenning/M +Kuhn/M +Kuibyshev/M +Ku/M +Kumar/M +kumquat/SM +Kunming/M +Kuomintang/M +Kurdish/M +Kurdistan/SM +Kurd/SM +Kurosawa/M +Kurtis/M +Kurt/M +kurtosis/M +Kusch/M +Kuwaiti/SM +Kuwait/M +Kuznetsk/M +Kuznets/M +kvetch/DSG +kw +kW +Kwakiutl/M +Kwangchow's +Kwangju/M +Kwanzaa/S +kWh +KY +Kyla/M +kyle/M +Kyle/M +Kylen/M +Kylie/M +Kylila/M +Kylynn/M +Ky/MH +Kym/M +Kynthia/M +Kyoto/M +Kyrgyzstan +Kyrstin/M +Kyushu/M +L +LA +Laban/M +labeled/U +labeler/M +label/GAZRDS +labellings/A +label's +labial/YS +labia/M +labile +labiodental +labium/M +laboratory/MS +laboredness/M +labored/PMY +labored's/U +laborer/M +laboring/MY +laborings/U +laboriousness/MS +laborious/PY +labor/RDMJSZG +laborsaving +Labradorean/S +Labrador/SM +lab/SM +Lab/SM +laburnum/SM +labyrinthine +labyrinth/M +labyrinths +laced/U +Lacee/M +lace/MS +lacerate/NGVXDS +laceration/M +lacer/M +laces/U +lacewing/MS +Lacey/M +Lachesis/M +lachrymal/S +lachrymose +Lacie/M +lacing/M +lackadaisic +lackadaisical/Y +Lackawanna/M +lacker/M +lackey/SMDG +lack/GRDMS +lackluster/S +Lac/M +laconic +laconically +lacquerer/M +lacquer/ZGDRMS +lacrosse/MS +lac/SGMDR +lactate/MNGSDX +lactational/Y +lactation/M +lacteal +lactic +lactose/MS +lacunae +lacuna/M +Lacy/M +lacy/RT +ladder/GDMS +laddie/MS +laded/U +ladened +ladening +laden/U +lade/S +lading/M +ladle/SDGM +Ladoga/M +Ladonna/M +lad/XGSJMND +ladybird/SM +ladybug/MS +ladyfinger/SM +ladylike/U +ladylove/MS +Ladyship/MS +ladyship/SM +lady/SM +Lady/SM +Laetitia/M +laetrile/S +Lafayette/M +Lafitte/M +lager/DMG +laggard/MYSP +laggardness/M +lagged +lagging/MS +lagniappe/SM +lagoon/MS +Lagos/M +Lagrange/M +Lagrangian/M +Laguerre/M +Laguna/M +lag/ZSR +Lahore/M +laid/AI +Laidlaw/M +lain +Laina/M +Lainey/M +Laird/M +laird/MS +lair/GDMS +laissez +laity/SM +Laius/M +lake/DSRMG +Lakehurst/M +Lakeisha/M +laker/M +lakeside +Lakewood/M +Lakisha/M +Lakshmi/M +lallygagged +lallygagging +lallygag/S +Lalo/M +La/M +Lamaism/SM +Lamarck/M +Lamar/M +lamasery/MS +lama/SM +Lamaze +lambada/S +lambaste/SDG +lambda/SM +lambency/MS +lambent/Y +Lambert/M +lambkin/MS +Lamb/M +Lamborghini/M +lambskin/MS +lamb/SRDMG +lambswool +lamebrain/SM +lamed/M +lameness/MS +lamentableness/M +lamentable/P +lamentably +lamentation/SM +lament/DGSB +lamented/U +lame/SPY +la/MHLG +laminae +lamina/M +laminar +laminate/XNGSD +lamination/M +lam/MDRSTG +lammed +lammer +lamming +Lammond/M +Lamond/M +Lamont/M +L'Amour +lampblack/SM +lamplighter/M +lamplight/ZRMS +lampooner/M +lampoon/RDMGS +Lamport/M +lamppost/SM +lamprey/MS +lamp/SGMRD +lampshade/MS +LAN +Lanae/M +Lanai/M +lanai/SM +Lana/M +Lancashire/M +Lancaster/M +Lancelot/M +Lance/M +lancer/M +lance/SRDGMZ +lancet/MS +landau/MS +lander/I +landfall/SM +landfill/DSG +landforms +landholder/M +landhold/JGZR +landing/M +Landis/M +landlady/MS +landless +landlines +landlocked +landlord/MS +landlubber/SM +Land/M +landmark/GSMD +landmass/MS +Landon/M +landowner/MS +landownership/M +landowning/SM +Landry/M +Landsat +landscape/GMZSRD +landscaper/M +lands/I +landslide/MS +landslid/G +landslip +landsman/M +landsmen +land/SMRDJGZ +Landsteiner/M +landward/S +Landwehr/M +Lane/M +lane/SM +Lanette/M +Laney/M +Langeland/M +Lange/M +Langerhans/M +Langford/M +Langland/M +Langley/M +Lang/M +Langmuir/M +Langsdon/M +Langston/M +language/MS +languidness/MS +languid/PY +languisher/M +languishing/Y +languish/SRDG +languorous/Y +languor/SM +Lanie/M +Lani/M +Lanita/M +lankiness/SM +lankness/MS +lank/PTYR +lanky/PRT +Lanna/M +Lannie/M +Lanni/M +Lanny/M +lanolin/MS +Lansing/M +lantern/GSDM +lanthanide/M +lanthanum/MS +lanyard/MS +Lanzhou +Laocoon/M +Lao/SM +Laotian/MS +lapboard/MS +lapdog/S +lapel/MS +lapidary/MS +lapin/MS +Laplace/M +Lapland/ZMR +lapped +lappet/MS +lapping +Lapp/SM +lapsed/A +lapse/KSDMG +lapser/MA +lapses/A +lapsing/A +lap/SM +laps/SRDG +laptop/SM +lapwing/MS +Laraine/M +Lara/M +Laramie/M +larboard/MS +larcenist/S +larcenous +larceny/MS +larch/MS +larder/M +lard/MRDSGZ +Lardner/M +lardy/RT +Laredo/M +largehearted +largemouth +largeness/SM +large/SRTYP +largess/SM +largish +largo/S +lariat/MDGS +Lari/M +Larina/M +Larine/M +Larisa/M +Larissa/M +larker/M +lark/GRDMS +Lark/M +larkspur/MS +Larousse/M +Larry/M +Larsen/M +Lars/NM +Larson/M +larvae +larval +larva/M +laryngeal/YS +larynges +laryngitides +laryngitis/M +larynx/M +Laryssa/M +lasagna/S +lasagne's +Lascaux/M +lasciviousness/MS +lascivious/YP +lase +laser/M +lashed/U +lasher/M +lashing/M +lash/JGMSRD +Lassa/M +Lassen/M +Lassie/M +lassie/SM +lassitude/MS +lassoer/M +lasso/GRDMS +las/SRZG +lass/SM +laster/M +lastingness/M +lasting/PY +last/JGSYRD +Laszlo/M +Latasha/M +Latashia/M +latching/M +latchkey/SM +latch's +latch/UGSD +latecomer/SM +lated/A +late/KA +lately +latency/MS +lateness/MS +latent/YS +later/A +lateral/GDYS +lateralization +Lateran/M +latest/S +LaTeX/M +latex/MS +lathe/M +latherer/M +lather/RDMG +lathery +lathing/M +lath/MSRDGZ +Lathrop/M +laths +Latia/M +latices/M +Latina/SM +Latinate +Latino/S +Latin/RMS +latish +Latisha/M +latitude/SM +latitudinal/Y +latitudinarian/S +latitudinary +Lat/M +Latonya/M +Latoya/M +Latrena/M +Latrina/M +latrine/MS +Latrobe/M +lat/SDRT +latter/YM +latte/SR +lattice/SDMG +latticework/MS +latticing/M +Lattimer/M +Latvia/M +Latvian/S +laudably +laudanum/MS +laudatory +Lauderdale/M +lauder/M +Lauder/M +Laud/MR +laud/RDSBG +lauds/M +Laue/M +laughableness/M +laughable/P +laughably +laugh/BRDZGJ +laugher/M +laughing/MY +laughingstock/SM +laughs +laughter/MS +Laughton/M +Launce/M +launch/AGSD +launcher/MS +launching/S +launchpad/S +laundered/U +launderer/M +launderette/MS +launder/SDRZJG +laundress/MS +laundrette/S +laundromat/S +Laundromat/SM +laundryman/M +laundrymen +laundry/MS +laundrywoman/M +laundrywomen +Lauraine/M +Lauralee/M +Laural/M +laura/M +Laura/M +Laurasia/M +laureate/DSNG +laureateship/SM +Lauree/M +Laureen/M +Laurella/M +Laurel/M +laurel/SGMD +Laure/M +Laurena/M +Laurence/M +Laurene/M +Lauren/SM +Laurentian +Laurent/M +Lauretta/M +Laurette/M +Laurianne/M +Laurice/M +Laurie/M +Lauri/M +Lauritz/M +Lauryn/M +Lausanne/M +lavage/MS +lavaliere/MS +Laval/M +lava/SM +lavatory/MS +lave/GDS +Lavena/M +lavender/MDSG +Laverna/M +Laverne/M +Lavern/M +Lavina/M +Lavinia/M +Lavinie/M +lavishness/MS +lavish/SRDYPTG +Lavoisier/M +Lavonne/M +Lawanda/M +lawbreaker/SM +lawbreaking/MS +Lawford/M +lawfulness/SMU +lawful/PUY +lawgiver/MS +lawgiving/M +lawlessness/MS +lawless/PY +Law/M +lawmaker/MS +lawmaking/SM +lawman/M +lawmen +lawnmower/S +lawn/SM +Lawrence/M +Lawrenceville/M +lawrencium/SM +Lawry/M +law/SMDG +Lawson/M +lawsuit/MS +Lawton/M +lawyer/DYMGS +laxativeness/M +laxative/PSYM +laxer/A +laxes/A +laxity/SM +laxness/SM +lax/PTSRY +layabout/MS +Layamon/M +layaway/S +lay/CZGSR +layered/C +layer/GJDM +layering/M +layer's/IC +layette/SM +Layla/M +Lay/M +layman/M +laymen +Layne/M +Layney/M +layoff/MS +layout/SM +layover/SM +laypeople +layperson/S +lays/AI +Layton/M +layup/MS +laywoman/M +laywomen +Lazare/M +Lazar/M +Lazaro/M +Lazarus/M +laze/DSG +lazily +laziness/MS +lazuli/M +lazybones/M +lazy/PTSRDG +lb +LBJ/M +lbs +LC +LCD +LCM +LDC +leachate +Leach/M +leach/SDG +Leadbelly/M +leaded/U +leadenness/M +leaden/PGDY +leaderless +leader/M +leadership/MS +lead/SGZXJRDN +leadsman/M +leadsmen +leafage/MS +leaf/GSDM +leafhopper/M +leafiness/M +leafless +leaflet/SDMG +leafstalk/SM +leafy/PTR +leaguer/M +league/RSDMZG +Leah/M +leakage/SM +leaker/M +Leakey/M +leak/GSRDM +leakiness/MS +leaky/PRT +Lea/M +lea/MS +Leander/M +Leandra/M +leaner/M +leaning/M +Lean/M +Leanna/M +Leanne/M +leanness/MS +Leann/M +Leanora/M +Leanor/M +lean/YRDGTJSP +leaper/M +leapfrogged +leapfrogging +leapfrog/SM +leap/RDGZS +Lear/M +learnedly +learnedness/M +learned/UA +learner/M +learning/M +learns/UA +learn/SZGJRD +Leary/M +lease/ARSDG +leaseback/MS +leaseholder/M +leasehold/SRMZ +leaser/MA +lease's +leash's +leash/UGSD +leasing/M +leas/SRDGZ +least/S +leastwise +leatherette/S +leather/MDSG +leathern +leatherneck/SM +leathery +leaven/DMJGS +leavened/U +leavening/M +Leavenworth/M +leaver/M +leaves/M +leave/SRDJGZ +leaving/M +Lebanese +Lebanon/M +Lebbie/M +lebensraum +Lebesgue/M +Leblanc/M +lecher/DMGS +lecherousness/MS +lecherous/YP +lechery/MS +lecithin/SM +lectern/SM +lecturer/M +lecture/RSDZMG +lectureship/SM +led +Leda/M +Lederberg/M +ledger/DMG +ledge/SRMZ +LED/SM +Leeanne/M +Leeann/M +leech/MSDG +Leeds/M +leek/SM +Leelah/M +Leela/M +Leeland/M +Lee/M +lee/MZRS +Leena/M +leer/DG +leeriness/MS +leering/Y +leery/PTR +Leesa/M +Leese/M +Leeuwenhoek/M +Leeward/M +leeward/S +leeway/MS +leftism/SM +leftist/SM +leftmost +leftover/MS +Left/S +left/TRS +leftward/S +Lefty/M +lefty/SM +legacy/MS +legalese/MS +legalism/SM +legalistic +legality/MS +legalization/MS +legalize/DSG +legalized/U +legal/SY +legate/AXCNGSD +legatee/MS +legate's/C +legation/AMC +legato/SM +legendarily +legendary/S +Legendre/M +legend/SM +legerdemain/SM +Leger/SM +legged +legginess/MS +legging/MS +leggy/PRT +leghorn/SM +Leghorn/SM +legibility/MS +legible +legibly +legionary/S +legionnaire/SM +legion/SM +legislate/SDXVNG +legislation/M +legislative/SY +legislator/SM +legislature/MS +legitimacy/MS +legitimate/SDNGY +legitimation/M +legitimatize/SDG +legitimization/MS +legitimize/RSDG +legit/S +legless +legman/M +legmen +leg/MS +Lego/M +Legra/M +Legree/M +legroom/MS +legstraps +legume/SM +leguminous +legwork/SM +Lehigh/M +Lehman/M +Leia/M +Leibniz/M +Leicester/SM +Leiden/M +Leif/M +Leigha/M +Leigh/M +Leighton/M +Leilah/M +Leila/M +lei/MS +Leipzig/M +Leisha/M +leisureliness/MS +leisurely/P +leisure/SDYM +leisurewear +leitmotif/SM +leitmotiv/MS +Lek/M +Lelah/M +Lela/M +Leland/M +Lelia/M +Lemaitre/M +Lemar/M +Lemke/M +Lem/M +lemma/MS +lemme/GJ +Lemmie/M +lemming/M +Lemmy/M +lemonade/SM +lemon/GSDM +lemony +Lemuel/M +Lemuria/M +lemur/MS +Lena/M +Lenard/M +Lenci/M +lender/M +lend/SRGZ +Lenee/M +Lenette/M +lengthener/M +lengthen/GRD +lengthily +lengthiness/MS +length/MNYX +lengths +lengthwise +lengthy/TRP +lenience/S +leniency/MS +lenient/SY +Leningrad/M +Leninism/M +Leninist +Lenin/M +lenitive/S +Lenka/M +Len/M +Le/NM +Lenna/M +Lennard/M +Lennie/M +Lennon/M +Lenny/M +Lenoir/M +Leno/M +Lenora/M +Lenore/M +lens/SRDMJGZ +lent/A +lenticular +lentil/SM +lento/S +Lent/SMN +Leodora/M +Leoine/M +Leola/M +Leoline/M +Leo/MS +Leona/M +Leonanie/M +Leonard/M +Leonardo/M +Leoncavallo/M +Leonelle/M +Leonel/M +Leone/M +Leonerd/M +Leonhard/M +Leonidas/M +Leonid/M +Leonie/M +leonine +Leon/M +Leonora/M +Leonore/M +Leonor/M +Leontine/M +Leontyne/M +leopardess/SM +leopard/MS +leopardskin +Leopold/M +Leopoldo/M +Leopoldville/M +Leora/M +leotard/MS +leper/SM +Lepidus/M +Lepke/M +leprechaun/SM +leprosy/MS +leprous +lepta +lepton/SM +Lepus/M +Lerner/M +Leroi/M +Leroy/M +Lesa/M +lesbianism/MS +lesbian/MS +Leshia/M +lesion/DMSG +Lesley/M +Leslie/M +Lesli/M +Lesly/M +Lesotho/M +lessee/MS +lessen/GDS +Lesseps/M +lesser +lesses +Lessie/M +lessing +lesson/DMSG +lessor/MS +less/U +Lester/M +lest/R +Les/Y +Lesya/M +Leta/M +letdown/SM +lethality/M +lethal/YS +Letha/M +lethargic +lethargically +lethargy/MS +Lethe/M +Lethia/M +Leticia/M +Letisha/M +let/ISM +Letitia/M +Letizia/M +Letta/M +letterbox/S +lettered/U +letterer/M +letterhead/SM +lettering/M +letter/JSZGRDM +letterman/M +Letterman/M +lettermen +letterpress/MS +Lettie/M +Letti/M +letting/S +lettuce/SM +Letty/M +letup/MS +leukemia/SM +leukemic/S +leukocyte/MS +Leupold/M +Levant/M +leveeing +levee/SDM +leveled/U +leveler/M +levelheadedness/S +levelheaded/P +leveling/U +levelness/SM +level/STZGRDYP +leverage/MGDS +lever/SDMG +Levesque/M +Levey/M +Leviathan +leviathan/MS +levier/M +Levi/MS +Levine/M +Levin/M +levitate/XNGDS +levitation/M +Leviticus/M +Levitt/M +levity/MS +Lev/M +Levon/M +Levy/M +levy/SRDZG +lewdness/MS +lewd/PYRT +Lewellyn/M +Lewes +Lewie/M +Lewinsky/M +lewis/M +Lewis/M +Lewiss +Lew/M +lex +lexeme/MS +lexical/Y +lexicographer/MS +lexicographic +lexicographical/Y +lexicography/SM +lexicon/SM +Lexie/M +Lexi/MS +Lexine/M +Lexington/M +Lexus/M +Lexy/M +Leyden/M +Leyla/M +Lezley/M +Lezlie/M +lg +Lhasa/SM +Lhotse/M +liability/SAM +liable/AP +liaise/GSD +liaison/SM +Lia/M +Liam/M +Liana/M +Liane/M +Lian/M +Lianna/M +Lianne/M +liar/MS +libation/SM +libbed +Libbey/M +Libbie/M +Libbi/M +libbing +Libby/M +libeler/M +libel/GMRDSZ +libelous/Y +Liberace/M +liberalism/MS +liberality/MS +liberalization/SM +liberalized/U +liberalize/GZSRD +liberalizer/M +liberalness/MS +liberal/YSP +liberate/NGDSCX +liberationists +liberation/MC +liberator/SCM +Liberia/M +Liberian/S +libertarianism/M +libertarian/MS +libertine/MS +liberty/MS +libidinal +libidinousness/M +libidinous/PY +libido/MS +Lib/M +lib/MS +librarian/MS +library/MS +Libra/SM +libretoes +libretos +librettist/MS +libretto/MS +Libreville/M +Librium/M +Libya/M +Libyan/S +lice/M +licensed/AU +licensee/SM +license/MGBRSD +licenser/M +licenses/A +licensing/A +licensor/M +licentiate/MS +licentiousness/MS +licentious/PY +Licha/M +lichee's +lichen/DMGS +Lichtenstein/M +Lichter/M +licit/Y +licked/U +lickerish +licker/M +lick/GRDSJ +licking/M +licorice/SM +Lida/M +lidded +lidding +Lidia/M +lidless +lid/MS +lido/MS +Lieberman/M +Liebfraumilch/M +Liechtenstein/RMZ +lied/MR +lie/DRS +Lief/M +liefs/A +lief/TSR +Liege/M +liege/SR +Lie/M +lien/SM +lier/IMA +lies/A +Liesa/M +lieu/SM +lieut +lieutenancy/MS +lieutenant/SM +Lieut/M +lifeblood/SM +lifeboat/SM +lifebuoy/S +lifeforms +lifeguard/MDSG +lifelessness/SM +lifeless/PY +lifelikeness/M +lifelike/P +lifeline/SM +lifelong +life/MZR +lifer/M +lifesaver/SM +lifesaving/S +lifespan/S +lifestyle/S +lifetaking +lifetime/MS +lifework/MS +LIFO +lifter/M +lift/GZMRDS +liftoff/MS +ligament/MS +ligand/MS +ligate/XSDNG +ligation/M +ligature/DSGM +light/ADSCG +lighted/U +lightener/M +lightening/M +lighten/ZGDRS +lighter/CM +lightered +lightering +lighters +lightest +lightface/SDM +lightheaded +lightheartedness/MS +lighthearted/PY +lighthouse/MS +lighting/MS +lightly +lightness/MS +lightning/SMD +lightproof +light's +lightship/SM +lightweight/S +ligneous +lignite/MS +lignum +likability/MS +likableness/MS +likable/P +likeability's +liked/E +likelihood/MSU +likely/UPRT +likeness/MSU +liken/GSD +liker/E +liker's +likes/E +likest +like/USPBY +likewise +liking/SM +lilac/MS +Lilah/M +Lila/SM +Lilia/MS +Liliana/M +Liliane/M +Lilian/M +Lilith/M +Liliuokalani/M +Lilla/M +Lille/M +Lillian/M +Lillie/M +Lilli/MS +lilliputian/S +Lilliputian/SM +Lilliput/M +Lilllie/M +Lilly/M +Lil/MY +Lilongwe/M +lilting/YP +lilt/MDSG +Lilyan/M +Lily/M +lily/MSD +Lima/M +Limbaugh/M +limbered/U +limberness/SM +limber/RDYTGP +limbers/U +limbic +limbless +Limbo +limbo/GDMS +limb/SGZRDM +Limburger/SM +limeade/SM +lime/DSMG +limekiln/M +limelight/DMGS +limerick/SM +limestone/SM +limitability +limitably +limitation/MCS +limit/CSZGRD +limitedly/U +limitedness/M +limited/PSY +limiter/M +limiting/S +limitlessness/SM +limitless/PY +limit's +limn/GSD +Limoges/M +limo/S +limousine/SM +limper/M +limpet/SM +limpidity/MS +limpidness/SM +limpid/YP +limpness/MS +Limpopo/M +limp/SGTPYRD +Li/MY +limy/TR +linage/MS +Lina/M +linchpin/MS +Linc/M +Lincoln/SM +Linda/M +Lindbergh/M +Lindberg/M +linden/MS +Lindholm/M +Lindie/M +Lindi/M +Lind/M +Lindon/M +Lindquist/M +Lindsay/M +Lindsey/M +Lindstrom/M +Lindsy/M +Lindy/M +line/AGDS +lineage/SM +lineal/Y +Linea/M +lineament/MS +linearity/MS +linearize/SDGNB +linear/Y +linebacker/SM +lined/U +linefeed +Linell/M +lineman/M +linemen +linen/SM +liner/SM +line's +linesman/M +linesmen +Linet/M +Linette/M +lineup/S +lingerer/M +lingerie/SM +lingering/Y +linger/ZGJRD +lingoes +lingo/M +lingual/SY +lingua/M +linguine +linguini's +linguistically +linguistic/S +linguistics/M +linguist/SM +ling/ZR +liniment/MS +lining/SM +linkable +linkage/SM +linked/A +linker/S +linking/S +Link/M +link's +linkup/S +link/USGD +Lin/M +Linnaeus/M +Linnea/M +Linnell/M +Linnet/M +linnet/SM +Linnie/M +Linn/M +Linoel/M +linoleum/SM +lino/M +Linotype/M +linseed/SM +lintel/SM +linter/M +Linton/M +lint/SMR +linty/RST +Linus/M +Linux/M +Linwood/M +Linzy/M +Lionello/M +Lionel/M +lioness/SM +lionhearted +lionization/SM +lionizer/M +lionize/ZRSDG +Lion/M +lion/MS +lipase/M +lipid/MS +lip/MS +liposuction/S +lipped +lipper +Lippi/M +lipping +Lippmann/M +lippy/TR +lipread/GSRJ +Lipschitz/M +Lipscomb/M +lipstick/MDSG +Lipton/M +liq +liquefaction/SM +liquefier/M +liquefy/DRSGZ +liqueur/DMSG +liquidate/GNXSD +liquidation/M +liquidator/SM +liquidity/SM +liquidizer/M +liquidize/ZGSRD +liquidness/M +liquid/SPMY +liquorice/SM +liquorish +liquor/SDMG +lira/M +Lira/M +lire +Lisabeth/M +Lisa/M +Lisbeth/M +Lisbon/M +Lise/M +Lisetta/M +Lisette/M +Lisha/M +Lishe/M +Lisle/M +lisle/SM +lisper/M +lisp/MRDGZS +Lissajous/M +Lissa/M +Lissie/M +Lissi/M +Liss/M +lissomeness/M +lissome/P +lissomness/M +Lissy/M +listed/U +listener/M +listen/ZGRD +Listerine/M +lister/M +Lister/M +listing/M +list/JMRDNGZXS +listlessness/SM +listless/PY +Liston/M +Liszt/M +Lita/M +litany/MS +litchi/SM +literacy/MS +literalism/M +literalistic +literalness/MS +literal/PYS +literariness/SM +literary/P +literate/YNSP +literati +literation/M +literature/SM +liter/M +lite/S +litheness/SM +lithe/PRTY +lithesome +lithium/SM +lithograph/DRMGZ +lithographer/M +lithographic +lithographically +lithographs +lithography/MS +lithology/M +lithosphere/MS +lithospheric +Lithuania/M +Lithuanian/S +litigant/MS +litigate/NGXDS +litigation/M +litigator/SM +litigiousness/MS +litigious/PY +litmus/SM +litotes/M +lit/RZS +littrateur/S +litterbug/SM +litter/SZGRDM +Little/M +littleneck/M +littleness/SM +little/RSPT +Littleton/M +Litton/M +littoral/S +liturgical/Y +liturgic/S +liturgics/M +liturgist/MS +liturgy/SM +Liuka/M +livability/MS +livableness/M +livable/U +livably +Liva/M +lived/A +livelihood/SM +liveliness/SM +livelong/S +lively/RTP +liveness/M +liven/SDG +liver/CSGD +liveried +liverish +Livermore/M +Liverpool/M +Liverpudlian/MS +liver's +liverwort/SM +liverwurst/SM +livery/CMS +liveryman/MC +liverymen/C +lives/A +lives's +livestock/SM +live/YHZTGJDSRPB +Livia/M +lividness/M +livid/YP +livingness/M +Livingstone/M +Livingston/M +living/YP +Liv/M +Livonia/M +Livvie/M +Livvy/M +Livvyy/M +Livy/M +Lizabeth/M +Liza/M +lizard/MS +Lizbeth/M +Lizette/M +Liz/M +Lizzie/M +Lizzy/M +l/JGVXT +Ljubljana/M +LL +llama/SM +llano/SM +LLB +ll/C +LLD +Llewellyn/M +Lloyd/M +Llywellyn/M +LNG +lo +loadable +loaded/A +loader/MU +loading/MS +load's/A +loads/A +loadstar's +loadstone's +load/SURDZG +loafer/M +Loafer/S +loaf/SRDMGZ +loam/SMDG +loamy/RT +loaner/M +loaning/M +loan/SGZRDMB +loansharking/S +loanword/S +loathe +loather/M +loathing/M +loath/JPSRDYZG +loathness/M +loathsomeness/MS +loathsome/PY +loaves/M +Lobachevsky/M +lobar +lobbed +lobber/MS +lobbing +lobby/GSDM +lobbyist/MS +lobe/SM +lob/MDSG +lobotomist +lobotomize/GDS +lobotomy/MS +lobster/MDGS +lobularity +lobular/Y +lobule/SM +locale/MS +localisms +locality/MS +localization/MS +localized/U +localizer/M +localizes/U +localize/ZGDRS +local/SGDY +locatable +locate/AXESDGN +locater/M +locational/Y +location/EMA +locative/S +locator's +Lochinvar/M +loch/M +lochs +loci/M +lockable +Lockean/M +locked/A +Locke/M +locker/SM +locket/SM +Lockhart/M +Lockheed/M +Lockian/M +locking/S +lockjaw/SM +Lock/M +locknut/M +lockout/MS +lock's +locksmithing/M +locksmith/MG +locksmiths +lockstep/S +lock/UGSD +lockup/MS +Lockwood/M +locomotion/SM +locomotive/YMS +locomotor +locomotory +loco/SDMG +locoweed/MS +locus/M +locust/SM +locution/MS +lode/SM +lodestar/MS +lodestone/MS +lodged/E +lodge/GMZSRDJ +Lodge/M +lodgepole +lodger/M +lodges/E +lodging/M +lodgment/M +Lodovico/M +Lodowick/M +Lodz +Loeb/M +Loella/M +Loewe/M +Loewi/M +lofter/M +loftily +loftiness/SM +loft/SGMRD +lofty/PTR +loganberry/SM +Logan/M +logarithmic +logarithmically +logarithm/MS +logbook/MS +loge/SMNX +logged/U +loggerhead/SM +logger/SM +loggia/SM +logging/MS +logicality/MS +logicalness/M +logical/SPY +logician/SM +logic/SM +login/S +logion/M +logistical/Y +logistic/MS +logjam/SM +LOGO +logo/SM +logotype/MS +logout +logrolling/SM +log's/K +log/SM +logy/RT +Lohengrin/M +loincloth/M +loincloths +loin/SM +Loire/M +Loise/M +Lois/M +loiterer/M +loiter/RDJSZG +Loki/M +Lola/M +Loleta/M +Lolita/M +loller/M +lollipop/MS +loll/RDGS +Lolly/M +lolly/SM +Lombardi/M +Lombard/M +Lombardy/M +Lomb/M +Lome +Lona/M +Londonderry/M +Londoner/M +London/RMZ +Lonee/M +loneliness/SM +lonely/TRP +loneness/M +lone/PYZR +loner/M +lonesomeness/MS +lonesome/PSY +longboat/MS +longbow/SM +longed/K +longeing +longer/K +longevity/MS +Longfellow/M +longhair/SM +longhand/SM +longhorn/SM +longing/MY +longish +longitude/MS +longitudinal/Y +long/JGTYRDPS +Long/M +longness/M +longshoreman/M +longshoremen +longsighted +longs/K +longstanding +Longstreet/M +longsword +longterm +longtime +Longueuil/M +longueur/SM +longways +longword/SM +Loni/M +Lon/M +Lonna/M +Lonnard/M +Lonnie/M +Lonni/M +Lonny/M +loofah/M +loofahs +lookahead +lookalike/S +looker/M +look/GZRDS +lookout/MS +lookup/SM +looming/M +Loomis/M +loom/MDGS +loon/MS +loony/SRT +looper/M +loophole/MGSD +loop/MRDGS +loopy/TR +loosed/U +looseleaf +loosener/M +looseness/MS +loosen/UDGS +loose/SRDPGTY +looses/U +loosing/M +looter/M +loot/MRDGZS +loper/M +lope/S +Lopez/M +lopped +lopper/MS +lopping +lop/SDRG +lopsidedness/SM +lopsided/YP +loquaciousness/MS +loquacious/YP +loquacity/SM +Loraine/M +Lorain/M +Loralee/M +Loralie/M +Loralyn/M +Lora/M +Lorant/M +lording/M +lordliness/SM +lordly/PTR +Lord/MS +lord/MYDGS +lordship/SM +Lordship/SM +Loree/M +Loreen/M +Lorelei/M +Lorelle/M +lore/MS +Lorena/M +Lorene/M +Loren/SM +Lorentzian/M +Lorentz/M +Lorenza/M +Lorenz/M +Lorenzo/M +Loretta/M +Lorette/M +lorgnette/SM +Loria/M +Lorianna/M +Lorianne/M +Lorie/M +Lorilee/M +Lorilyn/M +Lori/M +Lorinda/M +Lorine/M +Lorin/M +loris/SM +Lorita/M +lorn +Lorna/M +Lorne/M +Lorraine/M +Lorrayne/M +Lorre/M +Lorrie/M +Lorri/M +Lorrin/M +lorryload/S +Lorry/M +lorry/SM +Lory/M +Los +loser/M +lose/ZGJBSR +lossage +lossless +loss/SM +lossy/RT +lost/P +Lothaire/M +Lothario/MS +lotion/MS +Lot/M +lot/MS +Lotta/M +lotted +Lotte/M +lotter +lottery/MS +Lottie/M +Lotti/M +lotting +Lott/M +lotto/MS +Lotty/M +lotus/SM +louden/DG +loudhailer/S +loudly/RT +loudmouth/DM +loudmouths +loudness/MS +loudspeaker/SM +loudspeaking +loud/YRNPT +Louella/M +Louie/M +Louisa/M +Louise/M +Louisette/M +Louisiana/M +Louisianan/S +Louisianian/S +Louis/M +Louisville/M +Lou/M +lounger/M +lounge/SRDZG +Lourdes/M +lour/GSD +louse/CSDG +louse's +lousewort/M +lousily +lousiness/MS +lousy/PRT +loutishness/M +loutish/YP +Loutitia/M +lout/SGMD +louver/DMS +L'Ouverture +Louvre/M +lovableness/MS +lovable/U +lovably +lovebird/SM +lovechild +Lovecraft/M +love/DSRMYZGJB +loved/U +Lovejoy/M +Lovelace/M +Loveland/M +lovelessness/M +loveless/YP +lovelies +lovelinesses +loveliness/UM +Lovell/M +lovelornness/M +lovelorn/P +lovely/URPT +Love/M +lovemaking/SM +lover/YMG +lovesick +lovestruck +lovingly +lovingness/M +loving/U +lowborn +lowboy/SM +lowbrow/MS +lowdown/S +Lowell/M +Lowe/M +lowercase/GSD +lower/DG +lowermost +Lowery/M +lowish +lowland/RMZS +Lowlands/M +lowlife/SM +lowlight/MS +lowliness/MS +lowly/PTR +lowness/MS +low/PDRYSZTG +Lowrance/M +lox/MDSG +loyaler +loyalest +loyal/EY +loyalism/SM +loyalist/SM +loyalty/EMS +Loyang/M +Loydie/M +Loyd/M +Loy/M +Loyola/M +lozenge/SDM +LP +LPG +LPN/S +Lr +ls +l's +L's +LSD +ltd +Ltd/M +Lt/M +Luanda/M +Luann/M +luau/MS +lubber/YMS +Lubbock/M +lube/DSMG +lubricant/SM +lubricate/VNGSDX +lubrication/M +lubricator/MS +lubricious/Y +lubricity/SM +Lubumbashi/M +Lucais/M +Luca/MS +Luce/M +lucent/Y +Lucerne/M +Lucho/M +Lucia/MS +Luciana/M +Lucian/M +Luciano/M +lucidity/MS +lucidness/MS +lucid/YP +Lucie/M +Lucien/M +Lucienne/M +Lucifer/M +Lucila/M +Lucile/M +Lucilia/M +Lucille/M +Luci/MN +Lucina/M +Lucinda/M +Lucine/M +Lucio/M +Lucita/M +Lucite/MS +Lucius/M +luck/GSDM +luckier/U +luckily/U +luckiness/UMS +luckless +Lucknow/M +Lucky/M +lucky/RSPT +lucrativeness/SM +lucrative/YP +lucre/MS +Lucretia/M +Lucretius/M +lucubrate/GNSDX +lucubration/M +Lucy/M +Luddite/SM +Ludhiana/M +ludicrousness/SM +ludicrous/PY +Ludlow/M +Ludmilla/M +ludo/M +Ludovico/M +Ludovika/M +Ludvig/M +Ludwig/M +Luella/M +Luelle/M +luff/GSDM +Lufthansa/M +Luftwaffe/M +luge/MC +Luger/M +luggage/SM +lugged +lugger/SM +lugging +Lugosi/M +lug/RS +lugsail/SM +lugubriousness/MS +lugubrious/YP +Luigi/M +Luisa/M +Luise/M +Luis/M +Lukas/M +Luke/M +lukewarmness/SM +lukewarm/PY +Lula/M +Lulita/M +lullaby/GMSD +lull/SDG +lulu/M +Lulu/M +Lu/M +lumbago/SM +lumbar/S +lumberer/M +lumbering/M +lumberjack/MS +lumberman/M +lumbermen +lumber/RDMGZSJ +lumberyard/MS +lumen/M +Lumire/M +luminance/M +luminary/MS +luminescence/SM +luminescent +luminosity/MS +luminousness/M +luminous/YP +lummox/MS +lumper/M +lumpiness/MS +lumpishness/M +lumpish/YP +lump/SGMRDN +lumpy/TPR +lunacy/MS +Luna/M +lunar/S +lunary +lunate/YND +lunatic/S +lunation/M +luncheonette/SM +luncheon/SMDG +luncher/M +lunch/GMRSD +lunchpack +lunchroom/MS +lunchtime/MS +Lundberg/M +Lund/M +Lundquist/M +lune/M +lunge/MS +lunger/M +lungfish/SM +lungful +lung/SGRDM +lunkhead/SM +Lupe/M +lupine/SM +Lupus/M +lupus/SM +Lura/M +lurcher/M +lurch/RSDG +lure/DSRG +lurer/M +Lurette/M +lurex +Luria/M +luridness/SM +lurid/YP +lurker/M +lurk/GZSRD +Lurleen/M +Lurlene/M +Lurline/M +Lusaka/M +Lusa/M +lusciousness/MS +luscious/PY +lushness/MS +lush/YSRDGTP +Lusitania/M +luster/GDM +lustering/M +lusterless +lustfulness/M +lustful/PY +lustily +lustiness/MS +lust/MRDGZS +lustrousness/M +lustrous/PY +lusty/PRT +lutanist/MS +lute/DSMG +lutenist/MS +Lutero/M +lutetium/MS +Lutheranism/MS +Lutheran/SM +Luther/M +luting/M +Lutz +Luxembourgian +Luxembourg/RMZ +Luxemburg's +luxe/MS +luxuriance/MS +luxuriant/Y +luxuriate/GNSDX +luxuriation/M +luxuriousness/SM +luxurious/PY +luxury/MS +Luz/M +Luzon/M +L'vov +Lyallpur/M +lyceum/MS +lychee's +lycopodium/M +Lycra/S +Lycurgus/M +Lyda/M +Lydia/M +Lydian/S +Lydie/M +Lydon/M +lye/JSMG +Lyell/M +lying/Y +Lyle/M +Lyly/M +Lyman/M +Lyme/M +lymphatic/S +lymph/M +lymphocyte/SM +lymphoid +lymphoma/MS +lymphs +Ly/MY +Lynchburg/M +lyncher/M +lynching/M +Lynch/M +lynch/ZGRSDJ +Lynda/M +Lyndell/M +Lyndel/M +Lynde/M +Lyndon/M +Lyndsay/M +Lyndsey/M +Lyndsie/M +Lyndy/M +Lynea/M +Lynelle/M +Lynette/M +Lynett/M +Lyn/M +Lynna/M +Lynnea/M +Lynnelle/M +Lynnell/M +Lynne/M +Lynnet/M +Lynnette/M +Lynnett/M +Lynn/M +Lynsey/M +lynx/MS +Lyon/SM +Lyra/M +lyrebird/MS +lyre/SM +lyricalness/M +lyrical/YP +lyricism/SM +lyricist/SM +lyric/S +Lysenko/M +lysine/M +Lysistrata/M +Lysol/M +Lyssa/M +LyX/M +MA +Maalox/M +ma'am +Mabelle/M +Mabel/M +Mable/M +Mab/M +macabre/Y +macadamize/SDG +macadam/SM +Macao/M +macaque/SM +macaroni/SM +macaroon/MS +Macarthur/M +MacArthur/M +Macaulay/M +macaw/SM +Macbeth/M +Maccabees/M +Maccabeus/M +Macdonald/M +MacDonald/M +MacDraw/M +Macedonia/M +Macedonian/S +Macedon/M +mace/MS +Mace/MS +macerate/DSXNG +maceration/M +macer/M +Macgregor/M +MacGregor/M +machete/SM +Machiavellian/S +Machiavelli/M +machinate/SDXNG +machination/M +machinelike +machine/MGSDB +machinery/SM +machinist/MS +machismo/SM +Mach/M +macho/S +Machs +Macias/M +Macintosh/M +MacIntosh/M +macintosh's +Mackenzie/M +MacKenzie/M +mackerel/SM +Mackinac/M +Mackinaw +mackinaw/SM +mackintosh/SM +mack/M +Mack/M +MacLeish/M +Macmillan/M +MacMillan/M +Macon/SM +MacPaint/M +macram/S +macrobiotic/S +macrobiotics/M +macrocosm/MS +macrodynamic +macroeconomic/S +macroeconomics/M +macromolecular +macromolecule/SM +macron/MS +macrophage/SM +macroscopic +macroscopically +macrosimulation +macro/SM +macrosocioeconomic +Mac/SGMD +mac/SGMDR +Macy/M +Madagascan/SM +Madagascar/M +Madalena/M +Madalyn/M +Mada/M +madame/M +Madame/MS +madam/SM +madcap/S +Maddalena/M +madded +madden/GSD +maddening/Y +Madden/M +madder/MS +maddest +Maddie/M +Maddi/M +madding +Maddox/M +Maddy/M +made/AU +Madeira/SM +Madelaine/M +Madeleine/M +Madelena/M +Madelene/M +Madelina/M +Madeline/M +Madelin/M +Madella/M +Madelle/M +Madel/M +Madelon/M +Madelyn/M +mademoiselle/MS +Madge/M +madhouse/SM +Madhya/M +Madison/M +Madlen/M +Madlin/M +madman/M +madmen +madness/SM +Madonna/MS +mad/PSY +Madras +madras/SM +Madrid/M +madrigal/MSG +Madsen/M +Madurai/M +madwoman/M +madwomen +Mady/M +Maegan/M +Maelstrom/M +maelstrom/SM +Mae/M +maestro/MS +Maeterlinck/M +Mafia/MS +mafia/S +mafiosi +mafioso/M +Mafioso/S +MAG +magazine/DSMG +Magdaia/M +Magdalena/M +Magdalene/M +Magdalen/M +Magda/M +Magellanic +Magellan/M +magenta/MS +magged +Maggee/M +Maggie/M +Maggi/M +magging +maggot/MS +maggoty/RT +Maggy/M +magi +magical/Y +magician/MS +magicked +magicking +magic/SM +Magill/M +Magi/M +Maginot/M +magisterial/Y +magistracy/MS +magistrate/MS +Mag/M +magma/SM +magnanimity/SM +magnanimosity +magnanimous/PY +magnate/SM +magnesia/MS +magnesite/M +magnesium/SM +magnetically +magnetic/S +magnetics/M +magnetism/SM +magnetite/SM +magnetizable +magnetization/ASCM +magnetize/CGDS +magnetized/U +magnetodynamics +magnetohydrodynamical +magnetohydrodynamics/M +magnetometer/MS +magneto/MS +magnetosphere/M +magnetron/M +magnet/SM +magnification/M +magnificence/SM +magnificent/Y +magnified/U +magnify/DRSGNXZ +magniloquence/MS +magniloquent +Magnitogorsk/M +magnitude/SM +magnolia/SM +Magnum +magnum/SM +Magnuson/M +Magog/M +Magoo/M +magpie/SM +Magritte/M +Magruder/M +mag/S +Magsaysay/M +Maguire/SM +Magus/M +Magyar/MS +Mahabharata +Mahala/M +Mahalia/M +maharajah/M +maharajahs +maharanee's +maharani/MS +Maharashtra/M +maharishi/SM +mahatma/SM +Mahavira/M +Mahayana/M +Mahayanist +Mahdi/M +Mahfouz/M +Mahican/SM +mahjong's +Mahler/M +Mahmoud/M +Mahmud/M +mahogany/MS +Mahomet's +mahout/SM +Maia/M +Maible/M +maidenhair/MS +maidenhead/SM +maidenhood/SM +maidenly/P +maiden/YM +maidservant/MS +maid/SMNX +maier +Maier/M +Maiga/M +Maighdiln/M +Maigret/M +mailbag/MS +mailbox/MS +mail/BSJGZMRD +mailer/M +Mailer/M +Maillol/M +maillot/SM +mailman/M +mailmen +Maiman/M +maimedness/M +maimed/P +maimer/M +Maimonides/M +Mai/MR +maim/SGZRD +mainbrace/M +Maine/MZR +Mainer/M +mainframe/MS +mainlander/M +mainland/SRMZ +mainliner/M +mainline/RSDZG +mainly +mainmast/SM +main/SA +mainsail/SM +mains/M +mainspring/SM +mainstay/MS +mainstream/DRMSG +maintainability +maintainable/U +maintain/BRDZGS +maintained/U +maintainer/M +maintenance/SM +maintop/SM +maiolica's +Maire/M +Mair/M +Maisey/M +Maisie/M +maisonette/MS +Maison/M +Maitilde/M +maize/MS +Maj +Maje/M +majestic +majestically +majesty/MS +Majesty/MS +majolica/SM +Majorca/M +major/DMGS +majordomo/S +majorette/SM +majority/SM +Major/M +Majuro/M +makable +Makarios/M +makefile/S +makeover/S +Maker/M +maker/SM +makeshift/S +make/UGSA +makeup/MS +making/SM +Malabar/M +Malabo/M +Malacca/M +Malachi/M +malachite/SM +maladapt/DV +maladjust/DLV +maladjustment/MS +maladministration +maladroitness/MS +maladroit/YP +malady/MS +Malagasy/M +malaise/SM +Mala/M +Malamud/M +malamute/SM +Malanie/M +malaprop +malapropism/SM +Malaprop/M +malarial +malaria/MS +malarious +malarkey/SM +malathion/S +Malawian/S +Malawi/M +Malayalam/M +Malaya/M +Malayan/MS +Malaysia/M +Malaysian/S +Malay/SM +Malchy/M +Malcolm/M +malcontentedness/M +malcontented/PY +malcontent/SMD +Maldive/SM +Maldivian/S +Maldonado/M +maledict +malediction/MS +malefaction/MS +malefactor/MS +malefic +maleficence/MS +maleficent +Male/M +Malena/M +maleness/MS +male/PSM +malevolence/S +malevolencies +malevolent/Y +malfeasance/SM +malfeasant +malformation/MS +malformed +malfunction/SDG +Malia/M +Malian/S +Malibu/M +malice/MGSD +maliciousness/MS +malicious/YU +malignancy/SM +malignant/YS +malign/GSRDYZ +malignity/MS +Mali/M +Malina/M +Malinda/M +Malinde/M +malingerer/M +malinger/GZRDS +Malinowski/M +Malissa/M +Malissia/M +mallard/SM +Mallarm/M +malleability/SM +malleableness/M +malleable/P +mallet/MS +Mallissa/M +Mallorie/M +Mallory/M +mallow/MS +mall/SGMD +Mal/M +malnourished +malnutrition/SM +malocclusion/MS +malodorous +Malone/M +Malorie/M +Malory/M +malposed +malpractice/SM +Malraux/M +Malta/M +malted/S +Maltese +Malthusian/S +Malthus/M +malting/M +maltose/SM +maltreat/GDSL +maltreatment/S +malt/SGMD +malty/RT +Malva/M +Malvina/M +Malvin/M +Malynda/M +mama/SM +mamba/SM +mambo/GSDM +Mame/M +Mamet/M +ma/MH +Mamie/M +mammalian/SM +mammal/SM +mammary +mamma's +mammogram/S +mammography/S +Mammon's +mammon/SM +mammoth/M +mammoths +mammy/SM +Mamore/M +manacle/SDMG +manageability/S +manageableness +manageable/U +managed/U +management/SM +manageress/M +managerial/Y +manager/M +managership/M +manage/ZLGRSD +Managua/M +Manama/M +maana/M +mananas +Manasseh/M +manatee/SM +Manaus's +Manchester/M +Manchu/MS +Manchuria/M +Manchurian/S +Mancini/M +manciple/M +Mancunian/MS +mandala/SM +Mandalay/M +Manda/M +mandamus/GMSD +Mandarin +mandarin/MS +mandate/SDMG +mandatory/S +Mandela +Mandelbrot/M +Mandel/M +mandible/MS +mandibular +Mandie/M +Mandi/M +Mandingo/M +mandolin/MS +mandrake/MS +mandrel/SM +mandrill/SM +Mandy/M +mange/GSD +mane/MDS +Manet/M +maneuverability/MS +maneuverer/M +maneuver/MRDSGB +Manfred/M +manful/Y +manganese/MS +mange/GMSRDZ +manger/M +manginess/S +mangler/M +mangle/RSDG +mangoes +mango/M +mangrove/MS +mangy/PRT +manhandle/GSD +Manhattan/SM +manhole/MS +manhood/MS +manhunt/SM +maniacal/Y +maniac/SM +mania/SM +manically +Manichean/M +manic/S +manicure/MGSD +manicurist/SM +manifestation/SM +manifesto/GSDM +manifest/YDPGS +manifolder/M +manifold/GPYRDMS +manifoldness/M +manikin/MS +Manila/MS +manila/S +manilla's +Mani/M +manioc/SM +manipulability +manipulable +manipulate/SDXBVGN +manipulative/PM +manipulator/MS +manipulatory +Manitoba/M +Manitoulin/M +Manitowoc/M +mankind/M +Mankowski/M +Manley/M +manlike +manliness/SM +manliness's/U +manly/URPT +manna/MS +manned/U +mannequin/MS +mannered/U +mannerism/SM +mannerist/M +mannerliness/MU +mannerly/UP +manner/SDYM +Mann/GM +Mannheim/M +Mannie/M +mannikin's +Manning/M +manning/U +mannishness/SM +mannish/YP +Manny/M +Manolo/M +Mano/M +manometer/SM +Manon/M +manorial +manor/MS +manpower/SM +manqu/M +man's +mansard/SM +manservant/M +manse/XNM +Mansfield/M +mansion/M +manslaughter/SM +Man/SM +Manson/M +mans/S +manta/MS +Mantegna/M +mantelpiece/MS +mantel/SM +mantes +mantilla/MS +mantissa/SM +mantis/SM +mantle/ESDG +Mantle/M +mantle's +mantling/M +mantra/MS +mantrap/SM +manual/SMY +Manuela/M +Manuel/M +manufacture/JZGDSR +manufacturer/M +manumission/MS +manumit/S +manumitted +manumitting +manure/RSDMZG +manuscript/MS +man/USY +Manville/M +Manx +many +Manya/M +Maoism/MS +Maoist/S +Mao/M +Maori/SM +Maplecrest/M +maple/MS +mapmaker/S +mappable +mapped/UA +mapper/S +mapping/MS +Mapplethorpe/M +maps/AU +map/SM +Maputo/M +Marabel/M +marabou/MS +marabout's +Maracaibo/M +maraca/MS +Mara/M +maraschino/SM +Marathi +marathoner/M +Marathon/M +marathon/MRSZ +Marat/M +marauder/M +maraud/ZGRDS +marbleize/GSD +marble/JRSDMG +marbler/M +marbling/M +Marceau/M +Marcela/M +Marcelia/M +Marcelino/M +Marcella/M +Marcelle/M +Marcellina/M +Marcelline/M +Marcello/M +Marcellus/M +Marcel/M +Marcelo/M +Marchall/M +Marchelle/M +marcher/M +marchioness/SM +March/MS +march/RSDZG +Marcia/M +Marciano/M +Marcie/M +Marcile/M +Marcille/M +Marci/M +Marc/M +Marconi/M +Marco/SM +Marcotte/M +Marcus/M +Marcy/M +Mardi/SM +Marduk/M +Mareah/M +mare/MS +Marena/M +Maren/M +Maressa/M +Margalit/M +Margalo/M +Marga/M +Margareta/M +Margarete/M +Margaretha/M +Margarethe/M +Margaret/M +Margaretta/M +Margarette/M +margarine/MS +Margarita/M +margarita/SM +Margarito/M +Margaux/M +Margeaux/M +Marge/M +Margery/M +Marget/M +Margette/M +Margie/M +Margi/M +marginalia +marginality +marginalization +marginalize/SDG +marginal/YS +margin/GSDM +Margit/M +Margo/M +Margot/M +Margrethe/M +Margret/M +Marguerite/M +Margy/M +mariachi/SM +maria/M +Maria/M +Mariam/M +Mariana/SM +Marian/MS +Marianna/M +Marianne/M +Mariann/M +Mariano/M +Maribelle/M +Maribel/M +Maribeth/M +Maricela/M +Marice/M +Maridel/M +Marieann/M +Mariejeanne/M +Mariele/M +Marielle/M +Mariellen/M +Mariel/M +Marie/M +Marietta/M +Mariette/M +Marigold/M +marigold/MS +Marijn/M +Marijo/M +marijuana/SM +Marika/M +Marilee/M +Marilin/M +Marillin/M +Marilyn/M +marimba/SM +Mari/MS +marinade/MGDS +Marina/M +marina/MS +marinara/SM +marinate/NGXDS +marination/M +mariner/M +Marine/S +marine/ZRS +Marin/M +Marinna/M +Marino/M +Mario/M +marionette/MS +Marion/M +Mariquilla/M +Marisa/M +Mariska/M +Marisol/M +Marissa/M +Maritain/M +marital/Y +Marita/M +maritime/R +Maritsa/M +Maritza/M +Mariupol/M +Marius/M +Mariya/M +Marja/M +Marje/M +Marjie/M +Marji/M +Marj/M +marjoram/SM +Marjorie/M +Marjory/M +Marjy/M +Markab/M +markdown/SM +marked/AU +markedly +marker/M +marketability/SM +marketable/U +Marketa/M +marketeer/S +marketer/M +market/GSMRDJBZ +marketing/M +marketplace/MS +mark/GZRDMBSJ +Markham/M +marking/M +Markism/M +markkaa +markka/M +Mark/MS +Markos +Markov +Markovian +Markovitz/M +marks/A +marksman/M +marksmanship/S +marksmen +markup/SM +Markus/M +Marla/M +Marlane/M +Marlboro/M +Marlborough/M +Marleah/M +Marlee/M +Marleen/M +Marlena/M +Marlene/M +Marley/M +Marlie/M +Marline/M +marlinespike/SM +Marlin/M +marlin/SM +marl/MDSG +Marlo/M +Marlon/M +Marlowe/M +Marlow/M +Marlyn/M +Marmaduke/M +marmalade/MS +Marmara/M +marmoreal +marmoset/MS +marmot/SM +Marna/M +Marne/M +Marney/M +Marnia/M +Marnie/M +Marni/M +maroon/GRDS +marquee/MS +Marquesas/M +marque/SM +marquess/MS +marquetry/SM +Marquette/M +Marquez/M +marquise/M +marquisette/MS +Marquis/M +marquis/SM +Marquita/M +Marrakesh/M +marred/U +marriageability/SM +marriageable +marriage/ASM +married/US +Marrilee/M +marring +Marriott/M +Marris/M +Marrissa/M +marrowbone/MS +marrow/GDMS +marry/SDGA +mar/S +Marseillaise/SM +Marseilles +Marseille's +marshal/GMDRSZ +Marshalled/M +marshaller +Marshall/GDM +Marshalling/M +marshallings +Marshal/M +Marsha/M +marshiness/M +marshland/MS +Marsh/M +marshmallow/SM +marsh/MS +marshy/PRT +Marsiella/M +Mar/SMN +marsupial/MS +Martainn/M +Marta/M +Martelle/M +Martel/M +marten/M +Marten/M +Martguerita/M +Martha/M +Marthe/M +Marthena/M +Martial +martial/Y +Martian/S +Martica/M +Martie/M +Marti/M +Martina/M +martinet/SM +Martinez/M +martingale/MS +martini/MS +Martinique/M +Martin/M +Martino/M +martin/SM +Martinson/M +Martita/M +mart/MDNGXS +Mart/MN +Marty/M +Martyn/M +Martynne/M +martyrdom/SM +martyr/GDMS +Marva/M +marvel/DGS +Marvell/M +marvelous/PY +Marve/M +Marven/M +Marvin/M +Marv/NM +Marwin/M +Marxian/S +Marxism/SM +Marxist/SM +Marx/M +Marya/M +Maryanna/M +Maryanne/M +Maryann/M +Marybelle/M +Marybeth/M +Maryellen/M +Maryjane/M +Maryjo/M +Maryland/MZR +Marylee/M +Marylinda/M +Marylin/M +Maryl/M +Marylou/M +Marylynne/M +Mary/M +Maryrose/M +Marys +Marysa/M +marzipan/SM +Masada/M +Masai/M +Masaryk/M +masc +Mascagni/M +mascara/SGMD +mascot/SM +masculineness/M +masculine/PYS +masculinity/SM +Masefield/M +maser/M +Maseru/M +MASH +Masha/M +Mashhad/M +mash/JGZMSRD +m/ASK +masked/U +masker/M +mask/GZSRDMJ +masks/U +masochism/MS +masochistic +masochistically +masochist/MS +masonic +Masonic +Masonite/M +masonry/MS +mason/SDMG +Mason/SM +masquerader/M +masquerade/RSDGMZ +masquer/M +masque/RSMZ +Massachusetts/M +massacre/DRSMG +massager/M +massage/SRDMG +Massasoit/M +Massenet/M +masseur/MS +masseuse/SM +Massey/M +massif/SM +Massimiliano/M +Massimo/M +massing/R +massiveness/SM +massive/YP +massless +mas/SRZ +Mass/S +mass/VGSD +mastectomy/MS +masterclass +mastered/A +masterfulness/M +masterful/YP +master/JGDYM +masterliness/M +masterly/P +mastermind/GDS +masterpiece/MS +mastership/M +Master/SM +masterstroke/MS +masterwork/S +mastery/MS +mast/GZSMRD +masthead/SDMG +masticate/SDXGN +mastication/M +mastic/SM +mastiff/MS +mastodon/MS +mastoid/S +masturbate/SDNGX +masturbation/M +masturbatory +matador/SM +Mata/M +matchable/U +match/BMRSDZGJ +matchbook/SM +matchbox/SM +matched/UA +matcher/M +matches/A +matchless/Y +matchlock/MS +matchmake/GZJR +matchmaker/M +matchmaking/M +matchplay +match's/A +matchstick/MS +matchwood/SM +mated/U +mate/IMS +Matelda/M +Mateo/M +materialism/SM +materialistic +materialistically +materialist/SM +materiality/M +materialization/SM +materialize/CDS +materialized/A +materializer/SM +materializes/A +materializing +materialness/M +material/SPYM +matriel/MS +mater/M +maternal/Y +maternity/MS +mates/U +mathematical/Y +Mathematica/M +mathematician/SM +mathematic/S +mathematics/M +Mathematik/M +Mather/M +Mathe/RM +Mathew/MS +Mathewson/M +Mathian/M +Mathias +Mathieu/M +Mathilda/M +Mathilde/M +Mathis +math/M +maths +Matias/M +Matilda/M +Matilde/M +matine/S +mating/M +matins/M +Matisse/SM +matriarchal +matriarch/M +matriarchs +matriarchy/MS +matrices +matricidal +matricide/MS +matriculate/XSDGN +matriculation/M +matrimonial/Y +matrimony/SM +matrix/M +matron/YMS +mat/SJGMDR +Matsumoto/M +matte/JGMZSRD +Mattel/M +Matteo/M +matter/GDM +Matterhorn/M +Matthaeus/M +Mattheus/M +Matthew/MS +Matthias +Matthieu/M +Matthiew/M +Matthus/M +Mattias/M +Mattie/M +Matti/M +matting/M +mattins's +Matt/M +mattock/MS +mattress/MS +matt's +Matty/M +maturate/DSNGVX +maturational +maturation/M +matureness/M +maturer/M +mature/RSDTPYG +maturity/MS +matzo/SHM +matzot +Maude/M +Maudie/M +maudlin/Y +Maud/M +Maugham/M +Maui/M +mauler/M +maul/RDGZS +maunder/GDS +Maupassant/M +Maura/M +Maureene/M +Maureen/M +Maure/M +Maurene/M +Mauriac/M +Maurice/M +Mauricio/M +Maurie/M +Maurine/M +Maurise/M +Maurita/M +Mauritania/M +Mauritanian/S +Mauritian/S +Mauritius/M +Maurits/M +Maurizia/M +Maurizio/M +Maurois/M +Mauro/M +Maury/M +Mauser/M +mausoleum/SM +mauve/SM +maven/S +maverick/SMDG +mavin's +Mavis/M +Mavra/M +mawkishness/SM +mawkish/PY +Mawr/M +maw/SGMD +max/GDS +Maxie/M +maxillae +maxilla/M +maxillary/S +Maxi/M +maximality +maximal/SY +maxima's +Maximilian/M +Maximilianus/M +Maximilien/M +maximization/SM +maximizer/M +maximize/RSDZG +Maxim/M +Maximo/M +maxim/SM +maximum/MYS +Maxine/M +maxi/S +Max/M +Maxtor/M +Maxwellian +maxwell/M +Maxwell/M +Maxy/M +Maya/MS +Mayan/S +Maybelle/M +maybe/S +mayday/S +may/EGS +Maye/M +mayer +Mayer/M +mayest +Mayfair/M +Mayflower/M +mayflower/SM +mayfly/MS +mayhap +mayhem/MS +Maynard/M +Mayne/M +Maynord/M +mayn't +Mayo/M +mayonnaise/MS +mayoral +mayoralty/MS +mayoress/MS +Mayor/M +mayor/MS +mayorship/M +mayo/S +maypole/MS +Maypole/SM +Mayra/M +May/SMR +mayst +Mazama/M +Mazarin/M +Mazatlan/M +Mazda/M +mazedness/SM +mazed/YP +maze/MGDSR +mazurka/SM +Mazzini/M +Mb +MB +MBA +Mbabane/M +Mbini/M +MC +McAdam/MS +McAllister/M +McBride/M +McCabe/M +McCain/M +McCall/M +McCarthyism/M +McCarthy/M +McCartney/M +McCarty/M +McCauley/M +McClain/M +McClellan/M +McClure/M +McCluskey/M +McConnell/M +McCormick/M +McCoy/SM +McCracken/M +McCray/M +McCullough/M +McDaniel/M +McDermott/M +McDonald/M +McDonnell/M +McDougall/M +McDowell/M +McElhaney/M +McEnroe/M +McFadden/M +McFarland/M +McGee/M +McGill/M +McGovern/M +McGowan/M +McGrath/M +McGraw/M +McGregor/M +McGuffey/M +McGuire/M +MCI/M +McIntosh/M +McIntyre/M +McKay/M +McKee/M +McKenzie/M +McKesson/M +McKinley/M +McKinney/M +McKnight/M +McLanahan/M +McLaughlin/M +McLean/M +McLeod/M +McLuhan/M +McMahon/M +McMartin/M +McMillan/M +McNamara/M +McNaughton/M +McNeil/M +McPherson/M +MD +Md/M +mdse +MDT +ME +Meade/M +Mead/M +meadowland +meadowlark/SM +meadow/MS +Meadows +meadowsweet/M +mead/SM +Meagan/M +meagerness/SM +meager/PY +Meaghan/M +meagres +mealiness/MS +meal/MDGS +mealtime/MS +mealybug/S +mealymouthed +mealy/PRST +meander/JDSG +meaneing +meanie/MS +meaningfulness/SM +meaningful/YP +meaninglessness/SM +meaningless/PY +meaning/M +meanness/S +means/M +meantime/SM +meant/U +meanwhile/S +Meany/M +mean/YRGJTPS +meany's +Meara/M +measle/SD +measles/M +measly/TR +measurable/U +measurably +measure/BLMGRSD +measured/Y +measureless +measurement/SM +measurer/M +measures/A +measuring/A +meas/Y +meataxe +meatball/MS +meatiness/MS +meatless +meatloaf +meatloaves +meat/MS +meatpacking/S +meaty/RPT +Mecca/MS +mecca/S +mechanical/YS +mechanic/MS +mechanism/SM +mechanistic +mechanistically +mechanist/M +mechanization/SM +mechanized/U +mechanizer/M +mechanize/RSDZGB +mechanizes/U +mechanochemically +Mechelle/M +med +medalist/MS +medallion/MS +medal/SGMD +Medan/M +meddle/GRSDZ +meddlesome +Medea/M +Medellin +Medfield/M +mediaeval's +medial/AY +medials +median/YMS +media/SM +mediateness/M +mediate/PSDYVNGX +mediation/ASM +mediator/SM +Medicaid/SM +medical/YS +medicament/MS +Medicare/MS +medicate/DSXNGV +medication/M +Medici/MS +medicinal/SY +medicine/DSMG +medico/SM +medic/SM +medievalist/MS +medieval/YMS +Medina/M +mediocre +mediocrity/MS +meditate/NGVXDS +meditation/M +meditativeness/M +meditative/PY +Mediterranean/MS +mediumistic +medium/SM +medley/SM +medulla/SM +Medusa/M +meed/MS +meekness/MS +meek/TPYR +meerschaum/MS +meeter/M +meetinghouse/S +meeting/M +meet/JGSYR +me/G +mega +megabit/MS +megabuck/S +megabyte/S +megacycle/MS +megadeath/M +megadeaths +megahertz/M +megalithic +megalith/M +megaliths +megalomaniac/SM +megalomania/SM +megalopolis/SM +Megan/M +megaphone/SDGM +megaton/MS +megavolt/M +megawatt/SM +megaword/S +Megen/M +Meggie/M +Meggi/M +Meggy/M +Meghan/M +Meghann/M +Meg/MN +megohm/MS +Mehetabel/M +Meier/M +Meighen/M +Meiji/M +Mei/MR +meioses +meiosis/M +meiotic +Meir/M +Meister/M +Meistersinger/M +Mejia/M +Mekong/M +Mela/M +Melamie/M +melamine/SM +melancholia/SM +melancholic/S +melancholy/MS +Melanesia/M +Melanesian/S +melange/S +Melania/M +Melanie/M +melanin/MS +melanoma/SM +Melantha/M +Melany/M +Melba/M +Melbourne/M +Melcher/M +Melchior/M +meld/SGD +mle/MS +Melendez/M +Melesa/M +Melessa/M +Melicent/M +Melina/M +Melinda/M +Melinde/M +meliorate/XSDVNG +melioration/M +Melisa/M +Melisande/M +Melisandra/M +Melisenda/M +Melisent/M +Melissa/M +Melisse/M +Melita/M +Melitta/M +Mella/M +Mellicent/M +Mellie/M +mellifluousness/SM +mellifluous/YP +Melli/M +Mellisa/M +Mellisent/M +Melloney/M +Mellon/M +mellowness/MS +mellow/TGRDYPS +Melly/M +Mel/MY +Melodee/M +melodically +melodic/S +Melodie/M +melodiousness/S +melodious/YP +melodrama/SM +melodramatically +melodramatic/S +Melody/M +melody/MS +Melonie/M +melon/MS +Melony/M +Melosa/M +Melpomene/M +meltdown/S +melter/M +melting/Y +Melton/M +melt/SAGD +Melva/M +Melville/M +Melvin/M +Melvyn/M +Me/M +member/DMS +membered/AE +members/EA +membership/SM +membrane/MSD +membranous +memento/SM +Memling/M +memoir/MS +memorabilia +memorability/SM +memorableness/M +memorable/P +memorably +memorandum/SM +memorialize/DSG +memorialized/U +memorial/SY +memoriam +memorization/MS +memorized/U +memorizer/M +memorize/RSDZG +memorizes/A +memoryless +memory/MS +memo/SM +Memphis/M +menace/GSD +menacing/Y +menagerie/SM +menage/S +Menander/M +menarche/MS +Menard/M +Mencius/M +Mencken/M +mendaciousness/M +mendacious/PY +mendacity/MS +Mendeleev/M +mendelevium/SM +Mendelian +Mendel/M +Mendelssohn/M +mender/M +Mendez/M +mendicancy/MS +mendicant/S +Mendie/M +mending/M +Mendocino/M +Mendoza/M +mend/RDSJGZ +Mendy/M +Menelaus/M +Menes/M +menfolk/S +menhaden/M +menial/YS +meningeal +meninges +meningitides +meningitis/M +meninx +menisci +meniscus/M +Menkalinan/M +Menkar/M +Menkent/M +Menlo/M +men/MS +Mennonite/SM +Menominee +menopausal +menopause/SM +menorah/M +menorahs +Menotti/M +Mensa/M +Mensch/M +mensch/S +menservants/M +mens/SDG +menstrual +menstruate/NGDSX +menstruation/M +mensurable/P +mensuration/MS +menswear/M +mentalist/MS +mentality/MS +mental/Y +mentholated +menthol/SM +mentionable/U +mentioned/U +mentioner/M +mention/ZGBRDS +mentor/DMSG +Menuhin/M +menu/SM +Menzies/M +meow/DSG +Mephistopheles/M +Merak/M +Mercado/M +mercantile +Mercator/M +Mercedes +mercenariness/M +mercenary/SMP +mercerize/SDG +Mercer/M +mercer/SM +merchandiser/M +merchandise/SRDJMZG +merchantability +merchantman/M +merchantmen +merchant/SBDMG +Mercie/M +mercifully/U +mercifulness/M +merciful/YP +mercilessness/SM +merciless/YP +Merci/M +Merck/M +mercurial/SPY +mercuric +Mercurochrome/M +mercury/MS +Mercury/MS +Mercy/M +mercy/SM +Meredeth/M +Meredithe/M +Meredith/M +Merell/M +meretriciousness/SM +meretricious/YP +mere/YS +merganser/MS +merger/M +merge/SRDGZ +Meridel/M +meridian/MS +meridional +Meridith/M +Meriel/M +Merilee/M +Merill/M +Merilyn/M +meringue/MS +merino/MS +Meris +Merissa/M +merited/U +meritocracy/MS +meritocratic +meritocrats +meritoriousness/MS +meritorious/PY +merit/SCGMD +Meriwether/M +Merla/M +Merle/M +Merlina/M +Merline/M +merlin/M +Merlin/M +Merl/M +mermaid/MS +merman/M +mermen +Merna/M +Merola/M +meromorphic +Merralee/M +Merrel/M +Merriam/M +Merrick/M +Merridie/M +Merrielle/M +Merrie/M +Merrilee/M +Merrile/M +Merrili/M +Merrill/M +merrily +Merrily/M +Merrimack/M +Merrimac/M +merriment/MS +merriness/S +Merritt/M +Merry/M +merrymaker/MS +merrymaking/SM +merry/RPT +Mersey/M +mer/TGDR +Merton/M +Mervin/M +Merv/M +Merwin/M +Merwyn/M +Meryl/M +Mesa +Mesabi/M +mesa/SM +mescaline/SM +mescal/SM +mesdames/M +mesdemoiselles/M +Meshed's +meshed/U +mesh/GMSD +mesmeric +mesmerism/SM +mesmerized/U +mesmerizer/M +mesmerize/SRDZG +Mesolithic/M +mesomorph/M +mesomorphs +meson/MS +Mesopotamia/M +Mesopotamian/S +mesosphere/MS +mesozoic +Mesozoic +mesquite/MS +mes/S +message/SDMG +messeigneurs +messenger/GSMD +Messerschmidt/M +mess/GSDM +Messiaen/M +messiah +Messiah/M +messiahs +Messiahs +messianic +Messianic +messieurs/M +messily +messiness/MS +messmate/MS +Messrs/M +messy/PRT +mestizo/MS +meta +metabolic +metabolically +metabolism/MS +metabolite/SM +metabolize/GSD +metacarpal/S +metacarpi +metacarpus/M +metacircular +metacircularity +metalanguage/MS +metalization/SM +metalized +metallic/S +metalliferous +metallings +metallography/M +metalloid/M +metallurgic +metallurgical/Y +metallurgist/S +metallurgy/MS +metal/SGMD +metalsmith/MS +metalworking/M +metalwork/RMJGSZ +Meta/M +metamathematical +metamorphic +metamorphism/SM +metamorphose/GDS +metamorphosis/M +metaphoric +metaphorical/Y +metaphor/MS +metaphosphate/M +metaphysical/Y +metaphysic/SM +metastability/M +metastable +metastases +metastasis/M +metastasize/DSG +metastatic +metatarsal/S +metatarsi +metatarsus/M +metatheses +metathesis/M +metathesized +metathesizes +metathesizing +metavariable +metempsychoses +metempsychosis/M +meteoric +meteorically +meteorite/SM +meteoritic/S +meteoritics/M +meteoroid/SM +meteorologic +meteorological +meteorologist/S +meteorology/MS +meteor/SM +meter/GDM +mete/ZDGSR +methadone/SM +methane/MS +methanol/SM +methinks +methionine/M +methodicalness/SM +methodical/YP +methodism +Methodism/SM +methodist/MS +Methodist/MS +method/MS +methodological/Y +methodologists +methodology/MS +methought +Methuen/M +Methuselah/M +Methuselahs +methylated +methylene/M +methyl/SM +meticulousness/MS +meticulous/YP +mtier/S +metonymy/M +Metrecal/M +metrical/Y +metricate/SDNGX +metricize/GSD +metrics/M +metric/SM +metronome/MS +metropolis/SM +metropolitanization +metropolitan/S +metro/SM +mets +Metternich/M +mettle/SDM +mettlesome +met/U +Metzler/M +Meuse/M +mewl/GSD +mew/SGD +mews/SM +Mex +Mexicali/M +Mexican/S +Mexico/M +Meyerbeer/M +Meyer/SM +mezzanine/MS +mezzo/S +MFA +mfg +mfr/S +mg +M/GB +Mg/M +MGM/M +mgr +Mgr +MHz +MI +MIA +Mia/M +Miami/SM +Miaplacidus/M +miasmal +miasma/SM +Micaela/M +Micah/M +mica/MS +micelles +mice/M +Michaela/M +Michaelangelo/M +Michaelina/M +Michaeline/M +Michaella/M +Michaelmas/MS +Michael/SM +Michaelson/M +Michail/M +Michale/M +Michal/M +Micheal/M +Micheil/M +Michelangelo/M +Michele/M +Michelina/M +Micheline/M +Michelin/M +Michelle/M +Michell/M +Michel/M +Michelson/M +Michigander/S +Michiganite/S +Michigan/M +Mich/M +Mickelson/M +Mickey/M +mickey/SM +Mickie/M +Micki/M +Mick/M +Micky/M +Mic/M +Micmac/M +micra's +microamp +microanalysis/M +microanalytic +microbe/MS +microbial +microbicidal +microbicide/M +microbiological +microbiologist/MS +microbiology/SM +microbrewery/S +microchemistry/M +microchip/S +microcircuit/MS +microcode/GSD +microcomputer/MS +microcosmic +microcosm/MS +microdensitometer +microdot/MS +microeconomic/S +microeconomics/M +microelectronic/S +microelectronics/M +microfiber/S +microfiche/M +microfilm/DRMSG +microfossils +micrography/M +microgroove/MS +microhydrodynamics +microinstruction/SM +microjoule +microlevel +microlight/S +micromanage/GDSL +micromanagement/S +micrometeorite/MS +micrometeoritic +micrometer/SM +Micronesia/M +Micronesian/S +micron/MS +microorganism/SM +microphone/SGM +Microport/M +microprocessing +microprocessor/SM +microprogrammed +microprogramming +microprogram/SM +micro/S +microscope/SM +microscopic +microscopical/Y +microscopy/MS +microsecond/MS +microsimulation/S +Microsystems +micros/M +Microsoft/M +microsomal +microstore +microsurgery/SM +MicroVAXes +MicroVAX/M +microvolt/SM +microwaveable +microwave/BMGSD +microword/S +midair/MS +midas +Midas/M +midband/M +midday/MS +midden/SM +middest +middlebrow/SM +Middlebury/M +middle/GJRSD +middleman/M +middlemen +middlemost +Middlesex/M +Middleton/M +Middletown/M +middleweight/SM +middling/Y +middy/SM +Mideastern +Mideast/M +midfield/RM +Midge/M +midge/SM +midget/MS +midi/S +midland/MRS +Midland/MS +midlife +midlives +midmorn/G +midmost/S +midnight/SYM +midpoint/MS +midrange +midrib/MS +midriff/MS +mid/S +midscale +midsection/M +midshipman/M +midshipmen +midship/S +midspan +midstream/MS +midst/SM +midsummer/MS +midterm/MS +midtown/MS +Midway/M +midway/S +midweek/SYM +Midwesterner/M +Midwestern/ZR +Midwest/M +midwicket +midwifery/SM +midwife/SDMG +midwinter/YMS +midwives +midyear/MS +mien/M +miff/GDS +mightily +mightiness/MS +mightn't +might/S +mighty/TPR +mignon +mignonette/SM +Mignon/M +Mignonne/M +migraine/SM +migrant/MS +migrate/ASDG +migration/MS +migrative +migratory/S +MIG/S +Miguela/M +Miguelita/M +Miguel/M +mikado/MS +Mikaela/M +Mikael/M +mike/DSMG +Mikel/M +Mike/M +Mikey/M +Mikhail/M +Mikkel/M +Mikol/M +Mikoyan/M +milady/MS +Milagros/M +Milanese +Milan/M +milch/M +mildew/DMGS +mildness/MS +Mildred/M +Mildrid/M +mild/STYRNP +mileage/SM +Milena/M +milepost/SM +miler/M +mile/SM +Mile/SM +milestone/MS +Milford/M +Milicent/M +milieu/SM +Milissent/M +militancy/MS +militantness/M +militant/YPS +militarily +militarism/SM +militaristic +militarist/MS +militarization/SCM +militarize/SDCG +military +militate/SDG +militiaman/M +militiamen +militia/SM +Milka/M +Milken/M +milker/M +milk/GZSRDM +milkiness/MS +milkmaid/SM +milkman/M +milkmen +milkshake/S +milksop/SM +milkweed/MS +milky/RPT +millage/S +Millard/M +Millay/M +millenarian +millenarianism/M +millennial +millennialism +millennium/MS +millepede's +miller/M +Miller/M +Millet/M +millet/MS +milliamp +milliampere/S +milliard/MS +millibar/MS +Millicent/M +millidegree/S +Millie/M +milligram/MS +millijoule/S +Millikan/M +milliliter/MS +Milli/M +millimeter/SM +milliner/SM +millinery/MS +milling/M +millionaire/MS +million/HDMS +millionth/M +millionths +millipede/SM +millisecond/MS +Millisent/M +millivoltmeter/SM +millivolt/SM +milliwatt/S +millpond/MS +millrace/SM +mill/SGZMRD +Mill/SMR +millstone/SM +millstream/SM +millwright/MS +Milly/M +mil/MRSZ +Mil/MY +Milne/M +Milo/M +Milquetoast/S +milquetoast/SM +Miltiades/M +Miltie/M +Milt/M +milt/MDSG +Miltonic +Milton/M +Miltown/M +Milty/M +Milwaukee/M +Milzie/M +MIMD +mime/DSRMG +mimeograph/GMDS +mimeographs +mimer/M +mimesis/M +mimetic +mimetically +mimicked +mimicker/SM +mimicking +mimicry/MS +mimic/S +Mimi/M +mi/MNX +Mimosa/M +mimosa/SM +Mina/M +minaret/MS +minatory +mincemeat/MS +mincer/M +mince/SRDGZJ +mincing/Y +Minda/M +Mindanao/M +mind/ARDSZG +mindbogglingly +minded/P +minder/M +mindfully +mindfulness/MS +mindful/U +mindlessness/SM +mindless/YP +Mindoro/M +min/DRZGJ +mind's +mindset/S +Mindy/M +minefield/MS +mineralization/C +mineralized/U +mineralogical +mineralogist/SM +mineralogy/MS +mineral/SM +miner/M +Miner/M +Minerva/M +mineshaft +mine/SNX +minestrone/MS +minesweeper/MS +Minetta/M +Minette/M +mineworkers +mingle/SDG +Ming/M +Mingus/M +miniature/GMSD +miniaturist/SM +miniaturization/MS +miniaturize/SDG +minibike/S +minibus/SM +minicab/M +minicam/MS +minicomputer/SM +minidress/SM +minify/GSD +minimalism/S +minimalistic +minimalist/MS +minimality +minimal/SY +minima's +minimax/M +minimization/MS +minimized/U +minimizer/M +minimize/RSDZG +minim/SM +minimum/MS +mining/M +minion/M +mini/S +miniseries +miniskirt/MS +ministerial/Y +minister/MDGS +ministrant/S +ministration/SM +ministry/MS +minivan/S +miniver/M +minke +mink/SM +Min/MR +Minna/M +Minnaminnie/M +Minneapolis/M +Minne/M +minnesinger/MS +Minnesota/M +Minnesotan/S +Minnie/M +Minni/M +Minn/M +Minnnie/M +minnow/SM +Minny/M +Minoan/S +Minolta/M +minor/DMSG +minority/MS +Minor/M +Minos +Minotaur/M +minotaur/S +Minot/M +minoxidil/S +Minsk/M +Minsky/M +minster/SM +minstrel/SM +minstrelsy/MS +mintage/SM +Mintaka/M +Minta/M +minter/M +mint/GZSMRD +minty/RT +minuend/SM +minuet/SM +Minuit/M +minuscule/SM +minus/S +minuteman +Minuteman/M +minutemen +minuteness/SM +minute/RSDPMTYG +minutiae +minutia/M +minx/MS +Miocene +MIPS +Miquela/M +Mirabeau/M +Mirabella/M +Mirabelle/M +Mirabel/M +Mirach/M +miracle/MS +miraculousness/M +miraculous/PY +mirage/GSDM +Mira/M +Miranda/M +Miran/M +Mireielle/M +Mireille/M +Mirella/M +Mirelle/M +mire/MGDS +Mirfak/M +Miriam/M +Mirilla/M +Mir/M +Mirna/M +Miro +mirror/DMGS +mirthfulness/SM +mirthful/PY +mirthlessness/M +mirthless/YP +mirth/M +mirths +MIRV/DSG +miry/RT +Mirzam/M +misaddress/SDG +misadventure/SM +misalign/DSGL +misalignment/MS +misalliance/MS +misanalysed +misanthrope/MS +misanthropic +misanthropically +misanthropist/S +misanthropy/SM +misapplier/M +misapply/GNXRSD +misapprehend/GDS +misapprehension/MS +misappropriate/GNXSD +misbegotten +misbehaver/M +misbehave/RSDG +misbehavior/SM +misbrand/DSG +misc +miscalculate/XGNSD +miscalculation/M +miscall/SDG +miscarriage/MS +miscarry/SDG +miscast/GS +miscegenation/SM +miscellanea +miscellaneous/PY +miscellany/MS +Mischa/M +mischance/MGSD +mischief/MDGS +mischievousness/MS +mischievous/PY +miscibility/S +miscible/C +misclassification/M +misclassified +misclassifying +miscode/SDG +miscommunicate/NDS +miscomprehended +misconceive/GDS +misconception/MS +misconduct/GSMD +misconfiguration +misconstruction/MS +misconstrue/DSG +miscopying +miscount/DGS +miscreant/MS +miscue/MGSD +misdeal/SG +misdealt +misdeed/MS +misdemeanant/SM +misdemeanor/SM +misdiagnose/GSD +misdid +misdirect/GSD +misdirection/MS +misdirector/S +misdoes +misdo/JG +misdone +miserableness/SM +miserable/SP +miserably +miser/KM +miserliness/MS +miserly/P +misery/MS +mises/KC +misfeasance/MS +misfeature/M +misfield +misfile/SDG +misfire/SDG +misfit/MS +misfitted +misfitting +misfortune/SM +misgauge/GDS +misgiving/MYS +misgovern/LDGS +misgovernment/S +misguidance/SM +misguidedness/M +misguided/PY +misguide/DRSG +misguider/M +Misha/M +mishandle/SDG +mishap/MS +mishapped +mishapping +misheard +mishear/GS +mishitting +mishmash/SM +misidentification/M +misidentify/GNSD +misinformation/SM +misinform/GDS +misinterpretation/MS +misinterpreter/M +misinterpret/RDSZG +misjudge/DSG +misjudging/Y +misjudgment/MS +Miskito +mislabel/DSG +mislaid +mislay/GS +misleader/M +mislead/GRJS +misleading/Y +misled +mismanage/LGSD +mismanagement/MS +mismatch/GSD +misname/GSD +misnomer/GSMD +misogamist/MS +misogamy/MS +misogynistic +misogynist/MS +misogynous +misogyny/MS +misperceive/SD +misplace/GLDS +misplacement/MS +misplay/GSD +mispositioned +misprint/SGDM +misprision/SM +mispronounce/DSG +mispronunciation/MS +misquotation/MS +misquote/GDS +misreader/M +misread/RSGJ +misrelated +misremember/DG +misreport/DGS +misrepresentation/MS +misrepresenter/M +misrepresent/SDRG +misroute/DS +misrule/SDG +missal/ESM +misshape/DSG +misshapenness/SM +misshapen/PY +Missie/M +missile/MS +missilery/SM +mission/AMS +missionary/MS +missioned +missioner/SM +missioning +missis's +Mississauga/M +Mississippian/S +Mississippi/M +missive/MS +Missoula/M +Missourian/S +Missouri/M +misspeak/SG +misspecification +misspecified +misspelling/M +misspell/SGJD +misspend/GS +misspent +misspoke +misspoken +mis/SRZ +miss/SDEGV +Miss/SM +misstate/GLDRS +misstatement/MS +misstater/M +misstep/MS +misstepped +misstepping +missus/SM +Missy/M +mistakable/U +mistake/BMGSR +mistaken/Y +mistaker/M +mistaking/Y +Mistassini/M +mister/GDM +Mister/SM +mistily +Misti/M +mistime/GSD +mistiness/S +mistletoe/MS +mist/MRDGZS +mistook +mistral/MS +mistranslated +mistranslates +mistranslating +mistranslation/SM +mistreat/DGSL +mistreatment/SM +Mistress/MS +mistress/MSY +mistrial/SM +mistruster/M +mistrustful/Y +mistrust/SRDG +Misty/M +mistype/SDGJ +misty/PRT +misunderstander/M +misunderstanding/M +misunderstand/JSRZG +misunderstood +misuser/M +misuse/RSDMG +miswritten +Mitchael/M +Mitchell/M +Mitchel/M +Mitch/M +miterer/M +miter/GRDM +mite/SRMZ +Mitford/M +Mithra/M +Mithridates/M +mitigated/U +mitigate/XNGVDS +mitigation/M +MIT/M +mitoses +mitosis/M +mitotic +MITRE/SM +Mitsubishi/M +mitten/M +Mitterrand/M +mitt/XSMN +Mitty/M +Mitzi/M +mitzvahs +mixable +mix/AGSD +mixed/U +mixer/SM +mixture/SM +Mizar/M +mizzenmast/SM +mizzen/MS +Mk +mks +ml +Mlle/M +mm +MM +MMe +Mme/SM +MN +mnemonically +mnemonics/M +mnemonic/SM +Mnemosyne/M +Mn/M +MO +moan/GSZRDM +moat/SMDG +mobbed +mobber +mobbing +mobcap/SM +Mobile/M +mobile/S +mobility/MS +mobilizable +mobilization/AMCS +mobilize/CGDS +mobilized/U +mobilizer/MS +mobilizes/A +Mobil/M +mob/MS +mobster/MS +Mobutu/M +moccasin/SM +mocha/SM +mockers/M +mockery/MS +mock/GZSRD +mockingbird/MS +mocking/Y +mo/CSK +modality/MS +modal/Y +modeled/A +modeler/M +modeling/M +models/A +model/ZGSJMRD +mode/MS +modem/SM +moderated/U +moderateness/SM +moderate/PNGDSXY +moderation/M +moderator/MS +modernism/MS +modernistic +modernist/S +modernity/SM +modernization/MS +modernized/U +modernizer/M +modernize/SRDGZ +modernizes/U +modernness/SM +modern/PTRYS +Modesta/M +Modestia/M +Modestine/M +Modesto/M +modest/TRY +Modesty/M +modesty/MS +modicum/SM +modifiability/M +modifiableness/M +modifiable/U +modification/M +modified/U +modifier/M +modify/NGZXRSD +Modigliani/M +modishness/MS +modish/YP +mod/TSR +Modula/M +modularity/SM +modularization +modularize/SDG +modular/SY +modulate/ADSNCG +modulation/CMS +modulator/ACSM +module/SM +moduli +modulo +modulus/M +modus +Moe/M +Moen/M +Mogadiscio's +Mogadishu +mogul/MS +Mogul/MS +mohair/SM +Mohamed/M +Mohammad/M +Mohammedanism/MS +Mohammedan/SM +Mohammed's +Mohandas/M +Mohandis/M +Mohawk/MS +Mohegan/S +Mohican's +Moho/M +Mohorovicic/M +Mohr/M +moiety/MS +moil/SGD +Moina/M +Moines/M +Moira/M +moire/MS +Moise/MS +Moiseyev/M +Moishe/M +moistener/M +moisten/ZGRD +moistness/MS +moist/TXPRNY +moisture/MS +moisturize/GZDRS +Mojave/M +molal +molarity/SM +molar/MS +molasses/MS +Moldavia/M +Moldavian/S +moldboard/SM +molder/DG +moldiness/SM +molding/M +mold/MRDJSGZ +Moldova +moldy/PTR +molecularity/SM +molecular/Y +molecule/MS +molehill/SM +mole/MTS +moleskin/MS +molestation/SM +molested/U +molester/M +molest/RDZGS +Moliere +Molina/M +Moline/M +Mollee/M +Mollie/M +mollification/M +mollify/XSDGN +Molli/M +Moll/M +moll/MS +mollusc's +mollusk/S +mollycoddler/M +mollycoddle/SRDG +Molly/M +molly/SM +Molnar/M +Moloch/M +Molokai/M +Molotov/M +molter/M +molt/RDNGZS +Moluccas +molybdenite/M +molybdenum/MS +Mombasa/M +momenta +momentarily +momentariness/SM +momentary/P +moment/MYS +momentousness/MS +momentous/YP +momentum/SM +momma/S +Mommy/M +mommy/SM +Mo/MN +mom/SM +Monaco/M +monadic +monad/SM +Monah/M +Mona/M +monarchic +monarchical +monarchism/MS +monarchistic +monarchist/MS +monarch/M +monarchs +monarchy/MS +Monash/M +monastery/MS +monastical/Y +monasticism/MS +monastic/S +monaural/Y +Mondale/M +Monday/MS +Mondrian/M +Monegasque/SM +Monera/M +monetarily +monetarism/S +monetarist/MS +monetary +monetization/CMA +monetize/CGADS +Monet/M +moneybag/SM +moneychangers +moneyer/M +moneylender/SM +moneymaker/MS +moneymaking/MS +money/SMRD +Monfort/M +monger/SGDM +Mongolia/M +Mongolian/S +Mongolic/M +mongolism/SM +mongoloid/S +Mongoloid/S +Mongol/SM +mongoose/SM +mongrel/SM +Monica/M +monies/M +Monika/M +moniker/MS +Monique/M +monism/MS +monist/SM +monition/SM +monitored/U +monitor/GSMD +monitory/S +monkeyshine/S +monkey/SMDG +monkish +Monk/M +monk/MS +monkshood/SM +Monmouth/M +monochromatic +monochromator +monochrome/MS +monocle/SDM +monoclinic +monoclonal/S +monocotyledonous +monocotyledon/SM +monocular/SY +monodic +monodist/S +monody/MS +monogamist/MS +monogamous/PY +monogamy/MS +monogrammed +monogramming +monogram/MS +monograph/GMDS +monographs +monolingualism +monolingual/S +monolithic +monolithically +monolith/M +monoliths +monologist/S +monologue/GMSD +monomaniacal +monomaniac/MS +monomania/MS +monomeric +monomer/SM +monomial/SM +mono/MS +Monongahela/M +mononuclear +mononucleoses +mononucleosis/M +monophonic +monoplane/MS +monopole/S +monopolistic +monopolist/MS +monopolization/MS +monopolized/U +monopolize/GZDSR +monopolizes/U +monopoly/MS +monorail/SM +monostable +monosyllabic +monosyllable/MS +monotheism/SM +monotheistic +monotheist/S +monotone/SDMG +monotonic +monotonically +monotonicity +monotonousness/MS +monotonous/YP +monotony/MS +monovalent +monoxide/SM +Monroe/M +Monro/M +Monrovia/M +Monsanto/M +monseigneur +monsieur/M +Monsignori +Monsignor/MS +monsignor/S +Mon/SM +monsoonal +monsoon/MS +monster/SM +monstrance/ASM +monstrosity/SM +monstrousness/M +monstrous/YP +montage/SDMG +Montague/M +Montaigne/M +Montana/M +Montanan/MS +Montcalm/M +Montclair/M +Monte/M +Montenegrin +Montenegro/M +Monterey/M +Monterrey/M +Montesquieu/M +Montessori/M +Monteverdi/M +Montevideo/M +Montezuma +Montgomery/M +monthly/S +month/MY +months +Monticello/M +Monti/M +Mont/M +Montmartre/M +Montoya/M +Montpelier/M +Montrachet/M +Montreal/M +Montserrat/M +Monty/M +monumentality/M +monumental/Y +monument/DMSG +mooch/ZSRDG +moodily +moodiness/MS +mood/MS +Moody/M +moody/PTR +Moog +moo/GSD +moonbeam/SM +Mooney/M +moon/GDMS +moonless +moonlight/GZDRMS +moonlighting/M +moonlit +Moon/M +moonscape/MS +moonshiner/M +moonshine/SRZM +moonshot/MS +moonstone/SM +moonstruck +moonwalk/SDG +Moore/M +moor/GDMJS +mooring/M +Moorish +moorland/MS +Moor/MS +moose/M +moot/RDGS +moped/MS +moper/M +mope/S +mopey +mopier +mopiest +mopish +mopped +moppet/MS +mopping +mop/SZGMDR +moraine/MS +morale/MS +Morales/M +moralistic +moralistically +moralist/MS +morality/UMS +moralization/CS +moralize/CGDRSZ +moralled +moraller +moralling +moral/SMY +Mora/M +Moran/M +morass/SM +moratorium/SM +Moravia/M +Moravian +moray/SM +morbidity/SM +morbidness/S +morbid/YP +mordancy/MS +mordant/GDYS +Mordecai/M +Mord/M +Mordred/M +Mordy/M +more/DSN +Moreen/M +Morehouse/M +Moreland/M +morel/SM +More/M +Morena/M +Moreno/M +moreover +Morey/M +Morgana/M +Morganica/M +Morgan/MS +Morganne/M +morgen/M +Morgen/M +morgue/SM +Morgun/M +Moria/M +Moriarty/M +moribundity/M +moribund/Y +Morie/M +Morin/M +morion/M +Morison/M +Morissa/M +Morita/M +Moritz/M +Morlee/M +Morley/M +Morly/M +Mormonism/MS +Mormon/SM +Morna/M +morning/MY +morn/SGJDM +Moroccan/S +Morocco/M +morocco/SM +Moro/M +moronic +moronically +Moroni/M +moron/SM +moroseness/MS +morose/YP +morpheme/DSMG +morphemic/S +Morpheus/M +morph/GDJ +morphia/S +morphine/MS +morphism/MS +morphologic +morphological/Y +morphology/MS +morphophonemic/S +morphophonemics/M +morphs +Morrie/M +morris +Morris/M +Morrison/M +Morristown/M +Morrow/M +morrow/MS +Morry/M +morsel/GMDS +Morse/M +mortality/SM +mortal/SY +mortarboard/SM +mortar/GSDM +Morten/M +mortgageable +mortgagee/SM +mortgage/MGDS +mortgagor/SM +mortice's +mortician/SM +Mortie/M +mortification/M +mortified/Y +mortifier/M +mortify/DRSXGN +Mortimer/M +mortise/MGSD +Mort/MN +Morton/M +mortuary/MS +Morty/M +Mosaic +mosaicked +mosaicking +mosaic/MS +Moscone/M +Moscow/M +Moseley/M +Moselle/M +Mose/MSR +Moser/M +mosey/SGD +Moshe/M +Moslem's +Mosley/M +mosque/SM +mosquitoes +mosquito/M +mos/S +mossback/MS +Mossberg/M +Moss/M +moss/SDMG +mossy/SRT +most/SY +Mosul/M +mote/ASCNK +motel/MS +mote's +motet/SM +mothball/DMGS +motherboard/MS +motherfucker/MS! +motherfucking/! +motherhood/SM +mothering/M +motherland/SM +motherless +motherliness/MS +motherly/P +mother/RDYMZG +moths +moth/ZMR +motif/MS +motile/S +motility/MS +motional/K +motioner/M +motion/GRDMS +motionlessness/S +motionless/YP +motion's/ACK +motions/K +motivated/U +motivate/XDSNGV +motivational/Y +motivation/M +motivator/S +motiveless +motive/MGSD +motley/S +motlier +motliest +mot/MSV +motocross/SM +motorbike/SDGM +motorboat/MS +motorcade/MSDG +motorcar/MS +motorcycle/GMDS +motorcyclist/SM +motor/DMSG +motoring/M +motorist/SM +motorization/SM +motorize/DSG +motorized/U +motorman/M +motormen +motormouth +motormouths +Motorola/M +motorway/SM +Motown/M +mottle/GSRD +mottler/M +Mott/M +mottoes +motto/M +moue/DSMG +moulder/DSG +moult/GSD +mound/GMDS +mountable +mountaineering/M +mountaineer/JMDSG +mountainousness/M +mountainous/PY +mountainside/MS +mountain/SM +mountaintop/SM +Mountbatten/M +mountebank/SGMD +mounted/U +mount/EGACD +mounter/SM +mounties +Mountie/SM +mounting/MS +Mount/M +mounts/AE +mourner/M +mournfuller +mournfullest +mournfulness/S +mournful/YP +mourning/M +mourn/ZGSJRD +mouser/M +mouse/SRDGMZ +mousetrapped +mousetrapping +mousetrap/SM +mousiness/MS +mousing/M +mousse/MGSD +Moussorgsky/M +mousy/PRT +Mouthe/M +mouthful/MS +mouthiness/SM +mouth/MSRDG +mouthorgan +mouthpiece/SM +mouths +mouthwash/SM +mouthwatering +mouthy/PTR +Mouton/M +mouton/SM +movable/ASP +movableness/AM +move/ARSDGZB +moved/U +movement/SM +mover/AM +moviegoer/S +movie/SM +moving/YS +mower/M +Mowgli/M +mowing/M +mow/SDRZG +moxie/MS +Moyer/M +Moyna/M +Moyra/M +Mozambican/S +Mozambique/M +Mozart/M +Mozelle/M +Mozes/M +Mozilla/M +mozzarella/MS +mp +MP +mpg +mph +MPH +MRI +Mr/M +Mrs +ms +M's +MS +MSG +Msgr/M +m's/K +Ms/S +MST +MSW +mt +MT +mtg +mtge +Mt/M +MTS +MTV +Muawiya/M +Mubarak/M +muchness/M +much/SP +mucilage/MS +mucilaginous +mucker/M +muck/GRDMS +muckraker/M +muckrake/ZMDRSG +mucky/RT +mucosa/M +mucous +mucus/SM +mudded +muddily +muddiness/SM +mudding +muddle/GRSDZ +muddleheaded/P +muddlehead/SMD +muddler/M +muddy/TPGRSD +mudflat/S +mudguard/SM +mudlarks +mud/MS +mudroom/S +mudslide/S +mudslinger/M +mudslinging/M +mudsling/JRGZ +Mueller/M +Muenster +muenster/MS +muesli/M +muezzin/MS +muff/GDMS +Muffin/M +muffin/SM +muffler/M +muffle/ZRSDG +Mufi/M +Mufinella/M +mufti/MS +Mugabe/M +mugged +mugger/SM +mugginess/S +mugging/S +muggy/RPT +mugshot/S +mug/SM +mugwump/MS +Muhammadanism/S +Muhammadan/SM +Muhammad/M +Muire/M +Muir/M +Mukden/M +mukluk/SM +mulattoes +mulatto/M +mulberry/MS +mulch/GMSD +mulct/SDG +Mulder/M +mule/MGDS +muleskinner/S +muleteer/MS +mulishness/MS +mulish/YP +mullah/M +mullahs +mullein/MS +Mullen/M +muller/M +Muller/M +mullet/MS +Mulligan/M +mulligan/SM +mulligatawny/SM +Mullikan/M +Mullins +mullion/MDSG +mull/RDSG +Multan/M +multi +Multibus/M +multicellular +multichannel/M +multicollinearity/M +multicolor/SDM +multicolumn +multicomponent +multicomputer/MS +Multics/M +MULTICS/M +multicultural +multiculturalism/S +multidimensional +multidimensionality +multidisciplinary +multifaceted +multifamily +multifariousness/SM +multifarious/YP +multifigure +multiform +multifunction/D +multilateral/Y +multilayer +multilevel/D +multilingual +multilingualism/S +multimedia/S +multimegaton/M +multimeter/M +multimillionaire/SM +multinational/S +multinomial/M +multiphase +multiple/SM +multiplet/SM +multiplex/GZMSRD +multiplexor's +multipliable +multiplicand/SM +multiplication/M +multiplicative/YS +multiplicity/MS +multiplier/M +multiply/ZNSRDXG +multiprocess/G +multiprocessor/MS +multiprogram +multiprogrammed +multiprogramming/MS +multipurpose +multiracial +multistage +multistory/S +multisyllabic +multitasking/S +multitude/MS +multitudinousness/M +multitudinous/YP +multiuser +multivalent +multivalued +multivariate +multiversity/M +multivitamin/S +mu/M +mumbler/M +mumbletypeg/S +mumble/ZJGRSD +Mumford/M +mummed +mummer/SM +mummery/MS +mummification/M +mummify/XSDGN +mumming +mum/MS +mummy/GSDM +mumps/M +muncher/M +Mnchhausen/M +munchies +Munch/M +munch/ZRSDG +Muncie/M +mundane/YSP +Mundt/M +munge/JGZSRD +Munich/M +municipality/SM +municipal/YS +munificence/MS +munificent/Y +munition/SDG +Munmro/M +Munoz/M +Munroe/M +Munro/M +mun/S +Munsey/M +Munson/M +Munster/MS +Muong/M +muon/M +Muppet/M +muralist/SM +mural/SM +Murasaki/M +Murat/M +Murchison/M +Murcia/M +murderer/M +murderess/S +murder/GZRDMS +murderousness/M +murderous/YP +Murdoch/M +Murdock/M +Mureil/M +Murial/M +muriatic +Murielle/M +Muriel/M +Murillo/M +murkily +murkiness/S +murk/TRMS +murky/RPT +Murmansk/M +murmurer/M +murmuring/U +murmurous +murmur/RDMGZSJ +Murphy/M +murrain/SM +Murray/M +Murrow/M +Murrumbidgee/M +Murry/M +Murvyn/M +muscatel/MS +Muscat/M +muscat/SM +musclebound +muscle/SDMG +Muscovite/M +muscovite/MS +Muscovy/M +muscularity/SM +muscular/Y +musculature/SM +muse +Muse/M +muser/M +musette/SM +museum/MS +mus/GJDSR +musher/M +mushiness/MS +mush/MSRDG +mushroom/DMSG +mushy/PTR +Musial/M +musicale/SM +musicality/SM +musicals +musical/YU +musician/MYS +musicianship/MS +musicked +musicking +musicological +musicologist/MS +musicology/MS +music/SM +musing/Y +Muskegon/M +muskeg/SM +muskellunge/SM +musketeer/MS +musketry/MS +musket/SM +musk/GDMS +muskie/M +muskiness/MS +muskmelon/MS +muskox/N +muskrat/MS +musky/RSPT +Muslim/MS +muslin/MS +mussel/MS +Mussolini/MS +Mussorgsky/M +muss/SDG +mussy/RT +mustache/DSM +mustachio/MDS +mustang/MS +mustard/MS +muster/GD +mustily +mustiness/MS +mustn't +must/RDGZS +must've +musty/RPT +mutability/SM +mutableness/M +mutable/P +mutably +mutagen/SM +mutant/MS +mutate/XVNGSD +mutational/Y +mutation/M +mutator/S +muted/Y +muteness/S +mute/PDSRBYTG +mutilate/XDSNG +mutilation/M +mutilator/MS +mutineer/SMDG +mutinous/Y +mutiny/MGSD +Mutsuhito/M +mutterer/M +mutter/GZRDJ +muttonchops +mutton/SM +mutt/ZSMR +mutuality/S +mutual/SY +muumuu/MS +muzak +Muzak/SM +Muzo/M +muzzled/U +muzzle/MGRSD +muzzler/M +MVP +MW +Myanmar +Mycah/M +Myca/M +Mycenaean +Mycenae/M +Mychal/M +mycologist/MS +mycology/MS +myelitides +myelitis/M +Myer/MS +myers +mylar +Mylar/S +Myles/M +Mylo/M +My/M +myna/SM +Mynheer/M +myocardial +myocardium/M +myopia/MS +myopically +myopic/S +Myrah/M +Myra/M +Myranda/M +Myrdal/M +myriad/S +Myriam/M +Myrilla/M +Myrle/M +Myrlene/M +myrmidon/S +Myrna/M +Myron/M +myrrh/M +myrrhs +Myrta/M +Myrtia/M +Myrtice/M +Myrtie/M +Myrtle/M +myrtle/SM +Myrvyn/M +Myrwyn/M +mys +my/S +myself +Mysore/M +mysteriousness/MS +mysterious/YP +mystery/MDSG +mystical/Y +mysticism/MS +mystic/SM +mystification/M +mystifier/M +mystify/CSDGNX +mystifying/Y +mystique/MS +Myst/M +mythic +mythical/Y +myth/MS +mythographer/SM +mythography/M +mythological/Y +mythologist/MS +mythologize/CSDG +mythology/SM +myths +N +NAACP +nabbed +nabbing +Nabisco/M +nabob/SM +Nabokov/M +nab/S +nacelle/SM +nacho/S +NaCl/M +nacre/MS +nacreous +Nada/M +Nadean/M +Nadeen/M +Nader/M +Nadia/M +Nadine/M +nadir/SM +Nadiya/M +Nadya/M +Nady/M +nae/VM +Nagasaki/M +nagged +nagger/S +nagging/Y +nag/MS +Nagoya/M +Nagpur/M +Nagy/M +Nahuatl/SM +Nahum/M +naiad/SM +naifs +nailbrush/SM +nailer/M +nail/SGMRD +Naipaul/M +Nair/M +Nairobi/M +Naismith/M +naive/SRTYP +naivet/SM +naivety/MS +Nakamura/M +Nakayama/M +nakedness/MS +naked/TYRP +Nakoma/M +Nalani/M +Na/M +Namath/M +nameable/U +name/ADSG +namedrop +namedropping +named's +named/U +nameless/PY +namely +nameplate/MS +namer/SM +name's +namesake/SM +Namibia/M +Namibian/S +naming/M +Nam/M +Nanak/M +Nana/M +Nananne/M +Nancee/M +Nance/M +Nancey/M +Nanchang/M +Nancie/M +Nanci/M +Nancy/M +Nanete/M +Nanette/M +Nanice/M +Nani/M +Nanine/M +Nanjing +Nanking's +Nan/M +Nannette/M +Nannie/M +Nanni/M +Nanny/M +nanny/SDMG +nanometer/MS +Nanon/M +Nanook/M +nanosecond/SM +Nansen/M +Nantes/M +Nantucket/M +Naoma/M +Naomi/M +napalm/MDGS +nape/SM +Naphtali/M +naphthalene/MS +naphtha/SM +Napier/M +napkin/SM +Naples/M +napless +Nap/M +Napoleonic +napoleon/MS +Napoleon/MS +napped +napper/MS +Nappie/M +napping +Nappy/M +nappy/TRSM +nap/SM +Nara/M +Narbonne/M +narc/DGS +narcissism/MS +narcissistic +narcissist/MS +narcissus/M +Narcissus/M +narcoleptic +narcoses +narcosis/M +narcotic/SM +narcotization/S +narcotize/GSD +Nariko/M +Nari/M +nark's +Narmada/M +Narragansett/M +narrate/VGNSDX +narration/M +narrative/MYS +narratology +narrator/SM +narrowing/P +narrowness/SM +narrow/RDYTGPS +narwhal/MS +nary +nasality/MS +nasalization/MS +nasalize/GDS +nasal/YS +NASA/MS +nascence/ASM +nascent/A +NASDAQ +Nash/M +Nashua/M +Nashville/M +Nassau/M +Nasser/M +nastily +nastiness/MS +nasturtium/SM +nasty/TRSP +natal +Natala/M +Natalee/M +Natale/M +Natalia/M +Natalie/M +Natalina/M +Nataline/M +natalist +natality/M +Natal/M +Natalya/M +Nata/M +Nataniel/M +Natasha/M +Natassia/M +Natchez +natch/S +Nate/XMN +Nathalia/M +Nathalie/M +Nathanael/M +Nathanial/M +Nathaniel/M +Nathanil/M +Nathan/MS +nationalism/SM +nationalistic +nationalistically +nationalist/MS +nationality/MS +nationalization/MS +nationalize/CSDG +nationalized/AU +nationalizer/SM +national/YS +nationhood/SM +nation/MS +nationwide +nativeness/M +native/PYS +Natividad/M +Nativity/M +nativity/MS +Natka/M +natl +Nat/M +NATO/SM +natter/SGD +nattily +nattiness/SM +Natty/M +natty/TRP +naturalism/MS +naturalistic +naturalist/MS +naturalization/SM +naturalized/U +naturalize/GSD +naturalness/US +natural/PUY +naturals +nature/ASDCG +nature's +naturist +Naugahyde/S +naughtily +naughtiness/SM +naught/MS +naughty/TPRS +Naur/M +Nauru/M +nausea/SM +nauseate/DSG +nauseating/Y +nauseousness/SM +nauseous/P +nautical/Y +nautilus/MS +Navaho's +Navajoes +Navajo/S +naval/Y +Navarro/M +navel/MS +nave/SM +navigability/SM +navigableness/M +navigable/P +navigate/DSXNG +navigational +navigation/M +navigator/MS +Navona/M +Navratilova/M +navvy/M +Navy/S +navy/SM +nay/MS +naysayer/S +Nazarene/MS +Nazareth/M +Nazi/SM +Nazism/S +NB +NBA +NBC +Nb/M +NBS +NC +NCAA +NCC +NCO +NCR +ND +N'Djamena +Ndjamena/M +Nd/M +Ne +NE +Neala/M +Neale/M +Neall/M +Neal/M +Nealon/M +Nealson/M +Nealy/M +Neanderthal/S +neap/DGS +Neapolitan/SM +nearby +nearly/RT +nearness/MS +nearside/M +nearsightedness/S +nearsighted/YP +near/TYRDPSG +neaten/DG +neath +neatness/MS +neat/YRNTXPS +Neb/M +Nebraska/M +Nebraskan/MS +Nebr/M +Nebuchadnezzar/MS +nebulae +nebula/M +nebular +nebulousness/SM +nebulous/PY +necessaries +necessarily/U +necessary/U +necessitate/DSNGX +necessitation/M +necessitous +necessity/SM +neckband/M +neckerchief/MS +neck/GRDMJS +necking/M +necklace/DSMG +neckline/MS +necktie/MS +necrology/SM +necromancer/MS +necromancy/MS +necromantic +necrophiliac/S +necrophilia/M +necropolis/SM +necropsy/M +necroses +necrosis/M +necrotic +nectarine/SM +nectarous +nectar/SM +nectary/MS +Neda/M +Nedda/M +Neddie/M +Neddy/M +Nedi/M +Ned/M +ne +needed/U +needer/M +needful/YSP +Needham/M +neediness/MS +needlecraft/M +needle/GMZRSD +needlepoint/SM +needlessness/S +needless/YP +needlewoman/M +needlewomen +needlework/RMS +needn't +need/YRDGS +needy/TPR +Neel/M +Neely/M +ne'er +nefariousness/MS +nefarious/YP +Nefen/M +Nefertiti/M +negated/U +negater/M +negate/XRSDVNG +negation/M +negativeness/SM +negative/PDSYG +negativism/MS +negativity/MS +negator/MS +Negev/M +neglecter/M +neglectfulness/SM +neglectful/YP +neglect/SDRG +negligee/SM +negligence/MS +negligent/Y +negligibility/M +negligible +negligibly +negotiability/MS +negotiable/A +negotiant/M +negotiate/ASDXGN +negotiation/MA +negotiator/MS +Negress/MS +negritude/MS +Negritude/S +Negroes +negroid +Negroid/S +Negro/M +neg/S +Nehemiah/M +Nehru/M +neighbored/U +neighborer/M +neighborhood/SM +neighborlinesses +neighborliness/UM +neighborly/UP +neighbor/SMRDYZGJ +neigh/MDG +neighs +Neila/M +Neile/M +Neilla/M +Neille/M +Neill/M +Neil/SM +neither +Nelda/M +Nelia/M +Nelie/M +Nelle/M +Nellie/M +Nelli/M +Nell/M +Nelly/M +Nelsen/M +Nels/N +Nelson/M +nelson/MS +nematic +nematode/SM +Nembutal/M +nemeses +nemesis +Nemesis/M +neoclassical +neoclassicism/MS +neoclassic/M +neocolonialism/MS +neocortex/M +neodymium/MS +Neogene +neolithic +Neolithic/M +neologism/SM +neomycin/M +neonatal/Y +neonate/MS +neon/DMS +neophyte/MS +neoplasm/SM +neoplastic +neoprene/SM +Nepalese +Nepali/MS +Nepal/M +nepenthe/MS +nephew/MS +nephrite/SM +nephritic +nephritides +nephritis/M +nepotism/MS +nepotist/S +Neptune/M +neptunium/MS +nerd/S +nerdy/RT +Nereid/M +Nerf/M +Nerissa/M +Nerita/M +Nero/M +Neron/M +Nerta/M +Nerte/M +Nertie/M +Nerti/M +Nert/M +Nerty/M +Neruda/M +nervelessness/SM +nerveless/YP +nerve's +nerve/UGSD +nerviness/SM +nerving/M +nervousness/SM +nervous/PY +nervy/TPR +Nessa/M +Nessie/M +Nessi/M +Nessy/M +Nesta/M +nester/M +Nester/M +Nestle/M +nestler/M +nestle/RSDG +nestling/M +Nestorius/M +Nestor/M +nest/RDGSBM +netball/M +nether +Netherlander/SM +Netherlands/M +nethermost +netherworld/S +Netscape/M +net/SM +Netta/M +Nettie/M +Netti/M +netting/M +nett/JGRDS +Nettle/M +nettle/MSDG +nettlesome +Netty/M +network/SJMDG +Netzahualcoyotl/M +Neumann/M +neuralgia/MS +neuralgic +neural/Y +neurasthenia/MS +neurasthenic/S +neuritic/S +neuritides +neuritis/M +neuroanatomy +neurobiology/M +neurological/Y +neurologist/MS +neurology/SM +neuromuscular +neuronal +neurone/S +neuron/MS +neuropathology/M +neurophysiology/M +neuropsychiatric +neuroses +neurosis/M +neurosurgeon/MS +neurosurgery/SM +neurotically +neurotic/S +neurotransmitter/S +neuter/JZGRD +neutralise's +neutralism/MS +neutralist/S +neutrality/MS +neutralization/MS +neutralized/U +neutralize/GZSRD +neutral/PYS +neutrino/MS +neutron/MS +neut/ZR +Nevada/M +Nevadan/S +Nevadian/S +Neva/M +never +nevermore +nevertheless +nevi +Nevile/M +Neville/M +Nevil/M +Nevin/SM +Nevis/M +Nev/M +Nevsa/M +Nevsky/M +nevus/M +Newark/M +newbie/S +newborn/S +Newbury/M +Newburyport/M +Newcastle/M +newcomer/MS +newed/A +Newell/M +newel/MS +newer/A +newfangled +newfound +newfoundland +Newfoundlander/M +Newfoundland/SRMZ +newish +newline/SM +newlywed/MS +Newman/M +newness/MS +Newport/M +news/A +newsagent/MS +newsboy/SM +newscaster/M +newscasting/M +newscast/SRMGZ +newsdealer/MS +newsed +newses +newsflash/S +newsgirl/S +newsgroup/SM +newsing +newsletter/SM +NeWS/M +newsman/M +newsmen +newspaperman/M +newspapermen +newspaper/SMGD +newspaperwoman/M +newspaperwomen +newsprint/MS +new/SPTGDRY +newsreader/MS +newsreel/SM +newsroom/S +news's +newsstand/MS +Newsweekly/M +newsweekly/S +Newsweek/MY +newswire +newswoman/M +newswomen +newsworthiness/SM +newsworthy/RPT +newsy/TRS +newt/MS +Newtonian +Newton/M +newton/SM +Nexis/M +next +nexus/SM +Neysa/M +NF +NFC +NFL +NFS +Ngaliema/M +Nguyen/M +NH +NHL +niacin/SM +Niagara/M +Niall/M +Nial/M +Niamey/M +nibbed +nibbing +nibbler/M +nibble/RSDGZ +Nibelung/M +nib/SM +Nicaean +Nicaragua/M +Nicaraguan/S +Niccolo/M +Nice/M +Nicene +niceness/MS +nicety/MS +nice/YTPR +niche/SDGM +Nicholas +Nichole/M +Nicholle/M +Nichol/MS +Nicholson/M +nichrome +nickelodeon/SM +nickel/SGMD +nicker/GD +Nickey/M +nick/GZRDMS +Nickie/M +Nicki/M +Nicklaus/M +Nick/M +nicknack's +nickname/MGDRS +nicknamer/M +Nickolai/M +Nickola/MS +Nickolaus/M +Nicko/M +Nicky/M +Nicobar/M +Nicodemus/M +Nicolai/MS +Nicola/MS +Nicolea/M +Nicole/M +Nicolette/M +Nicoli/MS +Nicolina/M +Nicoline/M +Nicolle/M +Nicol/M +Nico/M +Nicosia/M +nicotine/MS +Niebuhr/M +niece/MS +Niel/MS +Nielsen/M +Niels/N +Nielson/M +Nietzsche/M +Nieves/M +nifty/TRS +Nigel/M +Nigeria/M +Nigerian/S +Nigerien +Niger/M +niggardliness/SM +niggardly/P +niggard/SGMDY +nigger/SGDM! +niggler/M +niggle/RSDGZJ +niggling/Y +nigh/RDGT +nighs +nightcap/SM +nightclothes +nightclubbed +nightclubbing +nightclub/MS +nightdress/MS +nightfall/SM +nightgown/MS +nighthawk/MS +nightie/MS +Nightingale/M +nightingale/SM +nightlife/MS +nightlong +nightmare/MS +nightmarish/Y +nightshade/SM +nightshirt/MS +night/SMYDZ +nightspot/MS +nightstand/SM +nightstick/S +nighttime/S +nightwear/M +nighty's +NIH +nihilism/MS +nihilistic +nihilist/MS +Nijinsky/M +Nikaniki/M +Nike/M +Niki/M +Nikita/M +Nikkie/M +Nikki/M +Nikko/M +Nikolai/M +Nikola/MS +Nikolaos/M +Nikolaus/M +Nikolayev's +Nikoletta/M +Nikolia/M +Nikolos/M +Niko/MS +Nikon/M +Nile/SM +nilled +nilling +Nil/MS +nil/MYS +nilpotent +Nilsen/M +Nils/N +Nilson/M +Nilsson/M +Ni/M +nimbi +nimbleness/SM +nimble/TRP +nimbly +nimbus/DM +NIMBY +Nimitz/M +Nimrod/MS +Nina/M +nincompoop/MS +ninefold +nine/MS +ninepence/M +ninepin/S +ninepins/M +nineteen/SMH +nineteenths +ninetieths +Ninetta/M +Ninette/M +ninety/MHS +Nineveh/M +ninja/S +Ninnetta/M +Ninnette/M +ninny/SM +Ninon/M +Nintendo/M +ninth +ninths +Niobe/M +niobium/MS +nipped +nipper/DMGS +nippiness/S +nipping/Y +nipple/GMSD +Nipponese +Nippon/M +nippy/TPR +nip/S +Nirenberg/M +nirvana/MS +Nirvana/S +nisei +Nisei/MS +Nissa/M +Nissan/M +Nisse/M +Nissie/M +Nissy/M +Nita/M +niter/M +nitpick/DRSJZG +nitrate/MGNXSD +nitration/M +nitric +nitride/MGS +nitriding/M +nitrification/SM +nitrite/MS +nitrocellulose/MS +nitrogenous +nitrogen/SM +nitroglycerin/MS +nitrous +nitwit/MS +nit/ZSMR +Niven/M +nixer/M +nix/GDSR +Nixie/M +Nixon/M +NJ +Nkrumah/M +NLRB +nm +NM +no/A +NOAA +Noach/M +Noah/M +Noak/M +Noami/M +Noam/M +Nobelist/SM +nobelium/MS +Nobel/M +Nobe/M +Nobie/M +nobility/MS +Noble/M +nobleman/M +noblemen +nobleness/SM +noblesse/M +noble/TPSR +noblewoman +noblewomen +nob/MY +nobody/MS +Noby/M +nocturnal/SY +nocturne/SM +nodal/Y +nodded +nodding +noddle/MSDG +noddy/M +node/MS +NoDoz/M +nod/SM +nodular +nodule/SM +Noelani/M +Noella/M +Noelle/M +Noell/M +Noellyn/M +Noel/MS +noel/S +Noelyn/M +Noe/M +Noemi/M +noes/S +noggin/SM +nohow +noise/GMSD +noiselessness/SM +noiseless/YP +noisemaker/M +noisemake/ZGR +noisily +noisiness/MS +noisome +noisy/TPR +Nola/M +Nolana/M +Noland/M +Nolan/M +Nolie/M +Nollie/M +Noll/M +Nolly/M +No/M +nomadic +nomad/SM +Nome/M +nomenclature/MS +Nomi/M +nominalized +nominal/K +nominally +nominals +nominate/CDSAXNG +nomination/MAC +nominative/SY +nominator/CSM +nominee/MS +non +nonabrasive +nonabsorbent/S +nonacademic/S +nonacceptance/MS +nonacid/MS +nonactive +nonadaptive +nonaddictive +nonadhesive +nonadjacent +nonadjustable +nonadministrative +nonage/MS +nonagenarian/MS +nonaggression/SM +nonagricultural +Nonah/M +nonalcoholic/S +nonaligned +nonalignment/SM +nonallergic +Nona/M +nonappearance/MS +nonassignable +nonathletic +nonattendance/SM +nonautomotive +nonavailability/SM +nonbasic +nonbeliever/SM +nonbelligerent/S +nonblocking +nonbreakable +nonburnable +nonbusiness +noncaloric +noncancerous +noncarbohydrate/M +nonce/MS +nonchalance/SM +nonchalant/YP +nonchargeable +nonclerical/S +nonclinical +noncollectable +noncombatant/MS +noncombustible/S +noncommercial/S +noncommissioned +noncommittal/Y +noncom/MS +noncommunicable +noncompeting +noncompetitive +noncompliance/MS +noncomplying/S +noncomprehending +nonconducting +nonconductor/MS +nonconforming +nonconformist/SM +nonconformity/SM +nonconsecutive +nonconservative +nonconstructive +noncontagious +noncontiguous +noncontinuous +noncontributing +noncontributory +noncontroversial +nonconvertible +noncooperation/SM +noncorroding/S +noncorrosive +noncredit +noncriminal/S +noncritical +noncrystalline +noncumulative +noncustodial +noncyclic +nondairy +nondecreasing +nondeductible +nondelivery/MS +nondemocratic +nondenominational +nondepartmental +nondepreciating +nondescript/YS +nondestructive/Y +nondetachable +nondeterminacy +nondeterminate/Y +nondeterminism +nondeterministic +nondeterministically +nondisciplinary +nondisclosure/SM +nondiscrimination/SM +nondiscriminatory +nondramatic +nondrinker/SM +nondrying +nondurable +noneconomic +noneducational +noneffective/S +nonelastic +nonelectrical +nonelectric/S +nonemergency +nonempty +nonenforceable +nonentity/MS +nonequivalence/M +nonequivalent/S +none/S +nones/M +nonessential/S +nonesuch/SM +nonetheless +nonevent/MS +nonexchangeable +nonexclusive +nonexempt +nonexistence/MS +nonexistent +nonexplosive/S +nonextensible +nonfactual +nonfading +nonfat +nonfatal +nonfattening +nonferrous +nonfictional +nonfiction/SM +nonflammable +nonflowering +nonfluctuating +nonflying +nonfood/M +nonfreezing +nonfunctional +nongovernmental +nongranular +nonhazardous +nonhereditary +nonhuman +nonidentical +Nonie/M +Noni/M +noninclusive +nonindependent +nonindustrial +noninfectious +noninflammatory +noninflationary +noninflected +nonintellectual/S +noninteracting +noninterchangeable +noninterference/MS +nonintervention/SM +nonintoxicating +nonintuitive +noninvasive +nonionic +nonirritating +nonjudgmental +nonjudicial +nonlegal +nonlethal +nonlinearity/MS +nonlinear/Y +nonlinguistic +nonliterary +nonliving +nonlocal +nonmagical +nonmagnetic +nonmalignant +nonmember/SM +nonmetallic +nonmetal/MS +nonmigratory +nonmilitant/S +nonmilitary +Nonnah/M +Nonna/M +nonnarcotic/S +nonnative/S +nonnegative +nonnegotiable +nonnuclear +nonnumerical/S +nonobjective +nonobligatory +nonobservance/MS +nonobservant +nonoccupational +nonoccurence +nonofficial +nonogenarian +nonoperational +nonoperative +nonorthogonal +nonorthogonality +nonparallel/S +nonparametric +nonpareil/SM +nonparticipant/SM +nonparticipating +nonpartisan/S +nonpaying +nonpayment/SM +nonperformance/SM +nonperforming +nonperishable/S +nonperson/S +nonperturbing +nonphysical/Y +nonplus/S +nonplussed +nonplussing +nonpoisonous +nonpolitical +nonpolluting +nonporous +nonpracticing +nonprejudicial +nonprescription +nonprocedural/Y +nonproductive +nonprofessional/S +nonprofit/SB +nonprogrammable +nonprogrammer +nonproliferation/SM +nonpublic +nonpunishable +nonracial +nonradioactive +nonrandom +nonreactive +nonreciprocal/S +nonreciprocating +nonrecognition/SM +nonrecoverable +nonrecurring +nonredeemable +nonreducing +nonrefillable +nonrefundable +nonreligious +nonrenewable +nonrepresentational +nonresidential +nonresident/SM +nonresidual +nonresistance/SM +nonresistant/S +nonrespondent/S +nonresponse +nonrestrictive +nonreturnable/S +nonrhythmic +nonrigid +nonsalaried +nonscheduled +nonscientific +nonscoring +nonseasonal +nonsectarian +nonsecular +nonsegregated +nonsense/MS +nonsensicalness/M +nonsensical/PY +nonsensitive +nonsexist +nonsexual +nonsingular +nonskid +nonslip +nonsmoker/SM +nonsmoking +nonsocial +nonspeaking +nonspecialist/MS +nonspecializing +nonspecific +nonspiritual/S +nonstaining +nonstandard +nonstarter/SM +nonstick +nonstop +nonstrategic +nonstriking +nonstructural +nonsuccessive +nonsupervisory +nonsupport/GS +nonsurgical +nonsustaining +nonsympathizer/M +nontarnishable +nontaxable/S +nontechnical/Y +nontenured +nonterminal/MS +nonterminating +nontermination/M +nontheatrical +nonthinking/S +nonthreatening +nontoxic +nontraditional +nontransferable +nontransparent +nontrivial +nontropical +nonuniform +nonunion/S +nonuser/SM +nonvenomous +nonverbal/Y +nonveteran/MS +nonviable +nonviolence/SM +nonviolent/Y +nonvirulent +nonvocal +nonvocational +nonvolatile +nonvolunteer/S +nonvoter/MS +nonvoting +nonwhite/SM +nonworking +nonyielding +nonzero +noodle/GMSD +nook/MS +noonday/MS +noon/GDMS +nooning/M +noontide/MS +noontime/MS +noose/SDGM +nope/S +NORAD/M +noradrenalin +noradrenaline/M +Norah/M +Nora/M +Norbert/M +Norberto/M +Norbie/M +Norby/M +Nordhoff/M +Nordic/S +Nordstrom/M +Norean/M +Noreen/M +Norene/M +Norfolk/M +nor/H +Norina/M +Norine/M +normalcy/MS +normality/SM +normalization/A +normalizations +normalization's +normalized/AU +normalizes/AU +normalize/SRDZGB +normal/SY +Norma/M +Normand/M +Normandy/M +Norman/SM +normativeness/M +normative/YP +Normie/M +norm/SMGD +Normy/M +Norplant +Norrie/M +Norri/SM +Norristown/M +Norry/M +Norse +Norseman/M +Norsemen +Northampton/M +northbound +northeastern +northeaster/YM +Northeast/SM +northeastward/S +northeast/ZSMR +northerly/S +norther/MY +Northerner/M +northernmost +northern/RYZS +Northfield/M +northing/M +northland +North/M +northmen +north/MRGZ +Northrop/M +Northrup/M +norths +Norths +Northumberland/M +northward/S +northwestern +northwester/YM +northwest/MRZS +Northwest/MS +northwestward/S +Norton/M +Norwalk/M +Norway/M +Norwegian/S +Norwich/M +Norw/M +nosebag/M +nosebleed/SM +nosecone/S +nosedive/DSG +nosed/V +nosegay/MS +nose/M +Nosferatu/M +nos/GDS +nosh/MSDG +nosily +nosiness/MS +nosing/M +nostalgia/SM +nostalgically +nostalgic/S +Nostradamus/M +Nostrand/M +nostril/SM +nostrum/SM +nosy/SRPMT +notability/SM +notableness/M +notable/PS +notably +notarial +notarization/S +notarize/DSG +notary/MS +notate/VGNXSD +notational/CY +notation/CMSF +notative/CF +notch/MSDG +not/DRGB +notebook/MS +note/CSDFG +notedness/M +noted/YP +notepad/S +notepaper/MS +note's +noteworthiness/SM +noteworthy/P +nothingness/SM +nothing/PS +noticeable/U +noticeably +noticeboard/S +noticed/U +notice/MSDG +notifiable +notification/M +notifier/M +notify/NGXSRDZ +notional/Y +notion/MS +notoriety/S +notoriousness/M +notorious/YP +Notre/M +Nottingham/M +notwithstanding +Nouakchott/M +nougat/MS +Noumea/M +noun/SMK +nourish/DRSGL +nourished/U +nourisher/M +nourishment/SM +nous/M +nouveau +nouvelle +novae +Novak/M +Nova/M +nova/MS +novelette/SM +Novelia/M +novelist/SM +novelization/S +novelize/GDS +Novell/SM +novella/SM +novel/SM +novelty/MS +November/SM +novena/SM +novene +Novgorod/M +novice/MS +novitiate/MS +Nov/M +Novocaine/M +Novocain/S +Novokuznetsk/M +Novosibirsk/M +NOW +nowadays +noway/S +Nowell/M +nowhere/S +nowise +now/S +noxiousness/M +noxious/PY +Noyce/M +Noyes/M +nozzle/MS +Np +NP +NRA +nroff/M +N's +NS +n's/CI +NSF +n/T +NT +nth +nuance/SDM +nubbin/SM +nubby/RT +Nubia/M +Nubian/M +nubile +nub/MS +nuclear/K +nuclease/M +nucleated/A +nucleate/DSXNG +nucleation/M +nucleic +nuclei/M +nucleoli +nucleolus/M +nucleon/MS +nucleotide/MS +nucleus/M +nuclide/M +nude/CRS +nudely +nudeness/M +nudest +nudge/GSRD +nudger/M +nudism/MS +nudist/MS +nudity/MS +nugatory +Nugent/M +nugget/SM +nuisance/MS +nuke/DSMG +Nukualofa +null/DSG +nullification/M +nullifier/M +nullify/RSDXGNZ +nullity/SM +nu/M +numbered/UA +numberer/M +numberless +numberplate/M +number/RDMGJ +numbers/A +Numbers/M +numbing/Y +numbness/MS +numb/SGZTYRDP +numbskull's +numerable/IC +numeracy/SI +numeral/YMS +numerate/SDNGX +numerates/I +numeration/M +numerator/MS +numerical/Y +numeric/S +numerological +numerologist/S +numerology/MS +numerousness/M +numerous/YP +numinous/S +numismatic/S +numismatics/M +numismatist/MS +numskull/SM +Nunavut/M +nuncio/SM +Nunez/M +Nunki/M +nun/MS +nunnery/MS +nuptial/S +Nuremberg/M +Nureyev/M +nursemaid/MS +nurser/M +nurseryman/M +nurserymen +nursery/MS +nurse/SRDJGMZ +nursling/M +nurturer/M +nurture/SRDGZM +nus +nutate/NGSD +nutation/M +nutcracker/M +nutcrack/RZ +nuthatch/SM +nutmeat/SM +nutmegged +nutmegging +nutmeg/MS +nut/MS +nutpick/MS +Nutrasweet/M +nutria/SM +nutrient/MS +nutriment/MS +nutritional/Y +nutritionist/MS +nutrition/SM +nutritiousness/MS +nutritious/PY +nutritive/Y +nutshell/MS +nutted +nuttiness/SM +nutting +nutty/TRP +nuzzle/GZRSD +NV +NW +NWT +NY +Nyasa/M +NYC +Nydia/M +Nye/M +Nyerere/M +nylon/SM +nymphet/MS +nymph/M +nympholepsy/M +nymphomaniac/S +nymphomania/MS +nymphs +Nyquist/M +NYSE +Nyssa/M +NZ +o +O +oafishness/S +oafish/PY +oaf/MS +Oahu/M +Oakland/M +Oakley/M +Oakmont/M +oak/SMN +oakum/MS +oakwood +oar/GSMD +oarlock/MS +oarsman/M +oarsmen +oarswoman +oarswomen +OAS +oases +oasis/M +oatcake/MS +oater/M +Oates/M +oath/M +oaths +oatmeal/SM +oat/SMNR +Oaxaca/M +ob +OB +Obadiah/M +Obadias/M +obbligato/S +obduracy/S +obdurateness/S +obdurate/PDSYG +Obediah/M +obedience/EMS +obedient/EY +Obed/M +obeisance/MS +obeisant/Y +obelisk/SM +Oberlin/M +Oberon/M +obese +obesity/MS +obey/EDRGS +obeyer/EM +obfuscate/SRDXGN +obfuscation/M +obfuscatory +Obidiah/M +Obie/M +obi/MDGS +obit/SMR +obituary/SM +obj +objectify/GSDXN +objectionableness/M +objectionable/U +objectionably +objection/SMB +objectiveness/MS +objective/PYS +objectivity/MS +objector/SM +object/SGVMD +objurgate/GNSDX +objurgation/M +oblate/NYPSX +oblation/M +obligate/NGSDXY +obligational +obligation/M +obligatorily +obligatory +obliged/E +obliger/M +obliges/E +oblige/SRDG +obligingness/M +obliging/PY +oblique/DSYGP +obliqueness/S +obliquity/MS +obliterate/VNGSDX +obliteration/M +obliterative/Y +oblivion/MS +obliviousness/MS +oblivious/YP +oblongness/M +oblong/SYP +obloquies +obloquy/M +Ob/MD +obnoxiousness/MS +obnoxious/YP +oboe/SM +oboist/S +obos +O'Brien/M +obs +obscene/RYT +obscenity/MS +obscurantism/MS +obscurantist/MS +obscuration +obscureness/M +obscure/YTPDSRGL +obscurity/MS +obsequies +obsequiousness/S +obsequious/YP +obsequy +observability/M +observable/SU +observably +observance/MS +observantly +observants +observant/U +observational/Y +observation/MS +observatory/MS +observed/U +observer/M +observe/ZGDSRB +observing/Y +obsess/GVDS +obsessional +obsession/MS +obsessiveness/S +obsessive/PYS +obsidian/SM +obsolesce/GSD +obsolescence/S +obsolescent/Y +obsolete/GPDSY +obsoleteness/M +obstacle/SM +obstetrical +obstetrician/SM +obstetric/S +obstetrics/M +obstinacy/SM +obstinateness/M +obstinate/PY +obstreperousness/SM +obstreperous/PY +obstructed/U +obstructer/M +obstructionism/SM +obstructionist/MS +obstruction/SM +obstructiveness/MS +obstructive/PSY +obstruct/RDVGS +obtainable/U +obtainably +obtain/LSGDRB +obtainment/S +obtrude/DSRG +obtruder/M +obtrusion/S +obtrusiveness/MSU +obtrusive/UPY +obtuseness/S +obtuse/PRTY +obverse/YS +obviate/XGNDS +obviousness/SM +obvious/YP +Oby/M +ocarina/MS +O'Casey +Occam/M +occasional/Y +occasion/MDSJG +Occidental/S +occidental/SY +occident/M +Occident/SM +occipital/Y +occlude/GSD +occlusion/MS +occlusive/S +occulter/M +occultism/SM +occult/SRDYG +occupancy/SM +occupant/MS +occupational/Y +occupation/SAM +occupied/AU +occupier/M +occupies/A +occupy/RSDZG +occur/AS +occurred/A +occurrence/SM +occurring/A +oceanfront/MS +oceangoing +Oceania/M +oceanic +ocean/MS +oceanographer/SM +oceanographic +oceanography/SM +oceanology/MS +oceanside +Oceanside/M +Oceanus/M +ocelot/SM +ocher/DMGS +Ochoa/M +o'clock +O'Clock +O'Connell/M +O'Connor/M +Oconomowoc/M +OCR +octagonal/Y +octagon/SM +octahedral +octahedron/M +octal/S +octane/MS +octant/M +octave/MS +Octavia/M +Octavian/M +Octavio/M +Octavius/M +octavo/MS +octennial +octet/SM +octile +octillion/M +Oct/M +October/MS +octogenarian/MS +octopi +octopus/SM +octoroon/M +ocular/S +oculist/SM +OD +odalisque/SM +oddball/SM +oddity/MS +oddment/MS +oddness/MS +odd/TRYSPL +Odele/M +Odelia/M +Odelinda/M +Odella/M +Odelle/M +Odell/M +O'Dell/M +ode/MDRS +Ode/MR +Oderberg/MS +Oder/M +Odessa/M +Odets/M +Odetta/M +Odette/M +Odey/M +Odie/M +Odilia/M +Odille/M +Odin/M +odiousness/MS +odious/PY +Odis/M +odium/MS +Odo/M +odometer/SM +Odom/M +O'Donnell/M +odor/DMS +odoriferous +odorless +odorous/YP +ODs +O'Dwyer/M +Ody/M +Odysseus/M +Odyssey/M +odyssey/S +OE +OED +oedipal +Oedipal/Y +Oedipus/M +OEM/M +OEMS +oenology/MS +oenophile/S +o'er +O'Er +Oersted/M +oesophagi +oeuvre/SM +Ofelia/M +Ofella/M +offal/MS +offbeat/MS +offcuts +Offenbach/M +offender/M +offend/SZGDR +offense/MSV +offensively/I +offensiveness/MSI +offensive/YSP +offerer/M +offering/M +offer/RDJGZ +offertory/SM +offhand/D +offhandedness/S +offhanded/YP +officeholder/SM +officemate/S +officer/GMD +officership/S +office/SRMZ +officialdom/SM +officialism/SM +officially/U +official/PSYM +officiant/SM +officiate/XSDNG +officiation/M +officiator/MS +officio +officiousness/MS +officious/YP +offing/M +offish +offload/GDS +offprint/GSDM +offramp +offset/SM +offsetting +offshoot/MS +offshore +offside/RS +offspring/M +offstage/S +off/SZGDRJ +offtrack +Ofilia/M +of/K +often/RT +oftentimes +oft/NRT +ofttimes +Ogbomosho/M +Ogdan/M +Ogden/M +Ogdon/M +Ogilvy/M +ogive/M +Oglethorpe/M +ogle/ZGDSR +ogreish +ogre/MS +ogress/S +oh +OH +O'Hara +O'Hare/M +O'Higgins +Ohioan/S +Ohio/M +ohmic +ohmmeter/MS +ohm/SM +oho/S +ohs +OHSA/M +oilcloth/M +oilcloths +oiler/M +oilfield/MS +oiliness/SM +oilman/M +oil/MDRSZG +oilmen +oilseed/SM +oilskin/MS +oily/TPR +oink/GDS +ointment/SM +Oise/M +OJ +Ojibwa/SM +Okamoto/M +okapi/SM +Okayama/M +okay/M +Okeechobee/M +O'Keeffe +Okefenokee +Okhotsk/M +Okinawa/M +Okinawan/S +Oklahoma/M +Oklahoman/SM +Okla/M +OK/MDG +okra/MS +OKs +Oktoberfest +Olaf/M +Olag/M +Ola/M +Olav/M +Oldenburg/M +olden/DG +Oldfield/M +oldie/MS +oldish +oldness/S +Oldsmobile/M +oldster/SM +Olduvai/M +old/XTNRPS +ol +oleaginous +oleander/SM +O'Leary/M +olefin/M +Oleg/M +Ole/MV +Olenek/M +Olenka/M +Olen/M +Olenolin/M +oleomargarine/SM +oleo/S +oles +olfactory +Olga/M +Olia/M +oligarchic +oligarchical +oligarch/M +oligarchs +oligarchy/SM +Oligocene +oligopolistic +oligopoly/MS +Olimpia/M +Olin/M +olive/MSR +Olive/MZR +Oliver/M +Olivero/M +Olivette/M +Olivetti/M +Olivia/M +Olivier/M +Olivie/RM +Oliviero/M +Oliy/M +Ollie/M +Olly/M +Olmec +Olmsted/M +Olsen/M +Olson/M +Olva/M +Olvan/M +Olwen/M +Olympe/M +Olympiad/MS +Olympian/S +Olympia/SM +Olympic/S +Olympie/M +Olympus/M +Omaha/SM +Oman/M +Omar/M +ombudsman/M +ombudsmen +Omdurman/M +omega/MS +omelet/SM +omelette's +omen/DMG +Omero/M +omicron/MS +ominousness/SM +ominous/YP +omission/MS +omit/S +omitted +omitting +omnibus/MS +omni/M +omnipotence/SM +Omnipotent +omnipotent/SY +omnipresence/MS +omnipresent/Y +omniscience/SM +omniscient/YS +omnivore/MS +omnivorousness/MS +omnivorous/PY +oms +Omsk/M +om/XN +ON +onanism/M +Onassis/M +oncer/M +once/SR +oncogene/S +oncologist/S +oncology/SM +oncoming/S +Ondrea/M +Oneal/M +Onega/M +Onegin/M +Oneida/SM +O'Neil +O'Neill +oneness/MS +one/NPMSX +oner/M +onerousness/SM +onerous/YP +oneself +onetime +oneupmanship +Onfre/M +Onfroi/M +ongoing/S +Onida/M +onion/GDM +onionskin/MS +onlooker/MS +onlooking +only/TP +Onofredo/M +Ono/M +onomatopoeia/SM +onomatopoeic +onomatopoetic +Onondaga/MS +onrush/GMS +on/RY +ons +Onsager/M +onset/SM +onsetting +onshore +onside +onslaught/MS +Ontarian/S +Ontario/M +Ont/M +onto +ontogeny/SM +ontological/Y +ontology/SM +onus/SM +onward/S +onyx/MS +oodles +ooh/GD +oohs +oolitic +Oona/M +OOo/M +oops/S +Oort/M +ooze/GDS +oozy/RT +opacity/SM +opalescence/S +opalescent/Y +Opalina/M +Opaline/M +Opal/M +opal/SM +opaque/GTPYRSD +opaqueness/SM +opcode/MS +OPEC +Opel/M +opencast +opened/AU +opener/M +openhandedness/SM +openhanded/P +openhearted +opening/M +openness/S +OpenOffice.org/M +opens/A +openwork/MS +open/YRDJGZTP +operable/I +operandi +operand/SM +operant/YS +opera/SM +operate/XNGVDS +operatically +operatic/S +operationalization/S +operationalize/D +operational/Y +operation/M +operative/IP +operatively +operativeness/MI +operatives +operator/SM +operetta/MS +ope/S +Ophelia/M +Ophelie/M +Ophiuchus/M +ophthalmic/S +ophthalmologist/SM +ophthalmology/MS +opiate/GMSD +opine/XGNSD +opinionatedness/M +opinionated/PY +opinion/M +opioid +opium/MS +opossum/SM +opp +Oppenheimer/M +opponent/MS +opportune/IY +opportunism/SM +opportunistic +opportunistically +opportunist/SM +opportunity/MS +oppose/BRSDG +opposed/U +opposer/M +oppositeness/M +opposite/SXYNP +oppositional +opposition/M +oppress/DSGV +oppression/MS +oppressiveness/MS +oppressive/YP +oppressor/MS +opprobrious/Y +opprobrium/SM +Oprah/M +ops +opt/DSG +opthalmic +opthalmologic +opthalmology +optical/Y +optician/SM +optic/S +optics/M +optima +optimality +optimal/Y +optimise's +optimism/SM +optimistic +optimistically +optimist/SM +optimization/SM +optimize/DRSZG +optimized/U +optimizer/M +optimizes/U +optimum/SM +optionality/M +optional/YS +option/GDMS +optoelectronic +optometric +optometrist/MS +optometry/SM +opulence/SM +opulent/Y +opus/SM +op/XGDN +OR +oracle/GMSD +oracular +Oralee/M +Oralia/M +Oralie/M +Oralla/M +Oralle/M +oral/YS +Ora/M +orangeade/MS +Orange/M +orange/MS +orangery/SM +orangutan/MS +Oranjestad/M +Oran/M +orate/SDGNX +oration/M +oratorical/Y +oratorio/MS +orator/MS +oratory/MS +Orazio/M +Orbadiah/M +orbicular +orbiculares +orbital/MYS +orbit/MRDGZS +orb/SMDG +orchard/SM +orchestral/Y +orchestra/MS +orchestrate/GNSDX +orchestrater's +orchestration/M +orchestrator/M +orchid/SM +ordainer/M +ordainment/MS +ordain/SGLDR +ordeal/SM +order/AESGD +ordered/U +orderer +ordering/S +orderless +orderliness/SE +orderly/PS +order's/E +ordinal/S +ordinance/MS +ordinarily +ordinariness/S +ordinary/RSPT +ordinated +ordinate/I +ordinates +ordinate's +ordinating +ordination/SM +ordnance/SM +Ordovician +ordure/MS +oregano/SM +Oreg/M +Oregonian/S +Oregon/M +Orelee/M +Orelia/M +Orelie/M +Orella/M +Orelle/M +Orel/M +Oren/M +Ore/NM +ore/NSM +Oreo +Orestes +organdie's +organdy/MS +organelle/MS +organically/I +organic/S +organismic +organism/MS +organist/MS +organizable/UMS +organizational/MYS +organization/MEAS +organize/AGZDRS +organized/UE +organizer/MA +organizes/E +organizing/E +organ/MS +organometallic +organza/SM +orgasm/GSMD +orgasmic +orgiastic +orgy/SM +Oriana/M +oriel/MS +orientable +Oriental/S +oriental/SY +orientated/A +orientate/ESDXGN +orientates/A +orientation/AMES +orienteering/M +orienter +orient/GADES +orient's +Orient/SM +orifice/MS +orig +origami/MS +originality/SM +originally +original/US +originate/VGNXSD +origination/M +originative/Y +originator/SM +origin/MS +Orin/M +Orinoco/M +oriole/SM +Orion/M +orison/SM +Oriya/M +Orizaba/M +Orkney/M +Orland/M +Orlando/M +Orlan/M +Orleans +Orlick/M +Orlon/SM +Orly/M +ormolu/SM +or/MY +ornamental/SY +ornamentation/SM +ornament/GSDM +ornateness/SM +ornate/YP +orneriness/SM +ornery/PRT +ornithological +ornithologist/SM +ornithology/MS +orographic/M +orography/M +Orono/M +orotund +orotundity/MS +orphanage/MS +orphanhood/M +orphan/SGDM +Orpheus/M +Orphic +Orran/M +Orren/M +Orrin/M +orris/SM +Orr/MN +ors +Orsa/M +Orsola/M +Orson/M +Ortega/M +Ortensia/M +orthodontia/S +orthodontic/S +orthodontics/M +orthodontist/MS +orthodoxies +orthodoxly/U +Orthodox/S +orthodoxy's +orthodox/YS +orthodoxy/U +orthogonality/M +orthogonalization/M +orthogonalized +orthogonal/Y +orthographic +orthographically +orthography/MS +orthonormal +orthopedic/S +orthopedics/M +orthopedist/SM +orthophosphate/MS +orthorhombic +Ortiz/M +Orton/M +Orval/M +Orville/M +Orv/M +Orwellian +Orwell/M +o's +Osage/SM +Osaka/M +Osbert/M +Osborne/M +Osborn/M +Osbourne/M +Osbourn/M +Oscar/SM +Osceola/M +oscillate/SDXNG +oscillation/M +oscillator/SM +oscillatory +oscilloscope/SM +osculate/XDSNG +osculation/M +Osgood/M +OSHA +Oshawa/M +O'Shea/M +Oshkosh/M +osier/MS +Osiris/M +Oslo/M +Os/M +OS/M +Osman/M +osmium/MS +Osmond/M +osmoses +osmosis/M +osmotic +Osmund/M +osprey/SM +osseous/Y +Ossie/M +ossification/M +ossify/NGSDX +ostensible +ostensibly +ostentation/MS +ostentatiousness/M +ostentatious/PY +osteoarthritides +osteoarthritis/M +osteology/M +osteopathic +osteopath/M +osteopaths +osteopathy/MS +osteoporoses +osteoporosis/M +ostracise's +ostracism/MS +ostracize/GSD +Ostrander/M +ostrich/MS +Ostrogoth/M +Ostwald/M +O'Sullivan/M +Osvaldo/M +Oswald/M +Oswell/M +OT +OTB +OTC +Otes +Otha/M +Othelia/M +Othella/M +Othello/M +otherness/M +other/SMP +otherwise +otherworldly/P +otherworld/Y +Othilia/M +Othilie/M +Otho/M +otiose +Otis/M +OTOH +Ottawa/MS +otter/DMGS +Ottilie/M +Otto/M +Ottoman +ottoman/MS +Ouagadougou/M +oubliette/SM +ouch/SDG +oughtn't +ought/SGD +Ouija/MS +ounce/MS +our/S +ourself +ourselves +ouster/M +oust/RDGZS +outage/MS +outargue/GDS +outback/MRS +outbalance/GDS +outbidding +outbid/S +outboard/S +outboast/GSD +outbound/S +outbreak/SMG +outbroke +outbroken +outbuilding/SM +outburst/MGS +outcast/GSM +outclass/SDG +outcome/SM +outcropped +outcropping/S +outcrop/SM +outcry/MSDG +outdated/P +outdid +outdistance/GSD +outdoes +outdo/G +outdone +outdoor/S +outdoorsy +outdraw/GS +outdrawn +outdrew +outermost +outerwear/M +outface/SDG +outfall/MS +outfielder/M +outfield/RMSZ +outfight/SG +outfit/MS +outfitted +outfitter/MS +outfitting +outflank/SGD +outflow/SMDG +outfought +outfox/GSD +outgeneraled +outgoes +outgo/GJ +outgoing/P +outgrew +outgrip +outgrow/GSH +outgrown +outgrowth/M +outgrowths +outguess/SDG +outhit/S +outhitting +outhouse/SM +outing/M +outlaid +outlander/M +outlandishness/MS +outlandish/PY +outland/ZR +outlast/GSD +outlawry/M +outlaw/SDMG +outlay/GSM +outlet/SM +outliers +outline/SDGM +outlive/GSD +outlook/MDGS +outlying +outmaneuver/GSD +outmatch/SDG +outmigration +outmoded +outness/M +outnumber/GDS +outpaced +outpatient/SM +outperform/DGS +out/PJZGSDR +outplacement/S +outplay/GDS +outpoint/GDS +outpost/SM +outpouring/M +outpour/MJG +outproduce/GSD +output/SM +outputted +outputting +outrace/GSD +outrage/GSDM +outrageousness/M +outrageous/YP +outran +outrank/GSD +outr +outreach/SDG +outrider/MS +outrigger/SM +outright/Y +outrunning +outrun/S +outscore/GDS +outsell/GS +outset/MS +outsetting +outshine/SG +outshone +outshout/GDS +outsider/PM +outside/ZSR +outsize/S +outskirt/SM +outsmart/SDG +outsold +outsource/SDJG +outspend/SG +outspent +outspoke +outspokenness/SM +outspoken/YP +outspread/SG +outstanding/Y +outstate/NX +outstation/M +outstay/SDG +outstretch/GSD +outstripped +outstripping +outstrip/S +outtake/S +outvote/GSD +outwardness/M +outward/SYP +outwear/SG +outweigh/GD +outweighs +outwit/S +outwitted +outwitting +outwore +outwork/SMDG +outworn +ouzo/SM +oval/MYPS +ovalness/M +ova/M +ovarian +ovary/SM +ovate/SDGNX +ovation/GMD +ovenbird/SM +oven/MS +overabundance/MS +overabundant +overachieve/SRDGZ +overact/DGVS +overage/S +overaggressive +overallocation +overall/SM +overambitious +overanxious +overarching +overarm/GSD +overate +overattentive +overawe/GDS +overbalance/DSG +overbear/GS +overbearingness/M +overbearing/YP +overbidding +overbid/S +overbite/MS +overblown +overboard +overbold +overbook/SDG +overbore +overborne +overbought +overbuild/GS +overbuilt +overburdening/Y +overburden/SDG +overbuy/GS +overcame +overcapacity/M +overcapitalize/DSG +overcareful +overcast/GS +overcasting/M +overcautious +overcerebral +overcharge/DSG +overcloud/DSG +overcoating/M +overcoat/SMG +overcomer/M +overcome/RSG +overcommitment/S +overcompensate/XGNDS +overcompensation/M +overcomplexity/M +overcomplicated +overconfidence/MS +overconfident/Y +overconscientious +overconsumption/M +overcook/SDG +overcooled +overcorrection +overcritical +overcrowd/DGS +overcurious +overdecorate/SDG +overdependent +overdetermined +overdevelop/SDG +overdid +overdoes +overdo/G +overdone +overdose/DSMG +overdraft/SM +overdraw/GS +overdrawn +overdress/GDS +overdrew +overdrive/GSM +overdriven +overdrove +overdubbed +overdubbing +overdub/S +overdue +overeagerness/M +overeager/PY +overeater/M +overeat/GNRS +overeducated +overemotional +overemphases +overemphasis/M +overemphasize/GZDSR +overenthusiastic +overestimate/DSXGN +overestimation/M +overexcite/DSG +overexercise/SDG +overexert/GDS +overexertion/SM +overexploitation +overexploited +overexpose/GDS +overexposure/SM +overextend/DSG +overextension +overfall/M +overfed +overfeed/GS +overfill/GDS +overfishing +overflew +overflight/SM +overflow/DGS +overflown +overfly/GS +overfond +overfull +overgeneralize/GDS +overgenerous +overgraze/SDG +overgrew +overground +overgrow/GSH +overgrown +overgrowth/M +overgrowths +overhand/DGS +overhang/GS +overhasty +overhaul/GRDJS +overhead/S +overheard +overhearer/M +overhear/SRG +overheat/SGD +overhung +overincredulous +overindulgence/SM +overindulgent +overindulge/SDG +overinflated +overjoy/SGD +overkill/SDMG +overladed +overladen +overlaid +overlain +overland/S +overlap/MS +overlapped +overlapping +overlarge +overlay/GS +overleaf +overlie +overload/SDG +overlong +overlook/DSG +overlord/DMSG +overloud +overly/GRS +overmanning +overmaster/GSD +overmatching +overmodest +overmuch/S +overnice +overnight/SDRGZ +overoptimism/SM +overoptimistic +overpaid +overparticular +overpass/GMSD +overpay/LSG +overpayment/M +overplay/SGD +overpopulate/DSNGX +overpopulation/M +overpopulous +overpower/GSD +overpowering/Y +overpraise/DSG +overprecise +overpressure +overprice/SDG +overprint/DGS +overproduce/SDG +overproduction/S +overprotect/GVDS +overprotection/M +overqualified +overran +overrate/DSG +overreach/DSRG +overreaction/SM +overreact/SGD +overred +overrefined +overrepresented +overridden +overrider/M +override/RSG +overripe +overrode +overrule/GDS +overrunning +overrun/S +oversample/DG +oversaturate +oversaw +oversea/S +overseeing +overseen +overseer/M +oversee/ZRS +oversell/SG +oversensitiveness/S +oversensitive/P +oversensitivity +oversexed +overshadow/GSD +overshoe/SM +overshoot/SG +overshot/S +oversight/SM +oversimple +oversimplification/M +oversimplify/GXNDS +oversize/GS +oversleep/GS +overslept +oversoftness/M +oversoft/P +oversold +overspecialization/MS +overspecialize/GSD +overspend/SG +overspent +overspill/DMSG +overspread/SG +overstaffed +overstatement/SM +overstate/SDLG +overstay/GSD +overstepped +overstepping +overstep/S +overstimulate/DSG +overstock/SGD +overstraining +overstressed +overstretch/D +overstrict +overstrike/GS +overstrung +overstuffed +oversubscribe/SDG +oversubtle +oversupply/MDSG +oversuspicious +overtaken +overtake/RSZG +overtax/DSG +overthrew +overthrow/GS +overthrown +overtightened +overtime/MGDS +overtire/DSG +overtone/MS +overtook +overt/PY +overture/DSMG +overturn/SDG +overuse/DSG +overvalue/GSD +overview/MS +overweening +overweight/GSD +overwhelm/GDS +overwhelming/Y +overwinter/SDG +overwork/GSD +overwrap +overwrite/SG +overwritten +overwrote +overwrought +over/YGS +overzealousness/M +overzealous/P +Ovid/M +oviduct/SM +oviform +oviparous +ovoid/S +ovular +ovulate/GNXDS +ovulatory +ovule/MS +ovum/MS +ow/DYG +Owen/MS +owe/S +owlet/SM +owl/GSMDR +owlishness/M +owlish/PY +owned/U +own/EGDS +ownership/MS +owner/SM +oxalate/M +oxalic +oxaloacetic +oxblood/S +oxbow/SM +oxcart/MS +oxen/M +oxford/MS +Oxford/MS +oxidant/SM +oxidate/NVX +oxidation/M +oxidative/Y +oxide/SM +oxidization/MS +oxidized/U +oxidize/JDRSGZ +oxidizer/M +oxidizes/A +ox/MNS +Oxnard +Oxonian +oxtail/M +Oxus/M +oxyacetylene/MS +oxygenate/XSDMGN +oxygenation/M +oxygen/MS +oxyhydroxides +oxymora +oxymoron/M +oyster/GSDM +oystering/M +oz +Ozark/SM +Oz/M +ozone/SM +Ozymandias/M +Ozzie/M +Ozzy/M +P +PA +Pablo/M +Pablum/M +pablum/S +Pabst/M +pabulum/SM +PAC +pace/DRSMZG +Pace/M +pacemaker/SM +pacer/M +pacesetter/MS +pacesetting +Pacheco/M +pachyderm/MS +pachysandra/MS +pacific +pacifically +pacification/M +Pacific/M +pacifier/M +pacifism/MS +pacifistic +pacifist/MS +pacify/NRSDGXZ +package/ARSDG +packaged/U +packager/S +package's +packages/U +packaging/SM +Packard/SM +packed/AU +packer/MUS +packet/MSDG +pack/GZSJDRMB +packhorse/M +packinghouse/S +packing/M +packsaddle/SM +Packston/M +packs/UA +Packwood/M +Paco/M +Pacorro/M +pact/SM +Padang/M +padded/U +Paddie/M +padding/SM +paddle/MZGRSD +paddler/M +paddock/SDMG +Paddy/M +paddy/SM +Padget/M +Padgett/M +Padilla/M +padlock/SGDM +pad/MS +Padraic/M +Padraig/M +padre/MS +Padrewski/M +Padriac/M +paean/MS +paediatrician/MS +paediatrics/M +paedophilia's +paella/SM +paeony/M +Paganini/M +paganism/MS +pagan/SM +pageantry/SM +pageant/SM +pageboy/SM +paged/U +pageful +Page/M +page/MZGDRS +pager/M +paginate/DSNGX +Paglia/M +pagoda/MS +Pahlavi/M +paid/AU +Paige/M +pailful/SM +Pail/M +pail/SM +Paine/M +painfuller +painfullest +painfulness/MS +painful/YP +pain/GSDM +painkiller/MS +painkilling +painlessness/S +painless/YP +painstaking/SY +paint/ADRZGS +paintbox/M +paintbrush/SM +painted/U +painterly/P +painter/YM +painting/SM +paint's +paintwork +paired/UA +pair/JSDMG +pairs/A +pairwise +paisley/MS +pajama/MDS +Pakistani/S +Pakistan/M +palace/MS +paladin/MS +palaeolithic +palaeontologists +palaeontology/M +palanquin/MS +palatability/M +palatableness/M +palatable/P +palatalization/MS +palatalize/SDG +palatal/YS +palate/BMS +palatial/Y +palatinate/SM +Palatine +palatine/S +palaver/GSDM +paleface/SM +Palembang/M +paleness/S +Paleocene +Paleogene +paleographer/SM +paleography/SM +paleolithic +Paleolithic +paleontologist/S +paleontology/MS +Paleozoic +Palermo/M +pale/SPY +Palestine/M +Palestinian/S +Palestrina/M +palette/MS +Paley/M +palfrey/MS +palimony/S +palimpsest/MS +palindrome/MS +palindromic +paling/M +palisade/MGSD +Palisades/M +palish +Palladio/M +palladium/SM +pallbearer/SM +palletized +pallet/SMGD +pall/GSMD +palliate/SDVNGX +palliation/M +palliative/SY +pallidness/MS +pallid/PY +Pall/M +pallor/MS +palmate +palmer/M +Palmer/M +Palmerston/M +palmetto/MS +palm/GSMDR +palmist/MS +palmistry/MS +Palm/MR +Palmolive/M +palmtop/S +Palmyra/M +palmy/RT +Palo/M +Paloma/M +Palomar/M +palomino/MS +palpable +palpably +palpate/SDNGX +palpation/M +palpitate/NGXSD +palpitation/M +pal/SJMDRYTG +palsy/GSDM +paltriness/SM +paltry/TRP +paludal +Pa/M +Pamela/M +Pamelina/M +Pamella/M +pa/MH +Pamirs +Pam/M +Pammie/M +Pammi/M +Pammy/M +pampas/M +pamperer/M +pamper/RDSG +Pampers +pamphleteer/DMSG +pamphlet/SM +panacea/MS +panache/MS +Panama/MS +Panamanian/S +panama/S +pancake/MGSD +Panchito/M +Pancho/M +panchromatic +pancreas/MS +pancreatic +panda/SM +pandemic/S +pandemonium/SM +pander/ZGRDS +Pandora/M +panegyric/SM +pane/KMS +paneling/M +panelist/MS +panelization +panelized +panel/JSGDM +Pangaea/M +pang/GDMS +pangolin/M +panhandle/RSDGMZ +panicked +panicking +panicky/RT +panic/SM +panier's +panjandrum/M +Pankhurst/M +Pan/M +Panmunjom/M +panned +pannier/SM +panning +panoply/MSD +panorama/MS +panoramic +panpipes +Pansie/M +pan/SMD +Pansy/M +pansy/SM +Pantagruel/M +Pantaloon/M +pantaloons +pant/GDS +pantheism/MS +pantheistic +pantheist/S +pantheon/MS +panther/SM +pantie/SM +pantiled +pantograph/M +pantomime/SDGM +pantomimic +pantomimist/SM +pantry/SM +pantsuit/SM +pantyhose +pantyliner +pantywaist/SM +Panza/M +Paola/M +Paoli/M +Paolina/M +Paolo/M +papacy/SM +Papagena/M +Papageno/M +papal/Y +papa/MS +paparazzi +papaw/SM +papaya/MS +paperback/GDMS +paperboard/MS +paperboy/SM +paperer/M +papergirl/SM +paper/GJMRDZ +paperhanger/SM +paperhanging/SM +paperiness/M +paperless +paperweight/MS +paperwork/SM +papery/P +papillae +papilla/M +papillary +papist/MS +papoose/SM +Pappas/M +papped +papping +pappy/RST +paprika/MS +pap/SZMNR +papyri +papyrus/M +Paquito/M +parable/MGSD +parabola/MS +parabolic +paraboloidal/M +paraboloid/MS +Paracelsus/M +paracetamol/M +parachuter/M +parachute/RSDMG +parachutist/MS +Paraclete/M +parader/M +parade/RSDMZG +paradigmatic +paradigm/SM +paradisaic +paradisaical +Paradise/M +paradise/MS +paradoxic +paradoxicalness/M +paradoxical/YP +paradox/MS +paraffin/GSMD +paragon/SGDM +paragrapher/M +paragraph/MRDG +paragraphs +Paraguayan/S +Paraguay/M +parakeet/MS +paralegal/S +paralinguistic +parallax/SM +parallel/DSG +paralleled/U +parallelepiped/MS +parallelism/SM +parallelization/MS +parallelize/ZGDSR +parallelogram/MS +paralysis/M +paralytically +paralytic/S +paralyzedly/S +paralyzed/Y +paralyzer/M +paralyze/ZGDRS +paralyzingly/S +paralyzing/Y +paramagnetic +paramagnet/M +Paramaribo/M +paramecia +paramecium/M +paramedical/S +paramedic/MS +parameterization/SM +parameterize/BSDG +parameterized/U +parameterless +parameter/SM +parametric +parametrically +parametrization +parametrize/DS +paramilitary/S +paramount/S +paramour/MS +para/MS +Paramus/M +Paran +paranoiac/S +paranoia/SM +paranoid/S +paranormal/SY +parapet/SMD +paraphernalia +paraphrase/GMSRD +paraphraser/M +paraplegia/MS +paraplegic/S +paraprofessional/SM +parapsychologist/S +parapsychology/MS +paraquat/S +parasite/SM +parasitically +parasitic/S +parasitism/SM +parasitologist/M +parasitology/M +parasol/SM +parasympathetic/S +parathion/SM +parathyroid/S +paratrooper/M +paratroop/RSZ +paratyphoid/S +parboil/DSG +parceled/U +parceling/M +parcel/SGMD +Parcheesi/M +parch/GSDL +parchment/SM +PARC/M +pardonableness/M +pardonable/U +pardonably/U +pardoner/M +pardon/ZBGRDS +paregoric/SM +parentage/MS +parental/Y +parenteral +parentheses +parenthesis/M +parenthesize/GSD +parenthetic +parenthetical/Y +parenthood/MS +parent/MDGJS +pare/S +paresis/M +pares/S +Pareto/M +parfait/SM +pariah/M +pariahs +parietal/S +parimutuel/S +paring/M +parishioner/SM +parish/MS +Parisian/SM +Paris/M +parity/ESM +parka/MS +Parke/M +Parker/M +Parkersburg/M +park/GJZDRMS +Parkhouse/M +parking/M +Parkinson/M +parkish +parkland/M +parklike +Parkman +Park/RMS +parkway/MS +parlance/SM +parlay/DGS +parley/MDSG +parliamentarian/SM +parliamentary/U +parliament/MS +Parliament/MS +parlor/SM +parlous +Parmesan/S +parmigiana +Parnassus/SM +Parnell/M +parochialism/SM +parochiality +parochial/Y +parodied/U +parodist/SM +parody/SDGM +parolee/MS +parole/MSDG +paroxysmal +paroxysm/MS +parquetry/SM +parquet/SMDG +parrakeet's +parred +parricidal +parricide/MS +parring +Parrish/M +Parr/M +Parrnell/M +parrot/GMDS +parrotlike +parry/GSD +Parry/M +parse +parsec/SM +parsed/U +Parsee's +parser/M +Parsifal/M +parsimonious/Y +parsimony/SM +pars/JDSRGZ +parsley/MS +parsnip/MS +parsonage/MS +parson/MS +Parsons/M +partaken +partaker/M +partake/ZGSR +part/CDGS +parterre/MS +parter/S +parthenogeneses +parthenogenesis/M +Parthenon/M +Parthia/M +partiality/MS +partial/SY +participant/MS +participate/NGVDSX +participation/M +participator/S +participatory +participial/Y +participle/MS +particleboard/S +particle/MS +particolored +particularistic +particularity/SM +particularization/MS +particularize/GSD +particular/SY +particulate/S +parting/MS +partisanship/SM +partisan/SM +partition/AMRDGS +partitioned/U +partitioner/M +partitive/S +partizan's +partly +partner/DMGS +partnership/SM +partook +partridge/MS +part's +parturition/SM +partway +party/RSDMG +parvenu/SM +par/ZGSJBMDR +Pasadena/M +PASCAL +Pascale/M +Pascal/M +pascal/SM +paschal/S +pasha/MS +Paso/M +Pasquale/M +pas/S +passably +passage/MGSD +passageway/MS +Passaic/M +passband +passbook/MS +passel/MS +pass/M +passenger/MYS +passerby +passer/M +passersby +passim +passing/Y +passionated +passionate/EYP +passionateness/EM +passionates +passionating +passioned +passionflower/MS +passioning +passionless +passion/SEM +Passion/SM +passivated +passiveness/S +passive/SYP +passivity/S +pass/JGVBZDSR +passkey/SM +passmark +passover +Passover/MS +passport/SM +password/SDM +pasta/MS +pasteboard/SM +pasted/UA +pastel/MS +paste/MS +Pasternak/M +pastern/SM +pasteup +pasteurization/MS +pasteurized/U +pasteurizer/M +pasteurize/RSDGZ +Pasteur/M +pastiche/MS +pastille/SM +pastime/SM +pastiness/SM +pastoralization/M +pastoral/SPY +pastorate/MS +pastor/GSDM +past/PGMDRS +pastrami/MS +pastry/SM +past's/A +pasts/A +pasturage/SM +pasture/MGSRD +pasturer/M +pasty/PTRS +Patagonia/M +Patagonian/S +patch/EGRSD +patcher/EM +patchily +patchiness/S +patch's +patchwork/RMSZ +patchy/PRT +patellae +patella/MS +Patel/M +Pate/M +paten/M +Paten/M +patentee/SM +patent/ZGMRDYSB +paterfamilias/SM +pater/M +paternalism/MS +paternalist +paternalistic +paternal/Y +paternity/SM +paternoster/SM +Paterson/M +pate/SM +pathetic +pathetically +pathfinder/MS +pathless/P +path/M +pathname/SM +pathogenesis/M +pathogenic +pathogen/SM +pathologic +pathological/Y +pathologist/MS +pathology/SM +pathos/SM +paths +pathway/MS +Patience/M +patience/SM +patient/MRYTS +patient's/I +patients/I +patina/SM +patine +Patin/M +patio/MS +Pat/MN +pat/MNDRS +Patna/M +patois/M +Paton/M +patresfamilias +patriarchal +patriarchate/MS +patriarch/M +patriarchs +patriarchy/MS +Patrica/M +Patrice/M +Patricia/M +patrician/MS +patricide/MS +Patricio/M +Patrick/M +Patric/M +patrimonial +patrimony/SM +patriotically +patriotic/U +patriotism/SM +patriot/SM +patristic/S +Patrizia/M +Patrizio/M +Patrizius/M +patrolled +patrolling +patrolman/M +patrolmen +patrol/MS +patrolwoman +patrolwomen +patronage/MS +patroness/S +patronization +patronized/U +patronize/GZRSDJ +patronizer/M +patronizes/A +patronizing's/U +patronizing/YM +patronymically +patronymic/S +patron/YMS +patroon/MS +patsy/SM +Patsy/SM +patted +Patten/M +patten/MS +patterer/M +pattern/GSDM +patternless +patter/RDSGJ +Patterson/M +Pattie/M +Patti/M +patting +Pattin/M +Patton/M +Patty/M +patty/SM +paucity/SM +Paula/M +Paule/M +Pauletta/M +Paulette/M +Paulie/M +Pauli/M +Paulina/M +Pauline +Pauling/M +Paulita/M +Paul/MG +Paulo/M +Paulsen/M +Paulson/M +Paulus/M +Pauly/M +paunch/GMSD +paunchiness/M +paunchy/RTP +pauperism/SM +pauperize/SDG +pauper/SGDM +pause/DSG +Pavarotti +paved/UA +pave/GDRSJL +Pavel/M +pavement/SGDM +paver/M +paves/A +Pavia/M +pavilion/SMDG +paving/A +paving's +Pavla/M +Pavlova/MS +Pavlovian +Pavlov/M +pawl/SM +paw/MDSG +pawnbroker/SM +pawnbroking/S +Pawnee/SM +pawner/M +pawn/GSDRM +pawnshop/MS +pawpaw's +Pawtucket/M +paxes +Paxon/M +Paxton/M +payable/S +pay/AGSLB +payback/S +paycheck/SM +payday/MS +payed +payee/SM +payer/SM +payload/SM +paymaster/SM +payment/ASM +Payne/SM +payoff/MS +payola/MS +payout/S +payroll/MS +payslip/S +Payson/M +Payton/M +Paz/M +Pb/M +PBS +PBX +PCB +PC/M +PCP +PCs +pct +pd +PD +Pd/M +PDP +PDQ +PDT +PE +Peabody/M +peaceableness/M +peaceable/P +peaceably +peacefuller +peacefullest +peacefulness/S +peaceful/PY +peace/GMDS +peacekeeping/S +Peace/M +peacemaker/MS +peacemaking/MS +peacetime/MS +peach/GSDM +Peachtree/M +peachy/RT +peacock/SGMD +Peadar/M +peafowl/SM +peahen/MS +peaked/P +peakiness/M +peak/SGDM +peaky/P +pealed/A +Peale/M +peal/MDSG +peals/A +pea/MS +peanut/SM +Pearce/M +Pearla/M +Pearle/M +pearler/M +Pearlie/M +Pearline/M +Pearl/M +pearl/SGRDM +pearly/TRS +Pearson/M +pear/SYM +peartrees +Peary/M +peasanthood +peasantry/SM +peasant/SM +peashooter/MS +peats/A +peat/SM +peaty/TR +pebble/MGSD +pebbling/M +pebbly/TR +Pebrook/M +pecan/SM +peccadilloes +peccadillo/M +peccary/MS +Pechora/M +pecker/M +peck/GZSDRM +Peckinpah/M +Peck/M +Pecos/M +pectic +pectin/SM +pectoral/S +peculate/NGDSX +peculator/S +peculiarity/MS +peculiar/SY +pecuniary +pedagogical/Y +pedagogic/S +pedagogics/M +pedagogue/SDGM +pedagogy/MS +pedal/SGRDM +pedantic +pedantically +pedantry/MS +pedant/SM +peddler/M +peddle/ZGRSD +pederast/SM +pederasty/SM +Peder/M +pedestal/GDMS +pedestrianization +pedestrianize/GSD +pedestrian/MS +pediatrician/SM +pediatric/S +pedicab/SM +pedicure/DSMG +pedicurist/SM +pedigree/DSM +pediment/DMS +pedlar's +pedometer/MS +pedophile/S +pedophilia +Pedro/M +peduncle/MS +peeing +peekaboo/SM +peek/GSD +peeler/M +peeling/M +Peel/M +peel/SJGZDR +peen/GSDM +peeper/M +peephole/SM +peep/SGZDR +peepshow/MS +peepy +peerage/MS +peer/DMG +peeress/MS +peerlessness/M +peerless/PY +peeve/GZMDS +peevers/M +peevishness/SM +peevish/YP +peewee/S +pee/ZDRS +Pegasus/MS +pegboard/SM +Pegeen/M +pegged +Peggie/M +Peggi/M +pegging +Peggy/M +Peg/M +peg/MS +peignoir/SM +Pei/M +Peiping/M +Peirce/M +pejoration/SM +pejorative/SY +peke/MS +Pekinese's +pekingese +Pekingese/SM +Peking/SM +pekoe/SM +pelagic +Pelee/M +Pele/M +pelf/SM +Pelham/M +pelican/SM +pellagra/SM +pellet/SGMD +pellucid +Peloponnese/M +pelter/M +pelt/GSDR +pelvic/S +pelvis/SM +Pembroke/M +pemmican/SM +penalization/SM +penalized/U +penalize/SDG +penalty/MS +penal/Y +Pena/M +penance/SDMG +pence/M +penchant/MS +pencil/SGJMD +pendant/SM +pend/DCGS +pendent/CS +Penderecki/M +Pendleton/M +pendulous +pendulum/MS +Penelopa/M +Penelope/M +penetrability/SM +penetrable +penetrate/SDVGNX +penetrating/Y +penetration/M +penetrativeness/M +penetrative/PY +penetrator/MS +penguin/MS +penicillin/SM +penile +peninsular +peninsula/SM +penis/MS +penitence/MS +penitential/YS +penitentiary/MS +penitent/SY +penknife/M +penknives +penlight/MS +pen/M +Pen/M +penman/M +penmanship/MS +penmen +Penna +pennant/SM +penned +Penney/M +Pennie/M +penniless +Penni/M +penning +Pennington/M +pennis +Penn/M +pennon/SM +Pennsylvania/M +Pennsylvanian/S +Penny/M +penny/SM +pennyweight/SM +pennyworth/M +penologist/MS +penology/MS +Penrod/M +Pensacola/M +pensioner/M +pension/ZGMRDBS +pensiveness/S +pensive/PY +pens/V +pentacle/MS +pentagonal/SY +Pentagon/M +pentagon/SM +pentagram/MS +pentameter/SM +pent/AS +Pentateuch/M +pentathlete/S +pentathlon/MS +pentatonic +pentecostal +Pentecostalism/S +Pentecostal/S +Pentecost/SM +penthouse/SDGM +Pentium/M +penuche/SM +penultimate/SY +penumbrae +penumbra/MS +penuriousness/MS +penurious/YP +penury/SM +peonage/MS +peon/MS +peony/SM +people/SDMG +Peoria/M +Pepe/M +Pepillo/M +Pepi/M +Pepin/M +Pepita/M +Pepito/M +pepped +peppercorn/MS +pepperer/M +peppergrass/M +peppermint/MS +pepperoni/S +pepper/SGRDM +peppery +peppiness/SM +pepping +peppy/PRT +Pepsico/M +PepsiCo/M +Pepsi/M +pepsin/SM +pep/SM +peptic/S +peptidase/SM +peptide/SM +peptizing +Pepys/M +Pequot/M +peradventure/S +perambulate/DSNGX +perambulation/M +perambulator/MS +percale/MS +perceivably +perceive/DRSZGB +perceived/U +perceiver/M +percentage/MS +percentile/SM +percent/MS +perceptible +perceptibly +perceptional +perception/MS +perceptiveness/MS +perceptive/YP +perceptual/Y +percept/VMS +Perceval/M +perchance +perch/GSDM +perchlorate/M +perchlorination +percipience/MS +percipient/S +Percival/M +percolate/NGSDX +percolation/M +percolator/MS +percuss/DSGV +percussionist/MS +percussion/SAM +percussiveness/M +percussive/PY +percutaneous/Y +Percy/M +perdition/MS +perdurable +peregrinate/XSDNG +peregrination/M +peregrine/S +Perelman/M +peremptorily +peremptory/P +perennial/SY +pres +perestroika/S +Perez/M +perfecta/S +perfect/DRYSTGVP +perfecter/M +perfectibility/MS +perfectible +perfectionism/MS +perfectionist/MS +perfection/MS +perfectiveness/M +perfective/PY +perfectness/MS +perfidiousness/M +perfidious/YP +perfidy/MS +perforated/U +perforate/XSDGN +perforation/M +perforce +performance/MS +performed/U +performer/M +perform/SDRZGB +perfumer/M +perfumery/SM +perfume/ZMGSRD +perfunctorily +perfunctoriness/M +perfunctory/P +perfused +perfusion/M +Pergamon/M +pergola/SM +perhaps/S +Peria/M +pericardia +pericardium/M +Perice/M +Periclean +Pericles/M +perigee/SM +perihelia +perihelion/M +peril/GSDM +Perilla/M +perilousness/M +perilous/PY +Peri/M +perimeter/MS +perinatal +perinea +perineum/M +periodic +periodical/YMS +periodicity/MS +period/MS +periodontal/Y +periodontics/M +periodontist/S +peripatetic/S +peripheral/SY +periphery/SM +periphrases +periphrasis/M +periphrastic +periscope/SDMG +perishable/SM +perish/BZGSRD +perishing/Y +peristalses +peristalsis/M +peristaltic +peristyle/MS +peritoneal +peritoneum/SM +peritonitis/MS +periwigged +periwigging +periwig/MS +periwinkle/SM +perjurer/M +perjure/SRDZG +perjury/MS +per/K +perk/GDS +perkily +perkiness/S +Perkin/SM +perky/TRP +Perla/M +Perle/M +Perl/M +permafrost/MS +permalloy/M +Permalloy/M +permanence/SM +permanency/MS +permanentness/M +permanent/YSP +permeability/SM +permeableness/M +permeable/P +permeate/NGVDSX +Permian +permissibility/M +permissibleness/M +permissible/P +permissibly +permission/SM +permissiveness/MS +permissive/YP +permit/SM +permitted +permitting +Perm/M +perm/MDGS +permutation/MS +permute/SDG +Pernell/M +perniciousness/MS +pernicious/PY +Pernod/M +Peron/M +peroration/SM +Perot/M +peroxidase/M +peroxide/MGDS +perpend/DG +perpendicularity/SM +perpendicular/SY +perpetrate/NGXSD +perpetration/M +perpetrator/SM +perpetual/SY +perpetuate/NGSDX +perpetuation/M +perpetuity/MS +perplex/DSG +perplexed/Y +perplexity/MS +perquisite/SM +Perren/M +Perri/M +Perrine/M +Perry/MR +persecute/XVNGSD +persecution/M +persecutor/MS +persecutory +Perseid/M +Persephone/M +Perseus/M +perseverance/MS +persevere/GSD +persevering/Y +Pershing/M +Persia/M +Persian/S +persiflage/MS +persimmon/SM +Persis/M +persist/DRSG +persistence/SM +persistent/Y +persnickety +personableness/M +personable/P +personae +personage/SM +personality/SM +personalization/CMS +personalize/CSDG +personalized/U +personalty/MS +personal/YS +persona/M +person/BMS +personification/M +personifier/M +personify/XNGDRS +personnel/SM +person's/U +persons/U +perspective/YMS +perspex +perspicaciousness/M +perspicacious/PY +perspicacity/S +perspicuity/SM +perspicuousness/M +perspicuous/YP +perspiration/MS +perspire/DSG +persuaded/U +persuader/M +persuade/ZGDRSB +persuasion/SM +persuasively +persuasiveness/MS +persuasive/U +pertain/GSD +Perth/M +pertinaciousness/M +pertinacious/YP +pertinacity/MS +pertinence/S +pertinent/YS +pertness/MS +perturbation/MS +perturbed/U +perturb/GDS +pertussis/SM +pert/YRTSP +peruke/SM +Peru/M +perusal/SM +peruser/M +peruse/RSDZG +Peruvian/S +pervade/SDG +pervasion/M +pervasiveness/MS +pervasive/PY +perverseness/SM +perverse/PXYNV +perversion/M +perversity/MS +pervert/DRSG +perverted/YP +perverter/M +perviousness +peseta/SM +Peshawar/M +peskily +peskiness/S +pesky/RTP +peso/MS +pessimal/Y +pessimism/SM +pessimistic +pessimistically +pessimist/SM +pester/DG +pesticide/MS +pestiferous +pestilence/SM +pestilential/Y +pestilent/Y +pestle/SDMG +pesto/S +pest/RZSM +PET +Ptain/M +petal/SDM +Peta/M +petard/MS +petcock/SM +Pete/M +peter/GD +Peter/M +Petersburg/M +Petersen/M +Peters/N +Peterson/M +Peterus/M +Petey/M +pethidine/M +petiole/SM +petiteness/M +petite/XNPS +petitioner/M +petition/GZMRD +petition's/A +petitions/A +petits +Petkiewicz/M +Pet/MRZ +Petra/M +Petrarch/M +petrel/SM +petri +petrifaction/SM +petrify/NDSG +Petrina/M +Petr/M +petrochemical/SM +petrodollar/MS +petroglyph/M +petrolatum/MS +petroleum/MS +petrolled +petrolling +petrol/MS +petrologist/MS +petrology/MS +Petronella/M +Petronia/M +Petronilla/M +Petronille/M +pet/SMRZ +petted +petter/MS +Pettibone/M +petticoat/SMD +pettifogged +pettifogger/SM +pettifogging +pettifog/S +pettily +pettiness/S +petting +pettis +pettishness/M +pettish/YP +Petty/M +petty/PRST +petulance/MS +petulant/Y +Petunia/M +petunia/SM +Peugeot/M +Pewaukee/M +pewee/MS +pewit/MS +pew/SM +pewter/SRM +peyote/SM +Peyter/M +Peyton/M +pf +Pfc +PFC +pfennig/SM +Pfizer/M +pg +PG +Phaedra/M +Phaethon/M +phaeton/MS +phage/M +phagocyte/SM +Phaidra/M +phalanger/MS +phalanges +phalanx/SM +phalli +phallic +phallus/M +Phanerozoic +phantasmagoria/SM +phantasmal +phantasm/SM +phantasy's +phantom/MS +pharaoh +Pharaoh/M +pharaohs +Pharaohs +pharisaic +Pharisaic +Pharisaical +pharisee/S +Pharisee/SM +pharmaceutical/SY +pharmaceutic/S +pharmaceutics/M +pharmacist/SM +pharmacological/Y +pharmacologist/SM +pharmacology/SM +pharmacopoeia/SM +pharmacy/SM +pharyngeal/S +pharynges +pharyngitides +pharyngitis/M +pharynx/M +phase/DSRGZM +phaseout/S +PhD +pheasant/SM +Phebe/M +Phedra/M +Phekda/M +Phelia/M +Phelps/M +phenacetin/MS +phenobarbital/SM +phenolic +phenol/MS +phenolphthalein/M +phenomenal/Y +phenomena/SM +phenomenological/Y +phenomenology/MS +phenomenon/SM +phenotype/MS +phenylalanine/M +phenyl/M +pheromone/MS +phew/S +phialled +phialling +phial/MS +Phidias/M +Philadelphia/M +philanderer/M +philander/SRDGZ +philanthropic +philanthropically +philanthropist/MS +philanthropy/SM +philatelic +philatelist/MS +philately/SM +Philbert/M +Philco/M +philharmonic/S +Philipa/M +Philip/M +Philippa/M +Philippe/M +Philippians/M +philippic/SM +Philippine/SM +Philis/M +philistine/S +Philistine/SM +philistinism/S +Phillida/M +Phillie/M +Phillipa/M +Phillipe/M +Phillip/MS +Phillipp/M +Phillis/M +Philly/SM +Phil/MY +philodendron/MS +philological/Y +philologist/MS +philology/MS +Philomena/M +philosopher/MS +philosophic +philosophical/Y +philosophized/U +philosophizer/M +philosophizes/U +philosophize/ZDRSG +philosophy/MS +philter/SGDM +philtre/DSMG +Phineas/M +Phip/M +Phipps/M +phi/SM +phlebitides +phlebitis/M +phlegmatic +phlegmatically +phlegm/SM +phloem/MS +phlox/M +pH/M +Ph/M +phobia/SM +phobic/S +Phobos/M +Phoebe/M +phoebe/SM +Phoenicia/M +Phoenician/SM +Phoenix/M +phoenix/MS +phone/DSGM +phoneme/SM +phonemically +phonemic/S +phonemics/M +phonetically +phonetician/SM +phonetic/S +phonetics/M +phonically +phonic/S +phonics/M +phoniness/MS +phonographer/M +phonographic +phonograph/RM +phonographs +phonologic +phonological/Y +phonologist/MS +phonology/MS +phonon/M +phony/PTRSDG +phooey/S +phosphatase/M +phosphate/MS +phosphide/M +phosphine/MS +phosphoresce +phosphorescence/SM +phosphorescent/Y +phosphoric +phosphor/MS +phosphorous +phosphorus/SM +photocell/MS +photochemical/Y +photochemistry/M +photocopier/M +photocopy/MRSDZG +photoelectric +photoelectrically +photoelectronic +photoelectrons +photoengraver/M +photoengrave/RSDJZG +photoengraving/M +photofinishing/MS +photogenic +photogenically +photograph/AGD +photographer/SM +photographic +photographically +photograph's +photographs/A +photography/MS +photojournalism/SM +photojournalist/SM +photoluminescence/M +photolysis/M +photolytic +photometer/SM +photometric +photometrically +photometry/M +photomicrograph/M +photomicrography/M +photomultiplier/M +photon/MS +photorealism +photosensitive +photo/SGMD +photosphere/M +photostatic +Photostat/MS +Photostatted +Photostatting +photosyntheses +photosynthesis/M +photosynthesize/DSG +photosynthetic +phototypesetter +phototypesetting/M +phrasal +phrase/AGDS +phrasebook +phrasemaking +phraseology/MS +phrase's +phrasing/SM +phrenological/Y +phrenologist/MS +phrenology/MS +phylactery/MS +phylae +phyla/M +Phylis/M +Phyllida/M +Phyllis/M +Phyllys/M +phylogeny/MS +phylum/M +Phylys/M +phys +physicality/M +physical/PYS +physician/SM +physicist/MS +physicked +physicking +physic/SM +physiochemical +physiognomy/SM +physiography/MS +physiologic +physiological/Y +physiologist/SM +physiology/MS +physiotherapist/MS +physiotherapy/SM +physique/MSD +phytoplankton/M +Piaf/M +Piaget/M +Pia/M +pianism/M +pianissimo/S +pianistic +pianist/SM +pianoforte/MS +pianola +Pianola/M +piano/SM +piaster/MS +piazza/SM +pibroch/M +pibrochs +picador/MS +picaresque/S +pica/SM +Picasso/M +picayune/S +Piccadilly/M +piccalilli/MS +piccolo/MS +pickaback's +pickaxe's +pickax/GMSD +pickerel/MS +Pickering/M +picker/MG +picketer/M +picket/MSRDZG +Pickett/M +Pickford/M +pick/GZSJDR +pickle/SDMG +Pickman/M +pickoff/S +pickpocket/GSM +pickup/SM +Pickwick/M +picky/RT +picnicked +picnicker/MS +picnicking +picnic/SM +picofarad/MS +picojoule +picoseconds +picot/DMGS +Pict/M +pictograph/M +pictographs +pictorialness/M +pictorial/PYS +picture/MGSD +picturesqueness/SM +picturesque/PY +piddle/GSD +piddly +pidgin/SM +piebald/S +piece/GMDSR +piecemeal +piecer/M +piecewise +pieceworker/M +piecework/ZSMR +piedmont +Piedmont/M +pieing +pie/MS +Pierce/M +piercer/M +pierce/RSDZGJ +piercing/Y +Pierette/M +pier/M +Pier/M +Pierre/M +Pierrette/M +Pierrot/M +Pierson/M +Pieter/M +Pietra/M +Pietrek/M +Pietro/M +piety/SM +piezoelectric +piezoelectricity/M +piffle/MGSD +pigeon/DMGS +pigeonhole/SDGM +pigged +piggery/M +pigging +piggishness/SM +piggish/YP +piggyback/MSDG +Piggy/M +piggy/RSMT +pigheadedness/S +pigheaded/YP +piglet/MS +pigmentation/MS +pigment/MDSG +pig/MLS +Pigmy's +pigpen/SM +pigroot +pigskin/MS +pigsty/SM +pigswill/M +pigtail/SMD +Pike/M +pike/MZGDRS +piker/M +pikestaff/MS +pilaf/MS +pilaster/SM +Pilate/M +pilau's +pilchard/SM +Pilcomayo/M +pile/JDSMZG +pileup/MS +pilferage/SM +pilferer/M +pilfer/ZGSRD +Pilgrim +pilgrimage/DSGM +pilgrim/MS +piling/M +pillage/RSDZG +pillar/DMSG +pillbox/MS +pill/GSMD +pillion/DMGS +pillory/MSDG +pillowcase/SM +pillow/GDMS +pillowslip/S +Pillsbury/M +pilot/DMGS +pilothouse/SM +piloting/M +pimento/MS +pimiento/SM +pimpernel/SM +pimp/GSMYD +pimple/SDM +pimplike +pimply/TRM +PIN +pinafore/MS +piata/S +Pinatubo/M +pinball/MS +Pincas/M +pincer/GSD +Pinchas/M +pincher/M +pinch/GRSD +pincushion/SM +Pincus/M +Pindar/M +pineapple/MS +pined/A +Pinehurst/M +pine/MNGXDS +pines/A +pinfeather/SM +ping/GDRM +pinheaded/P +pinhead/SMD +pinhole/SM +pining/A +pinion/DMG +Pinkerton/M +pinkeye/MS +pink/GTYDRMPS +pinkie/SM +pinkish/P +pinkness/S +pinko/MS +pinky's +pinnacle/MGSD +pinnate +pinned/U +pinning/S +Pinocchio/M +Pinochet/M +pinochle/SM +pion/S +pinpoint/SDG +pinprick/MDSG +pin's +pinsetter/SM +Pinsky/M +pinstripe/SDM +pintail/SM +Pinter/M +pint/MRS +pinto/S +pinup/MS +pin/US +pinwheel/DMGS +pinyin +Pinyin +piny/RT +pioneer/SDMG +pion/M +Piotr/M +piousness/MS +pious/YP +pipeline/DSMG +pipe/MS +piper/M +Piper/M +Pipestone/M +pipet's +pipette/MGSD +pipework +piping/YM +pipit/MS +pip/JSZMGDR +Pip/MR +Pippa/M +pipped +pipping +pippin/SM +Pippo/M +Pippy/M +pipsqueak/SM +piquancy/MS +piquantness/M +piquant/PY +pique/GMDS +piracy/MS +Piraeus/M +Pirandello/M +piranha/SM +pirate/MGSD +piratical/Y +pirogi +pirogies +pirouette/MGSD +pis +Pisa/M +piscatorial +Pisces/M +Pisistratus/M +pismire/SM +Pissaro/M +piss/DSRG! +pistachio/MS +piste/SM +pistillate +pistil/MS +pistoleers +pistole/M +pistol/SMGD +piston/SM +pitapat/S +pitapatted +pitapatting +pita/SM +Pitcairn/M +pitchblende/SM +pitcher/M +pitchfork/GDMS +pitching/M +pitchman/M +pitchmen +pitch/RSDZG +pitchstone/M +piteousness/SM +piteous/YP +pitfall/SM +pithily +pithiness/SM +pith/MGDS +piths +pithy/RTP +pitiableness/M +pitiable/P +pitiably +pitier/M +pitifuller +pitifullest +pitifulness/M +pitiful/PY +pitilessness/SM +pitiless/PY +pitman/M +pit/MS +Pitney/M +piton/SM +pittance/SM +pitted +pitting +Pittman/M +Pittsburgh/ZM +Pittsfield/M +Pitt/SM +Pittston/M +pituitary/SM +pitying/Y +pity/ZDSRMG +Pius/M +pivotal/Y +pivot/DMSG +pivoting/M +pix/DSG +pixel/SM +pixie/MS +pixiness +pixmap/SM +Pizarro/M +pizazz/S +pi/ZGDRH +pizza/SM +pizzeria/SM +pizzicati +pizzicato +pj's +PJ's +pk +pkg +pkt +pkwy +Pkwy +pl +placard/DSMG +placate/NGVXDRS +placatory +placeable/A +placebo/SM +placed/EAU +place/DSRJLGZM +placeholder/S +placekick/DGS +placeless/Y +placement/AMES +placental/S +placenta/SM +placer/EM +places/EA +placidity/SM +placidness/M +placid/PY +placing/AE +placket/SM +plagiarism/MS +plagiarist/MS +plagiarize/GZDSR +plagiary/SM +plagued/U +plague/MGRSD +plaguer/M +plaice/M +plaid/DMSG +plainclothes +plainclothesman +plainclothesmen +Plainfield/M +plainness/MS +plainsman/M +plainsmen +plainsong/SM +plainspoken +plain/SPTGRDY +plaintiff/MS +plaintiveness/M +plaintive/YP +plaint/VMS +Plainview/M +plaiting/M +plait/SRDMG +planar +planarity +Planck/M +plan/DRMSGZ +planeload +planer/M +plane's +plane/SCGD +planetarium/MS +planetary +planetesimal/M +planet/MS +planetoid/SM +plangency/S +plangent +planking/M +plank/SJMDG +plankton/MS +planned/U +planner/SM +planning +Plano +planoconcave +planoconvex +Plantagenet/M +plantain/MS +plantar +plantation/MS +planter/MS +planting/S +plantlike +plant's +plant/SADG +plaque/MS +plash/GSDM +plasma/MS +plasmid/S +plasm/M +plasterboard/MS +plasterer/M +plastering/M +plaster/MDRSZG +plasterwork/M +plastically +plasticine +Plasticine/M +plasticity/SM +plasticize/GDS +plastic/MYS +plateau/GDMS +plateful/S +platelet/SM +platen/M +plater/M +plate/SM +platform/SGDM +Plath/M +plating/M +platinize/GSD +platinum/MS +platitude/SM +platitudinous/Y +plat/JDNRSGXZ +Plato/M +platonic +Platonic +Platonism/M +Platonist +platoon/MDSG +platted +Platte/M +platter/MS +Platteville/M +platting +platypus/MS +platys +platy/TR +plaudit/MS +plausibility/S +plausible/P +plausibly +Plautus/M +playability/U +playable/U +playacting/M +playact/SJDG +playback/MS +playbill/SM +Playboy/M +playboy/SM +play/DRSEBG +played/A +player's/E +player/SM +playfellow/S +playfulness/MS +playful/PY +playgirl/SM +playgoer/MS +playground/MS +playgroup/S +playhouse/SM +playing/S +playmate/MS +playoff/S +playpen/SM +playroom/SM +plays/A +Playtex/M +plaything/MS +playtime/SM +playwright/SM +playwriting/M +plaza/SM +pleader/MA +pleading/MY +plead/ZGJRDS +pleasanter +pleasantest +pleasantness/SMU +pleasantry/MS +pleasant/UYP +pleased/EU +pleaser/M +pleases/E +please/Y +pleasingness/M +pleasing/YP +plea/SM +pleas/RSDJG +pleasurableness/M +pleasurable/P +pleasurably +pleasureful +pleasure/MGBDS +pleasure's/E +pleasures/E +pleater/M +pleat/RDMGS +plebeian/SY +plebe/MS +plebiscite/SM +plectra +plectrum/SM +pledger/M +pledge/RSDMG +Pleiads +Pleistocene +plenary/S +plenipotentiary/S +plenitude/MS +plenteousness/M +plenteous/PY +plentifulness/M +plentiful/YP +plenty/SM +plenum/M +pleonasm/MS +plethora/SM +pleurae +pleural +pleura/M +pleurisy/SM +Plexiglas/MS +plexus/SM +pliability/MS +pliableness/M +pliable/P +pliancy/MS +pliantness/M +pliant/YP +plication/MA +plier/MA +plight/GMDRS +plimsolls +plinker/M +plink/GRDS +plinth/M +plinths +Pliny/M +Pliocene/S +PLO +plodded +plodder/SM +plodding/SY +plod/S +plopped +plopping +plop/SM +plosive +plot/SM +plotted/A +plotter/MDSG +plotting +plover/MS +plowed/U +plower/M +plowman/M +plowmen +plow/SGZDRM +plowshare/MS +ploy's +ploy/SCDG +plucker/M +pluckily +pluckiness/SM +pluck/SGRD +plucky/TPR +pluggable +plugged/UA +plugging/AU +plughole +plug's +plug/US +plumage/DSM +plumbago/M +plumbed/U +plumber/M +plumbing/M +plumb/JSZGMRD +plume/SM +plummer +plummest +plummet/DSG +plummy +plumper/M +plumpness/S +plump/RDNYSTGP +plum/SMDG +plumy/TR +plunder/GDRSZ +plunger/M +plunge/RSDZG +plunker/M +plunk/ZGSRD +pluperfect/S +pluralism/MS +pluralistic +pluralist/S +plurality/SM +pluralization/MS +pluralize/GZRSD +pluralizer/M +plural/SY +plushness/MS +plush/RSYMTP +plushy/RPT +plus/S +plussed +plussing +Plutarch/M +plutocracy/MS +plutocratic +plutocrat/SM +Pluto/M +plutonium/SM +pluvial/S +ply/AZNGRSD +Plymouth/M +plywood/MS +pm +PM +Pm/M +PMS +pneumatically +pneumatic/S +pneumatics/M +pneumonia/MS +PO +poacher/M +poach/ZGSRD +Pocahontas/M +pocketbook/SM +pocketful/SM +pocketing/M +pocketknife/M +pocketknives +pocket/MSRDG +pock/GDMS +pockmark/MDSG +Pocono/MS +podded +podding +podge/ZR +Podgorica/M +podiatrist/MS +podiatry/MS +podium/MS +pod/SM +Podunk/M +Poe/M +poem/MS +poesy/GSDM +poetaster/MS +poetess/MS +poetically +poeticalness +poetical/U +poetic/S +poetics/M +poet/MS +poetry/SM +pogo +Pogo/M +pogrom/GMDS +poignancy/MS +poignant/Y +Poincar/M +poinciana/SM +Poindexter/M +poinsettia/SM +pointblank +pointedness/M +pointed/PY +pointer/M +pointillism/SM +pointillist/SM +pointing/M +pointlessness/SM +pointless/YP +point/RDMZGS +pointy/TR +poise/M +pois/GDS +poi/SM +poisoner/M +poisoning/M +poisonous/PY +poison/RDMZGSJ +Poisson/M +poke/DRSZG +Pokemon/M +pokerface/D +poker/M +poky/SRT +Poland/M +Polanski/M +polarimeter/SM +polarimetry +polariscope/M +Polaris/M +polarity/MS +polarization/CMS +polarized/UC +polarize/RSDZG +polarizes/C +polarizing/C +polarogram/SM +polarograph +polarography/M +Polaroid/SM +polar/S +polecat/SM +polemical/Y +polemicist/S +polemic/S +polemics/M +pole/MS +Pole/MS +poler/M +polestar/S +poleward/S +pol/GMDRS +policeman/M +policemen/M +police/MSDG +policewoman/M +policewomen +policyholder/MS +policymaker/S +policymaking +policy/SM +poliomyelitides +poliomyelitis/M +polio/SM +Polish +polished/U +polisher/M +polish/RSDZGJ +polis/M +Politburo/M +politburo/S +politeness/MS +polite/PRTY +politesse/SM +politically +political/U +politician/MS +politicization/S +politicize/CSDG +politicked +politicking/SM +politico/SM +politic/S +politics/M +polity/MS +polka/SDMG +Polk/M +pollack/SM +Pollard/M +polled/U +pollen/GDM +pollinate/XSDGN +pollination/M +pollinator/MS +polliwog/SM +poll/MDNRSGX +pollock's +Pollock/SM +pollster/MS +pollutant/MS +polluted/U +polluter/M +pollute/RSDXZVNG +pollution/M +Pollux/M +Pollyanna/M +Polly/M +pollywog's +Pol/MY +Polo/M +polo/MS +polonaise/MS +polonium/MS +poltergeist/SM +poltroon/MS +polyandrous +polyandry/MS +polyatomic +polybutene/MS +polycarbonate +polychemicals +polychrome +polyclinic/MS +polycrystalline +polyelectrolytes +polyester/SM +polyether/S +polyethylene/SM +polygamist/MS +polygamous/Y +polygamy/MS +polyglot/S +polygonal/Y +polygon/MS +polygraph/MDG +polygraphs +polygynous +polyhedral +polyhedron/MS +Polyhymnia/M +polyisobutylene +polyisocyanates +polymath/M +polymaths +polymerase/S +polymeric +polymerization/SM +polymerize/SDG +polymer/MS +polymorphic +polymorphism/MS +polymorph/M +polymyositis +Polynesia/M +Polynesian/S +polynomial/YMS +Polyphemus/M +polyphonic +polyphony/MS +polyphosphate/S +polyp/MS +polypropylene/MS +polystyrene/SM +polysyllabic +polysyllable/SM +polytechnic/MS +polytheism/SM +polytheistic +polytheist/SM +polythene/M +polytonal/Y +polytopes +polyunsaturated +polyurethane/SM +polyvinyl/MS +Po/M +pomade/MGSD +pomander/MS +pomegranate/SM +Pomerania/M +Pomeranian +pommel/GSMD +Pomona/M +Pompadour/M +pompadour/MDS +pompano/SM +Pompeian/S +Pompeii/M +Pompey/M +pompom/SM +pompon's +pomposity/MS +pompousness/S +pompous/YP +pomp/SM +ponce/M +Ponce/M +Ponchartrain/M +poncho/MS +ponderer/M +ponderousness/MS +ponderous/PY +ponder/ZGRD +pond/SMDRGZ +pone/SM +pongee/MS +poniard/GSDM +pons/M +Pontchartrain/M +Pontiac/M +Pontianak/M +pontiff/MS +pontifical/YS +pontificate/XGNDS +pontoon/SMDG +pony/DSMG +ponytail/SM +pooch/GSDM +poodle/MS +poof/MS +pooh/DG +Pooh/M +poohs +Poole/M +pool/MDSG +poolroom/MS +poolside +Poona/M +poop/MDSG +poorboy +poorhouse/MS +poorness/MS +poor/TYRP +popcorn/MS +Popek/MS +pope/SM +Pope/SM +Popeye/M +popgun/SM +popinjay/MS +poplar/SM +poplin/MS +Popocatepetl/M +popover/SM +poppa/MS +popped +Popper/M +popper/SM +poppet/M +popping +Poppins/M +poppycock/MS +Poppy/M +poppy/SDM +poppyseed +Popsicle/MS +pop/SM +populace/MS +popularism +popularity/UMS +popularization/SM +popularize/A +popularized +popularizer/MS +popularizes/U +popularizing +popular/YS +populate/CXNGDS +populated/UA +populates/A +populating/A +population/MC +populism/S +populist/SM +populousness/MS +populous/YP +porcelain/SM +porch/SM +porcine +porcupine/MS +pore/ZGDRS +Porfirio/M +porgy/SM +poring/Y +porker/M +porky/TSR +pork/ZRMS +pornographer/SM +pornographic +pornographically +pornography/SM +porno/S +porn/S +porosity/SM +porousness/MS +porous/PY +porphyritic +porphyry/MS +porpoise/DSGM +porridge/MS +Porrima/M +porringer/MS +Porsche/M +portability/S +portables +portable/U +portably +port/ABSGZMRD +portage/ASM +portaged +portaging +portal/SM +portamento/M +portcullis/MS +ported/CE +Porte/M +portend/SDG +portentousness/M +portentous/PY +portent/SM +porterage/M +porter/DMG +porterhouse/SM +Porter/M +porter's/A +portfolio/MS +porthole/SM +Portia/M +porticoes +portico/M +Portie/M +portire/SM +porting/E +portion/KGSMD +Portland/M +portliness/SM +portly/PTR +portmanteau/SM +Port/MR +Prto/M +portraitist/SM +portrait/MS +portraiture/MS +portrayal/SM +portrayer/M +portray/GDRS +ports/CE +Portsmouth/M +Portugal/M +Portuguese/M +portulaca/MS +Porty/M +posed/CA +Poseidon/M +poser/KME +poses/CA +poseur/MS +pose/ZGKDRSE +posh/DSRGT +posing/CA +positifs +positionable +positional/KY +position/KGASMD +position's/EC +positions/EC +positiveness/S +positive/RSPYT +positivism/M +positivist/S +positivity +positron/SM +posit/SCGD +Posner/M +posse/M +possess/AGEDS +possessed/PY +possession/AEMS +possessional +possessiveness/MS +possessive/PSMY +possessor/MS +possibility/SM +possible/TRS +possibly +poss/S +possum/MS +postage/MS +postal/S +post/ASDRJG +postbag/M +postbox/SM +postcard/SM +postcode/SM +postcondition/S +postconsonantal +postdate/DSG +postdoctoral +posteriori +posterior/SY +posterity/SM +poster/MS +postfix/GDS +postgraduate/SM +posthaste/S +posthumousness/M +posthumous/YP +posthypnotic +postilion/MS +postindustrial +posting/M +postlude/MS +Post/M +postman/M +postmarital +postmark/GSMD +postmaster/SM +postmen +postmeridian +postmistress/MS +postmodern +postmodernist +postmortem/S +postnasal +postnatal +postoperative/Y +postorder +postpaid +postpartum +postpone/GLDRS +postponement/S +postpositions +postprandial +post's +postscript/SM +postsecondary +postulate/XGNSD +postulation/M +postural +posture/MGSRD +posturer/M +postvocalic +postwar +posy/SM +potability/SM +potableness/M +potable/SP +potage/M +potash/MS +potassium/MS +potatoes +potato/M +potbelly/MSD +potboiler/M +potboil/ZR +pot/CMS +Potemkin/M +potency/MS +potentate/SM +potentiality/MS +potential/SY +potentiating +potentiometer/SM +potent/YS +potful/SM +pothead/MS +potherb/MS +pother/GDMS +potholder/MS +pothole/SDMG +potholing/M +pothook/SM +potion/SM +potlatch/SM +potluck/MS +Potomac/M +potpie/SM +potpourri/SM +Potsdam/M +potsherd/MS +potshot/S +pottage/SM +Pottawatomie/M +potted +Potter/M +potter/RDMSG +pottery/MS +potting +Potts/M +potty/SRT +pouch/SDMG +Poughkeepsie/M +Poul/M +poulterer/MS +poultice/DSMG +poultry/MS +pounce/SDG +poundage/MS +pounder/MS +pound/KRDGS +Pound/M +pour/DSG +pourer's +Poussin/MS +pouter/M +pout/GZDRS +poverty/MS +POW +powderpuff +powder/RDGMS +powdery +Powell/M +powerboat/MS +powerfulness/M +powerful/YP +power/GMD +powerhouse/MS +powerlessness/SM +powerless/YP +Powers +Powhatan/M +pow/RZ +powwow/GDMS +pox/GMDS +Poznan/M +pp +PP +ppm +ppr +PPS +pr +PR +practicability/S +practicable/P +practicably +practicality/SM +practicalness/M +practical/YPS +practice/BDRSMG +practiced/U +practicer/M +practicum/SM +practitioner/SM +Pradesh/M +Prado/M +Praetorian +praetorian/S +praetor/MS +pragmatical/Y +pragmatic/S +pragmatics/M +pragmatism/MS +pragmatist/MS +Prague/M +Praia +prairie/MS +praise/ESDG +praiser/S +praise's +praiseworthiness/MS +praiseworthy/P +praising/Y +Prakrit/M +praline/MS +pram/MS +prancer/M +prance/ZGSRD +prancing/Y +prank/SMDG +prankster/SM +praseodymium/SM +Pratchett/M +prate/DSRGZ +prater/M +pratfall/MS +prating/Y +prattle/DRSGZ +prattler/M +prattling/Y +Pratt/M +Prattville/M +Pravda/M +prawn/MDSG +praxes +praxis/M +Praxiteles/M +pray/DRGZS +prayerbook +prayerfulness/M +prayerful/YP +prayer/M +PRC +preach/DRSGLZJ +preacher/M +preaching/Y +preachment/MS +preachy/RT +preadolescence/S +Preakness/M +preallocate/XGNDS +preallocation/M +preallocator/S +preamble/MGDS +preamp +preamplifier/M +prearrange/LSDG +prearrangement/SM +preassign/SDG +preauthorize +prebendary/M +Precambrian +precancel/DGS +precancerous +precariousness/MS +precarious/PY +precautionary +precaution/SGDM +precede/DSG +precedence/SM +precedented/U +precedent/SDM +preceptive/Y +preceptor/MS +precept/SMV +precess/DSG +precession/M +precinct/MS +preciosity/MS +preciousness/S +precious/PYS +precipice/MS +precipitable +precipitant/S +precipitateness/M +precipitate/YNGVPDSX +precipitation/M +precipitousness/M +precipitous/YP +preciseness/SM +precise/XYTRSPN +precision/M +prcis/MDG +preclude/GDS +preclusion/S +precociousness/MS +precocious/YP +precocity/SM +precode/D +precognition/SM +precognitive +precollege/M +precolonial +precomputed +preconceive/GSD +preconception/SM +precondition/GMDS +preconscious +precook/GDS +precursor/SM +precursory +precut +predate/NGDSX +predation/CMS +predator/SM +predatory +predecease/SDG +predecessor/MS +predeclared +predecline +predefine/GSD +predefinition/SM +predesignate/GDS +predestination/SM +predestine/SDG +predetermination/MS +predeterminer/M +predetermine/ZGSRD +predicable/S +predicament/SM +predicate/VGNXSD +predication/M +predicator +predictability/UMS +predictable/U +predictably/U +predict/BSDGV +predicted/U +prediction/MS +predictive/Y +predictor/MS +predigest/GDS +predilect +predilection/SM +predispose/SDG +predisposition/MS +predoctoral +predominance/SM +predominant/Y +predominate/YSDGN +predomination/M +preemie/MS +preeminence/SM +preeminent/Y +preemployment/M +preempt/GVSD +preemption/SM +preemptive/Y +preemptor/M +preener/M +preen/SRDG +preexist/DSG +preexistence/SM +preexistent +prefabbed +prefabbing +prefab/MS +prefabricate/XNGDS +prefabrication/M +preface/DRSGM +prefacer/M +prefatory +prefect/MS +prefecture/MS +preferableness/M +preferable/P +preferably +prefer/BL +preference/MS +preferential/Y +preferment/SM +preferred +preferring +prefiguration/M +prefigure/SDG +prefix/MDSG +preflight/SGDM +preform/DSG +pref/RZ +pregnancy/SM +pregnant/Y +preheat/GDS +prehensile +prehistoric +prehistorical/Y +prehistory/SM +preindustrial +preinitialize/SDG +preinterview/M +preisolated +prejudge/DRSG +prejudger/M +prejudgment/SM +prejudiced/U +prejudice/MSDG +prejudicial/PY +prekindergarten/MS +prelacy/MS +prelate/SM +preliminarily +preliminary/S +preliterate/S +preloaded +prelude/GMDRS +preluder/M +premarital/Y +premarket +prematureness/M +premature/SPY +prematurity/M +premedical +premeditated/Y +premeditate/XDSGNV +premeditation/M +premed/S +premenstrual +premiere/MS +premier/GSDM +premiership/SM +Preminger/M +premise/GMDS +premiss's +premium/MS +premix/GDS +premolar/S +premonition/SM +premonitory +prenatal/Y +Pren/M +Prenticed/M +Prentice/MGD +Prenticing/M +Prentiss/M +Prent/M +prenuptial +preoccupation/MS +preoccupy/DSG +preoperative +preordain/DSLG +prepackage/GSD +prepaid +preparation/SM +preparative/SYM +preparatory +preparedly +preparedness/USM +prepared/UP +prepare/ZDRSG +prepay/GLS +prepayment/SM +prepender/S +prepends +preplanned +preponderance/SM +preponderant/Y +preponderate/DSYGN +prepositional/Y +preposition/SDMG +prepossess/GSD +prepossessing/U +prepossession/MS +preposterousness/M +preposterous/PY +prepped +prepping +preppy/RST +preprepared +preprint/SGDM +preprocessed +preprocessing +preprocessor/S +preproduction +preprogrammed +prep/SM +prepubescence/S +prepubescent/S +prepublication/M +prepuce/SM +prequel/S +preradiation +prerecord/DGS +preregister/DSG +preregistration/MS +prerequisite/SM +prerogative/SDM +Pres +presage/GMDRS +presager/M +presbyopia/MS +presbyterian +Presbyterianism/S +Presbyterian/S +presbyter/MS +presbytery/MS +preschool/RSZ +prescience/SM +prescient/Y +Prescott/M +prescribed/U +prescriber/M +prescribe/RSDG +prescription/SM +prescriptive/Y +prescript/SVM +preselect/SGD +presence/SM +presentableness/M +presentable/P +presentably/A +presentational/A +presentation/AMS +presented/A +presenter/A +presentiment/MS +presentment/SM +presents/A +present/SLBDRYZGP +preservationist/S +preservation/SM +preservative/SM +preserve/DRSBZG +preserved/U +preserver/M +preset/S +presetting +preshrank +preshrink/SG +preshrunk +preside/DRSG +presidency/MS +presidential/Y +president/SM +presider/M +presidia +presidium/M +Presley/M +presoaks +presort/GDS +pres/S +press/ACDSG +pressed/U +presser/MS +pressingly/C +pressing/YS +pressman/M +pressmen +pressure/DSMG +pressurization/MS +pressurize/DSRGZ +pressurized/U +prestidigitate/NX +prestidigitation/M +prestidigitatorial +prestidigitator/M +prestige/MS +prestigious/PY +Preston/M +presto/S +presumably +presume/BGDRS +presumer/M +presuming/Y +presumption/MS +presumptive/Y +presumptuousness/SM +presumptuous/YP +presuppose/GDS +presupposition/S +pretax +preteen/S +pretended/Y +pretender/M +pretending/U +pretend/SDRZG +pretense/MNVSX +pretension/GDM +pretentiousness/S +pretentious/UYP +preterite's +preterit/SM +preternatural/Y +pretest/SDG +pretext/SMDG +Pretoria/M +pretreated +pretreatment/S +pretrial +prettify/SDG +prettily +prettiness/SM +pretty/TGPDRS +pretzel/SM +prevailing/Y +prevail/SGD +prevalence/MS +prevalent/SY +prevaricate/DSXNG +prevaricator/MS +preventable/U +preventably +preventative/S +prevent/BSDRGV +preventer/M +prevention/MS +preventiveness/M +preventive/SPY +preview/ZGSDRM +previous/Y +prevision/SGMD +prewar +prexes +preyer's +prey/SMDG +Priam/M +priapic +Pribilof/M +price/AGSD +priced/U +priceless +Price/M +pricer/MS +price's +pricey +pricier +priciest +pricker/M +pricking/M +prickle/GMDS +prickliness/S +prickly/RTP +prick/RDSYZG +prideful/Y +pride/GMDS +prier/M +priestess/MS +priesthood/SM +Priestley/M +priestliness/SM +priestly/PTR +priest/SMYDG +prigged +prigging +priggishness/S +priggish/PYM +prig/SM +primacy/MS +primal +primarily +primary/MS +primate/MS +primed/U +primely/M +primeness/M +prime/PYS +primer/M +Prime's +primeval/Y +priming/M +primitiveness/SM +primitive/YPS +primitivism/M +primmed +primmer +primmest +primming +primness/MS +primogenitor/MS +primogeniture/MS +primordial/YS +primp/DGS +primrose/MGSD +prim/SPJGZYDR +princedom/MS +princeliness/SM +princely/PRT +Prince/M +prince/SMY +princess/MS +Princeton/M +principality/MS +principal/SY +Principe/M +Principia/M +principled/U +principle/SDMG +printable/U +printably +print/AGDRS +printed/U +printer/AM +printers +printing/SM +printmaker/M +printmake/ZGR +printmaking/M +printout/S +Prinz/M +prioress/MS +priori +prioritize/DSRGZJ +priority/MS +prior/YS +priory/SM +Pris +Prisca/M +Priscella/M +Priscilla/M +prised +prise/GMAS +prismatic +prism/MS +prison/DRMSGZ +prisoner/M +Prissie/M +prissily +prissiness/SM +prissy/RSPT +pristine/Y +prithee/S +privacy/MS +privateer/SMDG +privateness/M +private/NVYTRSXP +privation/MCS +privative/Y +privatization/S +privatize/GSD +privet/SM +privileged/U +privilege/SDMG +privily +privy/SRMT +prized/A +prize/DSRGZM +prizefighter/M +prizefighting/M +prizefight/SRMGJZ +prizewinner/S +prizewinning +Pr/MN +PRO +proactive +probabilist +probabilistic +probabilistically +probability/SM +probable/S +probably +probated/A +probate/NVMX +probates/A +probating/A +probational +probationary/S +probationer/M +probation/MRZ +probation's/A +probative/A +prober/M +probity/SM +problematical/UY +problematic/S +problem/SM +proboscis/MS +prob/RBJ +procaine/MS +procedural/SY +procedure/MS +proceeder/M +proceeding/M +proceed/JRDSG +process/BSDMG +processed/UA +processes/A +processional/YS +procession/GD +processor/MS +proclamation/MS +proclivity/MS +proconsular +procrastinate/XNGDS +procrastination/M +procrastinator/MS +procreational +procreatory +procrustean +Procrustean +Procrustes/M +proctor/GSDM +proctorial +procurable/U +procure/L +procurement/MS +Procyon/M +prodded +prodding +prodigality/S +prodigal/SY +prodigiousness/M +prodigious/PY +prodigy/MS +prod/S +produce/AZGDRS +producer/AM +producible/A +production/ASM +productively/UA +productiveness/MS +productive/PY +productivities +productivity/A +productivity's +productize/GZRSD +product/V +Prof +profanation/S +profaneness/MS +profane/YPDRSG +profanity/MS +professed/Y +professionalism/SM +professionalize/GSD +professional/USY +profession/SM +professorial/Y +professorship/SM +professor/SM +proffer/GSD +proficiency/SM +proficient/YS +profitability/MS +profitableness/MU +profitable/UP +profitably/U +profiteer/GSMD +profiterole/MS +profit/GZDRB +profitless +profligacy/S +profligate/YS +proforma/S +profoundity +profoundness/SM +profound/PTYR +prof/S +profundity/MS +profuseness/MS +profuse/YP +progenitor/SM +progeny/M +progesterone/SM +prognathous +prognoses +prognosis/M +prognosticate/NGVXDS +prognostication/M +prognosticator/S +prognostic/S +program/CSA +programed +programing +programmability +programmable/S +programmed/CA +programmer/ASM +programming/CA +programmings +progression/SM +progressiveness/SM +progressive/SPY +progressivism +progress/MSDVG +prohibiter/M +prohibitionist/MS +prohibition/MS +Prohibition/MS +prohibitiveness/M +prohibitive/PY +prohibitory +prohibit/VGSRD +projected/AU +projectile/MS +projectionist/MS +projection/MS +projective/Y +project/MDVGS +projector/SM +Prokofieff/M +Prokofiev/M +prolegomena +proletarianization/M +proletarianized +proletarian/S +proletariat/SM +proliferate/GNVDSX +proliferation/M +prolifically +prolific/P +prolixity/MS +prolix/Y +prologize +prologue/MGSD +prologuize +prolongate/NGSDX +prolongation/M +prolonger/M +prolong/G +promenade/GZMSRD +promenader/M +Promethean +Prometheus/M +promethium/SM +prominence/MS +prominent/Y +promiscuity/MS +promiscuousness/M +promiscuous/PY +promise/GD +promising/UY +promissory +promontory/MS +promote/GVZBDR +promoter/M +promotiveness/M +promotive/P +prompted/U +prompter/M +promptitude/SM +promptness/MS +prompt/SGJTZPYDR +pro/MS +promulgate/NGSDX +promulgation/M +promulgator/MS +pron +proneness/MS +prone/PY +pronghorn/SM +prong/SGMD +pronominalization +pronominalize +pronounceable/U +pronouncedly +pronounced/U +pronounce/GLSRD +pronouncement/SM +pronouncer/M +pronto +pronunciation/SM +proofed/A +proofer +proofing/M +proofreader/M +proofread/GZSR +proof/SEAM +propaganda/SM +propagandistic +propagandist/SM +propagandize/DSG +propagated/U +propagate/SDVNGX +propagation/M +propagator/MS +propellant/MS +propelled +propeller/MS +propelling +propel/S +propensity/MS +properness/M +proper/PYRT +propertied/U +property/SDM +prophecy/SM +prophesier/M +prophesy/GRSDZ +prophetess/S +prophetic +prophetical/Y +prophet/SM +prophylactic/S +prophylaxes +prophylaxis/M +propinquity/MS +propionate/M +propitiate/GNXSD +propitiatory +propitiousness/M +propitious/YP +proponent/MS +proportionality/M +proportional/SY +proportionate/YGESD +proportioner/M +proportion/ESGDM +proportionment/M +proposal/SM +propped +propping +proprietary/S +proprietorial +proprietorship/SM +proprietor/SM +proprietress/MS +propriety/MS +proprioception +proprioceptive +prop/SZ +propulsion/MS +propulsive +propylene/M +prorogation/SM +prorogue +prosaic +prosaically +proscenium/MS +prosciutti +prosciutto/SM +proscription/SM +proscriptive +pros/DSRG +prosecute/SDBXNG +prosecution/M +prosecutor/MS +proselyte/SDGM +proselytism/MS +proselytize/ZGDSR +prose/M +proser/M +Proserpine/M +prosodic/S +prosody/MS +prospect/DMSVG +prospection/SM +prospectiveness/M +prospective/SYP +prospector/MS +prospectus/SM +prosper/GSD +prosperity/MS +prosperousness/M +prosperous/PY +prostate +prostheses +prosthesis/M +prosthetic/S +prosthetics/M +prostitute/DSXNGM +prostitution/M +prostrate/SDXNG +prostration/M +prosy/RT +protactinium/MS +protagonist/SM +Protagoras/M +protean/S +protease/M +protect/DVGS +protected/UY +protectionism/MS +protectionist/MS +protection/MS +protectiveness/S +protective/YPS +protectorate/SM +protector/MS +protges +protg/SM +protein/MS +proteolysis/M +proteolytic +Proterozoic/M +protestantism +Protestantism/MS +protestant/S +Protestant/SM +protestation/MS +protest/G +protesting/Y +Proteus/M +protocol/DMGS +protoplasmic +protoplasm/MS +prototype/SDGM +prototypic +prototypical/Y +protozoa +protozoan/MS +protozoic +protozoon's +protract/DG +protrude/SDG +protrusile +protrusion/MS +protrusive/PY +protuberance/S +protuberant +Proudhon/M +proud/TRY +Proust/M +provabilities +provability's +provability/U +provableness/M +provable/P +provably +prov/DRGZB +proved/U +proven/U +prove/ESDAG +provenance/SM +Provenal +Provencals +Provence/M +provender/SDG +provenience/SM +provenly +proverb/DG +proverbial/Y +Proverbs/M +prover/M +provide/DRSBGZ +provided/U +providence/SM +Providence/SM +providential/Y +provident/Y +provider/M +province/SM +provincialism/SM +provincial/SY +provisional/YS +provisioner/M +provision/R +proviso/MS +provocateur/S +provocativeness/SM +provocative/P +provoked/U +provoke/GZDRS +provoking/Y +provolone/SM +Provo/M +provost/MS +prowess/SM +prowler/M +prowl/RDSZG +prow/TRMS +proximal/Y +proximateness/M +proximate/PY +proximity/MS +Proxmire/M +proxy/SM +Prozac +prude/MS +Prudence/M +prudence/SM +Prudential/M +prudential/SY +prudent/Y +prudery/MS +Prudi/M +prudishness/SM +prudish/YP +Prudy/M +Prue/M +Pruitt/M +Pru/M +prune/DSRGZM +pruner/M +prurience/MS +prurient/Y +Prussia/M +Prussian/S +prussic +Prut/M +Pryce/M +pry/DRSGTZ +pryer's +prying/Y +P's +PS +p's/A +psalmist/SM +psalm/SGDM +Psalms/M +psalter +Psalter/SM +psaltery/MS +psephologist/M +pseudonymous +pseudonym/SM +pseudopod +pseudo/S +pseudoscience/S +pshaw/SDG +psi/S +psittacoses +psittacosis/M +psoriases +psoriasis/M +psst/S +PST +psychedelically +psychedelic/S +psyche/M +Psyche/M +psychiatric +psychiatrist/SM +psychiatry/MS +psychical/Y +psychic/MS +psychoacoustic/S +psychoacoustics/M +psychoactive +psychoanalysis/M +psychoanalyst/S +psychoanalytic +psychoanalytical +psychoanalyze/SDG +psychobabble/S +psychobiology/M +psychocultural +psychodrama/MS +psychogenic +psychokinesis/M +psycholinguistic/S +psycholinguistics/M +psycholinguists +psychological/Y +psychologist/MS +psychology/MS +psychometric/S +psychometrics/M +psychometry/M +psychoneuroses +psychoneurosis/M +psychopathic/S +psychopath/M +psychopathology/M +psychopaths +psychopathy/SM +psychophysical/Y +psychophysic/S +psychophysics/M +psychophysiology/M +psychosis/M +psycho/SM +psychosocial/Y +psychosomatic/S +psychosomatics/M +psychos/S +psychotherapeutic/S +psychotherapist/MS +psychotherapy/SM +psychotically +psychotic/S +psychotropic/S +psychs +psych/SDG +PT +PTA +Ptah/M +ptarmigan/MS +pt/C +pterodactyl/SM +Pt/M +PTO +Ptolemaic +Ptolemaists +Ptolemy/MS +ptomaine/MS +Pu +pubbed +pubbing +pubertal +puberty/MS +pubes +pubescence/S +pubescent +pubic +pubis/M +publican/AMS +publication/AMS +publicist/SM +publicity/SM +publicized/U +publicize/SDG +publicness/M +publics/A +public/YSP +publishable/U +published/UA +publisher/ASM +publishes/A +publishing/M +publish/JDRSBZG +pub/MS +Puccini/M +puce/SM +pucker/DG +Puckett/M +puck/GZSDRM +puckishness/S +puckish/YP +Puck/M +pudding/MS +puddle/JMGRSD +puddler/M +puddling/M +puddly +pudenda +pudendum/M +pudginess/SM +pudgy/PRT +Puebla/M +Pueblo/MS +pueblo/SM +puerile/Y +puerility/SM +puerperal +puers +Puerto/M +puffball/SM +puffer/M +puffery/M +puffiness/S +puffin/SM +Puff/M +puff/SGZDRM +puffy/PRT +Puget/M +pugged +pugging +Pugh/M +pugilism/SM +pugilistic +pugilist/S +pug/MS +pugnaciousness/MS +pugnacious/YP +pugnacity/SM +puissant/Y +puke/GDS +pukka +Pulaski/SM +pulchritude/SM +pulchritudinous/M +pule/GDS +Pulitzer/SM +pullback/S +pull/DRGZSJ +pullet/SM +pulley/SM +Pullman/MS +pullout/S +pullover/SM +pulmonary +pulpiness/S +pulpit/MS +pulp/MDRGS +pulpwood/MS +pulpy/PTR +pulsar/MS +pulsate/NGSDX +pulsation/M +pulse/ADSG +pulser +pulse's +pulverable +pulverization/MS +pulverized/U +pulverize/GZSRD +pulverizer/M +pulverizes/UA +puma/SM +pumice/SDMG +pummel/SDG +pumpernickel/SM +pump/GZSMDR +pumping/M +pumpkin/MS +punchbowl/M +punched/U +puncheon/MS +puncher/M +punch/GRSDJBZ +punchline/S +Punch/M +punchy/RT +punctilio/SM +punctiliousness/SM +punctilious/PY +punctualities +punctuality/UM +punctualness/M +punctual/PY +punctuate/SDXNG +punctuational +punctuation/M +puncture/SDMG +punditry/S +pundit/SM +pungency/MS +pungent/Y +Punic +puniness/MS +punished/U +punisher/M +punishment/MS +punish/RSDGBL +punitiveness/M +punitive/YP +Punjabi/M +Punjab/M +punk/TRMS +punky/PRS +pun/MS +punned +punning +punster/SM +punter/M +punt/GZMDRS +puny/PTR +pupae +pupal +pupa/M +pupate/NGSD +pupillage/M +pupil/SM +pup/MS +pupped +puppeteer/SM +puppetry/MS +puppet/SM +pupping +puppy/GSDM +puppyish +purblind +Purcell/M +purchasable +purchase/GASD +purchaser/MS +purdah/M +purdahs +Purdue/M +purebred/S +puree/DSM +pureeing +pureness/MS +pure/PYTGDR +purgation/M +purgative/MS +purgatorial +purgatory/SM +purge/GZDSR +purger/M +purify/GSRDNXZ +Purim/SM +Purina/M +purine/SM +purism/MS +puristic +purist/MS +puritanic +puritanical/Y +Puritanism/MS +puritanism/S +puritan/SM +Puritan/SM +purity/SM +purlieu/SM +purl/MDGS +purloin/DRGS +purloiner/M +purple/MTGRSD +purplish +purport/DRSZG +purported/Y +purposefulness/S +purposeful/YP +purposelessness/M +purposeless/PY +purpose/SDVGYM +purposiveness/M +purposive/YP +purr/DSG +purring/Y +purse/DSRGZM +purser/M +pursuance/MS +pursuant +pursuer/M +pursue/ZGRSD +pursuit/MS +purulence/MS +purulent +Purus +purveyance/MS +purvey/DGS +purveyor/MS +purview/SM +Pusan/M +Pusey/M +pushbutton/S +pushcart/SM +pushchair/SM +pushdown +push/DSRBGZ +pusher/M +pushily +pushiness/MS +Pushkin/M +pushover/SM +Pushtu/M +pushy/PRT +pusillanimity/MS +pusillanimous/Y +pus/SM +puss/S +pussycat/S +pussyfoot/DSG +pussy/TRSM +pustular +pustule/MS +putative/Y +Putin/M +put/IS +Putnam/M +Putnem/M +putout/S +putrefaction/SM +putrefactive +putrefy/DSG +putrescence/MS +putrescent +putridity/M +putridness/M +putrid/YP +putsch/S +putted/I +puttee/MS +putter/RDMGZ +putting/I +putt/SGZMDR +puttying/M +putty/SDMG +puzzle/JRSDZLG +puzzlement/MS +puzzler/M +PVC +pvt +Pvt/M +PW +PX +p/XTGJ +Pygmalion/M +pygmy/SM +Pygmy/SM +Pyhrric/M +pyknotic +Pyle/M +pylon/SM +pylori +pyloric +pylorus/M +Pym/M +Pynchon/M +Pyongyang/M +pyorrhea/SM +Pyotr/M +pyramidal/Y +pyramid/GMDS +pyre/MS +Pyrenees +Pyrex/SM +pyridine/M +pyrimidine/SM +pyrite/MS +pyroelectric +pyroelectricity/SM +pyrolysis/M +pyrolyze/RSM +pyromaniac/SM +pyromania/MS +pyrometer/MS +pyrometry/M +pyrophosphate/M +pyrotechnical +pyrotechnic/S +pyrotechnics/M +pyroxene/M +pyroxenite/M +Pyrrhic +Pythagoras/M +Pythagorean/S +Pythias +Python/M +python/MS +pyx/MDSG +q +Q +QA +Qaddafi/M +Qantas/M +Qatar/M +QB +QC +QED +Qingdao +Qiqihar/M +QM +Qom/M +qr +q's +Q's +qt +qty +qua +Quaalude/M +quackery/MS +quackish +quack/SDG +quadded +quadding +quadrangle/MS +quadrangular/M +quadrant/MS +quadraphonic/S +quadrapole +quadratical/Y +quadratic/SM +quadrature/MS +quadrennial/SY +quadrennium/MS +quadric +quadriceps/SM +quadrilateral/S +quadrille/XMGNSD +quadrillion/MH +quadripartite/NY +quadriplegia/SM +quadriplegic/SM +quadrivia +quadrivium/M +quadrupedal +quadruped/MS +quadruple/GSD +quadruplet/SM +quadruplicate/GDS +quadruply/NX +quadrupole +quad/SM +quadword/MS +quaffer/M +quaff/SRDG +quagmire/DSMG +quahog/MS +quail/GSDM +quaintness/MS +quaint/PTYR +quake/GZDSR +Quakeress/M +Quakerism/S +Quaker/SM +quaky/RT +qualification/ME +qualified/UY +qualifier/SM +qualify/EGXSDN +qualitative/Y +quality/MS +qualmish +qualm/SM +quandary/MS +quangos +quanta/M +Quantico/M +quantifiable/U +quantified/U +quantifier/M +quantify/GNSRDZX +quantile/S +quantitativeness/M +quantitative/PY +quantity/MS +quantization/MS +quantizer/M +quantize/ZGDRS +quantum/M +quarantine/DSGM +quark/SM +quarreler/M +quarrellings +quarrelsomeness/MS +quarrelsome/PY +quarrel/SZDRMG +quarrier/M +quarryman/M +quarrymen +quarry/RSDGM +quarterback/SGMD +quarterdeck/MS +quarterer/M +quarterfinal/MS +quartering/M +quarterly/S +quartermaster/MS +quarter/MDRYG +quarterstaff/M +quarterstaves +quartet/SM +quartic/S +quartile/SM +quarto/SM +quart/RMSZ +quartzite/M +quartz/SM +quasar/SM +quash/GSD +quasi +quasilinear +Quasimodo/M +Quaternary +quaternary/S +quaternion/SM +quatrain/SM +quaver/GDS +quavering/Y +quavery +Quayle/M +quayside/M +quay/SM +queasily +queasiness/SM +queasy/TRP +Quebec/M +Quechua/M +Queenie/M +queenly/RT +queen/SGMDY +Queensland/M +Queen/SM +queerness/S +queer/STGRDYP +queller/M +quell/SRDG +Que/M +quenchable/U +quenched/U +quencher/M +quench/GZRSDB +quenchless +Quentin/M +Quent/M +Querida/M +quern/M +querulousness/S +querulous/YP +query/MGRSD +quested/A +quester/AS +quester's +quest/FSIM +questing +questionableness/M +questionable/P +questionably/U +questioned/UA +questioner/M +questioning/UY +questionnaire/MS +question/SMRDGBZJ +quests/A +Quetzalcoatl/M +queued/C +queue/GZMDSR +queuer/M +queues/C +queuing/C +Quezon/M +quibble/GZRSD +quibbler/M +quiche/SM +quicken/RDG +quickie/MS +quicklime/SM +quickness/MS +quick/RNYTXPS +quicksand/MS +quicksilver/GDMS +quickstep/SM +quid/SM +quiesce/D +quiescence/MS +quiescent/YP +quieted/E +quieten/SGD +quieter/E +quieter's +quieting/E +quietly/E +quietness/MS +quiets/E +quietude/IEMS +quietus/MS +quiet/UTGPSDRY +Quillan/M +quill/GSDM +Quill/M +quilter/M +quilting/M +quilt/SZJGRDM +quincentenary/M +quince/SM +Quincey/M +quincy/M +Quincy/M +quinine/MS +Quinlan/M +Quinn/M +quinquennial/Y +quinsy/SM +Quinta/M +Quintana/M +quintessence/SM +quintessential/Y +quintet/SM +quintic +quintile/SM +Quintilian/M +Quintilla/M +quintillion/MH +quintillionth/M +Quintina/M +Quintin/M +Quint/M +quint/MS +Quinton/M +quintuple/SDG +quintuplet/MS +Quintus/M +quip/MS +quipped +quipper +quipping +quipster/SM +quired/AI +quire/MDSG +quires/AI +Quirinal/M +quiring/IA +quirkiness/SM +quirk/SGMD +quirky/PTR +quirt/SDMG +Quisling/M +quisling/SM +quitclaim/GDMS +quit/DGS +quite/SADG +Quito/M +quittance/SM +quitter/SM +quitting +quiver/GDS +quivering/Y +quivery +Quixote/M +quixotic +quixotically +Quixotism/M +quiz/M +quizzed +quizzer/SM +quizzes +quizzical/Y +quizzing +quo/H +quoin/SGMD +quoit/GSDM +quondam +quonset +Quonset +quorate/I +quorum/MS +quotability/S +quota/MS +quotation/SM +quoter/M +quote/UGSD +quot/GDRB +quotidian/S +quotient/SM +qwerty +qwertys +Rabat/M +rabbet/GSMD +Rabbi/M +rabbi/MS +rabbinate/MS +rabbinic +rabbinical/Y +rabbiter/M +rabbit/MRDSG +rabble/GMRSD +rabbler/M +Rabelaisian +Rabelais/M +rabidness/SM +rabid/YP +rabies +Rabi/M +Rabin/M +rabis +Rab/M +raccoon/SM +racecourse/MS +racegoers +racehorse/SM +raceme/MS +race/MZGDRSJ +racer/M +racetrack/SMR +raceway/SM +Rachael/M +Rachele/M +Rachelle/M +Rachel/M +Rachmaninoff/M +racialism/MS +racialist/MS +racial/Y +racily +Racine/M +raciness/MS +racism/S +racist/MS +racketeer/MDSJG +racket/SMDG +rackety +rack/GDRMS +raconteur/SM +racoon's +racquetball/S +racquet's +racy/RTP +radarscope/MS +radar/SM +Radcliffe/M +radded +radder +raddest +Raddie/M +radding +Raddy/M +radial/SY +radiance/SM +radian/SM +radiant/YS +radiate/XSDYVNG +radiation/M +radiative/Y +radiator/MS +radicalism/MS +radicalization/S +radicalize/GSD +radicalness/M +radical/SPY +radices's +radii/M +radioactive/Y +radioactivity/MS +radioastronomical +radioastronomy +radiocarbon/MS +radiochemical/Y +radiochemistry/M +radiogalaxy/S +radiogram/SM +radiographer/MS +radiographic +radiography/MS +radioisotope/SM +radiologic +radiological/Y +radiologist/MS +radiology/MS +radioman/M +radiomen +radiometer/SM +radiometric +radiometry/MS +radionics +radionuclide/M +radiopasteurization +radiophone/MS +radiophysics +radioscopy/SM +radio/SMDG +radiosonde/SM +radiosterilization +radiosterilized +radiotelegraph +radiotelegraphs +radiotelegraphy/MS +radiotelephone/SM +radiotherapist/SM +radiotherapy/SM +radish/MS +radium/MS +radius/M +radix/SM +Rad/M +radon/SM +rad/S +Raeann/M +Rae/M +RAF +Rafaela/M +Rafaelia/M +Rafaelita/M +Rafaellle/M +Rafaello/M +Rafael/M +Rafa/M +Rafe/M +Raffaello/M +Raffarty/M +Rafferty/M +raffia/SM +raffishness/SM +raffish/PY +raffle/MSDG +Raff/M +Rafi/M +Raf/M +rafter/DM +raft/GZSMDR +raga/MS +ragamuffin/MS +ragbag/SM +rage/MS +raggedness/SM +ragged/PRYT +raggedy/TR +ragging +rag/GSMD +raging/Y +raglan/MS +Ragnar/M +Ragnark +ragout/SMDG +ragtag/MS +ragtime/MS +ragweed/MS +ragwort/M +Rahal/M +rah/DG +Rahel/M +rahs +raider/M +raid/MDRSGZ +railbird/S +rail/CDGS +railer/SM +railhead/SM +railing/MS +raillery/MS +railroader/M +railroading/M +railroad/SZRDMGJ +rail's +railwaymen +railway/MS +raiment/SM +Raimondo/M +Raimund/M +Raimundo/M +Raina/M +rainbow/MS +raincloud/S +raincoat/SM +raindrop/SM +Raine/MR +Rainer/M +rainfall/SM +rainforest's +rain/GSDM +Rainier/M +rainless +rainmaker/SM +rainmaking/MS +rainproof/GSD +rainstorm/SM +rainwater/MS +rainy/RT +raise/DSRGZ +raiser/M +raising/M +raisin/MS +rajah/M +rajahs +Rajive/M +raj/M +Rakel/M +rake/MGDRS +raker/M +rakishness/MS +rakish/PY +Raleigh/M +Ralf/M +Ralina/M +rally/GSD +Ralph/M +Ralston/M +Ra/M +Ramada/M +Ramadan/SM +Ramakrishna/M +Rama/M +Raman/M +Ramayana/M +ramble/JRSDGZ +rambler/M +rambling/Y +Rambo/M +rambunctiousness/S +rambunctious/PY +ramekin/SM +ramie/MS +ramification/M +ramify/XNGSD +Ramirez/M +Ramiro/M +ramjet/SM +Ram/M +rammed +ramming +Ramo/MS +Ramona/M +Ramonda/M +Ramon/M +rampage/SDG +rampancy/S +rampant/Y +rampart/SGMD +ramp/GMDS +ramrodded +ramrodding +ramrod/MS +RAM/S +Ramsay/M +Ramses/M +Ramsey/M +ramshackle +ram/SM +rams/S +ran/A +Rana/M +Rancell/M +Rance/M +rancher/M +rancho/SM +ranch/ZRSDMJG +rancidity/MS +rancidness/SM +rancid/P +rancorous/Y +rancor/SM +Randall/M +Randal/M +Randa/M +Randee/M +Randell/M +Randene/M +Randie/M +Randi/M +randiness/S +Rand/M +rand/MDGS +Randolf/M +Randolph/M +randomization/SM +randomize/SRDG +randomness/SM +random/PYS +Randy/M +randy/PRST +Ranee/M +ranee/SM +ranged/C +rangeland/S +ranger/M +ranges/C +range/SM +rang/GZDR +ranginess/S +ranging/C +Rangoon/M +rangy/RPT +Rania/M +Ranice/M +Ranier/M +Rani/MR +Ranique/M +rani's +ranked/U +ranker/M +rank/GZTYDRMPJS +Rankine/M +ranking/M +Rankin/M +rankle/SDG +rankness/MS +Ranna/M +ransacker/M +ransack/GRDS +Ransell/M +ransomer/M +Ransom/M +ransom/ZGMRDS +ranter/M +rant/GZDRJS +ranting/Y +Raoul/M +rapaciousness/MS +rapacious/YP +rapacity/MS +rapeseed/M +rape/SM +Raphaela/M +Raphael/M +rapidity/MS +rapidness/S +rapid/YRPST +rapier/SM +rapine/SM +rapist/MS +rap/MDRSZG +rapped +rappelled +rappelling +rappel/S +rapper/SM +rapping/M +rapporteur/SM +rapport/SM +rapprochement/SM +rapscallion/MS +raptness/S +rapture/MGSD +rapturousness/M +rapturous/YP +rapt/YP +Rapunzel/M +Raquela/M +Raquel/M +rarebit/MS +rarefaction/MS +rarefy/GSD +rareness/MS +rare/YTPGDRS +rarity/SM +Rasalgethi/M +Rasalhague/M +rascal/SMY +rasher/M +rashness/S +rash/PZTYSR +Rasia/M +Rasla/M +Rasmussen/M +raspberry/SM +rasper/M +rasping/Y +rasp/SGJMDR +Rasputin/M +raspy/RT +Rastaban/M +Rastafarian/M +raster/MS +Rastus/M +ratchet/MDSG +rateable +rated/U +rate/KNGSD +ratepayer/SM +rater/M +rate's +Ratfor/M +rather +Rather/M +rathskeller/SM +ratifier/M +ratify/ZSRDGXN +rating/M +ratiocinate/VNGSDX +ratiocination/M +ratio/MS +rationale/SM +rationalism/SM +rationalistic +rationalist/S +rationality/MS +rationalization/SM +rationalizer/M +rationalize/ZGSRD +rationalness/M +rational/YPS +ration/DSMG +Ratliff/M +ratlike +ratline/SM +rat/MDRSJZGB +rattail +rattan/MS +ratted +ratter/MS +ratting +rattlebrain/DMS +rattle/RSDJGZ +rattlesnake/MS +rattletrap/MS +rattling/Y +rattly/TR +rattrap/SM +ratty/RT +raucousness/SM +raucous/YP +Raul/M +raunchily +raunchiness/S +raunchy/RTP +ravage/GZRSD +ravager/M +raveling/S +Ravel/M +ravel/UGDS +raven/JGMRDS +Raven/M +ravenous/YP +raver/M +rave/ZGDRSJ +Ravid/M +Ravi/M +ravine/SDGM +ravioli/SM +ravisher/M +ravishing/Y +ravish/LSRDZG +ravishment/SM +Raviv/M +Rawalpindi/M +rawboned +rawhide/SDMG +Rawley/M +Rawlings/M +Rawlins/M +Rawlinson/M +rawness/SM +raw/PSRYT +Rawson/M +Rayburn/M +Raychel/M +Raye/M +ray/GSMD +Rayleigh/M +Ray/M +Raymond/M +Raymondville/M +Raymund/M +Raymundo/M +Rayna/M +Raynard/M +Raynell/M +Rayner/M +Raynor/M +rayon/SM +Rayshell/M +Raytheon/M +raze/DRSG +razer/M +razorback/SM +razorblades +razor/MDGS +razz/GDS +razzmatazz/S +Rb +RBI/S +RC +RCA +rcpt +RCS +rd +RD +RDA +Rd/M +reabbreviate +reachability +reachable/U +reachably +reached/U +reacher/M +reach/GRB +reacquisition +reactant/SM +reacted/U +reaction +reactionary/SM +reactivity +readability/MS +readable/P +readably +readdress/G +Reade/M +reader/M +readership/MS +Read/GM +readied +readies +readily +readinesses +readiness/UM +reading/M +Reading/M +read/JGZBR +readopt/G +readout/MS +reads/A +readying +ready/TUPR +Reagan/M +Reagen/M +realisms +realism's +realism/U +realistically/U +realistic/U +realist/SM +reality/USM +realizability/MS +realizableness/M +realizable/SMP +realizably/S +realization/MS +realized/U +realize/JRSDBZG +realizer/M +realizes/U +realizing/MY +realm/M +realness/S +realpolitik/SM +real/RSTP +realtor's +Realtor/S +realty/SM +Rea/M +reamer/M +ream/MDRGZ +Reamonn/M +reanimate +reaper/M +reappraise/G +reap/SGZ +rear/DRMSG +rearguard/MS +rearmost +rearrange/L +rearward/S +reasonableness/SMU +reasonable/UP +reasonably/U +Reasoner/M +reasoner/SM +reasoning/MS +reasonless +reasons +reason/UBDMG +reassess/GL +reassuringly/U +reattach/GSL +reawakening/M +Reba/M +rebate/M +Rebbecca/M +Rebeca/M +Rebecca's +Rebecka/M +Rebekah/M +Rebeka/M +Rebekkah/M +rebeller +rebellion/SM +rebelliousness/MS +rebellious/YP +rebel/MS +Rebe/M +rebid +rebidding +rebind/G +rebirth +reboil/G +rebook +reboot/ZR +rebound/G +rebroadcast/MG +rebuke/RSDG +rebuking/Y +rebus +rebuttal/SM +rebutting +rec +recalcitrance/SM +recalcitrant/S +recalibrate/N +recantation/S +recant/G +recap +recappable +recapping +recast/G +recd +rec'd +recede +receipt/SGDM +receivable/S +received/U +receiver/M +receivership/SM +receive/ZGRSDB +recency/M +recension/M +recentness/SM +recent/YPT +receptacle/SM +receptionist/MS +reception/MS +receptiveness/S +receptive/YP +receptivity/S +receptor/MS +recessional/S +recessionary +recessiveness/M +recessive/YPS +recess/SDMVG +rechargeable +recheck/G +recherch +recherches +recidivism/MS +recidivist/MS +Recife/M +recipe/MS +recipiency +recipient/MS +reciprocal/SY +reciprocate/NGXVDS +reciprocation/M +reciprocity/MS +recitalist/S +recital/MS +recitative/MS +reciter/M +recite/ZR +recked +recking +recklessness/S +reckless/PY +reckoner/M +reckoning/M +reckon/SGRDJ +reclaim/B +reclamation/SM +recliner/M +recline/RSDZG +recluse/MVNS +reclusion/M +recode/G +recognizability +recognizable/U +recognizably +recognize/BZGSRD +recognizedly/S +recognized/U +recognizer/M +recognizingly/S +recognizing/UY +recoilless +recoinage +recolor/GD +recombinant +recombine +recommended/U +recompense/GDS +recompute/B +reconciled/U +reconciler/M +reconcile/SRDGB +reconditeness/M +recondite/YP +reconfigurability +reconfigure/R +reconnaissance/MS +reconnect/R +reconnoiter/GSD +reconquer/G +reconsecrate +reconstitute +reconstructed/U +Reconstruction/M +reconsult/G +recontact/G +recontaminate/N +recontribute +recook/G +recopy/G +recorded/AU +records/A +record/ZGJ +recourse +recoverability +recoverable/U +recover/B +recovery/MS +recreant/S +recreational +recriminate/GNVXDS +recrimination/M +recriminatory +recross/G +recrudesce/GDS +recrudescence/MS +recrudescent +recruiter/M +recruitment/MS +recruit/ZSGDRML +recrystallize +rectal/Y +rectangle/SM +rectangular/Y +recta's +rectifiable +rectification/M +rectifier/M +rectify/DRSGXZN +rectilinear/Y +rectitude/MS +recto/MS +rector/SM +rectory/MS +rectum/SM +recumbent/Y +recuperate/VGNSDX +recuperation/M +recur +recurrence/MS +recurrent +recurse/NX +recursion/M +recusant/M +recuse +recyclable/S +recycle/BZ +redact/DGS +redaction/SM +redactor/MS +redbird/SM +redbreast/SM +redbrick/M +redbud/M +redcap/MS +redcoat/SM +redcurrant/M +redden/DGS +redder +reddest +redding +reddish/P +Redd/M +redeclaration +redecorate +redeemable/U +redeem/BRZ +redeemed/U +redeemer/M +Redeemer/M +redemptioner/M +redemption/RMS +redemptive +redeposit/M +redetermination +Redford/M +Redgrave/M +redhead/DRMS +Redhook/M +redial/G +redirect/G +redirection +redlining/S +Redmond/M +redneck/SMD +redness/MS +redo/G +redolence/MS +redolent +Redondo/M +redouble/S +redoubtably +redound/GDS +red/PYS +redshift/S +redskin/SM +Redstone/M +reduced/U +reducer/M +reduce/RSDGZ +reducibility/M +reducible +reducibly +reductionism/M +reductionist/S +reduction/SM +reduct/V +redundancy/SM +redundant/Y +redwood/SM +redye +redyeing +Reeba/M +Reebok/M +Reece/M +reecho/G +reed/GMDR +reediness/SM +reeding/M +Reed/M +Reedville/M +reedy/PTR +reefer/M +reef/GZSDRM +reeker/M +reek/GSR +reeler/M +reel's +reel/USDG +Ree/MDS +Reena/M +reenforcement +reentrant +Reese/M +reestimate/M +Reeta/M +Reeva/M +reeve/G +Reeves +reexamine +refection/SM +refectory/SM +refer/B +refereed/U +refereeing +referee/MSD +reference/CGSRD +referenced/U +reference's +referencing/U +referendum/MS +referentiality +referential/YM +referent/SM +referral/SM +referred +referrer/S +referring +reffed +reffing +refile +refinance +refined/U +refine/LZ +refinement/MS +refinish/G +refit +reflectance/M +reflected/U +reflectional +reflection/SM +reflectiveness/M +reflective/YP +reflectivity/M +reflector/MS +reflect/SDGV +reflexion/MS +reflexiveness/M +reflexive/PSY +reflexivity/M +reflex/YV +reflooring +refluent +reflux/G +refocus/G +refold/G +reforestation +reforge/G +reformatory/SM +reform/B +reformed/U +reformer/M +reformism/M +reformist/S +refract/DGVS +refractiveness/M +refractive/PY +refractometer/MS +refractoriness/M +refractory/PS +refrain/DGS +refreshed/U +refreshing/Y +refresh/LB +refreshment/MS +refrigerant/MS +refrigerated/U +refrigerate/XDSGN +refrigeration/M +refrigerator/MS +refrozen +refry/GS +refugee/MS +refuge/SDGM +Refugio/M +refulgence/SM +refulgent +refund/B +refunder/M +refurbish/L +refurbishment/S +refusal/SM +refuse/R +refuser/M +refutation/MS +refute/GZRSDB +refuter/M +ref/ZS +reg +regale/L +regalement/S +regal/GYRD +regalia/M +Regan/M +regard/EGDS +regardless/PY +regather/G +regatta/MS +regency/MS +regeneracy/MS +regenerately +regenerateness/M +regenerate/U +Regen/M +reggae/SM +Reggie/M +Reggi/MS +Reggy/M +regicide/SM +regime/MS +regimen/MS +regimental/S +regimentation/MS +regiment/SDMG +Reginae +Reginald/M +Regina/M +Reginauld/M +Regine/M +regionalism/MS +regional/SY +region/SM +Regis/M +register's +register/UDSG +registrable +registrant/SM +registrar/SM +registration/AM +registrations +registry/MS +Reg/MN +regnant +Regor/M +regress/DSGV +regression/MS +regressiveness/M +regressive/PY +regressors +regretfulness/M +regretful/PY +regret/S +regrettable +regrettably +regretted +regretting +reground +regroup/G +regrow/G +regularity/MS +regularization/MS +regularize/SDG +regular/YS +regulate/CSDXNG +regulated/U +regulation/M +regulative +regulator/SM +regulatory +Regulus/M +regurgitate/XGNSD +regurgitation/M +rehabbed +rehabbing +rehabilitate/SDXVGN +rehabilitation/M +rehab/S +rehang/G +rehear/GJ +rehearsal/SM +rehearse +rehearsed/U +rehearser/M +rehears/R +reheat/G +reheating/M +Rehnquist +rehydrate +Reichenberg/M +Reich/M +Reichstags +Reichstag's +Reidar/M +Reider/M +Reid/MR +reign/MDSG +Reiko/M +Reilly/M +reimburse/GSDBL +reimbursement/MS +Reinald/M +Reinaldo/MS +Reina/M +reindeer/M +Reine/M +reinforced/U +reinforce/GSRDL +reinforcement/MS +reinforcer/M +rein/GDM +Reinhard/M +Reinhardt/M +Reinhold/M +Reinold/M +reinstate/L +reinstatement/MS +reinsurance +Reinwald/M +reissue +REIT +reiterative/SP +rejecter/M +rejecting/Y +rejection/SM +rejector/MS +reject/RDVGS +rejigger +rejoice/RSDJG +rejoicing/Y +rejoinder/SM +rejuvenate/NGSDX +rejuvenatory +relapse +relatedly +relatedness/MS +related/U +relater/M +relate/XVNGSZ +relational/Y +relation/M +relationship/MS +relativeness/M +relative/SPY +relativism/M +relativistic +relativistically +relativist/MS +relativity/MS +relator's +relaxant/SM +relaxation/MS +relaxedness/M +relaxed/YP +relax/GZD +relaxing/Y +relay/GDM +relearn/G +releasable/U +release/B +released/U +relenting/U +relentlessness/SM +relentless/PY +relent/SDG +relevance/SM +relevancy/MS +relevant/Y +reliability/UMS +reliables +reliable/U +reliably/U +reliance/MS +reliant/Y +relicense/R +relic/MS +relict/C +relict's +relief/M +relievedly +relieved/U +reliever/M +relieve/RSDZG +religionists +religion/SM +religiosity/M +religiousness/MS +religious/PY +relink/G +relinquish/GSDL +relinquishment/SM +reliquary/MS +relish/GSD +relive/GB +reload/GR +relocate/B +reluctance/MS +reluctant/Y +rel/V +rely/DG +rem +Re/M +remade/S +remainder/SGMD +remain/GD +remake/M +remand/DGS +remap +remapping +remarkableness/S +remarkable/U +remarkably +remark/BG +remarked/U +Remarque/M +rematch/G +Rembrandt/M +remeasure/D +remediableness/M +remediable/P +remedy/SDMG +remembered/U +rememberer/M +remember/GR +remembrance/MRS +remembrancer/M +Remington/M +reminisce/GSD +reminiscence/SM +reminiscent/Y +remissness/MS +remiss/YP +remit/S +remittance/MS +remitted +remitting/U +Rem/M +remnant/MS +remodel/G +remolding +remonstrant/MS +remonstrate/SDXVNG +remonstration/M +remonstrative/Y +remorsefulness/M +remorseful/PY +remorselessness/MS +remorseless/YP +remorse/SM +remoteness/MS +remote/RPTY +remoulds +removal/MS +REM/S +remunerated/U +remunerate/VNGXSD +remuneration/M +remunerativeness/M +remunerative/YP +Remus/M +Remy/M +Renado/M +Renae/M +renaissance/S +Renaissance/SM +renal +Renaldo/M +Rena/M +Renard/M +Renascence/SM +Renata/M +Renate/M +Renato/M +renaturation +Renaud/M +Renault/MS +rend +renderer/M +render/GJRD +rendering/M +rendezvous/DSMG +rendition/GSDM +rend/RGZS +Renee/M +renegade/SDMG +renege/GZRSD +reneger/M +Renelle/M +Renell/M +Rene/M +renewal/MS +renew/BG +renewer/M +Renie/M +rennet/MS +Rennie/M +rennin/SM +Renoir/M +Reno/M +renounce/LGRSD +renouncement/MS +renouncer/M +renovate/NGXSD +renovation/M +renovator/SM +renown/SGDM +Rensselaer/M +rentaller +rental/SM +renter/M +rent/GZMDRS +renumber/G +renumeration +renunciate/VNX +renunciation/M +Renville/M +reoccupy/G +reopen/G +reorganized/U +repack/G +repairable/U +repair/BZGR +repairer/M +repairman/M +repairmen +repairs/E +repaper +reparable +reparation/SM +reparteeing +repartee/MDS +repartition/Z +repast/G +repatriate/SDXNG +repave +repealer/M +repeal/GR +repeatability/M +repeatable/U +repeatably +repeated/Y +repeater/M +repeat/RDJBZG +repelled +repellent/SY +repelling/Y +repel/S +repentance/SM +repentant/SY +repent/RDG +repertoire/SM +repertory/SM +repetition +repetitiousness/S +repetitious/YP +repetitiveness/MS +repetitive/PY +repine/R +repiner/M +replace/RL +replay/GM +replenish/LRSDG +replenishment/S +repleteness/MS +replete/SDPXGN +repletion/M +replica/SM +replicate/SDVG +replicator/S +replug +reply/X +Rep/M +repopulate +reported/Y +reportorial/Y +reposeful +repose/M +repository/MS +reprehend/GDS +reprehensibility/MS +reprehensibleness/M +reprehensible/P +reprehensibly +reprehension/MS +representable/U +representational/Y +representativeness/M +Representative/S +representative/SYMP +representativity +represented/U +represent/GB +repression/SM +repressiveness/M +repressive/YP +repress/V +reprieve/GDS +reprimand/SGMD +reprint/M +reprisal/MS +reproacher/M +reproachfulness/M +reproachful/YP +reproach/GRSDB +reproaching/Y +reprobate/N +reprocess/G +reproducibility/MS +reproducible/S +reproducibly +reproductive/S +reproof/G +reprove/R +reproving/Y +rep/S +reptile/SM +reptilian/S +Republicanism/S +republicanism/SM +Republican/S +republic/M +republish/G +repudiate/XGNSD +repudiation/M +repudiator/S +repugnance/MS +repugnant/Y +repulse/VNX +repulsion/M +repulsiveness/MS +repulsive/PY +reputability/SM +reputably/E +reputation/SM +reputed/Y +repute/ESB +reputing +requested/U +request/G +Requiem/MS +requiem/SM +require/LR +requirement/MS +requisiteness/M +requisite/PNXS +requisitioner/M +requisition/GDRM +requital/MS +requited/U +requiter/M +requite/RZ +reread/G +rerecord/G +rerouteing +rerunning +res/C +rescale +rescind/SDRG +rescission/SM +rescue/GZRSD +reseal/BG +research/MB +reselect/G +resemblant +resemble/DSG +resend/G +resent/DSLG +resentfulness/SM +resentful/PY +resentment/MS +reserpine/MS +reservation/MS +reservednesses +reservedness/UM +reserved/UYP +reservist/SM +reservoir/MS +reset/RDG +resettle/L +reshipping +reshow/G +reshuffle/M +reside/G +residence/MS +residency/SM +residential/Y +resident/SM +resider/M +residua +residual/YS +residuary +residue/SM +residuum/M +resignation/MS +resigned/YP +resilience/MS +resiliency/S +resilient/Y +resin/D +resinlike +resinous +resiny +resistance/SM +Resistance/SM +resistantly +resistants +resistant/U +resisted/U +resistible +resistibly +resisting/U +resistiveness/M +resistive/PY +resistivity/M +resistless +resistor/MS +resist/RDZVGS +resize/G +resold +resole/G +resoluble +resoluteness/MS +resolute/PYTRV +resolvability/M +resolvable/U +resolved/U +resolvent +resonance/SM +resonant/YS +resonate/DSG +resonator/MS +resorption/MS +resort/R +resound/G +resourcefulness/SM +resourceful/PY +resp +respectability/SM +respectable/SP +respectably +respect/BSDRMZGV +respected/E +respectful/EY +respectfulness/SM +respecting/E +respectiveness/M +respective/PY +respect's/E +respects/E +respell/G +respiration/MS +respirator/SM +respiratory/M +resplendence/MS +resplendent/Y +respondent/MS +respond/SDRZG +responser/M +response/RSXMV +responsibility/MS +responsibleness/M +responsible/P +responsibly +responsiveness/MSU +responsive/YPU +respray/G +restart/B +restate/L +restaurant/SM +restaurateur/SM +rest/DRSGVM +rested/U +rester/M +restfuller +restfullest +restfulness/MS +restful/YP +restitution/SM +restiveness/SM +restive/PY +restlessness/MS +restless/YP +restorability +Restoration/M +restoration/MS +restorative/PYS +restorer/M +restore/Z +restrained/UY +restraint/MS +restrict/DVGS +restricted/YU +restriction/SM +restrictively +restrictiveness/MS +restrictives +restrictive/U +restroom/SM +restructurability +restructure +rest's/U +rests/U +restudy/M +restyle +resubstitute +resultant/YS +result/SGMD +resume/SDBG +resumption/MS +resurface +resurgence/MS +resurgent +resurrect/GSD +resurrection/SM +resurvey/G +resuscitate/XSDVNG +resuscitation/M +resuscitator/MS +retail/Z +retainer/M +retain/LZGSRD +retake +retaliate/VNGXSD +retaliation/M +retaliatory +Reta/M +retardant/SM +retardation/SM +retarder/M +retard/ZGRDS +retch/SDG +retention/SM +retentiveness/S +retentive/YP +retentivity/M +retest/G +Retha/M +rethought +reticence/S +reticent/Y +reticle/SM +reticular +reticulate/GNYXSD +reticulation/M +reticule/MS +reticulum/M +retinal/S +retina/SM +retinue/MS +retiredness/M +retiree/MS +retire/L +retirement/SM +retiring/YP +retort/GD +retract/DG +retractile +retrench/L +retrenchment/MS +retributed +retribution/MS +retributive +retrieval/SM +retriever/M +retrieve/ZGDRSB +retroactive/Y +retrofire/GMSD +retrofit/S +retrofitted +retrofitting +retroflection +retroflex/D +retroflexion/M +retrogradations +retrograde/GYDS +retrogression/MS +retrogressive/Y +retrogress/SDVG +retrorocket/MS +retro/SM +retrospection/MS +retrospective/SY +retrospect/SVGMD +retrovirus/S +retrovision +retry/G +retsina/SM +returnable/S +returned/U +returnee/SM +retype +Reube/M +Reuben/M +Reub/NM +Reunion/M +reuse/B +Reuters +Reuther/M +reutilization +Reuven/M +Reva/M +revanchist +revealed/U +revealingly +revealing/U +reveal/JBG +reveille/MS +revelation/MS +Revelation/MS +revelatory +revelry/MS +revel/SJRDGZ +revenge/MGSRD +revenger/M +revenuer/M +revenue/ZR +reverberant +reverberate/XVNGSD +reverberation/M +revere/GSD +Revere/M +reverencer/M +reverence/SRDGM +Reverend +reverend/SM +reverential/Y +reverent/Y +reverie/SM +reversal/MS +reverser/M +reverse/Y +reversibility/M +reversible/S +reversibly +reversioner/M +reversion/R +revers/M +reverter/M +revertible +revert/RDVGS +revet/L +revetment/SM +review/G +revile/GZSDL +revilement/MS +reviler/M +revise/BRZ +revised/U +revisionary +revisionism/SM +revisionist/SM +revitalize/ZR +revivalism/MS +revivalist/MS +revival/SM +reviver/M +revive/RSDG +revivification/M +revivify/X +Revkah/M +Revlon/M +Rev/M +revocable +revoke/GZRSD +revolter/M +revolt/GRD +revolting/Y +revolutionariness/M +revolutionary/MSP +revolutionist/MS +revolutionize/GDSRZ +revolutionizer/M +revolution/SM +revolve/BSRDZJG +revolver/M +revue/MS +revulsion/MS +revved +revving +rev/ZM +rewarded/U +rewarding/Y +rewarm/G +reweave +rewedding +reweigh/G +rewind/BGR +rewire/G +rework/G +rexes +Rex/M +Reyes +Reykjavik/M +re/YM +Rey/M +Reynaldo/M +Reyna/M +Reynard/M +Reynold/SM +rezone +Rf +RF +RFC +RFD +R/G +rhapsodic +rhapsodical +rhapsodize/GSD +rhapsody/SM +Rhea/M +rhea/SM +Rheba/M +Rhee/M +Rheims/M +Rheinholdt/M +Rhenish +rhenium/MS +rheology/M +rheostat/MS +rhesus/S +Rheta/M +rhetorical/YP +rhetorician/MS +rhetoric/MS +Rhetta/M +Rhett/M +rheumatically +rheumatic/S +rheumatics/M +rheumatism/SM +rheumatoid +rheum/MS +rheumy/RT +Rhiamon/M +Rhianna/M +Rhiannon/M +Rhianon/M +Rhinelander/M +Rhineland/RM +Rhine/M +rhinestone/SM +rhinitides +rhinitis/M +rhinoceros/MS +rhino/MS +rhinotracheitis +rhizome/MS +Rh/M +Rhoda/M +Rhodes +Rhodesia/M +Rhodesian/S +Rhodia/M +Rhodie/M +rhodium/MS +rhododendron/SM +rhodolite/M +rhodonite/M +Rhody/M +rhombic +rhomboidal +rhomboid/SM +rhombus/SM +rho/MS +Rhona/M +Rhonda/M +Rhone +rhubarb/MS +rhyme/DSRGZM +rhymester/MS +Rhys/M +rhythmical/Y +rhythmic/S +rhythmics/M +rhythm/MS +RI +rial/MS +Riane/M +Riannon/M +Rianon/M +ribaldry/MS +ribald/S +ribbed +Ribbentrop/M +ribber/S +ribbing/M +ribbon/DMSG +ribcage +rib/MS +riboflavin/MS +ribonucleic +ribosomal +ribosome/MS +Rica/M +Rican/SM +Ricard/M +Ricardo/M +Ricca/M +Riccardo/M +rice/DRSMZG +Rice/M +ricer/M +Richard/MS +Richardo/M +Richardson/M +Richart/M +Richelieu/M +richen/DG +Richey/M +Richfield/M +Richie/M +Richland/M +Rich/M +Richmond/M +Richmound/M +richness/MS +Richter/M +Richthofen/M +Richy/M +rich/YNSRPT +Rici/M +Rickard/M +Rickenbacker/M +Rickenbaugh/M +Rickert/M +rickets/M +rickety/RT +Rickey/M +rick/GSDM +Rickie/M +Ricki/M +Rick/M +Rickover/M +rickrack/MS +rickshaw/SM +Ricky/M +Ric/M +ricochet/GSD +Rico/M +Ricoriki/M +ricotta/MS +riddance/SM +ridden +ridding +riddle/GMRSD +Riddle/M +ride/CZSGR +Ride/M +rider/CM +riderless +ridership/S +ridge/DSGM +Ridgefield/M +ridgepole/SM +Ridgway/M +ridgy/RT +ridicule/MGDRS +ridiculer/M +ridiculousness/MS +ridiculous/PY +riding/M +rid/ZGRJSB +Riemann/M +Riesling/SM +rife/RT +riff/GSDM +riffle/SDG +riffraff/SM +rifled/U +rifle/GZMDSR +rifleman/M +riflemen +rifler/M +rifling/M +rift/GSMD +Riga/M +rigamarole's +rigatoni/M +Rigel/M +rigged +rigger/SM +rigging/MS +Riggs/M +righteousnesses/U +righteousness/MS +righteous/PYU +rightfulness/MS +rightful/PY +rightism/SM +rightist/S +rightmost +rightness/MS +Right/S +right/SGTPYRDN +rightsize/SDG +rights/M +rightward/S +rigidify/S +rigidity/S +rigidness/S +rigid/YP +rigmarole/MS +rig/MS +Rigoberto/M +Rigoletto/M +rigor/MS +rigorousness/S +rigorous/YP +Riki/M +Rikki/M +Rik/M +rile/DSG +Riley/M +Rilke/M +rill/GSMD +Rimbaud/M +rime/MS +rimer/M +rim/GSMDR +rimless +rimmed +rimming +Rinaldo/M +Rina/M +rind/MDGS +Rinehart/M +ringer/M +ring/GZJDRM +ringing/Y +ringleader/MS +ringlet/SM +ringlike +Ringling/M +Ring/M +ringmaster/MS +Ringo/M +ringside/ZMRS +ringworm/SM +rink/GDRMS +rinse/DSRG +Riobard/M +Rio/MS +Riordan/M +rioter/M +riotousness/M +riotous/PY +riot/SMDRGZJ +RIP +riparian/S +ripcord/SM +ripened/U +ripenesses +ripeness/UM +ripen/RDG +ripe/PSY +riper/U +ripest/U +Ripley/M +Rip/M +rip/NDRSXTG +ripoff/S +riposte/SDMG +ripped +ripper/SM +ripping +rippler/M +ripple/RSDGM +ripply/TR +ripsaw/GDMS +riptide/SM +Risa/M +RISC +risen +riser/M +rise/RSJZG +risibility/SM +risible/S +rising/M +risker/M +risk/GSDRM +riskily +riskiness/MS +risky/RTP +risotto/SM +risqu +rissole/M +Ritalin +Rita/M +Ritchie/M +rite/DSM +Ritter/M +ritualism/SM +ritualistic +ritualistically +ritualized +ritual/MSY +Ritz/M +ritzy/TR +rivaled/U +Rivalee/M +rivalry/MS +rival/SGDM +Riva/MS +rive/CSGRD +Rivera/M +riverbank/SM +riverbed/S +riverboat/S +river/CM +riverfront +riverine +Rivers +Riverside/M +riverside/S +Riverview/M +riveter/M +rivet/GZSRDM +riveting/Y +Riviera/MS +Rivi/M +Rivkah/M +rivulet/SM +Rivy/M +riv/ZGNDR +Riyadh/M +riyal/SM +rm +RMS +RN +RNA +Rn/M +roach/GSDM +Roach/M +roadbed/MS +roadblock/SMDG +roadhouse/SM +roadie/S +roadkill/S +road/MIS +roadrunner/MS +roadshow/S +roadside/S +roadsigns +roadster/SM +roadsweepers +roadway/SM +roadwork/SM +roadworthy +roam/DRGZS +Roana/M +Roanna/M +Roanne/M +Roanoke/M +roan/S +roar/DRSJGZ +roarer/M +roaring/T +Roarke/M +roaster/M +roast/SGJZRD +robbed +robber/SM +Robbert/M +robbery/SM +Robbie/M +Robbi/M +robbing +Robbin/MS +Robb/M +Robby/M +Robbyn/M +robe/ESDG +Robena/M +Robenia/M +Robers/M +Roberson/M +Roberta/M +Robert/MS +Roberto/M +Robertson/SM +robe's +Robeson/M +Robespierre/M +Robina/M +Robinet/M +Robinetta/M +Robinette/M +Robinett/M +Robinia/M +Robin/M +robin/MS +Robinson/M +Robinsonville/M +Robles/M +Rob/MZ +robotic/S +robotism +robotize/GDS +robot/MS +rob/SDG +Robson/M +Robt/M +robustness/SM +robust/RYPT +Roby/M +Robyn/M +Rocco/M +Rocha/M +Rochambeau/M +Rochella/M +Rochelle/M +Rochell/M +Roche/M +Rochester/M +Rochette/M +Roch/M +rockabilly/MS +rockabye +Rockaway/MS +rockbound +Rockefeller/M +rocker/M +rocketry/MS +rocket/SMDG +Rockey/M +rockfall/S +Rockford/M +rock/GZDRMS +Rockie/M +rockiness/MS +Rockland/M +Rock/M +Rockne/M +Rockville/M +Rockwell/M +Rocky/SM +rocky/SRTP +rococo/MS +Roda/M +rodded +Roddenberry/M +rodder +Roddie/M +rodding +Rodd/M +Roddy/M +rodent/MS +rodeo/SMDG +Roderich/M +Roderick/M +Roderic/M +Roderigo/M +rode/S +Rodger/M +Rodge/ZMR +Rodie/M +Rodi/M +Rodina/M +Rodin/M +Rod/M +Rodney/M +Rodolfo/M +Rodolphe/M +Rodolph/M +Rodrick/M +Rodrigo/M +Rodriguez/M +Rodrique/M +Rodriquez/M +rod/SGMD +roebuck/SM +Roentgen's +roentgen/SM +roe/SM +ROFL +Rogelio/M +roger/GSD +Rogerio/M +Roger/M +Roget/M +Rog/MRZ +rogued/K +rogue/GMDS +roguery/MS +rogues/K +roguing/K +roguishness/SM +roguish/PY +roil/SGD +Roi/SM +roisterer/M +roister/SZGRD +Rojas/M +Roland/M +Rolando/M +Roldan/M +role/MS +Roley/M +Rolfe/M +Rolf/M +Rolland/M +rollback/SM +rolled/A +Rollerblade/S +rollerskating +roller/SM +rollick/DGS +rollicking/Y +Rollie/M +rolling/S +Rollin/SM +Rollo/M +rollover/S +roll/UDSG +Rolodex +Rolph/M +Rolvaag/M +ROM +romaine/MS +Romain/M +Roma/M +romancer/M +romance/RSDZMG +Romanesque/S +Romania/M +Romanian/SM +Romano/MS +Romanov/M +roman/S +Romansh/M +Romans/M +Roman/SM +romantically/U +romanticism/MS +Romanticism/S +romanticist/S +romanticize/SDG +romantic/MS +Romany/SM +Romeo/MS +romeo/S +Romero/M +Rome/SM +Rommel/M +Romney/M +Romola/M +Romona/M +Romonda/M +romper/M +romp/GSZDR +Rom/SM +Romulus/M +Romy/M +Ronalda/M +Ronald/M +Rona/M +Ronda/M +rondo/SM +Ronica/M +Ron/M +Ronna/M +Ronnica/M +Ronnie/M +Ronni/M +Ronny/M +Ronstadt/M +Rontgen +Roobbie/M +rood/MS +roof/DRMJGZS +roofer/M +roofgarden +roofing/M +roofless +rooftop/S +rookery/MS +rook/GDMS +rookie/SRMT +roomer/M +roomette/SM +roomful/MS +roominess/MS +roommate/SM +room/MDRGZS +roomy/TPSR +Rooney/M +Rooseveltian +Roosevelt/M +rooster/M +roost/SGZRDM +rooted/P +rooter/M +rootlessness/M +rootless/P +rootlet/SM +Root/M +root/MGDRZS +rootstock/M +rope/DRSMZG +roper/M +roping/M +Roquefort/MS +Roquemore/M +Rora/M +Rorie/M +Rori/M +Rorke/M +Rorschach +Rory/M +Rosabella/M +Rosabelle/M +Rosabel/M +Rosaleen/M +Rosales/M +Rosalia/M +Rosalie/M +Rosalinda/M +Rosalinde/M +Rosalind/M +Rosaline/M +Rosalynd/M +Rosalyn/M +Rosa/M +Rosamond/M +Rosamund/M +Rosana/M +Rosanna/M +Rosanne/M +Rosario/M +rosary/SM +Roscoe/M +Rosco/M +Roseanna/M +Roseanne/M +Roseann/M +roseate/Y +Roseau +rosebud/MS +rosebush/SM +Rosecrans/M +Roseland/M +Roselia/M +Roseline/M +Roselin/M +Rosella/M +Roselle/M +Rose/M +Rosemaria/M +Rosemarie/M +Rosemary/M +rosemary/MS +rose/MGDS +Rosemonde/M +Rosenberg/M +Rosenblum/M +Rosendo/M +Rosene/M +Rosen/M +Rosenthal/M +Rosenzweig/M +Rosetta/M +Rosette/M +rosette/SDMG +rosewater +rosewood/SM +Roshelle/M +Rosicrucian/M +Rosie/M +rosily +Rosina/M +rosiness/MS +rosin/SMDG +Rosita/M +Roslyn/M +Rosmunda/M +Ros/N +Ross +Rossetti/M +Rossie/M +Rossi/M +Rossini/M +Rossy/M +Rostand/M +roster/DMGS +Rostov/M +rostra's +rostrum/SM +Roswell/M +Rosy/M +rosy/RTP +rota/MS +Rotarian/SM +rotary/S +rotated/U +rotate/VGNXSD +rotational/Y +rotation/M +rotative/Y +rotator/SM +rotatory +ROTC +rote/MS +rotgut/MS +Roth/M +Rothschild/M +rotisserie/MS +rotogravure/SM +rotor/MS +rototill/RZ +rot/SDG +rotted +rottenness/S +rotten/RYSTP +Rotterdam/M +rotter/M +rotting +rotunda/SM +rotundity/S +rotundness/S +rotund/SDYPG +Rouault/M +rou/MS +rouge/GMDS +roughage/SM +roughen/DG +rougher/M +roughhouse/GDSM +roughish +roughneck/MDSG +roughness/MS +roughs +roughshod +rough/XPYRDNGT +roulette/MGDS +roundabout/PSM +roundedness/M +rounded/P +roundelay/SM +roundels +rounder/M +roundhead/D +roundheadedness/M +roundheaded/P +roundhouse/SM +roundish +roundness/MS +roundoff +roundup/MS +roundworm/MS +round/YRDSGPZT +Rourke/M +rouse/DSRG +rouser/M +Rousseau/M +roustabout/SM +roust/SGD +route/ASRDZGJ +router/M +route's +rout/GZJMDRS +routine/SYM +routing/M +routinize/GSD +Rouvin/M +rover/M +Rover/M +rove/ZGJDRS +roving/M +Rowan/M +rowboat/SM +rowdily +rowdiness/MS +rowdyism/MS +rowdy/PTSR +rowel/DMSG +Rowe/M +Rowena/M +rowen/M +Rowen/M +rower/M +Rowland/M +Rowley/M +Row/MN +Rowney/M +row/SJZMGNDR +Roxana/M +Roxane/M +Roxanna/M +Roxanne/M +Roxie/M +Roxi/M +Roxine/M +Roxy/M +royalist/SM +Royall/M +Royal/M +royal/SY +royalty/MS +Royce/M +Roy/M +Rozalie/M +Rozalin/M +Rozamond/M +Rozanna/M +Rozanne/M +Rozele/M +Rozella/M +Rozelle/M +Roze/M +Rozina/M +Roz/M +RP +rpm +RPM +rps +RR +Rriocard/M +rs +r's +R's +RSFSR +RSI +RSV +RSVP +RSX +rt +rte +Rte +RTFM +r/TGVJ +Rubaiyat/M +rubato/MS +rubbed +rubberize/GSD +rubberneck/DRMGSZ +rubber/SDMG +rubbery/TR +rubbing/M +rubbish/DSMG +rubbishy +rubble/GMSD +rubdown/MS +rubella/MS +Rube/M +Ruben/MS +rube/SM +Rubetta/M +Rubia/M +Rubicon/SM +rubicund +rubidium/SM +Rubie/M +Rubik/M +Rubi/M +Rubina/M +Rubin/M +Rubinstein/M +ruble/MS +rubout +rubric/MS +rub/S +Ruby/M +ruby/MTGDSR +Ruchbah/M +ruck/M +rucksack/SM +ruckus/SM +ruction/SM +rudderless +rudder/MS +Ruddie/M +ruddiness/MS +Rudd/M +Ruddy/M +ruddy/PTGRSD +rudeness/MS +rude/PYTR +Rudie/M +Rudiger/M +rudimentariness/M +rudimentary/P +rudiment/SM +Rudolf/M +Rudolfo/M +Rudolph/M +Rudyard/M +Rudy/M +ruefulness/S +rueful/PY +rue/GDS +Rufe/M +ruff/GSYDM +ruffian/GSMDY +ruffled/U +ruffler/M +ruffle/RSDG +ruffly/TR +Rufus/M +Rugby's +rugby/SM +ruggedness/S +rugged/PYRT +Ruggiero/M +rugging +rug/MS +Ruhr/M +ruination/MS +ruiner/M +ruin/MGSDR +ruinousness/M +ruinous/YP +Ruiz/M +rulebook/S +ruled/U +rule/MZGJDRS +ruler/GMD +ruling/M +Rumanian's +Rumania's +rumba/GDMS +rumble/JRSDG +rumbler/M +rumbustious +rumen/M +Rumford/M +Ru/MH +ruminant/YMS +ruminate/VNGXSD +ruminative/Y +rummage/GRSD +rummager/M +Rummel/M +rummer +rummest +rummy/TRSM +rumored/U +rumorer/M +rumormonger/SGMD +rumor/ZMRDSG +Rumpelstiltskin/M +rump/GMYDS +rumple/SDG +rumply/TR +rumpus/SM +rum/XSMN +runabout/SM +runaround/S +run/AS +runaway/S +rundown/SM +rune/MS +Runge/M +rung/MS +runic +runlet/SM +runnable +runnel/SM +runner/MS +running/S +Runnymede/M +runny/RT +runoff/MS +runtime +runtiness/M +runt/MS +runty/RPT +runway/MS +Runyon/M +rupee/MS +Ruperta/M +Rupert/M +Ruperto/M +rupiah/M +rupiahs +Ruppert/M +Ruprecht/M +rupture/GMSD +rurality/M +rural/Y +Rurik/M +ruse/MS +Rushdie/M +rush/DSRGZ +rusher/M +rushes/I +rushing/M +Rush/M +Rushmore/M +rushy/RT +Ruskin/M +rusk/MS +Russell/M +Russel/M +russet/MDS +russetting +Russia/M +Russian/SM +Russo/M +Russ/S +Rustbelt/M +rustically +rusticate/GSD +rustication/M +rusticity/S +rustic/S +Rustie/M +rustiness/MS +Rustin/M +rustler/M +rustle/RSDGZ +rust/MSDG +rustproof/DGS +Rusty/M +rusty/XNRTP +rutabaga/SM +Rutger/SM +Ruthanne/M +Ruthann/M +Ruthe/M +ruthenium/MS +rutherfordium/SM +Rutherford/M +Ruthie/M +Ruthi/M +ruthlessness/MS +ruthless/YP +Ruth/M +Ruthy/M +Rutland/M +Rutledge/M +rut/MS +rutted +Rutter/M +Ruttger/M +rutting +rutty/RT +Ruy/M +RV +RVs +Rwandan/S +Rwanda/SM +Rwy/M +Rx/M +Ryan/M +Ryann/M +Rycca/M +Rydberg/M +Ryder/M +rye/MS +Ryley/M +Ry/M +Ryon/M +Ryukyu/M +Ryun/M +S +SA +Saab/M +Saar/M +Saba/M +sabbath +Sabbath/M +Sabbaths +sabbatical/S +sabered/U +saber/GSMD +Sabik/M +Sabina/M +Sabine/M +Sabin/M +sable/GMDS +sabotage/DSMG +saboteur/SM +sabot/MS +Sabra/M +sabra/MS +Sabrina/M +SAC +Sacajawea/M +saccharides +saccharine +saccharin/MS +Sacco/M +sacerdotal +Sacha/M +sachem/MS +sachet/SM +Sachs/M +sackcloth/M +sackcloths +sacker/M +sackful/MS +sack/GJDRMS +sacking/M +sacral +sacra/L +sacramental/S +sacrament/DMGS +Sacramento/M +sacredness/S +sacred/PY +sacrificer/M +sacrifice/RSDZMG +sacrificial/Y +sacrilege/MS +sacrilegious/Y +sacristan/SM +sacristy/MS +sacroiliac/S +sacrosanctness/MS +sacrosanct/P +sacrum/M +sac/SM +Sada/M +Sadat/M +Saddam/M +sadden/DSG +sadder +saddest +saddlebag/SM +saddler/M +saddle's +saddle/UGDS +Sadducee/M +Sadella/M +Sade/M +sades +Sadie/M +sadism/MS +sadistic +sadistically +sadist/MS +sadness/SM +sadomasochism/MS +sadomasochistic +sadomasochist/S +sad/PY +Sadr/M +Sadye/M +safari/GMDS +safeguard/MDSG +safekeeping/MS +safeness/MS +safeness's/U +safes +safety/SDMG +safe/URPTY +safflower/SM +saffron/MS +sagaciousness/M +sagacious/YP +sagacity/MS +saga/MS +Sagan/M +sagebrush/SM +sage/MYPS +sagged +sagger +sagging +saggy/RT +Saginaw/M +Sagittarius/MS +sago/MS +sag/TSR +saguaro/SM +Sahara/M +Saharan/M +Sahel +sahib/MS +Saidee/M +saids +said/U +Saigon/M +sailboard/DGS +sailboat/SRMZG +sailcloth/M +sailcloths +sailer/M +sailfish/SM +sail/GJMDRS +sailing/M +sailor/YMS +sailplane/SDMG +sainthood/MS +saintlike +saintliness/MS +saintly/RTP +saint/YDMGS +Saiph/M +saith +saiths +Sakai/M +sake/MRS +saker/M +Sakhalin/M +Sakharov/M +Saki/M +saki's +salaam/GMDS +salable/U +salaciousness/MS +salacious/YP +salacity/MS +Saladin/M +Salado/M +salad/SM +Salaidh/M +salamander/MS +salami/MS +salary/SDMG +Salas/M +Salazar/M +saleability/M +sale/ABMS +Saleem/M +Salem/M +Salerno/M +salesclerk/SM +salesgirl/SM +saleslady/S +salesman/M +salesmanship/SM +salesmen +salespeople/M +salesperson/MS +salesroom/M +saleswoman +saleswomen +salience/MS +saliency +salient/SY +Salim/M +Salina/MS +saline/S +salinger +Salinger/M +salinity/MS +Salisbury/M +Salish/M +saliva/MS +salivary +salivate/XNGSD +salivation/M +Salk/M +Sallee/M +Salle/M +Sallie/M +Salli/M +sallowness/MS +sallow/TGRDSP +Sallust/M +Sallyanne/M +Sallyann/M +sally/GSDM +Sally/M +salmonellae +salmonella/M +Salmon/M +salmon/SM +Sal/MY +Saloma/M +Salome/M +Salomi/M +Salomo/M +Salomone/M +Salomon/M +Salonika/M +salon/SM +saloonkeeper +saloon/MS +salsa/MS +salsify/M +SALT +saltcellar/SM +salted/UC +salter/M +salt/GZTPMDRS +saltine/MS +saltiness/SM +saltness/M +Salton/M +saltpeter/SM +salts/C +saltshaker/S +saltwater +salty/RSPT +salubriousness/M +salubrious/YP +salubrity/M +salutariness/M +salutary/P +salutation/SM +salutatory/S +saluter/M +salute/RSDG +Salvadoran/S +Salvadorian/S +Salvador/M +salvageable +salvage/MGRSD +salvager/M +salvation/MS +Salvatore/M +salve/GZMDSR +salver/M +Salvidor/M +salvo/GMDS +Salween/M +Salyut/M +Salz/M +SAM +Samantha/M +Samara/M +Samaria/M +Samaritan/MS +samarium/MS +Samarkand/M +samba/GSDM +sameness/MS +same/SP +Sam/M +Sammie/M +Sammy/M +Samoa +Samoan/S +Samoset/M +samovar/SM +Samoyed/M +sampan/MS +sampler/M +sample/RSDJGMZ +sampling/M +Sampson/M +Samsonite/M +Samson/M +Samuele/M +Samuel/SM +Samuelson/M +samurai/M +San'a +Sana/M +sanatorium/MS +Sanborn/M +Sanchez/M +Sancho/M +sanctification/M +sanctifier/M +sanctify/RSDGNX +sanctimoniousness/MS +sanctimonious/PY +sanctimony/MS +sanctioned/U +sanction/SMDG +sanctity/SM +sanctuary/MS +sanctum/SM +sandal/MDGS +sandalwood/SM +sandbagged +sandbagging +sandbag/MS +sandbank/SM +sandbar/S +sandblaster/M +sandblast/GZSMRD +sandbox/MS +Sandburg/M +sandcastle/S +Sande/M +Sanderling/M +sander/M +Sander/M +Sanderson/M +sandhill +sandhog/SM +Sandia/M +Sandie/M +Sandi/M +sandiness/S +Sandinista +sandlot/SM +sandlotter/S +sandman/M +sandmen +Sand/MRZ +Sandor/M +Sandoval/M +sandpaper/DMGS +sandpile +sandpiper/MS +sandpit/M +Sandra/M +Sandro/M +sand/SMDRGZ +sandstone/MS +sandstorm/SM +Sandusky/M +sandwich/SDMG +Sandye/M +Sandy/M +sandy/PRT +saned +sane/IRYTP +saneness/MS +saneness's/I +sanes +Sanford/M +Sanforized +Sanger/M +sangfroid/S +sangria/SM +Sang/RM +sang/S +sanguinary +sanguined +sanguine/F +sanguinely +sanguineness/M +sanguineous/F +sanguines +sanguining +Sanhedrin/M +saning +sanitarian/S +sanitarium/SM +sanitary/S +sanitate/NX +sanitation/M +sanitizer/M +sanitize/RSDZG +sanity/SIM +sank +Sankara/M +San/M +sans +sanserif +Sanskritic +Sanskritize/M +Sanskrit/M +Sansone/M +Sanson/M +Santa/M +Santana/M +Santayana/M +Santeria +Santiago/M +Santo/MS +sapience/MS +sapient +sapless +sapling/SM +sap/MS +sapped +sapper/SM +Sapphira/M +Sapphire/M +sapphire/MS +Sappho/M +sappiness/SM +sapping +Sapporo/M +sappy/RPT +saprophyte/MS +saprophytic +sapsucker/SM +sapwood/SM +Saraann/M +Saracen/MS +Saragossa/M +Sarah/M +Sarajane/M +Sarajevo/M +Sara/M +Saran/M +saran/SM +sarape's +Sarasota/M +Saratoga/M +Saratov/M +Sarawak/M +sarcasm/MS +sarcastic +sarcastically +sarcoma/MS +sarcophagi +sarcophagus/M +sardine/SDMG +Sardinia/M +sardonic +sardonically +Saree/M +Sarena/M +Sarene/M +Sarette/M +Sargasso/M +Sarge/M +Sargent/M +sarge/SM +Sargon/M +Sari/M +sari/MS +Sarina/M +Sarine/M +Sarita/M +Sarnoff/M +sarong/MS +Saroyan/M +sarsaparilla/MS +Sarto/M +sartorial/Y +sartorius/M +Sartre/M +Sascha/M +SASE +Sasha/M +sashay/GDS +Sashenka/M +sash/GMDS +Saskatchewan/M +Saskatoon/M +Sask/M +sassafras/MS +sass/GDSM +Sassoon/M +sassy/TRS +SAT +satanic +satanical/Y +Satanism/M +satanism/S +Satanist/M +satanist/S +Satan/M +satchel/SM +sat/DG +sateen/MS +satellite/GMSD +sate/S +satiable/I +satiate/GNXSD +satiation/M +satiety/MS +satin/MDSG +satinwood/MS +satiny +satire/SM +satiric +satirical/Y +satirist/SM +satirize/DSG +satirizes/U +satisfaction/ESM +satisfactorily/U +satisfactoriness/MU +satisfactory/UP +satisfiability/U +satisfiable/U +satisfied/UE +satisfier/M +satisfies/E +satisfy/GZDRS +satisfying/EU +satisfyingly +Sat/M +satori/SM +satrap/SM +saturated/CUA +saturater/M +saturates/A +saturate/XDRSNG +saturation/M +Saturday/MS +saturnalia +Saturnalia/M +saturnine/Y +Saturn/M +Satyanarayanan/M +satyriases +satyriasis/M +satyric +satyr/MS +sauce/DSRGZM +saucepan/SM +saucer/M +saucily +sauciness/S +saucy/TRP +Saudi/S +Saud/M +Saudra/M +sauerkraut/SM +Saukville/M +Saul/M +Sault/M +sauna/DMSG +Sauncho/M +Saunder/SM +Saunderson/M +Saundra/M +saunter/DRSG +saurian/S +sauropod/SM +sausage/MS +Saussure/M +saut/DGS +Sauternes/M +Sauveur/M +savage/GTZYPRSD +Savage/M +savageness/SM +savagery/MS +Savannah/M +savanna/MS +savant/SM +saved/U +saveloy/M +saver/M +save/ZGJDRSB +Savina/M +Savior/M +savior/SM +Saviour/M +Savonarola/M +savored/U +savorer/M +savorier +savoriest +savoriness/S +savoringly/S +savoring/Y +savor/SMRDGZ +savory/UMPS +Savoyard/M +Savoy/M +savoy/SM +savvy/GTRSD +sawbones/M +sawbuck/SM +sawdust/MDSG +sawer/M +sawfly/SM +sawhorse/MS +Saw/M +sawmill/SM +saw/SMDRG +sawtooth +Sawyere/M +Sawyer/M +sawyer/MS +Saxe/M +saxifrage/SM +Sax/M +sax/MS +Saxon/SM +Saxony/M +saxophone/MS +saxophonist/SM +Saxton/M +Sayer/M +sayer/SM +sayest +saying/MS +Sayre/MS +says/M +say/USG +Say/ZMR +SBA +Sb/M +SC +scabbard/SGDM +scabbed +scabbiness/SM +scabbing +scabby/RTP +scabies/M +scabrousness/M +scabrous/YP +scab/SM +scad/SM +scaffolding/M +scaffold/JGDMS +scalability +Scala/M +scalar/SM +scalawag/SM +scald/GJRDS +scaled/AU +scale/JGZMBDSR +scaleless +scalene +scaler/M +scales/A +scaliness/MS +scaling/A +scallion/MS +scalloper/M +scallop/GSMDR +scalloping/M +scalpel/SM +scalper/M +scalp/GZRDMS +scalping/M +scaly/TPR +scammed +scamming +scamper/GD +scampi/M +scamp/RDMGZS +scam/SM +Scan +scan/AS +scandal/GMDS +scandalized/U +scandalize/GDS +scandalmonger/SM +scandalousness/M +scandalous/YP +Scandinavia/M +Scandinavian/S +scandium/MS +scanned/A +scanner/SM +scanning/A +scansion/SM +scant/CDRSG +scantest +scantily +scantiness/MS +scantly +scantness/MS +scanty/TPRS +scapegoat/SGDM +scapegrace/MS +scape/M +scapulae +scapula/M +scapular/S +scarab/SM +Scaramouch/M +Scarborough/M +scarceness/SM +scarce/RTYP +scarcity/MS +scar/DRMSG +scarecrow/MS +scaremongering/M +scaremonger/SGM +scarer/M +scare/S +scarface +Scarface/M +scarf/SDGM +scarification/M +scarify/DRSNGX +scarily +scariness/S +scarlatina/MS +Scarlatti/M +Scarlet/M +scarlet/MDSG +Scarlett/M +scarp/SDMG +scarred +scarring +scarves/M +scary/PTR +scathe/DG +scathed/U +scathing/Y +scatological +scatology/SM +scat/S +scatted +scatterbrain/MDS +scatter/DRJZSG +scatterer/M +scattergun +scattering/YM +scatting +scavenge/GDRSZ +scavenger/M +SCCS +scenario/SM +scenarist/MS +scene/GMDS +scenery/SM +scenically +scenic/S +scented/U +scent/GDMS +scentless +scent's/C +scents/C +scepter/DMSG +scepters/U +sceptically +sch +Schaefer/M +Schaeffer/M +Schafer/M +Schaffner/M +Schantz/M +Schapiro/M +Scheat/M +Schedar/M +schedule/ADSRG +scheduled/U +scheduler/MS +schedule's +Scheherazade/M +Scheherezade/M +Schelling/M +schema/M +schemata +schematically +schematic/S +scheme/JSRDGMZ +schemer/M +schemta +Schenectady/M +scherzo/MS +Schick/M +Schiller/M +schilling/SM +schismatic/S +schism/SM +schist/SM +schizoid/S +schizomycetes +schizophrenia/SM +schizophrenically +schizophrenic/S +schizo/S +schlemiel/MS +schlepped +schlepping +schlep/S +Schlesinger/M +Schliemann/M +Schlitz/M +schlock/SM +schlocky/TR +Schloss/M +schmaltz/MS +schmaltzy/TR +Schmidt/M +Schmitt/M +schmoes +schmo/M +schmooze/GSD +schmuck/MS +Schnabel/M +schnapps/M +schnauzer/MS +Schneider/M +schnitzel/MS +schnook/SM +schnoz/S +schnozzle/MS +Schoenberg/M +Schofield/M +scholarship/MS +scholar/SYM +scholastically +scholastic/S +schoolbag/SM +schoolbook/SM +schoolboy/MS +schoolchild/M +schoolchildren +schooldays +schooled/U +schoolfellow/S +schoolfriend +schoolgirlish +schoolgirl/MS +schoolhouse/MS +schooling/M +schoolmarmish +schoolmarm/MS +schoolmaster/SGDM +schoolmate/MS +schoolmistress/MS +schoolroom/SM +schoolteacher/MS +schoolwork/SM +schoolyard/SM +school/ZGMRDJS +schooner/SM +Schopenhauer/M +Schottky/M +Schrieffer/M +Schrdinger/M +Schroeder/M +Schroedinger/M +Schubert/M +Schultz/M +Schulz/M +Schumacher/M +Schuman/M +Schumann/M +schussboomer/S +schuss/SDMG +Schuster/M +Schuyler/M +Schuylkill/M +Schwab/M +Schwartzkopf/M +Schwartz/M +Schwarzenegger/M +schwa/SM +Schweitzer/M +Schweppes/M +Schwinger/M +Schwinn/M +sci +sciatica/SM +sciatic/S +science/FMS +scientifically/U +scientific/U +scientist/SM +Scientology/M +scimitar/SM +scintilla/MS +scintillate/GNDSX +scintillation/M +scintillator/SM +scion/SM +Scipio/M +scissor/SGD +scleroses +sclerosis/M +sclerotic/S +Sc/M +scoffer/M +scofflaw/MS +scoff/RDGZS +scolder/M +scold/GSJRD +scolioses +scoliosis/M +scollop's +sconce/SDGM +scone/SM +scooper/M +scoop/SRDMG +scooter/M +scoot/SRDGZ +scope/DSGM +Scopes/M +scops +scorbutic +scorcher/M +scorching/Y +scorch/ZGRSD +scoreboard/MS +scorecard/MS +scored/M +scorekeeper/SM +scoreless +scoreline +score/ZMDSRJG +scorner/M +scornfulness/M +scornful/PY +scorn/SGZMRD +scorpion/SM +Scorpio/SM +Scorpius/M +Scorsese/M +Scotchgard/M +Scotchman/M +Scotchmen +scotch/MSDG +scotchs +Scotch/S +Scotchwoman +Scotchwomen +Scotia/M +Scotian/M +Scotland/M +Scot/MS +Scotsman/M +Scotsmen +Scotswoman +Scotswomen +Scottie/SM +Scotti/M +Scottish +Scott/M +Scottsdale/M +Scotty's +scoundrel/YMS +scourer/M +scourge/MGRSD +scourger/M +scouring/M +scour/SRDGZ +scouter/M +scouting/M +scoutmaster/SM +Scout's +scout/SRDMJG +scow/DMGS +scowler/M +scowl/SRDG +scrabble/DRSZG +scrabbler/M +Scrabble/SM +scragged +scragging +scraggly/TR +scraggy/TR +scrag/SM +scrambler/MS +scrambler's/U +scramble/UDSRG +scrammed +scramming +scram/S +Scranton/M +scrapbook/SM +scraper/M +scrape/S +scrapheap/SM +scrapped +scrapper/SM +scrapping +scrappy/RT +scrap/SGZJRDM +scrapyard/S +scratched/U +scratcher/M +scratches/M +scratchily +scratchiness/S +scratch/JDRSZG +scratchy/TRP +scrawler/M +scrawl/GRDS +scrawly/RT +scrawniness/MS +scrawny/TRP +screamer/M +screaming/Y +scream/ZGSRD +screecher/M +screech/GMDRS +screechy/TR +screed/MS +scree/DSM +screened/U +screening/M +screenplay/MS +screen/RDMJSG +screenwriter/MS +screwball/SM +screwdriver/SM +screwer/M +screw/GUSD +screwiness/S +screw's +screwup +screwworm/MS +screwy/RTP +Scriabin/M +scribal +scribble/JZDRSG +scribbler/M +scribe/CDRSGIK +scriber/MKIC +scribe's +Scribner/MS +scrimmager/M +scrimmage/RSDMG +scrimp/DGS +scrimshaw/GSDM +scrim/SM +Scripps/M +scrip/SM +scripted/U +script/FGMDS +scriptural/Y +scripture/MS +Scripture/MS +scriptwriter/SM +scriptwriting/M +scrivener/M +scriven/ZR +scrod/M +scrofula/MS +scrofulous +scrollbar/SM +scroll/GMDSB +Scrooge/MS +scrooge/SDMG +scrota +scrotal +scrotum/M +scrounge/ZGDRS +scroungy/TR +scrubbed +scrubber/MS +scrubbing +scrubby/TR +scrub/S +scruffily +scruffiness/S +scruff/SM +scruffy/PRT +Scruggs/M +scrummage/MG +scrum/MS +scrumptious/Y +scrunch/DSG +scrunchy/S +scruple/SDMG +scrupulosity/SM +scrupulousness's +scrupulousness/US +scrupulous/UPY +scrutable/I +scrutinized/U +scrutinizer/M +scrutinize/RSDGZ +scrutinizingly/S +scrutinizing/UY +scrutiny/MS +SCSI +scuba/SDMG +scudded +scudding +Scud/M +scud/S +scuff/GSD +scuffle/SDG +sculler/M +scullery/MS +Sculley/M +scullion/MS +scull/SRDMGZ +sculptor/MS +sculptress/MS +sculpt/SDG +sculptural/Y +sculpture/SDGM +scumbag/S +scummed +scumming +scum/MS +scummy/TR +scupper/SDMG +scurf/MS +scurfy/TR +scurrility/MS +scurrilousness/MS +scurrilous/PY +scurry/GJSD +scurvily +scurviness/M +scurvy/SRTP +scutcheon/SM +scuttlebutt/MS +scuttle/MGSD +scuzzy/RT +Scylla/M +scythe/SDGM +Scythia/M +SD +SDI +SE +seabed/S +seabird/S +seaboard/MS +Seaborg/M +seaborne +Seabrook/M +seacoast/MS +seafare/JRZG +seafarer/M +seafood/MS +seafront/MS +Seagate/M +seagoing +Seagram/M +seagull/S +seahorse/S +sealant/MS +sealed/AU +sealer/M +seal/MDRSGZ +sealskin/SM +seals/UA +seamail +seamanship/SM +seaman/YM +seamer/M +seaminess/M +seamlessness/M +seamless/PY +seam/MNDRGS +seams/I +seamstress/MS +Seamus/M +sea/MYS +seamy/TRP +Seana/M +sance/SM +Sean/M +seaplane/SM +seaport/SM +seaquake/M +Seaquarium/M +searcher/AM +searching/YS +searchlight/SM +search/RSDAGZ +sear/DRSJGT +searing/Y +Sears/M +seascape/SM +seashell/MS +seashore/SM +seasickness/SM +seasick/P +seaside/SM +seasonableness/M +seasonable/UP +seasonably/U +seasonality +seasonal/Y +seasoned/U +seasoner/M +seasoning/M +season/JRDYMBZSG +seatbelt +seated/A +seater/M +seating/SM +SEATO +seat's +Seattle/M +seat/UDSG +seawall/S +seaward/S +seawater/S +seaway/MS +seaweed/SM +seaworthinesses +seaworthiness/MU +seaworthy/TRP +sebaceous +Sebastian/M +Sebastiano/M +Sebastien/M +seborrhea/SM +SEC +secant/SM +secede/GRSD +secessionist/MS +secession/MS +secludedness/M +secluded/YP +seclude/GSD +seclusion/SM +seclusive +Seconal +secondarily +secondary/PS +seconder/M +secondhand +second/RDYZGSL +secrecy/MS +secretarial +secretariat/MS +secretaryship/MS +secretary/SM +secrete/XNS +secretion/M +secretiveness/S +secretive/PY +secretory +secret/TVGRDYS +sec/S +sectarianism/MS +sectarian/S +sectary/MS +sectionalism/MS +sectionalized +sectional/SY +section/ASEM +sectioned +sectioning +sect/ISM +sectoral +sectored +sector/EMS +sectoring +sects/E +secularism/MS +secularist/MS +secularity/M +secularization/MS +secularized/U +secularize/GSD +secular/SY +secured/U +securely/I +secure/PGTYRSDJ +security/MSI +secy +sec'y +sedan/SM +sedateness/SM +sedate/PXVNGTYRSD +sedation/M +sedative/S +sedentary +Seder/SM +sedge/SM +Sedgwick/M +sedgy/RT +sedimentary +sedimentation/SM +sediment/SGDM +sedition/SM +seditiousness/M +seditious/PY +seducer/M +seduce/RSDGZ +seduction/MS +seductiveness/MS +seductive/YP +seductress/SM +sedulous/Y +Seebeck/M +seed/ADSG +seedbed/MS +seedcase/SM +seeded/U +seeder/MS +seediness/MS +seeding/S +seedless +seedling/SM +seedpod/S +seed's +seedy/TPR +seeings +seeing's +seeing/U +seeker/M +seek/GZSR +seeking/Y +Seeley/M +See/M +seem/GJSYD +seeming/Y +seemliness's +seemliness/US +seemly/UTPR +seen/U +seepage/MS +seep/GSD +seer/SM +seersucker/MS +sees +seesaw/DMSG +seethe/SDGJ +see/U +segmental/Y +segmentation/SM +segmented/U +segment/SGDM +Segovia/M +segregant +segregated/U +segregate/XCNGSD +segregation/CM +segregationist/SM +segregative +Segre/M +segue/DS +segueing +Segundo/M +Se/H +Seidel/M +seigneur/MS +seignior/SM +Seiko/M +seine/GZMDSR +Seine/M +seiner/M +Seinfeld/M +seismic +seismically +seismographer/M +seismographic +seismographs +seismography/SM +seismograph/ZMR +seismologic +seismological +seismologist/MS +seismology/SM +seismometer/S +seize/BJGZDSR +seizer/M +seizing/M +seizin/MS +seizor/MS +seizure/MS +Seka/M +Sela/M +Selassie/M +Selby/M +seldom +selected/UAC +selectional +selection/MS +selectiveness/M +selective/YP +selectivity/MS +selectman/M +selectmen +selectness/SM +selector/SM +select/PDSVGB +Selectric/M +selects/A +Selena/M +selenate/M +Selene/M +selenite/M +selenium/MS +selenographer/SM +selenography/MS +Selestina/M +Seleucid/M +Seleucus/M +self/GPDMS +selfishness/SU +selfish/PUY +selflessness/MS +selfless/YP +selfness/M +Selfridge/M +selfsameness/M +selfsame/P +Selia/M +Selie/M +Selig/M +Selim/M +Selina/M +Selinda/M +Seline/M +Seljuk/M +Selkirk/M +Sella/M +sell/AZGSR +seller/AM +Sellers/M +Selle/ZM +sellout/MS +Selma/M +seltzer/S +selvage/MGSD +selves/M +Selznick/M +semantical/Y +semanticist/SM +semantic/S +semantics/M +semaphore/GMSD +Semarang/M +semblance/ASME +semen/SM +semester/SM +semiannual/Y +semiarid +semiautomated +semiautomatic/S +semicircle/SM +semicircular +semicolon/MS +semiconductor/SM +semiconscious +semidefinite +semidetached +semidrying/M +semifinalist/MS +semifinal/MS +semilogarithmic +semimonthly/S +seminal/Y +seminarian/MS +seminar/SM +seminary/MS +Seminole/SM +semiofficial +semioticians +semiotic/S +semiotics/M +semipermanent/Y +semipermeable +semiprecious +semiprivate +semiprofessional/YS +semipublic +semiquantitative/Y +Semiramis/M +semiretired +semisecret +semiskilled +semi/SM +semisolid/S +semistructured +semisweet +Semite/SM +Semitic/MS +semitic/S +semitone/SM +semitrailer/SM +semitrance +semitransparent +semitropical +semivowel/MS +semiweekly/S +semiyearly +semolina/SM +sempiternal +sempstress/SM +Semtex +sen +Sen +Sena/M +senate/MS +Senate/MS +senatorial +senator/MS +Sendai/M +sender/M +sends/A +send/SRGZ +Seneca/MS +Senegalese +Senegal/M +senescence/SM +senescent +senile/SY +senility/MS +seniority/SM +senior/MS +Senior/S +Sennacherib/M +senna/MS +Sennett/M +Seora/M +senora/S +senorita/S +senor/MS +sensately/I +sensate/YNX +sensationalism/MS +sensationalist/S +sensationalize/GSD +sensational/Y +sensation/M +sens/DSG +senselessness/SM +senseless/PY +sense/M +sensibility/ISM +sensibleness/MS +sensible/PRST +sensibly/I +sensitiveness/MS +sensitiveness's/I +sensitives +sensitive/YIP +sensitivity/ISM +sensitization/CSM +sensitized/U +sensitizers +sensitize/SDCG +sensor/MS +sensory +sensualist/MS +sensuality/MS +sensual/YF +sensuousness/S +sensuous/PY +Sensurround/M +sentence/SDMG +sentential/Y +sententious/Y +sentience/ISM +sentient/YS +sentimentalism/SM +sentimentalist/SM +sentimentality/SM +sentimentalization/SM +sentimentalize/RSDZG +sentimentalizes/U +sentimental/Y +sentiment/MS +sentinel/GDMS +sentry/SM +sent/UFEA +Seoul/M +sepal/SM +separability/MSI +separableness/MI +separable/PI +separably/I +separateness/MS +separates/M +separate/YNGVDSXP +separation/M +separatism/SM +separatist/SM +separator/SM +Sephardi/M +Sephira/M +sepia/MS +Sepoy/M +sepses +sepsis/M +septa/M +septate/N +September/MS +septennial/Y +septet/MS +septicemia/SM +septicemic +septic/S +septillion/M +sept/M +Sept/M +septuagenarian/MS +Septuagint/MS +septum/M +sepulcher/MGSD +sepulchers/UA +sepulchral/Y +seq +sequel/MS +sequenced/A +sequence/DRSJZMG +sequencer/M +sequence's/F +sequences/F +sequent/F +sequentiality/FM +sequentialize/DSG +sequential/YF +sequester/SDG +sequestrate/XGNDS +sequestration/M +sequin/SDMG +sequitur +Sequoia/M +sequoia/MS +Sequoya/M +Serafin/M +seraglio/SM +serape/S +seraphic +seraphically +seraphim's +seraph/M +seraphs +sera's +Serbia/M +Serbian/S +Serb/MS +Serbo/M +serenade/MGDRS +serenader/M +Serena/M +serendipitous/Y +serendipity/MS +serene/GTYRSDP +Serene/M +sereneness/SM +Serengeti/M +serenity/MS +sere/TGDRS +serfdom/MS +serf/MS +Sergeant/M +sergeant/SM +serge/DSGM +Sergei/M +Serge/M +Sergent/M +Sergio/M +serialization/MS +serialize/GSD +serial/MYS +series/M +serif/SMD +serigraph/M +serigraphs +seriousness/SM +serious/PY +sermonize/GSD +sermon/SGDM +serological/Y +serology/MS +serons +serous +Serpens/M +serpent/GSDM +serpentine/GYS +Serra/M +Serrano/M +serrate/GNXSD +serration/M +serried +serum/MS +servant/SDMG +serve/AGCFDSR +served/U +server/MCF +servers +serviceability/SM +serviceableness/M +serviceable/P +serviced/U +serviceman/M +servicemen +service/MGSRD +service's/E +services/E +servicewoman +servicewomen +serviette/MS +servilely +servileness/M +serviles +servile/U +servility/SM +serving/SM +servitor/SM +servitude/MS +servomechanism/MS +servomotor/MS +servo/S +sesame/MS +sesquicentennial/S +sessile +session/SM +setback/S +Seth/M +Set/M +Seton/M +set's +setscrew/SM +set/SIA +settable/A +sett/BJGZSMR +settee/MS +setter/M +setting/AS +setting's +settle/AUDSG +settlement/ASM +settler/MS +settling/S +setup/MS +Seumas/M +Seurat/M +Seuss/M +Sevastopol/M +sevenfold +sevenpence +seven/SMH +seventeen/HMS +seventeenths +sevenths +seventieths +seventy/MSH +severalfold +severalty/M +several/YS +severance/SM +severed/E +severeness/SM +severe/PY +severing/E +severity/MS +Severn/M +severs/E +sever/SGTRD +Severus/M +Seville/M +sewage/MS +Seward/M +sewerage/SM +sewer/GSMD +sewing/SM +sewn +sew/SAGD +sexagenarian/MS +sex/GMDS +sexily +sexiness/MS +sexism/SM +sexist/SM +sexless +sexologist/SM +sexology/MS +sexpot/SM +Sextans/M +sextant/SM +sextet/SM +sextillion/M +Sexton/M +sexton/MS +sextuple/MDG +sextuplet/MS +sexuality/MS +sexualized +sexual/Y +sexy/RTP +Seychelles +Seyfert +Seymour/M +sf +SF +Sgt +shabbily +shabbiness/SM +shabby/RTP +shack/GMDS +shackler/M +shackle's +Shackleton/M +shackle/UGDS +shad/DRJGSM +shaded/U +shadeless +shade/SM +shadily +shadiness/MS +shading/M +shadowbox/SDG +shadower/M +shadow/GSDRM +shadowiness/M +Shadow/M +shadowy/TRP +shady/TRP +Shae/M +Shafer/M +Shaffer/M +shafting/M +shaft/SDMG +shagged +shagginess/SM +shagging +shaggy/TPR +shag/MS +shah/M +shahs +Shaina/M +Shaine/M +shakable/U +shakably/U +shakeable +shakedown/S +shaken/U +shakeout/SM +shaker/M +Shaker/S +Shakespearean/S +Shakespeare/M +Shakespearian +shake/SRGZB +shakeup/S +shakily +shakiness/S +shaking/M +shaky/TPR +shale/SM +shall +shallot/SM +shallowness/SM +shallow/STPGDRY +Shalna/M +Shalne/M +shalom +Shalom/M +shalt +shamanic +shaman/SM +shamble/DSG +shambles/M +shamefaced/Y +shamefulness/S +shameful/YP +shamelessness/SM +shameless/PY +shame/SM +sham/MDSG +shammed +shammer +shamming +shammy's +shampoo/DRSMZG +shampooer/M +shamrock/SM +Shamus/M +Shana/M +Shanan/M +Shanda/M +Shandee/M +Shandeigh/M +Shandie/M +Shandra/M +shandy/M +Shandy/M +Shane/M +Shanghai/GM +Shanghaiing/M +shanghai/SDG +Shanie/M +Shani/M +shank/SMDG +Shannah/M +Shanna/M +Shannan/M +Shannen/M +Shannon/M +Shanon/M +shan't +Shanta/M +Shantee/M +shantis +Shantung/M +shantung/MS +shanty/SM +shantytown/SM +shape/AGDSR +shaped/U +shapelessness/SM +shapeless/PY +shapeliness/S +shapely/RPT +shaper/S +shape's +Shapiro/M +sharable/U +Sharai/M +Shara/M +shard/SM +shareable +sharecropped +sharecropper/MS +sharecropping +sharecrop/S +share/DSRGZMB +shared/U +shareholder/MS +shareholding/S +sharer/M +shareware/S +Shari'a +Sharia/M +sharia/SM +Shari/M +Sharity/M +shark/SGMD +sharkskin/SM +Sharla/M +Sharleen/M +Sharlene/M +Sharline/M +Sharl/M +Sharona/M +Sharon/M +Sharpe/M +sharpen/ASGD +sharpened/U +sharpener/S +sharper/M +sharpie/SM +Sharp/M +sharpness/MS +sharp/SGTZXPYRDN +sharpshooter/M +sharpshooting/M +sharpshoot/JRGZ +sharpy's +Sharron/M +Sharyl/M +Shasta/M +shat +shatter/DSG +shattering/Y +shatterproof +Shaughn/M +Shaula/M +Shauna/M +Shaun/M +shave/DSRJGZ +shaved/U +shaver/M +Shavian +shaving/M +Shavuot/M +Shawano/M +shawl/SDMG +shaw/M +Shaw/M +Shawna/M +Shawnee/SM +Shawn/M +Shaylah/M +Shayla/M +Shaylyn/M +Shaylynn/M +Shay/M +shay/MS +Shayna/M +Shayne/M +Shcharansky/M +sh/DRS +sheaf/MDGS +Shea/M +shearer/M +shear/RDGZS +sheather/M +sheathe/UGSD +sheath/GJMDRS +sheathing/M +sheaths +sheave/SDG +sheaves/M +Sheba/M +shebang/MS +Shebeli/M +Sheboygan/M +she'd +shedding +Shedir/M +sheds +shed's +shed/U +Sheelagh/M +Sheelah/M +Sheela/M +Sheena/M +sheen/MDGS +sheeny/TRSM +sheepdog/SM +sheepfold/MS +sheepherder/MS +sheepishness/SM +sheepish/YP +sheep/M +sheepskin/SM +Sheeree/M +sheerness/S +sheer/PGTYRDS +sheeting/M +sheetlike +sheet/RDMJSG +Sheetrock +Sheffielder/M +Sheffield/RMZ +Sheffie/M +Sheff/M +Sheffy/M +sheikdom/SM +sheikh's +sheik/SM +Sheilah/M +Sheila/M +shekel/MS +Shelagh/M +Shela/M +Shelba/M +Shelbi/M +Shelby/M +Shelden/M +Sheldon/M +shelf/MDGS +Shelia/M +she'll +shellacked +shellacking/MS +shellac/S +shelled/U +Shelley/M +shellfire/SM +shellfish/SM +Shellie/M +Shelli/M +Shell/M +shell/RDMGS +Shelly/M +Shel/MY +shelter/DRMGS +sheltered/U +shelterer/M +Shelton/M +shelve/JRSDG +shelver/M +shelves/M +shelving/M +she/M +Shem/M +Shena/M +Shenandoah/M +shenanigan/SM +Shenyang/M +Sheol/M +Shepard/M +shepherd/DMSG +shepherdess/S +Shepherd/M +Shep/M +Sheppard/M +Shepperd/M +Sheratan/M +Sheraton/M +sherbet/MS +sherd's +Sheree/M +Sheridan/M +Sherie/M +sheriff/SM +Sherill/M +Sherilyn/M +Sheri/M +Sherline/M +Sherlocke/M +sherlock/M +Sherlock/M +Sher/M +Sherman/M +Shermie/M +Sherm/M +Shermy/M +Sherpa/SM +Sherrie/M +Sherri/M +Sherry/M +sherry/MS +Sherwin/M +Sherwood/M +Sherwynd/M +Sherye/M +Sheryl/M +Shetland/S +Shevardnadze/M +shew/GSD +shewn +shh +shiatsu/S +shibboleth/M +shibboleths +shielded/U +shielder/M +shield/MDRSG +Shields/M +shiftily +shiftiness/SM +shiftlessness/S +shiftless/PY +shift/RDGZS +shifty/TRP +Shi'ite +Shiite/SM +Shijiazhuang +Shikoku/M +shill/DJSG +shillelagh/M +shillelaghs +shilling/M +Shillong/M +Shiloh/M +shimmed +shimmer/DGS +shimmery +shimming +shimmy/DSMG +shim/SM +Shina/M +shinbone/SM +shindig/MS +shiner/M +shine/S +shingle/MDRSG +shingler/M +shinguard +shininess/MS +shining/Y +shinned +shinning +shinny/GDSM +shin/SGZDRM +shinsplints +Shintoism/S +Shintoist/MS +Shinto/MS +shiny/PRT +shipboard/MS +shipborne +shipbuilder/M +shipbuild/RGZJ +shipload/SM +shipman/M +shipmate/SM +shipmen +shipment/AMS +shipowner/MS +shippable +shipped/A +shipper/SM +shipping/MS +ship's +shipshape +ship/SLA +shipwreck/GSMD +shipwright/MS +shipyard/MS +Shiraz/M +shire/MS +shirker/M +shirk/RDGZS +Shirlee/M +Shirleen/M +Shirlene/M +Shirley/M +Shirline/M +Shirl/M +Shir/M +shirr/GJDS +shirtfront/S +shirting/M +shirt/JDMSG +shirtless +shirtmake/R +shirtmaker/M +shirtsleeve/MS +shirttail/S +shirtwaist/SM +shit/S! +shitting/! +shitty/RT! +Shiva/M +shiverer/M +shiver/GDR +shivery +shiv/SZRM +shivved +shivving +shlemiel's +Shmuel/M +shoal/SRDMGT +shoat/SM +shocker/M +shocking/Y +Shockley/M +shockproof +shock/SGZRD +shoddily +shoddiness/SM +shoddy/RSTP +shod/U +shoehorn/GSMD +shoeing +shoelace/MS +shoemaker/M +shoemake/RZ +shoe/MS +shoer's +shoeshine/MS +shoestring/MS +shoetree/MS +shogunate/SM +shogun/MS +Shoji/M +Sholom/M +shone +shoo/DSG +shoofly +shook/SM +shooter/M +shootout/MS +shoot/SJRGZ +shopkeeper/M +shopkeep/RGZ +shoplifter/M +shoplifting/M +shoplift/SRDGZ +shop/MS +shopped/M +shopper/M +shoppe/RSDGZJ +shopping/M +shoptalk/SM +shopworn +shorebird/S +shore/DSRGMJ +shoreline/SM +Shorewood/M +shoring/M +shortage/MS +shortbread/MS +shortcake/SM +shortchange/DSG +shortcoming/MS +shortcrust +shortcut/MS +shortcutting +shortener/M +shortening/M +shorten/RDGJ +shortfall/SM +shorthand/DMS +Shorthorn/M +shorthorn/MS +shortie's +shortish +shortlist/GD +Short/M +shortness/MS +short/SGTXYRDNP +shortsightedness/S +shortsighted/YP +shortstop/MS +shortwave/SM +shorty/SM +Shoshana/M +Shoshanna/M +Shoshone/SM +Shostakovitch/M +shotgunned +shotgunner +shotgunning +shotgun/SM +shot/MS +shotted +shotting +shoulder/GMD +shouldn't +should/TZR +shout/SGZRDM +shove/DSRG +shoveler/M +shovelful/MS +shovel/MDRSZG +shover/M +showbiz +showbizzes +showboat/SGDM +showcase/MGSD +showdown/MS +shower/GDM +showery/TR +show/GDRZJS +showgirl/SM +showily +showiness/MS +showing/M +showman/M +showmanship/SM +showmen +shown +showoff/S +showpiece/SM +showplace/SM +showroom/MS +showy/RTP +shpt +shrank +shrapnel/SM +shredded +shredder/MS +shredding +shred/MS +Shreveport/M +shrewdness/SM +shrewd/RYTP +shrew/GSMD +shrewishness/M +shrewish/PY +shrieker/M +shriek/SGDRMZ +shrift/SM +shrike/SM +shrill/DRTGPS +shrillness/MS +shrilly +shrimp/MDGS +shrine/SDGM +shrinkage/SM +shrinker/M +shrinking/U +shrink/SRBG +shrivel/GSD +shriven +shrive/RSDG +Shropshire/M +shroud/GSMD +shrubbed +shrubbery/SM +shrubbing +shrubby/TR +shrub/SM +shrugged +shrugging +shrug/S +shrunk/N +shtick/S +shucker/M +shuck/SGMRD +shucks/S +shudder/DSG +shuddery +shuffleboard/MS +shuffled/A +shuffle/GDSRZ +shuffles/A +shuffling/A +Shulman/M +Shu/M +shunned +shunning +shun/S +shunter/M +shunt/GSRD +Shurlocke/M +Shurlock/M +Shurwood/M +shush/SDG +shutdown/MS +shuteye/SM +shutoff/M +shutout/SM +shut/S +shutterbug/S +shutter/DMGS +shuttering/M +shutting +shuttlecock/MDSG +shuttle/MGDS +shy/DRSGTZY +shyer +shyest +Shylockian/M +Shylock/M +shyness/SM +shyster/SM +Siamese/M +Siam/M +Siana/M +Sianna/M +Sian's +Sibbie/M +Sibby/M +Sibeal/M +Sibelius/M +Sibella/M +Sibelle/M +Sibel/M +Siberia/M +Siberian/S +sibilance/M +sibilancy/M +sibilant/SY +Sibilla/M +Sibley/M +sibling/SM +Sib/M +Sibylla/M +Sibylle/M +sibylline +Sibyl/M +sibyl/SM +Siciliana/M +Sicilian/S +Sicily/M +sickbay/M +sickbed/S +sickener/M +sickening/Y +sicken/JRDG +sicker/Y +sick/GXTYNDRSP +sickie/SM +sickish/PY +sickle/SDGM +sickliness/M +sickly/TRSDPG +sickness/MS +sicko/S +sickout/S +sickroom/SM +sic/S +sidearm/S +sideband/MS +sidebar/MS +sideboard/SM +sideburns +sidecar/MS +sided/A +sidedness +side/ISRM +sidekick/MS +sidelight/SM +sideline/MGDRS +sidelong +sideman/M +sidemen +sidepiece/S +sidereal +sider/FA +sides/A +sidesaddle/MS +sideshow/MS +sidesplitting +sidestepped +sidestepping +sidestep/S +sidestroke/GMSD +sideswipe/GSDM +sidetrack/SDG +sidewalk/MS +sidewall/MS +sidewards +sideway/SM +sidewinder/SM +siding/SM +sidle/DSG +Sid/M +Sidnee/M +Sidney/M +Sidoney/M +Sidonia/M +Sidonnie/M +SIDS +siege/GMDS +Siegel/M +Siegfried/M +Sieglinda/M +Siegmund/M +Siemens/M +Siena/M +sienna/SM +Sierpinski/M +sierra/SM +siesta/MS +sieve/GZMDS +Siffre/M +sifted/UA +sifter/M +sift/GZJSDR +Sigfrid/M +Sigfried/M +SIGGRAPH/M +sigh/DRG +sigher/M +sighs +sighted/P +sighter/M +sighting/S +sight/ISM +sightless/Y +sightliness/UM +sightly/TURP +sightread +sightseeing/S +sightsee/RZ +Sigismond/M +Sigismondo/M +Sigismund/M +Sigismundo/M +Sig/M +sigma/SM +sigmoid +Sigmund/M +signal/A +signaled +signaler/S +signaling +signalization/S +signalize/GSD +signally +signalman/M +signalmen +signals +signal's +signatory/SM +signature/MS +signboard/MS +signed/FU +signer/SC +signet/SGMD +sign/GARDCS +significance/IMS +significantly/I +significant/YS +signification/M +signify/DRSGNX +signing/S +Signora/M +signora/SM +signore/M +signori +signories +signorina/SM +signorine +Signor/M +signor/SFM +signpost/DMSG +sign's +signs/F +Sigrid/M +Sigurd/M +Sigvard/M +Sihanouk/M +Sikhism/MS +Sikh/MS +Sikhs +Sikkimese +Sikkim/M +Sikorsky/M +silage/GMSD +Silas/M +Sileas/M +siled +Sile/M +silence/MZGRSD +silencer/M +silentness/M +silent/TSPRY +Silesia/M +silhouette/GMSD +silica/SM +silicate/SM +siliceous +silicide/M +silicone/SM +silicon/MS +silicoses +silicosis/M +silken/DG +silk/GXNDMS +silkily +silkiness/SM +silkscreen/SM +silkworm/MS +silky/RSPT +silliness/SM +sill/MS +silly/PRST +silo/GSM +siltation/M +silt/MDGS +siltstone/M +silty/RT +Silurian/S +Silvain/M +Silva/M +Silvana/M +Silvan/M +Silvano/M +Silvanus/M +silverer/M +silverfish/MS +Silverman/M +silver/RDYMGS +silversmith/M +silversmiths +Silverstein/M +silverware/SM +silvery/RTP +Silvester/M +Silvia/M +Silvie/M +Silvio/M +Si/M +SIMD +Simenon/M +Simeon/M +simian/S +similar/EY +similarity/EMS +simile/SM +similitude/SME +Simla/M +simmer/GSD +Simmonds/M +Simmons/M +Simmonsville/M +Sim/MS +Simms/M +Simona/M +Simone/M +Simonette/M +simonize/SDG +Simon/M +Simonne/M +simony/MS +simpatico +simper/GDS +simpleminded/YP +simpleness/S +simple/RSDGTP +simpleton/SM +simplex/S +simplicity/MS +simplified/U +simplify/ZXRSDNG +simplistic +simplistically +simply +Simpson/M +simulacrum/M +Simula/M +SIMULA/M +simulate/XENGSD +simulation/ME +simulative +simulator/SEM +simulcast/GSD +simultaneity/SM +simultaneousness/M +simultaneous/YP +Sinai/M +Sinatra/M +since +sincere/IY +sincereness/M +sincerer +sincerest +sincerity/MIS +Sinclair/M +Sinclare/M +Sindbad/M +Sindee/M +Sindhi/M +sinecure/MS +sinecurist/M +sine/SM +sinew/SGMD +sinewy +sinfulness/SM +sinful/YP +Singaporean/S +Singapore/M +sing/BGJZYDR +Singborg/M +singeing +singer/M +Singer/M +singe/S +singing/Y +singlehanded/Y +singleness/SM +single/PSDG +Singleton/M +singleton/SM +singletree/SM +singlet/SM +singsong/GSMD +singularity/SM +singularization/M +singular/SY +Sinhalese/M +sinisterness/M +sinister/YP +sinistral/Y +sinkable/U +sinker/M +sink/GZSDRB +sinkhole/SM +Sinkiang/M +sinking/M +sinlessness/M +sinless/YP +sin/MAGS +sinned +sinner/MS +sinning +sinter/DM +sinuosity/MS +sinuousities +sinuousness/M +sinuous/PY +sinusitis/SM +sinus/MS +sinusoidal/Y +sinusoid/MS +Siobhan/M +Siouxie/M +Sioux/M +siphon/DMSG +siphons/U +sipped +sipper/SM +sipping +sip/S +sired/C +sire/MS +siren/M +sires/C +siring/C +Sirius/M +sirloin/MS +Sir/MS +sirocco/MS +sirred +sirring +sirup's +sir/XGMNDS +sisal/MS +Sisely/M +Sisile/M +sis/S +Sissie/M +sissified +Sissy/M +sissy/TRSM +sister/GDYMS +sisterhood/MS +sisterliness/MS +sisterly/P +sister's/A +Sistine +Sisyphean +Sisyphus/M +sit/AG +sitarist/SM +sitar/SM +sitcom/SM +site/DSJM +sits +sitter/MS +sitting/SM +situate/GNSDX +situational/Y +situationist +situation/M +situ/S +situs/M +Siusan/M +Siva/M +Siward/M +sixfold +sixgun +six/MRSH +sixpence/MS +sixpenny +sixshooter +sixteen/HRSM +sixteenths +sixths +sixth/Y +sixtieths +sixty/SMH +sizableness/M +sizable/P +sized/UA +size/GJDRSBMZ +sizer/M +sizes/A +sizing/M +sizzler/M +sizzle/RSDG +SJ +Sjaelland/M +SK +ska/S +skateboard/SJGZMDR +skater/M +skate/SM +skat/JMDRGZ +skedaddle/GSD +skeet/RMS +skein/MDGS +skeletal/Y +skeleton/MS +Skell/M +Skelly/M +skeptical/Y +skepticism/MS +skeptic/SM +sketchbook/SM +sketcher/M +sketchily +sketchiness/MS +sketch/MRSDZG +sketchpad +sketchy/PRT +skew/DRSPGZ +skewer/GDM +skewing/M +skewness/M +skidded +skidding +skid/S +skiff/GMDS +skiing/M +skilfully +skill/DMSG +skilled/U +skillet/MS +skillfulnesses +skillfulness/MU +skillful/YUP +skilling/M +skimmed +skimmer/MS +skimming/SM +ski/MNJSG +skimp/GDS +skimpily +skimpiness/MS +skimpy/PRT +skim/SM +skincare +skindive/G +skinflint/MS +skinhead/SM +skinless +skinned +Skinner/M +skinner/SM +skinniness/MS +skinning +skinny/TRSP +skin/SM +skintight +Skip/M +skipped +Skipper/M +skipper/SGDM +Skippie/M +skipping +Skipp/RM +Skippy/M +skip/S +Skipton/M +skirmisher/M +skirmish/RSDMZG +skirter/M +skirting/M +skirt/RDMGS +skit/GSMD +skitter/SDG +skittishness/SM +skittish/YP +skittle/SM +skivvy/GSDM +skoal/SDG +Skopje/M +skulduggery/MS +skulker/M +skulk/SRDGZ +skullcap/MS +skullduggery's +skull/SDM +skunk/GMDS +skycap/MS +skydiver/SM +skydiving/MS +Skye/M +skyhook +skyjacker/M +skyjack/ZSGRDJ +Skylab/M +skylarker/M +skylark/SRDMG +Skylar/M +Skyler/M +skylight/MS +skyline/MS +Sky/M +sky/MDRSGZ +skyrocket/GDMS +skyscraper/M +skyscrape/RZ +skyward/S +skywave +skyway/M +skywriter/MS +skywriting/MS +slabbed +slabbing +slab/MS +slacken/DG +slacker/M +slackness/MS +slack/SPGTZXYRDN +Slade/M +slagged +slagging +slag/MS +slain +slake/DSG +slaked/U +slalom/SGMD +slammed +slammer/S +slamming +slam/S +slander/MDRZSG +slanderousness/M +slanderous/PY +slang/SMGD +slangy/TR +slanting/Y +slant/SDG +slantwise +slapdash/S +slaphappy/TR +slap/MS +slapped +slapper +slapping +slapstick/MS +slash/GZRSD +slashing/Y +slater/M +Slater/M +slate/SM +slather/SMDG +slating/M +slat/MDRSGZ +slatted +slattern/MYS +slatting +slaughterer/M +slaughterhouse/SM +slaughter/SJMRDGZ +slave/DSRGZM +slaveholder/SM +slaver/GDM +slavery/SM +Slavic/M +slavishness/SM +slavish/YP +Slav/MS +Slavonic/M +slaw/MS +slay/RGZS +sleaze/S +sleazily +sleaziness/SM +sleazy/RTP +sledded +sledder/S +sledding +sledgehammer/MDGS +sledge/SDGM +sled/SM +sleekness/S +sleek/PYRDGTS +sleeper/M +sleepily +sleepiness/SM +sleeping/M +sleeplessness/SM +sleepless/YP +sleepover/S +sleep/RMGZS +sleepwalker/M +sleepwalk/JGRDZS +sleepwear/M +sleepyhead/MS +sleepy/PTR +sleet/DMSG +sleety/TR +sleeveless +sleeve/SDGM +sleeving/M +sleigh/GMD +sleighs +sleight/SM +sleken/DG +slenderize/DSG +slenderness/MS +slender/RYTP +slept +Slesinger/M +sleuth/GMD +sleuths +slew/DGS +slice/DSRGZM +sliced/U +slicer/M +slicker/M +slickness/MS +slick/PSYRDGTZ +slider/M +slide/S +slid/GZDR +slight/DRYPSTG +slighter/M +slighting/Y +slightness/S +slime/SM +sliminess/S +slimline +slimmed +slimmer/S +slimmest +slimming/S +slimness/S +slim/SPGYD +slimy/PTR +sling/GMRS +slingshot/MS +slings/U +slink/GS +slinky/RT +slipcase/MS +slipcover/GMDS +slipknot/SM +slippage/SM +slipped +slipper/GSMD +slipperiness/S +slippery/PRT +slipping +slipshod +slip/SM +slipstream/MDGS +slipway/SM +slither/DSG +slithery +slit/SM +slitted +slitter/S +slitting +sliver/GSDM +slivery +Sloane/M +Sloan/M +slobber/SDG +slobbery +slob/MS +Slocum/M +sloe/MS +sloganeer/MG +slogan/MS +slogged +slogging +slog/S +sloop/SM +slop/DRSGZ +sloped/U +slope/S +slopped +sloppily +sloppiness/SM +slopping +sloppy/RTP +slosh/GSDM +slothfulness/MS +slothful/PY +sloth/GDM +sloths +slot/MS +slotted +slotting +slouch/DRSZG +sloucher/M +slouchy/RT +slough/GMD +sloughs +Slovakia/M +Slovakian/S +Slovak/S +Slovene/S +Slovenia/M +Slovenian/S +slovenliness/SM +slovenly/TRP +sloven/YMS +slowcoaches +slowdown/MS +slowish +slowness/MS +slow/PGTYDRS +slowpoke/MS +SLR +sludge/SDGM +sludgy/TR +slue/MGDS +sluggard/MS +slugged +slugger/SM +slugging +sluggishness/SM +sluggish/YP +slug/MS +sluice/SDGM +slumberer/M +slumber/MDRGS +slumberous +slumlord/MS +slummed +slummer +slumming +slum/MS +slummy/TR +slump/DSG +slung/U +slunk +slur/MS +slurp/GSD +slurred +slurried/M +slurring +slurrying/M +slurry/MGDS +slushiness/SM +slush/SDMG +slushy/RTP +slut/MS +sluttish +slutty/TR +Sly/M +slyness/MS +sly/RTY +smacker/M +smack/SMRDGZ +smallholders +smallholding/MS +smallish +Small/M +smallness/S +smallpox/SM +small/SGTRDP +smalltalk +smalltime +Smallwood/M +smarmy/RT +smarten/GD +smartness/S +smartypants +smart/YRDNSGTXP +smasher/M +smash/GZRSD +smashing/Y +smashup/S +smattering/SM +smearer/M +smear/GRDS +smeary/TR +smeller/M +smelliness/MS +smell/SBRDG +smelly/TRP +smelter/M +smelt/SRDGZ +Smetana/M +smidgen/MS +smilax/MS +smile/GMDSR +smiley/M +smilies +smiling/UY +smirch/SDG +smirk/GSMD +Smirnoff/M +smite/GSR +smiter/M +smith/DMG +smithereens +Smithfield/M +Smith/M +smiths +Smithsonian/M +Smithson/M +Smithtown/M +smithy/SM +smitten +Smitty/M +Sm/M +smocking/M +smock/SGMDJ +smoggy/TR +smog/SM +smoke/GZMDSRBJ +smokehouse/MS +smokeless +smoker/M +smokescreen/S +smokestack/MS +Smokey/M +smokiness/S +smoking/M +smoky/RSPT +smoldering/Y +smolder/SGD +Smolensk/M +Smollett/M +smooch/SDG +smoothen/DG +smoother/M +smoothie/SM +smoothness/MS +smooths +smooth/TZGPRDNY +smrgsbord/SM +smote +smother/GSD +SMSA/MS +SMTP +Smucker/M +smudge/GSD +smudginess/M +smudgy/TRP +smugged +smugger +smuggest +smugging +smuggle/JZGSRD +smuggler/M +smugness/MS +smug/YSP +smut/SM +Smuts/M +smutted +smuttiness/SM +smutting +smutty/TRP +Smyrna/M +snack/SGMD +snaffle/GDSM +snafu/DMSG +snagged +snagging +snag/MS +snail/GSDM +Snake +snakebird/M +snakebite/MS +snake/DSGM +snakelike +snakeroot/M +snaky/TR +snapback/M +snapdragon/MS +snapped/U +snapper/SM +snappily +snappiness/SM +snapping/U +snappishness/SM +snappish/PY +snappy/PTR +snapshot/MS +snapshotted +snapshotting +snap/US +snare/DSRGM +snarer/M +snarf/JSGD +snarler/M +snarling/Y +snarl/UGSD +snarly/RT +snatch/DRSZG +snatcher/M +snazzily +snazzy/TR +Snead/M +sneaker/MD +sneakily +sneakiness/SM +sneaking/Y +sneak/RDGZS +sneaky/PRT +Sneed/M +sneerer/M +sneer/GMRDJS +sneering/Y +sneeze/SRDG +Snell/M +snicker/GMRD +snick/MRZ +snideness/M +Snider/M +snide/YTSRP +sniffer/M +sniff/GZSRD +sniffle/GDRS +sniffler/M +sniffles/M +snifter/MDSG +snigger's +sniper/M +snipe/SM +snipped +snipper/SM +snippet/SM +snipping +snippy/RT +snip/SGDRZ +snitch/GDS +snit/SM +sniveler/M +snivel/JSZGDR +Sn/M +snobbery/SM +snobbishness/S +snobbish/YP +snobby/RT +snob/MS +Snodgrass/M +snood/SGDM +snooker/GMD +snook/SMRZ +snooper/M +snoop/SRDGZ +Snoopy/M +snoopy/RT +snootily +snootiness/MS +snoot/SDMG +snooty/TRP +snooze/GSD +snore/DSRGZ +snorkel/ZGSRDM +snorter/M +snort/GSZRD +snot/MS +snotted +snottily +snottiness/SM +snotting +snotty/TRP +snout/SGDM +snowball/SDMG +snowbank/SM +Snowbelt/SM +snowbird/SM +snowblower/S +snowboard/GZDRJS +snowbound +snowcapped +snowdrift/MS +snowdrop/MS +snowfall/MS +snowfield/MS +snowflake/MS +snow/GDMS +snowily +snowiness/MS +Snow/M +snowman/M +snowmen +snowmobile/GMDRS +snowplough/M +snowploughs +snowplow/SMGD +snowshed +snowshoeing +snowshoe/MRS +snowshoer/M +snowstorm/MS +snowsuit/S +snowy/RTP +snubbed +snubber +snubbing +snub/SP +snuffbox/SM +snuffer/M +snuff/GZSYRD +snuffle/GDSR +snuffler/M +snuffly/RT +snugged +snugger +snuggest +snugging +snuggle/GDS +snuggly +snugness/MS +snug/SYP +Snyder/M +so +SO +soaker/M +soak/GDRSJ +soapbox/DSMG +soapiness/S +soap/MDRGS +soapstone/MS +soapsud/S +soapy/RPT +soar/DRJSG +soarer/M +soaring/Y +sobbed +sobbing/Y +soberer/M +soberness/SM +sober/PGTYRD +sobriety/SIM +sobriquet/MS +sob/SZR +Soc +soccer/MS +sociabilities +sociability/IM +sociable/S +sociably/IU +socialism/SM +socialistic +socialist/SM +socialite/SM +sociality/M +socialization/SM +socialized/U +socializer/M +socialize/RSDG +socially/U +social/SY +societal/Y +society/MS +socio +sociobiology/M +sociocultural/Y +sociodemographic +socioeconomically +socioeconomic/S +sociolinguistics/M +sociological/MY +sociologist/SM +sociology/SM +sociometric +sociometry/M +sociopath/M +sociopaths +socket/SMDG +sock/GDMS +Socorro/M +Socrates/M +Socratic/S +soc/S +soda/SM +sodded +sodden/DYPSG +soddenness/M +sodding +Soddy/M +sodium/MS +sod/MS +sodomite/MS +sodomize/GDS +Sodom/M +sodomy/SM +soever +sofa/SM +Sofia/M +Sofie/M +softball/MS +softbound +softener/M +soften/ZGRD +softhearted +softie's +softness/MS +soft/SPXTYNR +software/MS +softwood/SM +softy/SM +soggily +sogginess/S +soggy/RPT +Soho/M +soign +soiled/U +soil/SGMD +soire/SM +sojourn/RDZGSM +solace/GMSRD +solacer/M +solaria +solarium/M +solar/S +solder/RDMSZG +soldier/MDYSG +soldiery/MS +sold/RU +solecism/MS +soled/FA +solemness +solemnify/GSD +solemnity/MS +solemnization/SM +solemnize/GSD +solemnness/SM +solemn/PTRY +solenoid/MS +soler/F +soles/IFA +sole/YSP +sol/GSMDR +solicitation/S +solicited/U +solicitor/MS +solicitousness/S +solicitous/YP +solicit/SDG +solicitude/MS +solidarity/MS +solidi +solidification/M +solidify/NXSDG +solidity/S +solidness/SM +solid/STYRP +solidus/M +soliloquies +soliloquize/DSG +soliloquy/M +soling/NM +solipsism/MS +solipsist/S +Solis/M +solitaire/SM +solitary/SP +solitude/SM +Sollie/M +Solly/M +Sol/MY +solo/DMSG +soloist/SM +Solomon/SM +Solon/M +Soloviev/M +solstice/SM +solubility/IMS +soluble/SI +solute/ENAXS +solute's +solution/AME +solvable/UI +solvating +solve/ABSRDZG +solved/EU +solvency/IMS +solvent/IS +solvently +solvent's +solver/MEA +solves/E +solving/E +Solzhenitsyn/M +Somalia/M +Somalian/S +Somali/MS +soma/M +somatic +somberness/SM +somber/PY +sombre +sombrero/SM +somebody'll +somebody/SM +someday +somehow +someone'll +someone/SM +someplace/M +somersault/DSGM +Somerset/M +somerset/S +somersetted +somersetting +Somerville/M +something/S +sometime/S +someway/S +somewhat/S +somewhere/S +some/Z +sommelier/SM +Somme/M +somnambulism/SM +somnambulist/SM +somnolence/MS +somnolent/Y +Somoza/M +sonar/SM +sonata/MS +sonatina/SM +Sondheim/M +Sondra/M +Sonenberg/M +songbag +songbird/SM +songbook/S +songfest/MS +songfulness/M +songful/YP +Songhai/M +Songhua/M +song/MS +songster/MS +songstress/SM +songwriter/SM +songwriting +Sonia/M +sonic/S +Sonja/M +Son/M +sonnet/MDSG +Sonnie/M +Sonni/M +Sonnnie/M +Sonny/M +sonny/SM +Sonoma/M +Sonora/M +sonority/S +sonorousness/SM +sonorous/PY +son/SMY +Sontag/M +sonuvabitch +Sonya/M +Sony/M +soonish +soon/TR +soothe +soother/M +sooth/GZTYSRDMJ +soothingness/M +soothing/YP +sooths +soothsayer/M +soothsay/JGZR +soot/MGDS +sooty/RT +SOP +Sophey/M +Sophia/SM +Sophie/M +Sophi/M +sophism/SM +sophister/M +sophistical +sophisticatedly +sophisticated/U +sophisticate/XNGDS +sophistication/MU +sophistic/S +sophist/RMS +sophistry/SM +Sophoclean +Sophocles/M +sophomore/SM +sophomoric +Sophronia/M +soporifically +soporific/SM +sopped +sopping/S +soppy/RT +soprano/SM +sop/SM +Sopwith/M +sorbet/SM +Sorbonne/M +sorcerer/MS +sorceress/S +sorcery/MS +Sorcha/M +sordidness/SM +sordid/PY +sorehead/SM +soreness/S +Sorensen/M +Sorenson/M +sore/PYTGDRS +sorghum/MS +sorority/MS +sorrel/SM +Sorrentine/M +sorrily +sorriness/SM +sorrower/M +sorrowfulness/SM +sorrowful/YP +sorrow/GRDMS +sorry/PTSR +sorta +sortable +sorted/U +sorter/MS +sort/FSAGD +sortieing +sortie/MSD +sort's +sos +SOS +Sosa/M +Sosanna/M +Soto/M +sot/SM +sottish +soubriquet's +souffl/MS +sough/DG +soughs +sought/U +soulfulness/MS +soulful/YP +soulless/Y +soul/MDS +sound/AUD +soundboard/MS +sounders +sounder's +sounder/U +soundest +sounding/AY +soundings +sounding's +soundless/Y +soundly/U +soundness/UMS +soundproof/GSD +soundproofing/M +sound's +sounds/A +soundtrack/MS +soupon/SM +soup/GMDS +Souphanouvong/M +soupy/RT +source/ASDMG +sourceless +sourdough +sourdoughs +sourish +sourness/MS +sourpuss/MS +sour/TYDRPSG +Sousa/M +sousaphone/SM +sous/DSG +souse +sou/SMH +Southampton/M +southbound +southeastern +southeaster/YM +Southeast/MS +southeast/RZMS +southeastward/S +southerly/S +souther/MY +southerner/M +Southerner/MS +southernisms +southernmost +southern/PZSYR +Southey/M +Southfield/M +southing/M +southland/M +South/M +southpaw/MS +south/RDMG +souths +Souths +southward/S +southwestern +southwester/YM +Southwest/MS +southwest/RMSZ +southwestward/S +souvenir/SM +sou'wester +sovereignty/MS +sovereign/YMS +soviet/MS +Soviet/S +sow/ADGS +sowbelly/M +sowens/M +sower/DS +Soweto/M +sown/A +sox's +soybean/MS +Soyinka/M +soy/MS +Soyuz/M +Spaatz/M +spacecraft/MS +space/DSRGZMJ +spaceflight/S +spaceman/M +spacemen +spaceport/SM +spacer/M +spaceship/MS +spacesuit/MS +spacewalk/GSMD +Spacewar/M +spacewoman +spacewomen +spacey +spacial +spacier +spaciest +spaciness +spacing/M +spaciousness/SM +spacious/PY +Spackle +spade/DSRGM +spadeful/SM +spader/M +spadework/SM +spadices +spadix/M +Spafford/M +spaghetti/SM +Spahn/M +Spain/M +spake +Spalding/M +Spam/M +spa/MS +Span +spandex/MS +spandrels +spangle/GMDS +Spanglish/S +Spaniard/SM +spanielled +spanielling +spaniel/SM +Spanish/M +spanker/M +spanking/M +spank/SRDJG +span/MS +spanned/U +spanner/SM +spanning +SPARC/M +SPARCstation/M +spar/DRMGTS +spareness/MS +spare/PSY +spareribs +sparer/M +sparing/UY +sparker/M +sparkle/DRSGZ +sparkler/M +Sparkman/M +Sparks +spark/SGMRD +sparky/RT +sparling/SM +sparred +sparrer +sparring/U +sparrow/MS +sparseness/S +sparse/YP +sparsity/S +spars/TR +Spartacus/M +Sparta/M +spartan +Spartan/S +spasm/GSDM +spasmodic +spasmodically +spastic/S +spate/SM +spathe/MS +spatiality/M +spatial/Y +spat/MS +spatted +spatter/DGS +spatterdock/M +spatting +spatula/SM +spavin/DMS +spawner/M +spawn/MRDSG +spay/DGS +SPCA +speakable/U +speakeasy/SM +speaker/M +Speaker's +speakership/M +speaking/U +speak/RBGZJS +spearer/M +spearfish/SDMG +spearhead/GSDM +spearmint/MS +spear/MRDGS +Spears +spec'd +specialism/MS +specialist/MS +specialization/SM +specialized/U +specialize/GZDSR +specializing/U +special/SRYP +specialty/MS +specie/MS +specif +specifiability +specifiable +specifiably +specifically +specification/SM +specificity/S +specific/SP +specified/U +specifier/SM +specifies +specify/AD +specifying +specimen/SM +spec'ing +speciousness/SM +specious/YP +speck/GMDS +speckle/GMDS +spec/SM +spectacle/MSD +spectacular/SY +spectator/SM +specter/DMS +specter's/A +spectralness/M +spectral/YP +spectra/M +spectrogram/MS +spectrographically +spectrograph/M +spectrography/M +spectrometer/MS +spectrometric +spectrometry/M +spectrophotometer/SM +spectrophotometric +spectrophotometry/M +spectroscope/SM +spectroscopic +spectroscopically +spectroscopy/SM +spectrum/M +specularity +specular/Y +speculate/VNGSDX +speculation/M +speculative/Y +speculator/SM +sped +speech/GMDS +speechlessness/SM +speechless/YP +speedboat/GSRM +speedboating/M +speeder/M +speedily +speediness/SM +speedometer/MS +speed/RMJGZS +speedster/SM +speedup/MS +speedway/SM +speedwell/MS +speedy/PTR +speer/M +speleological +speleologist/S +speleology/MS +spellbinder/M +spellbind/SRGZ +spellbound +spelldown/MS +spelled/A +speller/M +spelling/M +spell/RDSJGZ +spells/A +spelunker/MS +spelunking/S +Spencerian +Spencer/M +Spence/RM +spender/M +spend/SBJRGZ +spendthrift/MS +Spenglerian +Spengler/M +Spense/MR +Spenserian +Spenser/M +spent/U +spermatophyte/M +spermatozoa +spermatozoon/M +spermicidal +spermicide/MS +sperm/SM +Sperry/M +spew/DRGZJS +spewer/M +SPF +sphagnum/SM +sphere/SDGM +spherical/Y +spheric/S +spherics/M +spheroidal/Y +spheroid/SM +spherule/MS +sphincter/SM +Sphinx/M +sphinx/MS +Spica/M +spic/DGM +spicebush/M +spice/SM +spicily +spiciness/SM +spicule/MS +spicy/PTR +spider/SM +spiderweb/S +spiderwort/M +spidery/TR +Spiegel/M +Spielberg/M +spiel/GDMS +spier/M +spiffy/TDRSG +spigot/MS +spike/GMDSR +Spike/M +spiker/M +spikiness/SM +spiky/PTR +spillage/SM +Spillane/M +spillover/SM +spill/RDSG +spillway/SM +spinach/MS +spinal/YS +spindle/JGMDRS +spindly/RT +spinelessness/M +spineless/YP +spine/MS +spinet/SM +spininess/M +spinnability/M +spinnaker/SM +spinneret/MS +spinner/SM +spinning/SM +Spinoza/M +spin/S +spinsterhood/SM +spinsterish +spinster/MS +spiny/PRT +spiracle/SM +spiraea's +spiral/YDSG +spire/AIDSGF +spirea/MS +spire's +spiritedness/M +spirited/PY +spirit/GMDS +spiritless +spirits/I +spiritualism/SM +spiritualistic +spiritualist/SM +spirituality/SM +spiritual/SYP +spirituous +spirochete/SM +Spiro/M +spiry/TR +spitball/SM +spite/CSDAG +spitefuller +spitefullest +spitefulness/MS +spiteful/PY +spite's/A +spitfire/SM +spit/SGD +spitted +spitting +spittle/SM +spittoon/SM +Spitz/M +splashdown/MS +splasher/M +splash/GZDRS +splashily +splashiness/MS +splashy/RTP +splat/SM +splatted +splatter/DSG +splatting +splayfeet +splayfoot/MD +splay/SDG +spleen/SM +splendidness/M +splendid/YRPT +splendorous +splendor/SM +splenetic/S +splicer/M +splice/RSDGZJ +spline/MSD +splinter/GMD +splintery +splint/SGZMDR +splits/M +split/SM +splittable +splitter/MS +splitting/S +splodge/SM +splotch/MSDG +splotchy/RT +splurge/GMDS +splutterer/M +splutter/RDSG +Sp/M +Spock/M +spoilables +spoilage/SM +spoil/CSZGDR +spoiled/U +spoiler/MC +spoilsport/SM +Spokane/M +spoke/DSG +spoken/U +spokeshave/MS +spokesman/M +spokesmen +spokespeople +spokesperson/S +spokeswoman/M +spokeswomen +spoliation/MCS +spongecake +sponge/GMZRSD +sponger/M +sponginess/S +spongy/TRP +sponsor/DGMS +sponsorship/S +spontaneity/SM +spontaneousness/M +spontaneous/PY +spoof/SMDG +spookiness/MS +spook/SMDG +spooky/PRT +spool/SRDMGZ +spoonbill/SM +spoonerism/SM +spoonful/MS +spoon/GSMD +spoor/GSMD +sporadically +sporadic/Y +spore/DSGM +sporran/MS +sportiness/SM +sporting/Y +sportiveness/M +sportive/PY +sportscast/RSGZM +sportsmanlike/U +sportsman/MY +sportsmanship/MS +sportsmen +sportswear/M +sportswoman/M +sportswomen +sportswriter/S +sport/VGSRDM +sporty/PRT +Sposato/M +spotlessness/MS +spotless/YP +spotlight/GDMS +spotlit +spot/MSC +spotted/U +spotter/MS +spottily +spottiness/SM +spotting/M +spotty/RTP +spousal/MS +spouse/GMSD +spouter/M +spout/SGRD +sprain/SGD +sprang/S +sprat/SM +sprawl/GSD +sprayed/UA +sprayer/M +spray/GZSRDM +sprays/A +spreadeagled +spreader/M +spread/RSJGZB +spreadsheet/S +spreeing +spree/MDS +sprigged +sprigging +sprightliness/MS +sprightly/PRT +sprig/MS +springboard/MS +springbok/MS +springeing +springer/M +Springfield/M +springily +springiness/SM +springing/M +springlike +spring/SGZR +Springsteen/M +springtime/MS +springy/TRP +sprinkle/DRSJZG +sprinkler/DM +sprinkling/M +Sprint/M +sprint/SGZMDR +sprite/SM +spritz/GZDSR +sprocket/DMGS +sprocketed/U +Sproul/M +sprout/GSD +spruce/GMTYRSDP +spruceness/SM +sprue/M +sprung/U +spryness/S +spry/TRY +SPSS +spudded +spudding +spud/MS +Spuds/M +spume/DSGM +spumone's +spumoni/S +spumy/TR +spun +spunk/GSMD +spunky/SRT +spurge/MS +spuriousness/SM +spurious/PY +spur/MS +spurn/RDSG +spurred +spurring +spurt/SGD +sputa +Sputnik +sputnik/MS +sputter/DRGS +sputum/M +spy/DRSGM +spyglass/MS +sq +sqq +sqrt +squabbed +squabber +squabbest +squabbing +squabbler/M +squabble/ZGDRS +squab/SM +squadded +squadding +squadron/MDGS +squad/SM +squalidness/SM +squalid/PRYT +squaller/M +squall/GMRDS +squally/RT +squalor/SM +squamous/Y +squander/GSRD +Squanto +square/GMTYRSDP +squareness/SM +squarer/M +Squaresville/M +squarish +squash/GSRD +squashiness/M +squashy/RTP +squatness/MS +squat/SPY +squatted +squatter/SMDG +squattest +squatting +squawker/M +squawk/GRDMZS +squaw/SM +squeaker/M +squeakily +squeakiness/S +squeak/RDMGZS +squeaky/RPT +squealer/M +squeal/MRDSGZ +squeamishness/SM +squeamish/YP +squeegee/DSM +squeegeeing +squeeze/GZSRDB +squeezer/M +squelcher/M +squelch/GDRS +squelchy/RT +squibbed +Squibb/GM +squibbing +Squibbing/M +squib/SM +squidded +squidding +squid/SM +squiggle/MGDS +squiggly/RT +squinter/M +squint/GTSRD +squinting/Y +squirehood +squire/SDGM +squirm/SGD +squirmy/TR +squirrel/SGYDM +squirter/M +squirt/GSRD +squish/GSD +squishy/RTP +Sr +Srinagar/M +SRO +S's +SS +SSA +SSE +ssh +s's/KI +SSS +SST +SSW +ST +stabbed +stabber/S +stabbing/S +stability/ISM +stabilizability +stabilization/CS +stabilization's +stabilize/CGSD +stabilizer/MS +stableman/M +stablemate +stablemen +stableness/UM +stable/RSDGMTP +stabler/U +stable's/F +stables/F +stablest/U +stabling/M +stably/U +stab/YS +staccato/S +Stacee/M +Stace/M +Stacey/M +Stacia/M +Stacie/M +Staci/M +stackable +stacker/M +stack's +stack/USDG +Stacy/M +stadias +stadia's +stadium/MS +Stael/M +Stafani/M +staff/ADSG +Staffard/M +staffer/MS +Stafford/M +Staffordshire/M +staffroom +staff's +Staford/M +stag/DRMJSGZ +stagecoach/MS +stagecraft/MS +stagehand/MS +stager/M +stage/SM +stagestruck +stagflation/SM +stagged +staggerer/M +stagger/GSJDR +staggering/Y +staggers/M +stagging +staginess/M +staging/M +stagnancy/SM +stagnant/Y +stagnate/NGDSX +stagnation/M +stagy/PTR +Stahl/M +staidness/MS +staid/YRTP +stained/U +stainer/M +stainless/YS +stain/SGRD +staircase/SM +stair/MS +stairway/SM +stairwell/MS +stake/DSGM +stakeholder/S +stakeout/SM +stalactite/SM +stalag/M +stalagmite/SM +stalemate/SDMG +staleness/MS +stale/PGYTDSR +Staley/M +Stalingrad/M +Stalinist +Stalin/SM +stalker/M +stalk/MRDSGZJ +stall/DMSJG +stalled/I +stallholders +stallion/SM +Stallone/M +stalls/I +stalwartness/M +stalwart/PYS +Sta/M +stamen/MS +Stamford/M +stamina/SM +staminate +stammer/DRSZG +stammerer/M +stammering/Y +stampede/MGDRS +stampeder/M +stamped/U +stamper/M +stamp/RDSGZJ +stance/MIS +stancher/M +stanch/GDRST +stanchion/SGMD +standalone +standardization/AMS +standardized/U +standardize/GZDSR +standardizer/M +standardizes/A +standard/YMS +standby +standbys +standee/MS +Standford/M +standing/M +Standish/M +standoffish +standoff/SM +standout/MS +standpipe/MS +standpoint/SM +stand/SJGZR +standstill/SM +Stanfield/M +Stanford/M +Stanislas/M +Stanislaus/M +Stanislavsky/M +Stanislaw/M +stank/S +Stanleigh/M +Stanley/M +Stanly/M +stannic +stannous +Stanton/M +Stanwood/M +Stan/YMS +stanza/MS +staph/M +staphs +staphylococcal +staphylococci +staphylococcus/M +stapled/U +stapler/M +Stapleton/M +staple/ZRSDGM +starboard/SDMG +starchily +starchiness/MS +starch/MDSG +starchy/TRP +stardom/MS +star/DRMGZS +stardust/MS +stare/S +starfish/SM +Stargate/M +stargaze/ZGDRS +staring/U +Starkey/M +Stark/M +starkness/MS +stark/SPGTYRD +Starla/M +Starlene/M +starless +starlet/MS +starlight/MS +starling/MS +Starlin/M +starlit +Star/M +starred +starring +Starr/M +starry/TR +starship +starstruck +start/ASGDR +starter/MS +startle/GDS +startling/PY +startup/SM +starvation/MS +starveling/M +starver/M +starve/RSDG +stash/GSD +stasis/M +stat/DRSGV +statecraft/MS +stated/U +statehood/MS +statehouse/S +Statehouse's +state/IGASD +statelessness/MS +stateless/P +stateliness/MS +stately/PRT +statement/MSA +Staten/M +stater/M +stateroom/SM +stateside +state's/K +states/K +statesmanlike +statesman/MY +statesmanship/SM +statesmen +stateswoman +stateswomen +statewide +statical/Y +static/S +statics/M +stationarity +stationary/S +stationer/M +stationery/MS +stationmaster/M +station/SZGMDR +statistical/Y +statistician/MS +statistic/MS +Statler/M +stator/SM +statuary/SM +statue/MSD +statuesque/YP +statuette/MS +stature/MS +status/SM +statute/SM +statutorily +statutory/P +Stauffer/M +staunchness/S +staunch/PDRSYTG +stave/DGM +Stavro/MS +stay/DRGZS +stayer/M +std +STD +stdio +steadfastness/MS +steadfast/PY +steadily/U +steadiness's +steadiness/US +steading/M +stead/SGDM +steady/DRSUTGP +steakhouse/SM +steak/SM +stealer/M +stealing/M +steal/SRHG +stealthily +stealthiness/MS +stealth/M +stealths +stealthy/PTR +steamboat/MS +steamer/MDG +steamfitter/S +steamfitting/S +steamily +steaminess/SM +steamroller/DMG +steamroll/GZRDS +steam/SGZRDMJ +steamship/SM +steamy/RSTP +Stearne/M +Stearn/SM +steed/SM +Steele/M +steeliness/SM +steelmaker/M +steel/SDMGZ +steelworker/M +steelwork/ZSMR +steelyard/MS +steely/TPRS +Steen/M +steepen/GD +steeper/M +steeplebush/M +steeplechase/GMSD +steeplejack/MS +steeple/MS +steepness/S +steep/SYRNDPGTX +steerage/MS +steerer/M +steer/SGBRDJ +steersman/M +steersmen +steeves +Stefa/M +Stefania/M +Stefanie/M +Stefan/M +Stefano/M +Steffane/M +Steffen/M +Steffie/M +Steffi/M +stegosauri +stegosaurus/S +Steinbeck/SM +Steinberg/M +Steinem/M +Steiner/M +Steinmetz/M +Stein/RM +stein/SGZMRD +Steinway/M +Stella/M +stellar +stellated +Ste/M +stemless +stemmed/U +stemming +stem/MS +stemware/MS +stench/GMDS +stenciler/M +stencil/GDRMSZ +stencillings +Stendhal/M +Stendler/M +Stengel/M +stenographer/SM +stenographic +stenography/SM +steno/SM +stenotype/M +stentorian +stepbrother/MS +stepchild/M +stepchildren +stepdaughter/MS +stepfather/SM +Stepha/M +Stephana/M +Stephanie/M +Stephani/M +Stephan/M +Stephannie/M +Stephanus/M +Stephenie/M +Stephen/MS +Stephenson/M +Stephie/M +Stephi/M +Stephine/M +stepladder/SM +step/MIS +stepmother/SM +stepparent/SM +stepper/M +steppe/RSDGMZ +steppingstone/S +stepsister/SM +stepson/SM +stepwise +stereographic +stereography/M +stereo/GSDM +stereophonic +stereoscope/MS +stereoscopic +stereoscopically +stereoscopy/M +stereotype/GMZDRS +stereotypic +stereotypical/Y +sterile +sterility/SM +sterilization/SM +sterilized/U +sterilize/RSDGZ +sterilizes/A +Sterling/M +sterling/MPYS +sterlingness/M +sternal +Sternberg/M +Sterne/M +Stern/M +sternness/S +Sterno +stern/SYRDPGT +sternum/SM +steroidal +steroid/MS +stertorous +Stesha/M +stethoscope/SM +stet/MS +stetson/MS +Stetson/SM +stetted +stetting +Steuben/M +Stevana/M +stevedore/GMSD +Steve/M +Stevena/M +Steven/MS +Stevenson/M +Stevie/M +Stevy/M +steward/DMSG +stewardess/SM +Steward/M +stewardship/MS +Stewart/M +stew/GDMS +st/GBJ +sticker/M +stickily +stickiness/SM +stickleback/MS +stickle/GZDR +stickler/M +stick/MRDSGZ +stickpin/SM +stickup/SM +sticky/GPTDRS +Stieglitz/M +stiffen/JZRDG +stiff/GTXPSYRND +stiffness/MS +stifle/GJRSD +stifler/M +stifling/Y +stigma/MS +stigmata +stigmatic/S +stigmatization/C +stigmatizations +stigmatization's +stigmatize/DSG +stigmatized/U +stile/GMDS +stiletto/MDSG +stillbirth/M +stillbirths +stillborn/S +stiller/MI +stillest +Stillman/M +Stillmann/M +stillness/MS +still/RDIGS +Stillwell/M +stilted/PY +stilt/GDMS +Stilton/MS +Stimson/M +stimulant/MS +stimulated/U +stimulate/SDVGNX +stimulation/M +stimulative/S +stimulator/M +stimulatory +stimuli/M +stimulus/MS +Stine/M +stinger/M +sting/GZR +stingily +stinginess/MS +stinging/Y +stingray/MS +stingy/RTP +stinkbug/S +stinker/M +stink/GZRJS +stinking/Y +stinkpot/M +Stinky/M +stinky/RT +stinter/M +stinting/U +stint/JGRDMS +stipendiary +stipend/MS +stipple/JDRSG +stippler/M +stipulate/XNGSD +stipulation/M +Stirling/M +stirred/U +stirrer/SM +stirring/YS +stirrup/SM +stir/S +stitch/ASDG +stitcher/M +stitchery/S +stitching/MS +stitch's +St/M +stoat/SM +stochastic +stochastically +stochasticity +stockade/SDMG +stockbreeder/SM +stockbroker/MS +stockbroking/S +stocker/SM +Stockhausen/M +stockholder/SM +Stockholm/M +stockily +stockiness/SM +stockinet's +stockinette/S +stocking/MDS +stockist/MS +stockpile/GRSD +stockpiler/M +stockpot/MS +stockroom/MS +stock's +stock/SGAD +stocktaking/MS +Stockton/M +stockyard/SM +stocky/PRT +Stoddard/M +stodge/M +stodgily +stodginess/S +stodgy/TRP +stogy/SM +stoical/Y +stoichiometric +stoichiometry/M +stoicism/SM +Stoicism/SM +stoic/MS +Stoic/MS +stoke/DSRGZ +stoker/M +stokes/M +Stokes/M +STOL +stole/MDS +stolen +stolidity/S +stolidness/S +stolid/PTYR +stolon/SM +stomachache/MS +stomacher/M +stomach/RSDMZG +stomachs +stomp/DSG +stonecutter/SM +stone/DSRGM +Stonehenge/M +stoneless +Stone/M +stonemason/MS +stoner/M +stonewall/GDS +stoneware/MS +stonewashed +stonework/SM +stonewort/M +stonily +stoniness/MS +stony/TPR +stood +stooge/SDGM +stool/SDMG +stoop/SDG +stopcock/MS +stopgap/SM +stoplight/SM +stopover/MS +stoppable/U +stoppage/MS +Stoppard/M +stopped/U +stopper/GMDS +stopping/M +stopple/GDSM +stop's +stops/M +stop/US +stopwatch/SM +storage/SM +store/ADSRG +storefront/SM +storehouse/MS +storekeeper/M +storekeep/ZR +storeroom/SM +store's +stork/SM +stormbound +stormer/M +Stormie/M +stormily +Stormi/M +storminess/S +Storm/M +storm/SRDMGZ +stormtroopers +Stormy/M +stormy/PTR +storyboard/MDSG +storybook/MS +story/GSDM +storyline +storyteller/SM +storytelling/MS +Stouffer/M +stoup/SM +stouten/DG +stouthearted +Stout/M +stoutness/MS +stout/STYRNP +stove/DSRGM +stovepipe/SM +stover/M +stowage/SM +stowaway/MS +Stowe/M +stow/GDS +Strabo/M +straddler/M +straddle/ZDRSG +Stradivari/SM +Stradivarius/M +strafe/GRSD +strafer/M +straggle/GDRSZ +straggly/RT +straightaway/S +straightedge/MS +straightener/M +straighten/ZGDR +straightforwardness/MS +straightforward/SYP +straightjacket's +straightness/MS +straight/RNDYSTXGP +straightway/S +strain/ASGZDR +strained/UF +strainer/MA +straining/F +strains/F +straiten/DG +straitjacket/GDMS +straitlaced +straitness/M +strait/XTPSMGYDNR +stranded/P +strand/SDRG +strangeness/SM +strange/PYZTR +stranger/GMD +stranglehold/MS +strangle/JDRSZG +strangles/M +strangulate/NGSDX +strangulation/M +strapless/S +strapped/U +strapping/S +strap's +strap/US +Strasbourg/M +stratagem/SM +strata/MS +strategical/Y +strategic/S +strategics/M +strategist/SM +strategy/SM +Stratford/M +strati +stratification/M +stratified/U +stratify/NSDGX +stratigraphic +stratigraphical +stratigraphy/M +stratosphere/SM +stratospheric +stratospherically +stratum/M +stratus/M +Strauss +Stravinsky/M +strawberry/SM +strawflower/SM +straw/SMDG +strayer/M +stray/GSRDM +streak/DRMSGZ +streaker/M +streaky/TR +streamed/U +streamer/M +stream/GZSMDR +streaming/M +streamline/SRDGM +streetcar/MS +streetlight/SM +street/SMZ +streetwalker/MS +streetwise +Streisand/M +strengthen/AGDS +strengthener/MS +strength/NMX +strengths +strenuousness/SM +strenuous/PY +strep/MS +streptococcal +streptococci +streptococcus/M +streptomycin/SM +stress/DSMG +stressed/U +stressful/YP +stretchability/M +stretchable/U +stretch/BDRSZG +stretcher/DMG +stretchy/TRP +strew/GDHS +strewn +striae +stria/M +striate/DSXGN +striated/U +striation/M +stricken +Strickland/M +strict/AF +stricter +strictest +strictly +strictness/S +stricture/SM +stridden +stridency/S +strident/Y +strider/M +stride/RSGM +strife/SM +strikebreaker/M +strikebreaking/M +strikebreak/ZGR +strikeout/S +striker/M +strike/RSGZJ +striking/Y +Strindberg/M +stringed +stringency/S +stringent/Y +stringer/MS +stringiness/SM +stringing/M +string's +string/SAG +stringy/RTP +striper/M +stripe/SM +strip/GRDMS +stripling/M +stripped/U +stripper/MS +stripping +stripteaser/M +striptease/SRDGZM +stripy/RT +strive/JRSG +striven +striver/M +strobe/SDGM +stroboscope/SM +stroboscopic +strode +stroke/ZRSDGM +stroking/M +stroller/M +stroll/GZSDR +Stromberg/M +Stromboli/M +Strom/M +strongbow +strongbox/MS +Strongheart/M +stronghold/SM +strongish +Strong/M +strongman/M +strongmen +strongroom/MS +strong/YRT +strontium/SM +strophe/MS +strophic +stropped +stropping +strop/SM +strove +struck +structuralism/M +structuralist/SM +structural/Y +structured/AU +structureless +structures/A +structure/SRDMG +structuring/A +strudel/MS +struggle/GDRS +struggler/M +strummed +strumming +strumpet/GSDM +strum/S +strung/UA +strut/S +strutted +strutter/M +strutting +strychnine/MS +Stuart/MS +stubbed/M +stubbing +Stubblefield/MS +stubble/SM +stubbly/RT +stubbornness/SM +stubborn/SGTYRDP +stubby/SRT +stub/MS +stuccoes +stucco/GDM +stuck/U +studbook/SM +studded +studding/SM +Studebaker/M +studentship/MS +student/SM +studiedness/M +studied/PY +studier/SM +studio/MS +studiousness/SM +studious/PY +stud/MS +study/AGDS +stuffily +stuffiness/SM +stuffing/M +stuff/JGSRD +stuffy/TRP +stultify/NXGSD +Stu/M +stumble/GZDSR +stumbling/Y +stumpage/M +stumper/M +stump/RDMSG +stumpy/RT +stung +stunk +stunned +stunner/M +stunning/Y +stun/S +stunted/P +stunt/GSDM +stupefaction/SM +stupefy/DSG +stupendousness/M +stupendous/PY +stupidity/SM +stupidness/M +stupid/PTYRS +stupor/MS +sturdily +sturdiness/SM +sturdy/SRPT +sturgeon/SM +Sturm/M +stutter/DRSZG +Stuttgart/M +Stuyvesant/M +sty/DSGM +Stygian +styled/A +style/GZMDSR +styles/A +styli +styling/A +stylishness/S +stylish/PY +stylistically +stylistic/S +stylist/MS +stylites +stylization/MS +stylize/DSG +stylos +stylus/SM +stymieing +stymie/SD +stymy's +styptic/S +styrene/MS +Styrofoam/S +Styx/M +suable +Suarez/M +suasion/EMS +suaveness/S +suave/PRYT +suavity/SM +subaltern/SM +subarctic/S +subareas +Subaru/M +subassembly/M +subatomic/S +subbasement/SM +subbed +subbing +subbranch/S +subcaste/M +subcategorizing +subcategory/SM +subchain +subclassifications +subclass/MS +subclauses +subcommand/S +subcommittee/SM +subcompact/S +subcomponent/MS +subcomputation/MS +subconcept +subconsciousness/SM +subconscious/PSY +subconstituent +subcontinental +subcontinent/MS +subcontractor/SM +subcontract/SMDG +subcultural +subculture/GMDS +subcutaneous/Y +subdirectory/S +subdistrict/M +subdivide/SRDG +subdivision/SM +subdued/Y +subdue/GRSD +subduer/M +subexpression/MS +subfamily/SM +subfield/MS +subfile/SM +subfreezing +subgoal/SM +subgraph +subgraphs +subgroup/SGM +subharmonic/S +subheading/M +subhead/MGJS +subhuman/S +subindex/M +subinterval/MS +subj +subject/GVDMS +subjection/SM +subjectiveness/M +subjective/PSY +subjectivist/S +subjectivity/SM +subjoin/DSG +subjugate/NGXSD +subjugation/M +subjunctive/S +sublayer +sublease/DSMG +sublet/S +subletting +sublimate/GNSDX +sublimation/M +sublime/GRSDTYP +sublimeness/M +sublimer/M +subliminal/Y +sublimity/SM +sublist/SM +subliterary +sublunary +submachine +submarginal +submarine/MZGSRD +submariner/M +submerge/DSG +submergence/SM +submerse/XNGDS +submersible/S +submersion/M +submicroscopic +submission/SAM +submissiveness/MS +submissive/PY +submit/SA +submittable +submittal +submitted/A +submitter/S +submitting/A +submode/S +submodule/MS +sub/MS +subnational +subnet/SM +subnetwork/SM +subnormal/SY +suboptimal +suborbital +suborder/MS +subordinately/I +subordinates/I +subordinate/YVNGXPSD +subordination/IMS +subordinator +subornation/SM +suborn/GSD +subpage +subparagraph/M +subpart/MS +subplot/MS +subpoena/GSDM +subpopulation/MS +subproblem/SM +subprocess/SM +subprofessional/S +subprogram/SM +subproject +subproof/SM +subquestion/MS +subrange/SM +subregional/Y +subregion/MS +subrogation/M +subroutine/SM +subsample/MS +subschema/MS +subscribe/ASDG +subscriber/SM +subscripted/U +subscription/MS +subscript/SGD +subsection/SM +subsegment/SM +subsentence +subsequence/MS +subsequent/SYP +subservience/SM +subservient/SY +subset/MS +subsidence/MS +subside/SDG +subsidiarity +subsidiary/MS +subsidization/MS +subsidized/U +subsidizer/M +subsidize/ZRSDG +subsidy/MS +subsistence/MS +subsistent +subsist/SGD +subsocietal +subsoil/DRMSG +subsonic +subspace/MS +subspecies/M +substance/MS +substandard +substantially/IU +substantialness/M +substantial/PYS +substantiated/U +substantiate/VGNSDX +substantiation/MFS +substantiveness/M +substantive/PSYM +substantivity +substation/MS +substerilization +substitutability +substituted/U +substitute/NGVBXDRS +substitutionary +substitution/M +substitutive/Y +substrata +substrate/MS +substratum/M +substring/S +substructure/SM +subsume/SDG +subsurface/S +subsystem/MS +subtable/S +subtask/SM +subteen/SM +subtenancy/MS +subtenant/SM +subtend/DS +subterfuge/SM +subterranean/SY +subtest +subtext/SM +subtitle/DSMG +subtleness/M +subtle/RPT +subtlety/MS +subtly/U +subtopic/SM +subtotal/GSDM +subtracter/M +subtraction/MS +subtract/SRDZVG +subtrahend/SM +subtree/SM +subtropical +subtropic/S +subtype/MS +subunit/SM +suburbanite/MS +suburbanization/MS +suburbanized +suburbanizing +suburban/S +suburbia/SM +suburb/MS +subvention/MS +subversion/SM +subversiveness/MS +subversive/SPY +subverter/M +subvert/SGDR +subway/MDGS +subzero +succeeder/M +succeed/GDRS +successfulness/M +successful/UY +succession/SM +successiveness/M +successive/YP +success/MSV +successor/MS +successorship +succinctness/SM +succinct/RYPT +succored/U +succorer/M +succor/SGZRDM +succotash/SM +succubus/M +succulence/SM +succulency/MS +succulent/S +succumb/SDG +such +suchlike +sucker/DMG +suck/GZSDRB +suckle/SDJG +suckling/M +Sucre/M +sucrose/MS +suction/SMGD +Sudanese/M +Sudanic/M +Sudan/M +suddenness/SM +sudden/YPS +Sudetenland/M +sud/S +suds/DSRG +sudsy/TR +sued/DG +suede/SM +Suellen/M +Sue/M +suer/M +suet/MS +Suetonius/M +suety +sue/ZGDRS +Suez/M +sufferance/SM +sufferer/M +suffering/M +suffer/SJRDGZ +suffice/GRSD +sufficiency/SIM +sufficient/IY +suffixation/S +suffixed/U +suffix/GMRSD +suffocate/XSDVGN +suffocating/Y +Suffolk/M +suffragan/S +suffrage/MS +suffragette/MS +suffragist/SM +suffuse/VNGSDX +suffusion/M +Sufi/M +Sufism/M +sugarcane/S +sugarcoat/GDS +sugarless +sugarplum/MS +sugar/SJGMD +sugary/TR +suggest/DRZGVS +suggester/M +suggestibility/SM +suggestible +suggestion/MS +suggestiveness/MS +suggestive/PY +sugillate +Suharto/M +suicidal/Y +suicide/GSDM +Sui/M +suitability/SU +suitableness/S +suitable/P +suitably/U +suitcase/MS +suited/U +suite/SM +suiting/M +suit/MDGZBJS +suitor/SM +Sukarno/M +Sukey/M +Suki/M +sukiyaki/SM +Sukkoth's +Sukkot/S +Sula/M +Sulawesi/M +Suleiman/M +sulfaquinoxaline +sulfa/S +sulfate/MSDG +sulfide/S +sulfite/M +sulfonamide/SM +sulfur/DMSG +sulfuric +sulfurousness/M +sulfurous/YP +sulk/GDS +sulkily +sulkiness/S +sulky/RSPT +Sulla/M +sullenness/MS +sullen/TYRP +sullied/U +Sullivan/M +sully/GSD +Sully/M +sulphate/SM +sulphide/MS +sulphuric +sultana/SM +sultanate/MS +sultan/SM +sultrily +sultriness/SM +sultry/PRT +Sulzberger/M +sumach's +sumac/SM +Sumatra/M +Sumatran/S +sumer/F +Sumeria/M +Sumerian/M +summability/M +summable +summand/MS +summarily +summarization/MS +summarized/U +summarize/GSRDZ +summarizer/M +summary/MS +summation/FMS +summed +Summerdale/M +summerhouse/MS +summer/SGDM +Summer/SM +summertime/MS +summery/TR +summing +summit/GMDS +summitry/MS +summoner/M +summon/JSRDGZ +summons/MSDG +sum/MRS +Sumner/M +sumo/SM +sump/SM +sumptuousness/SM +sumptuous/PY +Sumter/M +Sun +sunbaked +sunbathe +sunbather/M +sunbathing/M +sunbaths +sunbath/ZRSDG +sunbeam/MS +Sunbelt/M +sunblock/S +sunbonnet/MS +sunburn/GSMD +sunburst/MS +suncream +sundae/MS +Sundanese/M +Sundas +Sunday/MS +sunder/SDG +sundial/MS +sundowner/M +sundown/MRDSZG +sundris +sundry/S +sunfish/SM +sunflower/MS +sunglass/MS +Sung/M +sung/U +sunk/SN +sunlamp/S +sunless +sunlight/MS +sunlit +sun/MS +sunned +Sunni/MS +sunniness/SM +sunning +Sunnite/SM +Sunny/M +sunny/RSTP +Sunnyvale/M +sunrise/GMS +sunroof/S +sunscreen/S +sunset/MS +sunsetting +sunshade/MS +Sunshine/M +sunshine/MS +sunshiny +sunspot/SM +sunstroke/MS +suntanned +suntanning +suntan/SM +sunup/MS +superabundance/MS +superabundant +superannuate/GNXSD +superannuation/M +superbness/M +superb/YRPT +supercargoes +supercargo/M +supercharger/M +supercharge/SRDZG +superciliousness/SM +supercilious/PY +supercity/S +superclass/M +supercomputer/MS +supercomputing +superconcept +superconducting +superconductivity/SM +superconductor/SM +supercooled +supercooling +supercritical +superdense +super/DG +superego/SM +supererogation/MS +supererogatory +superficiality/S +superficial/SPY +superfine +superfix/M +superfluity/MS +superfluousness/S +superfluous/YP +superheat/D +superheroes +superhero/SM +superhighway/MS +superhumanness/M +superhuman/YP +superimpose/SDG +superimposition/MS +superintendence/S +superintendency/SM +superintendent/SM +superintend/GSD +superiority/MS +Superior/M +superior/SMY +superlativeness/M +superlative/PYS +superlunary +supermachine +superman/M +Superman/M +supermarket/SM +supermen +supermodel +supermom/S +supernal +supernatant +supernaturalism/M +supernaturalness/M +supernatural/SPY +supernormal/Y +supernovae +supernova/MS +supernumerary/S +superordinate +superpose/BSDG +superposition/MS +superpower/MS +superpredicate +supersaturate/XNGDS +supersaturation/M +superscribe/GSD +superscript/DGS +superscription/SM +superseder/M +supersede/SRDG +supersensitiveness/M +supersensitive/P +superset/MS +supersonically +supersonic/S +supersonics/M +superstar/SM +superstition/SM +superstitious/YP +superstore/S +superstructural +superstructure/SM +supertanker/SM +supertitle/MSDG +superuser/MS +supervene/GSD +supervention/S +supervised/U +supervise/SDGNX +supervision/M +supervisor/SM +supervisory +superwoman/M +superwomen +supineness/M +supine/PSY +supper/DMG +supplanter/M +supplant/SGRD +supplemental/S +supplementary/S +supplementation/S +supplementer/M +supplement/SMDRG +suppleness/SM +supple/SPLY +suppliant/S +supplicant/MS +supplicate/NGXSD +supplication/M +supplier/AM +suppl/RDGT +supply/MAZGSRD +supportability/M +supportable/UI +supported/U +supporter/M +supporting/Y +supportive/Y +support/ZGVSBDR +supposed/Y +suppose/SRDBJG +supposition/MS +suppository/MS +suppressant/S +suppressed/U +suppressible/I +suppression/SM +suppressive/P +suppressor/S +suppress/VGSD +suppurate/NGXSD +suppuration/M +supp/YDRGZ +supra +supranational +supranationalism/M +suprasegmental +supremacist/SM +supremacy/SM +supremal +supremeness/M +supreme/PSRTY +supremo/M +sup/RSZ +supt +Supt/M +Surabaya/M +Surat/M +surcease/DSMG +surcharge/MGSD +surcingle/MGSD +surd/M +sured/I +surefire +surefooted +surely +sureness/MS +sureness's/U +sure/PU +surer/I +surest +surety/SM +surfaced/UA +surface/GSRDPZM +surfacer/AMS +surfaces/A +surfacing/A +surfactant/SM +surfboard/MDSG +surfeit/SDRMG +surfer/M +surfing/M +surf/SJDRGMZ +surged/A +surge/GYMDS +surgeon/MS +surgery/MS +surges/A +surgical/Y +Suriname +Surinamese +Surinam's +surliness/SM +surly/TPR +surmiser/M +surmise/SRDG +surmountable/IU +surmount/DBSG +surname/GSDM +surpassed/U +surpass/GDS +surpassing/Y +surplice/SM +surplus/MS +surplussed +surplussing +surprised/U +surprise/MGDRSJ +surpriser/M +surprising/YU +surrealism/MS +surrealistic +surrealistically +surrealist/S +surreality +surreal/S +surrender/DRSG +surrenderer/M +surreptitiousness/S +surreptitious/PY +surrey/SM +surrogacy/S +surrogate/SDMNG +surrogation/M +surrounding/M +surround/JGSD +surtax/SDGM +surveillance/SM +surveillant +surveyed/A +surveying/M +survey/JDSG +surveyor/MS +surveys/A +survivability/M +survivable/U +survivalist/S +survival/MS +survive/SRDBG +survivor/MS +survivorship/M +Surya/M +Sus +Susana/M +Susanetta/M +Susan/M +Susannah/M +Susanna/M +Susanne/M +Susann/M +susceptibilities +susceptibility/IM +susceptible/I +Susette/M +sushi/SM +Susie/M +Susi/M +suspected/U +suspecter/M +suspect/GSDR +suspecting/U +suspend/DRZGS +suspended/UA +suspender/M +suspenseful +suspense/MXNVS +suspension/AM +suspensive/Y +suspensor/M +suspicion/GSMD +suspiciousness/M +suspicious/YP +Susquehanna/M +Sussex/M +sustainability +sustainable/U +sustain/DRGLBS +sustainer/M +sustainment/M +sustenance/MS +Susy/M +Sutherland/M +Sutherlan/M +sutler/MS +Sutton/M +suture/GMSD +SUV +Suva/M +Suwanee/M +Suzanna/M +Suzanne/M +Suzann/M +suzerain/SM +suzerainty/MS +Suzette/M +Suzhou/M +Suzie/M +Suzi/M +Suzuki/M +Suzy/M +Svalbard/M +svelte/RPTY +Svend/M +Svengali +Sven/M +Sverdlovsk/M +Svetlana/M +SW +swabbed +swabbing +swabby/S +Swabian/SM +swab/MS +swaddle/SDG +swagged +swagger/GSDR +swagging +swag/GMS +Swahili/MS +swain/SM +SWAK +swallower/M +swallow/GDRS +swallowtail/SM +swam +swami/SM +swamper/M +swampland/MS +swamp/SRDMG +swampy/RPT +Swanee/M +swankily +swankiness/MS +swank/RDSGT +swanky/PTRS +swanlike +swan/MS +swanned +swanning +Swansea/M +Swanson/M +swappable/U +swapped +swapper/SM +swapping +swap/S +sward/MSGD +swarmer/M +swarm/GSRDM +swarthiness/M +Swarthmore/M +swarthy/RTP +swart/P +Swartz/M +swashbuckler/SM +swashbuckling/S +swash/GSRD +swastika/SM +SWAT +swatch/MS +swathe +swather/M +swaths +swath/SRDMGJ +swat/S +swatted +swatter/MDSG +swatting +swayback/SD +sway/DRGS +swayer/M +Swaziland/M +Swazi/SM +swearer/M +swear/SGZR +swearword/SM +sweatband/MS +sweater/M +sweatily +sweatiness/M +sweatpants +sweat/SGZRM +sweatshirt/S +sweatshop/MS +sweaty/TRP +Swedenborg/M +Sweden/M +swede/SM +Swede/SM +Swedish +Swed/MN +Sweeney/SM +sweeper/M +sweepingness/M +sweeping/PY +sweep/SBRJGZ +sweeps/M +sweepstakes +sweepstake's +sweetbread/SM +sweetbrier/SM +sweetcorn +sweetened/U +sweetener/M +sweetening/M +sweeten/ZDRGJ +sweetheart/MS +sweetie/MS +sweeting/M +sweetish/Y +Sweet/M +sweetmeat/MS +sweetness/MS +sweetshop +sweet/TXSYRNPG +swellhead/DS +swelling/M +swell/SJRDGT +swelter/DJGS +sweltering/Y +Swen/M +Swenson/M +swept +sweptback +swerve/GSD +swerving/U +swifter/M +swift/GTYRDPS +Swift/M +swiftness/MS +swigged +swigging +swig/SM +swill/SDG +swimmer/MS +swimming/MYS +swim/S +swimsuit/MS +Swinburne/M +swindle/GZRSD +swindler/M +swineherd/MS +swine/SM +swingeing +swinger/M +swinging/Y +swing/SGRZJB +swingy/R +swinishness/M +swinish/PY +Swink/M +swipe/DSG +swirling/Y +swirl/SGRD +swirly/TR +swish/GSRD +swishy/R +swiss +Swiss/S +switchback/GDMS +switchblade/SM +switchboard/MS +switcher/M +switch/GBZMRSDJ +switchgear +switchman/M +switchmen/M +switchover/M +Switzerland/M +Switzer/M +Switz/MR +swivel/GMDS +swizzle/RDGM +swob's +swollen +swoon/GSRD +swooning/Y +swoop/RDSG +swoosh/GSD +swop's +sword/DMSG +swordfish/SM +swordplayer/M +swordplay/RMS +swordsman/M +swordsmanship/SM +swordsmen +swordtail/M +swore +sworn +swot/S +swum +swung +s/XJBG +sybarite/MS +sybaritic +Sybila/M +Sybilla/M +Sybille/M +Sybil/M +Sybyl/M +sycamore/SM +sycophancy/S +sycophantic +sycophantically +sycophant/SYM +Sydelle/M +Sydel/M +Syd/M +Sydney/M +Sykes/M +Sylas/M +syllabicate/GNDSX +syllabication/M +syllabicity +syllabic/S +syllabification/M +syllabify/GSDXN +syllabi's +syllable/SDMG +syllabub/M +syllabus/MS +syllabusss +syllogism/MS +syllogistic +Sylow/M +sylphic +sylphlike +sylph/M +sylphs +Sylvania/M +Sylvan/M +sylvan/S +Sylvester/M +Sylvia/M +Sylvie/M +Syman/M +symbiont/M +symbioses +symbiosis/M +symbiotic +symbol/GMDS +symbolical/Y +symbolics/M +symbolic/SM +symbolism/MS +symbolist/MS +symbolization/MAS +symbolized/U +symbolize/GZRSD +symbolizes/A +Symington/M +symmetric +symmetrically/U +symmetricalness/M +symmetrical/PY +symmetrization/M +symmetrizing +symmetry/MS +Symon/M +sympathetically/U +sympathetic/S +sympathized/U +sympathizer/M +sympathize/SRDJGZ +sympathizing/MYUS +sympathy/MS +symphonic +symphonists +symphony/MS +symposium/MS +symptomatic +symptomatically +symptomatology/M +symptom/MS +syn +synagogal +synagogue/SM +synapse/SDGM +synaptic +synchronism/M +synchronization's +synchronization/SA +synchronize/AGCDS +synchronized/U +synchronizer/MS +synchronousness/M +synchronous/YP +synchrony +synchrotron/M +syncopate/VNGXSD +syncopation/M +syncope/MS +sync/SGD +syndicalist +syndicate/XSDGNM +syndic/SM +syndrome/SM +synergism/SM +synergistic +synergy/MS +synfuel/S +Synge/M +synod/SM +synonymic +synonymous/Y +synonym/SM +synonymy/MS +synopses +synopsis/M +synopsized +synopsizes +synopsizing +synoptic/S +syntactical/Y +syntactics/M +syntactic/SY +syntax/MS +syntheses +synthesis/M +synthesized/U +synthesize/GZSRD +synthesizer/M +synthesizes/A +synthetically +synthetic/S +syphilis/MS +syphilitic/S +syphilized +syphilizing +Syracuse/M +Syriac/M +Syria/M +Syrian/SM +syringe/GMSD +syrup/DMSG +syrupy +sys +systematical/Y +systematics/M +systematic/SP +systematization/SM +systematized/U +systematizer/M +systematize/ZDRSG +systematizing/U +systemically +systemic/S +systemization/SM +system/MS +systole/MS +systolic +Szilard/M +Szymborska/M +TA +Tabasco/MS +Tabatha/M +Tabbatha/M +tabbed +Tabbie/M +Tabbi/M +tabbing +Tabbitha/M +Tabb/M +tabbouleh +tabboulehs +tabby/GSD +Tabby/M +Taber/M +Tabernacle/S +tabernacle/SDGM +Tabina/M +Tabitha/M +tabla/MS +tableau/M +tableaux +tablecloth/M +tablecloths +table/GMSD +tableland/SM +tablespoonful/MS +tablespoon/SM +tablet/MDGS +tabletop/MS +tableware/SM +tabling/M +tabloid/MS +Tab/MR +taboo/GSMD +Tabor/M +tabor/MDGS +Tabriz/SM +tab/SM +tabula +tabular/Y +tabulate/XNGDS +tabulation/M +tabulator/MS +tachometer/SM +tachometry +tachycardia/MS +tachyon/SM +tacitness/MS +taciturnity/MS +taciturn/Y +Tacitus/M +tacit/YP +tacker/M +tack/GZRDMS +tackiness/MS +tackler/M +tackle/RSDMZG +tackling/M +tacky/RSTP +Tacoma/M +taco/MS +tact/FSM +tactfulness/S +tactful/YP +tactical/Y +tactician/MS +tactic/SM +tactile/Y +tactility/S +tactlessness/SM +tactless/PY +tactual/Y +Taddeo/M +Taddeusz/M +Tadd/M +Tadeas/M +Tadeo/M +Tades +Tadio/M +Tad/M +tadpole/MS +tad/SM +Tadzhikistan's +Tadzhikstan/M +Taegu/M +Taejon/M +taffeta/MS +taffrail/SM +Taffy/M +taffy/SM +Taft/M +Tagalog/SM +tagged/U +tagger/S +tagging +Tagore/M +tag/SM +Tagus/M +Tahitian/S +Tahiti/M +Tahoe/M +Taichung/M +taiga/MS +tailback/MS +tail/CMRDGAS +tailcoat/S +tailer/AM +tailgate/MGRSD +tailgater/M +tailing/MS +taillessness/M +tailless/P +taillight/MS +tailor/DMJSGB +Tailor/M +tailpipe/SM +tailspin/MS +tailwind/SM +Tainan/M +Taine/M +taint/DGS +tainted/U +Taipei/M +Taite/M +Tait/M +Taiwanese +Taiwan/M +Taiyuan/M +Tajikistan +takeaway/S +taken/A +takeoff/SM +takeout/S +takeover/SM +taker/M +take/RSHZGJ +takes/IA +taking/IA +Taklamakan/M +Talbert/M +Talbot/M +talcked +talcking +talc/SM +talcum/S +talebearer/SM +talented/M +talentless +talent/SMD +taler/M +tale/RSMN +tali +Talia/M +Taliesin/M +talion/M +talismanic +talisman/SM +talkativeness/MS +talkative/YP +talker/M +talk/GZSRD +talkie/M +talky/RST +Talladega/M +Tallahassee/M +Tallahatchie/M +Tallahoosa/M +tallboy/MS +Tallchief/M +Talley/M +Talleyrand/M +Tallia/M +Tallie/M +Tallinn/M +tallish +tallness/MS +Tallou/M +tallow/DMSG +tallowy +tall/TPR +Tallulah/M +tally/GRSDZ +tallyho/DMSG +Tally/M +Talmudic +Talmudist/MS +Talmud/MS +talon/SMD +talus/MS +Talyah/M +Talya/M +Ta/M +tamable/M +tamale/SM +tamarack/SM +Tamarah/M +Tamara/M +tamarind/MS +Tamar/M +Tamarra/M +Tamas +tambourine/MS +tamed/U +Tameka/M +tameness/S +Tamera/M +Tamerlane/M +tame/SYP +Tamika/M +Tamiko/M +Tamil/MS +Tami/M +Tam/M +Tamma/M +Tammany/M +Tammara/M +tam/MDRSTZGB +Tammie/M +Tammi/M +Tammy/M +Tampa/M +Tampax/M +tampered/U +tamperer/M +tamper/ZGRD +tampon/DMSG +tamp/SGZRD +Tamqrah/M +Tamra/M +tanager/MS +Tanaka/M +Tana/M +Tananarive/M +tanbark/SM +Tancred/M +tandem/SM +Tandie/M +Tandi/M +tandoori/S +Tandy/M +Taney/M +T'ang +Tanganyika/M +tangelo/SM +tangency/M +tangential/Y +tangent/SM +tangerine/MS +tang/GSYDM +tangibility/MIS +tangible/IPS +tangibleness's/I +tangibleness/SM +tangibly/I +Tangier/M +tangle's +tangle/UDSG +tango/MDSG +Tangshan/M +tangy/RST +Tanhya/M +Tania/M +Tani/M +Tanisha/M +Tanitansy/M +tankard/MS +tanker/M +tankful/MS +tank/GZSRDM +Tan/M +tan/MS +tanned/U +Tannenbaum/M +Tanner/M +tanner/SM +tannery/MS +tannest +Tanney/M +Tannhuser/M +Tannie/M +tanning/SM +tannin/SM +Tann/RM +Tanny/M +Tansy/M +tansy/SM +tantalization/SM +tantalized/U +tantalize/GZSRD +tantalizingly/S +tantalizingness/S +tantalizing/YP +tantalum/MS +Tantalus/M +tantamount +tantra/S +tantrum/SM +Tanya/M +Tanzania/M +Tanzanian/S +taoism +Taoism/MS +Taoist/MS +taoist/S +Tao/M +tao/S +Tapdance/M +taped/U +tapeline/S +taperer/M +taper/GRD +tape/SM +tapestry/GMSD +tapeworm/MS +tapioca/MS +tapir/MS +tap/MSDRJZG +tapped/U +tapper/MS +tappet/MS +tapping/M +taproom/MS +taproot/SM +taps/M +Tarah/M +Tara/M +tarantella/MS +tarantula/MS +Tarawa/M +Tarazed/M +Tarbell/M +tardily +tardiness/S +tardy/TPRS +tare/MS +target/GSMD +tar/GSMD +tariff/DMSG +Tarim/M +Tarkington/M +tarmacked +tarmacking +tarmac/S +tarnished/U +tarnish/GDS +tarn/MS +taro/MS +tarot/MS +tarpapered +tarpaulin/MS +tarp/MS +tarpon/MS +tarragon/SM +Tarrah/M +Tarra/M +Tarrance/M +tarred/M +tarring/M +tarry/TGRSD +Tarrytown/M +tarsal/S +tarsi +tarsus/M +tartan/MS +tartaric +Tartar's +tartar/SM +Tartary/M +tartness/MS +tart/PMYRDGTS +Tartuffe/M +Taryn/M +Tarzan/M +Tasha/M +Tashkent/M +Tasia/M +task/GSDM +taskmaster/SM +taskmistress/MS +Tasmania/M +Tasmanian/S +tassellings +tassel/MDGS +Tass/M +tasted/EU +tastefulness/SME +tasteful/PEY +taste/GZMJSRD +tastelessness/SM +tasteless/YP +taster/M +taste's/E +tastes/E +tastily +tastiness/MS +tasting/E +tasty/RTP +tatami/MS +Tatar/SM +Tate/M +tater/M +Tatiana/M +Tatiania/M +tat/SRZ +tatted +tatterdemalion/SM +tattered/M +tatter/GDS +tatting/SM +tattler/M +tattle/RSDZG +tattletale/SM +tattooer/M +tattooist/MS +tattoo/ZRDMGS +tatty/R +Tatum/M +taught/AU +taunter/M +taunting/Y +taunt/ZGRDS +taupe/SM +Taurus/SM +tau/SM +tauten/GD +tautness/S +tautological/Y +tautologous +tautology/SM +taut/PGTXYRDNS +taverner/M +tavern/RMS +tawdrily +tawdriness/SM +tawdry/SRTP +Tawney/M +Tawnya/M +tawny/RSMPT +Tawsha/M +taxable/S +taxably +taxation/MS +taxed/U +taxicab/MS +taxidermist/SM +taxidermy/MS +taxi/MDGS +taximeter/SM +taxing/Y +taxiway/MS +taxonomic +taxonomically +taxonomist/SM +taxonomy/SM +taxpayer/MS +taxpaying/M +tax/ZGJMDRSB +Taylor/SM +Tb +TB +TBA +Tbilisi/M +tbs +tbsp +Tchaikovsky/M +Tc/M +TCP +TD +TDD +Te +teabag/S +teacake/MS +teacart/M +teachable/P +teach/AGS +teacher/MS +teaching/SM +teacloth +teacupful/MS +teacup/MS +Teador/M +teahouse/SM +teakettle/SM +teak/SM +teakwood/M +tealeaves +teal/MS +tea/MDGS +teammate/MS +team/MRDGS +teamster/MS +teamwork/SM +teapot/MS +tearaway +teardrop/MS +tearer/M +tearfulness/M +tearful/YP +teargas/S +teargassed +teargassing +tearjerker/S +tearoom/MS +tear/RDMSG +teary/RT +Teasdale/M +tease/KS +teasel/DGSM +teaser/M +teashop/SM +teasing/Y +teaspoonful/MS +teaspoon/MS +teas/SRDGZ +teatime/MS +teat/MDS +tech/D +technetium/SM +technicality/MS +technicalness/M +technical/YSP +technician/MS +Technicolor/MS +Technion/M +technique/SM +technocracy/MS +technocratic +technocrat/S +technological/Y +technologist/MS +technology/MS +technophobia +technophobic +techs +tectonically +tectonic/S +tectonics/M +Tecumseh/M +Tedda/M +Teddie/M +Teddi/M +Tedd/M +Teddy/M +teddy/SM +Tedie/M +Tedi/M +tediousness/SM +tedious/YP +tedium/MS +Ted/M +Tedman/M +Tedmund/M +Tedra/M +tee/DRSMH +teeing +teem/GSD +teemingness/M +teeming/PY +teenager/M +teenage/RZ +Teena/M +teen/SR +teenybopper/SM +teeny/RT +teepee's +teeshirt/S +teeter/GDS +teethe +teether/M +teething/M +teethmarks +teeth/RSDJMG +teetotaler/M +teetotalism/MS +teetotal/SRDGZ +TEFL +Teflon/MS +Tegucigalpa/M +Teheran's +Tehran +TEirtza/M +tektite/SM +Tektronix/M +telecast/SRGZ +telecommunicate/NX +telecommunication/M +telecommute/SRDZGJ +telecoms +teleconference/GMJSD +Teledyne/M +Telefunken/M +telegenic +telegrammed +telegramming +telegram/MS +telegraphic +telegraphically +telegraphist/MS +telegraph/MRDGZ +telegraphs +telegraphy/MS +telekineses +telekinesis/M +telekinetic +Telemachus/M +Telemann/M +telemarketer/S +telemarketing/S +telemeter/DMSG +telemetric +telemetry/MS +teleological/Y +teleology/M +telepathic +telepathically +telepathy/SM +telephone/SRDGMZ +telephonic +telephonist/SM +telephony/MS +telephotography/MS +telephoto/S +teleprinter/MS +teleprocessing/S +teleprompter +TelePrompter/M +TelePrompTer/S +telescope/GSDM +telescopic +telescopically +teletext/S +telethon/MS +teletype/SM +Teletype/SM +teletypewriter/SM +televangelism/S +televangelist/S +televise/SDXNG +television/M +televisor/MS +televisual +telex/GSDM +Telex/M +tell/AGS +Teller/M +teller/SDMG +telling/YS +Tell/MR +telltale/MS +tellurium/SM +telly/SM +Telnet/M +TELNET/M +telnet/S +telomeric +tel/SY +Telugu/M +temblor/SM +temerity/MS +Tempe/M +temperamental/Y +temperament/SM +temperance/IMS +tempera/SLM +temperately/I +temperateness's/I +temperateness/SM +temperate/SDGPY +temperature/MS +tempered/UE +temper/GRDM +tempering/E +temper's/E +tempers/E +tempest/DMSG +tempestuousness/SM +tempestuous/PY +template/FS +template's +Temple/M +Templeman/M +temple/SDM +Templeton/M +Temp/M +tempoes +tempo/MS +temporal/YS +temporarily +temporarinesses +temporariness/FM +temporary/SFP +temporize/GJZRSD +temporizer/M +temporizings/U +temporizing/YM +temp/SGZTMRD +temptation/MS +tempted +tempter/S +tempt/FS +tempting/YS +temptress/MS +tempura/SM +tenabilities +tenability/UM +tenableness/M +tenable/P +tenably +tenaciousness/S +tenacious/YP +tenacity/S +tenancy/MS +tenanted/U +tenant/MDSG +tenantry/MS +tench/M +tended/UE +tendency/MS +tendentiousness/SM +tendentious/PY +tendered +tenderer +tenderest +tenderfoot/MS +tender/FS +tenderheartedness/MS +tenderhearted/YP +tendering +tenderizer/M +tenderize/SRDGZ +tenderloin/SM +tenderly +tenderness/SM +tending/E +tendinitis/S +tend/ISFRDG +tendon/MS +tendril/SM +tends/E +tenebrous +tenement/MS +tenet/SM +Tenex/M +TENEX/M +tenfold/S +ten/MHB +Tenneco/M +tenner +Tennessean/S +Tennessee/M +Tenney/M +tennis/SM +Tenn/M +Tennyson/M +Tenochtitlan/M +tenon/GSMD +tenor/MS +tenpin/SM +tense/IPYTNVR +tenseness's/I +tenseness/SM +tensile +tensional/I +tension/GMRDS +tensionless +tensions/E +tension's/I +tensity/IMS +tensorial +tensor/MS +tenspot +tens/SRDVGT +tentacle/MSD +tentativeness/S +tentative/SPY +tented/UF +tenterhook/MS +tenter/M +tent/FSIM +tenths +tenth/SY +tenting/F +tenuity/S +tenuousness/SM +tenuous/YP +tenure/SDM +Teodoor/M +Teodora/M +Teodorico/M +Teodor/M +Teodoro/M +tepee/MS +tepidity/S +tepidness/S +tepid/YP +tequila/SM +Tera/M +teratogenic +teratology/MS +terbium/SM +tercel/M +tercentenary/S +tercentennial/S +Terence/M +Terencio/M +Teresa/M +Terese/M +Tereshkova/M +Teresina/M +Teresita/M +Teressa/M +Teriann/M +Teri/M +Terkel/M +termagant/SM +termcap +termer/M +terminable/CPI +terminableness/IMC +terminal/SYM +terminate/CXNV +terminated/U +terminates +terminating +termination/MC +terminative/YC +terminator/SM +termini +terminological/Y +terminology/MS +terminus/M +termite/SM +term/MYRDGS +ternary/S +tern/GIDS +tern's +terpsichorean +Terpsichore/M +terrace/MGSD +terracing/M +terracotta +terrain/MS +Terra/M +terramycin +Terrance/M +Terran/M +terrapin/MS +terrarium/MS +terrazzo/SM +Terrell/M +Terrel/M +Terre/M +Terrence/M +terrestrial/YMS +terribleness/SM +terrible/P +terribly +Terrie/M +terrier/M +terrifically +terrific/Y +terrify/GDS +terrifying/Y +Terrijo/M +Terrill/M +Terri/M +terrine/M +territoriality/M +Territorial/SM +territorial/SY +Territory's +territory/SM +terrorism/MS +terroristic +terrorist/MS +terrorized/U +terrorizer/M +terrorize/RSDZG +terror/MS +terr/S +terrycloth +Terrye/M +Terry/M +terry/ZMRS +terseness/SM +terse/RTYP +Tersina/M +tertian +Tertiary +tertiary/S +Terza/M +TESL +Tesla/M +TESOL +Tessa/M +tessellate/XDSNG +tessellation/M +tesseral +Tessie/M +Tessi/M +Tess/M +Tessy/M +testability/M +testable/U +testamentary +testament/SM +testate/IS +testator/MS +testatrices +testatrix +testbed/S +testcard +tested/AKU +tester/MFCKS +testes/M +testicle/SM +testicular +testifier/M +testify/GZDRS +testily +testimonial/SM +testimony/SM +testiness/S +testing/S +testis/M +testosterone/SM +test/RDBFZGSC +tests/AK +test's/AKF +testy/RTP +tetanus/MS +tetchy/TR +tether/DMSG +tethered/U +Tethys/M +Tetons +tetrachloride/M +tetracycline/SM +tetrafluoride +tetragonal/Y +tetrahalides +tetrahedral/Y +tetrahedron/SM +tetrameron +tetrameter/SM +tetra/MS +tetrasodium +tetravalent +Teutonic +Teuton/SM +Texaco/M +Texan/S +Texas/MS +Tex/M +TeX/M +textbook/SM +text/FSM +textile/SM +Textron/M +textual/FY +textural/Y +textured/U +texture/MGSD +T/G +Thacher/M +Thackeray/M +Thaddeus/M +Thaddus/M +Thadeus/M +Thad/M +Thailand/M +Thaine/M +Thain/M +Thai/S +thalami +thalamus/M +Thales/M +Thalia/M +thalidomide/MS +thallium/SM +thallophyte/M +Thames +than +Thane/M +thane/SM +Thanh/M +thanker/M +thankfuller +thankfullest +thankfulness/SM +thankful/YP +thanklessness/SM +thankless/PY +thanksgiving/MS +Thanksgiving/S +thank/SRDG +Thant/M +Thar/M +Thatcher/M +thatching/M +thatch/JMDRSZG +Thatch/MR +that'd +that'll +that/MS +thaumaturge/M +thaw/DGS +Thaxter/M +Thayer/M +Thayne/M +THC +the +Theadora/M +Thea/M +theatergoer/MS +theatergoing/MS +theater/SM +theatricality/SM +theatrical/YS +theatric/S +theatrics/M +Thebault/M +Thebes +Theda/M +Thedrick/M +Thedric/M +thee/DS +theeing +theft/MS +Theiler/M +their/MS +theism/SM +theistic +theist/SM +Thekla/M +Thelma/M +themas +thematically +thematics +thematic/U +theme/MS +them/GD +Themistocles/M +themselves +thence +thenceforth +thenceforward/S +Theobald/M +theocracy/SM +theocratic +Theocritus/M +theodolite/MS +Theodora/M +Theodore/M +Theodoric/M +Theodor/M +Theodosia/M +Theodosian +Theodosius/M +theologian/SM +theological/Y +theologists +theology/MS +Theo/M +theorem/MS +theoretical/Y +theoretician/MS +theoretic/S +theoretics/M +theorist/SM +theorization/SM +theorize/ZGDRS +theory/MS +theosophic +theosophical +theosophist/MS +Theosophy +theosophy/SM +therapeutically +therapeutic/S +therapeutics/M +therapist/MS +therapy/MS +Theravada/M +thereabout/S +thereafter +thereat +thereby +there'd +therefor +therefore +therefrom +therein +there'll +there/MS +thereof +thereon +Theresa/M +Therese/M +Theresina/M +Theresita/M +Theressa/M +thereto +theretofore +thereunder +thereunto +thereupon +therewith +Therine/M +thermal/YS +thermionic/S +thermionics/M +thermistor/MS +therm/MS +thermocouple/MS +thermodynamical/Y +thermodynamic/S +thermodynamics/M +thermoelastic +thermoelectric +thermoformed +thermoforming +thermogravimetric +thermoluminescence/M +thermometer/MS +thermometric +thermometry/M +thermonuclear +thermopile/M +thermoplastic/S +thermopower +thermo/S +thermosetting +thermos/S +Thermos/SM +thermostable +thermostatically +thermostatic/S +thermostatics/M +thermostat/SM +thermostatted +thermostatting +Theron/M +thesauri +thesaurus/MS +these/S +Theseus/M +thesis/M +thespian/S +Thespian/S +Thespis/M +Thessalonian +Thessalonki/M +Thessaly/M +theta/MS +thew/SM +they +they'd +they'll +they're +they've +th/GNJX +Thia/M +thiamine/MS +Thibaud/M +Thibaut/M +thickener/M +thickening/M +thicken/RDJZG +thicket/SMD +thickheaded/M +thickish +thickness/MS +thickset/S +thick/TXPSRNY +thief/M +Thiensville/M +Thieu/M +thievery/MS +thieve/SDJG +thievishness/M +thievish/P +thighbone/SM +thigh/DM +thighs +thimble/DSMG +thimbleful/MS +Thimbu/M +Thimphu +thine +thingamabob/MS +thingamajig/SM +thing/MP +thinkableness/M +thinkable/U +thinkably/U +think/AGRS +thinker/MS +thinkingly/U +thinking/SMYP +thinned +thinner/MS +thinness/MS +thinnest +thinning +thinnish +thin/STPYR +thiocyanate/M +thiouracil/M +third/DYGS +thirster/M +thirst/GSMDR +thirstily +thirstiness/S +thirsty/TPR +thirteen/MHS +thirteenths +thirtieths +thirty/HMS +this +this'll +thistledown/MS +thistle/SM +thither +Th/M +tho +thole/GMSD +Thomasa/M +Thomasina/M +Thomasine/M +Thomasin/M +Thoma/SM +Thomism/M +Thomistic +Thom/M +Thompson/M +Thomson/M +thong/SMD +thoracic +thorax/MS +Thorazine +Thoreau/M +thoriate/D +Thorin/M +thorium/MS +Thor/M +Thornburg/M +Thorndike/M +Thornie/M +thorniness/S +Thorn/M +thorn/SMDG +Thornton/M +Thorny/M +thorny/PTR +thoroughbred/S +thoroughfare/MS +thoroughgoing +thoroughness/SM +thorough/PTYR +Thorpe/M +Thorstein/M +Thorsten/M +Thorvald/M +those +Thoth/M +thou/DSG +though +thoughtfully +thoughtfulness/S +thoughtful/U +thoughtlessness/MS +thoughtless/YP +thought/MS +thousandfold +thousand/SHM +thousandths +Thrace/M +Thracian/M +thralldom/S +thrall/GSMD +thrash/DSRZGJ +thrasher/M +thrashing/M +threadbare/P +threader/M +threading/A +threadlike +thread/MZDRGS +thready/RT +threatener/M +threaten/GJRD +threatening/Y +threat/MDNSXG +threefold +three/MS +threepence/M +threepenny +threescore/S +threesome/SM +threnody/SM +thresh/DSRZG +thresher/M +threshold/MDGS +threw +thrice +thriftily +thriftiness/S +thriftless +thrift/SM +thrifty/PTR +thriller/M +thrilling/Y +thrill/ZMGDRS +thriver/M +thrive/RSDJG +thriving/Y +throatily +throatiness/MS +throat/MDSG +throaty/PRT +throbbed +throbbing +throb/S +throeing +throe/SDM +thrombi +thromboses +thrombosis/M +thrombotic +thrombus/M +Throneberry/M +throne/CGSD +throne's +throng/GDSM +throttle/DRSZMG +throttler/M +throughout +throughput/SM +throughway's +through/Y +throwaway/SM +throwback/MS +thrower/M +thrown +throwout +throw/SZGR +thrummed +thrumming +thrum/S +thrush/MS +thruster/M +thrust/ZGSR +Thruway/MS +thruway/SM +Thunderbird/M +Thu +Thucydides/M +thudded +thudding +thud/MS +thuggee/M +thuggery/SM +thuggish +thug/MS +Thule/M +thulium/SM +thumbnail/MS +thumbscrew/SM +thumb/SMDG +thumbtack/GMDS +thump/RDMSG +thunderbolt/MS +thunderclap/SM +thundercloud/SM +thunderer/M +thunderhead/SM +thundering/Y +thunderous/Y +thundershower/MS +thunderstorm/MS +thunderstruck +thundery +thunder/ZGJDRMS +thunk +Thurber/M +Thurman/M +Thur/MS +Thursday/SM +Thurstan/M +Thurston/M +thus/Y +thwack/DRSZG +thwacker/M +thwarter/M +thwart/GSDRY +thy +thyme/SM +thymine/MS +thymus/SM +thyratron/M +thyristor/MS +thyroglobulin +thyroidal +thyroid/S +thyronine +thyrotoxic +thyrotrophic +thyrotrophin +thyrotropic +thyrotropin/M +thyroxine/M +thyself +Tia/M +Tianjin +tiara/MS +Tiberius/M +Tiber/M +Tibetan/S +Tibet/M +tibiae +tibial +tibia/M +Tibold/M +Tiburon/M +ticker/M +ticket/SGMD +tick/GZJRDMS +ticking/M +tickler/M +tickle/RSDZG +ticklishness/MS +ticklish/PY +ticktacktoe/S +ticktock/SMDG +tic/MS +Ticonderoga/M +tidal/Y +tidbit/MS +tiddlywinks/M +tide/GJDS +tideland/MS +tidewater/SM +tideway/SM +tidily/U +tidiness/USM +tidying/M +tidy/UGDSRPT +tie/AUDS +tieback/MS +Tiebold/M +Tiebout/M +tiebreaker/SM +Tieck/M +Tiena/M +Tienanmen/M +Tientsin's +tier/DGM +Tierney/M +Tiertza/M +Tiffanie/M +Tiffani/M +tiffany/M +Tiffany/M +tiff/GDMS +Tiffie/M +Tiffi/M +Tiff/M +Tiffy/M +tigerish +tiger/SM +tightener/M +tighten/JZGDR +tightfisted +tightness/MS +tightrope/SM +tight/STXPRNY +tightwad/MS +tigress/SM +Tigris/M +Tijuana/M +tike's +Tilda/M +tilde/MS +Tildie/M +Tildi/M +Tildy/M +tile/DRSJMZG +tiled/UE +Tiler/M +tiles/U +tiling/M +tillable +tillage/SM +till/EGSZDR +tiller/GDM +tiller's/E +Tillich/M +Tillie/M +Tillman/M +Tilly/M +tilth/M +tilt/RDSGZ +Ti/M +timber/DMSG +timbering/M +timberland/SM +timberline/S +timbrel/SM +timbre/MS +Timbuktu/M +ti/MDRZ +timebase +time/DRSJMYZG +timekeeper/MS +timekeeping/SM +timelessness/S +timeless/PY +timeliness/SMU +timely/UTRP +timeout/S +timepiece/MS +timer/M +timescale/S +timeserver/MS +timeserving/S +timeshare/SDG +timespan +timestamped +timestamps +timetable/GMSD +timeworn +Timex/M +timezone/S +timidity/SM +timidness/MS +timid/RYTP +Timi/M +timing/M +Timmie/M +Timmi/M +Tim/MS +Timmy/M +Timofei/M +Timon/M +timorousness/MS +timorous/YP +Timoteo/M +Timothea/M +Timothee/M +Timotheus/M +Timothy/M +timothy/MS +timpani +timpanist/S +Timur/M +Tina/M +tincture/SDMG +tinderbox/MS +tinder/MS +Tine/M +tine/SM +tinfoil/MS +tingeing +tinge/S +ting/GYDM +tingle/SDG +tingling/Y +tingly/TR +Ting/M +tinily +tininess/MS +tinker/SRDMZG +Tinkertoy +tinkle/SDG +tinkling/M +tinkly +tin/MDGS +tinned +tinner/M +tinnily +tinniness/SM +tinning/M +tinnitus/MS +tinny/RSTP +tinplate/S +tinsel/GMDYS +Tinseltown/M +tinsmith/M +tinsmiths +tinter/M +tintinnabulation/MS +Tintoretto/M +tint/SGMRDB +tintype/SM +tinware/MS +tiny/RPT +Tioga/M +Tiphanie/M +Tiphani/M +Tiphany/M +tipi's +tip/MS +tipoff +Tippecanoe/M +tipped +Tipperary/M +tipper/MS +tippet/MS +tipping +tippler/M +tipple/ZGRSD +tippy/R +tipsily +tipsiness/SM +tipster/SM +tipsy/TPR +tiptoeing +tiptoe/SD +tiptop/S +tirade/SM +Tirana's +Tirane +tired/AYP +tireder +tiredest +tiredness/S +tirelessness/SM +tireless/PY +tire/MGDSJ +tires/A +Tiresias/M +tiresomeness/S +tiresome/PY +tiring/AU +Tirolean/S +Tirol/M +tiro's +Tirrell/M +tis +Tisha/M +Tish/M +tissue/MGSD +titanate/M +Titania/M +titanic +titanically +Titanic/M +titanium/SM +titan/SM +Titan/SM +titbit's +titer/M +tither/M +tithe/SRDGZM +tithing/M +Titian/M +titian/S +Titicaca/M +titillate/XSDVNG +titillating/Y +titillation/M +titivate/NGDSX +titivation/M +titled/AU +title/GMSRD +titleholder/SM +titling/A +titmice +titmouse/M +tit/MRZS +Tito/SM +titrate/SDGN +titration/M +titted +titter/GDS +titting +tittle/SDMG +titular/SY +Titus/M +tizzy/SM +TKO +Tlaloc/M +TLC +Tlingit/M +Tl/M +TM +Tm/M +tn +TN +tnpk +TNT +toad/SM +toadstool/SM +toady/GSDM +toadyism/M +toaster/M +toastmaster/MS +toastmistress/S +toast/SZGRDM +toasty/TRS +tobacconist/SM +tobacco/SM +tobaggon/SM +Tobago/M +Tobe/M +Tobey/M +Tobiah/M +Tobias/M +Tobie/M +Tobi/M +Tobin/M +Tobit/M +toboggan/MRDSZG +Tobye/M +Toby/M +Tocantins/M +toccata/M +Tocqueville +tocsin/MS +to/D +today'll +today/SM +Toddie/M +toddler/M +toddle/ZGSRD +Todd/M +Toddy/M +toddy/SM +Tod/M +toecap/SM +toeclip/S +TOEFL +toehold/MS +toeing +toe/MS +toenail/DMGS +toffee/SM +tofu/S +toga/SMD +toge +togetherness/MS +together/P +togged +togging +toggle/SDMG +Togolese/M +Togo/M +tog/SMG +Toiboid/M +toilet/GMDS +toiletry/MS +toilette/SM +toil/SGZMRD +toilsomeness/M +toilsome/PY +Toinette/M +Tojo/M +tokamak +Tokay/M +toke/GDS +tokenism/SM +tokenized +token/SMDG +Tokugawa/M +Tokyoite/MS +Tokyo/M +Toland/M +told/AU +Toledo/SM +tole/MGDS +tolerability/IM +tolerable/I +tolerably/I +tolerance/SIM +tolerant/IY +tolerate/XVNGSD +toleration/M +Tolkien +tollbooth/M +tollbooths +toll/DGS +Tolley/M +tollgate/MS +tollhouse/M +tollway/S +Tolstoy/M +toluene/MS +Tolyatti/M +tomahawk/SGMD +Tomasina/M +Tomasine/M +Toma/SM +Tomaso/M +tomatoes +tomato/M +Tombaugh/M +tomb/GSDM +Tombigbee/M +tomblike +tombola/M +tomboyish +tomboy/MS +tombstone/MS +tomcat/SM +tomcatted +tomcatting +Tome/M +tome/SM +tomfoolery/MS +tomfool/M +Tomi/M +Tomkin/M +Tomlin/M +Tom/M +tommed +Tommie/M +Tommi/M +tomming +tommy/M +Tommy/M +tomographic +tomography/MS +tomorrow/MS +Tompkins/M +Tomsk/M +tom/SM +tomtit/SM +tonality/MS +tonal/Y +tonearm/S +tone/ISRDZG +tonelessness/M +toneless/YP +toner/IM +tone's +Tonga/M +Tongan/SM +tong/GRDS +tongueless +tongue/SDMG +tonguing/M +Tonia/M +tonic/SM +Tonie/M +tonight/MS +Toni/M +Tonio/M +tonk/MS +tonnage/SM +tonne/MS +Tonnie/M +tonsillectomy/MS +tonsillitis/SM +tonsil/SM +ton/SKM +tonsorial +tonsure/SDGM +Tonto/M +Tonya/M +Tonye/M +Tony/M +tony/RT +toodle +too/H +took/A +tool/AGDS +toolbox/SM +tooler/SM +tooling/M +toolkit/SM +toolmaker/M +toolmake/ZRG +toolmaking/M +tool's +toolsmith +Toomey/M +tooter/M +toot/GRDZS +toothache/SM +toothbrush/MSG +tooth/DMG +toothily +toothless +toothmarks +toothpaste/SM +toothpick/MS +tooths +toothsome +toothy/TR +tootle/SRDG +tootsie +Tootsie/M +toots/M +tootsy/MS +topaz/MS +topcoat/MS +topdressing/S +Topeka/M +toper/M +topflight +topgallant/M +topiary/S +topicality/MS +topical/Y +topic/MS +topknot/MS +topless +topmast/MS +topmost +topnotch/R +topocentric +topographer/SM +topographic +topographical/Y +topography/MS +topological/Y +topologist/MS +topology/MS +topped +topper/MS +topping/MS +topple/GSD +topsail/MS +topside/SRM +top/SMDRG +topsoil/GDMS +topspin/MS +Topsy/M +toque/MS +Torah/M +Torahs +torchbearer/SM +torchlight/S +torch/SDMG +toreador/SM +Tore/M +tore/S +Torey/M +Torie/M +tori/M +Tori/M +Torin/M +torment/GSD +tormenting/Y +tormentor/MS +torn +tornadoes +tornado/M +toroidal/Y +toroid/MS +Toronto/M +torpedoes +torpedo/GMD +torpidity/S +torpid/SY +torpor/MS +Torquemada/M +torque/MZGSRD +Torrance/M +Torre/MS +torrence +Torrence/M +Torrens/M +torrential +torrent/MS +Torrey/M +Torricelli/M +torridity/SM +torridness/SM +torrid/RYTP +Torrie/M +Torrin/M +Torr/XM +Torry/M +torsional/Y +torsion/IAM +torsions +torsi's +tor/SLM +torso/SM +tors/S +tort/ASFE +tortellini/MS +torte/MS +torten +tortilla/MS +tortoiseshell/SM +tortoise/SM +Tortola/M +tortoni/MS +tort's +Tortuga/M +tortuousness/MS +tortuous/PY +torture/ZGSRD +torturous +torus/MS +Tory/SM +Tosca/M +Toscanini/M +Toshiba/M +toss/SRDGZ +tossup/MS +totaler/M +totalistic +totalitarianism/SM +totalitarian/S +totality/MS +totalizator/S +totalizing +total/ZGSRDYM +totemic +totem/MS +toter/M +tote/S +toting/M +tot/MDRSG +Toto/M +totted +totterer/M +tottering/Y +totter/ZGRDS +totting +toucan/MS +touchable/U +touch/ASDG +touchdown/SM +touch +touched/U +toucher/M +touchily +touchiness/SM +touching/SY +touchline/M +touchscreen +touchstone/SM +touchy/TPR +toughen/DRZG +toughener/M +toughness/SM +toughs +tough/TXGRDNYP +Toulouse/M +toupee/SM +toured/CF +tourer/M +tour/GZSRDM +touring/F +tourism/SM +touristic +tourist/SM +touristy +tourmaline/SM +tournament/MS +tourney/GDMS +tourniquet/MS +tour's/CF +tours/CF +tousle/GSD +touter/M +tout/SGRD +Tova/M +Tove/M +towardliness/M +towardly/P +towards +toward/YU +towboat/MS +tow/DRSZG +towelette/S +towel/GJDMS +toweling/M +tower/GMD +towering/Y +towhead/MSD +towhee/SM +towline/MS +towner/M +Townes +Towney/M +townhouse/S +Townie/M +townie/S +Townley/M +Town/M +Townsend/M +townsfolk +township/MS +townsman/M +townsmen +townspeople/M +town/SRM +townswoman/M +townswomen +Towny/M +towpath/M +towpaths +towrope/MS +Towsley/M +toxemia/MS +toxicity/MS +toxicological +toxicologist/SM +toxicology/MS +toxic/S +toxin/MS +toyer/M +toymaker +toy/MDRSG +Toynbee/M +Toyoda/M +Toyota/M +toyshop +tr +traceability/M +traceableness/M +traceable/P +trace/ASDG +traceback/MS +traced/U +Tracee/M +traceless/Y +Trace/M +tracepoint/SM +tracer/MS +tracery/MDS +trace's +Tracey/M +tracheae +tracheal/M +trachea/M +tracheotomy/SM +Tracie/M +Traci/M +tracing/SM +trackage +trackball/S +trackbed +tracked/U +tracker/M +trackless +tracksuit/SM +track/SZGMRD +tractability/SI +tractable/I +tractably/I +tract/ABS +Tractarians +traction/KSCEMAF +tractive/KFE +tractor/FKMASC +tract's +tracts/CEFK +Tracy/M +trademark/GSMD +trader/M +tradesman/M +tradesmen +tradespeople +tradespersons +trade/SRDGZM +tradeswoman/M +tradeswomen +traditionalism/MS +traditionalistic +traditionalist/MS +traditionalized +traditionally +traditional/U +tradition/SM +traduce/DRSGZ +Trafalgar/M +trafficked +trafficker/MS +trafficking/S +traffic/SM +tragedian/SM +tragedienne/MS +tragedy/MS +tragically +tragicomedy/SM +tragicomic +tragic/S +trailblazer/MS +trailblazing/S +trailer/GDM +trails/F +trailside +trail/SZGJRD +trainable +train/ASDG +trained/U +trainee/MS +traineeships +trainer/MS +training/SM +trainman/M +trainmen +trainspotter/S +traipse/DSG +trait/MS +traitorous/Y +traitor/SM +Trajan/M +trajectory/MS +trammed +trammeled/U +trammel/GSD +tramming +tram/MS +trample/DGRSZ +trampler/M +trampoline/GMSD +tramp/RDSZG +tramway/M +trance/MGSD +tranche/SM +Tran/M +tranquility/S +tranquilized/U +tranquilize/JGZDSR +tranquilizer/M +tranquilizes/A +tranquilizing/YM +tranquillize/GRSDZ +tranquillizer/M +tranquilness/M +tranquil/PTRY +transact/GSD +transactional +transaction/MS +transactor/SM +transalpine +transaminase +transatlantic +Transcaucasia/M +transceiver/SM +transcendence/MS +transcendentalism/SM +transcendentalist/SM +transcendental/YS +transcendent/Y +transcend/SDG +transconductance +transcontinental +transcribe/DSRGZ +transcriber/M +transcription/SM +transcript/SM +transcultural +transducer/SM +transduction/M +transect/DSG +transept/SM +transferability/M +transferal/MS +transfer/BSMD +transferee/M +transference/SM +transferor/MS +transferral/SM +transferred +transferrer/SM +transferring +transfiguration/SM +transfigure/SDG +transfinite/Y +transfix/SDG +transformational +transformation/MS +transform/DRZBSG +transformed/U +transformer/M +transfuse/XSDGNB +transfusion/M +transgression/SM +transgressor/S +transgress/VGSD +trans/I +transience/SM +transiency/S +transient/YS +transistorize/GDS +transistor/SM +Transite/M +transitional/Y +transition/MDGS +transitivenesses +transitiveness/IM +transitive/PIY +transitivity/MS +transitoriness/M +transitory/P +transit/SGVMD +transl +translatability/M +translatable/U +translated/AU +translate/VGNXSDB +translational +translation/M +translator/SM +transliterate/XNGSD +translucence/SM +translucency/MS +translucent/Y +transmigrate/XNGSD +transmissible +transmission/MSA +transmissive +transmit/AS +transmittable +transmittal/SM +transmittance/MS +transmitted/A +transmitter/SM +transmitting/A +transmogrification/M +transmogrify/GXDSN +transmutation/SM +transmute/GBSD +transnational/S +transoceanic +transom/SM +transonic +transpacific +transparency/MS +transparentness/M +transparent/YP +transpiration/SM +transpire/GSD +transplantation/S +transplant/GRDBS +transpolar +transponder/MS +transportability +transportable/U +transportation/SM +transport/BGZSDR +transpose/BGSD +transposed/U +transposition/SM +Transputer/M +transsexualism/MS +transsexual/SM +transship/LS +transshipment/SM +transshipped +transshipping +transubstantiation/MS +Transvaal/M +transversal/YM +transverse/GYDS +transvestism/SM +transvestite/SM +transvestitism +Transylvania/M +trapdoor/S +trapeze/DSGM +trapezium/MS +trapezoidal +trapezoid/MS +trap/MS +trappable/U +trapped +trapper/SM +trapping/S +Trappist/MS +trapshooting/SM +trashcan/SM +trashiness/SM +trash/SRDMG +trashy/TRP +Trastevere/M +trauma/MS +traumatic +traumatically +traumatize/SDG +travail/SMDG +traveled/U +traveler/M +travelog's +travelogue/S +travel/SDRGZJ +Traver/MS +traversal/SM +traverse/GBDRS +traverser/M +travertine/M +travesty/SDGM +Travis/M +Travus/M +trawler/M +trawl/RDMSZG +tray/SM +treacherousness/SM +treacherous/PY +treachery/SM +treacle/DSGM +treacly +treader/M +treadle/GDSM +treadmill/MS +tread/SAGD +Treadwell/M +treas +treason/BMS +treasonous +treasure/DRSZMG +treasurer/M +treasurership +treasury/SM +Treasury/SM +treatable +treated/U +treater/S +treatise/MS +treatment/MS +treat's +treat/SAGDR +treaty/MS +treble/SDG +Treblinka/M +treeing +treeless +treelike +tree/MDS +treetop/SM +trefoil/SM +Trefor/M +trekked +trekker/MS +Trekkie/M +trekking +trek/MS +trellis/GDSM +Tremaine/M +Tremain/M +trematode/SM +Tremayne/M +tremble/JDRSG +trembler/M +trembles/M +trembly +tremendousness/M +tremendous/YP +tremolo/MS +tremor/MS +tremulousness/SM +tremulous/YP +trenchancy/MS +trenchant/Y +trencherman/M +trenchermen +trencher/SM +trench/GASD +trench's +trendily +trendiness/S +trend/SDMG +trendy/PTRS +Trenna/M +Trent/M +Trenton/M +trepanned +trepidation/MS +Tresa/M +Trescha/M +trespasser/M +trespass/ZRSDG +Tressa/M +tressed/E +tresses/E +tressing/E +tress/MSDG +trestle/MS +Trevar/M +Trevelyan/M +Trever/M +Trevino/M +Trevor/M +Trev/RM +Trey/M +trey/MS +triableness/M +triable/P +triadic +triad/MS +triage/SDMG +trial/ASM +trialization +trialled +trialling +triamcinolone +triangle/SM +triangulable +triangularization/S +triangular/Y +triangulate/YGNXSD +triangulation/M +Triangulum/M +Trianon/M +Triassic +triathlon/S +triatomic +tribalism/MS +tribal/Y +tribe/MS +tribesman/M +tribesmen +tribeswoman +tribeswomen +tribulate/NX +tribulation/M +tribunal/MS +tribune/SM +tributary/MS +tribute/EGSF +tribute's +trice/GSDM +tricentennial/S +triceps/SM +triceratops/M +trichinae +trichina/M +trichinoses +trichinosis/M +trichloroacetic +trichloroethane +trichotomy/M +trichromatic +Tricia/M +trickery/MS +trick/GMSRD +trickily +trickiness/SM +trickle/DSG +trickster/MS +tricky/RPT +tricolor/SMD +tricycle/SDMG +trident/SM +tridiagonal +tried/UA +triennial/SY +trier/AS +trier's +tries/A +Trieste/M +triffid/S +trifle/MZGJSRD +trifler/M +trifluoride/M +trifocals +trigged +trigger/GSDM +triggest +trigging +triglyceride/MS +trigonal/Y +trigonometric +trigonometrical +trigonometry/MS +trigram/S +trig/S +trihedral +trike/GMSD +trilateral/S +trilby/SM +trilingual +trillion/SMH +trillionth/M +trillionths +trillium/SM +trill/RDMGS +trilobite/MS +trilogy/MS +trimaran/MS +Trimble/M +trimer/M +trimester/MS +trimmed/U +trimmer/MS +trimmest +trimming/MS +trimness/S +trimodal +trimonthly +trim/PSYR +Trimurti/M +Trina/M +Trinidad/M +trinitarian/S +trinitrotoluene/SM +trinity/MS +Trinity/MS +trinketer/M +trinket/MRDSG +triode/MS +trio/SM +trioxide/M +tripartite/N +tripartition/M +tripe/MS +triphenylarsine +triphenylphosphine +triphenylstibine +triphosphopyridine +triple/GSD +triplet/SM +triplex/S +triplicate/SDG +triplication/M +triply/GDSN +Trip/M +tripodal +tripod/MS +tripoli/M +Tripoli/M +tripolyphosphate +tripos/SM +tripped +Trippe/M +tripper/MS +tripping/Y +Tripp/M +trip/SMY +triptych/M +triptychs +tripwire/MS +trireme/SM +Tris +trisect/GSD +trisection/S +trisector +Trisha/M +Trish/M +trisodium +Trista/M +Tristam/M +Tristan/M +tristate +trisyllable/M +tritely/F +triteness/SF +trite/SRPTY +tritium/MS +triton/M +Triton/M +triumphal +triumphalism +triumphant/Y +triumph/GMD +triumphs +triumvirate/MS +triumvir/MS +triune +trivalent +trivet/SM +trivia +triviality/MS +trivialization/MS +trivialize/DSG +trivial/Y +trivium/M +Trixie/M +Trixi/M +Trix/M +Trixy/M +Trobriand/M +trochaic/S +trochee/SM +trod/AU +trodden/UA +trodes +troff/MR +troglodyte/MS +troika/SM +Trojan/MS +troll/DMSG +trolled/F +trolleybus/S +trolley/SGMD +trolling/F +trollish +Trollope/M +trollop/GSMD +trolly's +trombone/MS +trombonist/SM +tromp/DSG +Trondheim/M +trooper/M +troopship/SM +troop/SRDMZG +trope/SM +Tropez/M +trophic +trophy/MGDS +tropical/SY +tropic/MS +tropism/SM +tropocollagen +troposphere/MS +tropospheric +troth/GDM +troths +trot/S +Trotsky/M +trotted +trotter/SM +trotting +troubadour/SM +troubled/U +trouble/GDRSM +troublemaker/MS +troubler/M +troubleshooter/M +troubleshoot/SRDZG +troubleshot +troublesomeness/M +troublesome/YP +trough/M +troughs +trounce/GZDRS +trouncer/M +troupe/MZGSRD +trouper/M +trouser/DMGS +trousseau/M +trousseaux +Troutman/M +trout/SM +trove/SM +troweler/M +trowel/SMDRGZ +trow/SGD +Troyes +Troy/M +troy/S +Trstram/M +truancy/MS +truant/SMDG +truce/SDGM +Truckee/M +trucker/M +trucking/M +truckle/GDS +truckload/MS +truck/SZGMRDJ +truculence/SM +truculent/Y +Truda/M +Trudeau/M +Trude/M +Trudey/M +trudge/SRDG +Trudie/M +Trudi/M +Trudy/M +true/DRSPTG +truelove/MS +Trueman/M +trueness/M +truer/U +truest/U +truffle/MS +truism/SM +Trujillo/M +Trula/M +truly/U +Trumaine/M +Truman/M +Trumann/M +Trumbull/M +trump/DMSG +trumpery/SM +trumpeter/M +trumpet/MDRZGS +Trump/M +truncate/NGDSX +truncation/M +truncheon/MDSG +trundle/GZDSR +trundler/M +trunk/GSMD +trunnion/SM +trusser/M +trussing/M +truss/SRDG +trusted/EU +trusteeing +trustee/MDS +trusteeship/SM +truster/M +trustful/EY +trustfulness/SM +trustiness/M +trusting/Y +trust/RDMSG +trusts/E +trustworthier +trustworthiest +trustworthiness/MS +trustworthy/UP +trusty/PTMSR +Truth +truthfulness/US +truthful/UYP +truths/U +truth/UM +TRW +trying/Y +try/JGDRSZ +tryout/MS +trypsin/M +tryst/GDMS +ts +T's +tsarevich +tsarina's +tsarism/M +tsarist +tsetse/S +Tsimshian/M +Tsiolkovsky/M +Tsitsihar/M +tsp +tsunami/MS +Tsunematsu/M +Tswana/M +TTL +tty/M +ttys +Tuamotu/M +Tuareg/M +tubae +tubal +tuba/SM +tubbed +tubbing +tubby/TR +tubeless +tubercle/MS +tubercular/S +tuberculin/MS +tuberculoses +tuberculosis/M +tuberculous +tuber/M +tuberose/SM +tuberous +tube/SM +tubing/M +tub/JMDRSZG +Tubman/M +tubular/Y +tubule/SM +tucker/GDM +Tucker/M +tuck/GZSRD +Tuckie/M +Tuck/RM +Tucky/M +Tucson/M +Tucuman/M +Tudor/MS +Tue/S +Tuesday/SM +tufter/M +tuft/GZSMRD +tufting/M +tugboat/MS +tugged +tugging +tug/S +tuition/ISM +Tulane/M +tularemia/S +tulip/SM +tulle/SM +Tulley/M +Tull/M +Tully/M +Tulsa/M +tum +tumbledown +tumbler/M +tumbleweed/MS +tumble/ZGRSDJ +tumbrel/SM +tumescence/S +tumescent +tumidity/MS +tumid/Y +tummy/SM +tumor/MDS +tumorous +Tums/M +tumult/SGMD +tumultuousness/M +tumultuous/PY +tumulus/M +tunableness/M +tunable/P +tuna/SM +tundra/SM +tun/DRJZGBS +tune/CSDG +tunefulness/MS +tuneful/YP +tuneless/Y +tuner/M +tune's +tuneup/S +tung +tungstate/M +tungsten/SM +Tunguska/M +Tungus/M +tunic/MS +tuning/A +tuning's +Tunisia/M +Tunisian/S +Tunis/M +tunned +tunneler/M +tunnel/MRDSJGZ +tunning +tunny/SM +tupelo/M +Tupi/M +tuple/SM +tuppence/M +Tupperware +Tupungato/M +turban/SDM +turbid +turbidity/SM +turbinate/SD +turbine/SM +turbocharged +turbocharger/SM +turbofan/MS +turbojet/MS +turboprop/MS +turbo/SM +turbot/MS +turbulence/SM +turbulent/Y +turd/MS +tureen/MS +turf/DGSM +turfy/RT +Turgenev/M +turgidity/SM +turgidness/M +turgid/PY +Turing/M +Turin/M +Turkestan/M +Turkey/M +turkey/SM +Turkic/SM +Turkish +Turkmenistan/M +turk/S +Turk/SM +turmeric/MS +turmoil/SDMG +turnabout/SM +turnaround/MS +turn/AZGRDBS +turnbuckle/SM +turncoat/SM +turned/U +turner/M +Turner/M +turning/MS +turnip/SMDG +turnkey/MS +turnoff/MS +turnout/MS +turnover/SM +turnpike/MS +turnround/MS +turnstile/SM +turnstone/M +turntable/SM +turpentine/GMSD +Turpin/M +turpitude/SM +turquoise/SM +turret/SMD +turtleback/MS +turtledove/MS +turtleneck/SDM +turtle/SDMG +turves's +turvy +Tuscaloosa/M +Tuscan +Tuscany/M +Tuscarora/M +Tuscon/M +tush/SDG +Tuskegee/M +tusker/M +tusk/GZRDMS +tussle/GSD +tussock/MS +tussocky +Tussuad/M +Tutankhamen/M +tutelage/MS +tutelary/S +Tut/M +tutored/U +tutorial/MS +tutor/MDGS +tutorship/S +tut/S +Tutsi +tutted +tutting +tutti/S +Tuttle/M +tutu/SM +Tuvalu +tuxedo/SDM +tux/S +TVA +TV/M +TVs +twaddle/GZMRSD +twaddler/M +Twain/M +twain/S +TWA/M +twang/MDSG +twangy/TR +twas +tweak/SGRD +tweediness/M +Tweedledee/M +Tweedledum/M +Tweed/M +twee/DP +tweed/SM +tweedy/PTR +tween +tweeter/M +tweet/ZSGRD +tweezer/M +tweeze/ZGRD +twelfth +twelfths +twelvemonth/M +twelvemonths +twelve/MS +twentieths +twenty/MSH +twerp/MS +twice/R +twiddle/GRSD +twiddler/M +twiddly/RT +twigged +twigging +twiggy/RT +twig/SM +Twila/M +twilight/MS +twilit +twill/SGD +twiner/M +twine/SM +twinge/SDMG +Twinkie +twinkler/M +twinkle/RSDG +twinkling/M +twinkly +twinned +twinning +twin/RDMGZS +twirler/M +twirling/Y +twirl/SZGRD +twirly/TR +twisted/U +twister/M +twists/U +twist/SZGRD +twisty +twitch/GRSD +twitchy/TR +twit/S +twitted +twitterer/M +twitter/SGRD +twittery +twitting +twixt +twofer/MS +twofold/S +two/MS +twopence/SM +twopenny/S +twosome/MS +twp +Twp +TWX +Twyla/M +TX +t/XTJBG +Tybalt/M +Tybie/M +Tybi/M +tycoon/MS +tyeing +Tye/M +tying/UA +tyke/SM +Tylenol/M +Tyler/M +Ty/M +Tymon/M +Tymothy/M +tympani +tympanist/SM +tympanum/SM +Tynan/M +Tyndale/M +Tyndall/M +Tyne/M +typeahead +typecast/SG +typed/AU +typedef/S +typeface/MS +typeless +type/MGDRSJ +types/A +typescript/SM +typeset/S +typesetter/MS +typesetting/SM +typewriter/M +typewrite/SRJZG +typewriting/M +typewritten +typewrote +typhoid/SM +Typhon/M +typhoon/SM +typhus/SM +typicality/MS +typically +typicalness/M +typical/U +typification/M +typify/SDNXG +typing/A +typist/MS +typographer/SM +typographic +typographical/Y +typography/MS +typological/Y +typology/MS +Typora +typo/MS +tyrannic +tyrannicalness/M +tyrannical/PY +tyrannicide/M +tyrannizer/M +tyrannize/ZGJRSD +tyrannizing/YM +tyrannosaur/MS +tyrannosaurus/S +tyrannous +tyranny/MS +tyrant/MS +Tyree/M +tyreo +Tyrolean/S +Tyrol's +Tyrone/M +tyrosine/M +tyro/SM +Tyrus/M +Tyson/M +tzarina's +tzar's +Tzeltal/M +u +U +UAR +UART +UAW +Ubangi/M +ubiquitous/YP +ubiquity/S +Ucayali/M +Uccello/M +UCLA/M +Udale/M +Udall/M +udder/SM +Udell/M +Ufa/M +ufologist/S +ufology/MS +UFO/S +Uganda/M +Ugandan/S +ugh +ughs +uglification +ugliness/MS +uglis +ugly/PTGSRD +Ugo/M +uh +UHF +Uighur +Ujungpandang/M +UK +ukase/SM +Ukraine/M +Ukrainian/S +ukulele/SM +UL +Ula/M +Ulberto/M +ulcerate/NGVXDS +ulceration/M +ulcer/MDGS +ulcerous +Ulick/M +Ulises/M +Ulla/M +Ullman/M +ulnae +ulna/M +ulnar +Ulrica/M +Ulrich/M +Ulrick/M +Ulric/M +Ulrika/M +Ulrikaumeko/M +Ulrike/M +Ulster/M +ulster/MS +ult +ulterior/Y +ultimas +ultimate/DSYPG +ultimateness/M +ultimatum/MS +ultimo +ultracentrifugally +ultracentrifugation +ultracentrifuge/M +ultraconservative/S +ultrafast +ultrahigh +ultralight/S +ultramarine/SM +ultramodern +ultramontane +ultra/S +ultrashort +ultrasonically +ultrasonic/S +ultrasonics/M +ultrasound/SM +ultrastructure/M +Ultrasuede +ultraviolet/SM +Ultrix/M +ULTRIX/M +ululate/DSXGN +ululation/M +Ulyanovsk/M +Ulysses/M +um +umbel/MS +umber/GMDS +Umberto/M +umbilical/S +umbilici +umbilicus/M +umbrage/MGSD +umbrageous +umbra/MS +umbrella/GDMS +Umbriel/M +Umeko/M +umiak/MS +umlaut/GMDS +umpire/MGSD +ump/MDSG +umpteen/H +UN +unabated/Y +unabridged/S +unacceptability +unacceptable +unaccepted +unaccommodating +unaccountability +unaccustomed/Y +unadapted +unadulterated/Y +unadventurous +unalienability +unalterableness/M +unalterable/P +unalterably +Una/M +unambiguity +unambiguous +unambitious +unamused +unanimity/SM +unanimous/Y +unanticipated/Y +unapologetic +unapologizing/M +unappeasable +unappeasably +unappreciative +unary +unassailableness/M +unassailable/P +unassertive +unassumingness/M +unassuming/PY +unauthorized/PY +unavailing/PY +unaware/SPY +unbalanced/P +unbar +unbarring +unbecoming/P +unbeknown +unbelieving/Y +unbiased/P +unbid +unbind/G +unblessed +unblinking/Y +unbodied +unbolt/G +unbreakability +unbred +unbroken +unbuckle +unbudging/Y +unburnt +uncap +uncapping +uncatalogued +uncauterized/MS +unceasing/Y +uncelebrated +uncertain/P +unchallengeable +unchangingness/M +unchanging/PY +uncharacteristic +uncharismatic +unchastity +unchristian +uncial/S +uncivilized/Y +unclassified +uncle/MSD +unclouded/Y +uncodable +uncollected +uncoloredness/M +uncolored/PY +uncombable +uncommunicative +uncompetitive +uncomplicated +uncomprehending/Y +uncompromisable +unconcerned/P +unconcern/M +unconfirmed +unconfused +unconscionableness/M +unconscionable/P +unconscionably +unconstitutional +unconsumed +uncontentious +uncontrollability +unconvertible +uncool +uncooperative +uncork/G +uncouple/G +uncouthness/M +uncouth/YP +uncreate/V +uncritical +uncross/GB +uncrowded +unction/IM +unctions +unctuousness/MS +unctuous/PY +uncustomary +uncut +undated/I +undaunted/Y +undeceive +undecided/S +undedicated +undefinability +undefinedness/M +undefined/P +undelete +undeliverability +undeniableness/M +undeniable/P +undeniably +undependable +underachiever/M +underachieve/SRDGZ +underact/GDS +underadjusting +underage/S +underarm/DGS +underbedding +underbelly/MS +underbidding +underbid/S +underbracing +underbrush/MSDG +undercarriage/MS +undercharge/GSD +underclassman +underclassmen +underclass/S +underclothes +underclothing/MS +undercoating/M +undercoat/JMDGS +underconsumption/M +undercooked +undercount/S +undercover +undercurrent/SM +undercut/S +undercutting +underdeveloped +underdevelopment/MS +underdog/MS +underdone +undereducated +underemphasis +underemployed +underemployment/SM +underenumerated +underenumeration +underestimate/NGXSD +underexploited +underexpose/SDG +underexposure/SM +underfed +underfeed/SG +underfloor +underflow/GDMS +underfoot +underfund/DG +underfur/MS +undergarment/SM +undergirding +undergoes +undergo/G +undergone +undergrad/MS +undergraduate/MS +underground/RMS +undergrowth/M +undergrowths +underhand/D +underhandedness/MS +underhanded/YP +underheat +underinvestment +underlaid +underlain/S +underlay/GS +underlie +underline/GSDJ +underling/MS +underlip/SM +underloaded +underly/GS +undermanned +undermentioned +undermine/SDG +undermost +underneath +underneaths +undernourished +undernourishment/SM +underpaid +underpants +underpart/MS +underpass/SM +underpay/GSL +underpayment/SM +underperformed +underpinned +underpinning/MS +underpin/S +underplay/SGD +underpopulated +underpopulation/M +underpowered +underpricing +underprivileged +underproduction/MS +underrate/GSD +underregistration/M +underreported +underreporting +underrepresentation/M +underrepresented +underscore/SDG +undersealed +undersea/S +undersecretary/SM +undersell/SG +undersexed +undershirt/SM +undershoot/SG +undershorts +undershot +underside/SM +undersigned/M +undersign/SGD +undersized +undersizes +undersizing +underskirt/MS +undersold +underspecification +underspecified +underspend/G +understaffed +understandability/M +understandably +understanding/YM +understand/RGSJB +understate/GSDL +understatement/MS +understocked +understood +understrength +understructure/SM +understudy/GMSD +undertaken +undertaker/M +undertake/SRGZJ +undertaking/M +underthings +undertone/SM +undertook +undertow/MS +underused +underusing +underutilization/M +underutilized +undervaluation/S +undervalue/SDG +underwater/S +underway +underwear/M +underweight/S +underwent +underwhelm/DGS +underwood/M +Underwood/M +underworld/MS +underwrite/GZSR +underwriter/M +underwritten +underwrote +under/Y +undeserving +undesigned +undeviating/Y +undialyzed/SM +undiplomatic +undiscerning +undiscriminating +undo/GJ +undoubted/Y +undramatic +undramatized/SM +undress/G +undrinkability +undrinkable +undroppable +undue +undulant +undulate/XDSNG +undulation/M +unearthliness/S +unearthly/P +unearth/YG +unease +uneconomic +uneducated +unemployed/S +unencroachable +unending/Y +unendurable/P +unenergized/MS +unenforced +unenterprising +UNESCO +unethical +uneulogized/SM +unexacting +unexceptionably +unexcited +unexpectedness/MS +unfading/Y +unfailingness/M +unfailing/P +unfamiliar +unfashionable +unfathomably +unfavored +unfeeling +unfeigned/Y +unfelt +unfeminine +unfertile +unfetchable +unflagging +unflappability/S +unflappable +unflappably +unflinching/Y +unfold/LG +unfoldment/M +unforced +unforgeable +unfossilized/MS +unfraternizing/SM +unfrozen +unfulfillable +unfunny +unfussy +ungainliness/MS +ungainly/PRT +Ungava/M +ungenerous +ungentle +unglamorous +ungrammaticality +ungrudging +unguent/MS +ungulate/MS +unharmonious +unharness/G +unhistorical +unholy/TP +unhook/DG +unhydrolyzed/SM +unhygienic +Unibus/M +unicameral +UNICEF +unicellular +Unicode/M +unicorn/SM +unicycle/MGSD +unicyclist/MS +unideal +unidimensional +unidiomatic +unidirectionality +unidirectional/Y +unidolized/MS +unifiable +unification/MA +unifier/MS +unifilar +uniformity/MS +uniformness/M +uniform/TGSRDYMP +unify/AXDSNG +unilateralism/M +unilateralist +unilateral/Y +unimodal +unimpeachably +unimportance +unimportant +unimpressive +unindustrialized/MS +uninhibited/YP +uninominal +uninsured +unintellectual +unintended +uninteresting +uninterruptedness/M +uninterrupted/YP +unintuitive +uninviting +union/AEMS +unionism/SM +unionist/SM +Unionist/SM +unionize +Union/MS +UniPlus/M +unipolar +uniprocessor/SM +uniqueness/S +unique/TYSRP +Uniroyal/M +unisex/S +UniSoft/M +unison/MS +Unisys/M +unitarianism/M +Unitarianism/SM +unitarian/MS +Unitarian/MS +unitary +unite/AEDSG +united/Y +uniter/M +unitize/GDS +unit/VGRD +unity/SEM +univ +Univac/M +univalent/S +univalve/MS +univariate +universalism/M +universalistic +universality/SM +universalize/DSRZG +universalizer/M +universal/YSP +universe/MS +university/MS +Unix/M +UNIX/M +unjam +unkempt +unkind/TP +unkink +unknightly +unknowable/S +unknowing +unlabored +unlace/G +unlearn/G +unlikeable +unlikeliness/S +unlimber/G +unlimited +unlit +unliterary +unloose/G +unlucky/TP +unmagnetized/MS +unmanageably +unmannered/Y +unmask/G +unmeaning +unmeasured +unmeetable +unmelodious +unmemorable +unmemorialized/MS +unmentionable/S +unmerciful +unmeritorious +unmethodical +unmineralized/MS +unmissable +unmistakably +unmitigated/YP +unmnemonic +unmobilized/SM +unmoral +unmount/B +unmovable +unmoving +unnaturalness/M +unnavigable +unnerving/Y +unobliging +unoffensive +unofficial +unorganized/YP +unorthodox +unpack/G +unpaintable +unpalatability +unpalatable +unpartizan +unpatronizing +unpeople +unperceptive +unperson +unperturbed/Y +unphysical +unpick/G +unpicturesque +unpinning +unpleasing +unploughed +unpolarized/SM +unpopular +unpractical +unprecedented/Y +unpredictable/S +unpreemphasized +unpremeditated +unpretentiousness/M +unprincipled/P +unproblematic +unproductive +unpropitious +unprovable +unproven +unprovocative +unpunctual +unquestionable +unraisable +unravellings +unreadability +unread/B +unreal +unrealizable +unreasoning/Y +unreceptive +unrecordable +unreflective +unrelenting/Y +unremitting/Y +unrepeatability +unrepeated +unrepentant +unreported +unrepresentative +unreproducible +unrest/G +unrestrained/P +unrewarding +unriddle +unripe/P +unromantic +unruliness/SM +unruly/PTR +unsaleable +unsanitary +unsavored/YP +unsavoriness/M +unseal/GB +unsearchable +unseasonal +unseeing/Y +unseen/S +unselfconsciousness/M +unselfconscious/P +unselfishness/M +unsellable +unsentimental +unset +unsettledness/M +unsettled/P +unsettling/Y +unshapely +unshaven +unshorn +unsighted +unsightliness/S +unskilful +unsociability +unsociable/P +unsocial +unsound/PT +unspeakably +unspecific +unspectacular +unspoilt +unspoke +unsporting +unstable/P +unstigmatized/SM +unstilted +unstinting/Y +unstopping +unstrapping +unstudied +unstuffy +unsubdued +unsubstantial +unsubtle +unsuitable +unsuspecting/Y +unswerving/Y +unsymmetrical +unsympathetic +unsystematic +unsystematized/Y +untactful +untalented +untaxing +unteach/B +untellable +untenable +unthinking +until/G +untiring/Y +unto +untouchable/MS +untowardness/M +untoward/P +untraceable +untrue +untruthfulness/M +untwist/G +Unukalhai/M +unusualness/M +unutterable +unutterably +unvocalized/MS +unvulcanized/SM +unwaivering +unwarrantable +unwarrantably +unwashed/PS +unwearable +unwearied/Y +unwed +unwedge +unwelcome +unwell/M +unwieldiness/MS +unwieldy/TPR +unwind/B +unwomanly +unworkable/S +unworried +unwrap +unwrapping +unyielding/Y +unyoke +unzip +up +Upanishads +uparrow +upbeat/SM +upbraid/GDRS +upbringing/M +upbring/JG +UPC +upchuck/SDG +upcome/G +upcountry/S +updatability +updater/M +update/RSDG +Updike/M +updraft/SM +upend/SDG +upfield +upfront +upgradeable +upgrade/DSJG +upheaval/MS +upheld +uphill/S +upholder/M +uphold/RSGZ +upholster/ADGS +upholsterer/SM +upholstery/MS +UPI +upkeep/SM +uplander/M +upland/MRS +uplifter/M +uplift/SJDRG +upload/GSD +upmarket +upon +upped +uppercase/GSD +upperclassman/M +upperclassmen +uppercut/S +uppercutting +uppermost +upper/S +upping +uppish +uppity +upraise/GDS +uprated +uprating +uprear/DSG +upright/DYGSP +uprightness/S +uprise/RGJ +uprising/M +upriver/S +uproariousness/M +uproarious/PY +uproar/MS +uproot/DRGS +uprooter/M +ups +UPS +upscale/GDS +upset/S +upsetting/MS +upshot/SM +upside/MS +upsilon/MS +upslope +upstage/DSRG +upstairs +upstandingness/M +upstanding/P +upstart/MDGS +upstate/SR +upstream/DSG +upstroke/MS +upsurge/DSG +upswing/GMS +upswung +uptake/SM +upthrust/GMS +uptight +uptime +Upton/M +uptown/RS +uptrend/M +upturn/GDS +upwardness/M +upward/SYP +upwelling +upwind/S +uracil/MS +Ural/MS +Urania/M +uranium/MS +Uranus/M +uranyl/M +Urbain/M +Urbana/M +urbane/Y +urbanism/M +urbanite/SM +urbanity/SM +urbanization/MS +urbanize/DSG +Urban/M +urbanologist/S +urbanology/S +Urbano/M +urban/RT +Urbanus/M +urchin/SM +Urdu/M +urea/SM +uremia/MS +uremic +ureter/MS +urethane/MS +urethrae +urethral +urethra/M +urethritis/M +Urey/M +urge/GDRSJ +urgency/SM +urgent/Y +urger/M +Uriah/M +uric +Uriel/M +urinal/MS +urinalyses +urinalysis/M +urinary/MS +urinate/XDSNG +urination/M +urine/MS +Uri/SM +URL +Ur/M +urning/M +urn/MDGS +urogenital +urological +urologist/S +urology/MS +Urquhart/M +Ursala/M +Ursa/M +ursine +Ursola/M +Urson/M +Ursula/M +Ursulina/M +Ursuline/M +urticaria/MS +Uruguayan/S +Uruguay/M +Urumqi +US +USA +usability/S +usable/U +usably/U +USAF +usage/SM +USART +USCG +USC/M +USDA +us/DRSBZG +used/U +use/ESDAG +usefulness/SM +useful/YP +uselessness/MS +useless/PY +Usenet/M +Usenix/M +user/M +USG/M +usherette/SM +usher/SGMD +USIA +USMC +USN +USO +USP +USPS +USS +USSR +Ustinov/M +usu +usuals +usual/UPY +usurer/SM +usuriousness/M +usurious/PY +usurpation/MS +usurper/M +usurp/RDZSG +usury/SM +UT +Utahan/SM +Utah/M +Uta/M +Ute/M +utensil/SM +uteri +uterine +uterus/M +Utica/M +utile/I +utilitarianism/MS +utilitarian/S +utility/MS +utilization/MS +utilization's/A +utilize/GZDRS +utilizer/M +utilizes/A +utmost/S +Utopia/MS +utopianism/M +utopian's +Utopian/S +utopia/S +Utrecht/M +Utrillo/M +utterance/MS +uttered/U +utterer/M +uttermost/S +utter/TRDYGS +uucp/M +UV +uvula/MS +uvular/S +uxorious +Uzbekistan +Uzbek/M +Uzi/M +V +VA +vacancy/MS +vacantness/M +vacant/PY +vacate/NGXSD +vacationist/SM +vacationland +vacation/MRDZG +vaccinate/NGSDX +vaccination/M +vaccine/SM +vaccinial +vaccinia/M +Vachel/M +vacillate/XNGSD +vacillating/Y +vacillation/M +vacillator/SM +Vaclav/M +vacua's +vacuity/MS +vacuo +vacuolated/U +vacuolate/SDGN +vacuole/SM +vacuolization/SM +vacuousness/MS +vacuous/PY +vacuum/GSMD +Vader/M +Vaduz/M +vagabondage/MS +vagabond/DMSG +vagarious +vagary/MS +vaginae +vaginal/Y +vagina/M +vagrancy/MS +vagrant/SMY +vagueing +vagueness/MS +vague/TYSRDP +Vail/M +vaingloriousness/M +vainglorious/YP +vainglory/MS +vain/TYRP +val +valance/SDMG +Valaree/M +Valaria/M +Valarie/M +Valdemar/M +Valdez/M +Valeda/M +valediction/MS +valedictorian/MS +valedictory/MS +Vale/M +valence/SM +Valencia/MS +valency/MS +Valene/M +Valenka/M +Valentia/M +Valentijn/M +Valentina/M +Valentine/M +valentine/SM +Valentin/M +Valentino/M +Valenzuela/M +Valera/M +Valeria/M +Valerian/M +Valerie/M +Valerye/M +Valry/M +vale/SM +valet/GDMS +valetudinarianism/MS +valetudinarian/MS +Valhalla/M +valiance/S +valiantness/M +valiant/SPY +Valida/M +validated/AU +validate/INGSDX +validates/A +validation/AMI +validity/IMS +validnesses +validness/MI +valid/PIY +Valina/M +valise/MS +Valium/S +Valkyrie/SM +Vallejo +Valle/M +Valletta/M +valley/SM +Vallie/M +Valli/M +Vally/M +Valma/M +Val/MY +Valois/M +valor/MS +valorous/Y +Valparaiso/M +Valry/M +valuable/IP +valuableness/IM +valuables +valuably/I +valuate/NGXSD +valuation/CSAM +valuator/SM +value/CGASD +valued/U +valuelessness/M +valueless/P +valuer/SM +value's +values/E +valve/GMSD +valveless +valvular +Va/M +vamoose/GSD +vamp/ADSG +vamper +vampire/MGSD +vamp's +vanadium/MS +Vance/M +Vancouver/M +vandalism/MS +vandalize/GSD +vandal/MS +Vandal/MS +Vanda/M +Vandenberg/M +Vanderbilt/M +Vanderburgh/M +Vanderpoel/M +Vandyke/SM +vane/MS +Vanessa/M +Vang/M +vanguard/MS +Vania/M +vanilla/MS +vanisher/M +vanish/GRSDJ +vanishing/Y +vanity/SM +Van/M +Vanna/M +vanned +Vannie/M +Vanni/M +vanning +Vanny/M +vanquisher/M +vanquish/RSDGZ +van/SMD +vantage/MS +Vanuatu +Vanya/M +Vanzetti/M +vapidity/MS +vapidness/SM +vapid/PY +vaporer/M +vaporing/MY +vaporisation +vaporise/DSG +vaporization/AMS +vaporize/DRSZG +vaporizer/M +vapor/MRDJGZS +vaporous +vapory +vaquero/SM +VAR +Varanasi/M +Varese/M +Vargas/M +variability/IMS +variableness/IM +variable/PMS +variables/I +variably/I +variance/I +variances +variance's +Varian/M +variant/ISY +variate/MGNSDX +variational +variation/M +varicolored/MS +varicose/S +variedly +varied/U +variegate/NGXSD +variegation/M +varier/M +varietal/S +variety/MS +various/PY +varistor/M +Varityping/M +varlet/MS +varmint/SM +varnished/U +varnisher/M +varnish/ZGMDRS +var/S +varsity/MS +varying/UY +vary/SRDJG +vascular +vasectomy/SM +Vaseline/DSMG +vase/SM +Vasili/MS +Vasily/M +vasomotor +Vasquez/M +vassalage/MS +vassal/GSMD +Vassar/M +Vassili/M +Vassily/M +vastness/MS +vast/PTSYR +v/ASV +VAT +Vatican/M +vat/SM +vatted +vatting +vaudeville/SM +vaudevillian/SM +Vaudois +Vaughan/M +Vaughn/M +vaulter/M +vaulting/M +vault/ZSRDMGJ +vaunter/M +vaunt/GRDS +VAXes +Vax/M +VAX/M +Vazquez/M +vb +VCR +VD +VDT +VDU +vealed/A +vealer/MA +veal/MRDGS +veals/A +Veblen/M +vectorial +vectorization +vectorized +vectorizing +vector's/F +vector/SGDM +Veda/MS +Vedanta/M +veejay/S +veep/S +veer/DSG +veering/Y +vegan/SM +Vega/SM +Vegemite/M +veges +vegetable/MS +vegetarianism/MS +vegetarian/SM +vegetate/DSNGVX +vegetation/M +vegetative/PY +vegged +veggie/S +vegging +veg/M +vehemence/MS +vehemency/S +vehement/Y +vehicle/SM +vehicular +veiling/MU +veil's +veil/UGSD +vein/GSRDM +veining/M +vela/M +Vela/M +velarize/SDG +velar/S +Velsquez/M +Velzquez +Velcro/SM +veld/SM +veldt's +Velez/M +Vella/M +vellum/MS +Velma/M +velocipede/SM +velocity/SM +velor/S +velour's +velum/M +Velveeta/M +velveteen/MS +velvet/GSMD +Velvet/M +velvety/RT +venality/MS +venal/Y +venation/SM +vend/DSG +vender's/K +vendetta/MS +vendible/S +vendor/MS +veneerer/M +veneer/GSRDM +veneering/M +venerability/S +venerable/P +venerate/XNGSD +veneration/M +venereal +venetian +Venetian/SM +Venezuela/M +Venezuelan/S +vengeance/MS +vengeful/APY +vengefulness/AM +venialness/M +venial/YP +Venice/M +venireman/M +veniremen +venison/SM +Venita/M +Venn/M +venomousness/M +venomous/YP +venom/SGDM +venous/Y +venter/M +ventilated/U +ventilate/XSDVGN +ventilation/M +ventilator/MS +vent/ISGFD +ventral/YS +ventricle/MS +ventricular +ventriloquies +ventriloquism/MS +ventriloquist/MS +ventriloquy +vent's/F +Ventura/M +venture/RSDJZG +venturesomeness/SM +venturesome/YP +venturi/S +venturousness/MS +venturous/YP +venue/MAS +Venusian/S +Venus/S +veraciousness/M +veracious/YP +veracities +veracity/IM +Veracruz/M +Veradis +Vera/M +verandahed +veranda/SDM +verbalization/MS +verbalized/U +verbalizer/M +verbalize/ZGRSD +verballed +verballing +verbal/SY +verbatim +verbena/MS +verbiage/SM +verb/KSM +verbose/YP +verbosity/SM +verboten +verdant/Y +Verde/M +Verderer/M +verdict/SM +verdigris/GSDM +Verdi/M +verdure/SDM +Vere/M +Verena/M +Verene/M +verge/FGSD +Verge/M +verger/SM +verge's +Vergil's +veridical/Y +Veriee/M +verifiability/M +verifiableness/M +verifiable/U +verification/S +verified/U +verifier/MS +verify/GASD +Verile/M +verily +Verina/M +Verine/M +verisimilitude/SM +veritableness/M +veritable/P +veritably +verity/MS +Verlag/M +Verlaine/M +Verla/M +Vermeer/M +vermicelli/MS +vermiculite/MS +vermiform +vermilion/MS +vermin/M +verminous +Vermonter/M +Vermont/ZRM +vermouth/M +vermouths +vernacular/YS +vernal/Y +Verna/M +Verne/M +Vernen/M +Verney/M +Vernice/M +vernier/SM +Vern/NM +Vernon/M +Vernor/M +Verona/M +Veronese/M +Veronica/M +veronica/SM +Veronika/M +Veronike/M +Veronique/M +verrucae +verruca/MS +versa +Versailles/M +Versatec/M +versatileness/M +versatile/YP +versatility/SM +versed/UI +verse's +verses/I +verse/XSRDAGNF +versicle/M +versification/M +versifier/M +versify/GDRSZXN +versing/I +version/MFISA +verso/SM +versus +vertebrae +vertebral/Y +vertebra/M +vertebrate/IMS +vertebration/M +vertex/SM +vertical/YPS +vertices's +vertiginous +vertigoes +vertigo/M +verve/SM +very/RT +Vesalius/M +vesicle/SM +vesicular/Y +vesiculate/GSD +Vespasian/M +vesper/SM +Vespucci/M +vessel/MS +vestal/YS +Vesta/M +vest/DIGSL +vestibular +vestibule/SDM +vestige/SM +vestigial/Y +vesting/SM +vestment/ISM +vestryman/M +vestrymen +vestry/MS +vest's +vesture/SDMG +Vesuvius/M +vetch/SM +veteran/SM +veterinarian/MS +veterinary/S +veter/M +veto/DMG +vetoes +vet/SMR +vetted +vetting/A +Vevay/M +vexation/SM +vexatiousness/M +vexatious/PY +vexed/Y +vex/GFSD +VF +VFW +VG +VGA +vhf +VHF +VHS +VI +via +viability/SM +viable/I +viably +viaduct/MS +Viagra/M +vial/MDGS +viand/SM +vibe/S +vibraharp/MS +vibrancy/MS +vibrant/YS +vibraphone/MS +vibraphonist/SM +vibrate/XNGSD +vibrational/Y +vibration/M +vibrato/MS +vibrator/SM +vibratory +vibrio/M +vibrionic +viburnum/SM +vicarage/SM +vicariousness/MS +vicarious/YP +vicar/SM +vice/CMS +viced +vicegerent/MS +vicennial +Vicente/M +viceregal +viceroy/SM +Vichy/M +vichyssoise/MS +vicing +vicinity/MS +viciousness/S +vicious/YP +vicissitude/MS +Vickers/M +Vickie/M +Vicki/M +Vicksburg/M +Vicky/M +Vick/ZM +Vic/M +victimization/SM +victimized/U +victimizer/M +victimize/SRDZG +victim/SM +Victoir/M +Victoria/M +Victorianism/S +Victorian/S +victoriousness/M +victorious/YP +Victor/M +victor/SM +victory/MS +Victrola/SM +victualer/M +victual/ZGSDR +vicua/S +Vidal/M +Vida/M +videlicet +videocassette/S +videoconferencing +videodisc/S +videodisk/SM +video/GSMD +videophone/SM +videotape/SDGM +Vidovic/M +Vidovik/M +Vienna/M +Viennese/M +Vientiane/M +vier/M +vie/S +Vietcong/M +Viet/M +Vietminh/M +Vietnamese/M +Vietnam/M +viewed/A +viewer/AS +viewer's +viewfinder/MS +viewgraph/SM +viewing/M +viewless/Y +view/MBGZJSRD +viewpoint/SM +views/A +vigesimal +vigilance/MS +vigilante/SM +vigilantism/MS +vigilantist +vigilant/Y +vigil/SM +vignette/MGDRS +vignetter/M +vignetting/M +vignettist/MS +vigor/MS +vigorousness/M +vigorous/YP +vii +viii +Vijayawada/M +Viki/M +Viking/MS +viking/S +Vikki/M +Vikky/M +Vikram/M +Vila +vile/AR +vilely +vileness/MS +vilest +Vilhelmina/M +vilification/M +vilifier/M +vilify/GNXRSD +villager/M +village/RSMZ +villainousness/M +villainous/YP +villain/SM +villainy/MS +Villa/M +villa/MS +Villarreal/M +ville +villeinage/SM +villein/MS +villi +Villon/M +villus/M +Vilma/M +Vilnius/M +Vilyui/M +Vi/M +vi/MDR +vim/MS +vinaigrette/MS +Vina/M +Vince/M +Vincent/MS +Vincenty/M +Vincenz/M +vincible/I +Vinci/M +Vindemiatrix/M +vindicate/XSDVGN +vindication/M +vindicator/SM +vindictiveness/MS +vindictive/PY +vinegar/DMSG +vinegary +vine/MGDS +vineyard/SM +Vinita/M +Vin/M +Vinnie/M +Vinni/M +Vinny/M +vino/MS +vinous +Vinson/M +vintage/MRSDG +vintager/M +vintner/MS +vinyl/SM +violable/I +Viola/M +Violante/M +viola/SM +violate/VNGXSD +violator/MS +Viole/M +violence/SM +violent/Y +Violet/M +violet/SM +Violetta/M +Violette/M +violinist/SM +violin/MS +violist/MS +viol/MSB +violoncellist/S +violoncello/MS +viper/MS +viperous +VIP/S +viragoes +virago/M +viral/Y +vireo/SM +Virge/M +Virgie/M +Virgilio/M +Virgil/M +virginal/YS +Virgina/M +Virginia/M +Virginian/S +Virginie/M +virginity/SM +virgin/SM +Virgo/MS +virgule/MS +virile +virility/MS +virologist/S +virology/SM +virtual/Y +virtue/SM +virtuosity/MS +virtuosoes +virtuoso/MS +virtuousness/SM +virtuous/PY +virulence/SM +virulent/Y +virus/MS +visage/MSD +Visakhapatnam's +Visa/M +visa/SGMD +Visayans +viscera +visceral/Y +viscid/Y +viscoelastic +viscoelasticity +viscometer/SM +viscose/MS +viscosity/MS +viscountcy/MS +viscountess/SM +viscount/MS +viscousness/M +viscous/PY +viscus/M +vise/CAXNGSD +viselike +vise's +Vishnu/M +visibility/ISM +visible/PI +visibly/I +Visigoth/M +Visigoths +visionariness/M +visionary/PS +vision/KMDGS +vision's/A +visitable/U +visitant/SM +visitation/SM +visited/U +visit/GASD +visitor/MS +vis/MDSGV +visor/SMDG +VISTA +vista/GSDM +Vistula/M +visualization/AMS +visualized/U +visualizer/M +visualizes/A +visualize/SRDZG +visual/SY +vitae +vitality/MS +vitalization/AMS +vitalize/ASDGC +vital/SY +vita/M +Vita/M +vitamin/SM +Vite/M +Vitia/M +vitiate/XGNSD +vitiation/M +viticulture/SM +viticulturist/S +Vitim/M +Vito/M +Vitoria/M +vitreous/YSP +vitrifaction/S +vitrification/M +vitrify/XDSNG +vitrine/SM +vitriolic +vitriol/MDSG +vitro +vittles +Vittoria/M +Vittorio/M +vituperate/SDXVGN +vituperation/M +vituperative/Y +Vitus/M +vivace/S +vivaciousness/MS +vivacious/YP +vivacity/SM +viva/DGS +Vivaldi +Viva/M +vivaria +vivarium/MS +vivaxes +Vivekananda/M +vive/Z +Vivia/M +Viviana/M +Vivian/M +Vivianna/M +Vivianne/M +vividness/SM +vivid/PTYR +Vivie/M +Viviene/M +Vivien/M +Vivienne/M +vivifier +vivify/NGASD +Vivi/MN +viviparous +vivisect/DGS +vivisectional +vivisectionist/SM +vivisection/MS +Viviyan/M +Viv/M +vivo +Vivyan/M +Vivyanne/M +vixenish/Y +vixen/SM +viz +vizier/MS +vizor's +VJ +Vladamir/M +Vladimir/M +Vladivostok/M +Vlad/M +VLF +VLSI +VMS/M +VOA +vocable/SM +vocab/S +vocabularian +vocabularianism +vocabulary/MS +vocalic/S +vocalise's +vocalism/M +vocalist/MS +vocalization/SM +vocalized/U +vocalizer/M +vocalize/ZGDRS +vocal/SY +vocation/AKMISF +vocational/Y +vocative/KYS +vociferate/NGXSD +vociferation/M +vociferousness/MS +vociferous/YP +vocoded +vocoder +vodka/MS +voe/S +Vogel/M +vogue/GMSRD +vogueing +voguish +voiceband +voiced/CU +voice/IMGDS +voicelessness/SM +voiceless/YP +voicer/S +voices/C +voicing/C +voidable +void/C +voided +voider/M +voiding +voidness/M +voids +voil +voile/MS +volar +volatileness/M +volatile/PS +volatility/MS +volatilization/MS +volatilize/SDG +volcanically +volcanic/S +volcanism/M +volcanoes +volcano/M +vole/MS +Volga/M +Volgograd/M +vol/GSD +volitionality +volitional/Y +volition/MS +Volkswagen/SM +volleyball/MS +volleyer/M +volley/SMRDG +Vol/M +Volstead/M +voltage/SM +voltaic +Voltaire/M +Volta/M +volt/AMS +Volterra/M +voltmeter/MS +volubility/S +voluble/P +volubly +volume/SDGM +volumetric +volumetrically +voluminousness/MS +voluminous/PY +voluntarily/I +voluntariness/MI +voluntarism/MS +voluntary/PS +volunteer/DMSG +voluptuary/SM +voluptuousness/S +voluptuous/YP +volute/S +Volvo/M +vomit/GRDS +Vonda/M +Von/M +Vonnegut/M +Vonnie/M +Vonni/M +Vonny/M +voodoo/GDMS +voodooism/S +voraciousness/MS +voracious/YP +voracity/MS +Voronezh/M +Vorster/M +vortex/SM +vortices's +vorticity/M +votary/MS +vote/CSDG +voter/SM +vote's +votive/YP +voucher/GMD +vouchsafe/SDG +vouch/SRDGZ +vowelled +vowelling +vowel/MS +vower/M +vow/SMDRG +voyage/GMZJSRD +voyager/M +voyageur/SM +voyeurism/MS +voyeuristic +voyeur/MS +VP +vs +V's +VT +Vt/M +VTOL +vulcanization/SM +vulcanized/U +vulcanize/SDG +Vulcan/M +vulgarian/MS +vulgarism/MS +vulgarity/MS +vulgarization/S +vulgarize/GZSRD +vulgar/TSYR +Vulgate/SM +Vulg/M +vulnerability/SI +vulnerable/IP +vulnerably/I +vulpine +vulturelike +vulture/SM +vulturous +vulvae +vulva/M +vying +Vyky/M +WA +Waals +Wabash/M +WAC +Wacke/M +wackes +wackiness/MS +wacko/MS +wacky/RTP +Waco/M +Wac/S +wadded +wadding/SM +waddle/GRSD +Wade/M +wader/M +wade/S +wadi/SM +wad/MDRZGS +Wadsworth/M +wafer/GSMD +waffle/GMZRSD +Wafs +wafter/M +waft/SGRD +wag/DRZGS +waged/U +wager/GZMRD +wage/SM +wagged +waggery/MS +wagging +waggishness/SM +waggish/YP +waggle/SDG +waggly +Wagnerian +Wagner/M +wagoner/M +wagon/SGZMRD +wagtail/SM +Wahl/M +waif/SGDM +Waikiki/M +wailer/M +wail/SGZRD +wain/GSDM +Wain/M +wainscot/SGJD +Wainwright/M +wainwright/SM +waistband/MS +waistcoat/GDMS +waister/M +waist/GSRDM +waistline/MS +Waite/M +waiter/DMG +Waiter/M +wait/GSZJRD +Wait/MR +waitpeople +waitperson/S +waitress/GMSD +waiver/MB +waive/SRDGZ +Wakefield/M +wakefulness/MS +wakeful/PY +Wake/M +wake/MGDRSJ +waken/SMRDG +waker/M +wakeup +Waksman/M +Walbridge/M +Walcott/M +Waldemar/M +Walden/M +Waldensian +Waldheim/M +Wald/MN +Waldo/M +Waldon/M +Waldorf/M +wale/DRSMG +Wales +Walesa/M +Walford/M +Walgreen/M +waling/M +walkabout/M +walkaway/SM +walker/M +Walker/M +walk/GZSBJRD +walkie +Walkman/S +walkout/SM +walkover/SM +walkway/MS +wallaby/MS +Wallace/M +Wallache/M +wallah/M +Wallas/M +wallboard/MS +Wallenstein/M +Waller/M +wallet/SM +walleye/MSD +wallflower/MS +Wallie/M +Wallis +Walliw/M +Walloon/SM +walloper/M +walloping/M +wallop/RDSJG +wallower/M +wallow/RDSG +wallpaper/DMGS +wall/SGMRD +Wall/SMR +Wally/M +wally/S +walnut/SM +Walpole/M +Walpurgisnacht +walrus/SM +Walsh/M +Walter/M +Walther/M +Walton/M +waltzer/M +Walt/ZMR +waltz/MRSDGZ +Walworth/M +Waly/M +wampum/SM +Wanamaker/M +Wanda/M +wanderer/M +wander/JZGRD +wanderlust/SM +Wandie/M +Wandis/M +wand/MRSZ +wane/S +Waneta/M +wangler/M +wangle/RSDGZ +Wang/M +Wanids/M +Wankel/M +wanna +wannabe/S +wanned +wanner +wanness/S +wannest +wanning +wan/PGSDY +Wansee/M +Wansley/M +wanted/U +wanter/M +want/GRDSJ +wantonness/S +wanton/PGSRDY +wapiti/MS +warble/GZRSD +warbler/M +warbonnet/S +ward/AGMRDS +Warde/M +warden/DMGS +Warden/M +warder/DMGS +Ward/MN +wardrobe/MDSG +wardroom/MS +wardship/M +wards/I +warehouseman/M +warehouse/MGSRD +Ware/MG +ware/MS +warfare/SM +Warfield/M +war/GSMD +warhead/MS +Warhol/M +warhorse/SM +warily/U +warinesses/U +wariness/MS +Waring/M +warless +warlike +warlock/SM +warlord/MS +warmblooded +warmed/A +warmer/M +warmheartedness/SM +warmhearted/PY +warmish +warmness/MS +warmongering/M +warmonger/JGSM +warms/A +warmth/M +warmths +warm/YRDHPGZTS +warned/U +warner/M +Warner/M +warn/GRDJS +warning/YM +Warnock/M +warpaint +warpath/M +warpaths +warper/M +warplane/MS +warp/MRDGS +warranted/U +warranter/M +warrant/GSMDR +warranty/SDGM +warred/M +warrener/M +Warren/M +warren/SZRM +warring/M +warrior/MS +Warsaw/M +wars/C +warship/MS +warthog/S +wartime/SM +wart/MDS +warty/RT +Warwick/M +wary/URPT +Wasatch/M +washable/S +wash/AGSD +washbasin/SM +washboard/SM +washbowl/SM +Washburn/M +washcloth/M +washcloths +washday/M +washed/U +washer/GDMS +washerwoman/M +washerwomen +washing/SM +Washingtonian/S +Washington/M +Wash/M +Washoe/M +washout/SM +washrag/SM +washroom/MS +washstand/SM +washtub/MS +washy/RT +wasn't +WASP +waspishness/SM +waspish/PY +Wasp's +wasp/SM +was/S +wassail/GMDS +Wasserman/M +Wassermann/M +wastage/SM +wastebasket/SM +wastefulness/S +wasteful/YP +wasteland/MS +wastepaper/MS +waster/DG +waste/S +wastewater +wast/GZSRD +wasting/Y +wastrel/MS +Watanabe/M +watchable/U +watchband/SM +watchdogged +watchdogging +watchdog/SM +watched/U +watcher/M +watchfulness/MS +watchful/PY +watch/JRSDGZB +watchmake/JRGZ +watchmaker/M +watchman/M +watchmen +watchpoints +watchtower/MS +watchword/MS +waterbird/S +waterborne +Waterbury/M +watercolor/DMGS +watercolorist/SM +watercourse/SM +watercraft/M +watercress/SM +waterer/M +waterfall/SM +waterfowl/M +waterfront/SM +Watergate/M +waterhole/S +Waterhouse/M +wateriness/SM +watering/M +water/JGSMRD +waterless +waterlily/S +waterline/S +waterlogged +waterloo +Waterloo/SM +waterman/M +watermark/GSDM +watermelon/SM +watermill/S +waterproof/PGRDSJ +watershed/SM +waterside/MSR +watersider/M +Waters/M +waterspout/MS +watertightness/M +watertight/P +Watertown/M +waterway/MS +waterwheel/S +waterworks/M +watery/PRT +Watkins +WATS +Watson/M +wattage/SM +Watteau/M +Wattenberg/M +Watterson/M +wattle/SDGM +Watt/MS +watt/TMRS +Watusi/M +Wat/ZM +Waugh/M +Waukesha/M +Waunona/M +Waupaca/M +Waupun/M +Wausau/M +Wauwatosa/M +waveband/MS +waveform/SM +wavefront/MS +waveguide/MS +Waveland/M +wavelength/M +wavelengths +wavelet/SM +wavelike +wavenumber +waver/GZRD +wavering/YU +Waverley/M +Waverly/M +Wave/S +wave/ZGDRS +wavily +waviness/MS +wavy/SRTP +waxer/M +waxiness/MS +wax/MNDRSZG +waxwing/MS +waxwork/MS +waxy/PRT +wayfarer/MS +wayfaring/S +waylaid +Wayland/M +Waylan/M +waylayer/M +waylay/GRSZ +wayleave/MS +Waylen/M +Waylin/M +Waylon/M +Way/M +waymarked +way/MS +Wayne/M +Waynesboro/M +wayside/MS +waywardness/S +wayward/YP +WC +we +weakener/M +weaken/ZGRD +weakfish/SM +weakish +weakliness/M +weakling/SM +weakly/RTP +weakness/MS +weak/TXPYRN +weal/MHS +wealthiness/MS +wealth/M +wealths +wealthy/PTR +weaner/M +weanling/M +wean/RDGS +weapon/GDMS +weaponless +weaponry/MS +wearable/S +wearer/M +wearied/U +wearily +weariness/MS +wearing/Y +wearisomeness/M +wearisome/YP +wear/RBSJGZ +wearying/Y +weary/TGPRSD +weasel/SGMDY +weatherbeaten +weathercock/SDMG +weatherer/M +Weatherford/M +weathering/M +weatherize/GSD +weatherman/M +weather/MDRYJGS +weathermen +weatherperson/S +weatherproof/SGPD +weatherstripped +weatherstripping/S +weatherstrip/S +weaver/M +Weaver/M +weaves/A +weave/SRDGZ +weaving/A +webbed +Webber/M +webbing/MS +Webb/RM +weber/M +Weber/M +Webern/M +webfeet +webfoot/M +Web/MR +website/S +web/SMR +Webster/MS +Websterville/M +we'd +wedded/A +Weddell/M +wedder +wedding/SM +wedge/SDGM +wedgie/RST +Wedgwood/M +wedlock/SM +Wed/M +Wednesday/SM +wed/SA +weeder/M +weediness/M +weedkiller/M +weedless +wee/DRST +weed/SGMRDZ +weedy/TRP +weeing +weekday/MS +weekender/M +weekend/SDRMG +weekly/S +weeknight/SM +Weeks/M +week/SYM +weenie/M +ween/SGD +weeny/RSMT +weeper/M +weep/SGZJRD +weepy/RST +weevil/MS +weft/SGMD +Wehr/M +Weibull/M +Weidar/M +Weider/M +Weidman/M +Weierstrass/M +weighed/UA +weigher/M +weigh/RDJG +weighs/A +weighted/U +weighter/M +weightily +weightiness/SM +weighting/M +weight/JMSRDG +weightlessness/SM +weightless/YP +weightlifter/S +weightlifting/MS +weighty/TPR +Weill/M +Wei/M +Weinberg/M +Weiner/M +Weinstein/M +weirdie/SM +weirdness/MS +weirdo/SM +weird/YRDPGTS +weir/SDMG +Weisenheimer/M +Weiss/M +Weissman/M +Weissmuller/M +Weizmann/M +Welbie/M +Welby/M +Welcher/M +Welches +welcomeness/M +welcome/PRSDYG +welcoming/U +welder/M +Weldon/M +weld/SBJGZRD +Weldwood/M +welfare/SM +welkin/SM +we'll +Welland/M +wellbeing/M +Weller/M +Wellesley/M +Welles/M +wellhead/SM +Wellington/MS +wellington/S +Wellman/M +wellness/MS +well/SGPD +Wells/M +wellspring/SM +Wellsville/M +Welmers/M +Welsh +welsher/M +Welshman/M +Welshmen +welsh/RSDGZ +Welshwoman/M +Welshwomen +welter/GD +welterweight/MS +welt/GZSMRD +wencher/M +wench/GRSDM +Wendall/M +Wenda/M +wend/DSG +Wendeline/M +Wendell/M +Wendel/M +Wendie/M +Wendi/M +Wendye/M +Wendy/M +wen/M +Wenonah/M +Wenona/M +went +Wentworth/M +wept/U +were +we're +weren't +werewolf/M +werewolves +Werner/M +Wernher/M +Werther/M +werwolf's +Wes +Wesleyan +Wesley/M +Wessex/M +Wesson/M +westbound +Westbrooke/M +Westbrook/M +Westchester/M +wester/DYG +westerly/S +westerner/M +westernization/MS +westernize/GSD +westernmost +Western/ZRS +western/ZSR +Westfield/M +Westhampton/M +Westinghouse/M +westing/M +Westleigh/M +Westley/M +Westminster/M +Westmore/M +West/MS +Weston/M +Westphalia/M +Westport/M +west/RDGSM +westward/S +Westwood/M +wetback/MS +wetland/S +wetness/MS +wet/SPY +wettable +wetter/S +wettest +wetting +we've +Weyden/M +Weyerhauser/M +Weylin/M +Wezen/M +WFF +whacker/M +whack/GZRDS +whaleboat/MS +whalebone/SM +whale/GSRDZM +Whalen/M +whaler/M +whaling/M +whammed +whamming/M +wham/MS +whammy/S +wharf/SGMD +Wharton/M +wharves +whatchamacallit/MS +what'd +whatever +what/MS +whatnot/MS +what're +whatsoever +wheal/MS +wheatgerm +Wheaties/M +Wheatland/M +wheat/NMXS +Wheaton/M +Wheatstone/M +wheedle/ZDRSG +wheelbarrow/GSDM +wheelbase/MS +wheelchair/MS +wheeler/M +Wheeler/M +wheelhouse/SM +wheelie/MS +wheeling/M +Wheeling/M +Wheelock/M +wheel/RDMJSGZ +wheelwright/MS +whee/S +wheeze/SDG +wheezily +wheeziness/SM +wheezy/PRT +Whelan/M +whelk/MDS +Wheller/M +whelm/DGS +whelp/DMGS +whence/S +whenever +when/S +whensoever +whereabout/S +whereas/S +whereat +whereby +where'd +wherefore/MS +wherein +where/MS +whereof +whereon +where're +wheresoever +whereto +whereupon +wherever +wherewith +wherewithal/SM +wherry/DSGM +whether +whet/S +whetstone/MS +whetted +whetting +whew/GSD +whey/MS +which +whichever +whiff/GSMD +whiffle/DRSG +whiffler/M +whiffletree/SM +whig/S +Whig/SM +while/GSD +whilom +whilst +whimmed +whimming +whimper/DSG +whimsey's +whimsicality/MS +whimsical/YP +whim/SM +whimsy/TMDRS +whine/GZMSRD +whining/Y +whinny/GTDRS +whiny/RT +whipcord/SM +whiplash/SDMG +Whippany/M +whipped +whipper/MS +whippersnapper/MS +whippet/MS +whipping/SM +Whipple/M +whippletree/SM +whippoorwill/SM +whipsaw/GDMS +whips/M +whip/SM +whirligig/MS +whirlpool/MS +whirl/RDGS +whirlwind/MS +whirlybird/MS +whirly/MS +whirred +whirring +whir/SY +whisker/DM +whiskery +whiskey/SM +whisk/GZRDS +whisperer/M +whisper/GRDJZS +whispering/YM +whist/GDMS +whistleable +whistle/DRSZG +whistler/M +Whistler/M +whistling/M +Whitaker/M +Whitby/M +Whitcomb/M +whitebait/M +whitecap/MS +whiteface/M +Whitefield/M +whitefish/SM +Whitehall/M +Whitehead/M +whitehead/S +Whitehorse/M +Whiteleaf/M +Whiteley/M +White/MS +whitener/M +whiteness/MS +whitening/M +whiten/JZDRG +whiteout/S +white/PYS +whitespace +whitetail/S +whitewall/SM +whitewash/GRSDM +whitewater +Whitewater/M +whitey/MS +Whitfield/M +whither/DGS +whitier +whitiest +whiting/M +whitish +Whitley/M +Whitlock/M +Whit/M +Whitman/M +Whitney/M +whit/SJGTXMRND +Whitsunday/MS +Whittaker/M +whitter +Whittier +whittle/JDRSZG +whittler/M +whiz +whizkid +whizzbang/S +whizzed +whizzes +whizzing +WHO +whoa/S +who'd +whodunit/SM +whoever +wholegrain +wholeheartedness/MS +wholehearted/PY +wholemeal +wholeness/S +wholesale/GZMSRD +wholesaler/M +wholesomeness/USM +wholesome/UYP +whole/SP +wholewheat +who'll +wholly +whom +who/M +whomever +whomsoever +whoopee/S +whooper/M +whoop/SRDGZ +whoosh/DSGM +whop +whopper/MS +whopping/S +who're +whorehouse/SM +whoreish +whore/SDGM +whorish +whorl/SDM +whose +whoso +whosoever +who've +why +whys +WI +Wiatt/M +Wichita/M +wickedness/MS +wicked/RYPT +wicker/M +wickerwork/MS +wicketkeeper/SM +wicket/SM +wick/GZRDMS +wicking/M +widemouthed +widener/M +wideness/S +widen/SGZRD +wide/RSYTP +widespread +widgeon's +widget/SM +widower/M +widowhood/S +widow/MRDSGZ +width/M +widths +widthwise +Wieland/M +wielder/M +wield/GZRDS +Wiemar/M +wiener/SM +wienie/SM +Wier/M +Wiesel/M +wife/DSMYG +wifeless +wifely/RPT +wigeon/MS +wigged +wigging/M +Wiggins +wiggler/M +wiggle/RSDGZ +wiggly/RT +wight/SGDM +wiglet/S +wigmaker +wig/MS +Wigner/M +wigwagged +wigwagging +wigwag/S +wigwam/MS +Wilberforce/M +Wilbert/M +Wilbur/M +Wilburn/M +Wilburt/M +Wilcox/M +Wilda/M +wildcat/SM +wildcatted +wildcatter/MS +wildcatting +wildebeest/SM +Wilde/MR +Wilden/M +Wilder/M +wilderness/SM +wilder/P +wildfire/MS +wildflower/S +wildfowl/M +wilding/M +wildlife/M +wildness/MS +Wildon/M +wild/SPGTYRD +wile/DSMG +Wileen/M +Wilek/M +Wiley/M +Wilford/M +Wilfred/M +Wilfredo/M +Wilfrid/M +wilfulness's +Wilhelmina/M +Wilhelmine/M +Wilhelm/M +Wilie/M +wilily +wiliness/MS +Wilkerson/M +Wilkes/M +Wilkins/M +Wilkinson/M +Willabella/M +Willa/M +Willamette/M +Willamina/M +Willard/M +Willcox/M +Willdon/M +willed/U +Willem/M +Willemstad/M +willer/M +Willetta/M +Willette/M +Willey/M +willfulness/S +willful/YP +Williamsburg/M +William/SM +Williamson/M +Willied/M +Willie/M +willies +Willi/MS +willinger +willingest +willingness's +willingness/US +willing/UYP +Willisson/M +williwaw/MS +Will/M +Willoughby/M +willower/M +Willow/M +willow/RDMSG +willowy/TR +willpower/MS +will/SGJRD +Willy/SDM +Willyt/M +Wilma/M +Wilmar/M +Wilmer/M +Wilmette/M +Wilmington/M +Wilona/M +Wilone/M +Wilow/M +Wilshire/M +Wilsonian +Wilson/M +wilt/DGS +Wilt/M +Wilton/M +wily/PTR +Wimbledon/M +wimp/GSMD +wimpish +wimple/SDGM +wimpy/RT +wince/SDG +Winchell/M +wincher/M +winchester/M +Winchester/MS +winch/GRSDM +windbag/SM +windblown +windbreak/MZSR +windburn/GSMD +winded +winder/UM +windfall/SM +windflower/MS +Windham/M +Windhoek/M +windily +windiness/SM +winding/MS +windjammer/SM +windlass/GMSD +windless/YP +windmill/GDMS +window/DMGS +windowless +windowpane/SM +Windows +windowsill/SM +windpipe/SM +windproof +windrow/GDMS +wind's +winds/A +windscreen/MS +windshield/SM +windsock/MS +Windsor/MS +windstorm/MS +windsurf/GZJSRD +windswept +windup/MS +wind/USRZG +Windward/M +windward/SY +Windy/M +windy/TPR +wineglass/SM +winegrower/SM +Winehead/M +winemake +winemaster +wine/MS +winery/MS +Winesap/M +wineskin/M +Winfield/M +Winfred/M +Winfrey/M +wingback/M +wingding/MS +wingeing +winger/M +wing/GZRDM +wingless +winglike +wingman +wingmen +wingspan/SM +wingspread/MS +wingtip/S +Winifield/M +Winifred/M +Wini/M +winker/M +wink/GZRDS +winking/U +Winkle/M +winkle/SDGM +winless +Win/M +winnable +Winnah/M +Winna/M +Winnebago/M +Winne/M +winner/MS +Winnetka/M +Winnie/M +Winnifred/M +Winni/M +winning/SY +Winnipeg/M +Winn/M +winnow/SZGRD +Winny/M +Winograd/M +wino/MS +Winonah/M +Winona/M +Winooski/M +Winsborough/M +Winsett/M +Winslow/M +winsomeness/SM +winsome/PRTY +Winston/M +winterer/M +wintergreen/SM +winterize/GSD +Winters +winter/SGRDYM +wintertime/MS +Winthrop/M +wintriness/M +wintry/TPR +winy/RT +win/ZGDRS +wipe/DRSZG +wiper/M +wirehair/MS +wireless/MSDG +wireman/M +wiremen +wirer/M +wire's +wires/A +wiretap/MS +wiretapped +wiretapper/SM +wiretapping +wire/UDA +wiriness/S +wiring/SM +wiry/RTP +Wisc +Wisconsinite/SM +Wisconsin/M +wisdoms +wisdom/UM +wiseacre/MS +wisecrack/GMRDS +wised +wisely/TR +Wise/M +wiseness +wisenheimer/M +Wisenheimer/M +wises +wise/URTY +wishbone/MS +wishfulness/M +wishful/PY +wish/GZSRD +wishy +wising +Wis/M +wisp/MDGS +wispy/RT +wist/DGS +wisteria/SM +wistfulness/MS +wistful/PY +witchcraft/SM +witchdoctor/S +witchery/MS +witch/SDMG +withal +withdrawal/MS +withdrawer/M +withdrawnness/M +withdrawn/P +withdraw/RGS +withdrew +withe/M +wither/GDJ +withering/Y +Witherspoon/M +with/GSRDZ +withheld +withholder/M +withhold/SJGZR +within/S +without/S +withs +withstand/SG +withstood +witlessness/MS +witless/PY +Wit/M +witness/DSMG +witnessed/U +wit/PSM +witted +witter/G +Wittgenstein/M +witticism/MS +Wittie/M +wittily +wittiness/SM +wittings +witting/UY +Witt/M +Witty/M +witty/RTP +Witwatersrand/M +wive/GDS +wives/M +wizard/MYS +wizardry/MS +wizen/D +wiz's +wk/Y +Wm/M +WNW +woad/MS +wobble/GSRD +wobbler/M +wobbliness/S +wobbly/PRST +Wodehouse/M +woebegone/P +woefuller +woefullest +woefulness/SM +woeful/PY +woe/PSM +woke +wok/SMN +Wolcott/M +wold/MS +Wolfe/M +wolfer/M +Wolff/M +Wolfgang/M +wolfhound/MS +Wolfie/M +wolfishness/M +wolfish/YP +Wolf/M +wolfram/MS +wolf/RDMGS +Wolfy/M +Wollongong/M +Wollstonecraft/M +Wolsey/M +Wolverhampton/M +wolverine/SM +Wolverton/M +wolves/M +woman/GSMYD +womanhood/MS +womanish +womanized/U +womanizer/M +womanize/RSDZG +womanizes/U +womankind/M +womanlike +womanliness/SM +womanly/PRT +wombat/MS +womb/SDM +womenfolk/MS +women/MS +wonderer/M +wonderfulness/SM +wonderful/PY +wonder/GLRDMS +wondering/Y +wonderland/SM +wonderment/SM +wondrousness/M +wondrous/YP +Wong/M +wonk/S +wonky/RT +wonned +wonning +won/SG +won't +wontedness/MU +wonted/PUY +wont/SGMD +Woodard/M +Woodberry/M +woodbine/SM +woodblock/S +Woodbury/M +woodcarver/S +woodcarving/MS +woodchopper/SM +woodchuck/MS +woodcock/MS +woodcraft/MS +woodcut/SM +woodcutter/MS +woodcutting/MS +woodenness/SM +wooden/TPRY +woodgrain/G +woodhen +Woodhull/M +Woodie/M +woodiness/MS +woodland/SRM +Woodlawn/M +woodlice +woodlot/S +woodlouse/M +woodman/M +Woodman/M +woodmen +woodpecker/SM +woodpile/SM +Woodrow/M +woodruff/M +woo/DRZGS +woodshedded +woodshedding +woodshed/SM +woodside +Wood/SM +woodsman/M +woodsmen +wood/SMNDG +woodsmoke +woods/R +Woodstock/M +woodsy/TRP +Woodward/MS +woodwind/S +woodworker/M +woodworking/M +woodwork/SMRGZJ +woodworm/M +woodyard +Woody/M +woody/TPSR +woofer/M +woof/SRDMGZ +Woolf/M +woolgatherer/M +woolgathering/M +woolgather/RGJ +woolliness/MS +woolly/RSPT +Woolongong/M +wool/SMYNDX +Woolworth/M +Woonsocket/M +Wooster/M +Wooten/M +woozily +wooziness/MS +woozy/RTP +wop/MS! +Worcestershire/M +Worcester/SM +wordage/SM +word/AGSJD +wordbook/MS +Worden/M +wordily +wordiness/SM +wording/AM +wordless/Y +wordplay/SM +word's +Wordsworth/M +wordy/TPR +wore +workability's +workability/U +workableness/M +workable/U +workably +workaday +workaholic/S +workaround/SM +workbench/MS +workbook/SM +workday/SM +worked/A +worker/M +workfare/S +workforce/S +work/GZJSRDMB +workhorse/MS +workhouse/SM +working/M +workingman/M +workingmen +workingwoman/M +workingwomen +workload/SM +workmanlike +Workman/M +workman/MY +workmanship/MS +workmate/S +workmen/M +workout/SM +workpiece/SM +workplace/SM +workroom/MS +works/A +worksheet/S +workshop/MS +workspace/S +workstation/MS +worktable/SM +worktop/S +workup/S +workweek/SM +worldlier +worldliest +worldliness/USM +worldly/UP +worldwide +world/ZSYM +wormer/M +wormhole/SM +worm/SGMRD +Worms/M +wormwood/SM +wormy/RT +worn/U +worried/Y +worrier/M +worriment/MS +worrisome/YP +worrying/Y +worrywart/SM +worry/ZGSRD +worsen/GSD +worse/SR +worshiper/M +worshipfulness/M +worshipful/YP +worship/ZDRGS +worsted/MS +worst/SGD +worth/DG +worthily/U +worthinesses/U +worthiness/SM +Worthington/M +worthlessness/SM +worthless/PY +Worth/M +worths +worthwhile/P +Worthy/M +worthy/UTSRP +wort/SM +wost +wot +Wotan/M +wouldn't +would/S +wouldst +would've +wound/AU +wounded/U +wounder +wounding +wounds +wound's +wove/A +woven/AU +wovens +wow/SDG +Wozniak/M +WP +wpm +wrack/SGMD +wraith/M +wraiths +Wrangell/M +wrangle/GZDRS +wrangler/M +wraparound/S +wrap/MS +wrapped/U +wrapper/MS +wrapping/SM +wraps/U +wrasse/SM +wrathful/YP +wrath/GDM +wraths +wreak/SDG +wreathe +wreath/GMDS +wreaths +wreckage/MS +wrecker/M +wreck/GZRDS +wrenching/Y +wrench/MDSG +wren/MS +Wren/MS +Wrennie/M +wrester/M +wrestle/JGZDRS +wrestler/M +wrestling/M +wrest/SRDG +wretchedness/SM +wretched/TPYR +wretch/MDS +wriggle/DRSGZ +wriggler/M +wriggly/RT +Wright/M +wright/MS +Wrigley/M +wringer/M +wring/GZRS +wrinkled/U +wrinkle/GMDS +wrinkly/RST +wristband/SM +wrist/MS +wristwatch/MS +writable/U +write/ASBRJG +writer/MA +writeup +writhe/SDG +writing/M +writ/MRSBJGZ +written/UA +Wroclaw +wrongdoer/MS +wrongdoing/MS +wronger/M +wrongfulness/MS +wrongful/PY +wrongheadedness/MS +wrongheaded/PY +wrongness/MS +wrong/PSGTYRD +Wronskian/M +wrote/A +wroth +wrought/I +wrung +wry/DSGY +wryer +wryest +wryness/SM +W's +WSW +wt +W/T +Wuhan/M +Wu/M +Wurlitzer/M +wurst/SM +wuss/S +wussy/TRS +WV +WW +WWI +WWII +WWW +w/XTJGV +WY +Wyatan/M +Wyatt/M +Wycherley/M +Wycliffe/M +Wye/MH +Wyeth/M +Wylie/M +Wylma/M +Wyman/M +Wyndham/M +Wyn/M +Wynne/M +Wynnie/M +Wynn/M +Wynny/M +Wyo/M +Wyomingite/SM +Wyoming/M +WYSIWYG +x +X +Xanadu +Xanthippe/M +Xanthus/M +Xaviera/M +Xavier/M +Xebec/M +Xe/M +XEmacs/M +Xenakis/M +Xena/M +Xenia/M +Xenix/M +xenon/SM +xenophobe/MS +xenophobia/SM +xenophobic +Xenophon/M +Xenos +xerographic +xerography/MS +xerox/GSD +Xerox/MGSD +Xerxes/M +Xever/M +Xhosa/M +Xi'an +Xian/S +Xiaoping/M +xii +xiii +xi/M +Ximenes/M +Ximenez/M +Ximian/SM +Xingu/M +xis +xiv +xix +XL +Xmas/SM +XML +Xochipilli/M +XOR +X's +XS +xterm/M +Xuzhou/M +xv +xvi +xvii +xviii +xx +XXL +xylem/SM +xylene/M +Xylia/M +Xylina/M +xylophone/MS +xylophonist/S +Xymenes/M +Y +ya +yacc/M +Yacc/M +yachting/M +yachtsman +yachtsmen +yachtswoman/M +yachtswomen +yacht/ZGJSDM +yack's +Yagi/M +yahoo/MS +Yahweh/M +Yakima/M +yakked +yakking +yak/SM +Yakut/M +Yakutsk/M +Yale/M +Yalies/M +y'all +Yalonda/M +Yalow/M +Yalta/M +Yalu/M +Yamaha/M +yammer/RDZGS +Yamoussoukro +yam/SM +Yanaton/M +Yance/M +Yancey/M +Yancy/M +Yang/M +Yangon +yang/S +Yangtze/M +Yankee/SM +yank/GDS +Yank/MS +Yaounde/M +yapped +yapping +yap/S +Yaqui/M +yardage/SM +yardarm/SM +Yardley/M +Yard/M +yardman/M +yardmaster/S +yardmen +yard/SMDG +yardstick/SM +yarmulke/SM +yarn/SGDM +Yaroslavl/M +yarrow/MS +Yasmeen/M +Yasmin/M +Yates +yaw/DSG +yawl/SGMD +yawner/M +yawn/GZSDR +yawning/Y +Yb/M +yd +Yeager/M +yeah +yeahs +yearbook/SM +yearling/M +yearlong +yearly/S +yearner/M +yearning/MY +yearn/JSGRD +year/YMS +yea/S +yeastiness/M +yeast/SGDM +yeasty/PTR +Yeats/M +yecch +yegg/MS +Yehudi/M +Yehudit/M +Yekaterinburg/M +Yelena/M +yell/GSDR +yellowhammers +yellowish +Yellowknife/M +yellowness/MS +Yellowstone/M +yellow/TGPSRDM +yellowy +yelper/M +yelp/GSDR +Yeltsin +Yemeni/S +Yemenite/SM +Yemen/M +Yenisei/M +yenned +yenning +yen/SM +Yentl/M +yeomanry/MS +yeoman/YM +yeomen +yep/S +Yerevan/M +Yerkes/M +Yesenia/M +yeshiva/SM +yes/S +yessed +yessing +yesterday/MS +yesteryear/SM +yet +ye/T +yeti/SM +Yetta/M +Yettie/M +Yetty/M +Yevette/M +Yevtushenko/M +yew/SM +y/F +Yggdrasil/M +Yiddish/M +yielded/U +yielding/U +yield/JGRDS +yikes +yin/S +yipe/S +yipped +yippee/S +yipping +yip/S +YMCA +YMHA +Ymir/M +YMMV +Ynes/M +Ynez/M +yo +Yoda/M +yodeler/M +yodel/SZRDG +Yoder/M +yoga/MS +yoghurt's +yogi/MS +yogurt/SM +yoke/DSMG +yoked/U +yokel/SM +yokes/U +yoking/U +Yoknapatawpha/M +Yokohama/M +Yoko/M +Yolanda/M +Yolande/M +Yolane/M +Yolanthe/M +yolk/DMS +yon +yonder +Yong/M +Yonkers/M +yore/MS +Yorgo/MS +Yorick/M +Yorke/M +Yorker/M +yorker/SM +Yorkshire/MS +Yorktown/M +York/ZRMS +Yoruba/M +Yosemite/M +Yoshiko/M +Yoshi/M +Yost/M +you'd +you'll +youngish +Young/M +youngster/MS +Youngstown/M +young/TRYP +you're +your/MS +yourself +yourselves +you/SH +youthfulness/SM +youthful/YP +youths +youth/SM +you've +Yovonnda/M +yow +yowl/GSD +Ypres/M +Ypsilanti/M +yr +yrs +Y's +Ysabel/M +YT +ytterbium/MS +yttrium/SM +yuan/M +Yuba/M +Yucatan +yucca/MS +yuck/GSD +yucky/RT +Yugo/M +Yugoslavia/M +Yugoslavian/S +Yugoslav/M +Yuh/M +Yuki/M +yukked +yukking +Yukon/M +yuk/S +yule/MS +Yule/MS +yuletide/MS +Yuletide/S +Yul/M +Yulma/M +yum +Yuma/M +yummy/TRS +Yunnan/M +yuppie/SM +yup/S +Yurik/M +Yuri/M +yurt/SM +Yves/M +Yvette/M +Yvon/M +Yvonne/M +Yvor/M +YWCA +YWHA +Zabrina/M +Zaccaria/M +Zachariah/M +Zacharia/SM +Zacharie/M +Zachary/M +Zacherie/M +Zachery/M +Zach/M +Zackariah/M +Zack/M +zagging +Zagreb/M +zag/S +Zahara/M +Zaire/M +Zairian/S +Zak/M +Zambezi/M +Zambia/M +Zambian/S +Zamboni +Zamenhof/M +Zamora/M +Zandra/M +Zane/M +Zaneta/M +zaniness/MS +Zan/M +Zanuck/M +zany/PDSRTG +Zanzibar/M +Zapata/M +Zaporozhye/M +Zappa/M +zapped +zapper/S +zapping +zap/S +Zarah/M +Zara/M +Zared/M +Zaria/M +Zarla/M +Zealand/M +zeal/MS +zealot/MS +zealotry/MS +zealousness/SM +zealous/YP +Zea/M +Zebadiah/M +Zebedee/M +Zeb/M +zebra/MS +Zebulen/M +Zebulon/M +zebu/SM +Zechariah/M +Zedekiah/M +Zed/M +Zedong/M +zed/SM +Zeffirelli/M +Zeiss/M +zeitgeist/S +Zeke/M +Zelda/M +Zelig/M +Zellerbach/M +Zelma/M +Zena/M +Zenger/M +Zenia/M +zenith/M +zeniths +Zen/M +Zennist/M +Zeno/M +Zephaniah/M +zephyr/MS +Zephyrus/M +Zeppelin's +zeppelin/SM +Zerk/M +zeroed/M +zeroing/M +zero/SDHMG +zestfulness/MS +zestful/YP +zest/MDSG +zesty/RT +zeta/SM +zeugma/M +Zeus/M +Zhdanov/M +Zhengzhou +Zhivago/M +Zhukov/M +Zia/M +Zibo/M +Ziegfeld/MS +Ziegler/M +zig +zigged +zigging +Ziggy/M +zigzagged +zigzagger +zigzagging +zigzag/MS +zilch/S +zillion/MS +Zilvia/M +Zimbabwean/S +Zimbabwe/M +Zimmerman/M +zincked +zincking +zinc/MS +zing/GZDRM +zingy/RT +zinnia/SM +Zionism/MS +Zionist/MS +Zion/SM +zip/MS +zipped/U +zipper/GSDM +zipping/U +zippy/RT +zips/U +zirconium/MS +zircon/SM +Zita/M +Zitella/M +zither/SM +zit/S +zloty/SM +Zn/M +zodiacal +zodiac/SM +Zoe/M +Zola/M +Zollie/M +Zolly/M +Zomba/M +zombie/SM +zombi's +zonal/Y +Zonda/M +Zondra/M +zoned/A +zone/MYDSRJG +zones/A +zoning/A +zonked +Zonnya/M +zookeepers +zoological/Y +zoologist/SM +zoology/MS +zoom/DGS +zoophyte/SM +zoophytic +zoo/SM +Zorah/M +Zora/M +Zorana/M +Zorina/M +Zorine/M +Zorn/M +Zoroaster/M +Zoroastrianism/MS +Zoroastrian/S +Zorro/M +Zosma/M +zounds/S +Zr/M +Zs +Zsazsa/M +Zsigmondy/M +z/TGJ +Zubenelgenubi/M +Zubeneschamali/M +zucchini/SM +Zukor/M +Zulema/M +Zululand/M +Zulu/MS +Zuni/S +Zrich/M +Zuzana/M +zwieback/MS +Zwingli/M +Zworykin/M +Z/X +zydeco/S +zygote/SM +zygotic +zymurgy/S diff --git a/config/Typora/typora-dictionaries/fr-LICENSE b/config/Typora/typora-dictionaries/fr-LICENSE new file mode 100644 index 0000000..64e2c93 --- /dev/null +++ b/config/Typora/typora-dictionaries/fr-LICENSE @@ -0,0 +1,73 @@ +_______________________________________________________________________________ + + DICTIONNAIRES ORTHOGRAPHIQUES FRANÇAIS + version 6.3 + + Olivier R. - dicollectefreefr + Dicollecte : http://www.dicollecte.org/ + + Licence : + MPL : Mozilla Public License + version 2.0 -- http://www.mozilla.org/MPL/2.0/ + + Ce dictionnaire ne peut fonctionner qu’avec un logiciel utilisant le + correcteur Hunspell : OpenOffice.org 3.2+, Firefox 4+, Thunderbird 5+ + + Principaux contributeurs : + - Jean-Luc T. ; + - Sylvain P. ; + - Laurent Dubois ; + - Dominique Pellé ; + - Pierre Poisson ; + - Pierre-Yves ; + - Pierre Choffardet ; + - Leywen ; + - Romain Muller et Serge Bibauw, de l’association RENOUVO, grâce à qui + la nouvelle orthographe et ses anciennes variantes ont pu être établies ; + - Chantal Contant, pour ses recherches sur la réforme de 1990 ; + - Benoît Sagot, qui nous a autorisé à comparer notre lexique avec Lefff, + ce qui a mis en évidence des dizaines d’erreurs d’étiquetage grammatical ; + - Philipp Burgess, pour la normalisation Unicode avec Hunspell. + + Merci aussi à tous ceux qui ont apporté leur pierre à l’édifice. + http://www.dicollecte.org/members.php?prj=fr + + Pour participer à l’amélioration du dictionnaire, allez sur : + http://www.dicollecte.org/home.php?prj=fr + +_______________________________________________________________________________ + + À propos des différents dictionnaires français +_______________________________________________________________________________ + + En 1990, le Conseil supérieur à la langue française et l’Académie française + ont proposé une réforme de l’orthographe qui concerne plusieurs milliers de + mots. L’emploi des nouvelles graphies n’est pas obligatoire. Les anciennes + comme les nouvelles sont considérées comme correctes. + + Pour en savoir plus sur la réforme de 1990 : + http://www.renouvo.org/regles.php + http://www.orthographe-recommandee.info/ + + Malgré les rectifications modestes apportées par cette réforme, la nouvelle + orthographe suscite beaucoup de polémiques. Afin de satisfaire les exigences + de chacun, quatre dictionnaires existent, respectant différemment cette + réforme. + + Dictionnaire “Moderne” + Ce dictionnaire propose une sélection des graphies classiques et + réformées, suivant la lente évolution de l’orthographe actuelle. Ce + dictionnaire contient les graphies les moins polémiques de la réforme. + + Dictionnaire “Classique” [recommandé] + Ce dictionnaire est une extension du dictionnaire «Moderne» et propose + en sus des graphies alternatives, parfois encore très usitées, parfois + tombées en désuétude. + + Dictionnaire “Réforme 1990” + Ce dictionnaire ne connaît que les graphies nouvelles des mots concernés + par la réforme de 1990. + + Dictionnaire “Toutes variantes” + Ce dictionnaire contient les nouvelles et les anciennes graphies des + mots concernés par la réforme de 1990. diff --git a/config/Typora/typora-dictionaries/fr.aff b/config/Typora/typora-dictionaries/fr.aff new file mode 100644 index 0000000..afe65ab --- /dev/null +++ b/config/Typora/typora-dictionaries/fr.aff @@ -0,0 +1,8975 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +# AFFIXES DU DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “CLASSIQUE” v6.3 +# par Olivier R. -- licence MPL 2.0 +# Généré le 20-08-2018 à 11:51 +# Pour améliorer le dictionnaire, allez sur http://www.dicollecte.org/ + + + +SET UTF-8 + +WORDCHARS -’'1234567890. + + +TRY esntiarulodcpmévqfgbhàxèjyêMILzACçôîPâùJFSûBVœRDGNETHXkïOwKWYUëQÉZŒüãÎáöóÈíæÅñäśńÿ + + +MAP 25 +MAP aàâäAÀÂÄ +MAP eéèêëEÉÈÊË +MAP iîïyIÎÏY +MAP oôöOÔÖ +MAP uùûüUÙÛÜ +MAP cçCÇ +MAP bB +MAP dD +MAP fF +MAP gG +MAP hH +MAP jJ +MAP kK +MAP lL +MAP mM +MAP nN +MAP pP +MAP qQ +MAP rR +MAP sS +MAP tT +MAP vV +MAP wW +MAP xX +MAP zZ + +REP 82 +REP ^Ca$ Ça +REP ^l l' +REP ^d d' +REP ^n n' +REP ^s s' +REP ^j j' +REP ^m m' +REP ^t t' +REP ^c c' +REP f ph +REP ph f +REP c qu +REP qu c +REP k qu +REP qu k +REP x ct +REP ct x +REP bb b +REP b bb +REP cc c +REP c cc +REP ff f +REP f ff +REP ll l +REP l ll +REP mm m +REP m mm +REP nn n +REP n nn +REP pp p +REP p pp +REP rr r +REP r rr +REP ss s +REP s ss +REP ss c +REP c ss +REP ss ç +REP ç ss +REP tt t +REP t tt +REP œ oe +REP oe œ +REP æ ae +REP ae æ +REP ai é +REP é ai +REP ai è +REP è ai +REP ai ê +REP ê ai +REP ei é +REP é ei +REP ei è +REP è ei +REP ei ê +REP ê ei +REP o au +REP au o +REP o eau +REP eau o +REP ett èt +REP èt ett +REP ell èl +REP èl ell +REP t th +REP th t +REP ième$ e +REP ème$ e +REP è$ e +REP mn$ min +REP ogue$ ogiste +REP ogiste$ ogue +REP disez$ dites +REP fesez$ faites +REP faisez$ faites +REP puit puits +REP sanctionnable punissable +REP questionnable discutable +REP antitartre détartrant +REP email courriel +REP construirent construisirent + + + + +KEY azertyuiop|qsdfghjklmù|wxcvbn|aéz|yèu|iço|oàp|aqz|zse|edr|rft|tgy|yhu|uji|iko|olpm|qws|sxd|dcf|fvg|gbh|hnj + +ICONV 42 +ICONV ’ ' +ICONV ʼ ' +ICONV ffi ffi +ICONV ffl ffl +ICONV ff ff +ICONV ſt ft +ICONV fi fi +ICONV fl fl +ICONV st st +ICONV ſ s +ICONV à à +ICONV â â +ICONV ä ä +ICONV é é +ICONV è è +ICONV ê ê +ICONV ë ë +ICONV î î +ICONV ï ï +ICONV ô ô +ICONV ö ö +ICONV ù ù +ICONV û û +ICONV ü ü +ICONV ÿ ÿ +ICONV ç ç +ICONV À À +ICONV   +ICONV Ä Ä +ICONV É É +ICONV È È +ICONV Ê Ê +ICONV Ë Ë +ICONV Î Î +ICONV Ï Ï +ICONV Ô Ô +ICONV Ö Ö +ICONV Ù Ù +ICONV Û Û +ICONV Ü Ü +ICONV Ÿ Ÿ +ICONV Ç Ç + +OCONV 1 +OCONV ' ’ + + + +FLAG long + +FULLSTRIP + +NEEDAFFIX () + +FORBIDDENWORD {} + +CIRCUMFIX ** + +KEEPCASE || + +NOSUGGEST -- + + + +BREAK 7 +BREAK - +BREAK . +BREAK · +BREAK ^' +BREAK ^‘ +BREAK '$ +BREAK ’$ + + + + + + +PFX L' Y 34 +PFX L' 0 l' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] +PFX L' a l'A a +PFX L' à l'À à +PFX L' â l' â +PFX L' e l'E e +PFX L' é l'É é +PFX L' è l'È è +PFX L' ê l'Ê ê +PFX L' i l'I i +PFX L' î l'Î î +PFX L' o l'O o +PFX L' ô l'Ô ô +PFX L' u l'U u +PFX L' y l'Y y +PFX L' h l'H h +PFX L' œ l'Œ œ +PFX L' æ l'Æ æ +PFX L' 0 L' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] +PFX L' a L'A a +PFX L' à L'À à +PFX L' â L' â +PFX L' e L'E e +PFX L' é L'É é +PFX L' è L'È è +PFX L' ê L'Ê ê +PFX L' i L'I i +PFX L' î L'Î î +PFX L' o L'O o +PFX L' ô L'Ô ô +PFX L' u L'U u +PFX L' y L'Y y +PFX L' h L'H h +PFX L' œ L'Œ œ +PFX L' æ L'Æ æ + +PFX D' Y 34 +PFX D' 0 d' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] +PFX D' a d'A a +PFX D' à d'À à +PFX D' â d' â +PFX D' e d'E e +PFX D' é d'É é +PFX D' è d'È è +PFX D' ê d'Ê ê +PFX D' i d'I i +PFX D' î d'Î î +PFX D' o d'O o +PFX D' ô d'Ô ô +PFX D' u d'U u +PFX D' y d'Y y +PFX D' h d'H h +PFX D' œ d'Œ œ +PFX D' æ d'Æ æ +PFX D' 0 D' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] +PFX D' a D'A a +PFX D' à D'À à +PFX D' â D' â +PFX D' e D'E e +PFX D' é D'É é +PFX D' è D'È è +PFX D' ê D'Ê ê +PFX D' i D'I i +PFX D' î D'Î î +PFX D' o D'O o +PFX D' ô D'Ô ô +PFX D' u D'U u +PFX D' y D'Y y +PFX D' h D'H h +PFX D' œ D'Œ œ +PFX D' æ D'Æ æ + +PFX Q' Y 34 +PFX Q' 0 qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] +PFX Q' a qu'A a +PFX Q' à qu'À à +PFX Q' â qu' â +PFX Q' e qu'E e +PFX Q' é qu'É é +PFX Q' è qu'È è +PFX Q' ê qu'Ê ê +PFX Q' i qu'I i +PFX Q' î qu'Î î +PFX Q' o qu'O o +PFX Q' ô qu'Ô ô +PFX Q' u qu'U u +PFX Q' y qu'Y y +PFX Q' h qu'H h +PFX Q' œ qu'Œ œ +PFX Q' æ qu'Æ æ +PFX Q' 0 Qu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] +PFX Q' a Qu'A a +PFX Q' à Qu'À à +PFX Q' â Qu' â +PFX Q' e Qu'E e +PFX Q' é Qu'É é +PFX Q' è Qu'È è +PFX Q' ê Qu'Ê ê +PFX Q' i Qu'I i +PFX Q' î Qu'Î î +PFX Q' o Qu'O o +PFX Q' ô Qu'Ô ô +PFX Q' u Qu'U u +PFX Q' y Qu'Y y +PFX Q' h Qu'H h +PFX Q' œ Qu'Œ œ +PFX Q' æ Qu'Æ æ + +PFX Q* Y 6 +PFX Q* 0 quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] +PFX Q* 0 puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] +PFX Q* 0 lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] +PFX Q* 0 Quoiqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] +PFX Q* 0 Puisqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] +PFX Q* 0 Lorsqu' [aàâeèéêiîoôuyhœæAÀÂEÈÉÊIÎOÔUYHŒÆ] + +PFX Qj Y 1 +PFX Qj 0 jusqu' [aàâeèéêiîoôuyhœæ] + +PFX Si Y 1 +PFX Si 0 s' . + +SFX S. Y 1 +SFX S. 0 s [^sxz] + +SFX S= Y 1 +SFX S= 0 s [^sxz] + +SFX X. Y 3 +SFX X. 0 x [aeoœ]u +SFX X. l ux al +SFX X. il ux ail + +SFX A. Y 9 +SFX A. 0 s [^sxz] +SFX A. an en an +SFX A. f ves f +SFX A. h hes h +SFX A. s ses s +SFX A. x xes x +SFX A. y ies y +SFX A. zz zzes zz +SFX A. z zzes [^z]z + +SFX I. Y 7 +SFX I. 0 s [^sxz] +SFX I. a e a +SFX I. e i e +SFX I. en ina en +SFX I. o i o +SFX I. um a um +SFX I. us i us + +SFX F. Y 78 +SFX F. 0 s [eë] +SFX F. e 0 [éiï]e +SFX F. e s [éiï]e +SFX F. rice eur [dt]rice +SFX F. rice eurs [dt]rice +SFX F. de d de +SFX F. de ds de +SFX F. fe f fe +SFX F. fe fs fe +SFX F. anche anc anche +SFX F. anche ancs anche +SFX F. èche ec èche +SFX F. èche ecs èche +SFX F. aiche ais aiche +SFX F. aîche ais aîche +SFX F. khe kh khe +SFX F. khe khs khe +SFX F. he h [ut]he +SFX F. he hs [ut]he +SFX F. ke k [^è]ke +SFX F. ke ks [^è]ke +SFX F. èke ek èke +SFX F. èke eks èke +SFX F. le l [aiouûh]le +SFX F. le ls [aiouûh]le +SFX F. lle l [eiu]lle +SFX F. lle ls [eiu]lle +SFX F. olle ou olle +SFX F. olle ous olle +SFX F. olle ol olle +SFX F. olle ols olle +SFX F. ne n [aiouï]ne +SFX F. ne ns [aiouï]ne +SFX F. nne n [aeo]nne +SFX F. nne ns [aeo]nne +SFX F. ène en ène +SFX F. ène ens ène +SFX F. igne in igne +SFX F. igne ins igne +SFX F. re r [aiouûy]re +SFX F. re rs [aiouûy]re +SFX F. ère er ère +SFX F. ère ers ère +SFX F. se s [^us]se +SFX F. esse e [^eo].esse +SFX F. esse es [^eo].esse +SFX F. rofesse rofès rofesse +SFX F. eresse eur eresse +SFX F. eresse eurs eresse +SFX F. oresse eur oresse +SFX F. oresse eurs oresse +SFX F. sse s [^e]sse +SFX F. use us [^eo]use +SFX F. euse eur euse +SFX F. euse eurs euse +SFX F. te t [^èt]te +SFX F. te ts [^èt]te +SFX F. tte t tte +SFX F. tte ts tte +SFX F. ète et ète +SFX F. ète ets ète +SFX F. ue u [^gq]ue +SFX F. ue us [^gq]ue +SFX F. gue g gue +SFX F. gue gs gue +SFX F. cque c cque +SFX F. cque cs cque +SFX F. que c [^c]que +SFX F. que cs [^c]que +SFX F. ève ef ève +SFX F. ève efs ève +SFX F. ve f [iïu]ve +SFX F. ve fs [iïu]ve +SFX F. uë u uë +SFX F. uë us uë +SFX F. üe u üe +SFX F. üe us üe +SFX F. ze z ze + +SFX W. N 15 +SFX W. e es e +SFX W. ce x ce +SFX W. use ux [eo]use +SFX W. ausse aux ausse +SFX W. ousse oux ousse +SFX W. ale al ale +SFX W. ale aux ale +SFX W. elle eau elle +SFX W. elle eaux elle +SFX W. elle el [bv]elle +SFX W. elle els [bv]elle +SFX W. ieille ieux ieille +SFX W. ieille ieil ieille +SFX W. ofolle oufou ofolle +SFX W. ofolle oufous ofolle + +SFX S* Y 2 +SFX S* 0 0/D'L'Q' [^sxz] +SFX S* 0 s/D'Q' [^sxz] + +SFX X* Y 4 +SFX X* 0 0/D'L'Q' [ul] +SFX X* 0 x/D'Q' [aeoœ]u +SFX X* l ux/D'Q' al +SFX X* il ux/D'Q' ail + +SFX A* Y 20 +SFX A* an an/D'L'Q' an +SFX A* an ans/D'Q' an +SFX A* an en/D'Q' an +SFX A* f f/D'L'Q' f +SFX A* f fs/D'Q' f +SFX A* f ves/D'Q' f +SFX A* h h/D'L'Q' h +SFX A* h hs/D'Q' h +SFX A* h hes/D'Q' h +SFX A* s s/D'L'Q' s +SFX A* s ses/D'Q' s +SFX A* x x/D'L'Q' x +SFX A* x xes/D'Q' x +SFX A* y y/D'L'Q' y +SFX A* y ys/D'Q' y +SFX A* y ies/D'Q' y +SFX A* zz zz/D'L'Q' zz +SFX A* zz zzes/D'Q' zz +SFX A* z z/D'L'Q' [^z]z +SFX A* z zzes/D'Q' [^z]z + +SFX I* Y 17 +SFX I* a a/D'L'Q' a +SFX I* a as/D'Q' a +SFX I* a e/D'Q' a +SFX I* e e/D'L'Q' e +SFX I* e es/D'Q' e +SFX I* e i/D'Q' e +SFX I* en en/D'L'Q' en +SFX I* en ens/D'Q' en +SFX I* en ina/D'Q' en +SFX I* o o/D'L'Q' o +SFX I* o os/D'Q' o +SFX I* o i/D'Q' o +SFX I* um um/D'L'Q' um +SFX I* um ums/D'Q' um +SFX I* um a/D'Q' um +SFX I* us us/D'L'Q' us +SFX I* us i/D'Q' us + +SFX F* Y 59 +SFX F* 0 0/D'L'Q' [eë] +SFX F* 0 s/D'Q' [eë] +SFX F* e 0/D'L'Q' [éiï]e +SFX F* e s/D'Q' [éiï]e +SFX F* rice eur/D'L'Q' [dt]rice +SFX F* rice eurs/D'Q' [dt]rice +SFX F* de d/D'L'Q' de +SFX F* de ds/D'Q' de +SFX F* he h/D'L'Q' [ut]he +SFX F* he hs/D'Q' [ut]he +SFX F* èke ek/D'L'Q' èke +SFX F* èke eks/D'Q' èke +SFX F* le l/D'L'Q' [aiouû]le +SFX F* le ls/D'Q' [aiouû]le +SFX F* lle l/D'L'Q' [eiu]lle +SFX F* lle ls/D'Q' [eiu]lle +SFX F* ne n/D'L'Q' [aiouï]ne +SFX F* ne ns/D'Q' [aiouï]ne +SFX F* nne n/D'L'Q' [aeo]nne +SFX F* nne ns/D'Q' [aeo]nne +SFX F* gne n/D'L'Q' igne +SFX F* gne ns/D'Q' igne +SFX F* re r/D'L'Q' [aiouûy]re +SFX F* re rs/D'Q' [aiouûy]re +SFX F* ère er/D'L'Q' ère +SFX F* ère ers/D'Q' ère +SFX F* se s/D'L'Q' [^us]se +SFX F* esse e/D'L'Q' [^eo].esse +SFX F* esse es/D'Q' [^eo].esse +SFX F* eresse eur/D'L'Q' eresse +SFX F* eresse eurs/D'Q' eresse +SFX F* oresse eur/D'L'Q' oresse +SFX F* oresse eurs/D'Q' oresse +SFX F* sse s/D'L'Q' [^e]sse +SFX F* use us/D'L'Q' [^eo]use +SFX F* euse eur/D'L'Q' euse +SFX F* euse eurs/D'Q' euse +SFX F* te t/D'L'Q' [^èt]te +SFX F* te ts/D'Q' [^èt]te +SFX F* tte t/D'L'Q' tte +SFX F* tte ts/D'Q' tte +SFX F* ète et/D'L'Q' ète +SFX F* ète ets/D'Q' ète +SFX F* ue u/D'L'Q' [^gq]ue +SFX F* ue us/D'Q' [^gq]ue +SFX F* gue g/D'L'Q' gue +SFX F* gue gs/D'Q' gue +SFX F* cque c/D'L'Q' cque +SFX F* cque cs/D'Q' cque +SFX F* que c/D'L'Q' [^c]que +SFX F* que cs/D'Q' [^c]que +SFX F* ève ef/D'L'Q' ève +SFX F* ève efs/D'Q' ève +SFX F* ve f/D'L'Q' [iïu]ve +SFX F* ve fs/D'Q' [iïu]ve +SFX F* uë u/D'L'Q' uë +SFX F* uë us/D'Q' uë +SFX F* üe u/D'L'Q' üe +SFX F* üe us/D'Q' üe + +SFX W* Y 10 +SFX W* 0 0/D'L'Q' e +SFX W* e es/D'Q' e +SFX W* ce x/D'L'Q' ce +SFX W* use ux/D'L'Q' [eo]use +SFX W* ousse oux/D'L'Q' ousse +SFX W* ausse aux/D'L'Q' ausse +SFX W* ale al/D'L'Q' ale +SFX W* ale aux/D'Q' ale +SFX W* elle eau/D'L'Q' elle +SFX W* elle eaux/D'Q' elle + +PFX Um Y 29 +PFX Um 0 0/S. . +PFX Um 0 l' [aàâeèéêiîoôuyœæ] +PFX Um 0 d'/S. [aàâeèéêiîoôuyœæ] +PFX Um 0 yotta/S. . +PFX Um 0 zetta/S. . +PFX Um 0 exa/S. . +PFX Um 0 l'exa . +PFX Um 0 d'exa/S. . +PFX Um 0 peta/S. . +PFX Um 0 téra/S. . +PFX Um 0 giga/S. . +PFX Um 0 méga/S. . +PFX Um 0 kilo/S. . +PFX Um 0 hecto/S. . +PFX Um 0 l'hecto . +PFX Um 0 d'hecto/S. . +PFX Um 0 déca/S. . +PFX Um 0 déci/S. . +PFX Um 0 centi/S. . +PFX Um 0 milli/S. . +PFX Um 0 micro/S. . +PFX Um 0 nano/S. . +PFX Um 0 pico/S. . +PFX Um 0 femto/S. . +PFX Um 0 atto/S. . +PFX Um 0 l'atto . +PFX Um 0 d'atto/S. . +PFX Um 0 zepto/S. . +PFX Um 0 yocto/S. . + +PFX Ui Y 28 +PFX Ui 0 l' [aàâeèéêiîoôuyœæ] +PFX Ui 0 d' [aàâeèéêiîoôuyœæ] +PFX Ui 0 yotta . +PFX Ui 0 zetta . +PFX Ui 0 exa . +PFX Ui 0 l'exa . +PFX Ui 0 d'exa . +PFX Ui 0 peta . +PFX Ui 0 téra . +PFX Ui 0 giga . +PFX Ui 0 méga . +PFX Ui 0 kilo . +PFX Ui 0 hecto . +PFX Ui 0 l'hecto . +PFX Ui 0 d'hecto . +PFX Ui 0 déca . +PFX Ui 0 déci . +PFX Ui 0 centi . +PFX Ui 0 milli . +PFX Ui 0 micro . +PFX Ui 0 nano . +PFX Ui 0 pico . +PFX Ui 0 femto . +PFX Ui 0 atto . +PFX Ui 0 l'atto . +PFX Ui 0 d'atto . +PFX Ui 0 zepto . +PFX Ui 0 yocto . + +PFX U. Y 20 +PFX U. 0 Y . +PFX U. 0 Z . +PFX U. 0 E . +PFX U. 0 P . +PFX U. 0 T . +PFX U. 0 G . +PFX U. 0 M . +PFX U. 0 k . +PFX U. 0 h . +PFX U. 0 da . +PFX U. 0 d . +PFX U. 0 c . +PFX U. 0 m . +PFX U. 0 µ . +PFX U. 0 n . +PFX U. 0 p . +PFX U. 0 f . +PFX U. 0 a . +PFX U. 0 z . +PFX U. 0 y . + +PFX n' Y 1 +PFX n' 0 n' [aàâeèéêiîoôuyhœæ] + +PFX q' Y 1 +PFX q' 0 qu' [aàâeèéêiîoôuyhœæ] + +PFX d' Y 1 +PFX d' 0 d' [aàâeèéêiîoôuyhœæ] + +PFX j' Y 1 +PFX j' 0 j' [aàâeèéêiîoôuyhœæ] + +PFX c' Y 2 +PFX c' 0 c' [eé] +PFX c' 0 ç' a + +PFX l' Y 1 +PFX l' 0 l' [aàâeèéêiîoôuyhœæ] + +PFX m' Y 1 +PFX m' 0 m' [aàâeèéêiîoôuyhœæ] + +PFX t' Y 1 +PFX t' 0 t' [aàâeèéêiîoôuyhœæ] + +PFX s' Y 1 +PFX s' 0 s' [aàâeèéêiîoôuyhœæ] + +SFX zA Y 49 +SFX zA voir voir/n'q'd'l'm't' avoir +SFX zA voir yant/n'q'l'm't' avoir +SFX zA avoir eu avoir +SFX zA avoir eus avoir +SFX zA avoir eue avoir +SFX zA avoir eues avoir +SFX zA voir i/n'q'j'l't' avoir +SFX zA voir s/n'q'l'm't' avoir +SFX zA voir 0/n'q'c'l'm't' avoir +SFX zA voir vons/n'q'l't' avoir +SFX zA voir vez/n'q'l'm' avoir +SFX zA avoir ont/n'q'l'm't' avoir +SFX zA voir vais/n'q'j'l'm't' avoir +SFX zA voir vait/n'q'c'l'm't' avoir +SFX zA voir vions/n'q'l't' avoir +SFX zA voir viez/n'q'l'm' avoir +SFX zA voir vaient/n'q'l'm't' avoir +SFX zA avoir eus/n'q'j'l'm't' avoir +SFX zA avoir eut/n'q'c'l'm't' avoir +SFX zA avoir eûmes/n'q'l't' avoir +SFX zA avoir eûtes/n'q'l'm' avoir +SFX zA avoir eurent/n'q'l'm't' avoir +SFX zA voir urai/n'q'j'l'm't' avoir +SFX zA voir uras/n'q'l'm't' avoir +SFX zA voir ura/n'q'c'l'm't' avoir +SFX zA voir urons/n'q'l't' avoir +SFX zA voir urez/n'q'l'm' avoir +SFX zA voir uront/n'q'l'm't' avoir +SFX zA voir urais/n'q'j'l'm't' avoir +SFX zA voir urait/n'q'c'l'm't' avoir +SFX zA voir urions/n'q'l't' avoir +SFX zA voir uriez/n'q'l'm' avoir +SFX zA voir uraient/n'q'l'm't' avoir +SFX zA voir ie/n'j'l'm't' avoir +SFX zA voir ies/n'l'm't' avoir +SFX zA voir it/n'q'c'l'm't' avoir +SFX zA voir yons/n'l't' avoir +SFX zA voir yez/n'l'm' avoir +SFX zA voir ient/n'q'l'm't' avoir +SFX zA avoir eusse/n'q'j'l'm't' avoir +SFX zA avoir eussé/n'q'l'm't' avoir +SFX zA avoir eusses/n'q'l'm't' avoir +SFX zA avoir eût/n'q'c'l'm't' avoir +SFX zA avoir eussions/n'q'l't' avoir +SFX zA avoir eussiez/n'q'l'm' avoir +SFX zA avoir eussent/n'q'l'm't' avoir +SFX zA voir ie/n' avoir +SFX zA voir yons/n' avoir +SFX zA voir yez/n' avoir + +SFX zE Y 45 +SFX zE tre tre/n'q'd'l'm't's' être +SFX zE être étant/n'q'l'm't's' être +SFX zE être été être +SFX zE être suis être +SFX zE être es/n'q'l'm't' être +SFX zE être est/n'q'c'l'm't's' être +SFX zE être sommes être +SFX zE tre tes/n'q'l'm' être +SFX zE être sont être +SFX zE être étais/n'q'j'l'm't' être +SFX zE être était/n'q'c'l'm't's' être +SFX zE être étions/n'q'l't' être +SFX zE être étiez/n'q'l'm' être +SFX zE être étaient/n'q'c'l'm't's' être +SFX zE être fus être +SFX zE être fut être +SFX zE être fûmes être +SFX zE être fûtes être +SFX zE être furent être +SFX zE être serai être +SFX zE être seras être +SFX zE être sera être +SFX zE être serons être +SFX zE être serez être +SFX zE être seront être +SFX zE être serais être +SFX zE être serait être +SFX zE être serions être +SFX zE être seriez être +SFX zE être seraient être +SFX zE être sois être +SFX zE être soit être +SFX zE être soyons être +SFX zE être soyez être +SFX zE être soient être +SFX zE être fusse être +SFX zE être fussé être +SFX zE être fusses être +SFX zE être fût être +SFX zE être fussions être +SFX zE être fussiez être +SFX zE être fussent être +SFX zE être sois être +SFX zE être soyons être +SFX zE être soyez être + +SFX a0 N 101 +SFX a0 er ant [^cg]er +SFX a0 cer çant cer +SFX a0 ger geant ger +SFX a0 er e [^y]er +SFX a0 yer ye [^ou]yer +SFX a0 yer ie [aou]yer +SFX a0 er es [^y]er +SFX a0 yer yes [^ou]yer +SFX a0 yer ies [aou]yer +SFX a0 er ons [^cg]er +SFX a0 cer çons cer +SFX a0 ger geons ger +SFX a0 er ez er +SFX a0 er ent [^y]er +SFX a0 yer yent [^ou]yer +SFX a0 yer ient [aou]yer +SFX a0 er ais [^cg]er +SFX a0 cer çais cer +SFX a0 ger geais ger +SFX a0 er ait [^cg]er +SFX a0 cer çait cer +SFX a0 ger geait ger +SFX a0 er ions er +SFX a0 er iez er +SFX a0 er aient [^cg]er +SFX a0 cer çaient cer +SFX a0 ger geaient ger +SFX a0 er ai [^cg]er +SFX a0 cer çai cer +SFX a0 ger geai ger +SFX a0 er as [^cg]er +SFX a0 cer ças cer +SFX a0 ger geas ger +SFX a0 er a [^cg]er +SFX a0 cer ça cer +SFX a0 ger gea ger +SFX a0 er âmes [^cg]er +SFX a0 cer çâmes cer +SFX a0 ger geâmes ger +SFX a0 er âtes [^cg]er +SFX a0 cer çâtes cer +SFX a0 ger geâtes ger +SFX a0 er èrent er +SFX a0 er erai [^y]er +SFX a0 yer yerai [^ou]yer +SFX a0 yer ierai [aou]yer +SFX a0 er eras [^y]er +SFX a0 yer yeras [^ou]yer +SFX a0 yer ieras [aou]yer +SFX a0 er era [^y]er +SFX a0 yer yera [^ou]yer +SFX a0 yer iera [aou]yer +SFX a0 er erons [^y]er +SFX a0 yer yerons [^ou]yer +SFX a0 yer ierons [aou]yer +SFX a0 er erez [^y]er +SFX a0 yer yerez [^ou]yer +SFX a0 yer ierez [aou]yer +SFX a0 er eront [^y]er +SFX a0 yer yeront [^ou]yer +SFX a0 yer ieront [aou]yer +SFX a0 er erais [^y]er +SFX a0 yer yerais [^ou]yer +SFX a0 yer ierais [aou]yer +SFX a0 er erait [^y]er +SFX a0 yer yerait [^ou]yer +SFX a0 yer ierait [aou]yer +SFX a0 er erions [^y]er +SFX a0 yer yerions [^ou]yer +SFX a0 yer ierions [aou]yer +SFX a0 er eriez [^y]er +SFX a0 yer yeriez [^ou]yer +SFX a0 yer ieriez [aou]yer +SFX a0 er eraient [^y]er +SFX a0 yer yeraient [^ou]yer +SFX a0 yer ieraient [aou]yer +SFX a0 er asse [^cg]er +SFX a0 cer çasse cer +SFX a0 ger geasse ger +SFX a0 er asses [^cg]er +SFX a0 cer çasses cer +SFX a0 ger geasses ger +SFX a0 er ât [^cg]er +SFX a0 cer çât cer +SFX a0 ger geât ger +SFX a0 er assions [^cg]er +SFX a0 cer çassions cer +SFX a0 ger geassions ger +SFX a0 er assiez [^cg]er +SFX a0 cer çassiez cer +SFX a0 ger geassiez ger +SFX a0 er assent [^cg]er +SFX a0 cer çassent cer +SFX a0 ger geassent ger +SFX a0 er e [^y]er +SFX a0 yer ye [^ou]yer +SFX a0 yer ie [aou]yer +SFX a0 er ons [^cg]er +SFX a0 cer çons cer +SFX a0 ger geons ger +SFX a0 er ez er + +SFX a1 Y 102 +SFX a1 er er/n'q'd' er +SFX a1 er ant/n'q' [^cg]er +SFX a1 cer çant/n'q' cer +SFX a1 ger geant/n'q' ger +SFX a1 er e/n'q'j' [^y]er +SFX a1 yer ye/n'q'j' [^ou]yer +SFX a1 yer ie/n'q'j' [aou]yer +SFX a1 er es/n' [^y]er +SFX a1 yer yes/n' [^ou]yer +SFX a1 yer ies/n' [aou]yer +SFX a1 er ons/n' [^cg]er +SFX a1 cer çons/n' cer +SFX a1 ger geons/n' ger +SFX a1 er ez/n' er +SFX a1 er ent/n'q' [^y]er +SFX a1 yer yent/n'q' [^ou]yer +SFX a1 yer ient/n'q' [aou]yer +SFX a1 er ais/n'j' [^cg]er +SFX a1 cer çais/n'j' cer +SFX a1 ger geais/n'j' ger +SFX a1 er ait/n'q' [^cg]er +SFX a1 cer çait/n'q' cer +SFX a1 ger geait/n'q' ger +SFX a1 er ions/n' er +SFX a1 er iez/n' er +SFX a1 er aient/n'q' [^cg]er +SFX a1 cer çaient/n'q' cer +SFX a1 ger geaient/n'q' ger +SFX a1 er ai/n'j' [^cg]er +SFX a1 cer çai/n'j' cer +SFX a1 ger geai/n'j' ger +SFX a1 er as/n' [^cg]er +SFX a1 cer ças/n' cer +SFX a1 ger geas/n' ger +SFX a1 er a/n'q' [^cg]er +SFX a1 cer ça/n'q' cer +SFX a1 ger gea/n'q' ger +SFX a1 er âmes/n' [^cg]er +SFX a1 cer çâmes/n' cer +SFX a1 ger geâmes/n' ger +SFX a1 er âtes/n' [^cg]er +SFX a1 cer çâtes/n' cer +SFX a1 ger geâtes/n' ger +SFX a1 er èrent/n'q' er +SFX a1 er erai/n'j' [^y]er +SFX a1 yer yerai/n'j' [^ou]yer +SFX a1 yer ierai/n'j' [aou]yer +SFX a1 er eras/n' [^y]er +SFX a1 yer yeras/n' [^ou]yer +SFX a1 yer ieras/n' [aou]yer +SFX a1 er era/n'q' [^y]er +SFX a1 yer yera/n'q' [^ou]yer +SFX a1 yer iera/n'q' [aou]yer +SFX a1 er erons/n' [^y]er +SFX a1 yer yerons/n' [^ou]yer +SFX a1 yer ierons/n' [aou]yer +SFX a1 er erez/n' [^y]er +SFX a1 yer yerez/n' [^ou]yer +SFX a1 yer ierez/n' [aou]yer +SFX a1 er eront/n'q' [^y]er +SFX a1 yer yeront/n'q' [^ou]yer +SFX a1 yer ieront/n'q' [aou]yer +SFX a1 er erais/n'j' [^y]er +SFX a1 yer yerais/n'j' [^ou]yer +SFX a1 yer ierais/n'j' [aou]yer +SFX a1 er erait/n'q' [^y]er +SFX a1 yer yerait/n'q' [^ou]yer +SFX a1 yer ierait/n'q' [aou]yer +SFX a1 er erions/n' [^y]er +SFX a1 yer yerions/n' [^ou]yer +SFX a1 yer ierions/n' [aou]yer +SFX a1 er eriez/n' [^y]er +SFX a1 yer yeriez/n' [^ou]yer +SFX a1 yer ieriez/n' [aou]yer +SFX a1 er eraient/n'q' [^y]er +SFX a1 yer yeraient/n'q' [^ou]yer +SFX a1 yer ieraient/n'q' [aou]yer +SFX a1 er asse/n'j' [^cg]er +SFX a1 cer çasse/n'j' cer +SFX a1 ger geasse/n'j' ger +SFX a1 er asses/n' [^cg]er +SFX a1 cer çasses/n' cer +SFX a1 ger geasses/n' ger +SFX a1 er ât/n'q' [^cg]er +SFX a1 cer çât/n'q' cer +SFX a1 ger geât/n'q' ger +SFX a1 er assions/n' [^cg]er +SFX a1 cer çassions/n' cer +SFX a1 ger geassions/n' ger +SFX a1 er assiez/n' [^cg]er +SFX a1 cer çassiez/n' cer +SFX a1 ger geassiez/n' ger +SFX a1 er assent/n'q' [^cg]er +SFX a1 cer çassent/n'q' cer +SFX a1 ger geassent/n'q' ger +SFX a1 er e/n' [^y]er +SFX a1 yer ye/n' [^ou]yer +SFX a1 yer ie/n' [aou]yer +SFX a1 er ons/n' [^cg]er +SFX a1 cer çons/n' cer +SFX a1 ger geons/n' ger +SFX a1 er ez/n' er + +SFX a2 Y 102 +SFX a2 er er/n'q'd'l'm't's' er +SFX a2 er ant/n'q'l'm't's' [^cg]er +SFX a2 cer çant/n'q'l'm't's' cer +SFX a2 ger geant/n'q'l'm't's' ger +SFX a2 er e/n'q'j'l'm't's' [^y]er +SFX a2 yer ye/n'q'j'l'm't's' [^ou]yer +SFX a2 yer ie/n'q'j'l'm't's' [aou]yer +SFX a2 er es/n'q'l'm' [^y]er +SFX a2 yer yes/n'q'l'm' [^ou]yer +SFX a2 yer ies/n'q'l'm' [aou]yer +SFX a2 er ons/n'q'l't' [^cg]er +SFX a2 cer çons/n'q'l't' cer +SFX a2 ger geons/n'q'l't' ger +SFX a2 er ez/n'q'l'm' er +SFX a2 er ent/n'q'l'm't's' [^y]er +SFX a2 yer yent/n'q'l'm't's' [^ou]yer +SFX a2 yer ient/n'q'l'm't's' [aou]yer +SFX a2 er ais/n'q'j'l'm't' [^cg]er +SFX a2 cer çais/n'q'j'l'm't' cer +SFX a2 ger geais/n'q'j'l'm't' ger +SFX a2 er ait/n'q'l'm't's' [^cg]er +SFX a2 cer çait/n'q'l'm't's' cer +SFX a2 ger geait/n'q'l'm't's' ger +SFX a2 er ions/n'q'l't' er +SFX a2 er iez/n'q'l'm' er +SFX a2 er aient/n'q'l'm't's' [^cg]er +SFX a2 cer çaient/n'q'l'm't's' cer +SFX a2 ger geaient/n'q'l'm't's' ger +SFX a2 er ai/n'q'j'l't' [^cg]er +SFX a2 cer çai/n'q'j'l't' cer +SFX a2 ger geai/n'q'j'l't' ger +SFX a2 er as/n'q'l'm' [^cg]er +SFX a2 cer ças/n'q'l'm' cer +SFX a2 ger geas/n'q'l'm' ger +SFX a2 er a/n'q'l'm't's' [^cg]er +SFX a2 cer ça/n'q'l'm't's' cer +SFX a2 ger gea/n'q'l'm't's' ger +SFX a2 er âmes/n'q'l't' [^cg]er +SFX a2 cer çâmes/n'q'l't' cer +SFX a2 ger geâmes/n'q'l't' ger +SFX a2 er âtes/n'q'l'm' [^cg]er +SFX a2 cer çâtes/n'q'l'm' cer +SFX a2 ger geâtes/n'q'l'm' ger +SFX a2 er èrent/n'q'l'm't's' er +SFX a2 er erai/n'q'j'l't' [^y]er +SFX a2 yer yerai/n'q'j'l't' [^ou]yer +SFX a2 yer ierai/n'q'j'l't' [aou]yer +SFX a2 er eras/n'q'l'm' [^y]er +SFX a2 yer yeras/n'q'l'm' [^ou]yer +SFX a2 yer ieras/n'q'l'm' [aou]yer +SFX a2 er era/n'q'l'm't's' [^y]er +SFX a2 yer yera/n'q'l'm't's' [^ou]yer +SFX a2 yer iera/n'q'l'm't's' [aou]yer +SFX a2 er erons/n'q'l't' [^y]er +SFX a2 yer yerons/n'q'l't' [^ou]yer +SFX a2 yer ierons/n'q'l't' [aou]yer +SFX a2 er erez/n'q'l'm' [^y]er +SFX a2 yer yerez/n'q'l'm' [^ou]yer +SFX a2 yer ierez/n'q'l'm' [aou]yer +SFX a2 er eront/n'q'l'm't's' [^y]er +SFX a2 yer yeront/n'q'l'm't's' [^ou]yer +SFX a2 yer ieront/n'q'l'm't's' [aou]yer +SFX a2 er erais/n'q'j'l'm't' [^y]er +SFX a2 yer yerais/n'q'j'l'm't' [^ou]yer +SFX a2 yer ierais/n'q'j'l'm't' [aou]yer +SFX a2 er erait/n'q'l'm't's' [^y]er +SFX a2 yer yerait/n'q'l'm't's' [^ou]yer +SFX a2 yer ierait/n'q'l'm't's' [aou]yer +SFX a2 er erions/n'q'l't' [^y]er +SFX a2 yer yerions/n'q'l't' [^ou]yer +SFX a2 yer ierions/n'q'l't' [aou]yer +SFX a2 er eriez/n'q'l'm' [^y]er +SFX a2 yer yeriez/n'q'l'm' [^ou]yer +SFX a2 yer ieriez/n'q'l'm' [aou]yer +SFX a2 er eraient/n'q'l'm't's' [^y]er +SFX a2 yer yeraient/n'q'l'm't's' [^ou]yer +SFX a2 yer ieraient/n'q'l'm't's' [aou]yer +SFX a2 er asse/n'q'j'l't' [^cg]er +SFX a2 cer çasse/n'q'j'l't' cer +SFX a2 ger geasse/n'q'j'l't' ger +SFX a2 er asses/n'q'l'm' [^cg]er +SFX a2 cer çasses/n'q'l'm' cer +SFX a2 ger geasses/n'q'l'm' ger +SFX a2 er ât/n'q'l'm't's' [^cg]er +SFX a2 cer çât/n'q'l'm't's' cer +SFX a2 ger geât/n'q'l'm't's' ger +SFX a2 er assions/n'q'l't' [^cg]er +SFX a2 cer çassions/n'q'l't' cer +SFX a2 ger geassions/n'q'l't' ger +SFX a2 er assiez/n'q'l'm' [^cg]er +SFX a2 cer çassiez/n'q'l'm' cer +SFX a2 ger geassiez/n'q'l'm' ger +SFX a2 er assent/n'q'l'm't's' [^cg]er +SFX a2 cer çassent/n'q'l'm't's' cer +SFX a2 ger geassent/n'q'l'm't's' ger +SFX a2 er e/n'l'm' [^y]er +SFX a2 yer ye/n'l'm' [^ou]yer +SFX a2 yer ie/n'l'm' [aou]yer +SFX a2 er ons/n'l' [^cg]er +SFX a2 cer çons/n'l' cer +SFX a2 ger geons/n'l' ger +SFX a2 er ez/n'l'm' er + +SFX a3 Y 102 +SFX a3 er er/m't's' er +SFX a3 er ant/m't's' [^cg]er +SFX a3 cer çant/m't's' cer +SFX a3 ger geant/m't's' ger +SFX a3 er e/m's' [^y]er +SFX a3 yer ye/m's' [^ou]yer +SFX a3 yer ie/m's' [aou]yer +SFX a3 er es/t' [^y]er +SFX a3 yer yes/t' [^ou]yer +SFX a3 yer ies/t' [aou]yer +SFX a3 er ons [^cg]er +SFX a3 cer çons cer +SFX a3 ger geons ger +SFX a3 r z er +SFX a3 er ent/s' [^y]er +SFX a3 yer yent/s' [^ou]yer +SFX a3 yer ient/s' [aou]yer +SFX a3 er ais/m' [^cg]er +SFX a3 cer çais/m' cer +SFX a3 ger geais/m' ger +SFX a3 er ait/s' [^cg]er +SFX a3 cer çait/s' cer +SFX a3 ger geait/s' ger +SFX a3 er ions er +SFX a3 er iez er +SFX a3 er aient/s' [^cg]er +SFX a3 cer çaient/s' cer +SFX a3 ger geaient/s' ger +SFX a3 er ai/m' [^cg]er +SFX a3 cer çai/m' cer +SFX a3 ger geai/m' ger +SFX a3 er as/t' [^cg]er +SFX a3 cer ças/t' cer +SFX a3 ger geas/t' ger +SFX a3 er a/s' [^cg]er +SFX a3 cer ça/s' cer +SFX a3 ger gea/s' ger +SFX a3 er âmes [^cg]er +SFX a3 cer çâmes cer +SFX a3 ger geâmes ger +SFX a3 er âtes [^cg]er +SFX a3 cer çâtes/s' cer +SFX a3 ger geâtes/s' ger +SFX a3 er èrent/s' er +SFX a3 er erai/m' [^y]er +SFX a3 yer yerai/m' [^ou]yer +SFX a3 yer ierai/m' [aou]yer +SFX a3 er eras/t' [^y]er +SFX a3 yer yeras/t' [^ou]yer +SFX a3 yer ieras/t' [aou]yer +SFX a3 er era/s' [^y]er +SFX a3 yer yera/s' [^ou]yer +SFX a3 yer iera/s' [aou]yer +SFX a3 er erons [^y]er +SFX a3 yer yerons [^ou]yer +SFX a3 yer ierons [aou]yer +SFX a3 er erez [^y]er +SFX a3 yer yerez [^ou]yer +SFX a3 yer ierez [aou]yer +SFX a3 er eront/s' [^y]er +SFX a3 yer yeront/s' [^ou]yer +SFX a3 yer ieront/s' [aou]yer +SFX a3 er erais/m't' [^y]er +SFX a3 yer yerais/m't' [^ou]yer +SFX a3 yer ierais/m't' [aou]yer +SFX a3 er erait/s' [^y]er +SFX a3 yer yerait/s' [^ou]yer +SFX a3 yer ierait/s' [aou]yer +SFX a3 er erions [^y]er +SFX a3 yer yerions [^ou]yer +SFX a3 yer ierions [aou]yer +SFX a3 er eriez [^y]er +SFX a3 yer yeriez [^ou]yer +SFX a3 yer ieriez [aou]yer +SFX a3 er eraient/s' [^y]er +SFX a3 yer yeraient/s' [^ou]yer +SFX a3 yer ieraient/s' [aou]yer +SFX a3 er asse/m' [^cg]er +SFX a3 cer çasse/m' cer +SFX a3 ger geasse/m' ger +SFX a3 er asses/t' [^cg]er +SFX a3 cer çasses/t' cer +SFX a3 ger geasses/t' ger +SFX a3 er ât/s' [^cg]er +SFX a3 cer çât/s' cer +SFX a3 ger geât/s' ger +SFX a3 er assions [^cg]er +SFX a3 cer çassions cer +SFX a3 ger geassions ger +SFX a3 er assiez [^cg]er +SFX a3 cer çassiez cer +SFX a3 ger geassiez ger +SFX a3 er assent/s' [^cg]er +SFX a3 cer çassent/s' cer +SFX a3 ger geassent/s' ger +SFX a3 er e/t' [^y]er +SFX a3 yer ye/t' [^ou]yer +SFX a3 yer ie/t' [aou]yer +SFX a3 er ons [^cg]er +SFX a3 cer çons cer +SFX a3 ger geons ger +SFX a3 er ez er + +SFX a4 Y 102 +SFX a4 er er/n'q'd'l'm't's' er +SFX a4 er ant/n'q'l'm't's' [^cg]er +SFX a4 cer çant/n'q'l'm't's' cer +SFX a4 ger geant/n'q'l'm't's' ger +SFX a4 er e/n'q'j'l'm't's' [^y]er +SFX a4 yer ye/n'q'j'l'm't's' [^ou]yer +SFX a4 yer ie/n'q'j'l'm't's' [aou]yer +SFX a4 er es/n'q'l'm't' [^y]er +SFX a4 yer yes/n'q'l'm't' [^ou]yer +SFX a4 yer ies/n'q'l'm't' [aou]yer +SFX a4 er ons/n'q'l't' [^cg]er +SFX a4 cer çons/n'q'l't' cer +SFX a4 ger geons/n'q'l't' ger +SFX a4 er ez/n'q'l'm' er +SFX a4 er ent/n'q'l'm't's' [^y]er +SFX a4 yer yent/n'q'l'm't's' [^ou]yer +SFX a4 yer ient/n'q'l'm't's' [aou]yer +SFX a4 er ais/n'q'j'l'm't' [^cg]er +SFX a4 cer çais/n'q'j'l'm't' cer +SFX a4 ger geais/n'q'j'l'm't' ger +SFX a4 er ait/n'q'l'm't's' [^cg]er +SFX a4 cer çait/n'q'l'm't's' cer +SFX a4 ger geait/n'q'l'm't's' ger +SFX a4 er ions/n'q'l't' er +SFX a4 er iez/n'q'l'm' er +SFX a4 er aient/n'q'l'm't's' [^cg]er +SFX a4 cer çaient/n'q'l'm't's' cer +SFX a4 ger geaient/n'q'l'm't's' ger +SFX a4 er ai/n'q'j'l'm't' [^cg]er +SFX a4 cer çai/n'q'j'l'm't' cer +SFX a4 ger geai/n'q'j'l'm't' ger +SFX a4 er as/n'q'l'm't' [^cg]er +SFX a4 cer ças/n'q'l'm't' cer +SFX a4 ger geas/n'q'l'm't' ger +SFX a4 er a/n'q'l'm't's' [^cg]er +SFX a4 cer ça/n'q'l'm't's' cer +SFX a4 ger gea/n'q'l'm't's' ger +SFX a4 er âmes/n'q'l't' [^cg]er +SFX a4 cer çâmes/n'q'l't' cer +SFX a4 ger geâmes/n'q'l't' ger +SFX a4 er âtes/n'q'l'm' [^cg]er +SFX a4 cer çâtes/n'q'l'm' cer +SFX a4 ger geâtes/n'q'l'm' ger +SFX a4 er èrent/n'q'l'm't's' er +SFX a4 er erai/n'q'j'l'm't' [^y]er +SFX a4 yer yerai/n'q'j'l'm't' [^ou]yer +SFX a4 yer ierai/n'q'j'l'm't' [aou]yer +SFX a4 er eras/n'q'l'm't' [^y]er +SFX a4 yer yeras/n'q'l'm't' [^ou]yer +SFX a4 yer ieras/n'q'l'm't' [aou]yer +SFX a4 er era/n'q'l'm't's' [^y]er +SFX a4 yer yera/n'q'l'm't's' [^ou]yer +SFX a4 yer iera/n'q'l'm't's' [aou]yer +SFX a4 er erons/n'q'l't' [^y]er +SFX a4 yer yerons/n'q'l't' [^ou]yer +SFX a4 yer ierons/n'q'l't' [aou]yer +SFX a4 er erez/n'q'l'm' [^y]er +SFX a4 yer yerez/n'q'l'm' [^ou]yer +SFX a4 yer ierez/n'q'l'm' [aou]yer +SFX a4 er eront/n'q'l'm't's' [^y]er +SFX a4 yer yeront/n'q'l'm't's' [^ou]yer +SFX a4 yer ieront/n'q'l'm't's' [aou]yer +SFX a4 er erais/n'q'j'l'm't' [^y]er +SFX a4 yer yerais/n'q'j'l'm't' [^ou]yer +SFX a4 yer ierais/n'q'j'l'm't' [aou]yer +SFX a4 er erait/n'q'l'm't's' [^y]er +SFX a4 yer yerait/n'q'l'm't's' [^ou]yer +SFX a4 yer ierait/n'q'l'm't's' [aou]yer +SFX a4 er erions/n'q'l't' [^y]er +SFX a4 yer yerions/n'q'l't' [^ou]yer +SFX a4 yer ierions/n'q'l't' [aou]yer +SFX a4 er eriez/n'q'l'm' [^y]er +SFX a4 yer yeriez/n'q'l'm' [^ou]yer +SFX a4 yer ieriez/n'q'l'm' [aou]yer +SFX a4 er eraient/n'q'l'm't's' [^y]er +SFX a4 yer yeraient/n'q'l'm't's' [^ou]yer +SFX a4 yer ieraient/n'q'l'm't's' [aou]yer +SFX a4 er asse/n'q'j'l'm't' [^cg]er +SFX a4 cer çasse/n'q'j'l'm't' cer +SFX a4 ger geasse/n'q'j'l'm't' ger +SFX a4 er asses/n'q'l'm't' [^cg]er +SFX a4 cer çasses/n'q'l'm't' cer +SFX a4 ger geasses/n'q'l'm't' ger +SFX a4 er ât/n'q'l'm't's' [^cg]er +SFX a4 cer çât/n'q'l'm't's' cer +SFX a4 ger geât/n'q'l'm't's' ger +SFX a4 er assions/n'q'l't' [^cg]er +SFX a4 cer çassions/n'q'l't' cer +SFX a4 ger geassions/n'q'l't' ger +SFX a4 er assiez/n'q'l'm' [^cg]er +SFX a4 cer çassiez/n'q'l'm' cer +SFX a4 ger geassiez/n'q'l'm' ger +SFX a4 er assent/n'q'l'm't's' [^cg]er +SFX a4 cer çassent/n'q'l'm't's' cer +SFX a4 ger geassent/n'q'l'm't's' ger +SFX a4 er e/n'l'm't' [^y]er +SFX a4 yer ye/n'l'm't' [^ou]yer +SFX a4 yer ie/n'l'm't' [aou]yer +SFX a4 er ons/n'l' [^cg]er +SFX a4 cer çons/n'l' cer +SFX a4 ger geons/n'l' ger +SFX a4 er ez/n'l'm' er + +SFX a5 Y 102 +SFX a5 er er/n'q'd'm't's' er +SFX a5 er ant/n'q'm't's' [^cg]er +SFX a5 cer çant/n'q'm't's' cer +SFX a5 ger geant/n'q'm't's' ger +SFX a5 er e/n'q'j'm't's' [^y]er +SFX a5 yer ye/n'q'j'm't's' [^ou]yer +SFX a5 yer ie/n'q'j'm't's' [aou]yer +SFX a5 er es/n'm't' [^y]er +SFX a5 yer yes/n'm't' [^ou]yer +SFX a5 yer ies/n'm't' [aou]yer +SFX a5 er ons/n't' [^cg]er +SFX a5 cer çons/n't' cer +SFX a5 ger geons/n't' ger +SFX a5 r z/n'm' er +SFX a5 er ent/n'q'm't's' [^y]er +SFX a5 yer yent/n'q'm't's' [^ou]yer +SFX a5 yer ient/n'q'm't's' [aou]yer +SFX a5 er ais/n'j'm't' [^cg]er +SFX a5 cer çais/n'j'm't' cer +SFX a5 ger geais/n'j'm't' ger +SFX a5 er ait/n'q'm't's' [^cg]er +SFX a5 cer çait/n'q'm't's' cer +SFX a5 ger geait/n'q'm't's' ger +SFX a5 er ions/n't' er +SFX a5 er iez/n'm' er +SFX a5 er aient/n'q'm't's' [^cg]er +SFX a5 cer çaient/n'q'm't's' cer +SFX a5 ger geaient/n'q'm't's' ger +SFX a5 er ai/n'j'm't' [^cg]er +SFX a5 cer çai/n'j'm't' cer +SFX a5 ger geai/n'j'm't' ger +SFX a5 er as/n'm't' [^cg]er +SFX a5 cer ças/n'm't' cer +SFX a5 ger geas/n'm't' ger +SFX a5 er a/n'q'm't's' [^cg]er +SFX a5 cer ça/n'q'm't's' cer +SFX a5 ger gea/n'q'm't's' ger +SFX a5 er âmes/n't' [^cg]er +SFX a5 cer çâmes/n't' cer +SFX a5 ger geâmes/n't' ger +SFX a5 er âtes/n'm' [^cg]er +SFX a5 cer çâtes/n'm' cer +SFX a5 ger geâtes/n'm' ger +SFX a5 er èrent/n'q'm't's' er +SFX a5 er erai/n'j'm't' [^y]er +SFX a5 yer yerai/n'j'm't' [^ou]yer +SFX a5 yer ierai/n'j'm't' [aou]yer +SFX a5 er eras/n'm't' [^y]er +SFX a5 yer yeras/n'm't' [^ou]yer +SFX a5 yer ieras/n'm't' [aou]yer +SFX a5 er era/n'q'm't's' [^y]er +SFX a5 yer yera/n'q'm't's' [^ou]yer +SFX a5 yer iera/n'q'm't's' [aou]yer +SFX a5 er erons/n't' [^y]er +SFX a5 yer yerons/n't' [^ou]yer +SFX a5 yer ierons/n't' [aou]yer +SFX a5 er erez/n'm' [^y]er +SFX a5 yer yerez/n'm' [^ou]yer +SFX a5 yer ierez/n'm' [aou]yer +SFX a5 er eront/n'q'm't's' [^y]er +SFX a5 yer yeront/n'q'm't's' [^ou]yer +SFX a5 yer ieront/n'q'm't's' [aou]yer +SFX a5 er erais/n'j'm't' [^y]er +SFX a5 yer yerais/n'j'm't' [^ou]yer +SFX a5 yer ierais/n'j'm't' [aou]yer +SFX a5 er erait/n'q'm't's' [^y]er +SFX a5 yer yerait/n'q'm't's' [^ou]yer +SFX a5 yer ierait/n'q'm't's' [aou]yer +SFX a5 er erions/n't' [^y]er +SFX a5 yer yerions/n't' [^ou]yer +SFX a5 yer ierions/n't' [aou]yer +SFX a5 er eriez/n'm' [^y]er +SFX a5 yer yeriez/n'm' [^ou]yer +SFX a5 yer ieriez/n'm' [aou]yer +SFX a5 er eraient/n'q'm't's' [^y]er +SFX a5 yer yeraient/n'q'm't's' [^ou]yer +SFX a5 yer ieraient/n'q'm't's' [aou]yer +SFX a5 er asse/n'j'm't' [^cg]er +SFX a5 cer çasse/n'j'm't' cer +SFX a5 ger geasse/n'j'm't' ger +SFX a5 er asses/n'm't' [^cg]er +SFX a5 cer çasses/n'm't' cer +SFX a5 ger geasses/n'm't' ger +SFX a5 er ât/n'q'm't's' [^cg]er +SFX a5 cer çât/n'q'm't's' cer +SFX a5 ger geât/n'q'm't's' ger +SFX a5 er assions/n't' [^cg]er +SFX a5 cer çassions/n't' cer +SFX a5 ger geassions/n't' ger +SFX a5 er assiez/n'm' [^cg]er +SFX a5 cer çassiez/n'm' cer +SFX a5 ger geassiez/n'm' ger +SFX a5 er assent/n'q'm't's' [^cg]er +SFX a5 cer çassent/n'q'm't's' cer +SFX a5 ger geassent/n'q'm't's' ger +SFX a5 er e/n'm' [^y]er +SFX a5 yer e/n'm' [^ou]yer +SFX a5 yer ie/n'm' [aou]yer +SFX a5 er ons/n' [^cg]er +SFX a5 cer çons/n' cer +SFX a5 ger geons/n' ger +SFX a5 er ez/n'm' er + +SFX a6 Y 72 +SFX a6 er er/s' er +SFX a6 er ant/s' [^cg]er +SFX a6 cer çant/s' cer +SFX a6 ger geant/s' ger +SFX a6 er e/s' [^y]er +SFX a6 yer ye/s' [^ou]yer +SFX a6 yer ie/s' [aou]yer +SFX a6 er ons [^cg]er +SFX a6 cer çons cer +SFX a6 ger geons ger +SFX a6 er ez er +SFX a6 er ent/s' [^y]er +SFX a6 yer yent/s' [^ou]yer +SFX a6 yer ient/s' [aou]yer +SFX a6 er ait/s' [^cg]er +SFX a6 cer çait/s' cer +SFX a6 ger geait/s' ger +SFX a6 er ions er +SFX a6 er iez er +SFX a6 er aient/s' [^cg]er +SFX a6 cer çaient/s' cer +SFX a6 ger geaient/s' ger +SFX a6 er a/s' [^cg]er +SFX a6 cer ça/s' cer +SFX a6 ger gea/s' ger +SFX a6 er âmes [^cg]er +SFX a6 cer çâmes cer +SFX a6 ger geâmes ger +SFX a6 er âtes [^cg]er +SFX a6 cer çâtes/s' cer +SFX a6 ger geâtes/s' ger +SFX a6 er èrent/s' er +SFX a6 er era/s' [^y]er +SFX a6 yer yera/s' [^ou]yer +SFX a6 yer iera/s' [aou]yer +SFX a6 er erons [^y]er +SFX a6 yer yerons [^ou]yer +SFX a6 yer ierons [aou]yer +SFX a6 er erez [^y]er +SFX a6 yer yerez [^ou]yer +SFX a6 yer ierez [aou]yer +SFX a6 er eront/s' [^y]er +SFX a6 yer yeront/s' [^ou]yer +SFX a6 yer ieront/s' [aou]yer +SFX a6 er erait/s' [^y]er +SFX a6 yer yerait/s' [^ou]yer +SFX a6 yer ierait/s' [aou]yer +SFX a6 er erions [^y]er +SFX a6 yer yerions [^ou]yer +SFX a6 yer ierions [aou]yer +SFX a6 er eriez [^y]er +SFX a6 yer yeriez [^ou]yer +SFX a6 yer ieriez [aou]yer +SFX a6 er eraient/s' [^y]er +SFX a6 yer yeraient/s' [^ou]yer +SFX a6 yer ieraient/s' [aou]yer +SFX a6 er ât/s' [^cg]er +SFX a6 cer çât/s' cer +SFX a6 ger geât/s' ger +SFX a6 er assions [^cg]er +SFX a6 cer çassions cer +SFX a6 ger geassions ger +SFX a6 er assiez [^cg]er +SFX a6 cer çassiez cer +SFX a6 ger geassiez ger +SFX a6 er assent/s' [^cg]er +SFX a6 cer çassent/s' cer +SFX a6 ger geassent/s' ger +SFX a6 er ons [^cg]er +SFX a6 cer çons cer +SFX a6 ger geons ger +SFX a6 er ez er + +SFX a8 N 16 +SFX a8 er er/n'd' er +SFX a8 er ant [^cg]er +SFX a8 cer çant cer +SFX a8 ger geant ger +SFX a8 er e/n' er +SFX a8 er ait/n' [^cg]er +SFX a8 cer çait/n' cer +SFX a8 ger geait/n' ger +SFX a8 er a/n' [^cg]er +SFX a8 cer ça/n' cer +SFX a8 ger gea/n' ger +SFX a8 er era/n' er +SFX a8 er erait/n' er +SFX a8 er ât/n' [^cg]er +SFX a8 cer çât/n' cer +SFX a8 ger geât/n' ger + +SFX a9 N 10 +SFX a9 er ent/n' er +SFX a9 er aient/n' [^cg]er +SFX a9 cer çaient/n' cer +SFX a9 ger geaient/n' ger +SFX a9 er èrent/n' er +SFX a9 er eront/n' er +SFX a9 er eraient/n' er +SFX a9 er assent/n' [^cg]er +SFX a9 cer çassent/n' cer +SFX a9 ger geassent/n' ger + +SFX b0 N 189 +SFX b0 er ant [^c]er +SFX b0 cer çant cer +SFX b0 ecer èce ecer +SFX b0 emer ème emer +SFX b0 ener ène ener +SFX b0 eper èpe eper +SFX b0 erer ère erer +SFX b0 eser èse eser +SFX b0 ever ève ever +SFX b0 evrer èvre evrer +SFX b0 eter ète eter +SFX b0 eler èle eler +SFX b0 ecer èces ecer +SFX b0 emer èmes emer +SFX b0 ener ènes ener +SFX b0 eper èpes eper +SFX b0 erer ères erer +SFX b0 eser èses eser +SFX b0 ever èves ever +SFX b0 evrer èvres evrer +SFX b0 eter ètes eter +SFX b0 eler èles eler +SFX b0 er ons [^c]er +SFX b0 cer çons cer +SFX b0 er ez er +SFX b0 ecer ècent ecer +SFX b0 emer èment emer +SFX b0 ener ènent ener +SFX b0 eper èpent eper +SFX b0 erer èrent erer +SFX b0 eser èsent eser +SFX b0 ever èvent ever +SFX b0 evrer èvrent evrer +SFX b0 eter ètent eter +SFX b0 eler èlent eler +SFX b0 er ais [^c]er +SFX b0 cer çais cer +SFX b0 er ait [^c]er +SFX b0 cer çait cer +SFX b0 er ions er +SFX b0 er iez er +SFX b0 er aient [^c]er +SFX b0 cer çaient cer +SFX b0 er ai [^c]er +SFX b0 cer çai cer +SFX b0 er as [^c]er +SFX b0 cer ças cer +SFX b0 er a [^c]er +SFX b0 cer ça cer +SFX b0 er âmes [^c]er +SFX b0 cer çâmes cer +SFX b0 er âtes [^c]er +SFX b0 cer çâtes cer +SFX b0 er èrent er +SFX b0 ecer ècerai ecer +SFX b0 emer èmerai emer +SFX b0 ener ènerai ener +SFX b0 eper èperai eper +SFX b0 erer èrerai erer +SFX b0 eser èserai eser +SFX b0 ever èverai ever +SFX b0 evrer èvrerai evrer +SFX b0 eter èterai eter +SFX b0 eler èlerai eler +SFX b0 ecer èceras ecer +SFX b0 emer èmeras emer +SFX b0 ener èneras ener +SFX b0 eper èperas eper +SFX b0 erer èreras erer +SFX b0 eser èseras eser +SFX b0 ever èveras ever +SFX b0 evrer èvreras evrer +SFX b0 eter èteras eter +SFX b0 eler èleras eler +SFX b0 ecer ècera ecer +SFX b0 emer èmera emer +SFX b0 ener ènera ener +SFX b0 eper èpera eper +SFX b0 erer èrera erer +SFX b0 eser èsera eser +SFX b0 ever èvera ever +SFX b0 evrer èvrera evrer +SFX b0 eter ètera eter +SFX b0 eler èlera eler +SFX b0 ecer ècerons ecer +SFX b0 emer èmerons emer +SFX b0 ener ènerons ener +SFX b0 eper èperons eper +SFX b0 erer èrerons erer +SFX b0 eser èserons eser +SFX b0 ever èverons ever +SFX b0 evrer èvrerons evrer +SFX b0 eter èterons eter +SFX b0 eler èlerons eler +SFX b0 ecer ècerez ecer +SFX b0 emer èmerez emer +SFX b0 ener ènerez ener +SFX b0 eper èperez eper +SFX b0 erer èrerez erer +SFX b0 eser èserez eser +SFX b0 ever èverez ever +SFX b0 evrer èvrerez evrer +SFX b0 eter èterez eter +SFX b0 eler èlerez eler +SFX b0 ecer èceront ecer +SFX b0 emer èmeront emer +SFX b0 ener èneront ener +SFX b0 eper èperont eper +SFX b0 erer èreront erer +SFX b0 eser èseront eser +SFX b0 ever èveront ever +SFX b0 evrer èvreront evrer +SFX b0 eter èteront eter +SFX b0 eler èleront eler +SFX b0 ecer ècerais ecer +SFX b0 emer èmerais emer +SFX b0 ener ènerais ener +SFX b0 eper èperais eper +SFX b0 erer èrerais erer +SFX b0 eser èserais eser +SFX b0 ever èverais ever +SFX b0 evrer èvrerais evrer +SFX b0 eter èterais eter +SFX b0 eler èlerais eler +SFX b0 ecer ècerait ecer +SFX b0 emer èmerait emer +SFX b0 ener ènerait ener +SFX b0 eper èperait eper +SFX b0 erer èrerait erer +SFX b0 eser èserait eser +SFX b0 ever èverait ever +SFX b0 evrer èvrerait evrer +SFX b0 eter èterait eter +SFX b0 eler èlerait eler +SFX b0 ecer ècerions ecer +SFX b0 emer èmerions emer +SFX b0 ener ènerions ener +SFX b0 eper èperions eper +SFX b0 erer èrerions erer +SFX b0 eser èserions eser +SFX b0 ever èverions ever +SFX b0 evrer èvrerions evrer +SFX b0 eter èterions eter +SFX b0 eler èlerions eler +SFX b0 ecer èceriez ecer +SFX b0 emer èmeriez emer +SFX b0 ener èneriez ener +SFX b0 eper èperiez eper +SFX b0 erer èreriez erer +SFX b0 eser èseriez eser +SFX b0 ever èveriez ever +SFX b0 evrer èvreriez evrer +SFX b0 eter èteriez eter +SFX b0 eler èleriez eler +SFX b0 ecer èceraient ecer +SFX b0 emer èmeraient emer +SFX b0 ener èneraient ener +SFX b0 eper èperaient eper +SFX b0 erer èreraient erer +SFX b0 eser èseraient eser +SFX b0 ever èveraient ever +SFX b0 evrer èvreraient evrer +SFX b0 eter èteraient eter +SFX b0 eler èleraient eler +SFX b0 er asse [^c]er +SFX b0 cer çasse cer +SFX b0 er asses [^c]er +SFX b0 cer çasses cer +SFX b0 er ât [^c]er +SFX b0 cer çât cer +SFX b0 er assions [^c]er +SFX b0 cer çassions cer +SFX b0 er assiez [^c]er +SFX b0 cer çassiez cer +SFX b0 er assent [^c]er +SFX b0 cer çassent cer +SFX b0 ecer èce ecer +SFX b0 emer ème emer +SFX b0 ener ène ener +SFX b0 eper èpe eper +SFX b0 erer ère erer +SFX b0 eser èse eser +SFX b0 ever ève ever +SFX b0 evrer èvre evrer +SFX b0 eter ète eter +SFX b0 eler èle eler +SFX b0 er ons [^c]er +SFX b0 cer çons cer +SFX b0 er ez er + +SFX b1 Y 190 +SFX b1 er er/n'q'd' er +SFX b1 er ant/n'q' [^c]er +SFX b1 cer çant/n'q' cer +SFX b1 ecer èce/n'j'q' ecer +SFX b1 emer ème/n'j'q' emer +SFX b1 ener ène/n'j'q' ener +SFX b1 eper èpe/n'j'q' eper +SFX b1 erer ère/n'j'q' erer +SFX b1 eser èse/n'j'q' eser +SFX b1 ever ève/n'j'q' ever +SFX b1 evrer èvre/n'j'q' evrer +SFX b1 eter ète/n'j'q' eter +SFX b1 eler èle/n'j'q' eler +SFX b1 ecer èces/n' ecer +SFX b1 emer èmes/n' emer +SFX b1 ener ènes/n' ener +SFX b1 eper èpes/n' eper +SFX b1 erer ères/n' erer +SFX b1 eser èses/n' eser +SFX b1 ever èves/n' ever +SFX b1 evrer èvres/n' evrer +SFX b1 eter ètes/n' eter +SFX b1 eler èles/n' eler +SFX b1 er ons/n' [^c]er +SFX b1 cer çons/n' cer +SFX b1 er ez/n' er +SFX b1 ecer ècent/n'q' ecer +SFX b1 emer èment/n'q' emer +SFX b1 ener ènent/n'q' ener +SFX b1 eper èpent/n'q' eper +SFX b1 erer èrent/n'q' erer +SFX b1 eser èsent/n'q' eser +SFX b1 ever èvent/n'q' ever +SFX b1 evrer èvrent/n'q' evrer +SFX b1 eter ètent/n'q' eter +SFX b1 eler èlent/n'q' eler +SFX b1 er ais/n'j' [^c]er +SFX b1 cer çais/n'j' cer +SFX b1 er ait/n'q' [^c]er +SFX b1 cer çait/n'q' cer +SFX b1 er ions/n' er +SFX b1 er iez/n' er +SFX b1 er aient/n'q' [^c]er +SFX b1 cer çaient/n'q' cer +SFX b1 er ai/n'j' [^c]er +SFX b1 cer çai/n'j' cer +SFX b1 er as/n' [^c]er +SFX b1 cer ças/n' cer +SFX b1 er a/n'q' [^c]er +SFX b1 cer ça/n'q' cer +SFX b1 er âmes/n' [^c]er +SFX b1 cer çâmes/n' cer +SFX b1 er âtes/n' [^c]er +SFX b1 cer çâtes/n' cer +SFX b1 er èrent/n'q' er +SFX b1 ecer ècerai/n'j' ecer +SFX b1 emer èmerai/n'j' emer +SFX b1 ener ènerai/n'j' ener +SFX b1 eper èperai/n'j' eper +SFX b1 erer èrerai/n'j' erer +SFX b1 eser èserai/n'j' eser +SFX b1 ever èverai/n'j' ever +SFX b1 evrer èvrerai/n'j' evrer +SFX b1 eter èterai/n'j' eter +SFX b1 eler èlerai/n'j' eler +SFX b1 ecer èceras/n' ecer +SFX b1 emer èmeras/n' emer +SFX b1 ener èneras/n' ener +SFX b1 eper èperas/n' eper +SFX b1 erer èreras/n' erer +SFX b1 eser èseras/n' eser +SFX b1 ever èveras/n' ever +SFX b1 evrer èvreras/n' evrer +SFX b1 eter èteras/n' eter +SFX b1 eler èleras/n' eler +SFX b1 ecer ècera/n'q' ecer +SFX b1 emer èmera/n'q' emer +SFX b1 ener ènera/n'q' ener +SFX b1 eper èpera/n'q' eper +SFX b1 erer èrera/n'q' erer +SFX b1 eser èsera/n'q' eser +SFX b1 ever èvera/n'q' ever +SFX b1 evrer èvrera/n'q' evrer +SFX b1 eter ètera/n'q' eter +SFX b1 eler èlera/n'q' eler +SFX b1 ecer ècerons/n' ecer +SFX b1 emer èmerons/n' emer +SFX b1 ener ènerons/n' ener +SFX b1 eper èperons/n' eper +SFX b1 erer èrerons/n' erer +SFX b1 eser èserons/n' eser +SFX b1 ever èverons/n' ever +SFX b1 evrer èvrerons/n' evrer +SFX b1 eter èterons/n' eter +SFX b1 eler èlerons/n' eler +SFX b1 ecer ècerez/n' ecer +SFX b1 emer èmerez/n' emer +SFX b1 ener ènerez/n' ener +SFX b1 eper èperez/n' eper +SFX b1 erer èrerez/n' erer +SFX b1 eser èserez/n' eser +SFX b1 ever èverez/n' ever +SFX b1 evrer èvrerez/n' evrer +SFX b1 eter èterez/n' eter +SFX b1 eler èlerez/n' eler +SFX b1 ecer èceront/n'q' ecer +SFX b1 emer èmeront/n'q' emer +SFX b1 ener èneront/n'q' ener +SFX b1 eper èperont/n'q' eper +SFX b1 erer èreront/n'q' erer +SFX b1 eser èseront/n'q' eser +SFX b1 ever èveront/n'q' ever +SFX b1 evrer èvreront/n'q' evrer +SFX b1 eter èteront/n'q' eter +SFX b1 eler èleront/n'q' eler +SFX b1 ecer ècerais/n'j' ecer +SFX b1 emer èmerais/n'j' emer +SFX b1 ener ènerais/n'j' ener +SFX b1 eper èperais/n'j' eper +SFX b1 erer èrerais/n'j' erer +SFX b1 eser èserais/n'j' eser +SFX b1 ever èverais/n'j' ever +SFX b1 evrer èvrerais/n'j' evrer +SFX b1 eter èterais/n'j' eter +SFX b1 eler èlerais/n' eler +SFX b1 ecer ècerait/n'q' ecer +SFX b1 emer èmerait/n'q' emer +SFX b1 ener ènerait/n'q' ener +SFX b1 eper èperait/n'q' eper +SFX b1 erer èrerait/n'q' erer +SFX b1 eser èserait/n'q' eser +SFX b1 ever èverait/n'q' ever +SFX b1 evrer èvrerait/n'q' evrer +SFX b1 eter èterait/n'q' eter +SFX b1 eler èlerait/n'q' eler +SFX b1 ecer ècerions/n' ecer +SFX b1 emer èmerions/n' emer +SFX b1 ener ènerions/n' ener +SFX b1 eper èperions/n' eper +SFX b1 erer èrerions/n' erer +SFX b1 eser èserions/n' eser +SFX b1 ever èverions/n' ever +SFX b1 evrer èvrerions/n' evrer +SFX b1 eter èterions/n' eter +SFX b1 eler èlerions/n' eler +SFX b1 ecer èceriez/n' ecer +SFX b1 emer èmeriez/n' emer +SFX b1 ener èneriez/n' ener +SFX b1 eper èperiez/n' eper +SFX b1 erer èreriez/n' erer +SFX b1 eser èseriez/n' eser +SFX b1 ever èveriez/n' ever +SFX b1 evrer èvreriez/n' evrer +SFX b1 eter èteriez/n' eter +SFX b1 eler èleriez/n' eler +SFX b1 ecer èceraient/n'q' ecer +SFX b1 emer èmeraient/n'q' emer +SFX b1 ener èneraient/n'q' ener +SFX b1 eper èperaient/n'q' eper +SFX b1 erer èreraient/n'q' erer +SFX b1 eser èseraient/n'q' eser +SFX b1 ever èveraient/n'q' ever +SFX b1 evrer èvreraient/n'q' evrer +SFX b1 eter èteraient/n'q' eter +SFX b1 eler èleraient/n'q' eler +SFX b1 er asse/n'j' [^c]er +SFX b1 cer çasse/n'j' cer +SFX b1 er asses/n' [^c]er +SFX b1 cer çasses/n' cer +SFX b1 er ât/n'q' [^c]er +SFX b1 cer çât/n'q' cer +SFX b1 er assions/n' [^c]er +SFX b1 cer çassions/n' cer +SFX b1 er assiez/n' [^c]er +SFX b1 cer çassiez/n' cer +SFX b1 er assent/n'q' [^c]er +SFX b1 cer çassent/n'q' cer +SFX b1 ecer èce/n' ecer +SFX b1 emer ème/n' emer +SFX b1 ener ène/n' ener +SFX b1 eper èpe/n' eper +SFX b1 erer ère/n' erer +SFX b1 eser èse/n' eser +SFX b1 ever ève/n' ever +SFX b1 evrer èvre/n' evrer +SFX b1 eter ète/n' eter +SFX b1 eler èle/n' eler +SFX b1 er ons/n' [^c]er +SFX b1 cer çons/n' cer +SFX b1 er ez/n' er + +SFX b2 Y 190 +SFX b2 er er/n'q'd'l'm't's' er +SFX b2 er ant/n'q'l'm't's' [^c]er +SFX b2 cer çant/n'q'l'm't's' cer +SFX b2 ecer èce/n'q'j'l'm't's' ecer +SFX b2 emer ème/n'q'j'l'm't's' emer +SFX b2 ener ène/n'q'j'l'm't's' ener +SFX b2 eper èpe/n'q'j'l'm't's' eper +SFX b2 erer ère/n'q'j'l'm't's' erer +SFX b2 eser èse/n'q'j'l'm't's' eser +SFX b2 ever ève/n'q'j'l'm't's' ever +SFX b2 evrer èvre/n'q'j'l'm't's' evrer +SFX b2 eter ète/n'q'j'l'm't's' eter +SFX b2 eler èle/n'q'j'l'm't's' eler +SFX b2 ecer èces/n'q'l'm' ecer +SFX b2 emer èmes/n'q'l'm' emer +SFX b2 ener ènes/n'q'l'm' ener +SFX b2 eper èpes/n'q'l'm' eper +SFX b2 erer ères/n'q'l'm' erer +SFX b2 eser èses/n'q'l'm' eser +SFX b2 ever èves/n'q'l'm' ever +SFX b2 evrer èvres/n'q'l'm' evrer +SFX b2 eter ètes/n'q'l'm' eter +SFX b2 eler èles/n'q'l'm' eler +SFX b2 er ons/n'q'l't' [^c]er +SFX b2 cer çons/n'q'l't' cer +SFX b2 er ez/n'q'l'm' er +SFX b2 ecer ècent/n'q'l'm't's' ecer +SFX b2 emer èment/n'q'l'm't's' emer +SFX b2 ener ènent/n'q'l'm't's' ener +SFX b2 eper èpent/n'q'l'm't's' eper +SFX b2 erer èrent/n'q'l'm't's' erer +SFX b2 eser èsent/n'q'l'm't's' eser +SFX b2 ever èvent/n'q'l'm't's' ever +SFX b2 evrer èvrent/n'q'l'm't's' evrer +SFX b2 eter ètent/n'q'l'm't's' eter +SFX b2 eler èlent/n'q'l'm't's' eler +SFX b2 er ais/n'q'j'l'm't' [^c]er +SFX b2 cer çais/n'q'j'l'm't' cer +SFX b2 er ait/n'q'l'm't's' [^c]er +SFX b2 cer çait/n'q'l'm't's' cer +SFX b2 er ions/n'q'l't' er +SFX b2 er iez/n'q'l'm' er +SFX b2 er aient/n'q'l'm't's' [^c]er +SFX b2 cer çaient/n'q'l'm't's' cer +SFX b2 er ai/n'q'j'l't' [^c]er +SFX b2 cer çai/n'q'j'l't' cer +SFX b2 er as/n'q'l'm' [^c]er +SFX b2 cer ças/n'q'l'm' cer +SFX b2 er a/n'q'l'm't's' [^c]er +SFX b2 cer ça/n'q'l'm't's' cer +SFX b2 er âmes/n'q'l't' [^c]er +SFX b2 cer çâmes/n'q'l't' cer +SFX b2 er âtes/n'q'l'm' [^c]er +SFX b2 cer çâtes/n'q'l'm' cer +SFX b2 er èrent/n'q'l'm't's' er +SFX b2 ecer ècerai/n'q'j'l't' ecer +SFX b2 emer èmerai/n'q'j'l't' emer +SFX b2 ener ènerai/n'q'j'l't' ener +SFX b2 eper èperai/n'q'j'l't' eper +SFX b2 erer èrerai/n'q'j'l't' erer +SFX b2 eser èserai/n'q'j'l't' eser +SFX b2 ever èverai/n'q'j'l't' ever +SFX b2 evrer èvrerai/n'q'j'l't' evrer +SFX b2 eter èterai/n'q'j'l't' eter +SFX b2 eler èlerai/n'q'j'l't' eler +SFX b2 ecer èceras/n'q'l'm' ecer +SFX b2 emer èmeras/n'q'l'm' emer +SFX b2 ener èneras/n'q'l'm' ener +SFX b2 eper èperas/n'q'l'm' eper +SFX b2 erer èreras/n'q'l'm' erer +SFX b2 eser èseras/n'q'l'm' eser +SFX b2 ever èveras/n'q'l'm' ever +SFX b2 evrer èvreras/n'q'l'm' evrer +SFX b2 eter èteras/n'q'l'm' eter +SFX b2 eler èleras/n'q'l'm' eler +SFX b2 ecer ècera/n'q'l'm't's' ecer +SFX b2 emer èmera/n'q'l'm't's' emer +SFX b2 ener ènera/n'q'l'm't's' ener +SFX b2 eper èpera/n'q'l'm't's' eper +SFX b2 erer èrera/n'q'l'm't's' erer +SFX b2 eser èsera/n'q'l'm't's' eser +SFX b2 ever èvera/n'q'l'm't's' ever +SFX b2 evrer èvrera/n'q'l'm't's' evrer +SFX b2 eter ètera/n'q'l'm't's' eter +SFX b2 eler èlera/n'q'l'm't's' eler +SFX b2 ecer ècerons/n'q'l't' ecer +SFX b2 emer èmerons/n'q'l't' emer +SFX b2 ener ènerons/n'q'l't' ener +SFX b2 eper èperons/n'q'l't' eper +SFX b2 erer èrerons/n'q'l't' erer +SFX b2 eser èserons/n'q'l't' eser +SFX b2 ever èverons/n'q'l't' ever +SFX b2 evrer èvrerons/n'q'l't' evrer +SFX b2 eter èterons/n'q'l't' eter +SFX b2 eler èlerons/n'q'l't' eler +SFX b2 ecer ècerez/n'q'l'm' ecer +SFX b2 emer èmerez/n'q'l'm' emer +SFX b2 ener ènerez/n'q'l'm' ener +SFX b2 eper èperez/n'q'l'm' eper +SFX b2 erer èrerez/n'q'l'm' erer +SFX b2 eser èserez/n'q'l'm' eser +SFX b2 ever èverez/n'q'l'm' ever +SFX b2 evrer èvrerez/n'q'l'm' evrer +SFX b2 eter èterez/n'q'l'm' eter +SFX b2 eler èlerez/n'q'l'm' eler +SFX b2 ecer èceront/n'q'l'm't's' ecer +SFX b2 emer èmeront/n'q'l'm't's' emer +SFX b2 ener èneront/n'q'l'm't's' ener +SFX b2 eper èperont/n'q'l'm't's' eper +SFX b2 erer èreront/n'q'l'm't's' erer +SFX b2 eser èseront/n'q'l'm't's' eser +SFX b2 ever èveront/n'q'l'm't's' ever +SFX b2 evrer èvreront/n'q'l'm't's' evrer +SFX b2 eter èteront/n'q'l'm't's' eter +SFX b2 eler èleront/n'q'l'm't's' eler +SFX b2 ecer ècerais/n'q'j'l'm't' ecer +SFX b2 emer èmerais/n'q'j'l'm't' emer +SFX b2 ener ènerais/n'q'j'l'm't' ener +SFX b2 eper èperais/n'q'j'l'm't' eper +SFX b2 erer èrerais/n'q'j'l'm't' erer +SFX b2 eser èserais/n'q'j'l'm't' eser +SFX b2 ever èverais/n'q'j'l'm't' ever +SFX b2 evrer èvrerais/n'q'j'l'm't' evrer +SFX b2 eter èterais/n'q'j'l'm't' eter +SFX b2 eler èlerais/n'q'j'l'm't' eler +SFX b2 ecer ècerait/n'q'l'm't's' ecer +SFX b2 emer èmerait/n'q'l'm't's' emer +SFX b2 ener ènerait/n'q'l'm't's' ener +SFX b2 eper èperait/n'q'l'm't's' eper +SFX b2 erer èrerait/n'q'l'm't's' erer +SFX b2 eser èserait/n'q'l'm't's' eser +SFX b2 ever èverait/n'q'l'm't's' ever +SFX b2 evrer èvrerait/n'q'l'm't's' evrer +SFX b2 eter èterait/n'q'l'm't's' eter +SFX b2 eler èlerait/n'q'l'm't's' eler +SFX b2 ecer ècerions/n'q'l't' ecer +SFX b2 emer èmerions/n'q'l't' emer +SFX b2 ener ènerions/n'q'l't' ener +SFX b2 eper èperions/n'q'l't' eper +SFX b2 erer èrerions/n'q'l't' erer +SFX b2 eser èserions/n'q'l't' eser +SFX b2 ever èverions/n'q'l't' ever +SFX b2 evrer èvrerions/n'q'l't' evrer +SFX b2 eter èterions/n'q'l't' eter +SFX b2 eler èlerions/n'q'l't' eler +SFX b2 ecer èceriez/n'q'l'm' ecer +SFX b2 emer èmeriez/n'q'l'm' emer +SFX b2 ener èneriez/n'q'l'm' ener +SFX b2 eper èperiez/n'q'l'm' eper +SFX b2 erer èreriez/n'q'l'm' erer +SFX b2 eser èseriez/n'q'l'm' eser +SFX b2 ever èveriez/n'q'l'm' ever +SFX b2 evrer èvreriez/n'q'l'm' evrer +SFX b2 eter èteriez/n'q'l'm' eter +SFX b2 eler èleriez/n'q'l'm' eler +SFX b2 ecer èceraient/n'q'l'm't's' ecer +SFX b2 emer èmeraient/n'q'l'm't's' emer +SFX b2 ener èneraient/n'q'l'm't's' ener +SFX b2 eper èperaient/n'q'l'm't's' eper +SFX b2 erer èreraient/n'q'l'm't's' erer +SFX b2 eser èseraient/n'q'l'm't's' eser +SFX b2 ever èveraient/n'q'l'm't's' ever +SFX b2 evrer èvreraient/n'q'l'm't's' evrer +SFX b2 eter èteraient/n'q'l'm't's' eter +SFX b2 eler èleraient/n'q'l'm't's' eler +SFX b2 er asse/n'q'j'l't' [^c]er +SFX b2 cer çasse/n'q'j'l't' cer +SFX b2 er asses/n'q'l'm' [^c]er +SFX b2 cer çasses/n'q'l'm' cer +SFX b2 er ât/n'q'l'm't's' [^c]er +SFX b2 cer çât/n'q'l'm't's' cer +SFX b2 er assions/n'q'l't' [^c]er +SFX b2 cer çassions/n'q'l't' cer +SFX b2 er assiez/n'q'l'm' [^c]er +SFX b2 cer çassiez/n'q'l'm' cer +SFX b2 er assent/n'q'l'm't's' [^c]er +SFX b2 cer çassent/n'q'l'm't's' cer +SFX b2 ecer èce/n'l'm' ecer +SFX b2 emer ème/n'l'm' emer +SFX b2 ener ène/n'l'm' ener +SFX b2 eper èpe/n'l'm' eper +SFX b2 erer ère/n'l'm' erer +SFX b2 eser èse/n'l'm' eser +SFX b2 ever ève/n'l'm' ever +SFX b2 evrer èvre/n'l'm' evrer +SFX b2 eter ète/n'l'm' eter +SFX b2 eler èle/n'l'm' eler +SFX b2 er ons/n'l' [^c]er +SFX b2 cer çons/n'l' cer +SFX b2 er ez/n'l'm' er + +SFX b3 Y 190 +SFX b3 er er/m't's' er +SFX b3 er ant/m't's' [^c]er +SFX b3 cer çant/m't's' cer +SFX b3 ecer èce/m's' ecer +SFX b3 emer ème/m's' emer +SFX b3 ener ène/m's' ener +SFX b3 eper èpe/m's' eper +SFX b3 erer ère/m's' erer +SFX b3 eser èse/m's' eser +SFX b3 ever ève/m's' ever +SFX b3 evrer èvre/m's' evrer +SFX b3 eter ète/m's' eter +SFX b3 eler èle/m's' eler +SFX b3 ecer èces/t' ecer +SFX b3 emer èmes/t' emer +SFX b3 ener ènes/t' ener +SFX b3 eper èpes/t' eper +SFX b3 erer ères/t' erer +SFX b3 eser èses/t' eser +SFX b3 ever èves/t' ever +SFX b3 evrer èvres/t' evrer +SFX b3 eter ètes/t' eter +SFX b3 eler èles/t' eler +SFX b3 er ons [^c]er +SFX b3 cer çons cer +SFX b3 er ez er +SFX b3 ecer ècent/s' ecer +SFX b3 emer èment/s' emer +SFX b3 ener ènent/s' ener +SFX b3 eper èpent/s' eper +SFX b3 erer èrent/s' erer +SFX b3 eser èsent/s' eser +SFX b3 ever èvent/s' ever +SFX b3 evrer èvrent/s' evrer +SFX b3 eter ètent/s' eter +SFX b3 eler èlent/s' eler +SFX b3 er ais/m't' [^c]er +SFX b3 cer çais/m't' cer +SFX b3 er ait/s' [^c]er +SFX b3 cer çait/s' cer +SFX b3 er ions er +SFX b3 er iez er +SFX b3 er aient/s' [^c]er +SFX b3 cer çaient/s' cer +SFX b3 er ai/m' [^c]er +SFX b3 cer çai/m' cer +SFX b3 er as/t' [^c]er +SFX b3 cer ças/t' cer +SFX b3 er a/s' [^c]er +SFX b3 cer ça/s' cer +SFX b3 er âmes [^c]er +SFX b3 cer çâmes cer +SFX b3 er âtes [^c]er +SFX b3 cer çâtes cer +SFX b3 er èrent/s' er +SFX b3 ecer ècerai/m' ecer +SFX b3 emer èmerai/m' emer +SFX b3 ener ènerai/m' ener +SFX b3 eper èperai/m' eper +SFX b3 erer èrerai/m' erer +SFX b3 eser èserai/m' eser +SFX b3 ever èverai/m' ever +SFX b3 evrer èvrerai/m' evrer +SFX b3 eter èterai/m' eter +SFX b3 eler èlerai/m' eler +SFX b3 ecer èceras/t' ecer +SFX b3 emer èmeras/t' emer +SFX b3 ener èneras/t' ener +SFX b3 eper èperas/t' eper +SFX b3 erer èreras/t' erer +SFX b3 eser èseras/t' eser +SFX b3 ever èveras/t' ever +SFX b3 evrer èvreras/t' evrer +SFX b3 eter èteras/t' eter +SFX b3 eler èleras/t' eler +SFX b3 ecer ècera/s' ecer +SFX b3 emer èmera/s' emer +SFX b3 ener ènera/s' ener +SFX b3 eper èpera/s' eper +SFX b3 erer èrera/s' erer +SFX b3 eser èsera/s' eser +SFX b3 ever èvera/s' ever +SFX b3 evrer èvrera/s' evrer +SFX b3 eter ètera/s' eter +SFX b3 eler èlera/s' eler +SFX b3 ecer ècerons ecer +SFX b3 emer èmerons emer +SFX b3 ener ènerons ener +SFX b3 eper èperons eper +SFX b3 erer èrerons erer +SFX b3 eser èserons eser +SFX b3 ever èverons ever +SFX b3 evrer èvrerons evrer +SFX b3 eter èterons eter +SFX b3 eler èlerons eler +SFX b3 ecer ècerez ecer +SFX b3 emer èmerez emer +SFX b3 ener ènerez ener +SFX b3 eper èperez eper +SFX b3 erer èrerez erer +SFX b3 eser èserez eser +SFX b3 ever èverez ever +SFX b3 evrer èvrerez evrer +SFX b3 eter èterez eter +SFX b3 eler èlerez eler +SFX b3 ecer èceront/s' ecer +SFX b3 emer èmeront/s' emer +SFX b3 ener èneront/s' ener +SFX b3 eper èperont/s' eper +SFX b3 erer èreront/s' erer +SFX b3 eser èseront/s' eser +SFX b3 ever èveront/s' ever +SFX b3 evrer èvreront/s' evrer +SFX b3 eter èteront/s' eter +SFX b3 eler èleront/s' eler +SFX b3 ecer ècerais/m't' ecer +SFX b3 emer èmerais/m't' emer +SFX b3 ener ènerais/m't' ener +SFX b3 eper èperais/m't' eper +SFX b3 erer èrerais/m't' erer +SFX b3 eser èserais/m't' eser +SFX b3 ever èverais/m't' ever +SFX b3 evrer èvrerais/m't' evrer +SFX b3 eter èterais/m't' eter +SFX b3 eler èlerais/m't' eler +SFX b3 ecer ècerait/s' ecer +SFX b3 emer èmerait/s' emer +SFX b3 ener ènerait/s' ener +SFX b3 eper èperait/s' eper +SFX b3 erer èrerait/s' erer +SFX b3 eser èserait/s' eser +SFX b3 ever èverait/s' ever +SFX b3 evrer èvrerait/s' evrer +SFX b3 eter èterait/s' eter +SFX b3 eler èlerait/s' eler +SFX b3 ecer ècerions ecer +SFX b3 emer èmerions emer +SFX b3 ener ènerions ener +SFX b3 eper èperions eper +SFX b3 erer èrerions erer +SFX b3 eser èserions eser +SFX b3 ever èverions ever +SFX b3 evrer èvrerions evrer +SFX b3 eter èterions eter +SFX b3 eler èlerions eler +SFX b3 ecer èceriez ecer +SFX b3 emer èmeriez emer +SFX b3 ener èneriez ener +SFX b3 eper èperiez eper +SFX b3 erer èreriez erer +SFX b3 eser èseriez eser +SFX b3 ever èveriez ever +SFX b3 evrer èvreriez evrer +SFX b3 eter èteriez eter +SFX b3 eler èleriez eler +SFX b3 ecer èceraient/s' ecer +SFX b3 emer èmeraient/s' emer +SFX b3 ener èneraient/s' ener +SFX b3 eper èperaient/s' eper +SFX b3 erer èreraient/s' erer +SFX b3 eser èseraient/s' eser +SFX b3 ever èveraient/s' ever +SFX b3 evrer èvreraient/s' evrer +SFX b3 eter èteraient/s' eter +SFX b3 eler èleraient/s' eler +SFX b3 er asse/m' [^c]er +SFX b3 cer çasse/m' cer +SFX b3 er asses/t' [^c]er +SFX b3 cer çasses/t' cer +SFX b3 er ât/s' [^c]er +SFX b3 cer çât/s' cer +SFX b3 er assions [^c]er +SFX b3 cer çassions cer +SFX b3 er assiez [^c]er +SFX b3 cer çassiez cer +SFX b3 er assent/s' [^c]er +SFX b3 cer çassent/s' cer +SFX b3 ecer èce/t' ecer +SFX b3 emer ème/t' emer +SFX b3 ener ène/t' ener +SFX b3 eper èpe/t' eper +SFX b3 erer ère/t' erer +SFX b3 eser èse/t' eser +SFX b3 ever ève/t' ever +SFX b3 evrer èvre/t' evrer +SFX b3 eter ète/t' eter +SFX b3 eler èle/t' eler +SFX b3 er ons [^c]er +SFX b3 cer çons cer +SFX b3 er ez er + +SFX b4 Y 190 +SFX b4 er er/n'q'd'l'm't's' er +SFX b4 er ant/n'q'l'm't's' [^c]er +SFX b4 cer çant/n'q'l'm't's' cer +SFX b4 ecer èce/n'q'j'l'm't's' ecer +SFX b4 emer ème/n'q'j'l'm't's' emer +SFX b4 ener ène/n'q'j'l'm't's' ener +SFX b4 eper èpe/n'q'j'l'm't's' eper +SFX b4 erer ère/n'q'j'l'm't's' erer +SFX b4 eser èse/n'q'j'l'm't's' eser +SFX b4 ever ève/n'q'j'l'm't's' ever +SFX b4 evrer èvre/n'q'j'l'm't's' evrer +SFX b4 eter ète/n'q'j'l'm't's' eter +SFX b4 eler èle/n'q'j'l'm't's' eler +SFX b4 ecer èces/n'q'l'm't' ecer +SFX b4 emer èmes/n'q'l'm't' emer +SFX b4 ener ènes/n'q'l'm't' ener +SFX b4 eper èpes/n'q'l'm't' eper +SFX b4 erer ères/n'q'l'm't' erer +SFX b4 eser èses/n'q'l'm't' eser +SFX b4 ever èves/n'q'l'm't' ever +SFX b4 evrer èvres/n'q'l'm't' evrer +SFX b4 eter ètes/n'q'l'm't' eter +SFX b4 eler èles/n'q'l'm't' eler +SFX b4 er ons/n'q'l't' [^c]er +SFX b4 cer çons/n'q'l't' cer +SFX b4 er ez/n'q'l'm' er +SFX b4 ecer ècent/n'q'l'm't's' ecer +SFX b4 emer èment/n'q'l'm't's' emer +SFX b4 ener ènent/n'q'l'm't's' ener +SFX b4 eper èpent/n'q'l'm't's' eper +SFX b4 erer èrent/n'q'l'm't's' erer +SFX b4 eser èsent/n'q'l'm't's' eser +SFX b4 ever èvent/n'q'l'm't's' ever +SFX b4 evrer èvrent/n'q'l'm't's' evrer +SFX b4 eter ètent/n'q'l'm't's' eter +SFX b4 eler èlent/n'q'l'm't's' eler +SFX b4 er ais/n'q'j'l'm't' [^c]er +SFX b4 cer çais/n'q'j'l'm't' cer +SFX b4 er ait/n'q'l'm't's' [^c]er +SFX b4 cer çait/n'q'l'm't's' cer +SFX b4 er ions/n'q'l't' er +SFX b4 er iez/n'q'l'm' er +SFX b4 er aient/n'q'l'm't's' [^c]er +SFX b4 cer çaient/n'q'l'm't's' cer +SFX b4 er ai/n'q'j'l'm't' [^c]er +SFX b4 cer çai/n'q'j'l'm't' cer +SFX b4 er as/n'q'l'm't' [^c]er +SFX b4 cer ças/n'q'l'm't' cer +SFX b4 er a/n'q'l'm't's' [^c]er +SFX b4 cer ça/n'q'l'm't's' cer +SFX b4 er âmes/n'q'l't' [^c]er +SFX b4 cer çâmes/n'q'l't' cer +SFX b4 er âtes/n'q'l'm' [^c]er +SFX b4 cer çâtes/n'q'l'm' cer +SFX b4 er èrent/n'q'l'm't's' er +SFX b4 ecer ècerai/n'q'j'l'm't' ecer +SFX b4 emer èmerai/n'q'j'l'm't' emer +SFX b4 ener ènerai/n'q'j'l'm't' ener +SFX b4 eper èperai/n'q'j'l'm't' eper +SFX b4 erer èrerai/n'q'j'l'm't' erer +SFX b4 eser èserai/n'q'j'l'm't' eser +SFX b4 ever èverai/n'q'j'l'm't' ever +SFX b4 evrer èvrerai/n'q'j'l'm't' evrer +SFX b4 eter èterai/n'q'j'l'm't' eter +SFX b4 eler èlerai/n'q'j'l'm't' eler +SFX b4 ecer èceras/n'q'l'm't' ecer +SFX b4 emer èmeras/n'q'l'm't' emer +SFX b4 ener èneras/n'q'l'm't' ener +SFX b4 eper èperas/n'q'l'm't' eper +SFX b4 erer èreras/n'q'l'm't' erer +SFX b4 eser èseras/n'q'l'm't' eser +SFX b4 ever èveras/n'q'l'm't' ever +SFX b4 evrer èvreras/n'q'l'm't' evrer +SFX b4 eter èteras/n'q'l'm't' eter +SFX b4 eler èleras/n'q'l'm't' eler +SFX b4 ecer ècera/n'q'l'm't's' ecer +SFX b4 emer èmera/n'q'l'm't's' emer +SFX b4 ener ènera/n'q'l'm't's' ener +SFX b4 eper èpera/n'q'l'm't's' eper +SFX b4 erer èrera/n'q'l'm't's' erer +SFX b4 eser èsera/n'q'l'm't's' eser +SFX b4 ever èvera/n'q'l'm't's' ever +SFX b4 evrer èvrera/n'q'l'm't's' evrer +SFX b4 eter ètera/n'q'l'm't's' eter +SFX b4 eler èlera/n'q'l'm't's' eler +SFX b4 ecer ècerons/n'q'l't' ecer +SFX b4 emer èmerons/n'q'l't' emer +SFX b4 ener ènerons/n'q'l't' ener +SFX b4 eper èperons/n'q'l't' eper +SFX b4 erer èrerons/n'q'l't' erer +SFX b4 eser èserons/n'q'l't' eser +SFX b4 ever èverons/n'q'l't' ever +SFX b4 evrer èvrerons/n'q'l't' evrer +SFX b4 eter èterons/n'q'l't' eter +SFX b4 eler èlerons/n'q'l't' eler +SFX b4 ecer ècerez/n'q'l'm' ecer +SFX b4 emer èmerez/n'q'l'm' emer +SFX b4 ener ènerez/n'q'l'm' ener +SFX b4 eper èperez/n'q'l'm' eper +SFX b4 erer èrerez/n'q'l'm' erer +SFX b4 eser èserez/n'q'l'm' eser +SFX b4 ever èverez/n'q'l'm' ever +SFX b4 evrer èvrerez/n'q'l'm' evrer +SFX b4 eter èterez/n'q'l'm' eter +SFX b4 eler èlerez/n'q'l'm' eler +SFX b4 ecer èceront/n'q'l'm't's' ecer +SFX b4 emer èmeront/n'q'l'm't's' emer +SFX b4 ener èneront/n'q'l'm't's' ener +SFX b4 eper èperont/n'q'l'm't's' eper +SFX b4 erer èreront/n'q'l'm't's' erer +SFX b4 eser èseront/n'q'l'm't's' eser +SFX b4 ever èveront/n'q'l'm't's' ever +SFX b4 evrer èvreront/n'q'l'm't's' evrer +SFX b4 eter èteront/n'q'l'm't's' eter +SFX b4 eler èleront/n'q'l'm't's' eler +SFX b4 ecer ècerais/n'q'j'l'm't' ecer +SFX b4 emer èmerais/n'q'j'l'm't' emer +SFX b4 ener ènerais/n'q'j'l'm't' ener +SFX b4 eper èperais/n'q'j'l'm't' eper +SFX b4 erer èrerais/n'q'j'l'm't' erer +SFX b4 eser èserais/n'q'j'l'm't' eser +SFX b4 ever èverais/n'q'j'l'm't' ever +SFX b4 evrer èvrerais/n'q'j'l'm't' evrer +SFX b4 eter èterais/n'q'j'l'm't' eter +SFX b4 eler èlerais/n'q'j'l'm't' eler +SFX b4 ecer ècerait/n'q'l'm't's' ecer +SFX b4 emer èmerait/n'q'l'm't's' emer +SFX b4 ener ènerait/n'q'l'm't's' ener +SFX b4 eper èperait/n'q'l'm't's' eper +SFX b4 erer èrerait/n'q'l'm't's' erer +SFX b4 eser èserait/n'q'l'm't's' eser +SFX b4 ever èverait/n'q'l'm't's' ever +SFX b4 evrer èvrerait/n'q'l'm't's' evrer +SFX b4 eter èterait/n'q'l'm't's' eter +SFX b4 eler èlerait/n'q'l'm't's' eler +SFX b4 ecer ècerions/n'q'l't' ecer +SFX b4 emer èmerions/n'q'l't' emer +SFX b4 ener ènerions/n'q'l't' ener +SFX b4 eper èperions/n'q'l't' eper +SFX b4 erer èrerions/n'q'l't' erer +SFX b4 eser èserions/n'q'l't' eser +SFX b4 ever èverions/n'q'l't' ever +SFX b4 evrer èvrerions/n'q'l't' evrer +SFX b4 eter èterions/n'q'l't' eter +SFX b4 eler èlerions/n'q'l't' eler +SFX b4 ecer èceriez/n'q'l'm' ecer +SFX b4 emer èmeriez/n'q'l'm' emer +SFX b4 ener èneriez/n'q'l'm' ener +SFX b4 eper èperiez/n'q'l'm' eper +SFX b4 erer èreriez/n'q'l'm' erer +SFX b4 eser èseriez/n'q'l'm' eser +SFX b4 ever èveriez/n'q'l'm' ever +SFX b4 evrer èvreriez/n'q'l'm' evrer +SFX b4 eter èteriez/n'q'l'm' eter +SFX b4 eler èleriez/n'q'l'm' eler +SFX b4 ecer èceraient/n'q'l'm't's' ecer +SFX b4 emer èmeraient/n'q'l'm't's' emer +SFX b4 ener èneraient/n'q'l'm't's' ener +SFX b4 eper èperaient/n'q'l'm't's' eper +SFX b4 erer èreraient/n'q'l'm't's' erer +SFX b4 eser èseraient/n'q'l'm't's' eser +SFX b4 ever èveraient/n'q'l'm't's' ever +SFX b4 evrer èvreraient/n'q'l'm't's' evrer +SFX b4 eter èteraient/n'q'l'm't's' eter +SFX b4 eler èleraient/n'q'l'm't's' eler +SFX b4 er asse/n'q'j'l'm't' [^c]er +SFX b4 cer çasse/n'q'j'l'm't' cer +SFX b4 er asses/n'q'l'm't' [^c]er +SFX b4 cer çasses/n'q'l'm't' cer +SFX b4 er ât/n'q'l'm't's' [^c]er +SFX b4 cer çât/n'q'l'm't's' cer +SFX b4 er assions/n'q'l't' [^c]er +SFX b4 cer çassions/n'q'l't' cer +SFX b4 er assiez/n'q'l'm' [^c]er +SFX b4 cer çassiez/n'q'l'm' cer +SFX b4 er assent/n'q'l'm't's' [^c]er +SFX b4 cer çassent/n'q'l'm't's' cer +SFX b4 ecer èce/n'l'm't' ecer +SFX b4 emer ème/n'l'm't' emer +SFX b4 ener ène/n'l'm't' ener +SFX b4 eper èpe/n'l'm't' eper +SFX b4 erer ère/n'l'm't' erer +SFX b4 eser èse/n'l'm't' eser +SFX b4 ever ève/n'l'm't' ever +SFX b4 evrer èvre/n'l'm't' evrer +SFX b4 eter ète/n'l'm't' eter +SFX b4 eler èle/n'l'm't' eler +SFX b4 er ons/n'l' [^c]er +SFX b4 cer çons/n'l' cer +SFX b4 er ez/n'l'm' er + +SFX b5 Y 190 +SFX b5 er er/n'q'd'm't's' er +SFX b5 er ant/n'q'm't's' [^c]er +SFX b5 cer çant/n'q'm't's' cer +SFX b5 ecer èce/n'q'j'm't's' ecer +SFX b5 emer ème/n'q'j'm't's' emer +SFX b5 ener ène/n'q'j'm't's' ener +SFX b5 eper èpe/n'q'j'm't's' eper +SFX b5 erer ère/n'q'j'm't's' erer +SFX b5 eser èse/n'q'j'm't's' eser +SFX b5 ever ève/n'q'j'm't's' ever +SFX b5 evrer èvre/n'q'j'm't's' evrer +SFX b5 eter ète/n'q'j'm't's' eter +SFX b5 eler èle/n'q'j'm't's' eler +SFX b5 ecer èces/n'm't' ecer +SFX b5 emer èmes/n'm't' emer +SFX b5 ener ènes/n'm't' ener +SFX b5 eper èpes/n'm't' eper +SFX b5 erer ères/n'm't' erer +SFX b5 eser èses/n'm't' eser +SFX b5 ever èves/n'm't' ever +SFX b5 evrer èvres/n'm't' evrer +SFX b5 eter ètes/n'm't' eter +SFX b5 eler èles/n'm't' eler +SFX b5 er ons/n't' [^c]er +SFX b5 cer çons/n't' cer +SFX b5 er ez/n'm' er +SFX b5 ecer ècent/n'q'm't's' ecer +SFX b5 emer èment/n'q'm't's' emer +SFX b5 ener ènent/n'q'm't's' ener +SFX b5 eper èpent/n'q'm't's' eper +SFX b5 erer èrent/n'q'm't's' erer +SFX b5 eser èsent/n'q'm't's' eser +SFX b5 ever èvent/n'q'm't's' ever +SFX b5 evrer èvrent/n'q'm't's' evrer +SFX b5 eter ètent/n'q'm't's' eter +SFX b5 eler èlent/n'q'm't's' eler +SFX b5 er ais/n'j'm't' [^c]er +SFX b5 cer çais/n'j'm't' cer +SFX b5 er ait/n'q'm't's' [^c]er +SFX b5 cer çait/n'q'm't's' cer +SFX b5 er ions/n't' er +SFX b5 er iez/n'm' er +SFX b5 er aient/n'q'm't's' [^c]er +SFX b5 cer çaient/n'q'm't's' cer +SFX b5 er ai/n'j'm't' [^c]er +SFX b5 cer çai/n'j'm't' cer +SFX b5 er as/n'm't' [^c]er +SFX b5 cer ças/n'm't' cer +SFX b5 er a/n'q'm't's' [^c]er +SFX b5 cer ça/n'q'm't's' cer +SFX b5 er âmes/n't' [^c]er +SFX b5 cer çâmes/n't' cer +SFX b5 er âtes/n'm' [^c]er +SFX b5 cer çâtes/n'm' cer +SFX b5 er èrent/n'q'm't's' er +SFX b5 ecer ècerai/n'j'm't' ecer +SFX b5 emer èmerai/n'j'm't' emer +SFX b5 ener ènerai/n'j'm't' ener +SFX b5 eper èperai/n'j'm't' eper +SFX b5 erer èrerai/n'j'm't' erer +SFX b5 eser èserai/n'j'm't' eser +SFX b5 ever èverai/n'j'm't' ever +SFX b5 evrer èvrerai/n'j'm't' evrer +SFX b5 eter èterai/n'j'm't' eter +SFX b5 eler èlerai/n'j'm't' eler +SFX b5 ecer èceras/n'm't' ecer +SFX b5 emer èmeras/n'm't' emer +SFX b5 ener èneras/n'm't' ener +SFX b5 eper èperas/n'm't' eper +SFX b5 erer èreras/n'm't' erer +SFX b5 eser èseras/n'm't' eser +SFX b5 ever èveras/n'm't' ever +SFX b5 evrer èvreras/n'm't' evrer +SFX b5 eter èteras/n'm't' eter +SFX b5 eler èleras/n'm't' eler +SFX b5 ecer ècera/n'q'm't's' ecer +SFX b5 emer èmera/n'q'm't's' emer +SFX b5 ener ènera/n'q'm't's' ener +SFX b5 eper èpera/n'q'm't's' eper +SFX b5 erer èrera/n'q'm't's' erer +SFX b5 eser èsera/n'q'm't's' eser +SFX b5 ever èvera/n'q'm't's' ever +SFX b5 evrer èvrera/n'q'm't's' evrer +SFX b5 eter ètera/n'q'm't's' eter +SFX b5 eler èlera/n'q'm't's' eler +SFX b5 ecer ècerons/n't' ecer +SFX b5 emer èmerons/n't' emer +SFX b5 ener ènerons/n't' ener +SFX b5 eper èperons/n't' eper +SFX b5 erer èrerons/n't' erer +SFX b5 eser èserons/n't' eser +SFX b5 ever èverons/n't' ever +SFX b5 evrer èvrerons/n't' evrer +SFX b5 eter èterons/n't' eter +SFX b5 eler èlerons/n't' eler +SFX b5 ecer ècerez/n'm' ecer +SFX b5 emer èmerez/n'm' emer +SFX b5 ener ènerez/n'm' ener +SFX b5 eper èperez/n'm' eper +SFX b5 erer èrerez/n'm' erer +SFX b5 eser èserez/n'm' eser +SFX b5 ever èverez/n'm' ever +SFX b5 evrer èvrerez/n'm' evrer +SFX b5 eter èterez/n'm' eter +SFX b5 eler èlerez/n'm' eler +SFX b5 ecer èceront/n'q'm't's' ecer +SFX b5 emer èmeront/n'q'm't's' emer +SFX b5 ener èneront/n'q'm't's' ener +SFX b5 eper èperont/n'q'm't's' eper +SFX b5 erer èreront/n'q'm't's' erer +SFX b5 eser èseront/n'q'm't's' eser +SFX b5 ever èveront/n'q'm't's' ever +SFX b5 evrer èvreront/n'q'm't's' evrer +SFX b5 eter èteront/n'q'm't's' eter +SFX b5 eler èleront/n'q'm't's' eler +SFX b5 ecer ècerais/n'j'm't' ecer +SFX b5 emer èmerais/n'j'm't' emer +SFX b5 ener ènerais/n'j'm't' ener +SFX b5 eper èperais/n'j'm't' eper +SFX b5 erer èrerais/n'j'm't' erer +SFX b5 eser èserais/n'j'm't' eser +SFX b5 ever èverais/n'j'm't' ever +SFX b5 evrer èvrerais/n'j'm't' evrer +SFX b5 eter èterais/n'j'm't' eter +SFX b5 eler èlerais/n'j'm't' eler +SFX b5 ecer ècerait/n'q'm't's' ecer +SFX b5 emer èmerait/n'q'm't's' emer +SFX b5 ener ènerait/n'q'm't's' ener +SFX b5 eper èperait/n'q'm't's' eper +SFX b5 erer èrerait/n'q'm't's' erer +SFX b5 eser èserait/n'q'm't's' eser +SFX b5 ever èverait/n'q'm't's' ever +SFX b5 evrer èvrerait/n'q'm't's' evrer +SFX b5 eter èterait/n'q'm't's' eter +SFX b5 eler èlerait/n'q'm't's' eler +SFX b5 ecer ècerions/n't' ecer +SFX b5 emer èmerions/n't' emer +SFX b5 ener ènerions/n't' ener +SFX b5 eper èperions/n't' eper +SFX b5 erer èrerions/n't' erer +SFX b5 eser èserions/n't' eser +SFX b5 ever èverions/n't' ever +SFX b5 evrer èvrerions/n't' evrer +SFX b5 eter èterions/n't' eter +SFX b5 eler èlerions/n't' eler +SFX b5 ecer èceriez/n'm' ecer +SFX b5 emer èmeriez/n'm' emer +SFX b5 ener èneriez/n'm' ener +SFX b5 eper èperiez/n'm' eper +SFX b5 erer èreriez/n'm' erer +SFX b5 eser èseriez/n'm' eser +SFX b5 ever èveriez/n'm' ever +SFX b5 evrer èvreriez/n'm' evrer +SFX b5 eter èteriez/n'm' eter +SFX b5 eler èleriez/n'm' eler +SFX b5 ecer èceraient/n'q'm't's' ecer +SFX b5 emer èmeraient/n'q'm't's' emer +SFX b5 ener èneraient/n'q'm't's' ener +SFX b5 eper èperaient/n'q'm't's' eper +SFX b5 erer èreraient/n'q'm't's' erer +SFX b5 eser èseraient/n'q'm't's' eser +SFX b5 ever èveraient/n'q'm't's' ever +SFX b5 evrer èvreraient/n'q'm't's' evrer +SFX b5 eter èteraient/n'q'm't's' eter +SFX b5 eler èleraient/n'q'm't's' eler +SFX b5 er asse/n'j'm't' [^c]er +SFX b5 cer çasse/n'j'm't' cer +SFX b5 er asses/n'm't' [^c]er +SFX b5 cer çasses/n'm't' cer +SFX b5 er ât/n'q'm't's' [^c]er +SFX b5 cer çât/n'q'm't's' cer +SFX b5 er assions/n't' [^c]er +SFX b5 cer çassions/n't' cer +SFX b5 er assiez/n'm' [^c]er +SFX b5 cer çassiez/n'm' cer +SFX b5 er assent/n'q'm't's' [^c]er +SFX b5 cer çassent/n'q'm't's' cer +SFX b5 ecer èce/n'm' ecer +SFX b5 emer ème/n'm' emer +SFX b5 ener ène/n'm' ener +SFX b5 eper èpe/n'm' eper +SFX b5 erer ère/n'm' erer +SFX b5 eser èse/n'm' eser +SFX b5 ever ève/n'm' ever +SFX b5 evrer èvre/n'm' evrer +SFX b5 eter ète/n'm' eter +SFX b5 eler èle/n'm' eler +SFX b5 er ons/n' [^c]er +SFX b5 cer çons/n' cer +SFX b5 er ez/n' er + +SFX c0 N 151 +SFX c0 er ant [^cg]er +SFX c0 écer éçant écer +SFX c0 éger égeant éger +SFX c0 ébrer èbre ébrer +SFX c0 écer èce écer +SFX c0 écher èche écher +SFX c0 écrer ècre écrer +SFX c0 éder ède éder +SFX c0 éger ège éger +SFX c0 égler ègle égler +SFX c0 égner ègne égner +SFX c0 égrer ègre égrer +SFX c0 éguer ègue éguer +SFX c0 éler èle éler +SFX c0 émer ème émer +SFX c0 éner ène éner +SFX c0 éper èpe éper +SFX c0 équer èque équer +SFX c0 érer ère érer +SFX c0 éser èse éser +SFX c0 éter ète éter +SFX c0 étrer ètre étrer +SFX c0 évrer èvre évrer +SFX c0 éyer èye éyer +SFX c0 ébrer èbres ébrer +SFX c0 écer èces écer +SFX c0 écher èches écher +SFX c0 écrer ècres écrer +SFX c0 éder èdes éder +SFX c0 éger èges éger +SFX c0 égler ègles égler +SFX c0 égner ègnes égner +SFX c0 égrer ègres égrer +SFX c0 éguer ègues éguer +SFX c0 éler èles éler +SFX c0 émer èmes émer +SFX c0 éner ènes éner +SFX c0 éper èpes éper +SFX c0 équer èques équer +SFX c0 érer ères érer +SFX c0 éser èses éser +SFX c0 éter ètes éter +SFX c0 étrer ètres étrer +SFX c0 évrer èvres évrer +SFX c0 éyer èyes éyer +SFX c0 er ons [^cg]er +SFX c0 écer éçons écer +SFX c0 éger égeons éger +SFX c0 er ez er +SFX c0 ébrer èbrent ébrer +SFX c0 écer ècent écer +SFX c0 écher èchent écher +SFX c0 écrer ècrent écrer +SFX c0 éder èdent éder +SFX c0 éger ègent éger +SFX c0 égler èglent égler +SFX c0 égner ègnent égner +SFX c0 égrer ègrent égrer +SFX c0 éguer èguent éguer +SFX c0 éler èlent éler +SFX c0 émer èment émer +SFX c0 éner ènent éner +SFX c0 éper èpent éper +SFX c0 équer èquent équer +SFX c0 érer èrent érer +SFX c0 éser èsent éser +SFX c0 éter ètent éter +SFX c0 étrer ètrent étrer +SFX c0 évrer èvrent évrer +SFX c0 éyer èyent éyer +SFX c0 er ais [^cg]er +SFX c0 écer éçais écer +SFX c0 éger égeais éger +SFX c0 er ait [^cg]er +SFX c0 écer éçait écer +SFX c0 éger égeait éger +SFX c0 er ions er +SFX c0 er iez er +SFX c0 er aient [^cg]er +SFX c0 écer éçaient écer +SFX c0 éger égeaient éger +SFX c0 er ai [^cg]er +SFX c0 écer éçai écer +SFX c0 éger égeai éger +SFX c0 er as [^cg]er +SFX c0 écer éças écer +SFX c0 éger égeas éger +SFX c0 er a [^cg]er +SFX c0 écer éça écer +SFX c0 éger égea éger +SFX c0 er âmes [^cg]er +SFX c0 écer éçâmes écer +SFX c0 éger égeâmes éger +SFX c0 er âtes [^cg]er +SFX c0 écer éçâtes écer +SFX c0 éger égeâtes éger +SFX c0 er èrent er +SFX c0 er erai er +SFX c0 er eras er +SFX c0 er era er +SFX c0 er erons er +SFX c0 er erez er +SFX c0 er eront er +SFX c0 er erais er +SFX c0 er erait er +SFX c0 er erions er +SFX c0 er eriez er +SFX c0 er eraient er +SFX c0 er asse [^cg]er +SFX c0 écer éçasse écer +SFX c0 éger égeasse éger +SFX c0 er asses [^cg]er +SFX c0 écer éçasses écer +SFX c0 éger égeasses éger +SFX c0 er ât [^cg]er +SFX c0 écer éçât écer +SFX c0 éger égeât éger +SFX c0 er assions [^cg]er +SFX c0 écer éçassions écer +SFX c0 éger égeassions éger +SFX c0 er assiez [^cg]er +SFX c0 écer éçassiez écer +SFX c0 éger égeassiez éger +SFX c0 er assent [^cg]er +SFX c0 écer éçassent écer +SFX c0 éger égeassent éger +SFX c0 ébrer èbre ébrer +SFX c0 écer èce écer +SFX c0 écher èche écher +SFX c0 écrer ècre écrer +SFX c0 éder ède éder +SFX c0 éger ège éger +SFX c0 égler ègle égler +SFX c0 égner ègne égner +SFX c0 égrer ègre égrer +SFX c0 éguer ègue éguer +SFX c0 éler èle éler +SFX c0 émer ème émer +SFX c0 éner ène éner +SFX c0 éper èpe éper +SFX c0 équer èque équer +SFX c0 érer ère érer +SFX c0 éser èse éser +SFX c0 éter ète éter +SFX c0 étrer ètre étrer +SFX c0 évrer èvre évrer +SFX c0 éyer èye éyer +SFX c0 er ons [^cg]er +SFX c0 écer éçons écer +SFX c0 éger égeons éger +SFX c0 er ez er + +SFX c1 Y 152 +SFX c1 r r/n'q'd' er +SFX c1 er ant/n'q' [^cg]er +SFX c1 écer éçant/n'q' écer +SFX c1 éger égeant/n'q' éger +SFX c1 ébrer èbre/n'q'j' ébrer +SFX c1 écer èce/n'q'j' écer +SFX c1 écher èche/n'q'j' écher +SFX c1 écrer ècre/n'q'j' écrer +SFX c1 éder ède/n'q'j' éder +SFX c1 éger ège/n'q'j' éger +SFX c1 égler ègle/n'q'j' égler +SFX c1 égner ègne/n'q'j' égner +SFX c1 égrer ègre/n'q'j' égrer +SFX c1 éguer ègue/n'q'j' éguer +SFX c1 éler èle/n'q'j' éler +SFX c1 émer ème/n'q'j' émer +SFX c1 éner ène/n'q'j' éner +SFX c1 éper èpe/n'q'j' éper +SFX c1 équer èque/n'q'j' équer +SFX c1 érer ère/n'q'j' érer +SFX c1 éser èse/n'q'j' éser +SFX c1 éter ète/n'q'j' éter +SFX c1 étrer ètre/n'q'j' étrer +SFX c1 évrer èvre/n'q'j' évrer +SFX c1 éyer èye/n'q'j' éyer +SFX c1 ébrer èbres/n' ébrer +SFX c1 écer èces/n' écer +SFX c1 écher èches/n' écher +SFX c1 écrer ècres/n' écrer +SFX c1 éder èdes/n' éder +SFX c1 éger èges/n' éger +SFX c1 égler ègles/n' égler +SFX c1 égner ègnes/n' égner +SFX c1 égrer ègres/n' égrer +SFX c1 éguer ègues/n' éguer +SFX c1 éler èles/n' éler +SFX c1 émer èmes/n' émer +SFX c1 éner ènes/n' éner +SFX c1 éper èpes/n' éper +SFX c1 équer èques/n' équer +SFX c1 érer ères/n' érer +SFX c1 éser èses/n' éser +SFX c1 éter ètes/n' éter +SFX c1 étrer ètres/n' étrer +SFX c1 évrer èvres/n' évrer +SFX c1 éyer èyes/n' éyer +SFX c1 er ons/n' [^cg]er +SFX c1 écer éçons/n' écer +SFX c1 éger égeons/n' éger +SFX c1 er ez/n' er +SFX c1 ébrer èbrent/n'q' ébrer +SFX c1 écer ècent/n'q' écer +SFX c1 écher èchent/n'q' écher +SFX c1 écrer ècrent/n'q' écrer +SFX c1 éder èdent/n'q' éder +SFX c1 éger ègent/n'q' éger +SFX c1 égler èglent/n'q' égler +SFX c1 égner ègnent/n'q' égner +SFX c1 égrer ègrent/n'q' égrer +SFX c1 éguer èguent/n'q' éguer +SFX c1 éler èlent/n'q' éler +SFX c1 émer èment/n'q' émer +SFX c1 éner ènent/n'q' éner +SFX c1 éper èpent/n'q' éper +SFX c1 équer èquent/n'q' équer +SFX c1 érer èrent/n'q' érer +SFX c1 éser èsent/n'q' éser +SFX c1 éter ètent/n'q' éter +SFX c1 étrer ètrent/n'q' étrer +SFX c1 évrer èvrent/n'q' évrer +SFX c1 éyer èyent/n'q' éyer +SFX c1 er ais/n'j' [^cg]er +SFX c1 écer éçais/n'j' écer +SFX c1 éger égeais/n'j' éger +SFX c1 er ait/n'q' [^cg]er +SFX c1 écer éçait/n'q' écer +SFX c1 éger égeait/n'q' éger +SFX c1 er ions/n' er +SFX c1 er iez/n' er +SFX c1 er aient/n'q' [^cg]er +SFX c1 écer éçaient/n'q' écer +SFX c1 éger égeaient/n'q' éger +SFX c1 er ai/n'j' [^cg]er +SFX c1 écer éçai/n'j' écer +SFX c1 éger égeai/n'j' éger +SFX c1 er as/n' [^cg]er +SFX c1 écer éças/n' écer +SFX c1 éger égeas/n' éger +SFX c1 er a/n'q' [^cg]er +SFX c1 écer éça/n'q' écer +SFX c1 éger égea/n'q' éger +SFX c1 er âmes/n' [^cg]er +SFX c1 écer éçâmes/n' écer +SFX c1 éger égeâmes/n' éger +SFX c1 er âtes/n' [^cg]er +SFX c1 écer éçâtes/n' écer +SFX c1 éger égeâtes/n' éger +SFX c1 er èrent/n'q' er +SFX c1 er erai/n'j' er +SFX c1 er eras/n' er +SFX c1 er era/n'q' er +SFX c1 er erons/n' er +SFX c1 er erez/n' er +SFX c1 er eront/n'q' er +SFX c1 er erais/n'j' er +SFX c1 er erait/n'q' er +SFX c1 er erions/n' er +SFX c1 er eriez/n' er +SFX c1 er eraient/n'q' er +SFX c1 er asse/n'j' [^cg]er +SFX c1 écer éçasse/n'j' écer +SFX c1 éger égeasse/n'j' éger +SFX c1 er asses/n' [^cg]er +SFX c1 écer éçasses/n' écer +SFX c1 éger égeasses/n' éger +SFX c1 er ât/n'q' [^cg]er +SFX c1 écer éçât/n'q' écer +SFX c1 éger égeât/n'q' éger +SFX c1 er assions/n' [^cg]er +SFX c1 écer éçassions/n' écer +SFX c1 éger égeassions/n' éger +SFX c1 er assiez/n' [^cg]er +SFX c1 écer éçassiez/n' écer +SFX c1 éger égeassiez/n' éger +SFX c1 er assent/n'q' [^cg]er +SFX c1 écer éçassent/n'q' écer +SFX c1 éger égeassent/n'q' éger +SFX c1 ébrer èbre/n' ébrer +SFX c1 écer èce/n' écer +SFX c1 écher èche/n' écher +SFX c1 écrer ècre/n' écrer +SFX c1 éder ède/n' éder +SFX c1 éger ège/n' éger +SFX c1 égler ègle/n' égler +SFX c1 égner ègne/n' égner +SFX c1 égrer ègre/n' égrer +SFX c1 éguer ègue/n' éguer +SFX c1 éler èle/n' éler +SFX c1 émer ème/n' émer +SFX c1 éner ène/n' éner +SFX c1 éper èpe/n' éper +SFX c1 équer èque/n' équer +SFX c1 érer ère/n' érer +SFX c1 éser èse/n' éser +SFX c1 éter ète/n' éter +SFX c1 étrer ètre/n' étrer +SFX c1 évrer èvre/n' évrer +SFX c1 éyer èye/n' éyer +SFX c1 er ons/n' [^cg]er +SFX c1 écer éçons/n' écer +SFX c1 éger égeons/n' éger +SFX c1 er ez/n' er + +SFX c2 Y 152 +SFX c2 er er/n'q'd'l'm't's' er +SFX c2 er ant/n'q'l'm't's' [^cg]er +SFX c2 écer éçant/n'q'l'm't's' écer +SFX c2 éger égeant/n'q'l'm't's' éger +SFX c2 ébrer èbre/n'q'j'l'm't's' ébrer +SFX c2 écer èce/n'q'j'l'm't's' écer +SFX c2 écher èche/n'q'j'l'm't's' écher +SFX c2 écrer ècre/n'q'j'l'm't's' écrer +SFX c2 éder ède/n'q'j'l'm't's' éder +SFX c2 éger ège/n'q'j'l'm't's' éger +SFX c2 égler ègle/n'q'j'l'm't's' égler +SFX c2 égner ègne/n'q'j'l'm't's' égner +SFX c2 égrer ègre/n'q'j'l'm't's' égrer +SFX c2 éguer ègue/n'q'j'l'm't's' éguer +SFX c2 éler èle/n'q'j'l'm't's' éler +SFX c2 émer ème/n'q'j'l'm't's' émer +SFX c2 éner ène/n'q'j'l'm't's' éner +SFX c2 éper èpe/n'q'j'l'm't's' éper +SFX c2 équer èque/n'q'j'l'm't's' équer +SFX c2 érer ère/n'q'j'l'm't's' érer +SFX c2 éser èse/n'q'j'l'm't's' éser +SFX c2 éter ète/n'q'j'l'm't's' éter +SFX c2 étrer ètre/n'q'j'l'm't's' étrer +SFX c2 évrer èvre/n'q'j'l'm't's' évrer +SFX c2 éyer èye/n'q'j'l'm't's' éyer +SFX c2 ébrer èbres/n'q'l'm' ébrer +SFX c2 écer èces/n'q'l'm' écer +SFX c2 écher èches/n'q'l'm' écher +SFX c2 écrer ècres/n'q'l'm' écrer +SFX c2 éder èdes/n'q'l'm' éder +SFX c2 éger èges/n'q'l'm' éger +SFX c2 égler ègles/n'q'l'm' égler +SFX c2 égner ègnes/n'q'l'm' égner +SFX c2 égrer ègres/n'q'l'm' égrer +SFX c2 éguer ègues/n'q'l'm' éguer +SFX c2 éler èles/n'q'l'm' éler +SFX c2 émer èmes/n'q'l'm' émer +SFX c2 éner ènes/n'q'l'm' éner +SFX c2 éper èpes/n'q'l'm' éper +SFX c2 équer èques/n'q'l'm' équer +SFX c2 érer ères/n'q'l'm' érer +SFX c2 éser èses/n'q'l'm' éser +SFX c2 éter ètes/n'q'l'm' éter +SFX c2 étrer ètres/n'q'l'm' étrer +SFX c2 évrer èvres/n'q'l'm' évrer +SFX c2 éyer èyes/n'q'l'm' éyer +SFX c2 er ons/n'q'l't' [^cg]er +SFX c2 écer éçons/n'q'l't' écer +SFX c2 éger égeons/n'q'l't' éger +SFX c2 er ez/n'q'l'm' er +SFX c2 ébrer èbrent/n'q'l'm't's' ébrer +SFX c2 écer ècent/n'q'l'm't's' écer +SFX c2 écher èchent/n'q'l'm't's' écher +SFX c2 écrer ècrent/n'q'l'm't's' écrer +SFX c2 éder èdent/n'q'l'm't's' éder +SFX c2 éger ègent/n'q'l'm't's' éger +SFX c2 égler èglent/n'q'l'm't's' égler +SFX c2 égner ègnent/n'q'l'm't's' égner +SFX c2 égrer ègrent/n'q'l'm't's' égrer +SFX c2 éguer èguent/n'q'l'm't's' éguer +SFX c2 éler èlent/n'q'l'm't's' éler +SFX c2 émer èment/n'q'l'm't's' émer +SFX c2 éner ènent/n'q'l'm't's' éner +SFX c2 éper èpent/n'q'l'm't's' éper +SFX c2 équer èquent/n'q'l'm't's' équer +SFX c2 érer èrent/n'q'l'm't's' érer +SFX c2 éser èsent/n'q'l'm't's' éser +SFX c2 éter ètent/n'q'l'm't's' éter +SFX c2 étrer ètrent/n'q'l'm't's' étrer +SFX c2 évrer èvrent/n'q'l'm't's' évrer +SFX c2 éyer èyent/n'q'l'm't's' éyer +SFX c2 er ais/n'q'j'l'm't' [^cg]er +SFX c2 écer éçais/n'q'j'l'm't' écer +SFX c2 éger égeais/n'q'j'l'm't' éger +SFX c2 er ait/n'q'l'm't's' [^cg]er +SFX c2 écer éçait/n'q'l'm't's' écer +SFX c2 éger égeait/n'q'l'm't's' éger +SFX c2 er ions/n'q'l't' er +SFX c2 er iez/n'q'l'm' er +SFX c2 er aient/n'q'l'm't's' [^cg]er +SFX c2 écer éçaient/n'q'l'm't's' écer +SFX c2 éger égeaient/n'q'l'm't's' éger +SFX c2 er ai/n'q'j'l't' [^cg]er +SFX c2 écer éçai/n'q'j'l't' écer +SFX c2 éger égeai/n'q'j'l't' éger +SFX c2 er as/n'q'l'm' [^cg]er +SFX c2 écer éças/n'q'l'm' écer +SFX c2 éger égeas/n'q'l'm' éger +SFX c2 er a/n'q'l'm't's' [^cg]er +SFX c2 écer éça/n'q'l'm't's' écer +SFX c2 éger égea/n'q'l'm't's' éger +SFX c2 er âmes/n'q'l't' [^cg]er +SFX c2 écer éçâmes/n'q'l't' écer +SFX c2 éger égeâmes/n'q'l't' éger +SFX c2 er âtes/n'q'l'm' [^cg]er +SFX c2 écer éçâtes/n'q'l'm' écer +SFX c2 éger égeâtes/n'q'l'm' éger +SFX c2 er èrent/n'q'l'm't's' er +SFX c2 er erai/n'q'j'l't' er +SFX c2 er eras/n'q'l'm' er +SFX c2 er era/n'q'l'm't's' er +SFX c2 er erons/n'q'l't' er +SFX c2 er erez/n'q'l'm' er +SFX c2 er eront/n'q'l'm't's' er +SFX c2 er erais/n'q'j'l'm't' er +SFX c2 er erait/n'q'l'm't's' er +SFX c2 er erions/n'q'l't' er +SFX c2 er eriez/n'q'l'm' er +SFX c2 er eraient/n'q'l'm't's' er +SFX c2 er asse/n'q'j'l't' [^cg]er +SFX c2 écer éçasse/n'q'j'l't' écer +SFX c2 éger égeasse/n'q'j'l't' éger +SFX c2 er asses/n'q'l'm' [^cg]er +SFX c2 écer éçasses/n'q'l'm' écer +SFX c2 éger égeasses/n'q'l'm' éger +SFX c2 er ât/n'q'l'm't's' [^cg]er +SFX c2 écer éçât/n'q'l'm't's' écer +SFX c2 éger égeât/n'q'l'm't's' éger +SFX c2 er assions/n'q'l't' [^cg]er +SFX c2 écer éçassions/n'q'l't' écer +SFX c2 éger égeassions/n'q'l't' éger +SFX c2 er assiez/n'q'l'm' [^cg]er +SFX c2 écer éçassiez/n'q'l'm' écer +SFX c2 éger égeassiez/n'q'l'm' éger +SFX c2 er assent/n'q'l'm't's' [^cg]er +SFX c2 écer éçassent/n'q'l'm't's' écer +SFX c2 éger égeassent/n'q'l'm't's' éger +SFX c2 ébrer èbre/n'l'm' ébrer +SFX c2 écer èce/n'l'm' écer +SFX c2 écher èche/n'l'm' écher +SFX c2 écrer ècre/n'l'm' écrer +SFX c2 éder ède/n'l'm' éder +SFX c2 éger ège/n'l'm' éger +SFX c2 égler ègle/n'l'm' égler +SFX c2 égner ègne/n'l'm' égner +SFX c2 égrer ègre/n'l'm' égrer +SFX c2 éguer ègue/n'l'm' éguer +SFX c2 éler èle/n'l'm' éler +SFX c2 émer ème/n'l'm' émer +SFX c2 éner ène/n'l'm' éner +SFX c2 éper èpe/n'l'm' éper +SFX c2 équer èque/n'l'm' équer +SFX c2 érer ère/n'l'm' érer +SFX c2 éser èse/n'l'm' éser +SFX c2 éter ète/n'l'm' éter +SFX c2 étrer ètre/n'l'm' étrer +SFX c2 évrer èvre/n'l'm' évrer +SFX c2 éyer èye/n'l'm' éyer +SFX c2 er ons/n'l' [^cg]er +SFX c2 écer éçons/n'l' écer +SFX c2 éger égeons/n'l' éger +SFX c2 er ez/n'l'm' er + +SFX c3 Y 152 +SFX c3 er er/m't's' er +SFX c3 er ant/m't's' [^cg]er +SFX c3 écer éçant/m't's' écer +SFX c3 éger égeant/m't's' éger +SFX c3 ébrer èbre/m's' ébrer +SFX c3 écer èce/m's' écer +SFX c3 écher èche/m's' écher +SFX c3 écrer ècre/m's' écrer +SFX c3 éder ède/m's' éder +SFX c3 éger ège/m's' éger +SFX c3 égler ègle/m's' égler +SFX c3 égner ègne/m's' égner +SFX c3 égrer ègre/m's' égrer +SFX c3 éguer ègue/m's' éguer +SFX c3 éler èle/m's' éler +SFX c3 émer ème/m's' émer +SFX c3 éner ène/m's' éner +SFX c3 éper èpe/m's' éper +SFX c3 équer èque/m's' équer +SFX c3 érer ère/m's' érer +SFX c3 éser èse/m's' éser +SFX c3 éter ète/m's' éter +SFX c3 étrer ètre/m's' étrer +SFX c3 évrer èvre/m's' évrer +SFX c3 éyer èye/m's' éyer +SFX c3 ébrer èbres/t' ébrer +SFX c3 écer èces/t' écer +SFX c3 écher èches/t' écher +SFX c3 écrer ècres/t' écrer +SFX c3 éder èdes/t' éder +SFX c3 éger èges/t' éger +SFX c3 égler ègles/t' égler +SFX c3 égner ègnes/t' égner +SFX c3 égrer ègres/t' égrer +SFX c3 éguer ègues/t' éguer +SFX c3 éler èles/t' éler +SFX c3 émer èmes/t' émer +SFX c3 éner ènes/t' éner +SFX c3 éper èpes/t' éper +SFX c3 équer èques/t' équer +SFX c3 érer ères/t' érer +SFX c3 éser èses/t' éser +SFX c3 éter ètes/t' éter +SFX c3 étrer ètres/t' étrer +SFX c3 évrer èvres/t' évrer +SFX c3 éyer èyes/t' éyer +SFX c3 er ons [^cg]er +SFX c3 écer éçons écer +SFX c3 éger égeons éger +SFX c3 er ez er +SFX c3 ébrer èbrent/s' ébrer +SFX c3 écer ècent/s' écer +SFX c3 écher èchent/s' écher +SFX c3 écrer ècrent/s' écrer +SFX c3 éder èdent/s' éder +SFX c3 éger ègent/s' éger +SFX c3 égler èglent/s' égler +SFX c3 égner ègnent/s' égner +SFX c3 égrer ègrent/s' égrer +SFX c3 éguer èguent/s' éguer +SFX c3 éler èlent/s' éler +SFX c3 émer èment/s' émer +SFX c3 éner ènent/s' éner +SFX c3 éper èpent/s' éper +SFX c3 équer èquent/s' équer +SFX c3 érer èrent/s' érer +SFX c3 éser èsent/s' éser +SFX c3 éter ètent/s' éter +SFX c3 étrer ètrent/s' étrer +SFX c3 évrer èvrent/s' évrer +SFX c3 éyer èyent/s' éyer +SFX c3 er ais/m't' [^cg]er +SFX c3 écer éçais/m't' écer +SFX c3 éger égeais/m't' éger +SFX c3 er ait/s' [^cg]er +SFX c3 écer éçait/s' écer +SFX c3 éger égeait/s' éger +SFX c3 er ions er +SFX c3 er iez er +SFX c3 er aient/s' [^cg]er +SFX c3 écer éçaient/s' écer +SFX c3 éger égeaient/s' éger +SFX c3 er ai/m' [^cg]er +SFX c3 écer éçai/m' écer +SFX c3 éger égeai/m' éger +SFX c3 er as/t' [^cg]er +SFX c3 écer éças/t' écer +SFX c3 éger égeas/t' éger +SFX c3 er a/s' [^cg]er +SFX c3 écer éça/s' écer +SFX c3 éger égea/s' éger +SFX c3 er âmes [^cg]er +SFX c3 écer éçâmes écer +SFX c3 éger égeâmes éger +SFX c3 er âtes [^cg]er +SFX c3 écer éçâtes écer +SFX c3 éger égeâtes éger +SFX c3 er èrent/s' er +SFX c3 er erai/m' er +SFX c3 er eras/t' er +SFX c3 er era/s' er +SFX c3 er erons er +SFX c3 er erez er +SFX c3 er eront/s' er +SFX c3 er erais/m't' er +SFX c3 er erait/s' er +SFX c3 er erions er +SFX c3 er eriez er +SFX c3 er eraient/s' er +SFX c3 er asse/m' [^cg]er +SFX c3 écer éçasse/m' écer +SFX c3 éger égeasse/m' éger +SFX c3 er asses/t' [^cg]er +SFX c3 écer éçasses/t' écer +SFX c3 éger égeasses/t' éger +SFX c3 er ât/s' [^cg]er +SFX c3 écer éçât/s' écer +SFX c3 éger égeât/s' éger +SFX c3 er assions [^cg]er +SFX c3 écer éçassions écer +SFX c3 éger égeassions éger +SFX c3 er assiez [^cg]er +SFX c3 écer éçassiez écer +SFX c3 éger égeassiez éger +SFX c3 er assent/s' [^cg]er +SFX c3 écer éçassent/s' écer +SFX c3 éger égeassent/s' éger +SFX c3 ébrer èbre/t' ébrer +SFX c3 écer èce/t' écer +SFX c3 écher èche/t' écher +SFX c3 écrer ècre/t' écrer +SFX c3 éder ède/t' éder +SFX c3 éger ège/t' éger +SFX c3 égler ègle/t' égler +SFX c3 égner ègne/t' égner +SFX c3 égrer ègre/t' égrer +SFX c3 éguer ègue/t' éguer +SFX c3 éler èle/t' éler +SFX c3 émer ème/t' émer +SFX c3 éner ène/t' éner +SFX c3 éper èpe/t' éper +SFX c3 équer èque/t' équer +SFX c3 érer ère/t' érer +SFX c3 éser èse/t' éser +SFX c3 éter ète/t' éter +SFX c3 étrer ètre/t' étrer +SFX c3 évrer èvre/t' évrer +SFX c3 éyer èye/t' éyer +SFX c3 er ons [^cg]er +SFX c3 écer éçons écer +SFX c3 éger égeons éger +SFX c3 er ez er + +SFX c4 Y 152 +SFX c4 er er/n'q'd'l'm't's' er +SFX c4 er ant/n'q'l'm't's' [^cg]er +SFX c4 écer éçant/n'q'l'm't's' écer +SFX c4 éger égeant/n'q'l'm't's' éger +SFX c4 ébrer èbre/n'q'j'l'm't's' ébrer +SFX c4 écer èce/n'q'j'l'm't's' écer +SFX c4 écher èche/n'q'j'l'm't's' écher +SFX c4 écrer ècre/n'q'j'l'm't's' écrer +SFX c4 éder ède/n'q'j'l'm't's' éder +SFX c4 éger ège/n'q'j'l'm't's' éger +SFX c4 égler ègle/n'q'j'l'm't's' égler +SFX c4 égner ègne/n'q'j'l'm't's' égner +SFX c4 égrer ègre/n'q'j'l'm't's' égrer +SFX c4 éguer ègue/n'q'j'l'm't's' éguer +SFX c4 éler èle/n'q'j'l'm't's' éler +SFX c4 émer ème/n'q'j'l'm't's' émer +SFX c4 éner ène/n'q'j'l'm't's' éner +SFX c4 éper èpe/n'q'j'l'm't's' éper +SFX c4 équer èque/n'q'j'l'm't's' équer +SFX c4 érer ère/n'q'j'l'm't's' érer +SFX c4 éser èse/n'q'j'l'm't's' éser +SFX c4 éter ète/n'q'j'l'm't's' éter +SFX c4 étrer ètre/n'q'j'l'm't's' étrer +SFX c4 évrer èvre/n'q'j'l'm't's' évrer +SFX c4 éyer èye/n'q'j'l'm't's' éyer +SFX c4 ébrer èbres/n'q'l'm't' ébrer +SFX c4 écer èces/n'q'l'm't' écer +SFX c4 écher èches/n'q'l'm't' écher +SFX c4 écrer ècres/n'q'l'm't' écrer +SFX c4 éder èdes/n'q'l'm't' éder +SFX c4 éger èges/n'q'l'm't' éger +SFX c4 égler ègles/n'q'l'm't' égler +SFX c4 égner ègnes/n'q'l'm't' égner +SFX c4 égrer ègres/n'q'l'm't' égrer +SFX c4 éguer ègues/n'q'l'm't' éguer +SFX c4 éler èles/n'q'l'm't' éler +SFX c4 émer èmes/n'q'l'm't' émer +SFX c4 éner ènes/n'q'l'm't' éner +SFX c4 éper èpes/n'q'l'm't' éper +SFX c4 équer èques/n'q'l'm't' équer +SFX c4 érer ères/n'q'l'm't' érer +SFX c4 éser èses/n'q'l'm't' éser +SFX c4 éter ètes/n'q'l'm't' éter +SFX c4 étrer ètres/n'q'l'm't' étrer +SFX c4 évrer èvres/n'q'l'm't' évrer +SFX c4 éyer èyes/n'q'l'm't' éyer +SFX c4 er ons/n'q'l't' [^cg]er +SFX c4 écer éçons/n'q'l't' écer +SFX c4 éger égeons/n'q'l't' éger +SFX c4 er ez/n'q'l'm' er +SFX c4 ébrer èbrent/n'q'l'm't's' ébrer +SFX c4 écer ècent/n'q'l'm't's' écer +SFX c4 écher èchent/n'q'l'm't's' écher +SFX c4 écrer ècrent/n'q'l'm't's' écrer +SFX c4 éder èdent/n'q'l'm't's' éder +SFX c4 éger ègent/n'q'l'm't's' éger +SFX c4 égler èglent/n'q'l'm't's' égler +SFX c4 égner ègnent/n'q'l'm't's' égner +SFX c4 égrer ègrent/n'q'l'm't's' égrer +SFX c4 éguer èguent/n'q'l'm't's' éguer +SFX c4 éler èlent/n'q'l'm't's' éler +SFX c4 émer èment/n'q'l'm't's' émer +SFX c4 éner ènent/n'q'l'm't's' éner +SFX c4 éper èpent/n'q'l'm't's' éper +SFX c4 équer èquent/n'q'l'm't's' équer +SFX c4 érer èrent/n'q'l'm't's' érer +SFX c4 éser èsent/n'q'l'm't's' éser +SFX c4 éter ètent/n'q'l'm't's' éter +SFX c4 étrer ètrent/n'q'l'm't's' étrer +SFX c4 évrer èvrent/n'q'l'm't's' évrer +SFX c4 éyer èyent/n'q'l'm't's' éyer +SFX c4 er ais/n'q'j'l'm't' [^cg]er +SFX c4 écer éçais/n'q'j'l'm't' écer +SFX c4 éger égeais/n'q'j'l'm't' éger +SFX c4 er ait/n'q'l'm't's' [^cg]er +SFX c4 écer éçait/n'q'l'm't's' écer +SFX c4 éger égeait/n'q'l'm't's' éger +SFX c4 er ions/n'q'l't' er +SFX c4 er iez/n'q'l'm' er +SFX c4 er aient/n'q'l'm't's' [^cg]er +SFX c4 écer éçaient/n'q'l'm't's' écer +SFX c4 éger égeaient/n'q'l'm't's' éger +SFX c4 er ai/n'q'j'l'm't' [^cg]er +SFX c4 écer éçai/n'q'j'l'm't' écer +SFX c4 éger égeai/n'q'j'l'm't' éger +SFX c4 er as/n'q'l'm't' [^cg]er +SFX c4 écer éças/n'q'l'm't' écer +SFX c4 éger égeas/n'q'l'm't' éger +SFX c4 er a/n'q'l'm't's' [^cg]er +SFX c4 écer éça/n'q'l'm't's' écer +SFX c4 éger égea/n'q'l'm't's' éger +SFX c4 er âmes/n'q'l't' [^cg]er +SFX c4 écer éçâmes/n'q'l't' écer +SFX c4 éger égeâmes/n'q'l't' éger +SFX c4 er âtes/n'q'l'm' [^cg]er +SFX c4 écer éçâtes/n'q'l'm' écer +SFX c4 éger égeâtes/n'q'l'm' éger +SFX c4 er èrent/n'q'l'm't's' er +SFX c4 er erai/n'q'j'l'm't' er +SFX c4 er eras/n'q'l'm't' er +SFX c4 er era/n'q'l'm't's' er +SFX c4 er erons/n'q'l't' er +SFX c4 er erez/n'q'l'm' er +SFX c4 er eront/n'q'l'm't's' er +SFX c4 er erais/n'q'j'l'm't' er +SFX c4 er erait/n'q'l'm't's' er +SFX c4 er erions/n'q'l't' er +SFX c4 er eriez/n'q'l'm' er +SFX c4 er eraient/n'q'l'm't's' er +SFX c4 er asse/n'q'j'l'm't' [^cg]er +SFX c4 écer éçasse/n'q'j'l'm't' écer +SFX c4 éger égeasse/n'q'j'l'm't' éger +SFX c4 er asses/n'q'l'm't' [^cg]er +SFX c4 écer éçasses/n'q'l'm't' écer +SFX c4 éger égeasses/n'q'l'm't' éger +SFX c4 er ât/n'q'l'm't's' [^cg]er +SFX c4 écer éçât/n'q'l'm't's' écer +SFX c4 éger égeât/n'q'l'm't's' éger +SFX c4 er assions/n'q'l't' [^cg]er +SFX c4 écer éçassions/n'q'l't' écer +SFX c4 éger égeassions/n'q'l't' éger +SFX c4 er assiez/n'q'l'm' [^cg]er +SFX c4 écer éçassiez/n'q'l'm' écer +SFX c4 éger égeassiez/n'q'l'm' éger +SFX c4 er assent/n'q'l'm't's' [^cg]er +SFX c4 écer éçassent/n'q'l'm't's' écer +SFX c4 éger égeassent/n'q'l'm't's' éger +SFX c4 ébrer èbre/n'l'm't' ébrer +SFX c4 écer èce/n'l'm't' écer +SFX c4 écher èche/n'l'm't' écher +SFX c4 écrer ècre/n'l'm't' écrer +SFX c4 éder ède/n'l'm't' éder +SFX c4 éger ège/n'l'm't' éger +SFX c4 égler ègle/n'l'm't' égler +SFX c4 égner ègne/n'l'm't' égner +SFX c4 égrer ègre/n'l'm't' égrer +SFX c4 éguer ègue/n'l'm't' éguer +SFX c4 éler èle/n'l'm't' éler +SFX c4 émer ème/n'l'm't' émer +SFX c4 éner ène/n'l'm't' éner +SFX c4 éper èpe/n'l'm't' éper +SFX c4 équer èque/n'l'm't' équer +SFX c4 érer ère/n'l'm't' érer +SFX c4 éser èse/n'l'm't' éser +SFX c4 éter ète/n'l'm't' éter +SFX c4 étrer ètre/n'l'm't' étrer +SFX c4 évrer èvre/n'l'm't' évrer +SFX c4 éyer èye/n'l'm't' éyer +SFX c4 er ons/n'l' [^cg]er +SFX c4 écer éçons/n'l' écer +SFX c4 éger égeons/n'l' éger +SFX c4 er ez/n'l'm' er + +SFX c5 Y 152 +SFX c5 er er/n'q'd'm't's' er +SFX c5 er ant/n'q'm't's' [^cg]er +SFX c5 écer éçant/m'q'm't's' écer +SFX c5 éger égeant/m'q'l't's' éger +SFX c5 ébrer èbre/n'q'j'm't's' ébrer +SFX c5 écer èce/n'q'j'm't's' écer +SFX c5 écher èche/n'q'j'm't's' écher +SFX c5 écrer ècre/n'q'j'm't's' écrer +SFX c5 éder ède/n'q'j'm't's' éder +SFX c5 éger ège/n'q'j'm't's' éger +SFX c5 égler ègle/n'q'j'm't's' égler +SFX c5 égner ègne/n'q'j'm't's' égner +SFX c5 égrer ègre/n'q'j'm't's' égrer +SFX c5 éguer ègue/n'q'j'm't's' éguer +SFX c5 éler èle/n'q'j'm't's' éler +SFX c5 émer ème/n'q'j'm't's' émer +SFX c5 éner ène/n'q'j'm't's' éner +SFX c5 éper èpe/n'q'j'm't's' éper +SFX c5 équer èque/n'q'j'm't's' équer +SFX c5 érer ère/n'q'j'm't's' érer +SFX c5 éser èse/n'q'j'm't's' éser +SFX c5 éter ète/n'q'j'm't's' éter +SFX c5 étrer ètre/n'q'j'm't's' étrer +SFX c5 évrer èvre/n'q'j'm't's' évrer +SFX c5 éyer èye/n'q'j'm't's' éyer +SFX c5 ébrer èbres/n'm't' ébrer +SFX c5 écer èces/n'm't' écer +SFX c5 écher èches/n'm't' écher +SFX c5 écrer ècres/n'm't' écrer +SFX c5 éder èdes/n'm't' éder +SFX c5 éger èges/n'm't' éger +SFX c5 égler ègles/n'm't' égler +SFX c5 égner ègnes/n'm't' égner +SFX c5 égrer ègres/n'm't' égrer +SFX c5 éguer ègues/n'm't' éguer +SFX c5 éler èles/n'm't' éler +SFX c5 émer èmes/n'm't' émer +SFX c5 éner ènes/n'm't' éner +SFX c5 éper èpes/n'm't' éper +SFX c5 équer èques/n'm't' équer +SFX c5 érer ères/n'm't' érer +SFX c5 éser èses/n'm't' éser +SFX c5 éter ètes/n'm't' éter +SFX c5 étrer ètres/n'm't' étrer +SFX c5 évrer èvres/n'm't' évrer +SFX c5 éyer èyes/n'm't' éyer +SFX c5 er ons/n't' [^cg]er +SFX c5 écer éçons/n't' écer +SFX c5 éger égeons/n't' éger +SFX c5 er ez/n'm' er +SFX c5 ébrer èbrent/n'q'm't's' ébrer +SFX c5 écer ècent/n'q'm't's' écer +SFX c5 écher èchent/n'q'm't's' écher +SFX c5 écrer ècrent/n'q'm't's' écrer +SFX c5 éder èdent/n'q'm't's' éder +SFX c5 éger ègent/n'q'm't's' éger +SFX c5 égler èglent/n'q'm't's' égler +SFX c5 égner ègnent/n'q'm't's' égner +SFX c5 égrer ègrent/n'q'm't's' égrer +SFX c5 éguer èguent/n'q'm't's' éguer +SFX c5 éler èlent/n'q'm't's' éler +SFX c5 émer èment/n'q'm't's' émer +SFX c5 éner ènent/n'q'm't's' éner +SFX c5 éper èpent/n'q'm't's' éper +SFX c5 équer èquent/n'q'm't's' équer +SFX c5 érer èrent/n'q'm't's' érer +SFX c5 éser èsent/n'q'm't's' éser +SFX c5 éter ètent/n'q'm't's' éter +SFX c5 étrer ètrent/n'q'm't's' étrer +SFX c5 évrer èvrent/n'q'm't's' évrer +SFX c5 éyer èyent/n'q'm't's' éyer +SFX c5 er ais/n'j'm't' [^cg]er +SFX c5 écer éçais/n'j'm't' écer +SFX c5 éger égeais/n'j'm't' éger +SFX c5 er ait/n'q'm't's' [^cg]er +SFX c5 écer éçait/n'q'm't's' écer +SFX c5 éger égeait/n'q'm't's' éger +SFX c5 er ions/n't' er +SFX c5 er iez/n'm' er +SFX c5 er aient/n'q'm't's' [^cg]er +SFX c5 écer éçaient/n'q'm't's' écer +SFX c5 éger égeaient/n'q'm't's' éger +SFX c5 er ai/n'j'm't' [^cg]er +SFX c5 écer éçai/n'j'm't' écer +SFX c5 éger égeai/n'j'm't' éger +SFX c5 er as/n'm't' [^cg]er +SFX c5 écer éças/n'm't' écer +SFX c5 éger égeas/n'm't' éger +SFX c5 er a/n'q'm't's' [^cg]er +SFX c5 écer éça/n'q'm't's' écer +SFX c5 éger égea/n'q'm't's' éger +SFX c5 er âmes/n't' [^cg]er +SFX c5 écer éçâmes/n't' écer +SFX c5 éger égeâmes/n't' éger +SFX c5 er âtes/n'm' [^cg]er +SFX c5 écer éçâtes/n'm' écer +SFX c5 éger égeâtes/n'm' éger +SFX c5 er èrent/n'q'm't's' er +SFX c5 er erai/n'j'm't' er +SFX c5 er eras/n'm't' er +SFX c5 er era/n'q'm't's' er +SFX c5 er erons/n't' er +SFX c5 er erez/n'm' er +SFX c5 er eront/n'q'm't's' er +SFX c5 er erais/n'j'm't' er +SFX c5 er erait/n'q'm't's' er +SFX c5 er erions/n't' er +SFX c5 er eriez/n'm' er +SFX c5 er eraient/n'q'm't's' er +SFX c5 er asse/n'j'm't' [^cg]er +SFX c5 écer éçasse/n'j'm't' écer +SFX c5 éger égeasse/n'j'm't' éger +SFX c5 er asses/n'm't' [^cg]er +SFX c5 écer éçasses/n'm't' écer +SFX c5 éger égeasses/n'm't' éger +SFX c5 er ât/n'q'm't's' [^cg]er +SFX c5 écer éçât/n'q'm't's' écer +SFX c5 éger égeât/n'q'm't's' éger +SFX c5 er assions/n't' [^cg]er +SFX c5 écer éçassions/n't' écer +SFX c5 éger égeassions/n't' éger +SFX c5 er assiez/n'm' [^cg]er +SFX c5 écer éçassiez/n'm' écer +SFX c5 éger égeassiez/n'm' éger +SFX c5 er assent/n'q'm't's' [^cg]er +SFX c5 écer éçassent/n'q'm't's' écer +SFX c5 éger égeassent/n'q'm't's' éger +SFX c5 ébrer èbre/n'm' ébrer +SFX c5 écer èce/n'm' écer +SFX c5 écher èche/n'm' écher +SFX c5 écrer ècre/n'm' écrer +SFX c5 éder ède/n'm' éder +SFX c5 éger ège/n'm' éger +SFX c5 égler ègle/n'm' égler +SFX c5 égner ègne/n'm' égner +SFX c5 égrer ègre/n'm' égrer +SFX c5 éguer ègue/n'm' éguer +SFX c5 éler èle/n'm' éler +SFX c5 émer ème/n'm' émer +SFX c5 éner ène/n'm' éner +SFX c5 éper èpe/n'm' éper +SFX c5 équer èque/n'm' équer +SFX c5 érer ère/n'm' érer +SFX c5 éser èse/n'm' éser +SFX c5 éter ète/n'm' éter +SFX c5 étrer ètre/n'm' étrer +SFX c5 évrer èvre/n'm' évrer +SFX c5 éyer èye/n'm' éyer +SFX c5 er ons/n' [^cg]er +SFX c5 écer éçons/n' écer +SFX c5 éger égeons/n' éger +SFX c5 er ez/n' er + +SFX d0 N 82 +SFX d0 er ant er +SFX d0 eter ette jeter +SFX d0 eter ette [^j]eter +SFX d0 eler elle ppeler +SFX d0 eler elle [^p].eler +SFX d0 eter ettes jeter +SFX d0 eter ettes [^j]eter +SFX d0 eler elles ppeler +SFX d0 eler elles [^p].eler +SFX d0 er ons er +SFX d0 er ez er +SFX d0 eter ettent jeter +SFX d0 eter ettent [^j]eter +SFX d0 eler ellent ppeler +SFX d0 eler ellent [^p].eler +SFX d0 er ais er +SFX d0 er ait er +SFX d0 er ions er +SFX d0 er iez er +SFX d0 er aient er +SFX d0 er ai er +SFX d0 er as er +SFX d0 er a er +SFX d0 er âmes er +SFX d0 er âtes er +SFX d0 er èrent er +SFX d0 eter etterai jeter +SFX d0 eter etterai [^j]eter +SFX d0 eler ellerai ppeler +SFX d0 eler ellerai [^p].eler +SFX d0 eter etteras jeter +SFX d0 eter etteras [^j]eter +SFX d0 eler elleras ppeler +SFX d0 eler elleras [^p].eler +SFX d0 eter ettera jeter +SFX d0 eter ettera [^j]eter +SFX d0 eler ellera ppeler +SFX d0 eler ellera [^p].eler +SFX d0 eter etterons jeter +SFX d0 eter etterons [^j]eter +SFX d0 eler ellerons ppeler +SFX d0 eler ellerons [^p].eler +SFX d0 eter etterez jeter +SFX d0 eter etterez [^j]eter +SFX d0 eler ellerez ppeler +SFX d0 eler ellerez [^p].eler +SFX d0 eter etteront jeter +SFX d0 eter etteront [^j]eter +SFX d0 eler elleront ppeler +SFX d0 eler elleront [^p].eler +SFX d0 eter etterais jeter +SFX d0 eter etterais [^j]eter +SFX d0 eler ellerais ppeler +SFX d0 eler ellerais [^p].eler +SFX d0 eter etterait jeter +SFX d0 eter etterait [^j]eter +SFX d0 eler ellerait ppeler +SFX d0 eler ellerait [^p].eler +SFX d0 eter etterions jeter +SFX d0 eter etterions [^j]eter +SFX d0 eler ellerions ppeler +SFX d0 eler ellerions [^p].eler +SFX d0 eter etteriez jeter +SFX d0 eter etteriez [^j]eter +SFX d0 eler elleriez ppeler +SFX d0 eler elleriez [^p].eler +SFX d0 eter etteraient jeter +SFX d0 eter etteraient [^j]eter +SFX d0 eler elleraient ppeler +SFX d0 eler elleraient [^p].eler +SFX d0 er asse er +SFX d0 er asses er +SFX d0 er ât er +SFX d0 er assions er +SFX d0 er assiez er +SFX d0 er assent er +SFX d0 eter ette jeter +SFX d0 eter ette [^j]eter +SFX d0 eler elle ppeler +SFX d0 eler elle [^p].eler +SFX d0 er ons er +SFX d0 er ez er + +SFX d1 Y 83 +SFX d1 er er/n'q'd' er +SFX d1 er ant/n'q' er +SFX d1 eter ette/n'q'j' jeter +SFX d1 eter ette/n'q'j' [^j]eter +SFX d1 eler elle/n'q'j' ppeler +SFX d1 eler elle/n'q'j' [^p].eler +SFX d1 eter ettes/n' jeter +SFX d1 eter ettes/n' [^j]eter +SFX d1 eler elles/n' ppeler +SFX d1 eler elles/n' [^p].eler +SFX d1 er ons/n' er +SFX d1 er ez/n' er +SFX d1 eter ettent/n'q' jeter +SFX d1 eter ettent/n'q' [^j]eter +SFX d1 eler ellent/n'q' ppeler +SFX d1 eler ellent/n'q' [^p].eler +SFX d1 er ais/n'j' er +SFX d1 er ait/n'q' er +SFX d1 er ions/n' er +SFX d1 er iez/n' er +SFX d1 er aient/n'q' er +SFX d1 er ai/n'j' er +SFX d1 er as/n' er +SFX d1 er a/n'q' er +SFX d1 er âmes/n' er +SFX d1 er âtes/n' er +SFX d1 er èrent/n'q' er +SFX d1 eter etterai/n'j' jeter +SFX d1 eter etterai/n'j' [^j]eter +SFX d1 eler ellerai/n'j' ppeler +SFX d1 eler ellerai/n'j' [^p].eler +SFX d1 eter etteras/n' jeter +SFX d1 eter etteras/n' [^j]eter +SFX d1 eler elleras/n' ppeler +SFX d1 eler elleras/n' [^p].eler +SFX d1 eter ettera/n'q' jeter +SFX d1 eter ettera/n'q' [^j]eter +SFX d1 eler ellera/n'q' ppeler +SFX d1 eler ellera/n'q' [^p].eler +SFX d1 eter etterons/n' jeter +SFX d1 eter etterons/n' [^j]eter +SFX d1 eler ellerons/n' ppeler +SFX d1 eler ellerons/n' [^p].eler +SFX d1 eter etterez/n' jeter +SFX d1 eter etterez/n' [^j]eter +SFX d1 eler ellerez/n' ppeler +SFX d1 eler ellerez/n' [^p].eler +SFX d1 eter etteront/n'q' jeter +SFX d1 eter etteront/n'q' [^j]eter +SFX d1 eler elleront/n'q' ppeler +SFX d1 eler elleront/n'q' [^p].eler +SFX d1 eter etterais/n'j' jeter +SFX d1 eter etterais/n'j' [^j]eter +SFX d1 eler ellerais/n'j' ppeler +SFX d1 eler ellerais/n'j' [^p].eler +SFX d1 eter etterait/n'q' jeter +SFX d1 eter etterait/n'q' [^j]eter +SFX d1 eler ellerait/n'q' ppeler +SFX d1 eler ellerait/n'q' [^p].eler +SFX d1 eter etterions/n' jeter +SFX d1 eter etterions/n' [^j]eter +SFX d1 eler ellerions/n' ppeler +SFX d1 eler ellerions/n' [^p].eler +SFX d1 eter etteriez/n' jeter +SFX d1 eter etteriez/n' [^j]eter +SFX d1 eler elleriez/n' ppeler +SFX d1 eler elleriez/n' [^p].eler +SFX d1 eter etteraient/n'q' jeter +SFX d1 eter etteraient/n'q' [^j]eter +SFX d1 eler elleraient/n'q' ppeler +SFX d1 eler elleraient/n'q' [^p].eler +SFX d1 er asse/n'j' er +SFX d1 er asses/n' er +SFX d1 er ât/n'q' er +SFX d1 er assions/n' er +SFX d1 er assiez/n' er +SFX d1 er assent/n'q' er +SFX d1 eter ette/n' jeter +SFX d1 eter ette/n' [^j]eter +SFX d1 eler elle/n' ppeler +SFX d1 eler elle/n' [^p].eler +SFX d1 er ons/n' er +SFX d1 er ez/n' er + +SFX d2 Y 83 +SFX d2 er er/n'q'd'l'm't's' er +SFX d2 er ant/n'q'l'm't's' er +SFX d2 eter ette/n'q'j'l'm't's' jeter +SFX d2 eter ette/n'q'j'l'm't's' [^j]eter +SFX d2 eler elle/n'q'j'l'm't's' ppeler +SFX d2 eler elle/n'q'j'l'm't's' [^p].eler +SFX d2 eter ettes/n'q'l'm' jeter +SFX d2 eter ettes/n'q'l'm' [^j]eter +SFX d2 eler elles/n'q'l'm' ppeler +SFX d2 eler elles/n'q'l'm' [^p].eler +SFX d2 er ons/n'q'l't' er +SFX d2 er ez/n'q'l'm' er +SFX d2 eter ettent/n'q'l'm't's' jeter +SFX d2 eter ettent/n'q'l'm't's' [^j]eter +SFX d2 eler ellent/n'q'l'm't's' ppeler +SFX d2 eler ellent/n'q'l'm't's' [^p].eler +SFX d2 er ais/n'q'j'l'm't' er +SFX d2 er ait/n'q'l'm't's' er +SFX d2 er ions/n'q'l't' er +SFX d2 er iez/n'q'l'm' er +SFX d2 er aient/n'q'l'm't's' er +SFX d2 er ai/n'q'j'l't' er +SFX d2 er as/n'q'l'm' er +SFX d2 er a/n'q'l'm't's' er +SFX d2 er âmes/n'q'l't' er +SFX d2 er âtes/n'q'l'm' er +SFX d2 er èrent/n'q'l'm't's' er +SFX d2 eter etterai/n'q'j'l't' jeter +SFX d2 eter etterai/n'q'j'l't' [^j]eter +SFX d2 eler ellerai/n'q'j'l't' ppeler +SFX d2 eler ellerai/n'q'j'l't' [^p].eler +SFX d2 eter etteras/n'q'l'm' jeter +SFX d2 eter etteras/n'q'l'm' [^j]eter +SFX d2 eler elleras/n'q'l'm' ppeler +SFX d2 eler elleras/n'q'l'm' [^p].eler +SFX d2 eter ettera/n'q'l'm't's' jeter +SFX d2 eter ettera/n'q'l'm't's' [^j]eter +SFX d2 eler ellera/n'q'l'm't's' ppeler +SFX d2 eler ellera/n'q'l'm't's' [^p].eler +SFX d2 eter etterons/n'q'l't' jeter +SFX d2 eter etterons/n'q'l't' [^j]eter +SFX d2 eler ellerons/n'q'l't' ppeler +SFX d2 eler ellerons/n'q'l't' [^p].eler +SFX d2 eter etterez/n'q'l'm' jeter +SFX d2 eter etterez/n'q'l'm' [^j]eter +SFX d2 eler ellerez/n'q'l'm' ppeler +SFX d2 eler ellerez/n'q'l'm' [^p].eler +SFX d2 eter etteront/n'q'l'm't's' jeter +SFX d2 eter etteront/n'q'l'm't's' [^j]eter +SFX d2 eler elleront/n'q'l'm't's' ppeler +SFX d2 eler elleront/n'q'l'm't's' [^p].eler +SFX d2 eter etterais/n'q'j'l'm't' jeter +SFX d2 eter etterais/n'q'j'l'm't' [^j]eter +SFX d2 eler ellerais/n'q'j'l'm't' ppeler +SFX d2 eler ellerais/n'q'j'l'm't' [^p].eler +SFX d2 eter etterait/n'q'l'm't's' jeter +SFX d2 eter etterait/n'q'l'm't's' [^j]eter +SFX d2 eler ellerait/n'q'l'm't's' ppeler +SFX d2 eler ellerait/n'q'l'm't's' [^p].eler +SFX d2 eter etterions/n'q'l't' jeter +SFX d2 eter etterions/n'q'l't' [^j]eter +SFX d2 eler ellerions/n'q'l't' ppeler +SFX d2 eler ellerions/n'q'l't' [^p].eler +SFX d2 eter etteriez/n'q'l'm' jeter +SFX d2 eter etteriez/n'q'l'm' [^j]eter +SFX d2 eler elleriez/n'q'l'm' ppeler +SFX d2 eler elleriez/n'q'l'm' [^p].eler +SFX d2 eter etteraient/n'q'l'm't's' jeter +SFX d2 eter etteraient/n'q'l'm't's' [^j]eter +SFX d2 eler elleraient/n'q'l'm't's' ppeler +SFX d2 eler elleraient/n'q'l'm't's' [^p].eler +SFX d2 er asse/n'q'j'l't' er +SFX d2 er asses/n'q'l'm' er +SFX d2 er ât/n'q'l'm't's' er +SFX d2 er assions/n'q'l't' er +SFX d2 er assiez/n'q'l'm' er +SFX d2 er assent/n'q'l'm't's' er +SFX d2 eter ette/n'l'm' jeter +SFX d2 eter ette/n'l'm' [^j]eter +SFX d2 eler elle/n'l'm' ppeler +SFX d2 eler elle/n'l'm' [^p].eler +SFX d2 er ons/n'l' er +SFX d2 er ez/n'l'm' er + +SFX d3 Y 83 +SFX d3 er er/m't's' er +SFX d3 er ant/m't's' er +SFX d3 eter ette/m's' jeter +SFX d3 eter ette/m's' [^j]eter +SFX d3 eler elle/m's' ppeler +SFX d3 eler elle/m's' [^p].eler +SFX d3 eter ettes/t' jeter +SFX d3 eter ettes/t' [^j]eter +SFX d3 eler elles/t' ppeler +SFX d3 eler elles/t' [^p].eler +SFX d3 er ons er +SFX d3 er ez er +SFX d3 eter ettent/s' jeter +SFX d3 eter ettent/s' [^j]eter +SFX d3 eler ellent/s' ppeler +SFX d3 eler ellent/s' [^p].eler +SFX d3 er ais/m't' er +SFX d3 er ait/s' er +SFX d3 er ions er +SFX d3 er iez er +SFX d3 er aient/s' er +SFX d3 er ai/m' er +SFX d3 er as/t' er +SFX d3 er a/s' er +SFX d3 er âmes er +SFX d3 er âtes er +SFX d3 er èrent/s' er +SFX d3 eter etterai/m' jeter +SFX d3 eter etterai/m' [^j]eter +SFX d3 eler ellerai/m' ppeler +SFX d3 eler ellerai/m' [^p].eler +SFX d3 eter etteras/t' jeter +SFX d3 eter etteras/t' [^j]eter +SFX d3 eler elleras/t' ppeler +SFX d3 eler elleras/t' [^p].eler +SFX d3 eter ettera/s' jeter +SFX d3 eter ettera/s' [^j]eter +SFX d3 eler ellera/s' ppeler +SFX d3 eler ellera/s' [^p].eler +SFX d3 eter etterons jeter +SFX d3 eter etterons [^j]eter +SFX d3 eler ellerons ppeler +SFX d3 eler ellerons [^p].eler +SFX d3 eter etterez jeter +SFX d3 eter etterez [^j]eter +SFX d3 eler ellerez ppeler +SFX d3 eler ellerez [^p].eler +SFX d3 eter etteront/s' jeter +SFX d3 eter etteront/s' [^j]eter +SFX d3 eler elleront/s' ppeler +SFX d3 eler elleront/s' [^p].eler +SFX d3 eter etterais/m't' jeter +SFX d3 eter etterais/m't' [^j]eter +SFX d3 eler ellerais/m't' ppeler +SFX d3 eler ellerais/m't' [^p].eler +SFX d3 eter etterait/s' jeter +SFX d3 eter etterait/s' [^j]eter +SFX d3 eler ellerait/s' ppeler +SFX d3 eler ellerait/s' [^p].eler +SFX d3 eter etterions jeter +SFX d3 eter etterions [^j]eter +SFX d3 eler ellerions ppeler +SFX d3 eler ellerions [^p].eler +SFX d3 eter etteriez jeter +SFX d3 eter etteriez [^j]eter +SFX d3 eler elleriez ppeler +SFX d3 eler elleriez [^p].eler +SFX d3 eter etteraient/s' jeter +SFX d3 eter etteraient/s' [^j]eter +SFX d3 eler elleraient/s' ppeler +SFX d3 eler elleraient/s' [^p].eler +SFX d3 er asse/m' er +SFX d3 er asses/t' er +SFX d3 er ât/s' er +SFX d3 er assions er +SFX d3 er assiez er +SFX d3 er assent/s' er +SFX d3 eter ette/t' jeter +SFX d3 eter ette/t' [^j]eter +SFX d3 eler elle/t' ppeler +SFX d3 eler elle/t' [^p].eler +SFX d3 er ons er +SFX d3 er ez er + +SFX d4 Y 98 +SFX d4 er er/n'q'd'l'm't's' er +SFX d4 er ant/n'q'l'm't's' er +SFX d4 eter ette/n'q'j'l'm't's' jeter +SFX d4 eter ette/n'q'j'l'm't's' [^j]eter +SFX d4 eler elle/n'q'j'l'm't's' ppeler +SFX d4 eler elle/n'q'j'l'm't's' [^p].eler +SFX d4 eler elle/n'q'j'l'm't's' épeler +SFX d4 eter ettes/n'q'l'm't' jeter +SFX d4 eter ettes/n'q'l'm't' [^j]eter +SFX d4 eler elles/n'q'l'm't' ppeler +SFX d4 eler elles/n'q'l'm't' [^p].eler +SFX d4 eler elles/n'q'l'm't' épeler +SFX d4 er ons/n'q'l't' er +SFX d4 er ez/n'q'l'm' er +SFX d4 eter ettent/n'q'l'm't's' jeter +SFX d4 eter ettent/n'q'l'm't's' [^j]eter +SFX d4 eler ellent/n'q'l'm't's' ppeler +SFX d4 eler ellent/n'q'l'm't's' [^p].eler +SFX d4 eler ellent/n'q'l'm't's' épeler +SFX d4 er ais/n'q'j'l'm't' er +SFX d4 er ait/n'q'l'm't's' er +SFX d4 er ions/n'q'l't' er +SFX d4 er iez/n'q'l'm' er +SFX d4 er aient/n'q'l'm't's' er +SFX d4 er ai/n'q'j'l'm't' er +SFX d4 er as/n'q'l'm't' er +SFX d4 er a/n'q'l'm't's' er +SFX d4 er âmes/n'q'l't' er +SFX d4 er âtes/n'q'l'm' er +SFX d4 er èrent/n'q'l'm't's' er +SFX d4 eter etterai/n'q'j'l'm't' jeter +SFX d4 eter etterai/n'q'j'l'm't' [^j]eter +SFX d4 eler ellerai/n'q'j'l'm't' ppeler +SFX d4 eler ellerai/n'q'j'l'm't' [^p].eler +SFX d4 eler ellerai/n'q'j'l'm't' épeler +SFX d4 eter etteras/n'q'l'm't' jeter +SFX d4 eter etteras/n'q'l'm't' [^j]eter +SFX d4 eler elleras/n'q'l'm't' ppeler +SFX d4 eler elleras/n'q'l'm't' [^p].eler +SFX d4 eler elleras/n'q'l'm't' épeler +SFX d4 eter ettera/n'q'l'm't's' jeter +SFX d4 eter ettera/n'q'l'm't's' [^j]eter +SFX d4 eler ellera/n'q'l'm't's' ppeler +SFX d4 eler ellera/n'q'l'm't's' [^p].eler +SFX d4 eler ellera/n'q'l'm't's' épeler +SFX d4 eter etterons/n'q'l't' jeter +SFX d4 eter etterons/n'q'l't' [^j]eter +SFX d4 eler ellerons/n'q'l't' ppeler +SFX d4 eler ellerons/n'q'l't' [^p].eler +SFX d4 eler ellerons/n'q'l't' épeler +SFX d4 eter etterez/n'q'l'm' jeter +SFX d4 eter etterez/n'q'l'm' [^j]eter +SFX d4 eler ellerez/n'q'l'm' ppeler +SFX d4 eler ellerez/n'q'l'm' [^p].eler +SFX d4 eler ellerez/n'q'l'm' épeler +SFX d4 eter etteront/n'q'l'm't's' jeter +SFX d4 eter etteront/n'q'l'm't's' [^j]eter +SFX d4 eler elleront/n'q'l'm't's' ppeler +SFX d4 eler elleront/n'q'l'm't's' [^p].eler +SFX d4 eler elleront/n'q'l'm't's' épeler +SFX d4 eter etterais/n'q'j'l'm't' jeter +SFX d4 eter etterais/n'q'j'l'm't' [^j]eter +SFX d4 eler ellerais/n'q'j'l'm't' ppeler +SFX d4 eler ellerais/n'q'j'l'm't' [^p].eler +SFX d4 eler ellerais/n'q'j'l'm't' épeler +SFX d4 eter etterait/n'q'l'm't's' jeter +SFX d4 eter etterait/n'q'l'm't's' [^j]eter +SFX d4 eler ellerait/n'q'l'm't's' ppeler +SFX d4 eler ellerait/n'q'l'm't's' [^p].eler +SFX d4 eler ellerait/n'q'l'm't's' épeler +SFX d4 eter etterions/n'q'l't' jeter +SFX d4 eter etterions/n'q'l't' [^j]eter +SFX d4 eler ellerions/n'q'l't' ppeler +SFX d4 eler ellerions/n'q'l't' [^p].eler +SFX d4 eler ellerions/n'q'l't' épeler +SFX d4 eter etteriez/n'q'l'm' jeter +SFX d4 eter etteriez/n'q'l'm' [^j]eter +SFX d4 eler elleriez/n'q'l'm' ppeler +SFX d4 eler elleriez/n'q'l'm' [^p].eler +SFX d4 eler elleriez/n'q'l'm' épeler +SFX d4 eter etteraient/n'q'l'm't's' jeter +SFX d4 eter etteraient/n'q'l'm't's' [^j]eter +SFX d4 eler elleraient/n'q'l'm't's' ppeler +SFX d4 eler elleraient/n'q'l'm't's' [^p].eler +SFX d4 eler elleraient/n'q'l'm't's' épeler +SFX d4 er asse/n'q'j'l'm't' er +SFX d4 er asses/n'q'l'm't' er +SFX d4 er ât/n'q'l'm't's' er +SFX d4 er assions/n'q'l't' er +SFX d4 er assiez/n'q'l'm' er +SFX d4 er assent/n'q'l'm't's' er +SFX d4 eter ette/n'l'm't' jeter +SFX d4 eter ette/n'l'm't' [^j]eter +SFX d4 eler elle/n'l'm't' ppeler +SFX d4 eler elle/n'l'm't' [^p].eler +SFX d4 eler elle/n'l'm't' épeler +SFX d4 er ons/n'l' er +SFX d4 er ez/n'l'm' er + +SFX d5 Y 83 +SFX d5 er er/m'q'd'm't's' er +SFX d5 er ant/m'q'd'm't's' er +SFX d5 eter ette/n'q'j'm't's' jeter +SFX d5 eter ette/n'q'j'm't's' [^j]eter +SFX d5 eler elle/n'q'j'm't's' ppeler +SFX d5 eler elle/n'q'j'm't's' [^p].eler +SFX d5 eter ettes/n'm't' jeter +SFX d5 eter ettes/n'm't' [^j]eter +SFX d5 eler elles/n'm't' ppeler +SFX d5 eler elles/n'm't' [^p].eler +SFX d5 er ons/n't' er +SFX d5 er ez/n'm' er +SFX d5 eter ettent/n'q'm't's' jeter +SFX d5 eter ettent/n'q'm't's' [^j]eter +SFX d5 eler ellent/n'q'm't's' ppeler +SFX d5 eler ellent/n'q'm't's' [^p].eler +SFX d5 er ais/n'j'm't' er +SFX d5 er ait/n'q'm't's' er +SFX d5 er ions/n't' er +SFX d5 er iez/n'm' er +SFX d5 er aient/n'q'm't's' er +SFX d5 er ai/n'j'm't' er +SFX d5 er as/n'm't' er +SFX d5 er a/n'q'm't's' er +SFX d5 er âmes/n't' er +SFX d5 er âtes/n'm' er +SFX d5 er èrent/n'q'm't's' er +SFX d5 eter etterai/n'j'm't' jeter +SFX d5 eter etterai/n'j'm't' [^j]eter +SFX d5 eler ellerai/n'j'm't' ppeler +SFX d5 eler ellerai/n'j'm't' [^p].eler +SFX d5 eter etteras/n'm't' jeter +SFX d5 eter etteras/n'm't' [^j]eter +SFX d5 eler elleras/n'm't' ppeler +SFX d5 eler elleras/n'm't' [^p].eler +SFX d5 eter ettera/n'q'm't's' jeter +SFX d5 eter ettera/n'q'm't's' [^j]eter +SFX d5 eler ellera/n'q'm't's' ppeler +SFX d5 eler ellera/n'q'm't's' [^p].eler +SFX d5 eter etterons/n't' jeter +SFX d5 eter etterons/n't' [^j]eter +SFX d5 eler ellerons/n't' ppeler +SFX d5 eler ellerons/n't' [^p].eler +SFX d5 eter etterez/n'm' jeter +SFX d5 eter etterez/n'm' [^j]eter +SFX d5 eler ellerez/n'm' ppeler +SFX d5 eler ellerez/n'm' [^p].eler +SFX d5 eter etteront/n'q'm't's' jeter +SFX d5 eter etteront/n'q'm't's' [^j]eter +SFX d5 eler elleront/n'q'm't's' ppeler +SFX d5 eler elleront/n'q'm't's' [^p].eler +SFX d5 eter etterais/n'j'm't' jeter +SFX d5 eter etterais/n'j'm't' [^j]eter +SFX d5 eler ellerais/n'j'm't' ppeler +SFX d5 eler ellerais/n'j'm't' [^p].eler +SFX d5 eter etterait/n'q'm't's' jeter +SFX d5 eter etterait/n'q'm't's' [^j]eter +SFX d5 eler ellerait/n'q'm't's' ppeler +SFX d5 eler ellerait/n'q'm't's' [^p].eler +SFX d5 eter etterions/n't' jeter +SFX d5 eter etterions/n't' [^j]eter +SFX d5 eler ellerions/n't' ppeler +SFX d5 eler ellerions/n't' [^p].eler +SFX d5 eter etteriez/n'm' jeter +SFX d5 eter etteriez/n'm' [^j]eter +SFX d5 eler elleriez/n'm' ppeler +SFX d5 eler elleriez/n'm' [^p].eler +SFX d5 eter etteraient/n'q'm't's' jeter +SFX d5 eter etteraient/n'q'm't's' [^j]eter +SFX d5 eler elleraient/n'q'm't's' ppeler +SFX d5 eler elleraient/n'q'm't's' [^p].eler +SFX d5 er asse/n'j'm't' er +SFX d5 er asses/n'm't' er +SFX d5 er ât/n'q'm't's' er +SFX d5 er assions/n't' er +SFX d5 er assiez/n'm' er +SFX d5 er assent/n'q'm't's' er +SFX d5 eter ette/m' jeter +SFX d5 eter ette/m' [^j]eter +SFX d5 eler elle/m' ppeler +SFX d5 eler elle/m' [^p].eler +SFX d5 er ons er +SFX d5 er ez er + +SFX aA Y 54 +SFX aA ller ller/n'q'd'm't' aller +SFX aA ller llant/n'q'm't' aller +SFX aA ller llé/q' aller +SFX aA ller llés/q' aller +SFX aA ller llée/q' aller +SFX aA ller llées/q' aller +SFX aA aller vais aller +SFX aA aller vas aller +SFX aA aller va aller +SFX aA ller llons/n'q' aller +SFX aA ller llez/n'q' aller +SFX aA aller vont aller +SFX aA ller llais/n'q'j' aller +SFX aA ller llait/n'q'm't' aller +SFX aA ller llions/n'q' aller +SFX aA ller lliez/n'q' aller +SFX aA ller llaient/n'q'm't' aller +SFX aA ller llai/n'q'j' aller +SFX aA ller llas/n'q' aller +SFX aA ller lla/n'q'm't' aller +SFX aA ller llâmes/n'q' aller +SFX aA ller llâtes/n'q' aller +SFX aA ller llèrent/n'q'm't' aller +SFX aA aller irai/n'q'j' aller +SFX aA aller iras/n'q' aller +SFX aA aller ira/n'q'm't' aller +SFX aA aller irons/n'q' aller +SFX aA aller irez/n'q'm't' aller +SFX aA aller iront/n'q' aller +SFX aA aller irais/n'q'j' aller +SFX aA aller irait/n'q'm't' aller +SFX aA aller irions/n'q' aller +SFX aA aller iriez/n'q' aller +SFX aA aller iraient/n'q'm't' aller +SFX aA ller ille/n'q'j'm't' aller +SFX aA ller illes/n' aller +SFX aA ller llions/n' aller +SFX aA ller lliez/n' aller +SFX aA ller illent/n'q'm't' aller +SFX aA ller llasse/n'q'j' aller +SFX aA ller llasses/n'q' aller +SFX aA ller llât/n'q'm't' aller +SFX aA ller llassions/n'q' aller +SFX aA ller llassiez/n'q' aller +SFX aA ller llassent/n'q'm't' aller +SFX aA ller llons/n' aller +SFX aA aller va aller +SFX aA aller vas-y aller +SFX aA aller va-t'en aller +SFX aA ller llons-y aller +SFX aA ller llons-nous-en aller +SFX aA ller llez/n' aller +SFX aA ller llez-y aller +SFX aA ller llez-vous-en aller + +SFX aD Y 44 +SFX aD voyer voyer/n'q'd'l'm't's' envoyer +SFX aD voyer voyant/n'q'l'm't's' envoyer +SFX aD voyer voyé/q' envoyer +SFX aD voyer voyés/q' envoyer +SFX aD voyer voyée/q' envoyer +SFX aD voyer voyées/q' envoyer +SFX aD voyer voie/n'q'j'l'm't's' envoyer +SFX aD voyer voies/n'q'l'm't' envoyer +SFX aD voyer voyons/n'q'l't' envoyer +SFX aD voyer voyez/n'q'l'm' envoyer +SFX aD voyer voient/n'q'l'm't's' envoyer +SFX aD voyer voyais/n'q'j'l'm't' envoyer +SFX aD voyer voyait/n'q'l'm't's' envoyer +SFX aD voyer voyions/n'q'l't' envoyer +SFX aD voyer voyiez/n'q'l'm' envoyer +SFX aD voyer voyaient/n'q'l'm't's' envoyer +SFX aD voyer voyai/n'q'j'l'm't' envoyer +SFX aD voyer voyas/n'q'l'm't' envoyer +SFX aD voyer voya/n'q'l'm't's' envoyer +SFX aD voyer voyâmes/n'q'l't' envoyer +SFX aD voyer voyâtes/n'q'l'm' envoyer +SFX aD voyer voyèrent/n'q'l'm't's' envoyer +SFX aD voyer verrai/n'q'j'l'm't' envoyer +SFX aD voyer verras/n'q'l'm't' envoyer +SFX aD voyer verra/n'q'l'm't's' envoyer +SFX aD voyer verrons/n'q'l't' envoyer +SFX aD voyer verrez/n'q'l'm' envoyer +SFX aD voyer verront/n'q'l'm't's' envoyer +SFX aD voyer verrais/n'q'j'l'm't' envoyer +SFX aD voyer verrait/n'q'l'm't's' envoyer +SFX aD voyer verrions/n'q'l't' envoyer +SFX aD voyer verriez/n'q'l'm' envoyer +SFX aD voyer verraient/n'q'l'm't's' envoyer +SFX aD voyer voie/n'q'j'l'm't's' envoyer +SFX aD voyer voies/n'l'm't' envoyer +SFX aD voyer voyasse/n'q'j'l'm't' envoyer +SFX aD voyer voyasses/n'q'l'm't' envoyer +SFX aD voyer voyât/n'q'l'm't's' envoyer +SFX aD voyer voyassions/n'q'l't' envoyer +SFX aD voyer voyassiez/n'q'l'm' envoyer +SFX aD voyer voyassent/n'q'l'm't's' envoyer +SFX aD voyer voie/n'l'm't' envoyer +SFX aD voyer voyons/n'l' envoyer +SFX aD voyer voyez/n'l'm' envoyer + +SFX aE Y 6 +SFX aE direr direr/n'q'd'l'm't's' direr +SFX aE direr dirant/n'q'l'm't's' direr +SFX aE direr diré/q' direr +SFX aE direr dirés/q' direr +SFX aE direr dirée/q' direr +SFX aE direr dirées/q' direr + +SFX aF N 17 +SFX aF cerner cernant er +SFX aF cerner cerné er +SFX aF cerner cernés er +SFX aF cerner cernée er +SFX aF cerner cernées er +SFX aF cerner cerne er +SFX aF cerner cernent er +SFX aF cerner cernait er +SFX aF cerner cernaient er +SFX aF cerner cerna er +SFX aF cerner cernèrent er +SFX aF cerner cernera er +SFX aF cerner cerneront er +SFX aF cerner cernerait er +SFX aF cerner cerneraient er +SFX aF cerner cernât er +SFX aF cerner cernassent er + +SFX aG Y 19 +SFX aG er er/n'q'd'm't' er +SFX aG er ant/n'q'm't' er +SFX aG mber mbé mber +SFX aG lter lté lter +SFX aG lter ltés lter +SFX aG lter ltée lter +SFX aG lter ltées lter +SFX aG er e/n'q'm't' er +SFX aG er ent/n'q'm't' er +SFX aG er ait/n'q'm't' er +SFX aG er aient/n'q'm't' er +SFX aG er a/n'q'm't' er +SFX aG er èrent/n'q'm't' er +SFX aG er era/n'q'm't' er +SFX aG er eront/n'q'm't' er +SFX aG er erait/n'q'm't' er +SFX aG er eraient/n'q'm't' er +SFX aG er ât/n'q'm't' er +SFX aG er assent/n'q'm't' er + +SFX aH N 38 +SFX aH er ant gger +SFX aH er é gger +SFX aH er e gger +SFX aH er es gger +SFX aH er ons gger +SFX aH er ez gger +SFX aH er ent gger +SFX aH er ais gger +SFX aH er ait gger +SFX aH er ions gger +SFX aH er iez gger +SFX aH er aient gger +SFX aH er ai gger +SFX aH er as gger +SFX aH er a gger +SFX aH er âmes gger +SFX aH er âtes gger +SFX aH er èrent gger +SFX aH er erai gger +SFX aH er eras gger +SFX aH er era gger +SFX aH er erons gger +SFX aH er erez gger +SFX aH er eront gger +SFX aH er erais gger +SFX aH er erait gger +SFX aH er erions gger +SFX aH er eriez gger +SFX aH er eraient gger +SFX aH er asse gger +SFX aH er asses gger +SFX aH er ât gger +SFX aH er assions gger +SFX aH er assiez gger +SFX aH er assent gger +SFX aH er e gger +SFX aH er ons gger +SFX aH er ez gger + +SFX aY N 41 +SFX aY neler nelant neler +SFX aY neler nelé neler +SFX aY neler nelés neler +SFX aY neler nelée neler +SFX aY neler nelées neler +SFX aY éneler énelle éneler +SFX aY éneler énelles éneler +SFX aY neler nelons neler +SFX aY neler nelez neler +SFX aY éneler énellent éneler +SFX aY neler nelais neler +SFX aY neler nelait neler +SFX aY neler nelions neler +SFX aY neler neliez neler +SFX aY neler nelaient neler +SFX aY neler nelai neler +SFX aY neler nelas neler +SFX aY neler nela neler +SFX aY neler nelâmes neler +SFX aY neler nelâtes neler +SFX aY neler nelèrent neler +SFX aY éneler énellerai éneler +SFX aY éneler énelleras éneler +SFX aY éneler énellera éneler +SFX aY éneler énellerons éneler +SFX aY éneler énellerez éneler +SFX aY éneler énelleront éneler +SFX aY éneler énellerais éneler +SFX aY éneler énellerait éneler +SFX aY éneler énellerions éneler +SFX aY éneler énelleriez éneler +SFX aY éneler énelleraient éneler +SFX aY neler nelasse neler +SFX aY neler nelasses neler +SFX aY neler nelât neler +SFX aY neler nelassions neler +SFX aY neler nelassiez neler +SFX aY neler nelassent neler +SFX aY éneler énelle éneler +SFX aY neler nelons neler +SFX aY neler nelez neler + +SFX aZ N 41 +SFX aZ teler telant teler +SFX aZ teler telé teler +SFX aZ teler telés teler +SFX aZ teler telée teler +SFX aZ teler telées teler +SFX aZ ételer ételle ételer +SFX aZ ételer ételles ételer +SFX aZ teler telons teler +SFX aZ teler telez teler +SFX aZ ételer étellent ételer +SFX aZ teler telais teler +SFX aZ teler telait teler +SFX aZ teler telions teler +SFX aZ teler teliez teler +SFX aZ teler telaient teler +SFX aZ teler telai teler +SFX aZ teler telas teler +SFX aZ teler tela teler +SFX aZ teler telâmes teler +SFX aZ teler telâtes teler +SFX aZ teler telèrent teler +SFX aZ ételer étellerai ételer +SFX aZ ételer ételleras ételer +SFX aZ ételer étellera ételer +SFX aZ ételer étellerons ételer +SFX aZ ételer étellerez ételer +SFX aZ ételer ételleront ételer +SFX aZ ételer étellerais ételer +SFX aZ ételer étellerait ételer +SFX aZ ételer étellerions ételer +SFX aZ ételer ételleriez ételer +SFX aZ ételer ételleraient ételer +SFX aZ teler telasse teler +SFX aZ teler telasses teler +SFX aZ teler telât teler +SFX aZ teler telassions teler +SFX aZ teler telassiez teler +SFX aZ teler telassent teler +SFX aZ ételer ételle ételer +SFX aZ teler telons teler +SFX aZ teler telez teler + +SFX dA Y 42 +SFX dA peler peler/n'q'd'l'm't's' peler +SFX dA peler pelant/n'q'l'm't's' peler +SFX dA peler pelé/q' peler +SFX dA peler pelés/q' peler +SFX dA peler pelée/q' peler +SFX dA peler pelées/q' peler +SFX dA peler pelle/n'q'j'l'm't's' peler +SFX dA peler pelles/n'q'l'm' peler +SFX dA peler pelons/n'q'l't' peler +SFX dA peler pelez/n'q'l'm' peler +SFX dA peler pellent/n'q'l'm't's' peler +SFX dA peler pelais/n'q'j'l't' peler +SFX dA peler pelait/n'q'l'm't's' peler +SFX dA peler pelions/n'q'l't' peler +SFX dA peler peliez/n'q'l'm' peler +SFX dA peler pelaient/n'q'l'm't's' peler +SFX dA peler pelai/n'q'j'l't' peler +SFX dA peler pelas/n'q'l'm' peler +SFX dA peler pela/n'q'l'm't's' peler +SFX dA peler pelâmes/n'q'l't' peler +SFX dA peler pelâtes/n'q'l'm' peler +SFX dA peler pelèrent/n'q'l'm't's' peler +SFX dA peler pellerai/n'q'j'l't' peler +SFX dA peler pelleras/n'q'l'm' peler +SFX dA peler pellera/n'q'l'm't's' peler +SFX dA peler pellerons/n'q'l't' peler +SFX dA peler pellerez/n'q'l'm' peler +SFX dA peler pelleront/n'q'l'm't's' peler +SFX dA peler pellerais/n'q'j'l't' peler +SFX dA peler pellerait/n'q'l'm't's' peler +SFX dA peler pellerions/n'q'l't' peler +SFX dA peler pelleriez/n'q'l'm' peler +SFX dA peler pelleraient/n'q'l'm't's' peler +SFX dA peler pelasse/n'q'j'l't' peler +SFX dA peler pelasses/n'q'l'm' peler +SFX dA peler pelât/n'q'l'm't's' peler +SFX dA peler pelassions/n'q'l't' peler +SFX dA peler pelassiez/n'q'l'm' peler +SFX dA peler pelassent/n'q'l'm't's' peler +SFX dA peler pelle/n'l'm' peler +SFX dA peler pelons/n'l' peler +SFX dA peler pelez/n'l'm' peler + +SFX f0 Y 32 +SFX f0 ir issant ir +SFX f0 ir is ir +SFX f0 ir it ir +SFX f0 ir issons ir +SFX f0 ir issez ir +SFX f0 ir issent ir +SFX f0 ir issais ir +SFX f0 ir issait ir +SFX f0 ir issions ir +SFX f0 ir issiez ir +SFX f0 ir issaient ir +SFX f0 ir îmes ir +SFX f0 ir îtes ir +SFX f0 ir irent ir +SFX f0 ir irai ir +SFX f0 ir iras ir +SFX f0 ir ira ir +SFX f0 ir irons ir +SFX f0 ir irez ir +SFX f0 ir iront ir +SFX f0 ir irais ir +SFX f0 ir irait ir +SFX f0 ir irions ir +SFX f0 ir iriez ir +SFX f0 ir iraient ir +SFX f0 ir isse ir +SFX f0 ir isses ir +SFX f0 ir isse ir +SFX f0 ir ît ir +SFX f0 ir is ir +SFX f0 ir issons ir +SFX f0 ir issez ir + +SFX f1 Y 33 +SFX f1 ir ir/n'q'd' ir +SFX f1 ir issant/n'q' ir +SFX f1 ir is/n'j' ir +SFX f1 ir it/n'q' ir +SFX f1 ir issons/n' ir +SFX f1 ir issez/n' ir +SFX f1 ir issent/n'q' ir +SFX f1 ir issais/n'j' ir +SFX f1 ir issait/n'q' ir +SFX f1 ir issions/n' ir +SFX f1 ir issiez/n' ir +SFX f1 ir issaient/n'q' ir +SFX f1 ir îmes/n' ir +SFX f1 ir îtes/n' ir +SFX f1 ir irent/n'q' ir +SFX f1 ir irai/n'j' ir +SFX f1 ir iras/n' ir +SFX f1 ir ira/n'q' ir +SFX f1 ir irons/n' ir +SFX f1 ir irez/n' ir +SFX f1 ir iront/n'q' ir +SFX f1 ir irais/n'j' ir +SFX f1 ir irait/n'q' ir +SFX f1 ir irions/n' ir +SFX f1 ir iriez/n' ir +SFX f1 ir iraient/n'q' ir +SFX f1 ir isse/n'j' ir +SFX f1 ir isses/n' ir +SFX f1 ir isse/n'q' ir +SFX f1 ir ît/n'q' ir +SFX f1 ir is/n' ir +SFX f1 ir issons/n' ir +SFX f1 ir issez/n' ir + +SFX f2 Y 33 +SFX f2 ir ir/n'q'd'l'm't's' ir +SFX f2 ir issant/n'q'l'm't's' ir +SFX f2 ir is/n'q'j'l't' ir +SFX f2 ir it/n'q'l'm't's' ir +SFX f2 ir issons/n'q'l't' ir +SFX f2 ir issez/n'q'l'm' ir +SFX f2 ir issent/n'q'l'm't's' ir +SFX f2 ir issais/n'q'j'l't' ir +SFX f2 ir issait/n'q'l'm't's' ir +SFX f2 ir issions/n'q'l't' ir +SFX f2 ir issiez/n'q'l'm' ir +SFX f2 ir issaient/n'q'l'm't's' ir +SFX f2 ir îmes/n'q'l't' ir +SFX f2 ir îtes/n'q'l'm' ir +SFX f2 ir irent/n'q'l'm't's' ir +SFX f2 ir irai/n'q'j'l't' ir +SFX f2 ir iras/n'q'l'm't' ir +SFX f2 ir ira/n'q'l'm't's' ir +SFX f2 ir irons/n'q'l't' ir +SFX f2 ir irez/n'q'l'm' ir +SFX f2 ir iront/n'q'l'm't's' ir +SFX f2 ir irais/n'q'j'l'm't' ir +SFX f2 ir irait/n'q'l'm't's' ir +SFX f2 ir irions/n'q'l't' ir +SFX f2 ir iriez/n'q'l'm' ir +SFX f2 ir iraient/n'q'l'm't's' ir +SFX f2 ir isse/n'q'j'l't' ir +SFX f2 ir isses/n'q'l'm' ir +SFX f2 ir isse/n'q'l'm't's' ir +SFX f2 ir ît/n'q'l'm't's' ir +SFX f2 ir is/n'l'm' ir +SFX f2 ir issons/n'l' ir +SFX f2 ir issez/n'l'm' ir + +SFX f3 Y 33 +SFX f3 ir ir/m't's' ir +SFX f3 ir issant/m't's' ir +SFX f3 ir is/m't' ir +SFX f3 ir it/s' ir +SFX f3 ir issons ir +SFX f3 ir issez ir +SFX f3 ir issent/s' ir +SFX f3 ir issais/m't' ir +SFX f3 ir issait/s' ir +SFX f3 ir issions ir +SFX f3 ir issiez ir +SFX f3 ir issaient/s' ir +SFX f3 ir îmes ir +SFX f3 ir îtes ir +SFX f3 ir irent/s' ir +SFX f3 ir irai/m' ir +SFX f3 ir iras/t' ir +SFX f3 ir ira/s' ir +SFX f3 ir irons ir +SFX f3 ir irez ir +SFX f3 ir iront/s' ir +SFX f3 ir irais/m't' ir +SFX f3 ir irait/s' ir +SFX f3 ir irions ir +SFX f3 ir iriez ir +SFX f3 ir iraient/s' ir +SFX f3 ir isse/m' ir +SFX f3 ir isses/t' ir +SFX f3 ir isse/s' ir +SFX f3 ir ît/s' ir +SFX f3 ir is/t' ir +SFX f3 ir issons ir +SFX f3 ir issez ir + +SFX f4 Y 33 +SFX f4 ir ir/n'q'd'l'm't's' ir +SFX f4 ir issant/n'q'l'm't's' ir +SFX f4 ir is/n'q'j'l'm't' ir +SFX f4 ir it/n'q'l'm't's' ir +SFX f4 ir issons/n'q'l't' ir +SFX f4 ir issez/n'q'l'm' ir +SFX f4 ir issent/n'q'l'm't's' ir +SFX f4 ir issais/n'q'j'l'm't' ir +SFX f4 ir issait/n'q'l'm't's' ir +SFX f4 ir issions/n'q'l't' ir +SFX f4 ir issiez/n'q'l'm' ir +SFX f4 ir issaient/n'q'l'm't's' ir +SFX f4 ir îmes/n'q'l't' ir +SFX f4 ir îtes/n'q'l'm' ir +SFX f4 ir irent/n'q'l'm't's' ir +SFX f4 ir irai/n'q'j'l'm't' ir +SFX f4 ir iras/n'q'l'm't' ir +SFX f4 ir ira/n'q'l'm't's' ir +SFX f4 ir irons/n'q'l't' ir +SFX f4 ir irez/n'q'l'm' ir +SFX f4 ir iront/n'q'l'm't's' ir +SFX f4 ir irais/n'q'j'l'm't' ir +SFX f4 ir irait/n'q'l'm't's' ir +SFX f4 ir irions/n'q'l't' ir +SFX f4 ir iriez/n'q'l'm' ir +SFX f4 ir iraient/n'q'l'm't's' ir +SFX f4 ir isse/n'q'j'l'm't' ir +SFX f4 ir isses/n'q'l'm't' ir +SFX f4 ir isse/n'q'l'm't's' ir +SFX f4 ir ît/n'q'l'm't's' ir +SFX f4 ir is/n'l'm't' ir +SFX f4 ir issons/n'l' ir +SFX f4 ir issez/n'l'm' ir + +SFX f5 Y 33 +SFX f5 ir ir/n'q'd'm't's' ir +SFX f5 ir issant/n'q'm't's' ir +SFX f5 ir is/n'j'm't' ir +SFX f5 ir it/n'q'm't's' ir +SFX f5 ir issons/n't' ir +SFX f5 ir issez/n'm' ir +SFX f5 ir issent/n'q'm't's' ir +SFX f5 ir issais/n'j'm't' ir +SFX f5 ir issait/n'q'm't's' ir +SFX f5 ir issions/n't' ir +SFX f5 ir issiez/n'm' ir +SFX f5 ir issaient/n'q'm't's' ir +SFX f5 ir îmes/n't' ir +SFX f5 ir îtes/n'm' ir +SFX f5 ir irent/n'q'm't's' ir +SFX f5 ir irai/n'j'm't' ir +SFX f5 ir iras/n'm't' ir +SFX f5 ir ira/n'q'm't's' ir +SFX f5 ir irons/n't' ir +SFX f5 ir irez/n'm' ir +SFX f5 ir iront/n'q'm't's' ir +SFX f5 ir irais/n'j'm't' ir +SFX f5 ir irait/n'q'm't's' ir +SFX f5 ir irions/n't' ir +SFX f5 ir iriez/n'm' ir +SFX f5 ir iraient/n'q'm't's' ir +SFX f5 ir isse/n'j'm't' ir +SFX f5 ir isses/n'm't' ir +SFX f5 ir isse/n'q'm't's' ir +SFX f5 ir ît/n'q'm't's' ir +SFX f5 ir is/n'm' ir +SFX f5 ir issons/n' ir +SFX f5 ir issez/n'm' ir + +SFX fA N 37 +SFX fA aïr aïssant aïr +SFX fA aïr aï aïr +SFX fA aïr aïs aïr +SFX fA aïr aïe aïr +SFX fA aïr aïes aïr +SFX fA aïr ais aïr +SFX fA aïr ait aïr +SFX fA aïr aïssons aïr +SFX fA aïr aïssez aïr +SFX fA aïr aïssent aïr +SFX fA aïr aïssais aïr +SFX fA aïr aïssait aïr +SFX fA aïr aïssions aïr +SFX fA aïr aïssiez aïr +SFX fA aïr aïssaient aïr +SFX fA aïr aïs aïr +SFX fA aïr aït aïr +SFX fA aïr aïmes aïr +SFX fA aïr aïtes aïr +SFX fA aïr aïrent aïr +SFX fA aïr aïrai aïr +SFX fA aïr aïras aïr +SFX fA aïr aïra aïr +SFX fA aïr aïrons aïr +SFX fA aïr aïrez aïr +SFX fA aïr aïront aïr +SFX fA aïr aïrais aïr +SFX fA aïr aïrait aïr +SFX fA aïr aïrions aïr +SFX fA aïr aïriez aïr +SFX fA aïr aïraient aïr +SFX fA aïr aïsse aïr +SFX fA aïr aïsses aïr +SFX fA aïr aïsse aïr +SFX fA aïr ais aïr +SFX fA aïr aïssons aïr +SFX fA aïr aïssez aïr + +SFX fB Y 29 +SFX fB haïr haïr/s' aïr +SFX fB haïr haïssant/s' aïr +SFX fB haïr haï aïr +SFX fB haïr haïs aïr +SFX fB haïr haïe aïr +SFX fB haïr haïes aïr +SFX fB haïr hait/s' aïr +SFX fB haïr haïssons aïr +SFX fB haïr haïssez aïr +SFX fB haïr haïssent/s' aïr +SFX fB haïr haïssait/s' aïr +SFX fB haïr haïssions aïr +SFX fB haïr haïssiez aïr +SFX fB haïr haïssaient/s' aïr +SFX fB haïr haït/s' aïr +SFX fB haïr haïmes aïr +SFX fB haïr haïtes aïr +SFX fB haïr haïrent/s' aïr +SFX fB haïr haïra/s' aïr +SFX fB haïr haïrons aïr +SFX fB haïr haïrez aïr +SFX fB haïr haïront/s' aïr +SFX fB haïr haïrait/s' aïr +SFX fB haïr haïrions aïr +SFX fB haïr haïriez aïr +SFX fB haïr haïraient/s' aïr +SFX fB haïr haïsse/s' aïr +SFX fB haïr haïssons-nous aïr +SFX fB haïr haïssez-vous aïr + +SFX fC Y 11 +SFX fC partir partir/n'q'd'l'm't's' impartir +SFX fC partir partissant/n'q'l'm't's' impartir +SFX fC partir parti/q' impartir +SFX fC partir partis/q' impartir +SFX fC partir partie/q' impartir +SFX fC partir parties/q' impartir +SFX fC partir partis/n'q'j'l'm't' impartir +SFX fC partir partit/n'q'l'm't's' impartir +SFX fC partir partissons/n'q'l't' impartir +SFX fC partir partissez/n'q'l'm' impartir +SFX fC partir partissent/n'q'l'm't's' impartir + +SFX fD N 11 +SFX fD ortir ortissant sortir +SFX fD ortir ortit sortir +SFX fD ortir ortissent sortir +SFX fD ortir ortissait sortir +SFX fD ortir ortissaient sortir +SFX fD ortir ortira sortir +SFX fD ortir ortiront sortir +SFX fD ortir ortirait sortir +SFX fD ortir ortiraient sortir +SFX fD ortir ortisse sortir +SFX fD ortir ortît sortir + +SFX fY N 37 +SFX fY uïr uïr/s' uïr +SFX fY uïr uïssant/m't's' uïr +SFX fY uïr uï uïr +SFX fY uïr uïs uïr +SFX fY uïr uïe uïr +SFX fY uïr uïes uïr +SFX fY uïr uïs/m't' uïr +SFX fY uïr uït/s' uïr +SFX fY uïr uïssons uïr +SFX fY uïr uïssez uïr +SFX fY uïr uïssent/s' uïr +SFX fY uïr uïssais/m't' uïr +SFX fY uïr uïssait/s' uïr +SFX fY uïr uïssions uïr +SFX fY uïr uïssiez uïr +SFX fY uïr uïssaient/s' uïr +SFX fY uïr uîmes uïr +SFX fY uïr uîtes uïr +SFX fY uïr uïrent/s' uïr +SFX fY uïr uïrai/m' uïr +SFX fY uïr uïras/t' uïr +SFX fY uïr uïra/s' uïr +SFX fY uïr uïrons uïr +SFX fY uïr uïrez uïr +SFX fY uïr uïront/s' uïr +SFX fY uïr uïrais/m't' uïr +SFX fY uïr uïrait/s' uïr +SFX fY uïr uïrions uïr +SFX fY uïr uïriez uïr +SFX fY uïr uïraient/s' uïr +SFX fY uïr uïsse/m' uïr +SFX fY uïr uïsses/t' uïr +SFX fY uïr uïsse/s' uïr +SFX fY uïr uît/s' uïr +SFX fY uïr uïs/t' uïr +SFX fY uïr uïssons uïr +SFX fY uïr uïssez uïr + +SFX fZ N 7 +SFX fZ gir gissant agir +SFX fZ gir git agir +SFX fZ gir gissait agir +SFX fZ gir gira agir +SFX fZ gir girait agir +SFX fZ gir gisse agir +SFX fZ gir gît agir + +SFX p+ Y 8 +SFX p+ er é/L'D'Q' er +SFX p+ er és/D'Q' er +SFX p+ er ée/L'D'Q' er +SFX p+ er ées/D'Q' er +SFX p+ ir i/L'D'Q' ir +SFX p+ ir is/D'Q' ir +SFX p+ ir ie/L'D'Q' ir +SFX p+ ir ies/D'Q' ir + +SFX p. Y 2 +SFX p. er é/q' er +SFX p. ir i/q' ir + +SFX i0 Y 39 +SFX i0 enir enir/n'q'd' enir +SFX i0 enir enant/n'q' enir +SFX i0 enir iens/n'j' enir +SFX i0 enir ient/n'q' enir +SFX i0 enir enons/n' enir +SFX i0 enir enez/n' enir +SFX i0 enir iennent/n'q' enir +SFX i0 enir enais/n'j' enir +SFX i0 enir enait/n'q' enir +SFX i0 enir enions/n' enir +SFX i0 enir eniez/n' enir +SFX i0 enir enaient/n'q' enir +SFX i0 enir ins/n'j' enir +SFX i0 enir int/n'q' enir +SFX i0 enir înmes/n' enir +SFX i0 enir întes/n' enir +SFX i0 enir inrent/n'q' enir +SFX i0 enir iendrai/n'j' enir +SFX i0 enir iendras/n' enir +SFX i0 enir iendra/n'q' enir +SFX i0 enir iendrons/n' enir +SFX i0 enir iendrez/n' enir +SFX i0 enir iendront/n'q' enir +SFX i0 enir iendrais/n'j' enir +SFX i0 enir iendrait/n'q' enir +SFX i0 enir iendrions/n' enir +SFX i0 enir iendriez/n' enir +SFX i0 enir iendraient/n'q' enir +SFX i0 enir ienne/n'q'j' enir +SFX i0 enir iennes/n' enir +SFX i0 enir insse/n'j' enir +SFX i0 enir insses/n' enir +SFX i0 enir înt/n'q' enir +SFX i0 enir inssions/n' enir +SFX i0 enir inssiez/n' enir +SFX i0 enir inssent/n'q' enir +SFX i0 enir iens/n' enir +SFX i0 enir enons/n' enir +SFX i0 enir enez/n' enir + +SFX i1 Y 39 +SFX i1 enir enir/n'q'd'l'm't's' enir +SFX i1 enir enant/n'q'l'm't's' enir +SFX i1 enir iens/n'q'j'l'm't' enir +SFX i1 enir ient/n'q'l'm't's' enir +SFX i1 enir enons/n'q'l't' enir +SFX i1 enir enez/n'q'l'm' enir +SFX i1 enir iennent/n'q'l'm't's' enir +SFX i1 enir enais/n'q'j'l'm't' enir +SFX i1 enir enait/n'q'l'm't's' enir +SFX i1 enir enions/n'q'l't' enir +SFX i1 enir eniez/n'q'l'm' enir +SFX i1 enir enaient/n'q'l'm't's' enir +SFX i1 enir ins/n'q'j'l'm't' enir +SFX i1 enir int/n'q'l'm't's' enir +SFX i1 enir înmes/n'q'l't' enir +SFX i1 enir întes/n'q'l'm' enir +SFX i1 enir inrent/n'q'l'm't's' enir +SFX i1 enir iendrai/n'q'j'l'm't' enir +SFX i1 enir iendras/n'q'l'm't' enir +SFX i1 enir iendra/n'q'l'm't's' enir +SFX i1 enir iendrons/n'q'l't' enir +SFX i1 enir iendrez/n'q'l'm' enir +SFX i1 enir iendront/n'q'l'm't's' enir +SFX i1 enir iendrais/n'q'j'l'm't' enir +SFX i1 enir iendrait/n'q'l'm't's' enir +SFX i1 enir iendrions/n'q'l't' enir +SFX i1 enir iendriez/n'q'l'm' enir +SFX i1 enir iendraient/n'q'l'm't's' enir +SFX i1 enir ienne/n'q'j'l'm't's' enir +SFX i1 enir iennes/n'l'm't' enir +SFX i1 enir insse/n'q'j'l'm't' enir +SFX i1 enir insses/n'q'l'm't' enir +SFX i1 enir înt/n'q'l'm't's' enir +SFX i1 enir inssions/n'q'l't' enir +SFX i1 enir inssiez/n'q'l'm' enir +SFX i1 enir inssent/n'q'l'm't's' enir +SFX i1 enir iens/n'l'm't' enir +SFX i1 enir enons/n'l' enir +SFX i1 enir enez/n'l'm' enir + +SFX i2 Y 39 +SFX i2 enir enir/m't's' enir +SFX i2 enir enant/m't's' enir +SFX i2 enir iens/m't' enir +SFX i2 enir ient/s' enir +SFX i2 enir enons enir +SFX i2 enir enez enir +SFX i2 enir iennent/s' enir +SFX i2 enir enais/m't' enir +SFX i2 enir enait/s' enir +SFX i2 enir enions enir +SFX i2 enir eniez enir +SFX i2 enir enaient/s' enir +SFX i2 enir ins/m't' enir +SFX i2 enir int/s' enir +SFX i2 enir înmes enir +SFX i2 enir întes enir +SFX i2 enir inrent/s' enir +SFX i2 enir iendrai/m' enir +SFX i2 enir iendras/t' enir +SFX i2 enir iendra/s' enir +SFX i2 enir iendrons enir +SFX i2 enir iendrez enir +SFX i2 enir iendront/s' enir +SFX i2 enir iendrais/m't' enir +SFX i2 enir iendrait/s' enir +SFX i2 enir iendrions enir +SFX i2 enir iendriez enir +SFX i2 enir iendraient/s' enir +SFX i2 enir ienne/m's' enir +SFX i2 enir iennes/t' enir +SFX i2 enir insse/m' enir +SFX i2 enir insses/t' enir +SFX i2 enir înt/s' enir +SFX i2 enir inssions enir +SFX i2 enir inssiez enir +SFX i2 enir inssent/s' enir +SFX i2 enir iens/t' enir +SFX i2 enir enons enir +SFX i2 enir enez enir + +SFX i5 N 38 +SFX i5 tir tant tir +SFX i5 tir s tir +SFX i5 tir t tir +SFX i5 tir tons tir +SFX i5 tir tez tir +SFX i5 tir tent tir +SFX i5 tir tais tir +SFX i5 tir tait tir +SFX i5 tir tions tir +SFX i5 tir tiez tir +SFX i5 tir taient tir +SFX i5 tir tis tir +SFX i5 tir tit tir +SFX i5 tir tîmes tir +SFX i5 tir tîtes tir +SFX i5 tir tirent tir +SFX i5 tir tirai tir +SFX i5 tir tiras tir +SFX i5 tir tira tir +SFX i5 tir tirons tir +SFX i5 tir tirez tir +SFX i5 tir tiront tir +SFX i5 tir tirais tir +SFX i5 tir tirait tir +SFX i5 tir tirions tir +SFX i5 tir tiriez tir +SFX i5 tir tiraient tir +SFX i5 tir te tir +SFX i5 tir tes tir +SFX i5 tir tisse tir +SFX i5 tir tisses tir +SFX i5 tir tît tir +SFX i5 tir tissions tir +SFX i5 tir tissiez tir +SFX i5 tir tissent tir +SFX i5 tir s tir +SFX i5 tir tons tir +SFX i5 tir tez tir + +SFX iA Y 19 +SFX iA dvenir dvenir/n'q'd'm't' venir +SFX iA dvenir dvenant/n'q'm't' venir +SFX iA dvenir dvenu/Q' venir +SFX iA dvenir dvenus/Q' venir +SFX iA dvenir dvenue/Q' venir +SFX iA dvenir dvenues/Q' venir +SFX iA dvenir dvient/n'q'm't' venir +SFX iA dvenir dviennent/n'q' venir +SFX iA dvenir dvenait/n'q'm't' venir +SFX iA dvenir dvenaient/n'q' venir +SFX iA dvenir dvint/n'q'm't' venir +SFX iA dvenir dvinrent/n'q' venir +SFX iA dvenir dviendra/n'q'm't' venir +SFX iA dvenir dviendront/n'q' venir +SFX iA dvenir dviendrait/n'q'm't' venir +SFX iA dvenir dviendraient/n'q' venir +SFX iA dvenir dvienne/n'q'm't' venir +SFX iA dvenir dvînt/n'q'm't' venir +SFX iA dvenir dvinssent/n'q' venir + +SFX iB Y 40 +SFX iB partenir partenir/n'q'd'm't's' tenir +SFX iB partenir partenant/n'q'm't's' tenir +SFX iB partenir partenu/q' tenir +SFX iB partenir partiens/n'j'm't' tenir +SFX iB partenir partient/n'q'm't's' tenir +SFX iB partenir partenons/n't' tenir +SFX iB partenir partenez/n'm' tenir +SFX iB partenir partiennent/n'q'm't's' tenir +SFX iB partenir partenais/n'j'm't' tenir +SFX iB partenir partenait/n'q'm't's' tenir +SFX iB partenir partenions/n't' tenir +SFX iB partenir parteniez/n'm' tenir +SFX iB partenir partenaient/n'q'm't's' tenir +SFX iB partenir partins/n'j'm't' tenir +SFX iB partenir partint/n'q'm't's' tenir +SFX iB partenir partînmes/n't' tenir +SFX iB partenir partîntes/n'm' tenir +SFX iB partenir partinrent/n'q'm't's' tenir +SFX iB partenir partiendrai/n'j'm't' tenir +SFX iB partenir partiendras/n'm't' tenir +SFX iB partenir partiendra/n'q'm't's' tenir +SFX iB partenir partiendrons/n't' tenir +SFX iB partenir partiendrez/n'm' tenir +SFX iB partenir partiendront/n'q'm't's' tenir +SFX iB partenir partiendrais/n'j'm't' tenir +SFX iB partenir partiendrait/n'q'm't's' tenir +SFX iB partenir partiendrions/n't' tenir +SFX iB partenir partiendriez/n'm' tenir +SFX iB partenir partiendraient/n'q'm't's' tenir +SFX iB partenir partienne/n'q'j'm't's' tenir +SFX iB partenir partiennes/n'm't' tenir +SFX iB partenir partinsse/n'j'm't' tenir +SFX iB partenir partinsses/n'm't' tenir +SFX iB partenir partînt/n'q'm't's' tenir +SFX iB partenir partinssions/n't' tenir +SFX iB partenir partinssiez/n'm' tenir +SFX iB partenir partinssent/n'q'm't's' tenir +SFX iB partenir partiens/n'm't' tenir +SFX iB partenir partenons/n' tenir +SFX iB partenir partenez/n'm' tenir + +SFX iC Y 41 +SFX iC rir rir/n'q'd'l'm't's' [vf]rir +SFX iC rir rant/n'q'l'm't's' [vf]rir +SFX iC rir ert/L'D'Q' [vf]rir +SFX iC rir erts/D'Q' [vf]rir +SFX iC rir erte/L'D'Q' [vf]rir +SFX iC rir ertes/D'Q' [vf]rir +SFX iC rir re/n'q'j'l'm't's' [vf]rir +SFX iC rir res/n'q'l'm't' [vf]rir +SFX iC rir rons/n'q'l't' [vf]rir +SFX iC rir rez/n'q'l'm' [vf]rir +SFX iC rir rent/n'q'l'm't's' [vf]rir +SFX iC rir rais/n'q'j'l'm't' [vf]rir +SFX iC rir rait/n'q'l'm't's' [vf]rir +SFX iC rir rions/n'q'l't' [vf]rir +SFX iC rir riez/n'q'l'm' [vf]rir +SFX iC rir raient/n'q'l'm't's' [vf]rir +SFX iC rir ris/n'q'j'l'm't' [vf]rir +SFX iC rir rit/n'q'l'm't's' [vf]rir +SFX iC rir rîmes/n'q'l't' [vf]rir +SFX iC rir rîtes/n'q'l'm' [vf]rir +SFX iC rir rirent/n'q'l'm't's' [vf]rir +SFX iC rir rirai/n'q'j'l'm't' [vf]rir +SFX iC rir riras/n'q'l'm't' [vf]rir +SFX iC rir rira/n'q'l'm't's' [vf]rir +SFX iC rir rirons/n'q'l't' [vf]rir +SFX iC rir rirez/n'q'l'm' [vf]rir +SFX iC rir riront/n'q'l'm't's' [vf]rir +SFX iC rir rirais/n'q'j'l'm't' [vf]rir +SFX iC rir rirait/n'q'l'm't's' [vf]rir +SFX iC rir ririons/n'q'l't' [vf]rir +SFX iC rir ririez/n'q'l'm' [vf]rir +SFX iC rir riraient/n'q'l'm't's' [vf]rir +SFX iC rir risse/n'q'j'l'm't' [vf]rir +SFX iC rir risses/n'q'l'm't' [vf]rir +SFX iC rir rît/n'q'l'm't's' [vf]rir +SFX iC rir rissions/n'q'l't' [vf]rir +SFX iC rir rissiez/n'q'l'm' [vf]rir +SFX iC rir rissent/n'q'l'm't's' [vf]rir +SFX iC rir re/n'l'm't' [vf]rir +SFX iC rir rons/n'l' [vf]rir +SFX iC rir rez/n'l'm' [vf]rir + +SFX iD Y 43 +SFX iD courir courir/n'q'd' courir +SFX iD courir courant/n'q' courir +SFX iD courir couru courir +SFX iD courir courus courir +SFX iD courir courue courir +SFX iD courir courues courir +SFX iD courir cours/n'j' courir +SFX iD courir court/n' courir +SFX iD courir courons/n' courir +SFX iD courir courez/n' courir +SFX iD courir courent/n' courir +SFX iD courir courais/n'j' courir +SFX iD courir courait/n' courir +SFX iD courir courions/n' courir +SFX iD courir couriez/n' courir +SFX iD courir couraient/n' courir +SFX iD courir courus/n'j' courir +SFX iD courir courut/n' courir +SFX iD courir courûmes/n' courir +SFX iD courir courûtes/n' courir +SFX iD courir coururent/n' courir +SFX iD courir courrai/n'j' courir +SFX iD courir courras/n' courir +SFX iD courir courra/n' courir +SFX iD courir courrons/n' courir +SFX iD courir courrez/n' courir +SFX iD courir courront/n' courir +SFX iD courir courrais/n'j' courir +SFX iD courir courrait/n' courir +SFX iD courir courrions/n' courir +SFX iD courir courriez/n' courir +SFX iD courir courraient/n' courir +SFX iD courir coure/n'j' courir +SFX iD courir coures/n' courir +SFX iD courir courusse/n'j' courir +SFX iD courir courusses/n' courir +SFX iD courir courût/n' courir +SFX iD courir courussions/n' courir +SFX iD courir courussiez/n' courir +SFX iD courir courussent/n' courir +SFX iD courir cours/n' courir +SFX iD courir courons/n' courir +SFX iD courir courez/n' courir + +SFX iE Y 43 +SFX iE ourir ourir/n'q'd'l'm't's' courir +SFX iE ourir ourant/n'q'm't's' courir +SFX iE ourir ouru/L'D'Q' courir +SFX iE ourir ourus/D'Q' courir +SFX iE ourir ourue/L'D'Q' courir +SFX iE ourir ourues/D'Q' courir +SFX iE ourir ours/n'q'j'l'm't' courir +SFX iE ourir ourt/n'q'l's' courir +SFX iE ourir ourons/n'q'l' courir +SFX iE ourir ourez/n'q'l' courir +SFX iE ourir ourent/n'q'l's' courir +SFX iE ourir ourais/n'q'j'l'm't' courir +SFX iE ourir ourait/n'q'l's' courir +SFX iE ourir ourions/n'q'l' courir +SFX iE ourir ouriez/n'q'l' courir +SFX iE ourir ouraient/n'q'l's' courir +SFX iE ourir ourus/n'q'j'l'm't' courir +SFX iE ourir ourut/n'q'l's' courir +SFX iE ourir ourûmes/n'q'l' courir +SFX iE ourir ourûtes/n'q'l' courir +SFX iE ourir oururent/n'q'l's' courir +SFX iE ourir ourrai/n'q'j'l'm' courir +SFX iE ourir ourras/n'q'l't' courir +SFX iE ourir ourra/n'q'l's' courir +SFX iE ourir ourrons/n'q'l' courir +SFX iE ourir ourrez/n'q'l' courir +SFX iE ourir ourront/n'q'l's' courir +SFX iE ourir ourrais/n'q'j'l'm't' courir +SFX iE ourir ourrait/n'q'l's' courir +SFX iE ourir ourrions/n'q'l' courir +SFX iE ourir ourriez/n'q'l' courir +SFX iE ourir ourraient/n'q'l's' courir +SFX iE ourir oure/n'q'j'l'm's' courir +SFX iE ourir oures/n'l't' courir +SFX iE ourir ourusse/n'q'j'l'm' courir +SFX iE ourir ourusses/n'q'l't' courir +SFX iE ourir ourût/n'q'l's' courir +SFX iE ourir ourussions/n'q'l' courir +SFX iE ourir ourussiez/n'q'l' courir +SFX iE ourir ourussent/n'q'l's' courir +SFX iE ourir ours/n'l' courir +SFX iE ourir ourons/n'l' courir +SFX iE ourir ourez/n'l' courir + +SFX iF N 42 +SFX iF ervir ervant servir +SFX iF ervir ervi servir +SFX iF ervir ervis servir +SFX iF ervir ervie servir +SFX iF ervir ervies servir +SFX iF ervir ers servir +SFX iF ervir ert servir +SFX iF ervir ervons servir +SFX iF ervir ervez servir +SFX iF ervir ervent servir +SFX iF ervir ervais servir +SFX iF ervir ervait servir +SFX iF ervir ervions servir +SFX iF ervir erviez servir +SFX iF ervir ervaient servir +SFX iF ervir ervis servir +SFX iF ervir ervit servir +SFX iF ervir ervîmes servir +SFX iF ervir ervîtes servir +SFX iF ervir ervirent servir +SFX iF ervir ervirai servir +SFX iF ervir erviras servir +SFX iF ervir ervira servir +SFX iF ervir ervirons servir +SFX iF ervir ervirez servir +SFX iF ervir erviront servir +SFX iF ervir ervirais servir +SFX iF ervir ervirait servir +SFX iF ervir ervirions servir +SFX iF ervir erviriez servir +SFX iF ervir erviraient servir +SFX iF ervir erve servir +SFX iF ervir erves servir +SFX iF ervir ervisse servir +SFX iF ervir ervisses servir +SFX iF ervir ervît servir +SFX iF ervir ervissions servir +SFX iF ervir ervissiez servir +SFX iF ervir ervissent servir +SFX iF ervir ers servir +SFX iF ervir ervons servir +SFX iF ervir ervez servir + +SFX iG N 42 +SFX iG êtir êtant vêtir +SFX iG êtir êtu vêtir +SFX iG êtir êtus vêtir +SFX iG êtir êtue vêtir +SFX iG êtir êtues vêtir +SFX iG êtir êts vêtir +SFX iG êtir êt vêtir +SFX iG êtir êtons vêtir +SFX iG êtir êtez vêtir +SFX iG êtir êtent vêtir +SFX iG êtir êtais vêtir +SFX iG êtir êtait vêtir +SFX iG êtir êtions vêtir +SFX iG êtir êtiez vêtir +SFX iG êtir êtaient vêtir +SFX iG êtir êtis vêtir +SFX iG êtir êtit vêtir +SFX iG êtir êtîmes vêtir +SFX iG êtir êtîtes vêtir +SFX iG êtir êtirent vêtir +SFX iG êtir êtirai vêtir +SFX iG êtir êtiras vêtir +SFX iG êtir êtira vêtir +SFX iG êtir êtirons vêtir +SFX iG êtir êtirez vêtir +SFX iG êtir êtiront vêtir +SFX iG êtir êtirais vêtir +SFX iG êtir êtirait vêtir +SFX iG êtir êtirions vêtir +SFX iG êtir êtiriez vêtir +SFX iG êtir êtiraient vêtir +SFX iG êtir ête vêtir +SFX iG êtir êtes vêtir +SFX iG êtir êtisse vêtir +SFX iG êtir êtisses vêtir +SFX iG êtir êtît vêtir +SFX iG êtir êtissions vêtir +SFX iG êtir êtissiez vêtir +SFX iG êtir êtissent vêtir +SFX iG êtir êts vêtir +SFX iG êtir êtons vêtir +SFX iG êtir êtez vêtir + +SFX iI N 39 +SFX iI ormir ormant dormir +SFX iI ormir ormi dormir +SFX iI ormir ors dormir +SFX iI ormir ort dormir +SFX iI ormir ormons dormir +SFX iI ormir ormez dormir +SFX iI ormir orment dormir +SFX iI ormir ormais dormir +SFX iI ormir ormait dormir +SFX iI ormir ormions dormir +SFX iI ormir ormiez dormir +SFX iI ormir ormaient dormir +SFX iI ormir ormis dormir +SFX iI ormir ormit dormir +SFX iI ormir ormîmes dormir +SFX iI ormir ormîtes dormir +SFX iI ormir ormirent dormir +SFX iI ormir ormirai dormir +SFX iI ormir ormiras dormir +SFX iI ormir ormira dormir +SFX iI ormir ormirons dormir +SFX iI ormir ormirez dormir +SFX iI ormir ormiront dormir +SFX iI ormir ormirais dormir +SFX iI ormir ormirait dormir +SFX iI ormir ormirions dormir +SFX iI ormir ormiriez dormir +SFX iI ormir ormiraient dormir +SFX iI ormir orme dormir +SFX iI ormir ormes dormir +SFX iI ormir ormisse dormir +SFX iI ormir ormisses dormir +SFX iI ormir ormît dormir +SFX iI ormir ormissions dormir +SFX iI ormir ormissiez dormir +SFX iI ormir ormissent dormir +SFX iI ormir ors dormir +SFX iI ormir ormons dormir +SFX iI ormir ormez dormir + +SFX iJ Y 43 +SFX iJ dormir dormir/n'q'd'l'm't's' dormir +SFX iJ dormir dormant/n'q'l'm't's' dormir +SFX iJ dormir dormi/L'D'Q' dormir +SFX iJ dormir dormis/D'Q' dormir +SFX iJ dormir dormie/L'D'Q' dormir +SFX iJ dormir dormies/D'Q' dormir +SFX iJ dormir dors/n'q'j'l'm't' dormir +SFX iJ dormir dort/n'q'l'm't's' dormir +SFX iJ dormir dormons/n'q'l't' dormir +SFX iJ dormir dormez/n'q'l'm' dormir +SFX iJ dormir dorment/n'q'l'm't's' dormir +SFX iJ dormir dormais/n'q'j'l'm't' dormir +SFX iJ dormir dormait/n'q'l'm't's' dormir +SFX iJ dormir dormions/n'q'l't' dormir +SFX iJ dormir dormiez/n'q'l'm' dormir +SFX iJ dormir dormaient/n'q'l'm't's' dormir +SFX iJ dormir dormis/n'q'j'l'm't' dormir +SFX iJ dormir dormit/n'q'l'm't's' dormir +SFX iJ dormir dormîmes/n'q'l't' dormir +SFX iJ dormir dormîtes/n'q'l'm' dormir +SFX iJ dormir dormirent/n'q'l'm't's' dormir +SFX iJ dormir dormirai/n'q'j'l'm't' dormir +SFX iJ dormir dormiras/n'q'l'm't' dormir +SFX iJ dormir dormira/n'q'l'm't's' dormir +SFX iJ dormir dormirons/n'q'l't' dormir +SFX iJ dormir dormirez/n'q'l'm' dormir +SFX iJ dormir dormiront/n'q'l'm't's' dormir +SFX iJ dormir dormirais/n'q'j'l'm't' dormir +SFX iJ dormir dormirait/n'q'l'm't's' dormir +SFX iJ dormir dormirions/n'q'l't' dormir +SFX iJ dormir dormiriez/n'q'l'm' dormir +SFX iJ dormir dormiraient/n'q'l'm't's' dormir +SFX iJ dormir dorme/n'q'j'l'm't's' dormir +SFX iJ dormir dormes/n'l'm't' dormir +SFX iJ dormir dormisse/n'q'j'l'm't' dormir +SFX iJ dormir dormisses/n'q'l'm't' dormir +SFX iJ dormir dormît/n'q'l'm't's' dormir +SFX iJ dormir dormissions/n'q'l't' dormir +SFX iJ dormir dormissiez/n'q'l'm' dormir +SFX iJ dormir dormissent/n'q'l'm't's' dormir +SFX iJ dormir dors/n'l'm't' dormir +SFX iJ dormir dormons/n'l' dormir +SFX iJ dormir dormez/n'l'm' dormir + +SFX iK Y 42 +SFX iK quérir quérir/n'q'd'l'm't's' quérir +SFX iK quérir quérant/n'q'l'm't's' quérir +SFX iK quérir quis/L'D'Q' quérir +SFX iK quérir quise/L'D'Q' quérir +SFX iK quérir quises/D'Q' quérir +SFX iK quérir quiers/n'q'j'l'm't' quérir +SFX iK quérir quiert/n'q'l'm't's' quérir +SFX iK quérir quérons/n'q'l't' quérir +SFX iK quérir quérez/n'q'l'm' quérir +SFX iK quérir quièrent/n'q'l'm't's' quérir +SFX iK quérir quérais/n'q'j'l'm't' quérir +SFX iK quérir quérait/n'q'l'm't's' quérir +SFX iK quérir quérions/n'q'l't' quérir +SFX iK quérir quériez/n'q'l'm' quérir +SFX iK quérir quéraient/n'q'l'm't's' quérir +SFX iK quérir quis/n'q'j'l'm't' quérir +SFX iK quérir quit/n'q'l'm't's' quérir +SFX iK quérir quîmes/n'q'l't' quérir +SFX iK quérir quîtes/n'q'l'm' quérir +SFX iK quérir quirent/n'q'l'm't's' quérir +SFX iK quérir querrai/n'q'j'l'm't' quérir +SFX iK quérir querras/n'q'l'm't' quérir +SFX iK quérir querra/n'q'l'm't's' quérir +SFX iK quérir querrons/n'q'l't' quérir +SFX iK quérir querrez/n'q'l'm' quérir +SFX iK quérir querront/n'q'l'm't's' quérir +SFX iK quérir querrais/n'q'j'l'm't' quérir +SFX iK quérir querrait/n'q'l'm't's' quérir +SFX iK quérir querrions/n'q'l't' quérir +SFX iK quérir querriez/n'q'l'm' quérir +SFX iK quérir querraient/n'q'l'm't's' quérir +SFX iK quérir quière/n'q'j'l'm't's' quérir +SFX iK quérir quières/n'l'm't' quérir +SFX iK quérir quisse/n'q'j'l'm't' quérir +SFX iK quérir quisses/n'q'l'm't' quérir +SFX iK quérir quît/n'q'l'm't's' quérir +SFX iK quérir quissions/n'q'l't' quérir +SFX iK quérir quissiez/n'q'l'm' quérir +SFX iK quérir quissent/n'q'l'm't's' quérir +SFX iK quérir quiers/n'l'm't' quérir +SFX iK quérir quérons/n'l' quérir +SFX iK quérir quérez/n'l'm' quérir + +SFX iM Y 42 +SFX iM quérir quérir/m't's' quérir +SFX iM quérir quérant/m't's' quérir +SFX iM quérir quis/L'D'Q' quérir +SFX iM quérir quise/L'D'Q' quérir +SFX iM quérir quises/D'Q' quérir +SFX iM quérir quiers/m't' quérir +SFX iM quérir quiert/s' quérir +SFX iM quérir quérons quérir +SFX iM quérir quérez quérir +SFX iM quérir quièrent/s' quérir +SFX iM quérir quérais/m't' quérir +SFX iM quérir quérait/s' quérir +SFX iM quérir quérions quérir +SFX iM quérir quériez quérir +SFX iM quérir quéraient/s' quérir +SFX iM quérir quis/m't' quérir +SFX iM quérir quit/s' quérir +SFX iM quérir quîmes quérir +SFX iM quérir quîtes quérir +SFX iM quérir quirent/s' quérir +SFX iM quérir querrai/m' quérir +SFX iM quérir querras/t' quérir +SFX iM quérir querra/s' quérir +SFX iM quérir querrons quérir +SFX iM quérir querrez quérir +SFX iM quérir querront/s' quérir +SFX iM quérir querrais/m't' quérir +SFX iM quérir querrait/s' quérir +SFX iM quérir querrions quérir +SFX iM quérir querriez quérir +SFX iM quérir querraient/s' quérir +SFX iM quérir quière/m's' quérir +SFX iM quérir quières/t' quérir +SFX iM quérir quisse/m' quérir +SFX iM quérir quisses/t' quérir +SFX iM quérir quît/s' quérir +SFX iM quérir quissions quérir +SFX iM quérir quissiez quérir +SFX iM quérir quissent/s' quérir +SFX iM quérir quiers/t' quérir +SFX iM quérir quérons quérir +SFX iM quérir quérez quérir + +SFX iN N 40 +SFX iN uir uyant fuir +SFX iN uir ui fuir +SFX iN uir uis fuir +SFX iN uir uie fuir +SFX iN uir uies fuir +SFX iN uir uis fuir +SFX iN uir uit fuir +SFX iN uir uyons fuir +SFX iN uir uyez fuir +SFX iN uir uient fuir +SFX iN uir uyais fuir +SFX iN uir uyait fuir +SFX iN uir uyions fuir +SFX iN uir uyiez fuir +SFX iN uir uyaient fuir +SFX iN uir uîmes fuir +SFX iN uir uîtes fuir +SFX iN uir uirent fuir +SFX iN uir uirai fuir +SFX iN uir uiras fuir +SFX iN uir uira fuir +SFX iN uir uirons fuir +SFX iN uir uirez fuir +SFX iN uir uiront fuir +SFX iN uir uirais fuir +SFX iN uir uirait fuir +SFX iN uir uirions fuir +SFX iN uir uiriez fuir +SFX iN uir uiraient fuir +SFX iN uir uie fuir +SFX iN uir uies fuir +SFX iN uir uisse fuir +SFX iN uir uisses fuir +SFX iN uir uît fuir +SFX iN uir uissions fuir +SFX iN uir uissiez fuir +SFX iN uir uissent fuir +SFX iN uir uis fuir +SFX iN uir uyons fuir +SFX iN uir uyez fuir + +SFX iO Y 41 +SFX iO fuir fuir/m't's' enfuir +SFX iO fuir fuyant/m't's' enfuir +SFX iO fuir fui/L'D'Q' enfuir +SFX iO fuir fuis/D'Q' enfuir +SFX iO fuir fuie/L'D'Q' enfuir +SFX iO fuir fuies/D'Q' enfuir +SFX iO fuir fuis/m't' enfuir +SFX iO fuir fuit/s' enfuir +SFX iO fuir fuyons enfuir +SFX iO fuir fuyez enfuir +SFX iO fuir fuient/s' enfuir +SFX iO fuir fuyais/m't' enfuir +SFX iO fuir fuyait/s' enfuir +SFX iO fuir fuyions enfuir +SFX iO fuir fuyiez enfuir +SFX iO fuir fuyaient/s' enfuir +SFX iO fuir fuîmes enfuir +SFX iO fuir fuîtes enfuir +SFX iO fuir fuirent/s' enfuir +SFX iO fuir fuirai/m' enfuir +SFX iO fuir fuiras/t' enfuir +SFX iO fuir fuira/s' enfuir +SFX iO fuir fuirons enfuir +SFX iO fuir fuirez enfuir +SFX iO fuir fuiront/s' enfuir +SFX iO fuir fuirais/m't' enfuir +SFX iO fuir fuirait/s' enfuir +SFX iO fuir fuirions enfuir +SFX iO fuir fuiriez enfuir +SFX iO fuir fuiraient/s' enfuir +SFX iO fuir fuie/m's' enfuir +SFX iO fuir fuies/t' enfuir +SFX iO fuir fuisse/m' enfuir +SFX iO fuir fuisses/t' enfuir +SFX iO fuir fuît/s' enfuir +SFX iO fuir fuissions enfuir +SFX iO fuir fuissiez enfuir +SFX iO fuir fuissent/s' enfuir +SFX iO fuir fuis/t' enfuir +SFX iO fuir fuyons enfuir +SFX iO fuir fuyez enfuir + +SFX iP N 42 +SFX iP ourir ourant mourir +SFX iP ourir ort mourir +SFX iP ourir orts mourir +SFX iP ourir orte mourir +SFX iP ourir ortes mourir +SFX iP ourir eurs mourir +SFX iP ourir eurt mourir +SFX iP ourir ourons mourir +SFX iP ourir ourez mourir +SFX iP ourir eurent mourir +SFX iP ourir ourais mourir +SFX iP ourir ourait mourir +SFX iP ourir ourions mourir +SFX iP ourir ouriez mourir +SFX iP ourir ouraient mourir +SFX iP ourir ourus mourir +SFX iP ourir ourut mourir +SFX iP ourir ourûmes mourir +SFX iP ourir ourûtes mourir +SFX iP ourir oururent mourir +SFX iP ourir ourrai mourir +SFX iP ourir ourras mourir +SFX iP ourir ourra mourir +SFX iP ourir ourrons mourir +SFX iP ourir ourrez mourir +SFX iP ourir ourront mourir +SFX iP ourir ourrais mourir +SFX iP ourir ourrait mourir +SFX iP ourir ourrions mourir +SFX iP ourir ourriez mourir +SFX iP ourir ourraient mourir +SFX iP ourir eure mourir +SFX iP ourir eures mourir +SFX iP ourir ourusse mourir +SFX iP ourir ourusses mourir +SFX iP ourir ourût mourir +SFX iP ourir ourussions mourir +SFX iP ourir ourussiez mourir +SFX iP ourir ourussent mourir +SFX iP ourir eurs mourir +SFX iP ourir ourons mourir +SFX iP ourir ourez mourir + +SFX iQ N 42 +SFX iQ ouillir ouillant bouillir +SFX iQ ouillir ouilli bouillir +SFX iQ ouillir ouillis bouillir +SFX iQ ouillir ouillie bouillir +SFX iQ ouillir ouillies bouillir +SFX iQ ouillir ous bouillir +SFX iQ ouillir out bouillir +SFX iQ ouillir ouillons bouillir +SFX iQ ouillir ouillez bouillir +SFX iQ ouillir ouillent bouillir +SFX iQ ouillir ouillais bouillir +SFX iQ ouillir ouillait bouillir +SFX iQ ouillir ouillions bouillir +SFX iQ ouillir ouilliez bouillir +SFX iQ ouillir ouillaient bouillir +SFX iQ ouillir ouillis bouillir +SFX iQ ouillir ouillit bouillir +SFX iQ ouillir ouillîmes bouillir +SFX iQ ouillir ouillîtes bouillir +SFX iQ ouillir ouillirent bouillir +SFX iQ ouillir ouillirai bouillir +SFX iQ ouillir ouilliras bouillir +SFX iQ ouillir ouillira bouillir +SFX iQ ouillir ouillirons bouillir +SFX iQ ouillir ouillirez bouillir +SFX iQ ouillir ouilliront bouillir +SFX iQ ouillir ouillirais bouillir +SFX iQ ouillir ouillirait bouillir +SFX iQ ouillir ouillirions bouillir +SFX iQ ouillir ouilliriez bouillir +SFX iQ ouillir ouilliraient bouillir +SFX iQ ouillir ouille bouillir +SFX iQ ouillir ouilles bouillir +SFX iQ ouillir ouillisse bouillir +SFX iQ ouillir ouillisses bouillir +SFX iQ ouillir ouillît bouillir +SFX iQ ouillir ouillissions bouillir +SFX iQ ouillir ouillissiez bouillir +SFX iQ ouillir ouillissent bouillir +SFX iQ ouillir ous bouillir +SFX iQ ouillir ouillons bouillir +SFX iQ ouillir ouillez bouillir + +SFX iR Y 41 +SFX iR ueillir ueillir/n'q'd'l'm't's' cueillir +SFX iR ueillir ueillant/n'q'l'm't's' cueillir +SFX iR ueillir ueilli/L'D'Q' cueillir +SFX iR ueillir ueillis/D'Q' cueillir +SFX iR ueillir ueillie/L'D'Q' cueillir +SFX iR ueillir ueillies/D'Q' cueillir +SFX iR ueillir ueille/n'q'j'l'm't's' cueillir +SFX iR ueillir ueilles/n'q'l'm' cueillir +SFX iR ueillir ueillons/n'q'l't' cueillir +SFX iR ueillir ueillez/n'q'l'm' cueillir +SFX iR ueillir ueillent/n'q'l'm't's' cueillir +SFX iR ueillir ueillais/n'q'j'l't' cueillir +SFX iR ueillir ueillait/n'q'l'm't's' cueillir +SFX iR ueillir ueillions/n'q'l't' cueillir +SFX iR ueillir ueilliez/n'q'l'm' cueillir +SFX iR ueillir ueillaient/n'q'l'm't's' cueillir +SFX iR ueillir ueillis/n'q'j'l't' cueillir +SFX iR ueillir ueillit/n'q'l'm't's' cueillir +SFX iR ueillir ueillîmes/n'q'l't' cueillir +SFX iR ueillir ueillîtes/n'q'l'm' cueillir +SFX iR ueillir ueillirent/n'q'l'm't's' cueillir +SFX iR ueillir ueillerai/n'q'j'l't' cueillir +SFX iR ueillir ueilleras/n'q'l'm' cueillir +SFX iR ueillir ueillera/n'q'l'm't's' cueillir +SFX iR ueillir ueillerons/n'q'l't' cueillir +SFX iR ueillir ueillerez/n'q'l'm' cueillir +SFX iR ueillir ueilleront/n'q'l'm't's' cueillir +SFX iR ueillir ueillerais/n'q'j'l't' cueillir +SFX iR ueillir ueillerait/n'q'l'm't's' cueillir +SFX iR ueillir ueillerions/n'q'l't' cueillir +SFX iR ueillir ueilleriez/n'q'l'm' cueillir +SFX iR ueillir ueilleraient/n'q'l'm't's' cueillir +SFX iR ueillir ueillisse/n'q'j'l't' cueillir +SFX iR ueillir ueillisses/n'q'l'm' cueillir +SFX iR ueillir ueillît/n'q'l'm't's' cueillir +SFX iR ueillir ueillissions/n'q'l't' cueillir +SFX iR ueillir ueillissiez/n'q'l'm' cueillir +SFX iR ueillir ueillissent/n'q'l'm't's' cueillir +SFX iR ueillir ueille/n'l'm' cueillir +SFX iR ueillir ueillons/n'l' cueillir +SFX iR ueillir ueillez/n'l'm' cueillir + +SFX iS N 37 +SFX iS aillir aillant aillir +SFX iS aillir ailli aillir +SFX iS aillir aille aillir +SFX iS aillir ailles aillir +SFX iS aillir aillons aillir +SFX iS aillir aillez aillir +SFX iS aillir aillent aillir +SFX iS aillir aillais aillir +SFX iS aillir aillait aillir +SFX iS aillir aillions aillir +SFX iS aillir ailliez aillir +SFX iS aillir aillaient aillir +SFX iS aillir aillis aillir +SFX iS aillir aillit aillir +SFX iS aillir aillîmes aillir +SFX iS aillir aillîtes aillir +SFX iS aillir aillirent aillir +SFX iS aillir aillirai aillir +SFX iS aillir ailliras aillir +SFX iS aillir aillira aillir +SFX iS aillir aillirons aillir +SFX iS aillir aillirez aillir +SFX iS aillir ailliront aillir +SFX iS aillir aillirais aillir +SFX iS aillir aillirait aillir +SFX iS aillir aillirions aillir +SFX iS aillir ailliriez aillir +SFX iS aillir ailliraient aillir +SFX iS aillir aillisse aillir +SFX iS aillir aillisses aillir +SFX iS aillir aillît aillir +SFX iS aillir aillissions aillir +SFX iS aillir aillissiez aillir +SFX iS aillir aillissent aillir +SFX iS aillir aille aillir +SFX iS aillir aillons aillir +SFX iS aillir aillez aillir + +SFX iT Y 41 +SFX iT saillir saillir/n'q'd'l'm't's' aillir +SFX iT saillir saillant/n'q'l'm't's' aillir +SFX iT saillir sailli/L'D'Q' aillir +SFX iT saillir saillis/D'Q' aillir +SFX iT saillir saillie/L'D'Q' aillir +SFX iT saillir saillies/D'Q' aillir +SFX iT saillir saille/n'q'j'l'm't's' aillir +SFX iT saillir sailles/n'q'l'm't' aillir +SFX iT saillir saillons/n'q'l't' aillir +SFX iT saillir saillez/n'q'l'm' aillir +SFX iT saillir saillent/n'q'l'm't's' aillir +SFX iT saillir saillais/n'q'j'l'm't' aillir +SFX iT saillir saillait/n'q'l'm't's' aillir +SFX iT saillir saillions/n'q'l't' aillir +SFX iT saillir sailliez/n'q'l'm' aillir +SFX iT saillir saillaient/n'q'l'm't's' aillir +SFX iT saillir saillis/n'q'j'l'm't' aillir +SFX iT saillir saillit/n'q'l'm't's' aillir +SFX iT saillir saillîmes/n'q'l't' aillir +SFX iT saillir saillîtes/n'q'l'm' aillir +SFX iT saillir saillirent/n'q'l'm't's' aillir +SFX iT saillir saillirai/n'q'j'l'm't' aillir +SFX iT saillir sailliras/n'q'l'm't' aillir +SFX iT saillir saillira/n'q'l'm't's' aillir +SFX iT saillir saillirons/n'q'l't' aillir +SFX iT saillir saillirez/n'q'l'm' aillir +SFX iT saillir sailliront/n'q'l'm't's' aillir +SFX iT saillir saillirais/n'q'j'l'm't' aillir +SFX iT saillir saillirait/n'q'l'm't's' aillir +SFX iT saillir saillirions/n'q'l't' aillir +SFX iT saillir sailliriez/n'q'l'm' aillir +SFX iT saillir sailliraient/n'q'l'm't's' aillir +SFX iT saillir saillisse/n'q'j'l'm't' aillir +SFX iT saillir saillisses/n'q'l'm't' aillir +SFX iT saillir saillît/n'q'l'm't's' aillir +SFX iT saillir saillissions/n'q'l't' aillir +SFX iT saillir saillissiez/n'q'l'm' aillir +SFX iT saillir saillissent/n'q'l'm't's' aillir +SFX iT saillir saille/n'l'm' aillir +SFX iT saillir saillons/n'l' aillir +SFX iT saillir saillez/n'l'm' aillir + +SFX iU N 36 +SFX iU aillir aillant faillir +SFX iU aillir ailli faillir +SFX iU aillir aux faillir +SFX iU aillir aut faillir +SFX iU aillir aillons faillir +SFX iU aillir aillez faillir +SFX iU aillir aillent faillir +SFX iU aillir aillais faillir +SFX iU aillir aillait faillir +SFX iU aillir aillions faillir +SFX iU aillir ailliez faillir +SFX iU aillir aillaient faillir +SFX iU aillir aillis faillir +SFX iU aillir aillit faillir +SFX iU aillir aillîmes faillir +SFX iU aillir aillîtes faillir +SFX iU aillir aillirent faillir +SFX iU aillir aillirai faillir +SFX iU aillir ailliras faillir +SFX iU aillir aillira faillir +SFX iU aillir aillirons faillir +SFX iU aillir aillirez faillir +SFX iU aillir ailliront faillir +SFX iU aillir aillirais faillir +SFX iU aillir aillirait faillir +SFX iU aillir aillirions faillir +SFX iU aillir ailliriez faillir +SFX iU aillir ailliraient faillir +SFX iU aillir aille faillir +SFX iU aillir ailles faillir +SFX iU aillir aillisse faillir +SFX iU aillir aillisses faillir +SFX iU aillir aillît faillir +SFX iU aillir aillissions faillir +SFX iU aillir aillissiez faillir +SFX iU aillir aillissent faillir + +SFX iV N 11 +SFX iV ésir isant gésir +SFX iV ésir is gésir +SFX iV ésir ît gésir +SFX iV ésir isons gésir +SFX iV ésir isez gésir +SFX iV ésir isent gésir +SFX iV ésir isais gésir +SFX iV ésir isait gésir +SFX iV ésir isions gésir +SFX iV ésir isiez gésir +SFX iV ésir isaient gésir + +SFX iW Y 54 +SFX iW uïr uïr/n'q'd'l'm't's' ouïr +SFX iW uïr yant/n'q'l'm't's' ouïr +SFX iW uïr uï/L'D'Q' ouïr +SFX iW uïr uïs/D'Q' ouïr +SFX iW uïr uïe/L'D'Q' ouïr +SFX iW uïr uïes/D'Q' ouïr +SFX iW uïr is/n'q'j'l'm't' ouïr +SFX iW uïr it/n'q'l'm't' ouïr +SFX iW uïr yons/n'q'l't' ouïr +SFX iW uïr yez/n'q'l'm' ouïr +SFX iW uïr ient/n'q'l'm't's' ouïr +SFX iW uïr yais/n'q'j'l'm't' ouïr +SFX iW uïr yait/n'q'l'm't' ouïr +SFX iW uïr yions/n'q'l't' ouïr +SFX iW uïr yiez/n'q'l'm' ouïr +SFX iW uïr yaient/n'q'l'm't's' ouïr +SFX iW uïr uïs/n'q'j'l'm't' ouïr +SFX iW uïr uït/n'q'l'm't' ouïr +SFX iW uïr uïmes/n'q'l't' ouïr +SFX iW uïr uïtes/n'q'l'm' ouïr +SFX iW uïr uïrent/n'q'l'm't's' ouïr +SFX iW uïr uïrai/n'q'j'l'm't' ouïr +SFX iW uïr rrai/n'q'j'l'm't' ouïr +SFX iW uïr uïras/n'q'l'm't' ouïr +SFX iW uïr rras/n'q'l'm't' ouïr +SFX iW uïr uïra/n'q'l'm't' ouïr +SFX iW uïr rra/n'q'l'm't' ouïr +SFX iW uïr uïrons/n'q'l't' ouïr +SFX iW uïr rrons/n'q'l't' ouïr +SFX iW uïr uïrez/n'q'l'm' ouïr +SFX iW uïr rrez/n'q'l'm' ouïr +SFX iW uïr uïront/n'q'l'm't's' ouïr +SFX iW uïr rront/n'q'l'm't's' ouïr +SFX iW uïr uïrais/n'q'j'l'm't' ouïr +SFX iW uïr rrais/n'q'j'l'm't' ouïr +SFX iW uïr uïrait/n'q'l'm't' ouïr +SFX iW uïr rrait/n'q'l'm't' ouïr +SFX iW uïr uïrions/n'q'l't' ouïr +SFX iW uïr rrions/n'q'l't' ouïr +SFX iW uïr uïriez/n'q'l'm' ouïr +SFX iW uïr rriez/n'q'l'm' ouïr +SFX iW uïr uïraient/n'q'l'm't's' ouïr +SFX iW uïr rraient/n'q'l'm't's' ouïr +SFX iW uïr ie/n'q'j'l'm't's' ouïr +SFX iW uïr ies/n'l'm't' ouïr +SFX iW uïr uïsse/n'q'j'l'm't' ouïr +SFX iW uïr uïsses/n'q'l'm't' ouïr +SFX iW uïr uït/n'q'l'm't' ouïr +SFX iW uïr uïssions/n'q'l't' ouïr +SFX iW uïr uïssiez/n'q'l'm' ouïr +SFX iW uïr uïssent/n'q'l'm't's' ouïr +SFX iW uïr is/n'l'm' ouïr +SFX iW uïr yons/n'l' ouïr +SFX iW uïr yez/n'l'm' ouïr + +SFX iX N 4 +SFX iX érir éru férir +SFX iX érir érus férir +SFX iX érir érue férir +SFX iX érir érues férir + +SFX iY Y 5 +SFX iY ssir ssir/n'q'd' issir +SFX iY ssir ssu/L'D'Q' issir +SFX iY ssir ssus/D'Q' issir +SFX iY ssir ssue/L'D'Q' issir +SFX iY ssir ssues/D'Q' issir + +SFX pA N 42 +SFX pA ouvoir ouvant pouvoir +SFX pA ouvoir u pouvoir +SFX pA ouvoir eux pouvoir +SFX pA ouvoir uis pouvoir +SFX pA ouvoir eut pouvoir +SFX pA ouvoir ouvons pouvoir +SFX pA ouvoir ouvez pouvoir +SFX pA ouvoir euvent pouvoir +SFX pA ouvoir ouvais pouvoir +SFX pA ouvoir ouvait pouvoir +SFX pA ouvoir ouvions pouvoir +SFX pA ouvoir ouviez pouvoir +SFX pA ouvoir ouvaient pouvoir +SFX pA ouvoir us pouvoir +SFX pA ouvoir ut pouvoir +SFX pA ouvoir ûmes pouvoir +SFX pA ouvoir ûtes pouvoir +SFX pA ouvoir urent pouvoir +SFX pA ouvoir ourrai pouvoir +SFX pA ouvoir ourras pouvoir +SFX pA ouvoir ourra pouvoir +SFX pA ouvoir ourrons pouvoir +SFX pA ouvoir ourrez pouvoir +SFX pA ouvoir ourront pouvoir +SFX pA ouvoir ourrais pouvoir +SFX pA ouvoir ourrait pouvoir +SFX pA ouvoir ourrions pouvoir +SFX pA ouvoir ourriez pouvoir +SFX pA ouvoir ourraient pouvoir +SFX pA ouvoir uisse pouvoir +SFX pA ouvoir uissé pouvoir +SFX pA ouvoir uisses pouvoir +SFX pA ouvoir uissions pouvoir +SFX pA ouvoir uissiez pouvoir +SFX pA ouvoir uissent pouvoir +SFX pA ouvoir usse pouvoir +SFX pA ouvoir ussé pouvoir +SFX pA ouvoir usses pouvoir +SFX pA ouvoir ût pouvoir +SFX pA ouvoir ussions pouvoir +SFX pA ouvoir ussiez pouvoir +SFX pA ouvoir ussent pouvoir + +SFX pB N 47 +SFX pB ouloir oulant vouloir +SFX pB ouloir oulu vouloir +SFX pB ouloir oulus vouloir +SFX pB ouloir oulue vouloir +SFX pB ouloir oulues vouloir +SFX pB ouloir eux vouloir +SFX pB ouloir eut vouloir +SFX pB ouloir oulons vouloir +SFX pB ouloir oulez vouloir +SFX pB ouloir eulent vouloir +SFX pB ouloir oulais vouloir +SFX pB ouloir oulait vouloir +SFX pB ouloir oulions vouloir +SFX pB ouloir ouliez vouloir +SFX pB ouloir oulaient vouloir +SFX pB ouloir oulus vouloir +SFX pB ouloir oulut vouloir +SFX pB ouloir oulûmes vouloir +SFX pB ouloir oulûtes vouloir +SFX pB ouloir oulurent vouloir +SFX pB ouloir oudrai vouloir +SFX pB ouloir oudras vouloir +SFX pB ouloir oudra vouloir +SFX pB ouloir oudrons vouloir +SFX pB ouloir oudrez vouloir +SFX pB ouloir oudront vouloir +SFX pB ouloir oudrais vouloir +SFX pB ouloir oudrait vouloir +SFX pB ouloir oudrions vouloir +SFX pB ouloir oudriez vouloir +SFX pB ouloir oudraient vouloir +SFX pB ouloir euille vouloir +SFX pB ouloir euillé vouloir +SFX pB ouloir euilles vouloir +SFX pB ouloir euillent vouloir +SFX pB ouloir oulusse vouloir +SFX pB ouloir oulusses vouloir +SFX pB ouloir oulût vouloir +SFX pB ouloir oulussions vouloir +SFX pB ouloir oulussiez vouloir +SFX pB ouloir oulussent vouloir +SFX pB ouloir euille vouloir +SFX pB ouloir eux vouloir +SFX pB ouloir euillons vouloir +SFX pB ouloir oulons vouloir +SFX pB ouloir euillez vouloir +SFX pB ouloir oulez vouloir + +SFX pC N 43 +SFX pC evoir evant devoir +SFX pC evoir û redevoir +SFX pC evoir us devoir +SFX pC evoir ue devoir +SFX pC evoir ues devoir +SFX pC evoir ois devoir +SFX pC evoir oit devoir +SFX pC evoir evons devoir +SFX pC evoir evez devoir +SFX pC evoir oivent devoir +SFX pC evoir evais devoir +SFX pC evoir evait devoir +SFX pC evoir evions devoir +SFX pC evoir eviez devoir +SFX pC evoir evaient devoir +SFX pC evoir us devoir +SFX pC evoir ut devoir +SFX pC evoir ûmes devoir +SFX pC evoir ûtes devoir +SFX pC evoir urent devoir +SFX pC evoir evrai devoir +SFX pC evoir evras devoir +SFX pC evoir evra devoir +SFX pC evoir evrons devoir +SFX pC evoir evrez devoir +SFX pC evoir evront devoir +SFX pC evoir evrais devoir +SFX pC evoir evrait devoir +SFX pC evoir evrions devoir +SFX pC evoir evriez devoir +SFX pC evoir evraient devoir +SFX pC evoir oive devoir +SFX pC evoir oives devoir +SFX pC evoir usse devoir +SFX pC evoir ussé devoir +SFX pC evoir usses devoir +SFX pC evoir ût devoir +SFX pC evoir ussions devoir +SFX pC evoir ussiez devoir +SFX pC evoir ussent devoir +SFX pC evoir ois devoir +SFX pC evoir evons devoir +SFX pC evoir evez devoir + +SFX pD N 1 +SFX pD evoir û devoir + +SFX pE N 45 +SFX pE avoir achant savoir +SFX pE avoir u savoir +SFX pE avoir us savoir +SFX pE avoir ue savoir +SFX pE avoir ues savoir +SFX pE avoir ais savoir +SFX pE avoir ait savoir +SFX pE avoir avons savoir +SFX pE avoir avez savoir +SFX pE avoir avent savoir +SFX pE avoir avais savoir +SFX pE avoir avait savoir +SFX pE avoir avions savoir +SFX pE avoir aviez savoir +SFX pE avoir avaient savoir +SFX pE avoir us savoir +SFX pE avoir ut savoir +SFX pE avoir ûmes savoir +SFX pE avoir ûtes savoir +SFX pE avoir urent savoir +SFX pE avoir aurai savoir +SFX pE avoir auras savoir +SFX pE avoir aura savoir +SFX pE avoir aurons savoir +SFX pE avoir aurez savoir +SFX pE avoir auront savoir +SFX pE avoir aurais savoir +SFX pE avoir aurait savoir +SFX pE avoir aurions savoir +SFX pE avoir auriez savoir +SFX pE avoir auraient savoir +SFX pE avoir ache savoir +SFX pE avoir aches savoir +SFX pE avoir achions savoir +SFX pE avoir achiez savoir +SFX pE avoir achent savoir +SFX pE avoir usse savoir +SFX pE avoir usses savoir +SFX pE avoir ût savoir +SFX pE avoir ussions savoir +SFX pE avoir ussiez savoir +SFX pE avoir ussent savoir +SFX pE avoir ache savoir +SFX pE avoir achons savoir +SFX pE avoir achez savoir + +SFX pF Y 54 +SFX pF oir oir/n'q'd'l'm't's' voir +SFX pF oir oyant/n'q'l'm't's' voir +SFX pF oir u/L'D'Q' voir +SFX pF oir us/D'Q' voir +SFX pF oir ue/L'D'Q' voir +SFX pF oir ues/D'Q' voir +SFX pF oir ois/n'q'j'l'm't' voir +SFX pF oir oit/n'q'l'm't's' voir +SFX pF oir oyons/n'q'l't' voir +SFX pF oir oyez/n'q'l'm' voir +SFX pF oir oient/n'q'l'm't's' voir +SFX pF oir oyais/n'q'j'l'm't' voir +SFX pF oir oyait/n'q'l'm't's' voir +SFX pF oir oyions/n'q'l't' voir +SFX pF oir oyiez/n'q'l'm' voir +SFX pF oir oyaient/n'q'l'm't's' voir +SFX pF oir is/n'q'j'l'm't' voir +SFX pF oir it/n'q'l'm't's' voir +SFX pF oir îmes/n'q'l't' voir +SFX pF oir îtes/n'q'l'm' voir +SFX pF oir irent/n'q'l'm't's' voir +SFX pF oir errai/n'q'j'l'm't' [^é]voir +SFX pF oir oirai évoir +SFX pF oir erras/n'q'l'm't' [^é]voir +SFX pF oir oiras évoir +SFX pF oir erra/n'q'l'm't's' [^é]voir +SFX pF oir oira évoir +SFX pF oir errons/n'q'l't' [^é]voir +SFX pF oir oirons évoir +SFX pF oir errez/n'q'l'm' [^é]voir +SFX pF oir oirez évoir +SFX pF oir erront/n'q'l'm't's' [^é]voir +SFX pF oir oiront évoir +SFX pF oir errais/n'q'j'l'm't' [^é]voir +SFX pF oir oirais évoir +SFX pF oir errait/n'q'l'm't's' [^é]voir +SFX pF oir oirait évoir +SFX pF oir errions/n'q'l't' [^é]voir +SFX pF oir oirions évoir +SFX pF oir erriez/n'q'l'm' [^é]voir +SFX pF oir oiriez évoir +SFX pF oir erraient/n'q'l'm't's' [^é]voir +SFX pF oir oiraient évoir +SFX pF oir oie/n'q'j'l'm't's' voir +SFX pF oir oies/n'l'm't' voir +SFX pF oir isse/n'q'j'l'm't' voir +SFX pF oir isses/n'q'l'm't' voir +SFX pF oir ît/n'q'l'm't's' voir +SFX pF oir issions/n'q'l't' voir +SFX pF oir issiez/n'q'l'm' voir +SFX pF oir issent/n'q'l'm't's' voir +SFX pF oir ois/n'l'm' voir +SFX pF oir oyons/n'l' voir +SFX pF oir oyez/n'l'm' voir + +SFX pG Y 11 +SFX pG oir errai voir +SFX pG oir erras voir +SFX pG oir erra voir +SFX pG oir errons voir +SFX pG oir errez voir +SFX pG oir erront voir +SFX pG oir errais voir +SFX pG oir errait voir +SFX pG oir errions voir +SFX pG oir erriez voir +SFX pG oir erraient voir + +SFX pH Y 43 +SFX pH ouvoir ouvoir/n'q'd'l'm't's' mouvoir +SFX pH ouvoir ouvant/n'q'l'm't's' mouvoir +SFX pH ouvoir u/L'D'Q' .mouvoir +SFX pH ouvoir us/D'Q' mouvoir +SFX pH ouvoir ue/L'D'Q' mouvoir +SFX pH ouvoir ues/D'Q' mouvoir +SFX pH ouvoir eus/n'q'j'l'm't' mouvoir +SFX pH ouvoir eut/n'q'l'm't's' mouvoir +SFX pH ouvoir ouvons/n'q'l't' mouvoir +SFX pH ouvoir ouvez/n'q'l'm' mouvoir +SFX pH ouvoir euvent/n'q'l'm't's' mouvoir +SFX pH ouvoir ouvais/n'q'j'l'm't' mouvoir +SFX pH ouvoir ouvait/n'q'l'm't's' mouvoir +SFX pH ouvoir ouvions/n'q'l't' mouvoir +SFX pH ouvoir ouviez/n'q'l'm' mouvoir +SFX pH ouvoir ouvaient/n'q'l'm't's' mouvoir +SFX pH ouvoir us/n'q'j'l'm't' mouvoir +SFX pH ouvoir ut/n'q'l'm't's' mouvoir +SFX pH ouvoir ûmes/n'q'l't' mouvoir +SFX pH ouvoir ûtes/n'q'l'm' mouvoir +SFX pH ouvoir urent/n'q'l'm't's' mouvoir +SFX pH ouvoir ouvrai/n'q'j'l'm't' mouvoir +SFX pH ouvoir ouvras/n'q'l'm't' mouvoir +SFX pH ouvoir ouvra/n'q'l'm't's' mouvoir +SFX pH ouvoir ouvrons/n'q'l't' mouvoir +SFX pH ouvoir ouvrez/n'q'l'm' mouvoir +SFX pH ouvoir ouvront/n'q'l'm't's' mouvoir +SFX pH ouvoir ouvrais/n'q'j'l'm't' mouvoir +SFX pH ouvoir ouvrait/n'q'l'm't's' mouvoir +SFX pH ouvoir ouvrions/n'q'l't' mouvoir +SFX pH ouvoir ouvriez/n'q'l'm' mouvoir +SFX pH ouvoir ouvraient/n'q'l'm't's' mouvoir +SFX pH ouvoir euve/n'q'j'l'm't's' mouvoir +SFX pH ouvoir euves/n'l'm't' mouvoir +SFX pH ouvoir usse/n'q'j'l'm't' mouvoir +SFX pH ouvoir usses/n'q'l'm't' mouvoir +SFX pH ouvoir ût/n'q'l'm't's' mouvoir +SFX pH ouvoir ussions/n'q'l't' mouvoir +SFX pH ouvoir ussiez/n'q'l'm' mouvoir +SFX pH ouvoir ussent/n'q'l'm't's' mouvoir +SFX pH ouvoir eus/n'l'm' mouvoir +SFX pH ouvoir ouvons/n'l' mouvoir +SFX pH ouvoir ouvez/n'l'm' mouvoir + +SFX pI N 1 +SFX pI ouvoir û/q' mouvoir + +SFX pJ N 42 +SFX pJ ourvoir ourvoyant pourvoir +SFX pJ ourvoir ourvu pourvoir +SFX pJ ourvoir ourvus pourvoir +SFX pJ ourvoir ourvue pourvoir +SFX pJ ourvoir ourvues pourvoir +SFX pJ ourvoir ourvois pourvoir +SFX pJ ourvoir ourvoit pourvoir +SFX pJ ourvoir ourvoyons pourvoir +SFX pJ ourvoir ourvoyez pourvoir +SFX pJ ourvoir ourvoient pourvoir +SFX pJ ourvoir ourvoyais pourvoir +SFX pJ ourvoir ourvoyait pourvoir +SFX pJ ourvoir ourvoyions pourvoir +SFX pJ ourvoir ourvoyiez pourvoir +SFX pJ ourvoir ourvoyaient pourvoir +SFX pJ ourvoir ourvus pourvoir +SFX pJ ourvoir ourvut pourvoir +SFX pJ ourvoir ourvûmes pourvoir +SFX pJ ourvoir ourvûtes pourvoir +SFX pJ ourvoir ourvurent pourvoir +SFX pJ ourvoir ourvoirai pourvoir +SFX pJ ourvoir ourvoiras pourvoir +SFX pJ ourvoir ourvoira pourvoir +SFX pJ ourvoir ourvoirons pourvoir +SFX pJ ourvoir ourvoirez pourvoir +SFX pJ ourvoir ourvoiront pourvoir +SFX pJ ourvoir ourvoirais pourvoir +SFX pJ ourvoir ourvoirait pourvoir +SFX pJ ourvoir ourvoirions pourvoir +SFX pJ ourvoir ourvoiriez pourvoir +SFX pJ ourvoir ourvoiraient pourvoir +SFX pJ ourvoir ourvoie pourvoir +SFX pJ ourvoir ourvoies pourvoir +SFX pJ ourvoir ourvusse pourvoir +SFX pJ ourvoir ourvusses pourvoir +SFX pJ ourvoir ourvût pourvoir +SFX pJ ourvoir ourvussions pourvoir +SFX pJ ourvoir ourvussiez pourvoir +SFX pJ ourvoir ourvussent pourvoir +SFX pJ ourvoir ourvois pourvoir +SFX pJ ourvoir ourvoyons pourvoir +SFX pJ ourvoir ourvoyez pourvoir + +SFX pK Y 43 +SFX pK cevoir cevoir/n'q'd'l'm't's' cevoir +SFX pK cevoir cevant/n'q'l'm't's' cevoir +SFX pK cevoir çu/L'D'Q' cevoir +SFX pK cevoir çus/D'Q' cevoir +SFX pK cevoir çue/L'D'Q' cevoir +SFX pK cevoir çues/D'Q' cevoir +SFX pK cevoir çois/n'q'j'l'm't' cevoir +SFX pK cevoir çoit/n'q'l'm't's' cevoir +SFX pK cevoir cevons/n'q'l't' cevoir +SFX pK cevoir cevez/n'q'l'm' cevoir +SFX pK cevoir çoivent/n'q'l'm't's' cevoir +SFX pK cevoir cevais/n'q'j'l'm't' cevoir +SFX pK cevoir cevait/n'q'l'm't's' cevoir +SFX pK cevoir cevions/n'q'l't' cevoir +SFX pK cevoir ceviez/n'q'l'm' cevoir +SFX pK cevoir cevaient/n'q'l'm't's' cevoir +SFX pK cevoir çus/n'q'j'l'm't' cevoir +SFX pK cevoir çut/n'q'l'm't's' cevoir +SFX pK cevoir çûmes/n'q'l't' cevoir +SFX pK cevoir çûtes/n'q'l'm' cevoir +SFX pK cevoir çurent/n'q'l'm't's' cevoir +SFX pK cevoir cevrai/n'q'j'l'm't' cevoir +SFX pK cevoir cevras/n'q'l'm't' cevoir +SFX pK cevoir cevra/n'q'l'm't's' cevoir +SFX pK cevoir cevrons/n'q'l't' cevoir +SFX pK cevoir cevrez/n'q'l'm' cevoir +SFX pK cevoir cevront/n'q'l'm't's' cevoir +SFX pK cevoir cevrais/n'q'j'l'm't' cevoir +SFX pK cevoir cevrait/n'q'l'm't's' cevoir +SFX pK cevoir cevrions/n'q'l't' cevoir +SFX pK cevoir cevriez/n'q'l'm' cevoir +SFX pK cevoir cevraient/n'q'l'm't's' cevoir +SFX pK cevoir çoive/n'q'j'l'm't's' cevoir +SFX pK cevoir çoives/n'l'm't' cevoir +SFX pK cevoir çusse/n'q'j'l'm't' cevoir +SFX pK cevoir çusses/n'q'l'm't' cevoir +SFX pK cevoir çût/n'q'l'm't's' cevoir +SFX pK cevoir çussions/n'q'l't' cevoir +SFX pK cevoir çussiez/n'q'l'm' cevoir +SFX pK cevoir çussent/n'q'l'm't's' cevoir +SFX pK cevoir çois/n'l'm't' cevoir +SFX pK cevoir cevons/n'l' cevoir +SFX pK cevoir cevez/n'l'm' cevoir + +SFX pM N 40 +SFX pM aloir alant valoir +SFX pM aloir alu valoir +SFX pM aloir aux valoir +SFX pM aloir aut valoir +SFX pM aloir alons valoir +SFX pM aloir alez valoir +SFX pM aloir alent valoir +SFX pM aloir alais valoir +SFX pM aloir alait valoir +SFX pM aloir alions valoir +SFX pM aloir aliez valoir +SFX pM aloir alaient valoir +SFX pM aloir alus valoir +SFX pM aloir alut valoir +SFX pM aloir alûmes valoir +SFX pM aloir alûtes valoir +SFX pM aloir alurent valoir +SFX pM aloir audrai valoir +SFX pM aloir audras valoir +SFX pM aloir audra valoir +SFX pM aloir audrons valoir +SFX pM aloir audrez valoir +SFX pM aloir audront valoir +SFX pM aloir audrais valoir +SFX pM aloir audrait valoir +SFX pM aloir audrions valoir +SFX pM aloir audriez valoir +SFX pM aloir audraient valoir +SFX pM aloir aille valoir +SFX pM aloir ailles valoir +SFX pM aloir aillent valoir +SFX pM aloir alusse valoir +SFX pM aloir alusses valoir +SFX pM aloir alût valoir +SFX pM aloir alussions valoir +SFX pM aloir alussiez valoir +SFX pM aloir alussent valoir +SFX pM aloir aux valoir +SFX pM aloir alons valoir +SFX pM aloir alez valoir + +SFX pN Y 43 +SFX pN valoir valoir/n'q'd'm't's' valoir +SFX pN valoir valant/n'q'm't's' valoir +SFX pN valoir vaux/n'j'm't' valoir +SFX pN valoir vaut/n'm't's' valoir +SFX pN valoir valons/n't' valoir +SFX pN valoir valez/n'm' valoir +SFX pN valoir valent/n'm't's' quivaloir +SFX pN valoir valent révaloir +SFX pN valoir valais/n'j'm't' valoir +SFX pN valoir valait/n'm't's' valoir +SFX pN valoir valions/n't' valoir +SFX pN valoir valiez/n'm' valoir +SFX pN valoir valaient/n'm't's' valoir +SFX pN valoir valus/n'j'm't' valoir +SFX pN valoir valut/n'm't's' valoir +SFX pN valoir valûmes/n't' valoir +SFX pN valoir valûtes/n'm' valoir +SFX pN valoir valurent/n'm't's' valoir +SFX pN valoir vaudrai/n'j'm't' valoir +SFX pN valoir vaudras/n'm't' valoir +SFX pN valoir vaudra/n'm't's' valoir +SFX pN valoir vaudrons/n't' valoir +SFX pN valoir vaudrez/n'm' valoir +SFX pN valoir vaudront/n'm't's' valoir +SFX pN valoir vaudrais/n'j'm't' valoir +SFX pN valoir vaudrait/n'm't's' valoir +SFX pN valoir vaudrions/n't' valoir +SFX pN valoir vaudriez/n'm' valoir +SFX pN valoir vaudraient/n'm't's' valoir +SFX pN valoir vaille/n'j'm't's' quivaloir +SFX pN valoir vale révaloir +SFX pN valoir vailles/n'm't' quivaloir +SFX pN valoir vales révaloir +SFX pN valoir vaillent/n'm't's' quivaloir +SFX pN valoir valusse/n'j'm't' valoir +SFX pN valoir valusses/n'm't' valoir +SFX pN valoir valût/n'm't's' valoir +SFX pN valoir valussions/n't' valoir +SFX pN valoir valussiez/n'm' valoir +SFX pN valoir valussent/n'm't's' valoir +SFX pN valoir vaux valoir +SFX pN valoir valons valoir +SFX pN valoir valez valoir + +SFX pO N 16 +SFX pO valoir valant revaloir +SFX pO valoir valu revaloir +SFX pO valoir valus revaloir +SFX pO valoir value revaloir +SFX pO valoir values revaloir +SFX pO valoir vaudrai revaloir +SFX pO valoir vaudras revaloir +SFX pO valoir vaudra revaloir +SFX pO valoir vaudrons revaloir +SFX pO valoir vaudrez revaloir +SFX pO valoir vaudront revaloir +SFX pO valoir vaudrais revaloir +SFX pO valoir vaudrait revaloir +SFX pO valoir vaudrions revaloir +SFX pO valoir vaudriez revaloir +SFX pO valoir vaudraient revaloir + +SFX pP N 1 +SFX pP paroir parant comparoir + +SFX pQ N 1 +SFX pQ haloir haut chaloir + +SFX pR Y 2 +SFX pR pparoir pparoir/n'q'd' apparoir +SFX pR pparoir ppert/n'q' apparoir + +SFX pS Y 69 +SFX pS oir oir/n'q'd'l'm't's' oir +SFX pS sseoir sseyant/n'q'l'm't's' seoir +SFX pS sseoir ssoyant/n'q'l'm't's' seoir +SFX pS sseoir ssis/L'D'Q' seoir +SFX pS sseoir ssise/L'D'Q' seoir +SFX pS sseoir ssises/D'Q' seoir +SFX pS sseoir ssieds/n'q'j'l'm't' seoir +SFX pS sseoir ssied/n'q'l'm't's' seoir +SFX pS sseoir sseyons/n'q'l't' seoir +SFX pS sseoir sseyez/n'q'l'm' seoir +SFX pS sseoir sseyent/n'q'l'm't's' seoir +SFX pS sseoir ssois/n'q'j'l'm't' seoir +SFX pS sseoir ssoit/n'q'l'm't's' seoir +SFX pS sseoir ssoyons/n'q'l't' seoir +SFX pS sseoir ssoyez/n'q'l'm' seoir +SFX pS sseoir ssoient/n'q'l'm't's' seoir +SFX pS sseoir sseyais/n'q'j'l'm't' seoir +SFX pS sseoir sseyait/n'q'l'm't's' seoir +SFX pS sseoir sseyions/n'q'l't' seoir +SFX pS sseoir sseyiez/n'q'l'm' seoir +SFX pS sseoir sseyaient/n'q'l'm't's' seoir +SFX pS sseoir ssoyais/n'q'j'l'm't' seoir +SFX pS sseoir ssoyait/n'q'l'm't's' seoir +SFX pS sseoir ssoyions/n'q'l't' seoir +SFX pS sseoir ssoyiez/n'q'l'm' seoir +SFX pS sseoir ssoyaient/n'q'l'm't's' seoir +SFX pS sseoir ssis/n'q'j'l'm't' seoir +SFX pS sseoir ssit/n'q'l'm't's' seoir +SFX pS sseoir ssîmes/n'q'l't' seoir +SFX pS sseoir ssîtes/n'q'l'm' seoir +SFX pS sseoir ssirent/n'q'l'm't's' seoir +SFX pS sseoir ssiérai/n'q'j'l'm't' seoir +SFX pS sseoir ssiéras/n'q'l'm't' seoir +SFX pS sseoir ssiéra/n'q'l'm't's' seoir +SFX pS sseoir ssiérons/n'q'l't' seoir +SFX pS sseoir ssiérez/n'q'l'm' seoir +SFX pS sseoir ssiéront/n'q'l'm't's' seoir +SFX pS sseoir ssoirai/n'q'j'l'm't' seoir +SFX pS sseoir ssoiras/n'q'l'm't' seoir +SFX pS sseoir ssoira/n'q'l'm't's' seoir +SFX pS sseoir ssoirons/n'q'l't' seoir +SFX pS sseoir ssoirez/n'q'l'm' seoir +SFX pS sseoir ssoiront/n'q'l'm't's' seoir +SFX pS sseoir ssiérais/n'q'j'l'm't' seoir +SFX pS sseoir ssiérait/n'q'l'm't's' seoir +SFX pS sseoir ssiérions/n'q'l't' seoir +SFX pS sseoir ssiériez/n'q'l'm' seoir +SFX pS sseoir ssiéraient/n'q'l'm't's' seoir +SFX pS sseoir ssoirais/n'q'j'l'm't' seoir +SFX pS sseoir ssoirait/n'q'l'm't's' seoir +SFX pS sseoir ssoirions/n'q'l't' seoir +SFX pS sseoir ssoiriez/n'q'l'm' seoir +SFX pS sseoir ssoiraient/n'q'l'm't's' seoir +SFX pS sseoir sseye/n'q'j'l'm't's' seoir +SFX pS sseoir sseyes/n'l'm't' seoir +SFX pS sseoir ssoie/n'q'j'l'm't's' seoir +SFX pS sseoir ssoies/n'l'm't' seoir +SFX pS sseoir ssisse/n'q'j'l'm't' seoir +SFX pS sseoir ssisses/n'q'l'm't' seoir +SFX pS sseoir ssît/n'q'l'm't's' seoir +SFX pS sseoir ssissions/n'q'l't' seoir +SFX pS sseoir ssissiez/n'q'l'm' seoir +SFX pS sseoir ssissent/n'q'l'm't's' seoir +SFX pS sseoir ssieds/n'l'm't' seoir +SFX pS sseoir sseyons/n'l' seoir +SFX pS sseoir sseyez/n'l'm' seoir +SFX pS sseoir ssois/n'l'm't' seoir +SFX pS sseoir ssoyons/n'l' seoir +SFX pS sseoir ssoyez/n'l'm' seoir + +SFX pT N 41 +SFX pT urseoir ursoyant seoir +SFX pT urseoir ursis seoir +SFX pT urseoir ursise seoir +SFX pT urseoir ursises seoir +SFX pT urseoir ursois seoir +SFX pT urseoir ursoit seoir +SFX pT urseoir ursoyons seoir +SFX pT urseoir ursoyez seoir +SFX pT urseoir ursoient seoir +SFX pT urseoir ursoyais seoir +SFX pT urseoir ursoyait seoir +SFX pT urseoir ursoyions seoir +SFX pT urseoir ursoyiez seoir +SFX pT urseoir ursoyaient seoir +SFX pT urseoir ursis seoir +SFX pT urseoir ursit seoir +SFX pT urseoir ursîmes seoir +SFX pT urseoir ursîtes seoir +SFX pT urseoir ursirent seoir +SFX pT urseoir urseoirai seoir +SFX pT urseoir urseoiras seoir +SFX pT urseoir urseoira seoir +SFX pT urseoir urseoirons seoir +SFX pT urseoir urseoirez seoir +SFX pT urseoir urseoiront seoir +SFX pT urseoir urseoirais seoir +SFX pT urseoir urseoirait seoir +SFX pT urseoir urseoirions seoir +SFX pT urseoir urseoiriez seoir +SFX pT urseoir urseoiraient seoir +SFX pT urseoir ursoie seoir +SFX pT urseoir ursoies seoir +SFX pT urseoir ursisse seoir +SFX pT urseoir ursisses seoir +SFX pT urseoir ursît seoir +SFX pT urseoir ursissions seoir +SFX pT urseoir ursissiez seoir +SFX pT urseoir ursissent seoir +SFX pT urseoir ursois seoir +SFX pT urseoir ursoyons seoir +SFX pT urseoir ursoyez seoir + +SFX pU N 4 +SFX pU eoir éant seoir +SFX pU eoir is seoir +SFX pU eoir ise seoir +SFX pU eoir ises seoir + +SFX pV N 13 +SFX pV eoir éant seoir +SFX pV eoir eyant seoir +SFX pV eoir is seoir +SFX pV eoir ied seoir +SFX pV eoir iéent seoir +SFX pV eoir eyait seoir +SFX pV eoir eyaient seoir +SFX pV eoir iéra seoir +SFX pV eoir iéront seoir +SFX pV eoir iérait seoir +SFX pV eoir iéraient seoir +SFX pV eoir iée seoir +SFX pV eoir iéent seoir + +SFX pW N 11 +SFX pW sseoir sséant seoir +SFX pW sseoir ssied seoir +SFX pW sseoir ssiéent seoir +SFX pW sseoir sseyait seoir +SFX pW sseoir sseyaient seoir +SFX pW sseoir ssiéra seoir +SFX pW sseoir ssiéront seoir +SFX pW sseoir ssiérait seoir +SFX pW sseoir ssiéraient seoir +SFX pW sseoir ssiée seoir +SFX pW sseoir ssiéent seoir + +SFX pX N 52 +SFX pX hoir hu choir +SFX pX hoir hus choir +SFX pX hoir hue choir +SFX pX hoir hues choir +SFX pX hoir hois choir +SFX pX hoir hoit choir +SFX pX hoir hoyons choir +SFX pX hoir hoyez choir +SFX pX hoir hoient choir +SFX pX hoir hoyais déchoir +SFX pX hoir hoyait déchoir +SFX pX hoir hoyions déchoir +SFX pX hoir hoyiez déchoir +SFX pX hoir hoyaient déchoir +SFX pX hoir hus choir +SFX pX hoir hut choir +SFX pX hoir hûmes choir +SFX pX hoir hûtes choir +SFX pX hoir hurent choir +SFX pX hoir hoirai choir +SFX pX hoir herrai choir +SFX pX hoir hoiras choir +SFX pX hoir herras choir +SFX pX hoir hoira choir +SFX pX hoir herra choir +SFX pX hoir hoirons choir +SFX pX hoir herrons choir +SFX pX hoir hoirez choir +SFX pX hoir herrez choir +SFX pX hoir hoiront choir +SFX pX hoir herront choir +SFX pX hoir hoirais choir +SFX pX hoir herrais choir +SFX pX hoir hoirait choir +SFX pX hoir herrait choir +SFX pX hoir hoirions choir +SFX pX hoir herrions choir +SFX pX hoir hoiriez choir +SFX pX hoir herriez choir +SFX pX hoir hoiraient choir +SFX pX hoir herraient choir +SFX pX hoir hoie choir +SFX pX hoir hoies choir +SFX pX hoir husse choir +SFX pX hoir husses choir +SFX pX hoir hût choir +SFX pX hoir hussions choir +SFX pX hoir hussiez choir +SFX pX hoir hussent choir +SFX pX hoir hois déchoir +SFX pX hoir hoyons déchoir +SFX pX hoir hoyez déchoir + +SFX pY Y 26 +SFX pY choir choir/n'q'd' échoir +SFX pY choir chéant/n'q' échoir +SFX pY choir chu/L'D'Q' échoir +SFX pY choir chus/D'Q' échoir +SFX pY choir chue/L'D'Q' échoir +SFX pY choir chues/D'Q' échoir +SFX pY choir choit/n'q' échoir +SFX pY choir chet/n'q' échoir +SFX pY choir choient/n'q' échoir +SFX pY choir chéent/n'q' échoir +SFX pY choir choyait/n'q' échoir +SFX pY choir choyaient/n'q' échoir +SFX pY choir chut/n'q' échoir +SFX pY choir churent/n'q' échoir +SFX pY choir choira/n'q' échoir +SFX pY choir cherra/n'q' échoir +SFX pY choir choiront/n'q' échoir +SFX pY choir cherront/n'q' échoir +SFX pY choir choirait/n'q' échoir +SFX pY choir cherrait/n'q' échoir +SFX pY choir choiraient/n'q' échoir +SFX pY choir cherraient/n'q' échoir +SFX pY choir choie/n'q' échoir +SFX pY choir choient/n'q' échoir +SFX pY choir chût/n'q' échoir +SFX pY choir chussent/n'q' échoir + +SFX pZ N 18 +SFX pZ euvoir euvant pleuvoir +SFX pZ euvoir u pleuvoir +SFX pZ euvoir eut pleuvoir +SFX pZ euvoir euvent pleuvoir +SFX pZ euvoir euvait pleuvoir +SFX pZ euvoir euvaient pleuvoir +SFX pZ euvoir ut pleuvoir +SFX pZ euvoir urent pleuvoir +SFX pZ euvoir euvra pleuvoir +SFX pZ euvoir euvront pleuvoir +SFX pZ euvoir euvrait pleuvoir +SFX pZ euvoir euvraient pleuvoir +SFX pZ euvoir euve pleuvoir +SFX pZ euvoir ût pleuvoir +SFX pZ euvoir ussent pleuvoir +SFX pZ euvoir eus pleuvoir +SFX pZ euvoir euvons pleuvoir +SFX pZ euvoir euvez pleuvoir + +SFX qA N 8 +SFX qA alloir allu falloir +SFX qA alloir aut falloir +SFX qA alloir allait falloir +SFX qA alloir allut falloir +SFX qA alloir audra falloir +SFX qA alloir audrait falloir +SFX qA alloir aille falloir +SFX qA alloir allût falloir + +SFX rA Y 28 +SFX rA lore lore/n'q'd'l'm't's' clore +SFX rA lore losant/n'q'l'm't's' clore +SFX rA lore los/L'D'Q' clore +SFX rA lore lose/L'D'Q' clore +SFX rA lore loses/D'Q' clore +SFX rA lore los/n'q'j'l'm't' clore +SFX rA lore lot/n'q'l'm't's' .clore +SFX rA lore losons/n'q'l't' clore +SFX rA lore losez/n'q'l'm' clore +SFX rA lore losent/n'q'l'm't's' clore +SFX rA lore lorai/n'q'j'l'm't' clore +SFX rA lore loras/n'q'l'm't' clore +SFX rA lore lora/n'q'l'm't's' clore +SFX rA lore lorons/n'q'l't' clore +SFX rA lore lorez/n'q'l'm' clore +SFX rA lore loront/n'q'l'm't's' clore +SFX rA lore lorais/n'q'j'l'm't' clore +SFX rA lore lorait/n'q'l'm't's' clore +SFX rA lore lorions/n'q'l't' clore +SFX rA lore loriez/n'q'l'm' clore +SFX rA lore loraient/n'q'l'm't's' clore +SFX rA lore lose/n'q'j'l'm't's' clore +SFX rA lore loses/n'l'm't' clore +SFX rA lore losions/n'l't' clore +SFX rA lore losiez/n'l'm' clore +SFX rA lore los/n'l'm' clore +SFX rA lore losons/n'l' clore +SFX rA lore losez/n'l'm' clore + +SFX rB Y 1 +SFX rB lore lôt clore + +SFX rC Y 28 +SFX rC clore clore/n'q'd' clore +SFX rC clore closant/n'q' clore +SFX rC clore clos/L'D'Q' clore +SFX rC clore close/L'D'Q' clore +SFX rC clore closes/D'Q' clore +SFX rC clore clos/n'j' clore +SFX rC clore clot/n'q' clore +SFX rC clore closons/n' clore +SFX rC clore closez/n' clore +SFX rC clore closent/n'q' clore +SFX rC clore clorai/n'j' clore +SFX rC clore cloras/n' clore +SFX rC clore clora/n'q' clore +SFX rC clore clorons/n' clore +SFX rC clore clorez/n' clore +SFX rC clore cloront/n'q' clore +SFX rC clore clorais/n'j' clore +SFX rC clore clorait/n'q' clore +SFX rC clore clorions/n' clore +SFX rC clore cloriez/n' clore +SFX rC clore cloraient/n'q' clore +SFX rC clore close/n'q'j' clore +SFX rC clore closes/n' clore +SFX rC clore closions/n' clore +SFX rC clore closiez/n' clore +SFX rC clore clos/n' clore +SFX rC clore closons/n' clore +SFX rC clore closez/n' clore + +SFX rD N 3 +SFX rD clore clos clore +SFX rD clore close clore +SFX rD clore closes clore + +SFX tA Y 44 +SFX tA re re/n'q'd'l'm't's' [dp]re +SFX tA re ant/n'q'l'm't's' [dp]re +SFX tA re u/L'D'Q' [dp]re +SFX tA re us/D'Q' [dp]re +SFX tA re ue/L'D'Q' [dp]re +SFX tA re ues/D'Q' [dp]re +SFX tA re s/n'q'j'l'm't' [dp]re +SFX tA dre d/n'q'l'm't's' dre +SFX tA pre pt/n'q'l'm't's' pre +SFX tA re ons/n'q'l't' [dp]re +SFX tA re ez/n'q'l'm' [dp]re +SFX tA re ent/n'q'l'm't's' [dp]re +SFX tA re ais/n'q'j'l'm't' [dp]re +SFX tA re ait/n'q'l'm't's' [dp]re +SFX tA re ions/n'q'l't' [dp]re +SFX tA re iez/n'q'l'm' [dp]re +SFX tA re aient/n'q'l'm't's' [dp]re +SFX tA re is/n'q'j'l'm't' [dp]re +SFX tA re it/n'q'l'm't's' [dp]re +SFX tA re îmes/n'q'l't' [dp]re +SFX tA re îtes/n'q'l'm' [dp]re +SFX tA re irent/n'q'l'm't's' [dp]re +SFX tA re rai/n'q'j'l'm't' [dp]re +SFX tA re ras/n'q'l'm't' [dp]re +SFX tA re ra/n'q'l'm't's' [dp]re +SFX tA re rons/n'q'l't' [dp]re +SFX tA re rez/n'q'l'm' [dp]re +SFX tA re ront/n'q'l'm't's' [dp]re +SFX tA re rais/n'q'j'l'm't' [dp]re +SFX tA re rait/n'q'l'm't's' [dp]re +SFX tA re rions/n'q'l't' [dp]re +SFX tA re riez/n'q'l'm' [dp]re +SFX tA re raient/n'q'l'm't's' [dp]re +SFX tA re e/n'q'j'l'm't's' [dp]re +SFX tA re es/n'l'm't' [dp]re +SFX tA re isse/n'q'j'l'm't' [dp]re +SFX tA re isses/n'q'l'm't' [dp]re +SFX tA re ît/n'q'l'm't's' [dp]re +SFX tA re issions/n'q'l't' [dp]re +SFX tA re issiez/n'q'l'm' [dp]re +SFX tA re issent/n'q'l'm't's' [dp]re +SFX tA re s/n'l'm't' [dp]re +SFX tA re ons/n'l' [dp]re +SFX tA re ez/n'l'm' [dp]re + +SFX tD Y 43 +SFX tD perdre perdre/m't's' perdre +SFX tD perdre perdant/m't's' perdre +SFX tD perdre perdu perdre +SFX tD perdre perdus perdre +SFX tD perdre perdue perdre +SFX tD perdre perdues perdre +SFX tD perdre perds/m't' perdre +SFX tD perdre perd/s' perdre +SFX tD perdre perdons perdre +SFX tD perdre perdez perdre +SFX tD perdre perdent/s' perdre +SFX tD perdre perdais/m't' perdre +SFX tD perdre perdait/s' perdre +SFX tD perdre perdions perdre +SFX tD perdre perdiez perdre +SFX tD perdre perdaient/s' perdre +SFX tD perdre perdis/m't' perdre +SFX tD perdre perdit/s' perdre +SFX tD perdre perdîmes perdre +SFX tD perdre perdîtes perdre +SFX tD perdre perdirent/s' perdre +SFX tD perdre perdrai/m' perdre +SFX tD perdre perdras/t' perdre +SFX tD perdre perdra/s' perdre +SFX tD perdre perdrons perdre +SFX tD perdre perdrez perdre +SFX tD perdre perdront/s' perdre +SFX tD perdre perdrais/m't' perdre +SFX tD perdre perdrait/s' perdre +SFX tD perdre perdrions perdre +SFX tD perdre perdriez perdre +SFX tD perdre perdraient/s' perdre +SFX tD perdre perde/m's' perdre +SFX tD perdre perdes/t' perdre +SFX tD perdre perdisse/m' perdre +SFX tD perdre perdisses/t' perdre +SFX tD perdre perdît/s' perdre +SFX tD perdre perdissions perdre +SFX tD perdre perdissiez perdre +SFX tD perdre perdissent/s' perdre +SFX tD perdre perds/t' perdre +SFX tD perdre perdons perdre +SFX tD perdre perdez perdre + +SFX tE N 38 +SFX tE dre dant dre +SFX tE dre ds dre +SFX tE dre d dre +SFX tE dre dons dre +SFX tE dre dez dre +SFX tE dre dent dre +SFX tE dre dais dre +SFX tE dre dait dre +SFX tE dre dions dre +SFX tE dre diez dre +SFX tE dre daient dre +SFX tE dre dis dre +SFX tE dre dit dre +SFX tE dre dîmes dre +SFX tE dre dîtes dre +SFX tE dre dirent dre +SFX tE dre drai dre +SFX tE dre dras dre +SFX tE dre dra dre +SFX tE dre drons dre +SFX tE dre drez dre +SFX tE dre dront dre +SFX tE dre drais dre +SFX tE dre drait dre +SFX tE dre drions dre +SFX tE dre driez dre +SFX tE dre draient dre +SFX tE dre de dre +SFX tE dre des dre +SFX tE dre disse dre +SFX tE dre disses dre +SFX tE dre dît dre +SFX tE dre dissions dre +SFX tE dre dissiez dre +SFX tE dre dissent dre +SFX tE dre ds dre +SFX tE dre dons dre +SFX tE dre dez dre + +SFX tF Y 42 +SFX tF rendre rendre/n'q'd'l'm't's' prendre +SFX tF rendre renant/n'q'l'm't's' prendre +SFX tF rendre ris/L'D'Q' prendre +SFX tF rendre rise/L'D'Q' prendre +SFX tF rendre rises/D'Q' prendre +SFX tF rendre rends/n'q'j'l'm't' prendre +SFX tF rendre rend/n'q'l'm't's' prendre +SFX tF rendre renons/n'q'l't' prendre +SFX tF rendre renez/n'q'l'm' prendre +SFX tF rendre rennent/n'q'l'm't's' prendre +SFX tF rendre renais/n'q'j'l'm't' prendre +SFX tF rendre renait/n'q'l'm't's' prendre +SFX tF rendre renions/n'q'l't' prendre +SFX tF rendre reniez/n'q'l'm' prendre +SFX tF rendre renaient/n'q'l'm't's' prendre +SFX tF rendre ris/n'q'j'l'm't' prendre +SFX tF rendre rit/n'q'l'm't's' prendre +SFX tF rendre rîmes/n'q'l't' prendre +SFX tF rendre rîtes/n'q'l'm' prendre +SFX tF rendre rirent/n'q'l'm't's' prendre +SFX tF rendre rendrai/n'q'j'l'm't' prendre +SFX tF rendre rendras/n'q'l'm't' prendre +SFX tF rendre rendra/n'q'l'm't's' prendre +SFX tF rendre rendrons/n'q'l't' prendre +SFX tF rendre rendrez/n'q'l'm' prendre +SFX tF rendre rendront/n'q'l'm't's' prendre +SFX tF rendre rendrais/n'q'j'l'm't' prendre +SFX tF rendre rendrait/n'q'l'm't's' prendre +SFX tF rendre rendrions/n'q'l't' prendre +SFX tF rendre rendriez/n'q'l'm' prendre +SFX tF rendre rendraient/n'q'l'm't's' prendre +SFX tF rendre renne/n'q'j'l'm't's' prendre +SFX tF rendre rennes/n'l'm't' prendre +SFX tF rendre risse/n'q'j'l'm't' prendre +SFX tF rendre risses/n'q'l'm't' prendre +SFX tF rendre rît/n'q'l'm't's' prendre +SFX tF rendre rissions/n'q'l't' prendre +SFX tF rendre rissiez/n'q'l'm' prendre +SFX tF rendre rissent/n'q'l'm't's' prendre +SFX tF rendre rends/n'l'm' prendre +SFX tF rendre renons/n'l' prendre +SFX tF rendre renez/n'l'm' prendre + +SFX tG Y 42 +SFX tG prendre prendre/m't's' prendre +SFX tG prendre prenant/m't's' prendre +SFX tG prendre pris/L'D'Q' prendre +SFX tG prendre prise/L'D'Q' prendre +SFX tG prendre prises/D'Q' prendre +SFX tG prendre prends/m't' prendre +SFX tG prendre prend/s' prendre +SFX tG prendre prenons prendre +SFX tG prendre prenez prendre +SFX tG prendre prennent/s' prendre +SFX tG prendre prenais/m't' prendre +SFX tG prendre prenait/s' prendre +SFX tG prendre prenions prendre +SFX tG prendre preniez prendre +SFX tG prendre prenaient/s' prendre +SFX tG prendre pris/m't' prendre +SFX tG prendre prit/s' prendre +SFX tG prendre prîmes prendre +SFX tG prendre prîtes prendre +SFX tG prendre prirent/s' prendre +SFX tG prendre prendrai/m' prendre +SFX tG prendre prendras/t' prendre +SFX tG prendre prendra/s' prendre +SFX tG prendre prendrons prendre +SFX tG prendre prendrez prendre +SFX tG prendre prendront/s' prendre +SFX tG prendre prendrais/m't' prendre +SFX tG prendre prendrait/s' prendre +SFX tG prendre prendrions prendre +SFX tG prendre prendriez prendre +SFX tG prendre prendraient/s' prendre +SFX tG prendre prenne/m's' prendre +SFX tG prendre prennes/t' prendre +SFX tG prendre prisse/m' prendre +SFX tG prendre prisses/t' prendre +SFX tG prendre prît/s' prendre +SFX tG prendre prissions prendre +SFX tG prendre prissiez prendre +SFX tG prendre prissent/s' prendre +SFX tG prendre prends/t' prendre +SFX tG prendre prenons prendre +SFX tG prendre prenez prendre + +SFX tM N 31 +SFX tM outre outant foutre +SFX tM outre outu foutre +SFX tM outre outus foutre +SFX tM outre outue foutre +SFX tM outre outues foutre +SFX tM outre ous foutre +SFX tM outre out foutre +SFX tM outre outons foutre +SFX tM outre outez foutre +SFX tM outre outent foutre +SFX tM outre outais foutre +SFX tM outre outait foutre +SFX tM outre outions foutre +SFX tM outre outiez foutre +SFX tM outre outaient foutre +SFX tM outre outrai foutre +SFX tM outre outras foutre +SFX tM outre outra foutre +SFX tM outre outrons foutre +SFX tM outre outrez foutre +SFX tM outre outront foutre +SFX tM outre outrais foutre +SFX tM outre outrait foutre +SFX tM outre outrions foutre +SFX tM outre outriez foutre +SFX tM outre outraient foutre +SFX tM outre oute foutre +SFX tM outre outes foutre +SFX tM outre ous foutre +SFX tM outre outons foutre +SFX tM outre outez foutre + +SFX tU N 4 +SFX tU istre issu tistre +SFX tU istre issus tistre +SFX tU istre issue tistre +SFX tU istre issues tistre + +SFX uA Y 45 +SFX uA tre tre/n'q'd'l'm't's' tre +SFX uA tre tant/n'q'l'm't's' tre +SFX uA tre tu/L'D'Q' tre +SFX uA tre tus/D'Q' tre +SFX uA tre tue/L'D'Q' tre +SFX uA tre tues/D'Q' tre +SFX uA ttre ts/n'q'j'l'm't' ttre +SFX uA ttre t/n'q'l'm't's' ttre +SFX uA tre ts/n'q'j'l'm't' embatre +SFX uA tre t/n'q'l'm't's' embatre +SFX uA tre tons/n'q'l't' tre +SFX uA tre tez/n'q'l'm' tre +SFX uA tre tent/n'q'l'm't's' tre +SFX uA tre tais/n'q'j'l'm't' tre +SFX uA tre tait/n'q'l'm't's' tre +SFX uA tre tions/n'q'l't' tre +SFX uA tre tiez/n'q'l'm' tre +SFX uA tre taient/n'q'l'm't's' tre +SFX uA tre tis/n'q'j'l'm't' tre +SFX uA tre tit/n'q'l'm't's' tre +SFX uA tre tîmes/n'q'l't' tre +SFX uA tre tîtes/n'q'l'm' tre +SFX uA tre tirent/n'q'l'm't's' tre +SFX uA tre trai/n'q'j'l'm't' tre +SFX uA tre tras/n'q'l'm't' tre +SFX uA tre tra/n'q'l'm't's' tre +SFX uA tre trons/n'q'l't' tre +SFX uA tre trez/n'q'l'm' tre +SFX uA tre tront/n'q'l'm't's' tre +SFX uA tre trais/n'q'j'l'm't' tre +SFX uA tre trait/n'q'l'm't's' tre +SFX uA tre trions/n'q'l't' tre +SFX uA tre triez/n'q'l'm' tre +SFX uA tre traient/n'q'l'm't's' tre +SFX uA tre te/n'q'j'l'm't's' tre +SFX uA tre tes/n'l'm't' tre +SFX uA tre tisse/n'q'j'l'm't' tre +SFX uA tre tisses/n'q'l'm't' tre +SFX uA tre tît/n'q'l'm't's' tre +SFX uA tre tissions/n'q'l't' tre +SFX uA tre tissiez/n'q'l'm' tre +SFX uA tre tissent/n'q'l'm't's' tre +SFX uA tre s/n'l'm't' tre +SFX uA tre tons/n'l' tre +SFX uA tre tez/n'l'm' tre + +SFX uC Y 43 +SFX uC battre battre/m't's' battre +SFX uC battre battant/m't's' battre +SFX uC battre battu battre +SFX uC battre battus battre +SFX uC battre battue battre +SFX uC battre battues battre +SFX uC battre bats/m't' battre +SFX uC battre bat/s' battre +SFX uC battre battons battre +SFX uC battre battez battre +SFX uC battre battent/s' battre +SFX uC battre battais/m't' battre +SFX uC battre battait/s' battre +SFX uC battre battions battre +SFX uC battre battiez battre +SFX uC battre battaient/s' battre +SFX uC battre battis/m't' battre +SFX uC battre battit/s' battre +SFX uC battre battîmes battre +SFX uC battre battîtes battre +SFX uC battre battirent/s' battre +SFX uC battre battrai/m' battre +SFX uC battre battras/t' battre +SFX uC battre battra/s' battre +SFX uC battre battrons battre +SFX uC battre battrez battre +SFX uC battre battront/s' battre +SFX uC battre battrais/m't' battre +SFX uC battre battrait/s' battre +SFX uC battre battrions battre +SFX uC battre battriez battre +SFX uC battre battraient/s' battre +SFX uC battre batte/m's' battre +SFX uC battre battes/t' battre +SFX uC battre battisse/m' battre +SFX uC battre battisses/t' battre +SFX uC battre battît/s' battre +SFX uC battre battissions battre +SFX uC battre battissiez battre +SFX uC battre battissent/s' battre +SFX uC battre bats/t' battre +SFX uC battre battons battre +SFX uC battre battez battre + +SFX uD Y 33 +SFX uD battre battre/s' battre +SFX uD battre battant/s' battre +SFX uD battre battu battre +SFX uD battre battus battre +SFX uD battre battue battre +SFX uD battre battues battre +SFX uD battre bat/s' battre +SFX uD battre battons battre +SFX uD battre battez battre +SFX uD battre battent/s' battre +SFX uD battre battait/s' battre +SFX uD battre battions battre +SFX uD battre battiez battre +SFX uD battre battaient/s' battre +SFX uD battre battit/s' battre +SFX uD battre battîmes battre +SFX uD battre battîtes battre +SFX uD battre battirent/s' battre +SFX uD battre battra/s' battre +SFX uD battre battrons battre +SFX uD battre battrez battre +SFX uD battre battront/s' battre +SFX uD battre battrait/s' battre +SFX uD battre battrions battre +SFX uD battre battriez battre +SFX uD battre battraient/s' battre +SFX uD battre batte/s' battre +SFX uD battre battît/s' battre +SFX uD battre battissions battre +SFX uD battre battissiez battre +SFX uD battre battissent/s' battre +SFX uD battre battons-nous battre +SFX uD battre battez-vous battre + +SFX vA Y 42 +SFX vA ettre ettre/n'q'd'l'm't's' mettre +SFX vA ettre ettant/n'q'l'm't's' mettre +SFX vA ettre is/L'D'Q' mettre +SFX vA ettre ise/L'D'Q' mettre +SFX vA ettre ises/D'Q' mettre +SFX vA ettre ets/n'q'j'l'm't' mettre +SFX vA ettre et/n'q'l'm't's' mettre +SFX vA ettre ettons/n'q'l't' mettre +SFX vA ettre ettez/n'q'l'm' mettre +SFX vA ettre ettent/n'q'l'm't's' mettre +SFX vA ettre ettais/n'q'j'l'm't' mettre +SFX vA ettre ettait/n'q'l'm't's' mettre +SFX vA ettre ettions/n'q'l't' mettre +SFX vA ettre ettiez/n'q'l'm' mettre +SFX vA ettre ettaient/n'q'l'm't's' mettre +SFX vA ettre is/n'q'j'l'm't' mettre +SFX vA ettre it/n'q'l'm't's' mettre +SFX vA ettre îmes/n'q'l't' mettre +SFX vA ettre îtes/n'q'l'm' mettre +SFX vA ettre irent/n'q'l'm't's' mettre +SFX vA ettre ettrai/n'q'j'l'm't' mettre +SFX vA ettre ettras/n'q'l'm't' mettre +SFX vA ettre ettra/n'q'l'm't's' mettre +SFX vA ettre ettrons/n'q'l't' mettre +SFX vA ettre ettrez/n'q'l'm' mettre +SFX vA ettre ettront/n'q'l'm't's' mettre +SFX vA ettre ettrais/n'q'j'l'm't' mettre +SFX vA ettre ettrait/n'q'l'm't's' mettre +SFX vA ettre ettrions/n'q'l't' mettre +SFX vA ettre ettriez/n'q'l'm' mettre +SFX vA ettre ettraient/n'q'l'm't's' mettre +SFX vA ettre ette/n'q'j'l'm't's' mettre +SFX vA ettre ettes/n'l'm't' mettre +SFX vA ettre isse/n'q'j'l'm't' mettre +SFX vA ettre isses/n'q'l'm't' mettre +SFX vA ettre ît/n'q'l'm't's' mettre +SFX vA ettre issions/n'q'l't' mettre +SFX vA ettre issiez/n'q'l'm' mettre +SFX vA ettre issent/n'q'l'm't's' mettre +SFX vA ettre ets/n'l'm't' mettre +SFX vA ettre ettons/n'l' mettre +SFX vA ettre ettez/n'l'm' mettre + +SFX vC Y 42 +SFX vC mettre mettre/m't's' mettre +SFX vC mettre mettant/m't's' mettre +SFX vC mettre mis mettre +SFX vC mettre mise mettre +SFX vC mettre mises mettre +SFX vC mettre mets/m't' mettre +SFX vC mettre met/s' mettre +SFX vC mettre mettons mettre +SFX vC mettre mettez mettre +SFX vC mettre mettent/s' mettre +SFX vC mettre mettais/m't' mettre +SFX vC mettre mettait/s' mettre +SFX vC mettre mettions mettre +SFX vC mettre mettiez mettre +SFX vC mettre mettaient/s' mettre +SFX vC mettre mis/m't' mettre +SFX vC mettre mit/s' mettre +SFX vC mettre mîmes mettre +SFX vC mettre mîtes mettre +SFX vC mettre mirent/s' mettre +SFX vC mettre mettrai/m' mettre +SFX vC mettre mettras/t' mettre +SFX vC mettre mettra/s' mettre +SFX vC mettre mettrons mettre +SFX vC mettre mettrez mettre +SFX vC mettre mettront/s' mettre +SFX vC mettre mettrais/m't' mettre +SFX vC mettre mettrait/s' mettre +SFX vC mettre mettrions mettre +SFX vC mettre mettriez mettre +SFX vC mettre mettraient/s' mettre +SFX vC mettre mette/m's' mettre +SFX vC mettre mettes/t' mettre +SFX vC mettre misse/m' mettre +SFX vC mettre misses/t' mettre +SFX vC mettre mît/s' mettre +SFX vC mettre missions mettre +SFX vC mettre missiez mettre +SFX vC mettre missent/s' mettre +SFX vC mettre mets mettre +SFX vC mettre mettons mettre +SFX vC mettre mettez mettre + +SFX wA N 42 +SFX wA eindre eignant eindre +SFX wA eindre eint eindre +SFX wA eindre eints eindre +SFX wA eindre einte eindre +SFX wA eindre eintes eindre +SFX wA eindre eins eindre +SFX wA eindre eint eindre +SFX wA eindre eignons eindre +SFX wA eindre eignez eindre +SFX wA eindre eignent eindre +SFX wA eindre eignais eindre +SFX wA eindre eignait eindre +SFX wA eindre eignions eindre +SFX wA eindre eigniez eindre +SFX wA eindre eignaient eindre +SFX wA eindre eignis eindre +SFX wA eindre eignit eindre +SFX wA eindre eignîmes eindre +SFX wA eindre eignîtes eindre +SFX wA eindre eignirent eindre +SFX wA eindre eindrai eindre +SFX wA eindre eindras eindre +SFX wA eindre eindra eindre +SFX wA eindre eindrons eindre +SFX wA eindre eindrez eindre +SFX wA eindre eindront eindre +SFX wA eindre eindrais eindre +SFX wA eindre eindrait eindre +SFX wA eindre eindrions eindre +SFX wA eindre eindriez eindre +SFX wA eindre eindraient eindre +SFX wA eindre eigne eindre +SFX wA eindre eignes eindre +SFX wA eindre eignisse eindre +SFX wA eindre eignisses eindre +SFX wA eindre eignît eindre +SFX wA eindre eignissions eindre +SFX wA eindre eignissiez eindre +SFX wA eindre eignissent eindre +SFX wA eindre eins eindre +SFX wA eindre eignons eindre +SFX wA eindre eignez eindre + +SFX wB Y 43 +SFX wB indre indre/n'q'd'l'm't's' indre +SFX wB indre ignant/n'q'l'm't's' indre +SFX wB indre int/L'D'Q' indre +SFX wB indre ints/D'Q' indre +SFX wB indre inte/L'D'Q' indre +SFX wB indre intes/D'Q' indre +SFX wB indre ins/n'q'j'l'm't' indre +SFX wB indre int/n'q'l'm't's' indre +SFX wB indre ignons/n'q'l't' indre +SFX wB indre ignez/n'q'l'm' indre +SFX wB indre ignent/n'q'l'm't's' indre +SFX wB indre ignais/n'q'j'l'm't' indre +SFX wB indre ignait/n'q'l'm't's' indre +SFX wB indre ignions/n'q'l't' indre +SFX wB indre igniez/n'q'l'm' indre +SFX wB indre ignaient/n'q'l'm't's' indre +SFX wB indre ignis/n'q'j'l'm't' indre +SFX wB indre ignit/n'q'l'm't's' indre +SFX wB indre ignîmes/n'q'l't' indre +SFX wB indre ignîtes/n'q'l'm' indre +SFX wB indre ignirent/n'q'l'm't's' indre +SFX wB indre indrai/n'q'j'l'm't' indre +SFX wB indre indras/n'q'l'm't' indre +SFX wB indre indra/n'q'l'm't's' indre +SFX wB indre indrons/n'q'l't' indre +SFX wB indre indrez/n'q'l'm' indre +SFX wB indre indront/n'q'l'm't's' indre +SFX wB indre indrais/n'q'j'l'm't' indre +SFX wB indre indrait/n'q'l'm't's' indre +SFX wB indre indrions/n'q'l't' indre +SFX wB indre indriez/n'q'l'm' indre +SFX wB indre indraient/n'q'l'm't's' indre +SFX wB indre igne/n'q'j'l'm't's' indre +SFX wB indre ignes/n'l'm't' indre +SFX wB indre ignisse/n'q'j'l'm't' indre +SFX wB indre ignisses/n'q'l'm't' indre +SFX wB indre ignît/n'q'l'm't's' indre +SFX wB indre ignissions/n'q'l't' indre +SFX wB indre ignissiez/n'q'l'm' indre +SFX wB indre ignissent/n'q'l'm't's' indre +SFX wB indre ins/n'l'm't' indre +SFX wB indre ignons/n'l' indre +SFX wB indre ignez/n'l'm' indre + +SFX wD N 45 +SFX wD aire aisant faire +SFX wD aire ait faire +SFX wD aire aits faire +SFX wD aire aite faire +SFX wD aire aites faire +SFX wD aire ais faire +SFX wD aire ait faire +SFX wD aire aisons faire +SFX wD aire aites faire +SFX wD aire ont faire +SFX wD aire aisais faire +SFX wD aire aisait faire +SFX wD aire aisions faire +SFX wD aire aisiez faire +SFX wD aire aisaient faire +SFX wD aire is faire +SFX wD aire it faire +SFX wD aire îmes faire +SFX wD aire îtes faire +SFX wD aire irent faire +SFX wD aire erai faire +SFX wD aire eras faire +SFX wD aire era faire +SFX wD aire erons faire +SFX wD aire erez faire +SFX wD aire eront faire +SFX wD aire erais faire +SFX wD aire erait faire +SFX wD aire erions faire +SFX wD aire eriez faire +SFX wD aire eraient faire +SFX wD aire asse faire +SFX wD aire asses faire +SFX wD aire assions faire +SFX wD aire assiez faire +SFX wD aire assent faire +SFX wD aire isse faire +SFX wD aire isses faire +SFX wD aire ît faire +SFX wD aire issions faire +SFX wD aire issiez faire +SFX wD aire issent faire +SFX wD aire ais faire +SFX wD aire aisons faire +SFX wD aire aites faire + +SFX wF N 13 +SFX wF faire faisant faire +SFX wF faire fait faire +SFX wF faire faits faire +SFX wF faire faite faire +SFX wF faire faites faire +SFX wF faire fais faire +SFX wF faire fait faire +SFX wF faire faisons faire +SFX wF faire faites faire +SFX wF faire font faire +SFX wF faire fais faire +SFX wF faire faisons faire +SFX wF faire faites faire + +SFX wG N 5 +SFX wG aire aisant faire +SFX wG aire ait faire +SFX wG aire aits faire +SFX wG aire aite faire +SFX wG aire aites faire + +SFX wL Y 32 +SFX wL raire raire/n'q'd'l'm't's' traire +SFX wL raire rayant/n'q'l'm't's' traire +SFX wL raire rait/L'D'Q' traire +SFX wL raire raits/D'Q' traire +SFX wL raire raite/L'D'Q' traire +SFX wL raire raites/D'Q' traire +SFX wL raire rais/n'q'j'l'm't' traire +SFX wL raire rait/n'q'l'm't's' traire +SFX wL raire rayons/n'q'l't' traire +SFX wL raire rayez/n'q'l'm' traire +SFX wL raire raient/n'q'l'm't's' traire +SFX wL raire rayais/n'q'j'l'm't' traire +SFX wL raire rayait/n'q'l'm't's' traire +SFX wL raire rayions/n'q'l't' traire +SFX wL raire rayiez/n'q'l'm' traire +SFX wL raire rayaient/n'q'l'm't's' traire +SFX wL raire rairai/n'q'j'l'm't' traire +SFX wL raire rairas/n'q'l'm't' traire +SFX wL raire raira/n'q'l'm't's' traire +SFX wL raire rairons/n'q'l't' traire +SFX wL raire rairez/n'q'l'm' traire +SFX wL raire rairont/n'q'l'm't's' traire +SFX wL raire rairais/n'q'j'l'm't' traire +SFX wL raire rairait/n'q'l'm't's' traire +SFX wL raire rairions/n'q'l't' traire +SFX wL raire rairiez/n'q'l'm' traire +SFX wL raire rairaient/n'q'l'm't's' traire +SFX wL raire raie/n'q'j'l'm't's' traire +SFX wL raire raies/n'q'l'm't' traire +SFX wL raire rais/n'l'm't' traire +SFX wL raire rayons/n'l' traire +SFX wL raire rayez/n'l'm' traire + +SFX wM N 28 +SFX wM aire ayant raire +SFX wM aire ait raire +SFX wM aire ais raire +SFX wM aire ait raire +SFX wM aire ayons raire +SFX wM aire ayez raire +SFX wM aire aient raire +SFX wM aire ayais raire +SFX wM aire ayait raire +SFX wM aire ayions raire +SFX wM aire ayiez raire +SFX wM aire ayaient raire +SFX wM aire airai raire +SFX wM aire airas raire +SFX wM aire aira raire +SFX wM aire airons raire +SFX wM aire airez raire +SFX wM aire airont raire +SFX wM aire airais raire +SFX wM aire airait raire +SFX wM aire airions raire +SFX wM aire airiez raire +SFX wM aire airaient raire +SFX wM aire aie raire +SFX wM aire aies raire +SFX wM aire ais raire +SFX wM aire ayons raire +SFX wM aire ayez raire + +SFX wN N 39 +SFX wN aire aisant aire +SFX wN aire ais aire +SFX wN aire ait taire +SFX wN aire aît plaire +SFX wN aire aisons aire +SFX wN aire aisez aire +SFX wN aire aisent aire +SFX wN aire aisais aire +SFX wN aire aisait aire +SFX wN aire aisions aire +SFX wN aire aisiez aire +SFX wN aire aisaient aire +SFX wN aire us aire +SFX wN aire ut aire +SFX wN aire ûmes aire +SFX wN aire ûtes aire +SFX wN aire urent aire +SFX wN aire airai aire +SFX wN aire airas aire +SFX wN aire aira aire +SFX wN aire airons aire +SFX wN aire airez aire +SFX wN aire airont aire +SFX wN aire airais aire +SFX wN aire airait aire +SFX wN aire airions aire +SFX wN aire airiez aire +SFX wN aire airaient aire +SFX wN aire aise aire +SFX wN aire aises aire +SFX wN aire usse aire +SFX wN aire usses aire +SFX wN aire ût aire +SFX wN aire ussions aire +SFX wN aire ussiez aire +SFX wN aire ussent aire +SFX wN aire ais aire +SFX wN aire aisons aire +SFX wN aire aisez aire + +SFX wO N 42 +SFX wO aindre aignant aindre +SFX wO aindre aint aindre +SFX wO aindre aints aindre +SFX wO aindre ainte aindre +SFX wO aindre aintes aindre +SFX wO aindre ains aindre +SFX wO aindre aint aindre +SFX wO aindre aignons aindre +SFX wO aindre aignez aindre +SFX wO aindre aignent aindre +SFX wO aindre aignais aindre +SFX wO aindre aignait aindre +SFX wO aindre aignions aindre +SFX wO aindre aigniez aindre +SFX wO aindre aignaient aindre +SFX wO aindre aignis aindre +SFX wO aindre aignit aindre +SFX wO aindre aignîmes aindre +SFX wO aindre aignîtes aindre +SFX wO aindre aignirent aindre +SFX wO aindre aindrai aindre +SFX wO aindre aindras aindre +SFX wO aindre aindra aindre +SFX wO aindre aindrons aindre +SFX wO aindre aindrez aindre +SFX wO aindre aindront aindre +SFX wO aindre aindrais aindre +SFX wO aindre aindrait aindre +SFX wO aindre aindrions aindre +SFX wO aindre aindriez aindre +SFX wO aindre aindraient aindre +SFX wO aindre aigne aindre +SFX wO aindre aignes aindre +SFX wO aindre aignisse aindre +SFX wO aindre aignisses aindre +SFX wO aindre aignît aindre +SFX wO aindre aignissions aindre +SFX wO aindre aignissiez aindre +SFX wO aindre aignissent aindre +SFX wO aindre ains aindre +SFX wO aindre aignons aindre +SFX wO aindre aignez aindre + +SFX wP N 42 +SFX wP aincre ainquant vaincre +SFX wP aincre aincu vaincre +SFX wP aincre aincus vaincre +SFX wP aincre aincue vaincre +SFX wP aincre aincues vaincre +SFX wP aincre aincs vaincre +SFX wP aincre ainc vaincre +SFX wP aincre ainquons vaincre +SFX wP aincre ainquez vaincre +SFX wP aincre ainquent vaincre +SFX wP aincre ainquais vaincre +SFX wP aincre ainquait vaincre +SFX wP aincre ainquions vaincre +SFX wP aincre ainquiez vaincre +SFX wP aincre ainquaient vaincre +SFX wP aincre ainquis vaincre +SFX wP aincre ainquit vaincre +SFX wP aincre ainquîmes vaincre +SFX wP aincre ainquîtes vaincre +SFX wP aincre ainquirent vaincre +SFX wP aincre aincrai vaincre +SFX wP aincre aincras vaincre +SFX wP aincre aincra vaincre +SFX wP aincre aincrons vaincre +SFX wP aincre aincrez vaincre +SFX wP aincre aincront vaincre +SFX wP aincre aincrais vaincre +SFX wP aincre aincrait vaincre +SFX wP aincre aincrions vaincre +SFX wP aincre aincriez vaincre +SFX wP aincre aincraient vaincre +SFX wP aincre ainque vaincre +SFX wP aincre ainques vaincre +SFX wP aincre ainquisse vaincre +SFX wP aincre ainquisses vaincre +SFX wP aincre ainquît vaincre +SFX wP aincre ainquissions vaincre +SFX wP aincre ainquissiez vaincre +SFX wP aincre ainquissent vaincre +SFX wP aincre aincs vaincre +SFX wP aincre ainquons vaincre +SFX wP aincre ainquez vaincre + +SFX wQ Y 42 +SFX wQ tre tre/n'q'd'm't's' tre +SFX wQ aître aissant/n'q'd'm't's' aître +SFX wQ aître ais/n'q'j'm't' aître +SFX wQ aître aît/n'q'm't's' aître +SFX wQ aître aissons/n'q't' aître +SFX wQ aître aissez/n'q'm' aître +SFX wQ aître aissent/n'q'm't's' aître +SFX wQ aître aissais/n'q'j'm't' aître +SFX wQ aître aissait/n'q'm't's' aître +SFX wQ aître aissions/n'q't' aître +SFX wQ aître aissiez/n'q'm' aître +SFX wQ aître aissaient/n'q'm't's' aître +SFX wQ aître us/n'q'j'm't' aître +SFX wQ aître ut/n'q'm't's' aître +SFX wQ aître ûmes/n'q't' aître +SFX wQ aître ûtes/n'q'm' aître +SFX wQ aître urent/n'q'm't's' aître +SFX wQ tre trai/n'q'j'm't' tre +SFX wQ tre tras/n'q'm't' tre +SFX wQ tre tra/n'q'm't's' tre +SFX wQ tre trons/n'q't' tre +SFX wQ tre trez/n'q'm' tre +SFX wQ tre tront/n'q'm't's' tre +SFX wQ tre trais/n'q'j'm't' tre +SFX wQ tre trait/n'q'm't's' tre +SFX wQ tre trions/n'q't' tre +SFX wQ tre triez/n'q'm' tre +SFX wQ tre traient/n'q'm't's' tre +SFX wQ aître aisse/n'q'j'm't's' aître +SFX wQ aître aisses/n'q'm't' aître +SFX wQ aître usse/n'q'j'm't' aître +SFX wQ aître usses/n'q'm't' aître +SFX wQ aître ût/n'q'm't's' aître +SFX wQ aître ussions/n'q't' aître +SFX wQ aître ussiez/n'q'm' aître +SFX wQ aître ussent/n'q'm't's' aître +SFX wQ aître ais/n'm' paraître +SFX wQ aître ais connaître +SFX wQ aître aissons/n' paraître +SFX wQ aître aissons connaître +SFX wQ aître aissez/n'm' paraître +SFX wQ aître aissez connaître + +SFX wR N 42 +SFX wR aître aissant naître +SFX wR aître é naître +SFX wR aître és naître +SFX wR aître ée naître +SFX wR aître ées naître +SFX wR aître ais naître +SFX wR aître aît naître +SFX wR aître aissons naître +SFX wR aître aissez naître +SFX wR aître aissent naître +SFX wR aître aissais naître +SFX wR aître aissait naître +SFX wR aître aissions naître +SFX wR aître aissiez naître +SFX wR aître aissaient naître +SFX wR aître aquis naître +SFX wR aître aquit naître +SFX wR aître aquîmes naître +SFX wR aître aquîtes naître +SFX wR aître aquirent naître +SFX wR tre trai tre +SFX wR tre tras tre +SFX wR tre tra tre +SFX wR tre trons tre +SFX wR tre trez tre +SFX wR tre tront tre +SFX wR tre trais tre +SFX wR tre trait tre +SFX wR tre trions tre +SFX wR tre triez tre +SFX wR tre traient tre +SFX wR aître aisse naître +SFX wR aître aisses naître +SFX wR aître aquisse naître +SFX wR aître aquisses naître +SFX wR aître aquît naître +SFX wR aître aquissions naître +SFX wR aître aquissiez naître +SFX wR aître aquissent naître +SFX wR aître ais naître +SFX wR aître aissons naître +SFX wR aître aissez naître + +SFX wS N 42 +SFX wS aître aissant paître +SFX wS aître u repaître +SFX wS aître us repaître +SFX wS aître ue repaître +SFX wS aître ues repaître +SFX wS aître ais paître +SFX wS aître aît paître +SFX wS aître aissons paître +SFX wS aître aissez paître +SFX wS aître aissent paître +SFX wS aître aissais paître +SFX wS aître aissait paître +SFX wS aître aissions paître +SFX wS aître aissiez paître +SFX wS aître aissaient paître +SFX wS aître us repaître +SFX wS aître ut repaître +SFX wS aître ûmes repaître +SFX wS aître ûtes repaître +SFX wS aître urent repaître +SFX wS tre trai tre +SFX wS tre tras tre +SFX wS tre tra tre +SFX wS tre trons tre +SFX wS tre trez tre +SFX wS tre tront tre +SFX wS tre trais tre +SFX wS tre trait tre +SFX wS tre trions tre +SFX wS tre triez tre +SFX wS tre traient tre +SFX wS aître aisse paître +SFX wS aître aisses paître +SFX wS aître usse repaître +SFX wS aître usses repaître +SFX wS aître ût repaître +SFX wS aître ussions repaître +SFX wS aître ussiez repaître +SFX wS aître ussent repaître +SFX wS aître ais paître +SFX wS aître aissons paître +SFX wS aître aissez paître + +SFX wT N 46 +SFX wT roître roissant croître +SFX wT roître rû recroître +SFX wT roître rûs recroître +SFX wT roître rûe recroître +SFX wT roître rûes recroître +SFX wT roître ru décroître +SFX wT roître rus décroître +SFX wT roître rue décroître +SFX wT roître rues décroître +SFX wT roître rois .croître +SFX wT roître roît .croître +SFX wT roître roissons croître +SFX wT roître roissez croître +SFX wT roître roissent croître +SFX wT roître roissais croître +SFX wT roître roissait croître +SFX wT roître roissions croître +SFX wT roître roissiez croître +SFX wT roître roissaient croître +SFX wT roître rus .croître +SFX wT roître rut .croître +SFX wT roître rûmes croître +SFX wT roître rûtes croître +SFX wT roître rurent .croître +SFX wT tre trai tre +SFX wT tre tras tre +SFX wT tre tra tre +SFX wT tre trons tre +SFX wT tre trez tre +SFX wT tre tront tre +SFX wT tre trais tre +SFX wT tre trait tre +SFX wT tre trions tre +SFX wT tre triez tre +SFX wT tre traient tre +SFX wT roître roisse croître +SFX wT roître roisses croître +SFX wT roître russe .croître +SFX wT roître russes .croître +SFX wT roître rût croître +SFX wT roître russions .croître +SFX wT roître russiez .croître +SFX wT roître russent .croître +SFX wT roître rois .croître +SFX wT roître roissons croître +SFX wT roître roissez croître + +SFX wU N 15 +SFX wU roître rû croître +SFX wU roître rûs croître +SFX wU roître rûe croître +SFX wU roître rûes croître +SFX wU roître roîs croître +SFX wU roître roît croître +SFX wU roître rûs croître +SFX wU roître rût croître +SFX wU roître rûrent croître +SFX wU roître rûsse croître +SFX wU roître rûsses croître +SFX wU roître rûssions croître +SFX wU roître rûssiez croître +SFX wU roître rûssent croître +SFX wU roître roîs croître + +SFX wV Y 43 +SFX wV tre tre/n'q'd'l'm't's' tre +SFX wV croître croissant/n'q'd'l'm't's' croître +SFX wV croître cru/L'D'Q' croître +SFX wV croître crus/D'Q' croître +SFX wV croître crue/L'D'Q' croître +SFX wV croître crues/D'Q' croître +SFX wV croître crois/n'q'j'l'm't' croître +SFX wV croître croît/n'q'l's' croître +SFX wV croître croissons/n'q'l' croître +SFX wV croître croissez/n'q'l' croître +SFX wV croître croissent/n'q'l's' croître +SFX wV croître croissais/n'q'j'l'm't' croître +SFX wV croître croissait/n'q'l's' croître +SFX wV croître croissions/n'q'l' croître +SFX wV croître croissiez/n'q'l' croître +SFX wV croître croissaient/n'q'l's' croître +SFX wV croître crus/n'q'j'l'm't' croître +SFX wV croître crut/n'q'l's' croître +SFX wV croître crûmes/n'q'l' croître +SFX wV croître crûtes/n'q'l' croître +SFX wV croître crurent/n'q'l's' croître +SFX wV tre trai/n'q'j'l'm' tre +SFX wV tre tras/n'q'l't' tre +SFX wV tre tra/n'q'l's' tre +SFX wV tre trons/n'q'l' tre +SFX wV tre trez/n'q'l' tre +SFX wV tre tront/n'q'l's' tre +SFX wV tre trais/n'q'j'l'm't' tre +SFX wV tre trait/n'q'l's' tre +SFX wV tre trions/n'q'l' tre +SFX wV tre triez/n'q'l' tre +SFX wV tre traient/n'q'l's' tre +SFX wV croître croisse/n'q'j'l'm's' croître +SFX wV croître croisses/n'q'l't' croître +SFX wV croître crusse/n'q'j'l'm' croître +SFX wV croître crusses/n'q'l't' croître +SFX wV croître crût/n'q'l's' croître +SFX wV croître crussions/n'q'l' croître +SFX wV croître crussiez/n'q'l' croître +SFX wV croître crussent/n'q'l's' croître +SFX wV croître crois/n'l'm' croître +SFX wV croître croissons/n'l' croître +SFX wV croître croissez/n'l'm' croître + +SFX xA N 42 +SFX xA roire royant croire +SFX xA roire ru croire +SFX xA roire rus croire +SFX xA roire rue croire +SFX xA roire rues croire +SFX xA roire rois croire +SFX xA roire roit croire +SFX xA roire royons croire +SFX xA roire royez croire +SFX xA roire roient croire +SFX xA roire royais croire +SFX xA roire royait croire +SFX xA roire royions croire +SFX xA roire royiez croire +SFX xA roire royaient croire +SFX xA roire rus croire +SFX xA roire rut croire +SFX xA roire rûmes croire +SFX xA roire rûtes croire +SFX xA roire rurent croire +SFX xA roire roirai croire +SFX xA roire roiras croire +SFX xA roire roira croire +SFX xA roire roirons croire +SFX xA roire roirez croire +SFX xA roire roiront croire +SFX xA roire roirais croire +SFX xA roire roirait croire +SFX xA roire roirions croire +SFX xA roire roiriez croire +SFX xA roire roiraient croire +SFX xA roire roie croire +SFX xA roire roies croire +SFX xA roire russe croire +SFX xA roire russes croire +SFX xA roire rût croire +SFX xA roire russions croire +SFX xA roire russiez croire +SFX xA roire russent croire +SFX xA roire rois croire +SFX xA roire royons croire +SFX xA roire royez croire + +SFX xC N 42 +SFX xC oire uvant boire +SFX xC oire u boire +SFX xC oire us boire +SFX xC oire ue boire +SFX xC oire ues boire +SFX xC oire ois boire +SFX xC oire oit boire +SFX xC oire uvons boire +SFX xC oire uvez boire +SFX xC oire oivent boire +SFX xC oire uvais boire +SFX xC oire uvait boire +SFX xC oire uvions boire +SFX xC oire uviez boire +SFX xC oire uvaient boire +SFX xC oire us boire +SFX xC oire ut boire +SFX xC oire ûmes boire +SFX xC oire ûtes boire +SFX xC oire urent boire +SFX xC oire oirai boire +SFX xC oire oiras boire +SFX xC oire oira boire +SFX xC oire oirons boire +SFX xC oire oirez boire +SFX xC oire oiront boire +SFX xC oire oirais boire +SFX xC oire oirait boire +SFX xC oire oirions boire +SFX xC oire oiriez boire +SFX xC oire oiraient boire +SFX xC oire oive boire +SFX xC oire oives boire +SFX xC oire usse boire +SFX xC oire usses boire +SFX xC oire ût boire +SFX xC oire ussions boire +SFX xC oire ussiez boire +SFX xC oire ussent boire +SFX xC oire ois boire +SFX xC oire uvons boire +SFX xC oire uvez boire + +SFX xD Y 43 +SFX xD boire boire/m't's' boire +SFX xD boire buvant/m't's' boire +SFX xD boire bu boire +SFX xD boire bus boire +SFX xD boire bue boire +SFX xD boire bues boire +SFX xD boire bois/m't' boire +SFX xD boire boit/s' boire +SFX xD boire buvons boire +SFX xD boire buvez boire +SFX xD boire boivent/s' boire +SFX xD boire buvais/m't' boire +SFX xD boire buvait/s' boire +SFX xD boire buvions boire +SFX xD boire buviez boire +SFX xD boire buvaient/s' boire +SFX xD boire bus/m't' boire +SFX xD boire but/s' boire +SFX xD boire bûmes boire +SFX xD boire bûtes boire +SFX xD boire burent/s' boire +SFX xD boire boirai/m' boire +SFX xD boire boiras/t' boire +SFX xD boire boira/s' boire +SFX xD boire boirons boire +SFX xD boire boirez boire +SFX xD boire boiront/s' boire +SFX xD boire boirais/m't' boire +SFX xD boire boirait/s' boire +SFX xD boire boirions boire +SFX xD boire boiriez boire +SFX xD boire boiraient/s' boire +SFX xD boire boive/m's' boire +SFX xD boire boives/t' boire +SFX xD boire busse/m' boire +SFX xD boire busses/t' boire +SFX xD boire bût/s' boire +SFX xD boire bussions boire +SFX xD boire bussiez boire +SFX xD boire bussent/s' boire +SFX xD boire bois/t' boire +SFX xD boire buvons boire +SFX xD boire buvez boire + +SFX xJ N 3 +SFX xJ clure clus clure +SFX xJ clure cluse clure +SFX xJ clure cluses clure + +SFX xK Y 40 +SFX xK clure clure/n'q'd'l'm't's' clure +SFX xK clure cluant/n'q'l'm't's' clure +SFX xK clure clus/L'D'Q' clure +SFX xK clure cluse/L'D'Q' clure +SFX xK clure cluses/D'Q' clure +SFX xK clure clus/n'q'j'l' clure +SFX xK clure clut/n'q'l' clure +SFX xK clure cluons/n'q'l' clure +SFX xK clure cluez/n'q'l' clure +SFX xK clure cluent/n'q'l' clure +SFX xK clure cluais/n'q'j'l' clure +SFX xK clure cluait/n'q'l' clure +SFX xK clure cluions/n'q'l' clure +SFX xK clure cluiez/n'q'l' clure +SFX xK clure cluaient/n'q'l' clure +SFX xK clure clûmes/n'q'l' clure +SFX xK clure clûtes/n'q'l' clure +SFX xK clure clurent/n'q'l' clure +SFX xK clure clurai/n'q'j'l' clure +SFX xK clure cluras/n'q'l' clure +SFX xK clure clura/n'q'l' clure +SFX xK clure clurons/n'q'l' clure +SFX xK clure clurez/n'q'l' clure +SFX xK clure cluront/n'q'l' clure +SFX xK clure clurais/n'q'j'l' clure +SFX xK clure clurait/n'q'l' clure +SFX xK clure clurions/n'q'l' clure +SFX xK clure cluriez/n'q'l' clure +SFX xK clure cluraient/n'q'l' clure +SFX xK clure clue/n'q'j'l' clure +SFX xK clure clues/n'q'l' clure +SFX xK clure clusse/n'q'j'l' clure +SFX xK clure clusses/n'q'l' clure +SFX xK clure clût/n'q'l' clure +SFX xK clure clussions/n'q'l' clure +SFX xK clure clussiez/n'q'l' clure +SFX xK clure clussent/n'q'l' clure +SFX xK clure clus/n'l' clure +SFX xK clure cluons/n'l' clure +SFX xK clure cluez/n'l' clure + +SFX xL Y 44 +SFX xL clure clure/n'q'd'l'm't's' clure +SFX xL clure cluant/n'q'l'm't's' clure +SFX xL clure clus/L'D'Q' inclure +SFX xL clure cluse/L'D'Q' inclure +SFX xL clure cluses/D'Q' inclure +SFX xL clure clu/L'D'Q' [eo].clure +SFX xL clure clus/D'Q' [eo].clure +SFX xL clure clue/L'D'Q' [eo].clure +SFX xL clure clues/D'Q' [eo].clure +SFX xL clure clus/n'q'j'l'm't' clure +SFX xL clure clut/n'q'l'm't's' clure +SFX xL clure cluons/n'q'l't' clure +SFX xL clure cluez/n'q'l'm' clure +SFX xL clure cluent/n'q'l'm't's' clure +SFX xL clure cluais/n'q'j'l'm't' clure +SFX xL clure cluait/n'q'l'm't's' clure +SFX xL clure cluions/n'q'l't' clure +SFX xL clure cluiez/n'q'l'm' clure +SFX xL clure cluaient/n'q'l'm't's' clure +SFX xL clure clûmes/n'q'l't' clure +SFX xL clure clûtes/n'q'l'm' clure +SFX xL clure clurent/n'q'l'm't's' clure +SFX xL clure clurai/n'q'j'l'm't' clure +SFX xL clure cluras/n'q'l'm't' clure +SFX xL clure clura/n'q'l'm't's' clure +SFX xL clure clurons/n'q'l't' clure +SFX xL clure clurez/n'q'l'm' clure +SFX xL clure cluront/n'q'l'm't's' clure +SFX xL clure clurais/n'q'j'l'm't' clure +SFX xL clure clurait/n'q'l'm't's' clure +SFX xL clure clurions/n'q'l't' clure +SFX xL clure cluriez/n'q'l'm' clure +SFX xL clure cluraient/n'q'l'm't's' clure +SFX xL clure clue/n'q'j'l'm't's' clure +SFX xL clure clues/n'l'm't' clure +SFX xL clure clusse/n'q'j'l'm't' clure +SFX xL clure clusses/n'q'l'm't' clure +SFX xL clure clût/n'q'l'm't's' clure +SFX xL clure clussions/n'q'l't' clure +SFX xL clure clussiez/n'q'l'm' clure +SFX xL clure clussent/n'q'l'm't's' clure +SFX xL clure clus/n'l'm't' clure +SFX xL clure cluons/n'l' clure +SFX xL clure cluez/n'l'm' clure + +SFX xM N 14 +SFX xM ourdre ourdant sourdre +SFX xM ourdre ourd sourdre +SFX xM ourdre ourdent sourdre +SFX xM ourdre ourdait sourdre +SFX xM ourdre ourdaient sourdre +SFX xM ourdre ourdit sourdre +SFX xM ourdre ourdirent sourdre +SFX xM ourdre ourdra sourdre +SFX xM ourdre ourdront sourdre +SFX xM ourdre ourdrait sourdre +SFX xM ourdre ourdraient sourdre +SFX xM ourdre ourde sourdre +SFX xM ourdre ourdît sourdre +SFX xM ourdre ourdissent sourdre + +SFX xN Y 46 +SFX xN soudre soudre/n'q'd'l'm't's' soudre +SFX xN soudre solvant/n'q'l'm't's' soudre +SFX xN soudre solu résoudre +SFX xN soudre solus résoudre +SFX xN soudre solue résoudre +SFX xN soudre solues résoudre +SFX xN soudre sous/L'D'Q' soudre +SFX xN soudre soute/L'D'Q' soudre +SFX xN soudre soutes/D'Q' soudre +SFX xN soudre sous/n'q'j'l'm't' soudre +SFX xN soudre sout/n'q'l'm't's' soudre +SFX xN soudre solvons/n'q'l't' soudre +SFX xN soudre solvez/n'q'l'm' soudre +SFX xN soudre solvent/n'q'l'm't's' soudre +SFX xN soudre solvais/n'q'j'l'm't' soudre +SFX xN soudre solvait/n'q'l'm't's' soudre +SFX xN soudre solvions/n'q'l't' soudre +SFX xN soudre solviez/n'q'l'm' soudre +SFX xN soudre solvaient/n'q'l'm't's' soudre +SFX xN soudre solus/n'q'j'l'm't' soudre +SFX xN soudre solut/n'q'l'm't's' soudre +SFX xN soudre solûmes/n'q'l't' soudre +SFX xN soudre solûtes/n'q'l'm' soudre +SFX xN soudre solurent/n'q'l'm't's' soudre +SFX xN soudre soudrai/n'q'j'l'm't' soudre +SFX xN soudre soudras/n'q'l'm't' soudre +SFX xN soudre soudra/n'q'l'm't's' soudre +SFX xN soudre soudrons/n'q'l't' soudre +SFX xN soudre soudrez/n'q'l'm' soudre +SFX xN soudre soudront/n'q'l'm't's' soudre +SFX xN soudre soudrais/n'q'j'l'm't' soudre +SFX xN soudre soudrait/n'q'l'm't's' soudre +SFX xN soudre soudrions/n'q'l't' soudre +SFX xN soudre soudriez/n'q'l'm' soudre +SFX xN soudre soudraient/n'q'l'm't's' soudre +SFX xN soudre solve/n'q'j'l'm't's' soudre +SFX xN soudre solves/n'l'm't' soudre +SFX xN soudre solusse/n'q'j'l'm't' soudre +SFX xN soudre solusses/n'q'l'm't' soudre +SFX xN soudre solût/n'q'l'm't's' soudre +SFX xN soudre solussions/n'q'l't' soudre +SFX xN soudre solussiez/n'q'l'm' soudre +SFX xN soudre solussent/n'q'l'm't's' soudre +SFX xN soudre sous/n'l'm' soudre +SFX xN soudre solvons/n'l' soudre +SFX xN soudre solvez/n'l'm' soudre + +SFX xO N 42 +SFX xO oudre ousant coudre +SFX xO oudre ousu coudre +SFX xO oudre ousus coudre +SFX xO oudre ousue coudre +SFX xO oudre ousues coudre +SFX xO oudre ouds coudre +SFX xO oudre oud coudre +SFX xO oudre ousons coudre +SFX xO oudre ousez coudre +SFX xO oudre ousent coudre +SFX xO oudre ousais coudre +SFX xO oudre ousait coudre +SFX xO oudre ousions coudre +SFX xO oudre ousiez coudre +SFX xO oudre ousaient coudre +SFX xO oudre ousis coudre +SFX xO oudre ousit coudre +SFX xO oudre ousîmes coudre +SFX xO oudre ousîtes coudre +SFX xO oudre ousirent coudre +SFX xO oudre oudrai coudre +SFX xO oudre oudras coudre +SFX xO oudre oudra coudre +SFX xO oudre oudrons coudre +SFX xO oudre oudrez coudre +SFX xO oudre oudront coudre +SFX xO oudre oudrais coudre +SFX xO oudre oudrait coudre +SFX xO oudre oudrions coudre +SFX xO oudre oudriez coudre +SFX xO oudre oudraient coudre +SFX xO oudre ouse coudre +SFX xO oudre ouses coudre +SFX xO oudre ousisse coudre +SFX xO oudre ousisses coudre +SFX xO oudre ousît coudre +SFX xO oudre ousissions coudre +SFX xO oudre ousissiez coudre +SFX xO oudre ousissent coudre +SFX xO oudre ouds coudre +SFX xO oudre ousons coudre +SFX xO oudre ousez coudre + +SFX xP Y 43 +SFX xP oudre oudre/n'q'd'l' moudre +SFX xP oudre oulant/n'q'l' moudre +SFX xP oudre oulu/L'D'Q' moudre +SFX xP oudre oulus/D'Q' moudre +SFX xP oudre oulue/L'D'Q' moudre +SFX xP oudre oulues/D'Q' moudre +SFX xP oudre ouds/n'q'l' moudre +SFX xP oudre oud/n'q'l' moudre +SFX xP oudre oulons/n'q'l' moudre +SFX xP oudre oulez/n'q'l' moudre +SFX xP oudre oulent/n'q'l' moudre +SFX xP oudre oulais/n'q'l' moudre +SFX xP oudre oulait/n'q'l' moudre +SFX xP oudre oulions/n'q'l' moudre +SFX xP oudre ouliez/n'q'l' moudre +SFX xP oudre oulaient/n'q'l' moudre +SFX xP oudre oulus/n'q'l' moudre +SFX xP oudre oulut/n'q'l' moudre +SFX xP oudre oulûmes/n'q'l' moudre +SFX xP oudre oulûtes/n'q'l' moudre +SFX xP oudre oulurent/n'q'l' moudre +SFX xP oudre oudrai/n'q'l' moudre +SFX xP oudre oudras/n'q'l' moudre +SFX xP oudre oudra/n'q'l' moudre +SFX xP oudre oudrons/n'q'l' moudre +SFX xP oudre oudrez/n'q'l' moudre +SFX xP oudre oudront/n'q'l' moudre +SFX xP oudre oudrais/n'q'l' moudre +SFX xP oudre oudrait/n'q'l' moudre +SFX xP oudre oudrions/n'q'l' moudre +SFX xP oudre oudriez/n'q'l' moudre +SFX xP oudre oudraient/n'q'l' moudre +SFX xP oudre oule/n'q'l' moudre +SFX xP oudre oules/n'l' moudre +SFX xP oudre oulusse/n'q'l' moudre +SFX xP oudre oulusses/n'q'l' moudre +SFX xP oudre oulût/n'q'l' moudre +SFX xP oudre oulussions/n'q'l' moudre +SFX xP oudre oulussiez/n'q'l' moudre +SFX xP oudre oulussent/n'q'l' moudre +SFX xP oudre ouds/n'l'm' moudre +SFX xP oudre oulons/n'l' moudre +SFX xP oudre oulez/n'l'm' moudre + +SFX xQ N 42 +SFX xQ uivre uivant suivre +SFX xQ uivre uivi suivre +SFX xQ uivre uivis suivre +SFX xQ uivre uivie suivre +SFX xQ uivre uivies suivre +SFX xQ uivre uis suivre +SFX xQ uivre uit suivre +SFX xQ uivre uivons suivre +SFX xQ uivre uivez suivre +SFX xQ uivre uivent suivre +SFX xQ uivre uivais suivre +SFX xQ uivre uivait suivre +SFX xQ uivre uivions suivre +SFX xQ uivre uiviez suivre +SFX xQ uivre uivaient suivre +SFX xQ uivre uivis suivre +SFX xQ uivre uivit suivre +SFX xQ uivre uivîmes suivre +SFX xQ uivre uivîtes suivre +SFX xQ uivre uivirent suivre +SFX xQ uivre uivrai suivre +SFX xQ uivre uivras suivre +SFX xQ uivre uivra suivre +SFX xQ uivre uivrons suivre +SFX xQ uivre uivrez suivre +SFX xQ uivre uivront suivre +SFX xQ uivre uivrais suivre +SFX xQ uivre uivrait suivre +SFX xQ uivre uivrions suivre +SFX xQ uivre uivriez suivre +SFX xQ uivre uivraient suivre +SFX xQ uivre uive suivre +SFX xQ uivre uives suivre +SFX xQ uivre uivisse suivre +SFX xQ uivre uivisses suivre +SFX xQ uivre uivît suivre +SFX xQ uivre uivissions suivre +SFX xQ uivre uivissiez suivre +SFX xQ uivre uivissent suivre +SFX xQ uivre uis suivre +SFX xQ uivre uivons suivre +SFX xQ uivre uivez suivre + +SFX xR Y 16 +SFX xR suivre suivre/s' suivre +SFX xR suivre suivant/s' suivre +SFX xR suivre suivi suivre +SFX xR suivre suit/s' suivre +SFX xR suivre suivent/s' suivre +SFX xR suivre suivait/s' suivre +SFX xR suivre suivaient/s' suivre +SFX xR suivre suivit/s' suivre +SFX xR suivre suivirent/s' suivre +SFX xR suivre suivra/s' suivre +SFX xR suivre suivront/s' suivre +SFX xR suivre suivrait/s' suivre +SFX xR suivre suivraient/s' suivre +SFX xR suivre suive/s' suivre +SFX xR suivre suivît/s' suivre +SFX xR suivre suivissent/s' suivre + +SFX xS N 38 +SFX xS ivre ivant vivre +SFX xS ivre is vivre +SFX xS ivre it vivre +SFX xS ivre ivons vivre +SFX xS ivre ivez vivre +SFX xS ivre ivent vivre +SFX xS ivre ivais vivre +SFX xS ivre ivait vivre +SFX xS ivre ivions vivre +SFX xS ivre iviez vivre +SFX xS ivre ivaient vivre +SFX xS ivre écus vivre +SFX xS ivre écut vivre +SFX xS ivre écûmes vivre +SFX xS ivre écûtes vivre +SFX xS ivre écurent vivre +SFX xS ivre ivrai vivre +SFX xS ivre ivras vivre +SFX xS ivre ivra vivre +SFX xS ivre ivrons vivre +SFX xS ivre ivrez vivre +SFX xS ivre ivront vivre +SFX xS ivre ivrais vivre +SFX xS ivre ivrait vivre +SFX xS ivre ivrions vivre +SFX xS ivre ivriez vivre +SFX xS ivre ivraient vivre +SFX xS ivre ive vivre +SFX xS ivre ives vivre +SFX xS ivre écusse vivre +SFX xS ivre écusses vivre +SFX xS ivre écût vivre +SFX xS ivre écussions vivre +SFX xS ivre écussiez vivre +SFX xS ivre écussent vivre +SFX xS ivre is vivre +SFX xS ivre ivons vivre +SFX xS ivre ivez vivre + +SFX y1 Y 43 +SFX y1 crire crire/n'q'd'l'm't's' crire +SFX y1 crire crivant/n'q'l'm't's' crire +SFX y1 crire crit/L'D'Q' crire +SFX y1 crire crits/D'Q' crire +SFX y1 crire crite/L'D'Q' crire +SFX y1 crire crites/D'Q' crire +SFX y1 crire cris/n'q'j'l'm't' crire +SFX y1 crire crit/n'q'l'm't's' crire +SFX y1 crire crivons/n'q'l't' crire +SFX y1 crire crivez/n'q'l'm' crire +SFX y1 crire crivent/n'q'l'm't's' crire +SFX y1 crire crivais/n'q'j'l'm't' crire +SFX y1 crire crivait/n'q'l'm't's' crire +SFX y1 crire crivions/n'q'l't' crire +SFX y1 crire criviez/n'q'l'm' crire +SFX y1 crire crivaient/n'q'l'm't's' crire +SFX y1 crire crivis/n'q'j'l'm't' crire +SFX y1 crire crivit/n'q'l'm't's' crire +SFX y1 crire crivîmes/n'q'l't' crire +SFX y1 crire crivîtes/n'q'l'm' crire +SFX y1 crire crivirent/n'q'l'm't's' crire +SFX y1 crire crirai/n'q'j'l'm't' crire +SFX y1 crire criras/n'q'l'm't' crire +SFX y1 crire crira/n'q'l'm't's' crire +SFX y1 crire crirons/n'q'l't' crire +SFX y1 crire crirez/n'q'l'm' crire +SFX y1 crire criront/n'q'l'm't's' crire +SFX y1 crire crirais/n'q'j'l'm't' crire +SFX y1 crire crirait/n'q'l'm't's' crire +SFX y1 crire cririons/n'q'l't' crire +SFX y1 crire cririez/n'q'l'm' crire +SFX y1 crire criraient/n'q'l'm't's' crire +SFX y1 crire crive/n'q'j'l'm't's' crire +SFX y1 crire crives/n'l'm't' crire +SFX y1 crire crivisse/n'q'j'l'm't' crire +SFX y1 crire crivisses/n'q'l'm't' crire +SFX y1 crire crivît/n'q'l'm't's' crire +SFX y1 crire crivissions/n'q'l't' crire +SFX y1 crire crivissiez/n'q'l'm' crire +SFX y1 crire crivissent/n'q'l'm't's' crire +SFX y1 crire cris/n'l'm't' crire +SFX y1 crire crivons/n'l' crire +SFX y1 crire crivez/n'l'm' crire + +SFX yA N 42 +SFX yA ire isant lire +SFX yA ire u lire +SFX yA ire us lire +SFX yA ire ue lire +SFX yA ire ues lire +SFX yA ire is lire +SFX yA ire it lire +SFX yA ire isons lire +SFX yA ire isez lire +SFX yA ire isent lire +SFX yA ire isais lire +SFX yA ire isait lire +SFX yA ire isions lire +SFX yA ire isiez lire +SFX yA ire isaient lire +SFX yA ire us lire +SFX yA ire ut lire +SFX yA ire ûmes lire +SFX yA ire ûtes lire +SFX yA ire urent lire +SFX yA ire irai lire +SFX yA ire iras lire +SFX yA ire ira lire +SFX yA ire irons lire +SFX yA ire irez lire +SFX yA ire iront lire +SFX yA ire irais lire +SFX yA ire irait lire +SFX yA ire irions lire +SFX yA ire iriez lire +SFX yA ire iraient lire +SFX yA ire ise lire +SFX yA ire ises lire +SFX yA ire usse lire +SFX yA ire usses lire +SFX yA ire ût lire +SFX yA ire ussions lire +SFX yA ire ussiez lire +SFX yA ire ussent lire +SFX yA ire is lire +SFX yA ire isons lire +SFX yA ire isez lire + +SFX yB Y 43 +SFX yB lire lire/n'q'd'l'm't's' lire +SFX yB lire lisant/n'q'l'm't's' lire +SFX yB lire lu/L'D'Q' lire +SFX yB lire lus/D'Q' lire +SFX yB lire lue/L'D'Q' lire +SFX yB lire lues/D'Q' lire +SFX yB lire lis/n'q'j'l'm't' lire +SFX yB lire lit/n'q'l'm't's' lire +SFX yB lire lisons/n'q'l't' lire +SFX yB lire lisez/n'q'l'm' lire +SFX yB lire lisent/n'q'l'm't's' lire +SFX yB lire lisais/n'q'j'l'm't' lire +SFX yB lire lisait/n'q'l'm't's' lire +SFX yB lire lisions/n'q'l't' lire +SFX yB lire lisiez/n'q'l'm' lire +SFX yB lire lisaient/n'q'l'm't's' lire +SFX yB lire lus/n'q'j'l'm't' lire +SFX yB lire lut/n'q'l'm't's' lire +SFX yB lire lûmes/n'q'l't' lire +SFX yB lire lûtes/n'q'l'm' lire +SFX yB lire lurent/n'q'l'm't's' lire +SFX yB lire lirai/n'q'j'l'm't' lire +SFX yB lire liras/n'q'l'm't' lire +SFX yB lire lira/n'q'l'm't's' lire +SFX yB lire lirons/n'q'l't' lire +SFX yB lire lirez/n'q'l'm' lire +SFX yB lire liront/n'q'l'm't's' lire +SFX yB lire lirais/n'q'j'l'm't' lire +SFX yB lire lirait/n'q'l'm't's' lire +SFX yB lire lirions/n'q'l't' lire +SFX yB lire liriez/n'q'l'm' lire +SFX yB lire liraient/n'q'l'm't's' lire +SFX yB lire lise/n'q'j'l'm't's' lire +SFX yB lire lises/n'l'm't' lire +SFX yB lire lusse/n'q'j'l'm't' lire +SFX yB lire lusses/n'q'l'm't' lire +SFX yB lire lût/n'q'l'm't's' lire +SFX yB lire lussions/n'q'l't' lire +SFX yB lire lussiez/n'q'l'm' lire +SFX yB lire lussent/n'q'l'm't's' lire +SFX yB lire lis/n'l'm' lire +SFX yB lire lisons/n'l' lire +SFX yB lire lisez/n'l'm' lire + +SFX yC N 40 +SFX yC ire isant dire +SFX yC ire it dire +SFX yC ire its dire +SFX yC ire ite dire +SFX yC ire ites dire +SFX yC ire is dire +SFX yC ire it dire +SFX yC ire isons dire +SFX yC ire ites dire +SFX yC ire isent dire +SFX yC ire isais dire +SFX yC ire isait dire +SFX yC ire isions dire +SFX yC ire isiez dire +SFX yC ire isaient dire +SFX yC ire îmes dire +SFX yC ire îtes dire +SFX yC ire irent dire +SFX yC ire irai dire +SFX yC ire iras dire +SFX yC ire ira dire +SFX yC ire irons dire +SFX yC ire irez dire +SFX yC ire iront dire +SFX yC ire irais dire +SFX yC ire irait dire +SFX yC ire irions dire +SFX yC ire iriez dire +SFX yC ire iraient dire +SFX yC ire ise dire +SFX yC ire ises dire +SFX yC ire isse dire +SFX yC ire isses dire +SFX yC ire ît dire +SFX yC ire issions dire +SFX yC ire issiez dire +SFX yC ire issent dire +SFX yC ire is dire +SFX yC ire isons dire +SFX yC ire ites dire + +SFX yD Y 41 +SFX yD dire dire/n'q'd'l'm't's' dire +SFX yD dire disant/n'q'l'm't's' dire +SFX yD dire dit/L'D'Q' dire +SFX yD dire dits/D'Q' dire +SFX yD dire dite/L'D'Q' dire +SFX yD dire dites/D'Q' dire +SFX yD dire dis/n'q'j'l'm't' dire +SFX yD dire dit/n'q'l'm't's' dire +SFX yD dire disons/n'q'l't' dire +SFX yD dire disez/n'q'l'm' dire +SFX yD dire disent/n'q'l'm't's' dire +SFX yD dire disais/n'q'j'l'm't' dire +SFX yD dire disait/n'q'l'm't's' dire +SFX yD dire disions/n'q'l't' dire +SFX yD dire disiez/n'q'l'm' dire +SFX yD dire disaient/n'q'l'm't's' dire +SFX yD dire dîmes/n'q'l't' dire +SFX yD dire dîtes/n'q'l'm' dire +SFX yD dire dirent/n'q'l'm't's' dire +SFX yD dire dirai/n'q'j'l'm't' dire +SFX yD dire diras/n'q'l'm't' dire +SFX yD dire dira/n'q'l'm't's' dire +SFX yD dire dirons/n'q'l't' dire +SFX yD dire direz/n'q'l'm' dire +SFX yD dire diront/n'q'l'm't's' dire +SFX yD dire dirais/n'q'j'l'm't' dire +SFX yD dire dirait/n'q'l'm't's' dire +SFX yD dire dirions/n'q'l't' dire +SFX yD dire diriez/n'q'l'm' dire +SFX yD dire diraient/n'q'l'm't's' dire +SFX yD dire dise/n'q'j'l'm't's' dire +SFX yD dire dises/n'l'm't' dire +SFX yD dire disse/n'q'j'l'm't' dire +SFX yD dire disses/n'q'l'm't' dire +SFX yD dire dît/n'q'l'm't's' dire +SFX yD dire dissions/n'q'l't' dire +SFX yD dire dissiez/n'q'l'm' dire +SFX yD dire dissent/n'q'l'm't's' dire +SFX yD dire dis/n'l'm't' dire +SFX yD dire disons/n'l' dire +SFX yD dire disez/n'l'm' dire + +SFX yE N 37 +SFX yE édire édisant édire +SFX yE édire édit édire +SFX yE édire édis édire +SFX yE édire édit édire +SFX yE édire édisons édire +SFX yE édire édisez édire +SFX yE édire édisent édire +SFX yE édire édisais édire +SFX yE édire édisait édire +SFX yE édire édisions édire +SFX yE édire édisiez édire +SFX yE édire édisaient édire +SFX yE édire édîmes édire +SFX yE édire édîtes édire +SFX yE édire édirent édire +SFX yE édire édirai édire +SFX yE édire édiras édire +SFX yE édire édira édire +SFX yE édire édirons édire +SFX yE édire édirez édire +SFX yE édire édiront édire +SFX yE édire édirais édire +SFX yE édire édirait édire +SFX yE édire édirions édire +SFX yE édire édiriez édire +SFX yE édire édiraient édire +SFX yE édire édise édire +SFX yE édire édises édire +SFX yE édire édisse édire +SFX yE édire édisses édire +SFX yE édire édît édire +SFX yE édire édissions édire +SFX yE édire édissiez édire +SFX yE édire édissent édire +SFX yE édire édis édire +SFX yE édire édisons édire +SFX yE édire édisez édire + +SFX yF N 36 +SFX yF audire audissant udire +SFX yF audire audit udire +SFX yF audire audits udire +SFX yF audire audite udire +SFX yF audire audites udire +SFX yF audire audis udire +SFX yF audire audit udire +SFX yF audire audissons udire +SFX yF audire audissez udire +SFX yF audire audissent udire +SFX yF audire audissais udire +SFX yF audire audissait udire +SFX yF audire audissions udire +SFX yF audire audissiez udire +SFX yF audire audissaient udire +SFX yF audire audîmes udire +SFX yF audire audîtes udire +SFX yF audire audirent udire +SFX yF audire audirai udire +SFX yF audire audiras udire +SFX yF audire audira udire +SFX yF audire audirons udire +SFX yF audire audirez udire +SFX yF audire audiront udire +SFX yF audire audirais udire +SFX yF audire audirait udire +SFX yF audire audirions udire +SFX yF audire audiriez udire +SFX yF audire audiraient udire +SFX yF audire audisse udire +SFX yF audire audisses udire +SFX yF audire audisse udire +SFX yF audire audît udire +SFX yF audire audis udire +SFX yF audire audissons udire +SFX yF audire audissez udire + +SFX yG Y 38 +SFX yG dire dire/m't's' dire +SFX yG dire disant/m't's' dire +SFX yG dire dit dire +SFX yG dire dis/m't' dire +SFX yG dire dit/s' dire +SFX yG dire disons dire +SFX yG dire disez dire +SFX yG dire disent/s' dire +SFX yG dire disais/m't' dire +SFX yG dire disait/s' dire +SFX yG dire disions dire +SFX yG dire disiez dire +SFX yG dire disaient/s' dire +SFX yG dire dîmes dire +SFX yG dire dîtes dire +SFX yG dire dirent/s' dire +SFX yG dire dirai/m' dire +SFX yG dire diras/t' dire +SFX yG dire dira/s' dire +SFX yG dire dirons dire +SFX yG dire direz dire +SFX yG dire diront/s' dire +SFX yG dire dirais/m't' dire +SFX yG dire dirait/s' dire +SFX yG dire dirions dire +SFX yG dire diriez dire +SFX yG dire diraient/s' dire +SFX yG dire dise/m's' dire +SFX yG dire dises/t' dire +SFX yG dire disse/m' dire +SFX yG dire disses/t' dire +SFX yG dire dît/s' dire +SFX yG dire dissions dire +SFX yG dire dissiez dire +SFX yG dire dissent/s' dire +SFX yG dire dis/t' dire +SFX yG dire disons dire +SFX yG dire disez dire + +SFX yJ N 7 +SFX yJ ruire ruissant uire +SFX yJ ruire rui uire +SFX yJ ruire ruit uire +SFX yJ ruire ruissent uire +SFX yJ ruire ruissait uire +SFX yJ ruire ruissaient uire +SFX yJ ruire ruisse uire + +SFX yK N 4 +SFX yK bduire bduit uire +SFX yK bduire bduits uire +SFX yK bduire bduite uire +SFX yK bduire bduites uire + +SFX yL Y 43 +SFX yL uire uire/n'q'd'l'm't's' uire +SFX yL uire uisant/n'q'l'm't's' uire +SFX yL uire uit/L'D'Q' uire +SFX yL uire uits/D'Q' uire +SFX yL uire uite/L'D'Q' uire +SFX yL uire uites/D'Q' uire +SFX yL uire uis/n'q'j'l'm't' uire +SFX yL uire uit/n'q'l'm't's' uire +SFX yL uire uisons/n'q'l't' uire +SFX yL uire uisez/n'q'l'm' uire +SFX yL uire uisent/n'q'l'm't's' uire +SFX yL uire uisais/n'q'j'l'm't' uire +SFX yL uire uisait/n'q'l'm't's' uire +SFX yL uire uisions/n'q'l't' uire +SFX yL uire uisiez/n'q'l'm' uire +SFX yL uire uisaient/n'q'l'm't's' uire +SFX yL uire uisis/n'q'j'l'm't' uire +SFX yL uire uisit/n'q'l'm't's' uire +SFX yL uire uisîmes/n'q'l't' uire +SFX yL uire uisîtes/n'q'l'm' uire +SFX yL uire uisirent/n'q'l'm't's' uire +SFX yL uire uirai/n'q'j'l't' uire +SFX yL uire uiras/n'q'l'm' uire +SFX yL uire uira/n'q'l'm't's' uire +SFX yL uire uirons/n'q'l't' uire +SFX yL uire uirez/n'q'l'm' uire +SFX yL uire uiront/n'q'l'm't's' uire +SFX yL uire uirais/n'q'j'l'm't' uire +SFX yL uire uirait/n'q'l'm't's' uire +SFX yL uire uirions/n'q'l't' uire +SFX yL uire uiriez/n'q'l'm' uire +SFX yL uire uiraient/n'q'l'm't's' uire +SFX yL uire uise/n'q'j'l'm't's' uire +SFX yL uire uises/n'l'm' uire +SFX yL uire uisisse/n'q'j'l't' uire +SFX yL uire uisisses/n'q'l'm' uire +SFX yL uire uisît/n'q'l'm't's' uire +SFX yL uire uisissions/n'q'l't' uire +SFX yL uire uisissiez/n'q'l'm' uire +SFX yL uire uisissent/n'q'l'm't's' uire +SFX yL uire uis/n'l'm' uire +SFX yL uire uisons/n'l' uire +SFX yL uire uisez/n'l'm' uire + +SFX yM Y 43 +SFX yM uire uire/n'q'd'l'm't's' uire +SFX yM uire uisant/n'q'l'm't's' uire +SFX yM uire uit/L'D'Q' uire +SFX yM uire uits/D'Q' uire +SFX yM uire uite/L'D'Q' uire +SFX yM uire uites/D'Q' uire +SFX yM uire uis/n'q'j'l'm't' uire +SFX yM uire uit/n'q'l'm't's' uire +SFX yM uire uisons/n'q'l't' uire +SFX yM uire uisez/n'q'l'm' uire +SFX yM uire uisent/n'q'l'm't's' uire +SFX yM uire uisais/n'q'j'l'm't' uire +SFX yM uire uisait/n'q'l'm't's' uire +SFX yM uire uisions/n'q'l't' uire +SFX yM uire uisiez/n'q'l'm' uire +SFX yM uire uisaient/n'q'l'm't's' uire +SFX yM uire uisis/n'q'j'l'm't' uire +SFX yM uire uisit/n'q'l'm't's' uire +SFX yM uire uisîmes/n'q'l't' uire +SFX yM uire uisîtes/n'q'l'm' uire +SFX yM uire uisirent/n'q'l'm't's' uire +SFX yM uire uirai/n'q'j'l'm't' uire +SFX yM uire uiras/n'q'l'm't' uire +SFX yM uire uira/n'q'l'm't's' uire +SFX yM uire uirons/n'q'l't' uire +SFX yM uire uirez/n'q'l'm' uire +SFX yM uire uiront/n'q'l'm't's' uire +SFX yM uire uirais/n'q'j'l'm't' uire +SFX yM uire uirait/n'q'l'm't's' uire +SFX yM uire uirions/n'q'l't' uire +SFX yM uire uiriez/n'q'l'm' uire +SFX yM uire uiraient/n'q'l'm't's' uire +SFX yM uire uise/n'q'j'l'm't's' uire +SFX yM uire uises/n'l'm't' uire +SFX yM uire uisisse/n'q'j'l'm't' uire +SFX yM uire uisisses/n'q'l'm't' uire +SFX yM uire uisît/n'q'l'm't's' uire +SFX yM uire uisissions/n'q'l't' uire +SFX yM uire uisissiez/n'q'l'm' uire +SFX yM uire uisissent/n'q'l'm't's' uire +SFX yM uire uis/n'l'm't' uire +SFX yM uire uisons/n'l' uire +SFX yM uire uisez/n'l'm' uire + +SFX yN Y 33 +SFX yN truire truire/s' uire +SFX yN truire truisant/s' uire +SFX yN truire truit uire +SFX yN truire truits uire +SFX yN truire truite uire +SFX yN truire truites uire +SFX yN truire truit/s' uire +SFX yN truire truisons uire +SFX yN truire truisez uire +SFX yN truire truisent/s' uire +SFX yN truire truisait/s' uire +SFX yN truire truisions uire +SFX yN truire truisiez uire +SFX yN truire truisaient/s' uire +SFX yN truire truisit/s' uire +SFX yN truire truisîmes uire +SFX yN truire truisîtes uire +SFX yN truire truisirent/s' uire +SFX yN truire truira/s' uire +SFX yN truire truirons uire +SFX yN truire truirez uire +SFX yN truire truiront/s' uire +SFX yN truire truirait/s' uire +SFX yN truire truirions uire +SFX yN truire truiriez uire +SFX yN truire truiraient/s' uire +SFX yN truire truise/s' uire +SFX yN truire truisît/s' uire +SFX yN truire truisissions uire +SFX yN truire truisissiez uire +SFX yN truire truisissent/s' uire +SFX yN truire truisons-nous uire +SFX yN truire truisez-vous uire + +SFX yO Y 43 +SFX yO détruire détruire/m't's' détruire +SFX yO détruire détruisant/m't's' détruire +SFX yO détruire détruit détruire +SFX yO détruire détruits détruire +SFX yO détruire détruite détruire +SFX yO détruire détruites détruire +SFX yO détruire détruis/m't' détruire +SFX yO détruire détruit/s' détruire +SFX yO détruire détruisons détruire +SFX yO détruire détruisez détruire +SFX yO détruire détruisent/s' détruire +SFX yO détruire détruisais/m't' détruire +SFX yO détruire détruisait/s' détruire +SFX yO détruire détruisions détruire +SFX yO détruire détruisiez détruire +SFX yO détruire détruisaient/s' détruire +SFX yO détruire détruisis/m't' détruire +SFX yO détruire détruisit/s' détruire +SFX yO détruire détruisîmes détruire +SFX yO détruire détruisîtes détruire +SFX yO détruire détruisirent/s' détruire +SFX yO détruire détruirai/m' détruire +SFX yO détruire détruiras/t' détruire +SFX yO détruire détruira/s' détruire +SFX yO détruire détruirons détruire +SFX yO détruire détruirez détruire +SFX yO détruire détruiront/s' détruire +SFX yO détruire détruirais/m't' détruire +SFX yO détruire détruirait/s' détruire +SFX yO détruire détruirions détruire +SFX yO détruire détruiriez détruire +SFX yO détruire détruiraient/s' détruire +SFX yO détruire détruise/m's' détruire +SFX yO détruire détruises/t' détruire +SFX yO détruire détruisisse/m' détruire +SFX yO détruire détruisisses/t' détruire +SFX yO détruire détruisît/s' détruire +SFX yO détruire détruisissions détruire +SFX yO détruire détruisissiez détruire +SFX yO détruire détruisissent/s' détruire +SFX yO détruire détruis/t' détruire +SFX yO détruire détruisons détruire +SFX yO détruire détruisez détruire + +SFX yU N 39 +SFX yU uire uisant uire +SFX yU uire ui uire +SFX yU uire uis uire +SFX yU uire uit uire +SFX yU uire uisons uire +SFX yU uire uisez uire +SFX yU uire uisent uire +SFX yU uire uisais uire +SFX yU uire uisait uire +SFX yU uire uisions uire +SFX yU uire uisiez uire +SFX yU uire uisaient uire +SFX yU uire uisis uire +SFX yU uire uisit uire +SFX yU uire uisîmes uire +SFX yU uire uisîtes uire +SFX yU uire uisirent uire +SFX yU uire uirai uire +SFX yU uire uiras uire +SFX yU uire uira uire +SFX yU uire uirons uire +SFX yU uire uirez uire +SFX yU uire uiront uire +SFX yU uire uirais uire +SFX yU uire uirait uire +SFX yU uire uirions uire +SFX yU uire uiriez uire +SFX yU uire uiraient uire +SFX yU uire uise uire +SFX yU uire uises uire +SFX yU uire uisisse uire +SFX yU uire uisisses uire +SFX yU uire uisît uire +SFX yU uire uisissions uire +SFX yU uire uisissiez uire +SFX yU uire uisissent uire +SFX yU uire uis uire +SFX yU uire uisons uire +SFX yU uire uisez uire + +SFX yV N 44 +SFX yV ire isant ire +SFX yV ire it nfire +SFX yV ire its nfire +SFX yV ire ite nfire +SFX yV ire ites nfire +SFX yV ire is cire +SFX yV ire ise cire +SFX yV ire ises cire +SFX yV ire i ffire +SFX yV ire is ire +SFX yV ire it ire +SFX yV ire isons ire +SFX yV ire isez ire +SFX yV ire isent ire +SFX yV ire isais ire +SFX yV ire isait ire +SFX yV ire isions ire +SFX yV ire isiez ire +SFX yV ire isaient ire +SFX yV ire îmes ire +SFX yV ire îtes ire +SFX yV ire irent ire +SFX yV ire irai ire +SFX yV ire iras ire +SFX yV ire ira ire +SFX yV ire irons ire +SFX yV ire irez ire +SFX yV ire iront ire +SFX yV ire irais ire +SFX yV ire irait ire +SFX yV ire irions ire +SFX yV ire iriez ire +SFX yV ire iraient ire +SFX yV ire ise ire +SFX yV ire ises ire +SFX yV ire isse ire +SFX yV ire isses ire +SFX yV ire ît ire +SFX yV ire issions ire +SFX yV ire issiez ire +SFX yV ire issent ire +SFX yV ire is ire +SFX yV ire isons ire +SFX yV ire isez ire + +SFX yW N 37 +SFX yW ire iant rire +SFX yW ire i rire +SFX yW ire is rire +SFX yW ire it rire +SFX yW ire ions rire +SFX yW ire iez rire +SFX yW ire ient rire +SFX yW ire iais rire +SFX yW ire iait rire +SFX yW ire iions rire +SFX yW ire iiez rire +SFX yW ire iaient rire +SFX yW ire îmes rire +SFX yW ire îtes rire +SFX yW ire irent rire +SFX yW ire irai rire +SFX yW ire iras rire +SFX yW ire ira rire +SFX yW ire irons rire +SFX yW ire irez rire +SFX yW ire iront rire +SFX yW ire irais rire +SFX yW ire irait rire +SFX yW ire irions rire +SFX yW ire iriez rire +SFX yW ire iraient rire +SFX yW ire ie rire +SFX yW ire ies rire +SFX yW ire isse rire +SFX yW ire isses rire +SFX yW ire ît rire +SFX yW ire issions rire +SFX yW ire issiez rire +SFX yW ire issent rire +SFX yW ire is rire +SFX yW ire ions rire +SFX yW ire iez rire + +SFX yX Y 30 +SFX yX nuire nuire/s' nuire +SFX yX nuire nuisant/s' nuire +SFX yX nuire nui nuire +SFX yX nuire nuit/s' nuire +SFX yX nuire nuisons nuire +SFX yX nuire nuisez nuire +SFX yX nuire nuisent/s' nuire +SFX yX nuire nuisait/s' nuire +SFX yX nuire nuisions nuire +SFX yX nuire nuisiez nuire +SFX yX nuire nuisaient/s' nuire +SFX yX nuire nuisit/s' nuire +SFX yX nuire nuisîmes nuire +SFX yX nuire nuisîtes nuire +SFX yX nuire nuisirent/s' nuire +SFX yX nuire nuira/s' nuire +SFX yX nuire nuirons nuire +SFX yX nuire nuirez nuire +SFX yX nuire nuiront/s' nuire +SFX yX nuire nuirait/s' nuire +SFX yX nuire nuirions nuire +SFX yX nuire nuiriez nuire +SFX yX nuire nuiraient/s' nuire +SFX yX nuire nuise/s' nuire +SFX yX nuire nuisît/s' nuire +SFX yX nuire nuisissions nuire +SFX yX nuire nuisissiez nuire +SFX yX nuire nuisissent/s' nuire +SFX yX nuire nuisons-nous nuire +SFX yX nuire nuisez-vous nuire + +SFX yY Y 4 +SFX yY ccire ccire/n'q'd'l'm't's' occire +SFX yY ccire ccis/L'D'Q' occire +SFX yY ccire ccise/L'D'Q' occire +SFX yY ccire ccises/D'Q' occire + +SFX yZ N 13 +SFX yZ rire risant rire +SFX yZ rire rit rire +SFX yZ rire rits rire +SFX yZ rire rite rire +SFX yZ rire rites rire +SFX yZ rire ris rire +SFX yZ rire rit rire +SFX yZ rire rirai rire +SFX yZ rire riras rire +SFX yZ rire rira rire +SFX yZ rire rirais rire +SFX yZ rire rirait rire +SFX yZ rire ris rire + +SFX q+ Y 32 +SFX q+ enir enu/L'D'Q' enir +SFX q+ enir enus/D'Q' enir +SFX q+ enir enue/L'D'Q' enir +SFX q+ enir enues/D'Q' enir +SFX q+ tir ti/L'D'Q' tir +SFX q+ tir tis/D'Q' tir +SFX q+ tir tie/L'D'Q' tir +SFX q+ tir ties/D'Q' tir +SFX q+ courir couru/L'D'Q' courir +SFX q+ courir courus/D'Q' courir +SFX q+ courir courue/L'D'Q' courir +SFX q+ courir courues/D'Q' courir +SFX q+ ivre écu vivre +SFX q+ ivre écus vivre +SFX q+ ivre écue vivre +SFX q+ ivre écues vivre +SFX q+ aire u aire +SFX q+ aire us aire +SFX q+ aire ue aire +SFX q+ aire ues aire +SFX q+ dre du dre +SFX q+ dre dus dre +SFX q+ dre due dre +SFX q+ dre dues dre +SFX q+ valoir valu .valoir +SFX q+ valoir valus .valoir +SFX q+ valoir value .valoir +SFX q+ valoir values .valoir +SFX q+ aître u/L'D'Q' aître +SFX q+ aître us/D'Q' aître +SFX q+ aître ue/L'D'Q' aître +SFX q+ aître ues/D'Q' aître + +SFX q. Y 8 +SFX q. enir enu/q' enir +SFX q. tir ti/q' tir +SFX q. courir couru/q' courir +SFX q. ivre écu vivre +SFX q. aire u aire +SFX q. dre du dre +SFX q. valoir valu/q' .valoir +SFX q. aître u/q' aître diff --git a/config/Typora/typora-dictionaries/fr.dic b/config/Typora/typora-dictionaries/fr.dic new file mode 100644 index 0000000..fceb88f --- /dev/null +++ b/config/Typora/typora-dictionaries/fr.dic @@ -0,0 +1,80864 @@ +80863 +& +1er/-- +1ers/-- +1re/-- +1res/-- +1ʳᵉ/-- +1ʳᵉˢ/-- +1ᵉʳ/-- +1ᵉʳˢ/-- +2CV +2D +2D +2e/-- +2es +2ᵉ/-- +2ᵉˢ +3D +3D +3RB +3e/-- +3es +3ᵉ/-- +3ᵉˢ +4e/-- +4es +4ᵉ/-- +4ᵉˢ +5e/-- +5es +5ᵉ/-- +5ᵉˢ +6e/-- +6es +6ᵉ/-- +6ᵉˢ +7e/-- +7es +7ᵉ/-- +7ᵉˢ +8e/-- +8es +8ᵉ/-- +8ᵉˢ +9e/-- +9es +9ᵉ/-- +9ᵉˢ +A/U.||-- +Å/||-- +AABA +ABB/L'D'Q' +ABS/L'D'Q' +ADN/L'D'Q' +ADNc/L'D'Q' +ADNmt/L'D'Q' +ADP/L'D'Q' +ADSL/L'D'Q' +AFLP +AFP/L'D'Q' +AG/L'D'Q' +AGRASC/L'D'Q' +AIEA/L'D'Q' +AK-47/L'D'Q' +AMD/L'D'Q' +AMOA/L'D'Q' +ANFR/L'D'Q' +ANR/L'D'Q' +ANTAI/L'D'Q' +AOT/L'D'Q' +APBTeam +API/L'D'Q' +ARIA/L'D'Q' +ARN/L'D'Q' +ARNi +ARNm/L'D'Q' +ARNr/L'D'Q' +ARNt/L'D'Q' +ASBL/L'D'Q' +ASC/L'D'Q' +ASCII/L'D'Q' +ASF/L'D'Q' +ASL/L'D'Q' +ASi +AUD/-- +AVC/L'D'Q' +AXA/L'D'Q' +Aaliyah/L'D'Q' +Aalter/L'D'Q' +Aarhus/L'D'Q' +Aaron/L'D'Q' +Aarschot/L'D'Q' +Aartselaar/L'D'Q' +Abbeville/L'D'Q' +Abbie/L'D'Q' +Abby/L'D'Q' +Abd/L'D'Q' +Abdallah/L'D'Q' +Abdel/L'D'Q' +Abdelaziz/L'D'Q' +Abdelkader/L'D'Q' +Abdelkarim/L'D'Q' +Abdelkrim/L'D'Q' +Abdelli/L'D'Q' +Abdias/L'D'Q' +Abdoul/L'D'Q' +Abdoulaye/L'D'Q' +Abdul/L'D'Q' +Abdullah/L'D'Q' +Abel/L'D'Q' +Abélard/L'D'Q' +Aber-Ildut/L'D'Q' +Abidjan/L'D'Q' +Abigaël/L'D'Q' +Abigail/L'D'Q' +Abitibi-Témiscamingue/L'D' +Abkhazie/L'D' +Aboukir/L'D'Q' +Abraham/L'D'Q' +Abruzzes +Abu/L'D'Q' +Abuja/L'D'Q' +AbulÉdu/L'D'Q' +AbulÉdu-fr/L'D'Q' +Abymes +Abyssinie/L'D' +Acadie/L'D' +Acapulco/L'D'Q' +Accra/L'D'Q' +Acer/L'D'Q' +Achaïe/L'D' +Achères/L'D'Q' +Achernar/L'D'Q' +Achéron/L'D'Q' +Achgabat/L'D'Q' +Achille/L'D'Q' +Aconcagua/L' +Açores +ActivityPub +ActivityStreams +Adalbert/L'D'Q' +Adam/L'D'Q' +Adama/L'D'Q' +Adamov/L'D'Q' +Adams/L'D'Q' +Adana/L'D'Q' +Addis-Abeba/L'D'Q' +Addison/L'D'Q' +Adélaïde/L'D'Q' +Adelbert/L'D'Q' +Adèle/L'D'Q' +Adélie/L'D'Q' +Adelina/L'D'Q' +Adeline/L'D'Q' +Adenauer/L'D'Q' +Adidas/L'D'Q' +Adige/L'D' +Adina/L'D'Q' +Adolf/L'D'Q' +Adolfo/L'D'Q' +Adolphe/L'D'Q' +Adonaï/L'D'Q' +Adonis/L'D'Q' +Adour/L'D' +Adrian/L'D'Q' +Adriana/L'D'Q' +Adriatique/L' +Adrien/L'D'Q' +Adrienne/L'D'Q' +Advanta/L'D'Q' +Aelius/L'D'Q' +Affligem/L'D'Q' +Afghanistan/L'D' +Afnor/L'D'Q' +Afrique/L'D' +Aful/L'D'Q' +Agadir/L'D'Q' +Agamemnon/L'D'Q' +Agatha/L'D'Q' +Agathe/L'D'Q' +Agathon/L'D'Q' +Agboville/L'D'Q' +Agde/L'D'Q' +Agen/L'D'Q' +Aggée/L'D'Q' +Aglaé/L'D'Q' +Agnès/L'D'Q' +Agnieszka/L'D'Q' +Agrippine/L'D'Q' +Agro-Bio +Agrobacterium/L'D'Q' +Agroqualita/L'D'Q' +Ah/||-- +Ahmad/L'D'Q' +Ahmed/L'D'Q' +Ahmedabad/L'D'Q' +Aïcha/L'D'Q' +Aïd/L'D'Q' +Aida/L'D'Q' +Aidan/L'D'Q' +Aïd-el-Adha/L' +Aïd-el-Kébir/L' +Aiden/L'D'Q' +Aignan/L'D'Q' +Aigoual/L'D' +Aigrain/L'D'Q' +Aimé/L'D'Q' +Aimée/L'D'Q' +Ain/L' +Airaines/L'D'Q' +Airbnb/L'D'Q' +Airbus/L'D'Q' +Aires +Aiseau-Presles/L'D'Q' +Aisne/L' +Aïssa/L'D'Q' +Aix/L'D'Q' +Aix-en-Provence/L'D'Q' +Aix-la-Chapelle/L'D'Q' +Aix-les-Bains/L'D'Q' +Ajaccio/L'D'Q' +Akhenaton/L'D'Q' +Aki/L'D'Q' +Akira/L'D'Q' +Akispace/L'D'Q' +Al/L'D'Q' +Al-Khawarizmi/L'D'Q' +Al-Qaïda/D'Q' +Alabama/L' +Aladin/L'D'Q' +Alain/L'D'Q' +Alamut/L'D'Q' +Alan/L'D'Q' +Alaric/L'D'Q' +Alaska/L'D' +Alastair/L'D'Q' +Alba/L'D'Q' +Alba-la-Romaine/L'D'Q' +Alban/L'D'Q' +Albane/L'D'Q' +Albanie/L'D' +Albas/L'D'Q' +Albéric/L'D'Q' +Albert/L'D'Q' +Alberta/L' +Alberte/L'D'Q' +Albertine/L'D'Q' +Alberto/L'D'Q' +Albertville/L'D'Q' +Albi/L'D'Q' +Albin/L'D'Q' +Albion/L'D'Q' +Albret/L'D'Q' +Albuquerque/L'D'Q' +Alceste/L'D'Q' +Alcibiade/L'D'Q' +Alcide/L'D'Q' +Aldébaran/L'D'Q' +Aldi/L'D'Q' +Aldo/L'D'Q' +Aldric/L'D'Q' +Alec/L'D'Q' +Alegre +Alejandra/L'D'Q' +Alejandro/L'D'Q' +Alek/L'D'Q' +Aleksander/L'D'Q' +Aleksandra/L'D'Q' +Aleksei/L'D'Q' +Alembert/D' +Alençon/L'D'Q' +Alep/L'D'Q' +Alès/L'D'Q' +Alésia/L'D'Q' +Alessandra/L'D'Q' +Alessandro/L'D'Q' +Alex/L'D'Q' +Alexa/L'D'Q' +Alexander/L'D'Q' +Alexandra/L'D'Q' +Alexandre/L'D'Q' +Alexandrie/L'D'Q' +Alexandrina/L'D'Q' +Alexane/L'D'Q' +Alexei/L'D'Q' +Alexia/L'D'Q' +Alexian/L'D'Q' +Alexiane/L'D'Q' +Alexis/L'D'Q' +Alfonso/L'D'Q' +Alfortville/L'D'Q' +Alfred/L'D'Q' +Algarve/L' +Alger/L'D'Q' +Algérie/L'D' +Algésiras/L'D'Q' +Alhambra/L'D'Q' +Alhazred/L'D'Q' +Ali/L'D'Q' +Alia/L'D'Q' +Alibaba/L'D'Q' +Alice/L'D'Q' +Alicia/L'D'Q' +Alida/L'D'Q' +Aliénor/L'D'Q' +Aline/L'D'Q' +Alioth/L'D'Q' +Alison/L'D'Q' +Alistair/L'D'Q' +Alix/L'D'Q' +Alken/L'D'Q' +Allah/L'D'Q' +Allan/L'D'Q' +Allauch/L'D'Q' +Allemagne/S* +Alleur/L'D'Q' +Allianz/L'D'Q' +Allie/L'D'Q' +Allier/L' +Allison/L'D'Q' +Allonnes/L'D'Q' +Ally/L'D'Q' +Allyson/L'D'Q' +Alma/L'D'Q' +Almaty/L'D'Q' +Alonso/L'D'Q' +Alonzo/L'D'Q' +Alost/L'D'Q' +Alpes +Alpes-Maritimes +Alpes-de-Haute-Provence +Alphonse/L'D'Q' +Alpilles +Alsace/L'D' +Alstom/L'D'Q' +Alt/L'D'Q' +AltGr/L'D'Q' +Altaï/L' +Altaïr/L'D'Q' +Althusser/L'D'Q' +Altinier/L'D'Q' +Alvaro/L'D'Q' +Alyssa/L'D'Q' +Alzheimer/L'D'Q' +Amadeus/L'D'Q' +Amadou/L'D'Q' +Amal/L'D'Q' +Amalthée/L'D'Q' +Amand/L'D'Q' +Amanda/L'D'Q' +Amandine/L'D'Q' +Amando/L'D'Q' +Amar/L'D'Q' +Amaury/L'D'Q' +Amay/L'D'Q' +Amazon/L'D'Q' +Amazone/L' +Amazonie/L'D' +Ambarès-et-Lagrave/L'D'Q' +Amber/L'D'Q' +Ambérieu-en-Bugey/L'D'Q' +Amblève/L'D' +Amboise/L'D'Q' +Ambre/L'D'Q' +Ambroise/L'D'Q' +Amédée/L'D'Q' +Amel/L'D'Q' +Amélia/L'D'Q' +Amélie/L'D'Q' +Amelle/L'D'Q' +Aménophis/L'D'Q' +Amérique/S* +Amiens/L'D'Q' +Amiga/L'D'Q' +Amilly/L'D'Q' +Amina/L'D'Q' +Amine/L'D'Q' +Amir/L'D'Q' +Amira/L'D'Q' +Amman/L'D'Q' +Amnesty/D'Q' +Amos/L'D'Q' +Amparo/L'D'Q' +Ampère/L'D'Q' +Amphitrite/L'D'Q' +Ampoigné/L'D'Q' +Ampus/L'D'Q' +Amsterdam/L'D'Q' +Amy/L'D'Q' +Anacréon/L'D'Q' +Anaëlle/L'D'Q' +Anaïs/L'D'Q' +Anastase/L'D'Q' +Anastasia/L'D'Q' +Anastasie/L'D'Q' +Anatole/L'D'Q' +Anatoli/L'D'Q' +Anatolie/L'D' +Anaxagore/L'D'Q' +Anaximandre/L'D'Q' +Anaximène/L'D'Q' +Anchorage/L'D'Q' +Andalousie/L'D' +Andaman/L'D' +Andenne/L'D'Q' +Anderlecht/L'D'Q' +Anderlues/L'D'Q' +Andersen/L'D'Q' +Andes +Andorre/L'D' +Andouillé/L'D'Q' +André/L'D'Q' +Andrea/L'D'Q' +Andréa/L'D'Q' +Andreas/L'D'Q' +Andrée/L'D'Q' +Andrei/L'D'Q' +Andreï/L'D'Q' +Andrej/L'D'Q' +Andrésy/L'D'Q' +Andrew/L'D'Q' +Android/D'Q' +Android/D'Q'-- +Andromède/L'D'Q' +Andrzej/L'D'Q' +Andy/L'D'Q' +Angela/L'D'Q' +Angèle/L'D'Q' +Angeles/L'D'Q' +Angelina/L'D'Q' +Angelino/L'D'Q' +Angélique/L'D'Q' +Angelo/L'D'Q' +Angers/L'D'Q' +Angie/L'D'Q' +Angkor/L'D'Q' +Anglet/L'D'Q' +Angleterre/L'D' +Angola/L'D' +Angoulême/L'D'Q' +Angoumois/L'D' +Ångström/L'D'Q' +Anguilla/L'D' +Angus/L'D'Q' +Anhui/L'D'Q' +Anicet/L'D'Q' +Anina/L'D'Q' +Anissa/L'D'Q' +Anita/L'D'Q' +Anjou/L'D' +Ankara/L'D'Q' +Ankh-Morpork/L'D'Q' +Ann/L'D'Q' +Anna/L'D'Q' +Annabelle/L'D'Q' +Annabeth/L'D'Q' +Annapurna/L'D'Q' +Anne/L'D'Q' +Anne-Laure/L'D'Q' +Anne-Marie/L'D'Q' +Anne-Sophie/L'D'Q' +Annecy/L'D'Q' +Annecy-le-Vieux/L'D'Q' +Annemasse/L'D'Q' +Annette/L'D'Q' +Annick/L'D'Q' +Annie/L'D'Q' +Annonay/L'D'Q' +Anosov/L'D'Q' +Anouilh/L'D'Q' +Anouk/L'D'Q' +Anoushka/L'D'Q' +Ans/L'D'Q' +Anschluss/L'D'Q' +Anselme/L'D'Q' +Antalya/L'D'Q' +Antananarivo/L'D'Q' +Antarctique/L'D' +Anthelme/L'D'Q' +Anthony/L'D'Q' +Antibes/L'D'Q' +Antigone/L'D'Q' +Antigua-et-Barbuda/L'D'Q' +Antilles +Antioche/L'D'Q' +Antoine/L'D'Q' +Antoinette/L'D'Q' +Anton/L'D'Q' +Antonia/L'D'Q' +Antonietta/L'D'Q' +Antonin/L'D'Q' +Antonina/L'D'Q' +Antonio/L'D'Q' +Antony/L'D'Q' +Antwerpen/L'D'Q' +Anubis/L'D'Q' +Anvers/L'D'Q' +Anzegem/L'D'Q' +Anzin/L'D'Q' +Aoi/L'D'Q' +Aoste/L'D'Q' +Aouste-sur-Sye/L'D'Q' +Apache-OFBiz/D'Q' +Apennin/S* +Apexagri +Aphrodite/L'D'Q' +Apollinaire/L'D'Q' +Apolline/L'D'Q' +Apollodore/L'D'Q' +Apollon/L'D'Q' +Apollonius/L'D'Q' +Apophis/L'D'Q' +Appalaches +Appenzell/L'D' +Apple/L'D'Q' +April/L'D'Q' +Apt/L'D'Q' +Apulée/L'D'Q' +AqME/L'D'Q' +Aquin/D' +Aquitaine/L'D' +Arabidopsis/L'D'Q' +Arabie/L'D' +Arafat/L'D'Q' +Aragon/L'D' +Aral/L'D' +Aranjuez/L'D'Q' +Ararat/L' +Arbois/L'D' +Arcachon/L'D'Q' +Arcadie/L'D' +Archibald/L'D'Q' +Archimède/L'D'Q' +Arctique/L'D' +Arcturus/L'D'Q' +Arcueil/L'D'Q' +Ardèche/L'D' +Arden/D'Q' +Ardenne/S* +Arduinna/L'D'Q' +Arduino/L'D'Q' +Arendonk/L'D'Q' +Arendt/L'D'Q' +Arès/L'D'Q' +Areva/L'D'Q' +Argentan/L'D'Q' +Argenteuil/L'D'Q' +Argentine/L'D' +Argenton-Notre-Dame/L'D'Q' +Argonne/L'D' +Argos/L'D'Q' +Argovie/L'D' +Ariana/L'D'Q' +Ariane/L'D'Q' +Ariège/L'D' +Ariel/L'D'Q' +Arielle/L'D'Q' +Arion/L'D'Q' +Aristarque/L'D'Q' +Aristide/L'D'Q' +Aristophane/L'D'Q' +Aristote/L'D'Q' +Arizona/L'D' +Arjuna/L'D'Q' +Arkady/L'D'Q' +Arkansas/L'D' +Arkema/L'D'Q' +Arkham/L'D'Q' +Arkhangelsk/L'D'Q' +Arlene/L'D'Q' +Arlène/L'D'Q' +Arles/L'D'Q' +Arlette/L'D'Q' +Arlington/L'D'Q' +Arlon/L'D'Q' +Armageddon/L'D' +Armagnac/L'D'Q' +Armand/L'D'Q' +Armande/L'D'Q' +Armando/L'D'Q' +Armel/L'D'Q' +Armelle/L'D'Q' +Arménie/L'D' +Armentières/L'D'Q' +Armin/L'D'Q' +Armor/L'D' +Armorique/L'D' +Arnaud/L'D'Q' +Arnie/L'D'Q' +Arnold/L'D'Q' +Arnouville-lès-Gonesse/L'D'Q' +Arras/L'D'Q' +Arrhenius/L'D'Q' +Arsène/L'D'Q' +Arsinoé/L'D'Q' +Arte/L'D'Q' +Artémis/L'D'Q' +Artémision/S* +Arthuis +Arthur/L'D'Q' +Artois/L'D' +Arturo/L'D'Q' +Aruba/L'D'Q' +Arvalis/L'D'Q' +Ascq/L'D'Q' +Asgard/L'D'Q' +Ashleigh/L'D'Q' +Ashley/L'D'Q' +Asie/L'D' +Asimov/L'D'Q' +Asma/L'D'Q' +Asmara/L'D'Q' +Asnières/L'D'Q' +Asnières-sur-Seine/L'D'Q' +Asperger/D'Q' +Assa/L'D'Q' +Asse/L'D'Q' +Assenede/L'D'Q' +Assouan/L'D'Q' +Assourbanipal/L'D'Q' +Assyrie/L'D' +Astana/L'D'Q' +Astier/L'D'Q' +Astrakhan/L'D'Q' +Astrée/L'D'Q' +Astrid/L'D'Q' +Asturies +Asunción/L'D'Q' +Asus/L'D'Q' +At +Atahualpa/L'D'Q' +Atalante/L'D'Q' +Atari/L'D'Q' +Atatürk/L'D'Q' +Ath/L'D'Q' +Athabasca/L' +Athalie/L'D'Q' +Athanase/L'D'Q' +Athéna/L'D'Q' +Athènes/L'D'Q' +Athis-Mons/L'D'Q' +Atlanta/L'D'Q' +Atlantide/L' +Atlantique/L' +Atomium/L' +Atropos/L'D'Q' +Attila/L'D'Q' +Aubagne/L'D'Q' +Aubange/L'D'Q' +Aube/L'D' +Aubenas/L'D'Q' +Aubenasson/L'D'Q' +Aubergenville/L'D'Q' +Aubervilliers/L'D'Q' +Aubin/L'D'Q' +Aubrac/L'D' +Aubrey/L'D'Q' +Aubusson/L'D'Q' +Auch/L'D'Q' +Auchan/L'D'Q' +Auchel/L'D'Q' +Auckland/L'D'Q' +Aude/L'D' +Audenarde/L'D'Q' +Auderghem/L'D'Q' +Audi/L'D'Q' +Audin/D'Q' +Audincourt/L'D'Q' +Audran/L'D'Q' +Audrey/L'D'Q' +Augsbourg/L'D'Q' +Augusta/L'D'Q' +Auguste/L'D'Q' +Augustin/L'D'Q' +Augustine/L'D'Q' +Augusto/L'D'Q' +Aulnay-sous-Bois/L'D'Q' +Aunis/L'D' +Auray/L'D'Q' +Aure/L'D'Q' +Aurèle +Aurélia/L'D'Q' +Aurélie/L'D'Q' +Aurélien/L'D'Q' +Aurelio/L'D'Q' +Auriane/L'D'Q' +Aurillac/L'D'Q' +Auriol/L'D'Q' +Aurore/L'D'Q' +Auschwitz/L'D'Q' +Austen/L'D'Q' +Austerlitz/L'D'Q' +Austin/L'D'Q' +Australasie/L'D'Q' +Australie/L'D' +Australie-Méridionale/L'D' +Australie-Occidentale/L'D' +Austrasie/L'D' +Autriche/L'D' +Autriche-Hongrie/L'D' +Autun/L'D'Q' +Auvergne/L'D' +Auvergne-Rhône-Alpes/L'D'Q' +Auxerre/L'D'Q' +Ava/L'D'Q' +Avalon/L'D'Q' +Ave/L'D'Q' +Aventin/L'D' +Averdon/L'D'Q' +Averroès/L'D'Q' +Aveyron/L'D' +Avicenne/L'D'Q' +Avignon/L'D'Q' +Avogadro/L'D'Q' +Avon/L'D'Q' +Avrillé/L'D'Q' +Axel/L'D'Q' +Axelle/L'D'Q' +Aya/L'D'Q' +Ayano/L'D'Q' +Aymar/L'D'Q' +Aymé/L'D'Q' +Aymeric/L'D'Q' +Ayoub/L'D'Q' +Aywaille/L'D'Q' +Azathoth/L'D'Q' +Azé/L'D'Q' +Azerbaïdjan/L'D' +Azilis/L'D'Q' +Aziz/L'D'Q' +Aziza/L'D'Q' +Azov/L'D'Q' +B/||-- +BAC +BACnet +BAES +BAPBAP +BASF +BBC +BCBG +BCE +BD +BEF/-- +BEP +BIOS +BMW +BMX +BNP +BRGM +BSD +BT +BTS +Baal +Baar +Babbage +Babel +Babou +Babylone +Babylonie +Bacchus +Bach +Bachelard +Bachir +Bacillus +Backlund +Bade-Wurtemberg +Baffin +Bagdad +Bagneux +Bagnolet +Bagnols-sur-Cèze +Bahamas +Bahreïn +Baie-Comeau +Baie-James +Baie-Mahault +Baïkal +Baïkonour +Bailleul +Baire +Bajazet +Bakou +Bakounine +Bâle +Bâle-Campagne +Bâle-Ville +Baléares +Balen +Bali +Balkans +Balma +Baloutchistan +Balthazar +Baltimore +Baltique +Balzac +Bamako +Banach +Bandama +Bandundu +Bandung +Banfora +Bangalore +Bangkok +Bangladesh +Bangui +Banjul +Banneux +Baošići +Baphomet +Baptiste +Barbade +Barbara +Barbaux +Barcelone +Barclays +Barentin +Bargmann +Bari +Barjavel +Bar-le-Duc +Barlow +Barnabé +Barnard +Barry +Barsac +Bart +Barthélemy +Barthélémy +Bartolomé +Bartók +Baruch +Bas-Congo +Bas-Jura +Bas-Rhin +Bas-Saint-Laurent +Bas-Sassandra +Bascharage +Base +Basic +Basile +Basse-Côte-Nord +Basse-Normandie +Basse-Saxe +Basse-Terre +Bassens +Bassora +Bastia +Bastiat +Bastien +Bastogne +Basutoland +Bata +Bathurst +Batibus +Baudelaire +Baudoin +Baudouin +Bauges +Baule-Escoublac +Baumé +Bavière +Bayart +Bayer +Bayeux +Bayle +Bayonne +Bayreuth +Béarn +Béatrice +Béatrix +Beaucaire +Beauce +Beaufort +Beauharnais +Beaujolais +Beaumarchais +Beaumont +Beaune +Beauraing +Beausoleil +Beauvais +Beauvau +Beauvoir +Becca +Beckett +Becky +Becquerel +Beernem +Beerse +Beersel +Beethoven +Begijnendijk +Bègles +Behren-lès-Forbach +Beijing +Belcastel +Belfast +Belfort +Belgique +Belgrade +Belinda +Bélinda +Belize +Bell +Bellatrix +Bellegarde-sur-Valserine +Bellérophon +Belleville +Bellevue +Belœil +Beltrami +Belzébuth +Ben +Bénarès +Bendixson +Benedetta +Benedetto +Benedict +Bénédict +Bénédicte +Benelux +Benestan +Benetton +Bénézit +Bengale +Bengale-Occidental +Benghazi +Bénin +Benita +Benito +Benjamin +Benoît +Benoîte +Benozillo +Benpro +Bentama +Bentham +Bentley +Benveniste +Bérangère +Berchem-Sainte-Agathe +Berck +Bercy +Bérenger +Bérengère +Bérénice +Bérézina +Bergen +Bergerac +Bergson +Berhoun +Béring +Beringen +Berkeley +Berlaar +Berlare +Berlin +Berlioz +Berlusconi +Bermudes +Bernadette +Bernanos +Bernard +Bernardin +Bernardino +Bernardo +Bernay +Berne +Bernhard +Bernie +Bernissart +Berno +Bernoulli +Bernstein +Berre-l'Étang +Berry +Bers +Berthe +Berthelot +Berthollet +Bertille +Bertram +Bertrand +Bertrange +Besançon +Bescherelle +Besov +Bessel +Bestel +Bételgeuse +Beth +Bethany +Bethléem +Béthune +Bétique +Betsy +Bettembourg +Betti +Bettina +Betty +Beurey +Beurling +Beveren +Beverly +Beyer +Beyne-Heusay +Beyrouth +Bézaudun-sur-Bîne +Bézier +Béziers +Bezons +Bézout +Bhagavad-Gîtâ +Bhima +Bhoutan +Bianca +Bianchi +Biarritz +Bic +Bichkek +Bidassoa +Bidauld +Bidault +Bieberbach +Bielefeld +Biélorussie +Bienne +Bienvenüe +Bierné +BigBlueButton +Bihar +Bilal +Bilbao +Bill +Billère +Billy +Bilzen +Binche +Bîne +Bion +Biopi +Birkenau +Birkhoff +Birmanie +Birmingham +Bischheim +Bischwiller +Bishop +Bismarck +Bisounours +Bissau +Bitcoin +Bithynie +Bizet +Björn +Blagnac +Blainville +Blair +Blaise +Blake +Blanc-Mesnil +Blanche +Blanchette +Blandine +Blankenberge +Blanquefort +Blaschke +Blégny +Blender +Bleys +Bloch +Bloemfontein +Blois +Bloom +Bloomberg +Bluetooth +Blum +Blu-ray +Bob +Bobbie +Bobby +Bobigny +Bobo-Dioulasso +Bochner +Bocholt +Bochum +Bode +Boèce +Boechout +Boeing +Boétie +Bogotá +Bohême +Bohr +Boileau +Bois-Colombes +Bois-Guillaume +Boisbriand +Bois-d'Arcy +Boissenet +Boissier +Boissy-Saint-Léger +Bolbec +Bolivie +Bollène +Bollywood +Bologne +Boltzmann +Bolyai +Bolzano +Bolívar +Bombay +Bonaparte +Bondues +Bondy +Bonheiden +Boniface +Bonn +Bonnard +Bonnardel +Bonne-Espérance +Bonneuil-sur-Marne +Bonneville +Bonnie +Boole +Boortmeerbeek +Bordeaux +Bordet +Borel +Borgia +Borinage +Boris +Bornem +Bornéo +Bornes +Borsbeek +Bortzmeyer +Bosch +Bose +Bosnie +Bosnie-Herzégovine +Bosphore +Bossuet +Boston +Botrange +Botswana +Botticelli +Bouaké +Bouc-Bel-Air +Boucherot +Boucherville +Bouches-du-Rhône +Bouchra +Bougainville +Bouguenais +Boulgakov +Boulogne +Boulogne-Billancourt +Boulogne-sur-Mer +Bourbaki +Bourbon/S. +Bourbonnais +Bourdeaux +Bourdieu +Bourg-en-Bresse +Bourges +Bourget +Bourg-la-Reine +Bourg-lès-Valence +Bourgogne +Bourgoin-Jallieu +Bouriot +Bourré +Bouscat +Boussu +Bouteflika +Boutrolle +Bouygues +Boves +Bovet +Bq/U.||-- +Brabant +Brad +Bradford +Bradley +Bradley +Brafman +Brahim +Brahma +Brahmapoutre +Brahms +Braine-l'Alleud +Braine-le-Château +Braine-le-Comte +Brakel +Brand +Brandon +Brasov +Brassac +Brasschaat +Brassica +Brasília +Bratislava +Brauer +Bray +Brazzaville +Brecht +Bredene +Brée +Brejnev +Brélès +Brelière +Brême +Brenda +Brendan +Brésil +Bresse +Bressuire +Brest +Bretagne +Brétigny-sur-Orge +Brett +Brian +Briançon +Briand +Brianna +Brias +Brice +Bridgestone +Bridget +Brie +Brie-Comte-Robert +Brigitte +Brignais +Brignoles +Bris +Brisbane +Briséis +Britney +Brittany +Britten +Brive-la-Gaillarde +Brno +Broadway +Broca +Broglie +Broïda +Bron +Brooke +Brooklyn +Brossard +Brown +Bruay-la-Buissière +Bruay-sur-l'Escaut +Bruce +Bruckner +Bruegel +Bruges +Brunehilde +Brunei +Bruno +Brunoy +Brunswick +Brutus +Bruxelles +Bruxelles-Capitale +Bruz +Bryan +Bry-sur-Marne +Bucarest +Budapest +Buenos +Buffalo +Buffon +Buggenhout +Buick +Buisson +Bujumbura +Bukavu +Bulgarie +Bully-les-Mines +Bundesbank +Bundesrat +Bundestag +Bundeswehr +Buridan +Burkina +Burnet +Burnside +Burundi +Bush +Bussy-Saint-Georges/L'D'Q' +Buxtehude +Byron +Byzance +C/U.||-- +CA +CAC +CAC40 +CAD/-- +CAN +CAO +CAP +CAPES +CC +CC-BY +CC-BY-NC +CC-BY-NC-ND +CC-BY-NC-SA +CC-BY-ND +CC-BY-SA +CCP +CCTP +CCTR +CD +CDD +CDI +CD-ROM +CE +CE1 +CE2 +CEA +CEE +CEM +CEO +CERN +CFA +CFDT +CFP +CGT +CHF/-- +CHU +CIA +CINES +CIRAD +CM1 +CM2 +CMOS +CMPP +CMRT +CMU +CNAM +CNED +CNES +CNIL +CNN +CNRS +CNSMD +CNY/-- +CO2 +COD +COI +COPAGEX +CO₂ +CP +CPC +CPG +CPGE +CPU +CRAD +CRS +CSP +CSS +CTA +CTN +CTO +CTP +CTPS +CV +CVG +Cachan +Cachemire +Cadarache +Cadillac +Cadix +Caelius +Caen +Cagliari +Cagnes-sur-Mer +Cahors +Caïn +Caine +Caïphe +Caire +Caitlin +Caitlyn +Calabre +Calais +Calaisis +Calc +Calcutta +Calderón +Caleb +Calédonie +Calestienne +Calgary +Cali +Caliban +Californie +Caligula +Calinours +Calkin +Callas +Callie +Callimaque +Callisto +Callot +Caluire +Caluire-et-Cuire +Calvados +Calvin +Cam +Camargue +Cambacérès +Cambodge +Cambrai +Cambrésis +Cambridge +Camelot +Cameron +Cameroun +Camilla +Camille +Camilo +Camon +Campanie +Campbell +Campine +Camus +Canada +Canaries +Canaveral +Canberra +Candace +Candice +Canet-en-Roussillon +Cannes +Cannet +Canopus +Cantabrie +Cantal +Canteleu +Canton +Cantons-de-l'Est +Cantor +Canyon +Cap +Cap-Vert +Capesterre-Belle-Eau +Capet +Capitale-Nationale +Capitole +Capotier +Cappadoce +Capucine +Caracas +Caravage +Carcassonne +Card +Cardiff +Caribert +Carine +Carl +Carla +Carlo +Carloman +Carlos +Carlotta +Carmaux +Carmella +Carmen +Carnavalet +Carnot +Carol +Carole +Carolina +Caroline +Carolyn +Carpates +Carpentras +Carquefou +Carré +Carrefour +Carrel +Carrie +Carrières-sous-Poissy +Carrières-sur-Seine +Carroll +Carros +Carstensz +Cartan +Carthage +Carthagène +Carvin +Casablanca +Casamance +Casanova +Casey +Casimir +Casimir-Perier +Caspienne +Cassandra +Cassandre +Casseurs_Flowters +Cassidy +Cassini +Cassiopée +Castafolte +Castanet-Tolosan +Castelnaudary +Castelnau-le-Lez +Castelsarrasin +Castelsarrasin +Casterman +Castille +Castille-et-León +Castres +Castro +Casuso +Catalina +Catane +Catherine +Cathy +Caton +Catulle +Caucase +Cauchy +Caudry +Caussade +Causses +Cavaillon +Cavendish +Cayenne +Cayley +Ceausescu +Cécile +Cécilia +Cecily +Cédric +Célestin +Célestine +Célia +Célimène +Céline +Céline +Celle-Saint-Cloud +Celsius +Cenon +Centrafrique +Centre +Centre-du-Québec +Cérès +Cergy +Cernay +Cerqual +Cervantès +Césaire +César +Césarée +Cesàro +Cesson-Sévigné +Cestas +Céüse +Cévennes +Ceylan +Cézanne +Chabannes +Chabaud +Chabeuil +Chablais +Chad +Chaillot +Chalabaev +Chalcédoine +Chaldée +Châlette-sur-Loing +Challans +Chalons +Châlons-en-Champagne +Chalon-sur-Saône +Chalus +Chamalières +Chambéry +Chambly +Chambon-Feugerolles +Chambord +Chambray-lès-Tours +Chamisso +Chamonix +Champagne +Champagne-Ardenne +Champigny-sur-Marne +Champlain +Champollion +Champs-Élysées +Champs-sur-Marne +Chandon +Chanel +Changchun +Changsha +Chantal +Chantilly +Chantris +Chapelle-Saint-Luc +Chapelle-lez-Herlaimont +Chapelle-sur-Erdre +Charente/S. +Charente-Maritime +Charenton-le-Pont +Charlaine +Charlemagne +Charlene +Charlène +Charleroi +Charles +Charleville +Charleville-Mézières +Charlevoix +Charlie +Charline +Charlotte +Charlottetown +Charly +Charmaine +Charmet +Charolais +Charon +Charonne +Charpak +Chartres +Charybde +Chase +Chasles +Chastel-Arnaud +Château-Gontier +Château-Thierry +Châteaubriant +Château-d'Œx +Château-d'Olonne +Châteaudouble +Châteaudun +Châteauguay +Châteauneuf-du-Pape +Châteauneuf-les-Martigues +Châteaurenard +Châteauroux +Châtelain +Châtelet +Châtellerault +Châtenay-Malabry +Châtillon +Chatou +Chattam +Chaudfontaine +Chaudière-Appalaches +Chaumont +Chaumont-Gistoux +Chauny +Chauvin +Chaux-de-Fonds +Chaville +Chelles +Chelsea +Chemazé +Chemnitz +Chengdu +Chénier +Chennai +Chennevières-sur-Marne +Chenôve +Cher +Cherbourg +Cherbourg-Octeville +Cherino +Chesapeake +Chesnay +Chessex +Chester +Chevalley +Chevigny-Saint-Sauveur +Chevillot +Chevilly-Larue +Chevreul +Chevrolet +Cheyenne +Chiara +Chicago +Childebert +Childéric +Chili +Chilly-Mazarin +Chilpéric +Chimay +Chimène +Chinafrique +Chine +Chirac +Chisinau +Chittagong +Chloé +Choffardet +Choisy-le-Roi +Cholesky +Cholet +Chomsky +Chongqing +Chopin +Choquequirao +Chorem +Chostakovitch +Chris +Christa +Christel +Christèle +Christelle +Christian +Christiana +Christiane +Christie +Christina +Christine +Christmas +Christoffel +Christoph +Christophe +Christopher +Chrysaor +Chrysler +Chrysostome +Chuck +Churchill +Chypre +Chávez +Ci/U.||-- +Cicéron +Cid +Cie +Cilicie +Cimade +Cincinnati +Cindy +Ciney +Ciotat +Circassie +Circé +Cirey-sur-Vezouze +Cisco +Cisjordanie +Cîteaux +Citroën +City +Claire +Clamart +Clara +Clarence +Clarissa +Clarisse +Clark +Clarus +Claude +Claudel +Claudette +Claudia +Claudie +Claudine +Clausewitz +Clay +Claye-Souilly +Cléa +Clélia +Clémence +Clemenceau +Clément +Clémentine +Cléo +Cléon-d'Andran +Cléopâtre +Clermont-Ferrand +Clervaux +Cleveland +Clichy +Clichy-sous-Bois +Cliff +Clifford +Clifton +Clinton +Clio +Clive +Cloé +Clotaire +Clothilde +Clotho +Clotilde +Clovis +Cluny +Cluses +Clyde +Cobol +Cochinchine +Cocteau +Coelho +Cognac +Cohen +Coire +Colbert +Colby +Colchide +Colette +Colfontaine +Coline +Colisée +Colleen +Collobrières +Colmar +Cologne +Colomb +Colombes +Colombie +Colombie-Britannique +Colombo +Colomiers +Colorado +Columbia +Columbus +Combs-la-Ville +Côme +Comédie-Française +Comines +Comines-Warneton +Commonwealth +Comoé +Comores +Compiègne +Compostelle +Comps +Conakry +Conan +Concarneau +Concetta +Conchita +Condé-sur-l'Escaut +Condillac +Condorcet +Condroz +Conflans-Sainte-Honorine +Confucius +Congo +Connecticut +Connie +Connor +Conrad +Constance +Constant +Constantin +Constantine +Constantinople +Cook +Cooper +Copenhague +Copernic +Coralie +Coraline +Corbeil-Essonnes +Corbières +Cordelia +Cordoue +Corée/S. +Corentin +Corentine +Corey +Corfou +Corine +Corinne +Corinthe +Coriolis +Cormeilles-en-Parisis +Corneille +Cornouailles +Corogne +Corrèze +Corse +Corse-du-Sud +Cortés +Corwin +Cosette +Cosima +Cosne-Cours-sur-Loire +Costa +Costes +Côte-Nord +Côte-Saint-Luc +Côte-d'Or +Cotentin +Côtes-du-Nord +Cotonou +Cotton +Coty +Coubertin +Coudekerque-Branche +Coudray +Coué +Couëron +Couesnon +Coulomb +Coulommiers +Courbet +Courbevoie +Courcelles +Courchevel +Courcouronnes +Cournand +Courneuve +Cournon-d'Auvergne +Courrières +Courson +Court-Saint-Étienne +Courteline +Courtney +Courtrai +Cousteau +Couton +Couvin +Coxyde +Cracovie +Craig +Cran-Gevrier +Craon +Crau +Crécy-la-Chapelle +Creil +Crépy-en-Valois +Crest +Crest +Crésus +Crète +Créteil +Creuse +Creusot +Creutzfeldt-Jakob +Creutzwald +Crichton +Crimée +Critias +Cro-Magnon +Croatie +Crofton +Crohn +Croissant-Rouge +Croix +Croix-Rouge +Cromwell +Crozes-Hermitage +Crupies +Crusoé +Cthulhu +Ctrl +Cuba +Cugnaux +Cunégonde +Cuneo +Cupidon +Curaçao +Curie +Curitiba +Cushing +Cusset +Cuvier +Cuzco +Cybèle +CyberSDF +Cyclades +Cymnéa +Cynthia +Cyprien +Cyrano +Cyrénaïque +Cyrène +Cyrielle +Cyril +Cyrille +Cyrus +Czestochowa +DAB +DEA +DESS +DEUG +DFSG +DG +DGSE +DGSI +DHCP +DHEA +D'Holbach +DJ +DM +DNS +DOM +DOM-TOM +DPTH +DREES +DRH +DRRT +DS +DUER +DUT +DVD +DVD-ROM +Da/U.||-- +Dacca +Dachau +Dacia +Dacie +Dadant +Daech +Daghestan +Dagobert +Daguerre +Dahl +Dahlander +Dahomey +Daimler +Daisy +Dakar +Dakota +Dale +Dali +Dalila +Dallas +Dalloz +Dalmatie +Daloa +Dalt +Dalton +Dalí +Damas +Damase +Damasio +Damian +Damien +Dammarie-les-Lys +Damme +Damoclès +Dampmart +Dan +Dana +Danaé +Danemark +Daniel +Daniela +Danièle +Daniell +Daniella +Danielle +Danilevsky +Danny +Danone +Dante +Danton +Dantzig +Danube +Dany +Daon +Daoud +Dara +Darboux +Dardanelles +Darfour +Daria +Dario +Darius +Darjeeling +Darren +Darryl +Darwin +Daryl +Dassault +Datsun +Daudet +Dauphiné +Dausset +Dauzon +Dave +David +Davina +Davis +Davos +Davy +Dawn +Dax +Dean +Deauville +Debbie +Debian +Déborah +Debord +Debra +Debrecen +Debussy +Décines-Charpieu +Dedekind +Deerlijk +Defoe +Degas +Dehn +Déimos +Deinze +Deirdre +Déjanire +Dekalb +Delacroix +Delaunay +Delaware +Deleuze +Delhi +Dell +Délos +Delphes +Delphine +Delvaux +Delwin +Demerlé +Déméter +Démocrite +Démosthène +Denain +Denderleeuw +Deneb +Denis +Denise +Denjoy +Dennis +Denoël +Denver +Derek +Derib +Derrida +Derrida +Desargues +Desbureaux +Descartes +Deschanel +Descraques +Desdémone +Désiré +Désirée +Desmond +Desmoulins +Desnos +Despina +Desprez +Destelbergen +Detroit +Deucalion +Deuil-la-Barre +Deutéronome +Deux-Sèvres +Deux-Siciles +DeviceNet +Déville-lès-Rouen +Dévoluy +Devon +Dhabi +Dhuis +Diana +Diane +Diarmuid +Diben +Dick +Dickens +Diderot +Didier +Die +Diego +Diekirch +Diepenbeek +Dieppe +Diest +Dietikon +Dieu +Dieudonné +Dieulefit +Differdange +Digne-les-Bains +Dijkstra +Dijon +Dilbeek +Dilsen-Stokkem +Dimitri +Dina +Dinan +Dinant +Dinard +Dioclétien +Diodore +Diogène +Diois +Dioné +Dionysos +Diophante +Dior +Dirac +Dirichlet +Dirk +Disney +Disneyland +Dison +Ditanyè +Divajeu +Dixmude +Djamel +Djamila +Djeddah +Djerba +Djibouti +Djibril +Djoser +Djurdjura +Dmitri +Dniepr +Dniestr +Dnipropetrovsk +Dodoma +Doha +Dole +Dollard-des-Ormeaux +Dolly +Dolorès +Dombes +Domenico +Domingo +Dominic +Dominique +Domitien +Domitille +Domont +Don +Donald +Donatella +Donatien +Donbass +Donetsk +Dongguan +Donna +Donnie +Donovan +Doppler +Dordogne +Dordoigne +Doreen +Dorian +Doriane +Dorin +Dorine +Doris +Dorothée +Dorothy +Dorset +Dortan +Dortmund +Dostoïevski +Douai +Douala +Douarnenez +Doubs +Douchanbé +Douchy-les-Mines +Doug +Douglas +Doumer +Doumergue +Dounia +Dour +Douvres +Doyle +Dr/S. +Dracula +Draguignan +Drake +Drancy +Draupadi +Draveil +Draw +Dre/S. +Dresde +Dreux +Drew +Dreyfus +Dricot +Drôme +Druesne +Drummondville +Dubaï +Dübendorf +Dublin +Dubois +Dubrovnik +Duchamp +Duchenne +Ducos +Dudelange +Dufay +Duffel +Dufour +Duisburg +Dukas +Duky +Dulac +Dumas +Dunant +Duncan +Dunedin +Dunford +Dunkerque +Dunwich +Duplessis +Dupont +Durance +Durand +Durban +Durbuy +Duriez +Durkheim +Duryodhana +Düsseldorf +Dustin +Dutilleux +Dvorak +Dvorák +Dwayne +Dwight +Dworkin +Dybèle +Dyck +Dylan +Dynkin +Dysnomie +Dʳ +Dʳˢ +Dʳᵉ +Dʳᵉˢ +Dᴏꜱꜱᴍᴀɴɴ +ECS/L'D'Q' +EDF/L'D'Q' +EEPROM/L'D'Q' +EFREI/L'D'Q' +EFS/L'D'Q' +EIB/L'D'Q' +ENA/L'D'Q' +ENSAIA/L'D'Q' +ENSAM/L'D'Q' +ENSAT/L'D'Q' +EPL/L'D'Q' +EPROM/L'D'Q' +EPST/L'D'Q' +ERCIM/L'D'Q' +ERP/L'D'Q' +ESA/L'D'Q' +ESS/L'D'Q' +ESTACA/L'D'Q' +EUR/-- +Earl/L'D'Q' +EasyJet/L'D'Q' +Eaubonne/L'D'Q' +Ebit/||-- +Eblé/L'D'Q' +Ebola/L'D'Q' +Écaussinnes/L'D'Q' +Échirolles/L'D'Q' +Echternach/L'D'Q' +Eckert/L'D'Q' +Eclipse/L'D'Q' +Écosse/L'D' +Écully/L'D'Q' +Ed/L'D'Q' +Eddie/L'D'Q' +Eddy/L'D'Q' +Edegem/L'D'Q' +Éden/L'D' +Edgar/L'D'Q' +Edgard/L'D'Q' +Edgardo/L'D'Q' +Édimbourg/L'D'Q' +Edison/L'D'Q' +Édith/L'D'Q' +Edmond/L'D'Q' +Edmonde/L'D'Q' +Edmonton/L'D'Q' +Edmund/L'D'Q' +Édouard/L'D'Q' +Eduardo/L'D'Q' +Edward +Edwige/L'D'Q' +Edwin/L'D'Q' +Eeklo/L'D'Q' +Eeyou/L' +Effinergie +Égée/L'D'Q' +Éghezée/L'D'Q' +Églantine/L'D'Q' +Égypte/L'D' +Ehrenpreis/L'D'Q' +Ehresmann/L'D'Q' +Eibit/||-- +Eiffel/L'D'Q' +Eileen/L'D'Q' +Eilenberg/L'D'Q' +Eilleen/L'D'Q' +Eindhoven/L'D'Q' +Einstein/L'D'Q' +Eio/||-- +Eisenbud/L'D'Q' +Eisenhower/L'D'Q' +Eisenstein/L'D'Q' +Ekaterina/L'D'Q' +Ekaterinbourg/L'D'Q' +Elaine/L'D'Q' +Élancourt/L'D'Q' +Elbe/L'D'Q' +Elbeuf/L'D'Q' +Elbrouz/L' +Eleanor/L'D'Q' +Élée/L'D'Q' +Elen/L'D'Q' +Elena/L'D'Q' +Eleonora/L'D'Q' +Éléonore/L'D'Q' +Éleusis/L'D'Q' +Eliana/L'D'Q' +Éliane/L'D'Q' +Elias/L'D'Q' +Élias/L'D'Q' +Élie/L'D'Q' +Éliette/L'D'Q' +Elijah +Éline/L'D'Q' +Eliott/L'D'Q' +Élisa/L'D'Q' +Élisabeth/L'D'Q' +Élise/L'D'Q' +Élisée/L'D'Q' +Eliza/L'D'Q' +Elizabeth/L'D'Q' +Ellen/L'D'Q' +Elliut/L'D'Q' +Elme/L'D'Q' +Élodie/L'D'Q' +Élohim/L'D'Q' +Éloi/L'D'Q' +Éloïse/L'D'Q' +Elorn/L'D'Q' +Elsa/L'D'Q' +Eltsine/L'D'Q' +Elvira/L'D'Q' +Elvire/L'D'Q' +Élyott/L'D'Q' +Élysée/S* +Émeline/L'D'Q' +Émeric/L'D'Q' +Émile/L'D'Q' +Emilia/L'D'Q' +Émilie/L'D'Q' +Émilie-Romagne/L' +Émilien/L'D'Q' +Émilienne/L'D'Q' +Emilio/L'D'Q' +Emily/L'D'Q' +Emma/L'D'Q' +Emmanuel/L'D'Q' +Emmanuelle/L'D'Q' +Emmaüs/L'D'Q' +Emmen/L'D'Q' +Emmett/L'D'Q' +Emmy/L'D'Q' +Empédocle/L'D'Q' +Encelade/L'D'Q' +Énée/L'D'Q' +Énergie_Partagée +Engels/L'D'Q' +Enghien/L'D'Q' +Enghien-les-Bains/L'D'Q' +Engie/D'Q' +Englert/L'D'Q' +Enguerrand/L'D'Q' +Enora/L'D'Q' +Enrico/L'D'Q' +Enrique/L'D'Q' +Entzheim +Enzo/L'D'Q' +Eo/||-- +Éole/L'D'Q' +Éos/L'D'Q' +Épernay/L'D'Q' +Éphèse/L'D'Q' +Épictète/L'D'Q' +Épicure/L'D'Q' +Épiméthée/L'D'Q' +Épinal/L'D'Q' +Épinay-sous-Sénart/L'D'Q' +Épinay-sur-Seine/L'D'Q' +Épire/L'D' +Eppendorf/L'D'Q' +Epstein/L'D'Q' +Équateur/L'D' +Équeurdreville-Hainneville/L'D'Q' +Éragny/L'D'Q' +Éram/L'D'Q' +Érasme/L'D'Q' +Érato/L'D'Q' +Ératosthène/L'D'Q' +Erevan/L'D'Q' +Erfurt/L'D'Q' +Ergodis/L'D'Q' +Eric/L'D'Q' +Éric/L'D'Q' +Erica/L'D'Q' +Érié/L'D'Q' +Erik/L'D'Q' +Erika/L'D'Q' +Erin/L'D'Q' +Éris/L'D'Q' +Ermont/L'D'Q' +Ernest/L'D'Q' +Ernestine/L'D'Q' +Ernesto/L'D'Q' +Ernie/L'D'Q' +Ernst/L'D'Q' +Éros/L'D'Q' +Erpe-Mere/L'D'Q' +Erwan/L'D'Q' +Érythrée/L'D' +Ésaïe/L'D'Q' +Escaut/L' +Esch-sur-Alzette/L'D'Q' +Eschyle/L'D'Q' +Esculape/L'D'Q' +Esdras/L'D'Q' +Esitpa +Esméralda/L'D'Q' +Esneux/L'D'Q' +Ésope/L'D'Q' +Espagne/L'D' +Espelette/L'D'Q' +Espenel/L'D'Q' +Espitallier/D'Q' +Esquilin/L'D' +Essen/L'D'Q' +Essex/L'D' +Essilor/L'D'Q' +Essonne/L'D' +Estaimpuis/L'D'Q' +Estaing/D' +Esteban/L'D'Q' +Estelle/L'D'Q' +Estérel/L'D' +Esther/L'D'Q' +Estonie/L'D' +Estrémadure/L' +Estrie/L'D' +Étampes/L'D'Q' +Etan/L'D'Q' +Étang-Salé/L' +Étaples/L'D'Q' +État-nation/L'D'Q' +État-providence/L'D'Q' +États-Unis +États-nations/D'Q' +Ethan/L'D'Q' +Ethel/L'D'Q' +Ethel/L'D'Q' +Ethereum +Ethereum/L'D'Q' +Ethernet/L'D'Q' +Etherpad/L'D'Q' +Éthiopie/L'D' +Étienne/L'D'Q' +Étiennette/L'D'Q' +Etna/L'D' +Étrurie/L'D' +Éts +Ettelbruck/L'D'Q' +Etterbeek/L'D'Q' +Euclide/L'D'Q' +Eudes/L'D'Q' +Eugène/L'D'Q' +Eugénie/L'D'Q' +Eulalie/L'D'Q' +Euler/L'D'Q' +Eupen/L'D'Q' +Euphrasie/L'D'Q' +Euphrate/L' +Euphrosyne/L'D'Q' +Euralis/L'D'Q' +Eurasie/L'D' +Eure/L' +Eure-et-Loir/L'D' +Euripide/L'D'Q' +Eurobaromètre/S* +Eurogroupe/L' +Euronext/L'D'Q' +Europe/L'D' +Europol/D'Q' +Eurotunnel/L'D'Q' +Eurozone/L' +Eurydice/L'D'Q' +Eusèbe/L'D'Q' +Eustache/L'D'Q' +Euterpe/L'D'Q' +Eva/L'D'Q' +Éva/L'D'Q' +Évaine/L'D'Q' +Evan/L'D'Q' +Évariste/L'D'Q' +Eve/L'D'Q' +Ève/L'D'Q' +Éveline/L'D'Q' +Evelyn/L'D'Q' +Évelyne/L'D'Q' +Evere/L'D'Q' +Everest/L' +Evergem/L'D'Q' +Evgenia/L'D'Q' +Evgeny/L'D'Q' +Evgueni/L'D'Q' +Évhémère/L'D'Q' +Évisa/L'D'Q' +Evrard/L'D'Q' +Évreux/L'D'Q' +Évry/L'D'Q' +Exbrayat/L'D'Q' +Excalibur/D'Q' +Extrême-Orient/L'D' +ExxonMobil +Eylau/L'D'Q' +Eyleen/L'D'Q' +Eyrolles/L'D'Q' +Eysines/L'D'Q' +Eyzahut/L'D'Q' +Ézéchias/L'D'Q' +Ézéchiel/L'D'Q' +Ezra/L'D'Q' +F/U.||-- +F1 +FAI +FA-MAS +FAQ +FAST +FBI +FCEM +FDN +FEM +FET +FFDN +FFF +FLOSH +FLOSS +FLOTUS +FM +FMI +FOSS +FRF/-- +FSF +FSFE +FTP +FTTH +Fabergé +Fabian +Fabien +Fabienne +Fabio +Fabiola +Fabre +Fabrice +Fabrizio +Facebook +Faches-Thumesnil +Fadila +Fagnes +Fahrenheit +Faiella +FairPhone +Fairbanks +Faisalabad +Faith +Falkland +Fallières +Fallope +Fallouja +Fameck +Famenne +Fanny +Fantine +Faolan +Faraday +Farah +Farciennes +Farid +Farida +Farnèse +Farnoux +Farouk +Faso +Fatiha +Fatima +Fatou +Fatoumata +Faulkner +Faure +Faust +Faustine +Fayard +Fayçal +Fayette +Fécamp +Fed +FedEx +Federer +Federica +Federico +Fediverse +Fedora +Fehling +Feist +Feïza +Feldane +Felicia +Félicie +Félicité +Felicity +Félines-sur-Rimandoule +Felipe +Félix +Feller +Femke +Fénelon +Ferdinand +Férée +Ferenczi +Fergal +Fergus +Fermat +Fermi +Fernand +Fernande +Fernando +Féroé +Ferrare +Ferrari +Ferraris +Fert +Fès +Fethi +Feuerbach +Feydeau +Feynman +Fiacre +Fiat +Fibonacci +Fidji +Fields +Figaro +Figeac +Filipa +Filippo +Finistère +Finlande +Finn +Finndo +Finsler +Finzi +Fiodor +Fiona +FireWire +Firefox +FirefoxOS +Firmin +Firminy +Fischer +Fitzgerald +Flamel +Flaminia +Flammarion +Flandre/S. +Flandre-Occidentale +Flandre-Orientale +Flaubert +Flavia +Flavie +Flavien +Flavio +Flémalle +Fléron +Flers +Fleur +Fleurus +Fleury-Mérogis +Fleury-les-Aubrais +Flober +Floirac +Flora +Florange +Flore +Florence +Florence +Florennes +Florent +Florentin +Florentin +Florentin +Florentine +Florestan +Florian +Floriane +Floride +Florie +Florimel +Florimond +Florine +Floyd +Foch +Fock +Foix +Fomalhaut +Fontaine +Fontainebleau +Fontaine-l'Évêque +Fontenay +Fontenay-aux-Roses +Fontenay-le-Comte +Fontenay-le-Fleury +Fontenay-sous-Bois +Fontenelle +Forbach +Ford +Forest +Forez +Formose +Fortaleza +Fort-de-France +Fortran +Foshan +Fos-sur-Mer +Fouad +Foucault +Fouché +Fougères +Fourier +Fourmies +FrAndroid +Fragonard +Fraïssé +Frakir +Framasoft +Frameries +Fran +Franca +Françafrique +France +Francesca +Francesco +Francfort +Francfort-sur-le-Main +Franche-Comté +Francheville +Francillon-sur-Roubion +Francine +Francis +Francisco +Franck +Franco +François +François-Xavier +Françoise +Franconville +Francorchamps +Frank +Frankenstein +Frankie +Franklin +Franquin +Frantz +Franz +Frasnes-lez-Anvaing +Frauenfeld +Fréchet +Fred +Freddy +Frédéric +Frederick +Fredericton +Frédérique +Fredholm +Free +FreeBSD +Freetown +Fréjus +Frénaud +Frenchball +Frenchman +Frenchnerd +Frenet +Fresnel +Fresnes +Fresno +Freud +Freya +Freyming-Merlebach +Freymuth +Fribourg +Frichemesnil +Friedland +Friedman +Friedmann +Friedrich +Friendica +Frioul +Fritz +Frobenius +Fromentières +Frontenac +Frontenac +Frontignan +Frounze +Fubini +Fuchs +Fujian +Fujitsu +Fukuoka +Fukushima +Fulcanelli +Furnes +Furukawa +Futuna +Fuzhou +G/U.||-- +GAFAM +GBP/-- +GCMS +GDF +GEIPAN +GEVES +GIEC +GIGN +GMT +GNU +GPA +GPL +GPL +GPS +GSM +GSS +GTB +GTC +GTG +GTO +GULL +Gabe +Gabon +Gaborone +Gabriel +Gabriella +Gabrielle +Gaël +Gaëlle +Gaétan +Gaëtan +Gaëtane +Gaetano +Gagny +Gaïa +Gail +Gaillac +Gaiman +Gal/||-- +Galaad +Galatée +Galathée +Galatie +Galen +Galerkin +Galice +Galicie +Galilée +Galilée +Galileo +Galles +Gallien +Gallimard +Gallipoli +Galois +Galápagos +Gama +Gambetta +Gambie +Gambier +Gamecube +Gand +Gandhi +Gandi +Gange +Ganshoren +Gansu +Gantt +Ganymède +Gap +Garches +Gard +Gardanne +Garde +Garenne-Colombes +Gareth +Gargantua +Garges-lès-Gonesse +Garibaldi +Garnier +Garonne +Garrett +Garvalf +Gary +Gascogne +Gaspard +Gaspésie +Gaspésie–Îles-de-la-Madeleine +Gaspode +Gastinel +Gaston +Gatien +Gâtinais +Gatineau +Gaudí +Gauguin +Gaule/S. +Gaulle +Gaume +Gaumont +Gauss +Gauteng +Gauthier +Gautier +Gauvain +Gavere +Gavin +Gay-Lussac +Gaza +Gaziantep +Gazprom +Gbit/||-- +Gdansk +Gédéon +Geel +Geiger +Gelsenkirchen +Gembloux +Gemma +Genappe +Genas +Gene +Gênes +Genève +Geneviève +Genk +Gennes-sur-Glaize +Gennevilliers +Gentilly +Geoff +Geoffrey +Geoffroy +Géofoncier/S. +George +Georges +Georgetown +Georgette +Georgia +Géorgie +Georgina +Gerald +Gérald +Géraldine +Geraldo +Gérard +Géraud +Gerda +Gergovie +Gerhard +Géricault +Germain +Germaine +Germanie +Gérôme +Geronimo +Gerpinnes +Gers +Gertrude +Gestapo +Gévaudan +Gevrey-Chambertin +Gex +Ghana +Ghatanothoa +Ghislain +Ghislaine +Giacometti +Giacomo +Giap +Gibbs +Gibit/||-- +Gibraltar +Gide +Gien +Gif-sur-Yvette +Gijón +Gilbert +Gilberte +Gildas +Gileppe +Gilgamesh +Gilles +Gillian +Gimp +Gina +Ginette +Ginger +Gino +Gio/||-- +Giono +Giorgio +Giorgione +Giotto +Giovanna +Giovanni +Girard +Giraudot +Giraudoux +Gironde +Giscard +Gisèle +Gisors +Gistel +Git +Giulia +Giuseppe +Givenchy +Givors +Gizeh +Gladys +Glandon +Glaris +Glasgow +Glen +Glenn +Gluck +Gnis +GnuSocial +Go/||-- +Goa +Gobi +Godefroid +Gödel +Godounov +Goebbels +Goëmar +Goethe +Gogh +Gogol +Golan +Goldbach +Golden_Show +Goldoni +Golgi +Golgotha +Goliath +Gomorrhe +Goncourt +Gondwana +Gonesse +Gonfaron +Gontran +Gonzague +Goodyear +Google +Göran +Gorbatchev +Gordon +Gorenstein +Göring +Gorki +Göteborg +Gouët +Gouges +Gouhier +Gounod +Goursat +Goussainville +Goya +Graal +Grace +Grâce-Hollogne +Gradignan +Graeme +Graham +Gram +Gram-Schmidt +Grammalecte +Grammont +Gramsci +Granby +Grand-Quevilly +Grande-Bretagne +Grande-Synthe +Grant +Granville +Grasse +Grasset +Grassian +Grassmann +Gratien +Graulhet +Gravelines +Grayswandir +Graz +Graziella +GreLibre +Grèce +Greenpeace +Greenville +Greenwich +Greg +Grégoire +Gregor +Gregory +Grégory +Grenade +Grenelle +Grenoble +Gretchen +Grevisse +Grévy +Grez-Doiceau +Grieg +Grignan +Grignard +Grigny +Grigory +Grimbergen +Grimm +Grisons +Grobbendonk +Groenland +Grönwall +Gros-Morne +Grothendieck +Grötzsch +Gstaad +Gt/||-- +Gtep +Guadalajara +Guadeloupe +Guam +Guangdong +Guangxi +Guangzhou +Guantánamo +Guatemala +Guayaquil +Guebwiller +Guenièvre +Guénolé +Guénon +Guérande +Guéret +Guerlain +Guernesey +Guerzit +Guilaine +Guilhem +Guilherand-Granges +Guillaume +Guillemin +Guillermo +Guinée +Guinée-Bissau +Guipavas +Guiyang +Guizhou +Guizot +Gujan-Mestras +Gujarat +Günther +Gus +Gustave +Gustavo +Gutenberg +Guy +Guyana +Guyancourt +Guyane +Guyenne +Guylaine +Gwen +Gwenaël +Gwenaëlle +Gwendal +Gwendale +Gwendoline +Gwendolyn +Gwenola +Gwladys +Gwyneth +Gy/U.||-- +H/U.||-- +HD +HD +HDMI +HDMI +HIP +HIV +HLM +HQE +HS +HSBC/L'D'Q' +HSTS +HT +HTA +HTB +HTML +Hà +Haacht/L'D'Q' +Haaltert/L'D'Q' +Haar +Habacuc/L'D'Q' +Habib/L'D'Q' +Habsbourg +Hachette/L'D'Q' +Hack-in-Paris +Hadamard +Hadès/L'D'Q' +Hadrian/L'D'Q' +Hadrien/L'D'Q' +Haendel +Hague +Haguenau +Hahn +Haïfa/L'D'Q' +Haikou +Hainan +Hainaut +Haïti/L'D'Q' +Hakim/L'D'Q' +Hakima/L'D'Q' +Hal +Haley +Halicarnasse/L'D'Q' +Halifax/L'D'Q' +Halima/L'D'Q' +Hall +Halle +Halley +Halloween/S. +Halluin/L'D'Q' +Ham/L'D'Q' +Hamas +Hambourg +Hamel +Hamid/L'D'Q' +Hamilton +Hamlet/L'D'Q' +Hamme +HammerFall +Hammourabi +Hamont-Achel/L'D'Q' +Hampshire +Ham-sur-Heure-Nalinnes/L'D'Q' +Hamza/L'D'Q' +Han +Hangzhou/L'D'Q' +Hank +Hankel +Hannah/L'D'Q' +Hannibal/L'D'Q' +Hannut/L'D'Q' +Hanoï/L'D'Q' +Hanoucca/S. +Hanoukka/S. +Hanovre/L'D'Q' +Hans/L'D'Q' +Hansen +Harald/L'D'Q' +Harare +Harbin/L'D'Q' +Harbor +Hardy +Harelbeke +Harla/L'D'Q' +Harlem/L'D'Q' +Harmony +Harnack +Harnes/L'D'Q' +Haroche +Harold/L'D'Q' +Harriet/L'D'Q' +Harry +Hartogs +Harunobu +Harvard +Harvey/L'D'Q' +Haryana/L'D'Q' +Haskell/L'D'Q' +Hassan/L'D'Q' +Hasselt +Hastur +Haubourdin/L'D'Q' +Haumea +Hausdorff +Haussmann/L'D'Q' +Haut-Jura +Haut-Rhin +Haut-Sassandra +Haute-Corse +Haute-Garonne +Haute-Loire +Haute-Marne +Haute-Normandie +Haute-Saône +Haute-Savoie +Haute-Vienne +Hautem-Saint-Liévin +Hautes-Alpes +Hautes-Pyrénées +Hautmont/L'D'Q' +Hauts-de-Seine +Havane +Havre +Hawaï/L'D'Q' +Hawking +Hayange/L'D'Q' +Haydée/L'D'Q' +Haydn +Haye +Hayek +Haÿ-les-Roses/L' +Hazebrouck/L'D'Q' +Hazel/L'D'Q' +Heather/L'D'Q' +Heaviside +Hebei +Hébrides +Hécate/L'D'Q' +Hechtel-Eksel/L'D'Q' +Hecke +Hector/L'D'Q' +Hefei/L'D'Q' +Hegel +Heidegger +Heidelberg/L'D'Q' +Heidi/L'D'Q' +Heilongjiang +Heimlich +Heinrich/L'D'Q' +Heisenberg/L'D'Q' +Heist-op-den-Berg +Helen/L'D'Q' +Héléna/L'D'Q' +Hélène/L'D'Q' +Helianthus +Hélicon/L' +Héliogabale/L'D'Q' +Héliopolis/L'D'Q' +Hélios/L'D'Q' +Hellespont/L'D'Q' +Hellfest +Helmut/L'D'Q' +Héloïse/L'D'Q' +Helsinki/L'D'Q' +Helvétie/L'D' +Hem/L'D'Q' +Hemiksem/L'D'Q' +Hemingway/L'D'Q' +Henan +Hénault +Hendaye/L'D'Q' +Hendrik/L'D'Q' +Hénin-Beaumont/L'D'Q' +Hennebont/L'D'Q' +Hénoch/L'D'Q' +Henri/L'D'Q' +Henriette/L'D'Q' +Henrique/L'D'Q' +Henry +Héphaïstos/L'D'Q' +Héra/L'D'Q' +Héraclès/L'D'Q' +Héraclite/L'D'Q' +Hérault/L' +Herbert +Herbert/L'D'Q' +Herblay/L'D'Q' +Herck-la-Ville/L'D'Q' +Herculanum/L'D'Q' +Hercule/L'D'Q' +Herentals +Héricourt/L'D'Q' +Hermann/L'D'Q' +Hermès/L'D'Q' +Hermine/L'D'Q' +Hermione/L'D'Q' +Hermite/L'D'Q' +Hernando/L'D'Q' +Hero_Corp +Hérode/L'D'Q' +Hérodote/L'D'Q' +Hérouville-Saint-Clair/L'D'Q' +Herschel/L'D'Q' +Herselt/L'D'Q' +Herstal +Hertz +Herve +Hervé/L'D'Q' +Herzele/L'D'Q' +Hesbaye +Hésiode/L'D'Q' +Hespéride/S* +Hess +Hesse +Hessel +Hessenberg +Hestia/L'D'Q' +Heusden-Zolder +Hewlett-Packard/L'D'Q' +Hexley +Heymans +Hezbollah +Hibernate +Hicham/L'D'Q' +Hickman +Higgs +Highlands +Hilbert +Hilda/L'D'Q' +Hilde/L'D'Q' +Hildegarde/L'D'Q' +Hillary/L'D'Q' +Himalaya/L' +Himmler/L'D'Q' +Hindenburg/L'D'Q' +Hippocrate/L'D'Q' +Hippolyte/L'D'Q' +Hiram/L'D'Q' +Hiro/L'D'Q' +Hiroshige +Hiroshima +Hirson/L'D'Q' +Hispanie/L'D' +Hitachi +Hitchcock +Hitler/L'D'Q' +Hitomi/L'D'Q' +Hizoka +Hô-Chi-Minh-Ville +Hobart +Hobb +Hobbes +Hochschild +Hocine/L'D'Q' +Hodge +Hodgkin +Hoeilaart +Hoenheim/L'D'Q' +Hoffmann/L'D'Q' +Hoguin +Hohhot/L'D'Q' +Hokkaido +Hokusai +Hölder +Hollande +Hollande/L'D'Q' +Holly/L'D'Q' +Hollywood +Holmes +Homère/L'D'Q' +Homs/L'D'Q' +Honda +Honduras +Honegger +Hong +Hongkong/L'D'Q' +Hongrie +Honolulu/L'D'Q' +Honoré/L'D'Q' +Honorine/L'D'Q' +Honshu +Hooglede/L'D'Q' +Hoogstraten/L'D'Q' +Hopf +Hopkinson/L'D'Q' +Hopper +Horace/L'D'Q' +Horatio/L'D'Q' +Horn +Horner +Hortense/L'D'Q' +Horton +Horus/L'D'Q' +Houellebecq +Houilles +Houlbrèque +Houria/L'D'Q' +Householder +Houssay +Houston +Houthalen-Helchteren +Houthulst/L'D'Q' +Howard +Hubble +Hubei +Hubert/L'D'Q' +Hubscher +Hubzilla +Hudson/L'D'Q' +Huelgoat +Hugh/L'D'Q' +Hugo/L'D'Q' +Hugo/L'D'Q' +Hugues/L'D'Q' +Huguette +Hulshout/L'D'Q' +Hume +Hun/S. +Hunan +Huntington/L'D'Q' +Hurewicz +Huron +Hurwitz +Hussein/L'D'Q' +Husserl +Huxley/L'D'Q' +Huy +Huygens +Hyacinthe/L'D'Q' +Hyades +Hyderabad/L'D'Q' +Hyères/L'D'Q' +Hypatie/L'D'Q' +Hypérion/L'D'Q' +Hypnos/L'D'Q' +Hyundai +Hz/U.||-- +I/-- +IA/L'D'Q' +IBAN/L'D'Q' +IBM/L'D'Q' +IDE/L'D'Q' +IETF/L'D'Q' +IFREMER/L'D'Q' +IFSTTAR/L'D'Q' +IGBT/L'D'Q' +IGN/L'D'Q' +IHM/L'D'Q' +II/-- +III/-- +IIIe/-- +IIIᵉ/-- +IIde/-- +IIe/-- +IInd/-- +IIᵉ/-- +IMAP/L'D'Q' +IMAPS/L'D'Q' +IMEI/L'D'Q' +IMSI/L'D'Q' +INED/L'D'Q' +INPI/L'D'Q' +INRA/L'D'Q' +INRI/L'D'Q' +INRIA/L'D'Q' +INSA/L'D'Q' +IP/L'D'Q' +IRA/L' +IRD/L'D'Q' +IRFM/L'D'Q' +IRL +IRM/L'D'Q' +IRSTEA/L'D'Q' +ISBN/L'D'Q' +ISO/L'D'Q' +ITERG/L'D'Q' +IUFM/L'D'Q' +IUT/L'D'Q' +IV/-- +IVG/L'D'Q' +IVe/-- +IVᵉ/-- +IX/-- +IXe/-- +IXᵉ/-- +Iain +Ian +Ibadan/L'D'Q' +Ibiza/L'D'Q' +Ibrahim/L'D'Q' +Ibrahima/L'D'Q' +Icare/L'D'Q' +Ichtegem/L'D'Q' +Ida/L' +Ida/L'D'Q' +Idaho/L'D' +Idris +Idriss/L'D'Q' +Idrissa/L'D'Q' +Iekaterinbourg/L'D'Q' +Iéna/L'D'Q' +Ienisseï/L' +Ier/-- +Ignace/L'D'Q' +Ignacio/L'D'Q' +Igor/L'D'Q' +Iguaçu/L'D' +Ikea/L'D'Q' +Ilan/L'D'Q' +Ilana/L'D'Q' +Ildut/L'D'Q' +Île-de-France/L'D' +Île-du-Prince-Édouard/L' +Îles-de-la-Madeleine +Iliad/D'Q' +Iliade/L' +Iliana/L'D'Q' +Ilias/L'D'Q' +Ille-et-Vilaine/L'D' +Illinois/L'D' +Illkirch-Graffenstaden/L'D'Q' +Illyrie/L'D' +Illzach/L'D'Q' +Ilya/L'D'Q' +Ilyas/L'D'Q' +Impress/L'D'Q' +Inaya/L'D'Q' +Inde/S* +Indiana/L'D' +Indianapolis/L'D'Q' +Indira/L'D'Q' +Indochine/L'D' +Indonésie/L'D' +Indre/L'D' +Indre-et-Loire/L'D' +Indus/L' +Inès/L'D'Q' +Ingelmunster/L'D'Q' +Ingolstadt/L'D'Q' +Ingres/L'D'Q' +Ingrid/L'D'Q' +Inkscape/L'D'Q' +Inn/L'D' +Inna/L'D'Q' +Innsmouth/L'D'Q' +Inovia/L'D'Q' +Insee/L'D'Q' +Inserm/L'D'Q' +Insulinde/L'D' +Intel/L'D'Q' +Intermarché/L'D'Q' +Internet/D'Q' +Interpol/D'Q' +Io/L'D'Q' +Ionesco/L'D'Q' +Ioulia/L'D'Q' +Iouri +Iowa/L' +Iphigénie/L'D'Q' +Iqaluit/L'D'Q' +Irak/L'D' +Iran/L'D' +Ire/-- +Irena/L'D'Q' +Irène/L'D'Q' +Irénée/L'D'Q' +Irina/L'D'Q' +Irlande/L'D' +Iroise/L'D' +Isa/L'D'Q' +Isaac/L'D'Q' +Isabeau/L'D'Q' +Isabel/L'D'Q' +Isabella/L'D'Q' +Isabelle/L'D'Q' +Isadora/L'D'Q' +Isaiah/L'D'Q' +Isaïe/L'D'Q' +Isère/L'D' +Iseult/L'D'Q' +Ishtar/L'D'Q' +Isidore/L'D'Q' +Ising/L'D'Q' +Isis/L'D'Q' +Iskander/L'D'Q' +Islamabad/L'D'Q' +Island +Islande/L'D' +Isle-Adam/L' +Isle-d'Abeau/L' +Isle-sur-la-Sorgue/L' +Ismaël/L'D'Q' +Ismaïl/L'D'Q' +Ismérie/L'D'Q' +Isobel/L'D'Q' +Ispahan/L'D'Q' +Israël/L'D'Q' +Issoire/L'D'Q' +Issole/L' +Issoudun/L'D'Q' +Issy-les-Moulineaux/L'D'Q' +Istanbul/L'D'Q' +Istchee +Istres/L'D'Q' +Istrie/L'D' +Italie/L'D' +Ithaqua/L'D'Q' +Itô/L'D'Q' +Iva/L'D'Q' +Ivan/L'D'Q' +Ivana/L'D'Q' +Ivanhoé/L'D'Q' +Ivanna/L'D'Q' +Ivar/L'D'Q' +Ivry-sur-Seine/L'D'Q' +Ivy/L'D'Q' +Iwasawa/L'D'Q' +Ixelles/L'D'Q' +Ixion/L'D'Q' +Izegem/L'D'Q' +Izmir/L'D'Q' +Izushi +Iʳᵉ/-- +Iᵉʳ/-- +J/U.||-- +J.-C +JJSDN +JMeter +JO +JPY/-- +JSON +Jabbeke +Jack +Jackie +Jacksonville +Jacky +Jacob +Jacobi +Jacobson +Jacolot +Jacolot-Benestan +Jacqueline +Jacques +Jade +Jaffa +Jaguar +Jaime +Jaipur +Jakarta +Jake +Jalalabad +Jalila +Jamahiriya +Jamaïque +Jamal +Jamblique +James +Jamésie +Jamie +Jamil +Jamila +Jan +Jana +Jane +Janeiro +Janet +Janette +Janice +Janine +Janique +Jankélévitch +Janus +Japet +Japon +Jared +Jasmine +Jason +Jasra +Jaurès +Java +JavaScript +Javadoc +Javier +Jawad +Jaworski +Jaxom +Jay +Jayne +Jbus +Jean +Jean-Baptiste +Jean-Bernard +Jean-Charles +Jean-Christophe +Jean-Claude +Jean-François +Jean-Jacques +Jean-Louis +Jean-Luc +Jean-Marc +Jean-Marie +Jean-Michel +Jean-Noël +Jean-Pascal +Jean-Paul +Jean-Philippe +Jean-Pierre +Jean-Sébastien +Jean-Yves +Jeanine +Jeanne +Jeannette +Jeannin +Jeannine +Jeannot +Jeci +Jeff +Jefferson +Jeffrey +Jéhovah +Jelena +Jemappes +Jemeppe-sur-Sambre +Jemima +Jenkins +Jenna +Jennifer +Jenny +Jensen +Jeremiah +Jérémie +Jeremy +Jérémy +Jéricho +Jérôme +Jéromine +Jerry +Jersey +Jérusalem +Jess +Jesse +Jessica +Jessie +Jessy +Jésus +Jésus-Christ +Jewel +Jiangsu +Jiangxi +Jilin +Jill +Jillian +Jim +Jimmy +Jinan +Jiro +Jo +Joachim +Joakim +Joan +Joanie +Joanna +Joannie +Joaquim +Jocelyn +Jocelyne +Joconde +Jocrisse +Jodhpur +Jodie +Jodoigne +Jody +Joe +Joël +Joëlle +Joey +Joffrey +Johan +Johann +Johanna +Johannes +Johannesburg +John +Johnny +Johnson +Joliot +Jon +Jonas +Jonathan +Joncherey +Jones +Jordan +Jordanie +Jörg +Jorge +Jorgen +Joris +Jörmungand +José +Josée +Josef +Joseph +Josepha +Josèphe +Joséphine +Josephson +Josette +Josh +Joshua +Josiane +Josie +Josué +Joucas +Joué-lès-Tours +Joule +Joumond +Jourdain +Joyce +Juan +Juana +Juanita +Juda +Judas +Judd +Jude +Judée +Judicaël +Judith +Judy +Juglar +Jules +Julia +Julian +Juliana +Julianna +Julianne +Julie +Julien +Julienne +Juliette +Julio +Julius +June +Jung +Junon +Jupiter +Jura +Jurbise +Jürgen +Jurieu +Jurt/-- +Jussieu +Juste +Justin +Justine +Justinien +Juvénal +K/U.||-- +KGB +KMF/-- +KNX +KO +K-O +KO +K-O +KWS +Kaaba +Kaamelott +Kabatiella +Kaboul +Kabylie +Kac +Kacey +Kader +Kadiogo +Kadígia +Kafka +Kahan +Kahlo +Kairouan +Kaitlin +Kaitlyn +Kalahari +Kaliningrad +Kalman +Kalmthout +Kaluza +Kamal +Kamel +Kamil +Kampala +Kampenhout +Kamtchatka +Kaname +Kananga +Kandahar +Kandinsky +Kanpur +Kansas +Kant +Kapellen +Kara +Karachi +Karen +Kari +Karim +Karima +Karina +Karine +Karine +Karl +Karlsruhe +Karna +Karnak +Karnataka +Karnaugh +Karol +Karolina +Karyn +Kasaï-Occidental +Kasaï-Oriental +Kashfa +Kasimir +Kasterlee +Kastler +Katanga +Kate +Katherina +Katherine +Kathleen +Kathryn +Kathy +Katia +Katie +Kativik +Katja +Katmandou +Katniss +Katowice +Katy +Katznelson +Kaunas +Kawasaki +Kay +Kay +Kayl +Kayla +Kaylee +Kazakhstan +Kazan +Keeling +Keerbergen +Kehlen +Keira +Keith +Kelly +Kelsen +Kelsey +Kelvin +Kemal +Ken +Kendra +Kénitra +Kennedy +Kennelly +Kenneth +Kenny +Kent +Kentucky +Kenya +Kenza +Kenzo +Kepler +Kerbala +Kerguelen +Kering +Kermorphezen +Kerr +Kertahiti +Kessel +Kessler +Kevin +Keynes +Khadija +Khaled +Khalid +Khalil +Kharkov +Khartoum +Kheira +Khéops +Khéphren +Khintchine +Khomeini +Khrouchtchev +Kibera +Kibit/||-- +Kidal +Kiel +Kiera +Kierkegaard +Kiev +Kigali +Kilian +Kilimandjaro +Killian +Killing +Kim +Kimberley +Kimberly +King +Kingersheim +Kingston +Kingstown +Kinosaki +Kinrooi +Kinshasa +Kio/||-- +Kipling +Kippour +Kira +Kirchhoff +Kirghizie +Kirghizistan +Kirghizstan +Kiribati +Kirill +Kirk +Kirkouk +Kirsten +Kisangani +Kitchin +Kitty +Kjeldahl +Klaus +Klee +Klein +Klimt +Klitzing +Klondike +K'nex +Knokke-Heist +Knossos +Ko/||-- +Kobe +Koch +Kodaira +Koekelberg +Koharu +Kolkata +Kolmogorov +Kolvir +Kolwezi +Kolyma +Konatsu +Kondratiev +Kong +Köniz +Konqi +Konrad +Kontich +Konya +Korhogo +Kortemark +Kortenberg +Korteweg +Kosovo +Kotor +Kouïbychev +Kourou +Koursk +Kovalevskaïa +Koweït +Kościuszko +Kraainem +Krebs +Krefeld +Krein +Kremlin +Kremlin-Bicêtre +Kriens +Krishna +Krishnamurti +Krista +Kristen +Kristin +Kristina +Kristine +Kristof +Kronecker +Kropotkine +Kruibeke +Krull +Krystyna +Kuala +Kuiper +Kunlun +Kunming +Kunti +Kuratowski +Kurdistan +Kurosh +Kurt +Kusumi +Kutta +Kuurne +Kyle +Kylian +Kylie +Kyllian +Kyoto +Kyushu +L/U.||-- +LCD +LED +LGBT +LGBTI +LGBTIQ +LGV +LQDN +LSD +LVMH +LaSalle +Laakdal +Laarne +Labastide +Laboulet +Labrador +Lacan +Lacey +Lachésis +Lachmann +Lacordaire +Lactalis +Laeken +Laërce +Lætitia +Lafarge +Lafayette +Lagny-sur-Marne +Lagos +Lagrange +Laguerre +Lahore +Laigné +Lalande +Laloubère +Laly +Lamarck +Lamartine +Lamballe +Lambersart +Lambert +Lamborghini +Lamentin +Lana +Lanaken +Lanaudière +Lancelot +Lancia +Lancy +Landau +Landen +Landerneau +Landes +Landivisiau +Landry +Lanester +Laneuveville-derrière-Foug +Langerhans +Langevin +Langogne +LanguageTool +Languedoc +Languedoc-Roussillon +Lanka +Lannion +Lanvaux +Lanzhou +Laon +Laos +Laplace +Laponie +Lara +Larissa +Larousse +Larry +Lars +Larsen +Larzac +Las +Lascaux +Lasne +Lassay-les-Châteaux +Latifa +Latium +Latran +Laura +Laurasie +Laure +Laureen +Laureline +Lauren +Laurence +Laurent +Laurentides +Laurette +Lauriane +Laurianne +Laurie +Laurine +Lausanne +Lautréamont +Laval +Lavaur +Laveran +Lavoisier +Lawrence +Laxou +Lazare +Le_Bris +Léa +Leah +Léandre +Léane +Lebbeke +Lebesgue +Lebrun +Leclerc +Lede +Lee +Leeds +Leeuw-Saint-Pierre +Lefebvre +Lefschetz +Legendre +Léger +Lego +Legrand +Lehmer +Lehn +Leibnitz +Leibniz +Leicester +Leidenfrost +Leigh +Leila +Leïla +Leipzig +Lejeune +Lela +Leland +Lemaître +Léman +Lena +Léna +Lénine +Leningrad +Lennon +Lenny +Lenovo +Lens +Lenz +Léo +Léon +Léonard +Leonardo +Léonce +Leone +Léone +Léonidas +Léonide +Léonie +Leonora +Léonore +Léontine +Léopold +Léopoldine +Leopoldt +Léopoldville +Leroy +Les_Vigneaux +Lesage +Lesbos +Lesieur +Lesley +Leslie +Lesneven +Lesotho +Lesse +Lessig +Lessines +Lester +Lettonie +Leucippe +Leusse +Leuze-en-Hainaut +Levallois-Perret +Leverrier +Levi +Levi-Civita +Lévi-Strauss +Levinson +Lévis +Lévitique +Lévothyrox +Lévy +Lex +Lexus +Leyde +Leyla +Lhassa +Liam +Liaoning +LibX +Liban +Libby +Liberia +Libourne +Libramont-Chevigny +LibreOffice +Libreville +Libye +Lidl +Liechtenstein +Liedekerke +Liège +Liénard +Lierre +Liévin +Ligier +Ligniroux +Ligurie +Likasi +Lilas +Lili +Lilian +Liliane +Lilith +Lille +Lilongwe +Lilou +Lily +Lima +Limagrain +Limay +Limbourg +Limeil-Brévannes +Limesurvey +Limoges +Limousin +Lina +Linchamps +Lincoln +Linda +Lindsay +Lindsey +Line +Linéa +Lingolsheim +Linné +Linoa +Linum +Linus +Linux +LinuxFR +Lionel +Lioploum +Liouville +Lippmann +Lipschitz +Lisa +Lisbeth +Lisbonne +Lise +Liselle +Lisieux +Lisle +Lison +Lisp +Lissajous +Liszt +Littlewood +Littré +Lituanie +Liv +Liverpool +Livia +Livingstone +Livourne +Livry-Gargan +Liz +Lizbeth +Lizzie +Ljubljana +Llewella +Lloyd +Loan +Loane +Lobatchevski +Locarno +Lochristi +Locke +Lœvenbruck +Loewner +Logan +Lognes +Logrus +Loïc +Loigné-sur-Mayenne +Loir +Loire +Loire-Atlantique +Loiret +Loir-et-Cher +Loïs +Loïse +Lojasiewicz +Lokeren +Lola +Lolium +Lombardi +Lombardie +Lomé +Lomme +Lommel +Londerzeel +Londres +Longjumeau +Longué +Longueau +Longuefuye +Longuenesse +Longueuil +Longuyon +Longwy +Lons +Lons-le-Saunier +Loos +Looz +Lorelei +Lorena +Loréna +Lorentz +Lorenz +Lorenzo +Loretta +Lorette +Lori +Lorient +Lormont +Lorraine +Los +Lot +Lot-et-Garonne +Lothaire +Lotharingie +Lou +Louane +Loubet +Loubna +Lougalane +Louis +Louis-Philippe +Louisa +Louise +Louisette +Louisiane +Louison +Louisville +Louka +Louksor +Louna +Lourdes +Louvain +Louvain-la-Neuve +Louvière +Louviers +Louvre +Love +Lovecraft +Lovelace +Lovely_Rita +Lovćen +Loyola +Loyre +Lozère +Luanda +Lubbeek +Lübeck +Lubéron +Lublin +Lubumbashi +Luc +Luca +Lucas +Lucé +Lucerne +Lucette +Lucia +Luciana +Luciano +Lucie +Lucien +Lucienne +Lucifer +Lucile +Lucille +Lucinda +Lucius +Lucrèce +Lucrezia +Lucullus +Lucy +Ludivine +Ludovic +Ludovik +Ludwig +Lufthansa +Luftwaffe +Lug +Lugano +Luigi +Luis +Luisa +Luiz +Luka +Lukas +Luke +Lulle +Lully +Lumière +Lummen +Lumpur +Luna +Lunaria +Lune +Lunel +Lunéville +Lupita +Lure +Lusaka +Lusin +Lusitanie +Lutèce +Luther +Luthringer +Luxembourg +Lyapunov +Lyapunov +Lycaonie +Lycie +Lydia +Lydie +Lydie +Lyle +Lyme +Lyne +Lynette +Lynn +Lyon +Lyse +Lys-lez-Lannoy +László +Lódz +M +M1 +M2 +M3 +M6 +MADOI +MIPAW +MIT +MM +MODBUS +MOOC +MOS +MOSFET +MP3 +MSP430 +MST +Maarch +Maaseik +Maasmechelen +Maastricht +Mabel +Mac +MacLane +Mac-Mahon +Macao +Macdonald +Macédoine +Mach +Macha +Machelen +Machhad +Mackenzie +Maclaurin +Mâcon +Mâconnais +Macron +Madagascar +Maddie +Madeleine +Madeline +Madras +Madrid +Maël +Maëlle +Maëlys +Maeterlinck +Maeva +Maéva +Magali +Magalie +Magda +Magdala +Magdalena +Magdebourg +Magellan +Maggie +Maghreb +Maginot +Magnus +Magog +Magritte +Maguelone +Maguy +Mahâbhârata +Maharashtra +Mahaut +Mahler +Mahmoud +Mahomet +Mahon +Maïa +Mailclark +Maillane +Maillane +Maillol +Maimouna +Main +Maine +Maine-et-Loire +Mainvilliers +Maison-Blanche +Maisonobe +Maisons-Alfort +Maisons-Laffitte +Maistre +Maïwen +Maïwenn +Maj +Majid +Majorana +Majorque +Makémaké +Malabo +Malachie +Malaisie +Malakoff +Malawi +Malcev +Malcolm +Maldegem +Maldives +Malebranche +Malek +Malesherbes +Mali +Malik +Malika +Malines +Mallarmé +Mallory +Malmedy +Malmö +Malouines +Malraux +Malte +Malteurop +Malthus +Mamadou +Mamer +Mammon +Manach +Managua +Manama +Manaus +Manche +Manchester +Mandalay +Mandchourie +Mandela +Mandelbrot +Mandelieu-la-Napoule +Mandor +Mandy +Manet +Manfred +Manhattan +Manicouagan +Maniema +Manille +Manitoba +Manjaro +Mannheim +Manon +Manosque +Mans +Mantes-la-Jolie +Mantes-la-Ville +Mantoue +Manuel +Manuela +Manuella +Mao +Maputo +Mara +Maracaibo +Maras +Marat +Marc +Marc-Antoine +Marcel +Marcela +Marcelin +Marceline +Marcelle +Marcellin +Marcelline +Marcello +Marcelo +Marche-en-Famenne +Marcia +Marcion +Marco +Marcos +Marcq-en-Barœul +Marcus +Marcy +Mardouk +Marek +Margaret +Margaux +Margherita +Margie +Margo +Margot +Marguerite +Maria +Mariam +Marianne +Mariannes +Mariano +Marie +Marie-Agnès +Marie-Ange +Marie-Anne +Marie-Antoinette +Marie-Cécile +Marie-Chantal +Marie-Charlotte +Marie-Christine +Marie-Claire +Marie-Claude +Marie-Dominique +Marie-France +Marie-Françoise +Marie-Hélène +Marie-Jeanne +Marie-José +Marie-Josèphe +Marie-Laure +Marie-Line +Marie-Louise +Marie-Madeleine +Marie-Noëlle +Marie-Odile +Marie-Paule +Marie-Pierre +Marie-Rose +Marie-Thérèse +Marielle +Mariette +Marignan +Marignana +Marignane +Marigné-Peuton +Mariko +Marilou +Marilyn +Marilyne +Marina +Marine +Mario +Marion +Marisa +Marisol +Marissa +Marita +Maritza +Marius +Marivaux +Marjolaine +Marjorie +Mark +Markov +Markus +Marla +Marlène +Marly +Marly +Marly-le-Roi +Marmande +Marmara +Marnay-sur-Seine +Marne +Marnie +Maroc +Maromme +Maroni +Marot +Marouane +Marquette-lez-Lille +Marrakech +Mars +Marsanne +Marseille +Marshall +Marta +Martenot +Martha +Marthe +Martial +Martigues +Martin +Martine +Martinet +Martini +Martinien +Martinique +Marty +Marvin +Marwan +Marx +Mary +Maryam +Maryland +Marylène +Maryline +Marylise +Marylou +Maryse +Maryvonne +Marzens +Mascate +Mascouche +Maserati +Maslow +Mason +Massachusetts +Masséna +Massenet +Massimo +Massy +MasterCard +Masutti +Matchstick +Mateo +Mathéo +Matheron +Matheson +Mathias +Mathieu +Mathilda +Mathilde +Mathilde +Mathis +Mathurin +Mathusalem +Mathys +Matignon +Matisse +Matoury +Matt +Matteo +Mattéo +Matthew +Matthias +Matthieu +Maubeuge +Maud +Maude +Mauguio +Maupassant +Maure/S. +Maureen +Maurepas +Maurétanie +Mauriac +Maurice +Mauricette +Mauricie +Mauricio +Mauritanie +Maurizio +Maurras +Maven +Mavoungo +Max +Maxence +Maxime +Maximien +Maximilien +Maximin +Maxine +Maxwell +Mayence +Mayenne +Mayenne +Mayet-de-Montagne +Maylis +Mayotte +Mazamet +Mazarin +Mazda +Mbit/||-- +Mbuji-Mayi +McKenna +McKinley +Me/S. +Meakyl +Meaux +Mecklembourg +Mecklembourg-Poméranie-Occidentale +Mecque +Medan +Médard +Medb +Médée +Medef +Medellín +Médéric +Médicis +Médine +Meerhout +Mée-sur-Seine +Meeuwen-Gruitrode +Meg +Megan +Mégane +Megumi +Mehdi +Mehmet +Meiji +Meise +Meknès +Mékong +Melaine +Mélanésie +Melania +Mélanie +Melbourne +Melchior +Méléagre +Mélenchon +Mélia +Méliès +Mélina +Melinda +Méline +Mélisande +Melissa +Mélissa +Mélissandre +Melle +Mellin +Melun +Melville +Melvin +Memphis +Mende +Mendel +Mendeleïev +Mendelssohn +Mené +Ménil +Ménilmontant +Menin +Mennecy +Menton +Méphistophélès +Mercalli +Mercantour +Mercator +Mercedes +Merchtem +Mercie +Merck +Mercure +Meredith +Merelbeke +Méric +Méricourt +Mérida +Mérignac +Mérimée +Merkel +Merleau-Ponty +Merlin +Méru +Meryl +Mésie +Mésopotamie +Messaline +Messer +Messine +Météo-France +Mettet +Metz +Meudon +Meulebeke +Meurthe +Meurthe-et-Moselle +Meuse +Mexico +Mexique +Meylan +Meyzieu +Mézières +Mezzogiorno +Mgr/S. +Mia +Miami +Mibit/||-- +Michael +Michaël +Michée +Michel +Michel-Ange +Michèle +Michelet +Michelin +Micheline +Michelle +Michelson +Michigan +Mickaël +Micronésie +Micropub +Microsoft +Midas +Middelkerke +Midgard +Midi-Pyrénées +Midlands +Midwest +Miguel +Mikael +Mikaël +Mike +Mikey +Mikhaïl +Miklos +Mila +Milan +Milankovitch +Mildred +Milena +Milgram +Milhaud +Mill +Millau +Miller +Millerand +Millman +Milne +Milo +Milton +Milwaukee +Mimas +Mina +Minakshisundaram +Mindy +Minervois +Miniploum +Minkowski +Minneapolis +Minnesota +Minos +Minsk +Mio/||-- +Mions +Miquelon +Mira +Mirabeau +Mirabel +Miramas +Miranda +Mirandole +Mircea +Mireille +Mirelle +Mirmande +Miroslav +Miró +Mises +Miskatonic +Mississippi +Missouri +Mitch +Mithra +Mithridate +Mitnick +Mitry-Mory +Mitsubishi +Mittelhausbergen +Mitterrand +Mix_Bizarre +Miyabi +Mlle/S. +Mme/S. +Mnémosyne +Mo/||-- +Moab +Möbius +Moby +Modigliani +Moebius +Moët +Mogadiscio +Mohamed +Mohammed +Mohenjo-daro +Mohs +Moira +Moire/S. +Moïse +Moissac +Moissan +Moissy-Cramayel +Mokhtar +Mol +Moldavie +Molenbeek-Saint-Jean +Moleskine +Molière +Molières +Molise +Molly +Moloch +Molotov +Mombasa +Mona +Monaco +Mönchengladbach +Mondercange +Mondeville +Mondrian +Monet +Monge +Mongolie +Mongolie-Intérieure +Monica +Monique +Monod +Monroe +Monrovia +Mons +Monsanto +Mons-en-Barœul +Mont-Blanc +Mont-Saint-Aignan +Montagné +Montagnier +Montaigne +Montaigu-Zichem +Montana +Montargis +Montataire +Montauban +Montbéliard +Montbrison +Montceau-les-Mines +Mont-de-Marsan +Monte +Monte-Carlo +Montébran +Montel +Montélimar +Monténégro +Montereau-Fault-Yonne +Montérégie +Monterrey +Montesquieu +Montesson +Montessori +Montevideo +Montfermeil +Montgeron +Montgolfier +Monticelli +Montigny-en-Gohelle +Montigny-le-Bretonneux +Montigny-le-Tilleul +Montigny-lès-Cormeilles +Montigny-lès-Metz +Montivilliers +Montluçon +Montmagny +Montmartre +Montmorency +Montparnasse +Montpellier +Montréal +Montreuil +Montreux +Montrouge +Montserrat +Moore +Moorslede +Morad +Morangis +Moravie +Morbihan +Mordell +Mordelles +More +Moreau +Morel +Morera +Moresby +Morgan +Morgane +Morin +Morlaix +Morlanwelz +Morley +Mornans +Mornas +Morne-à-l'Eau +Morphée +Morsang-sur-Orge +Morse +Morteau +Morton +Mortsel +Morvan +Moscou +Moscovie +Moselle +Moser +Moskova +Mossad +Mossoul +Motte-Servolex +Mougins +Mouhamad +Mouhammad +Mouhoun +Moulin +Moulins +Mouloud +Mounir +Mourad +Mourmansk +Mourre +Mouscron +Moussa +Moussorgski +Moustapha +Mouvaux +Moyen-Orient +Mozambique +Mozart +Mozilla +Mpc/||-- +Mr +Mrs +Mt/||-- +Mtep +Mucha +Muhammad +Mulhouse +Muller +Müller +Mulsanne +Mumbai +Munch +Münchhausen +Munich +Münster +Murcie +Mureaux +Muret +Muriel +Murielle +Murphy +Murray +Musset +Mussolini +Mustafa +Mustapha +Mx/||-- +Myanmar +Mykérinos +Mylène +Myriam +Mʳ +Mʳˢ +Mˡˡᵉ +Mˡˡᵉˢ +Mᵉ +Mᵉˢ +Mᵍʳ +Mᵍʳˢ +Mᵐᵉ +Mᵐᵉˢ +N/U.||-- +NASA +NDLR +NDT +N'Djamena +NEC +NF +NIRS +NSA +Nabil +Nabuchodonosor +Nacira +Nadège +Nadia +Nadim +Nadine +Nadir +Nadja +Nagasaki +Nagata +Nagoya +Nagy +Nahum +Naimark +Nairobi +Najat +Nakayama +Namibie +Namur +Nanchang +Nancy +Nanjing +Nankin +Nanning +Nanterre +Nantes +Naomi +Naples +Napoléon +Narbonne +Narcisse +Nasdaq +Nash +Nashville +Nasser +Nassera +Nassim +Nassima +Nassir +Nassira +Natacha +Natalia +Natascha +Natasha +Nate +Nathalie +Nathan +Nathanaël +Nathanaëlle +Nathaniel +Nauru +Naussac +Navarre +Navier-Stokes +Naypyidaw +Nazareth +Nazca +NdT +Neandertal +Néandertal +Nebraska +Nebuchadnezzar +Necker +Necronomicon +Neel +Néel +Neerpelt +Néfertiti +Néguev +Néhémie +Nehru +Neil +Neila +Nelly +Nelson +Némésis +Nemours +Neo +Néo-Versailles +Népal +Neptune +Néréide +Néréide/S. +Néron +Nerval +Ness +Nessus +Nestlé +Nestor +Nestorius +Netbeans +Netflix +Neuchâtel +Neuilly +Neuilly-Plaisance +Neuilly-sur-Marne +Neuilly-sur-Seine +Neumann +Neustrie +Nevada +Nevanlinna +Nevele +Nevers +Newcastle +Newport +Newton +NextCloud +Nguyen +Niagara +Niamey +Nicaragua +Nice +Nicée +Nicholas +Nick +Nicky +Nicodème +Nicolas +Nicole +Nicoletta +Nicolette +Nicomaque +Nicomédie +Nicosie +Nidwald +Niel +Niels +Niépce +Nietzsche +Nieuport +Nièvre +Nigel +Niger +Nigeria +Nijlen +Nike +Nikita +Nikkei +Nikki +Nikodym +Nikola +Nikolaï +Nil +Nils +Nîmes +Nina +Nine +Ningxia +Ninive +Nino +Ninon +Ninove +Nintendo +Niort +Nissan +Nitot +Nivelles +Nivernais +Nixon +Noa +Noah +Noam +Nobel +Nodens +Noé +Noël +Noëlle +Noëllie +Noémie +Noether +Nœux-les-Mines +Nogent-le-Rotrou +Nogent-sur-Marne +Nogent-sur-Oise +Noirmoutier +Noisiel +Noisy-le-Grand +Noisy-le-Sec +Nokia +Nolan +Nolwenn +Nora +Norbert +Nord-Kivu +Nord-Pas-de-Calais +Nord-du-Québec +Nordine +Norfolk +Norique +Norma +Norman +Normandie +Norne/S. +Northumbrie +Norton +Norvège +Nothomb +Noto +Notre-Dame +Nottingham +Nouakchott +Nouméa +Nour +Noura +Noureddine +Nouveau-Brunswick +Nouveau-Mexique +Nouveau-Québec +Nouvelle-Calédonie +Nouvelle-Écosse +Nouvelle-Galles +Nouvelle-Guinée +Nouvelle-Orléans +Nouvelle-Zélande +Nouvelles-Hébrides +Novartis +Novgorod +Novossibirsk +Novotel +Noyon +Np/||-- +Nubie +Nuiton +Numerama +Numidie +Nunavik +Nunavut +Nuremberg +Nusselt +Nuuk +Nvidia +Nyarlathotep +Nyons +Nyquist +Nyx +OCDE/L'D'Q' +OCaml/L'D'Q' +ODF/L'D'Q' +Œdipe/L'D'Q' +OFBiz/D'Q' +OFCE/L'D'Q' +OGM/L'D'Q' +OK +OLLN +OMC/L'D'Q' +OMS/L'D'Q' +ONEMA +ONERA/L'D'Q' +ONG/L'D'Q' +ONU/L'D'Q' +OPA/L'D'Q' +OPE/L'D'Q' +OPEP/L'D'Q' +OPR/L'D'Q' +OPV/L'D'Q' +ORL/L'D'Q' +OS/L'D'Q' +OSH/L'D'Q' +OSS/L'D'Q' +OStatus +OTAN/L'D'Q' +OVH/L'D'Q' +Oakland/L'D'Q' +Ob/L'D'Q' +Obama/L'D'Q' +Oberhausen/L'D'Q' +Obernai/L'D'Q' +Obéron/L'D'Q' +ObjectWeb +Obwald/D' +Occam/L'D'Q' +Occitanie/L'D' +Océane/L'D'Q' +Océanie/L'D' +Ockham/L'D'Q' +Octave/L'D'Q' +Octeville/L'D'Q' +Odéon/L' +Odessa/L'D'Q' +Odette/L'D'Q' +Odile/L'D'Q' +Odilon/L'D'Q' +Odin/L'D'Q' +Odon/L'D'Q' +Oe/||-- +Offenbach/L'D'Q' +Offenbach/L'D'Q' +Ohio/L'D' +Ohm/L'D'Q' +Oignies/L'D'Q' +Oisans/L' +Oise/L' +Oissel/L'D'Q' +Oklahoma/L'D' +Olaf/L'D'Q' +Oldham/L'D'Q' +Olea_Medical +Oleg/L'D'Q' +Olen/L'D'Q' +Oléron/L'D'Q' +Olga/L'D'Q' +Oliver/L'D'Q' +Olivet/L'D'Q' +Olivia/L'D'Q' +Olivier/L'D'Q' +Ollioules/L'D'Q' +Olonne-sur-Mer/L'D'Q' +Olonzac/L'D'Q' +Oloron-Sainte-Marie/L'D'Q' +Olya/L'D'Q' +Olympe/L' +Olympie/L'D'Q' +Omaha/L'D'Q' +Oman/L'D'Q' +Omar/L'D'Q' +Ombrie/L' +Omdourman/L'D'Q' +Omeyyade/S* +Omsk/L'D'Q' +Ontario/L' +Oort/L'D'Q' +Oosterzele/L'D'Q' +Oostkamp/L'D'Q' +Opel/L'D'Q' +OpenBSD +OpenOffice/L'D'Q' +OpenStreetMap/L'D'Q' +Opglabbeek/L'D'Q' +Ophélie/L'D'Q' +Oppenheimer/L'D'Q' +Opwijk/L'D'Q' +Oran/L'D'Q' +Orange/L'D'Q' +Orcades +Orcinas/L'D'Q' +Oréal/L' +Oregon/L'D' +Orekit/L'D'Q' +Oren/L'D'Q' +Orénoque/L' +Oriane/L'D'Q' +Origène/L'D'Q' +Origné/L'D'Q' +Orion/L'D'Q' +Orlando/L'D'Q' +Orlane/L'D'Q' +Orléans/L'D'Q' +Orly/L'D'Q' +Orne/L'D' +Ornella/L'D'Q' +Oronte/L' +Orphée/L'D'Q' +Orsay/L'D'Q' +Orthez/L'D'Q' +Orvault/L'D'Q' +Orwell/L'D'Q' +Oryanne/L'D'Q' +Osaka/L'D'Q' +Oscar/L'D'Q' +Osiris/L'D'Q' +Oslo/L'D'Q' +Osny/L'D'Q' +Osric/L'D'Q' +Ossétie/L'D' +Ostende/L'D'Q' +Ostie/L'D'Q' +Ostrava/L'D'Q' +Ostwald/L'D'Q' +Othe/L'D' +Othello/L'D'Q' +Othman/L'D'Q' +Othon/L'D'Q' +Ottawa/L'D'Q' +Ottignies-Louvain-la-Neuve/L'D'Q' +Otto/L'D'Q' +Ouagadougou +Oud-Heverlee/L'D'Q' +Ouessant/L'D'Q' +Ouganda/L'D' +Ougarit/L'D'Q' +Oujda/L'D'Q' +Oulan-Bator/L'D'Q' +Oullins/L'D'Q' +Oupeye/L'D'Q' +Oural/L' +Ouranos/L'D'Q' +Ouroboros/L'D' +Ourthe/L' +Ousmane/L'D'Q' +Oussama/L'D'Q' +Outaouais/L' +Outreau/L'D'Q' +Ouzbékistan/L'D' +Overijse/L'D'Q' +Overpelt/L'D'Q' +Ovide/L'D'Q' +Oviedo/L'D'Q' +Owen/L'D'Q' +OwnCloud +Oxfam/L'D'Q' +Oxford/L'D'Q' +Oyonnax/L'D'Q' +Oyonnax/L'D'Q' +Ozog/L'D'Q' +Ozoir-la-Ferrière/L'D'Q' +P/||-- +P2P +PACA +PAO +PC +PCV +PDF +PDF +PDG +P-DG +PGCD +PHP +PIB +PLU +PMA +PME +PMU +PNB +POTUS +PPCM +PPMS +PPRE +PPRI +PRAP +PS +PSA +PV +PVC +Pa/U.||-- +Pablo +Paco +Pacôme +Pacy-sur-eure +Padé +Padoue +Paget +Pagnol +Paige +Pakistan +Palaiseau +Palaos +Palatin +Palerme +Palestine +Paley +Pallas +Palmyre +Paloma +Pamela +Pamiers +Pamphylie +Pan +Panama +Paname +Panamá +Panasonic +Pandore +Pangée +Pannonie +Pantagruel +Pantin +Panurge +Paola +Paolo +Papeete +Papouasie +Papouasie-Nouvelle-Guinée +Pâques +Paracelse +Paraguay +Paramaribo +Pareto +Paribas +Paris +Pâris +Parkinson +Parme +Parmelan +Parménide +Parque/S. +Parthenay +Parthénon/S. +Parthie +Pascal +Pascal +Pascale +Pascalou +Pas-de-Calais +Passau +Passy +Pasteur +Pat +Patagonie +Paterne +Patodi +Patonnier +Patras +Patrice +Patricia +Patrick +Patrizia +Patrocle +Patsy +Patty +Pau +Paul +Paula +Paule +Paulette +Pauli +Paulin +Paulina +Pauline +Pauling +Paulo +Pausanias +Pavel +Pavlov +PayPal +Pays-Bas +Paz +Pbit/||-- +Peano +Pearl +Pearson +Pecq +Pedro +Peer +Pégase +Peggy +Pékin +Pélagie +Pelay +Pelletier +Péloponnèse +Peltier +Pelton +Pelvoux +Pendjari +Pendragon +Pénélope +Penh +Penjab +Pennsylvanie +Penny +Penthésilée +Penthièvre +Pépieux +Pépin +Perast +Perceval +Père-Lachaise +Peregrin +Peretti +Pergame +Périclès +Périgord +Périgueux +Perl +Perm +Pernes-les-Fontaines +Pernod +Pérou +Perpignan +Perraud +Perrault +Perreux-sur-Marne +Perrin +Perrine +Perse +Persée +Perséphone +Persépolis +Perth +Pertuis +Péruwelz +Perón +Peshawar +Pessac +Pétain +Pétange +Pétaouchnok +Pete +Peter +Petit-Quevilly +Petite-Île +Petitmont +Pétra +Pétrarque +Petrobas +Petrograd +Pétronille/L'D'Q' +Peugeot +Peuton +Pfaffenhoffen +Pfizer +Phèdre +Phénicie +Phil +Philadelphie +Philalèthe +Philémon +Philibert +Philip +Philippa +Philippe +Philippeville +Philippines +Phillips +Philomène +Philon +Phnom +Phobos +Phocean +Phoebe +Phœbé +Phoenix +Phragmen +Phrygie +Phyllis +Piaget +Piassale +Piave +Pibit/||-- +Picard +Picardie +Picasso +Pie +Piégros-la-Clastre +Piémont +Pierre +Pierre-Amiel +Pierre-Antoine +Pierre-Louis +Pierre-Yves +Pierrefitte-sur-Seine +Pierrelatte +Pierrette +Pierrick +Pierrot +Pieter +Pietro +Pigalle +Pikine +Pilar +Pilate +Pilbara +Pino +Pinocchio +Pinochet +Pinson +Pio/||-- +Piolenc +Pioneer +Piotr +Piper +Pirandello +Pirelli +Pise +Pisidie +Pisum +Pitcairn +Pitot +Pittsburgh +Piwik +Pixérécourt +Pizarro +Pl/||-- +Placide +Plaisance-du-Touch +Plaisir +Plancherel +Planck +Plan-de-Cuques +Platon +Plemelj +Plérin +Plessis-Robinson +Plessis-Trévise +Pleymo +Pline +Plœmeur +Ploiesti +Plotin +Ploufragan +Plougasnou +Plougastel-Daoulas +Plouguerneau +Ploum +Ploumette +Plouploum +Plouzané +Plovdiv +Plutarque +Pluton +Plymouth +Pô +Po/||-- +Podgorica +Poët-Célard +Poët-Laval +Poggi +Poher +Poincaré +Pointe-Claire +Poisson +Poissy +Poitiers +Poitou +Poitou-Charentes +Pol +Pollock +Pollux +Polo +Pologne +Polony +Polybe +Polynésie +Pomeline +Poméranie +Pompéi +Pompidou +Pondichéry +Pont-Euxin +Pont-Sainte-Maxence +Pont-à-Mousson +Pontaix +Pontarlier +Pontault-Combault +Pont-de-Barret +Pont-de-Claix +Pontgibaud +Pontivy +Pontoise +Pontryagin +Ponzi +Poperinge +Popper +Pornic +Porphyre +Porsche +Port +Port-Gentil +Port-au-Prince +Port-de-Bouc +Portel +Portia +Portigliatti +Porto +Porto-Novo +Porto-Vecchio +Portugal +Poséidon +Possession +Potemkine +Potsdam +Potter +Pottier +Pouchkine +Pouhiou +Poutine +Poznan +Pr/S. +Prada +Pradet +Prague +Praia +Prairie +Prandtl +Pratchett +Praxitèle +Pre/S. +Pré-Saint-Gervais +Pretoria +Prévert +Priam +Priape +Primel +Primel-Trégastel +Princeton +Prisca +Priscilla +Priscille +Pristina +Pristy +Privas +Processing +Proche-Orient +Procyon +Profibus +Profondeville +Prokofiev +Prolog +Prométhée +Prosper +Protée +Proudhon +Proust +Provence +Provins +Proxilio +Prudence +Prusse +Ptolémée +PubSubHubbub +Publicis +Puccini +Puck +Puebla +Puffy +Puiseux +Pullman +Pune +Purcell +Puteaux +Puurs +Puy-de-Dôme +Puy-en-Velay +Pygmalion +Pyongyang +Pyrénées +Pyrénées-Atlantiques +Pyrénées-Orientales +Pyrrha +Pyrrhus +Pythagore +Pólya +Pʳ +Pʳˢ +Pʳᵉ +Pʳᵉˢ +QG +QGIS +QI +Qatar +Qinghai +Qualitel +Quaregnon +Québec +Queensland +Quentin +Quercy +Questembert +Quetzalcóatl +Queue-en-Brie +Quiberon +Quichotte +Quimper +Quimperlé +Quintilien +Quirinal +Quito +Qumran +R/||-- +RAGT +RAM +RATP +RDA +RENATER +RER +RFA +RFC +RFID +RFLP +RGAA +RGI +RGS +RIB +RMI +RMIste/S. +RMN +RN +RNA-seq +RODP +ROM +ROS +RSA +RSS +RTBF +RTT +RUB/-- +Râ +Rabat +Rabelais +Rachel +Rachid +Rachida +Rachmaninov +Racine +Rademacher +Radon +Raeren +Rafael +Rafale +Raffaella +Ragnar +Ragnarök +Raimondo +Raincy +Raismes +Raïssa +Rajasthan +Ralph +Ramallah +Raman +Râmâyana +Rambouillet +Ramon +Ramonville-Saint-Agne +Ramsès +Ramuz +Randall +Random +Randstad +Randy +Rangoon +Ranst +Raoul +Raph +Raphaël +Raphaëlle +Raphson +Rapperswil-Jona +Raqqa +Raquel +Raschig +Raspberry +Raspoutine +Ratisbonne +Rauch +Raul +Ravachol +Ravel +Ravels +Ray +Rayan +Rayleigh +Raymond +Raymonde +Reagan +Réaumur +Rebecca +Rebecq +Rebma +Recife +Recklinghausen +Reconquista +Redmine +Regina +Reginald +Régine +Régis +Régulus +Reich +Reichstag +Reidemeister +Reiko +Reims +Reiten +Relecq-Kerhuon +Rellich +Rembrandt +Remi +Rémi +Remich +Remire-Montjoly +Remus +Rémy +Renaix +Renan +Renata +Renaud +Renault +Renazé +René +Renée +Rennes +Renoir +Renzo +Repentigny +Retie +Rett +Retz +Réunion +Reuters +Reykjavík +Reynald +Reynolds +Rezé +Rham +Rhanda +Rhéa +Rhénanie +Rhénanie-Palatinat +Rhénanie-du-Nord-Westphalie +Rhétie +Rhin +Rhode +Rhodes +Rhodes-Extérieures +Rhodes-Intérieures +Rhodésie +Rhodia +Rhonda +Rhône +Rhône-Alpes +Rhue +Rica +Ricard +Ricardo +Riccardo +Riccati +Ricci +Richard +Richelieu +Richemont +Richet +Richmond +Richter +Ricinus +Rick +Ricky +Rico +Riedisheim +Riehen +Riemann +Riemst +Riesz +Riga +Rigaud +Rigel +Rijkevorsel +Rilga +Rillieux-la-Pape +Rimandoule +Rimbaud +Rimouski +Rinaldo +Rio +Riom +Riorges +Ris-Orangis +Rita +Ritchie +Ritt +Rive-de-Gier +Rivery +Riviera +Rivière-Pilote +Rivière-Salée +Rixensart +Rixheim +Riyad +R'lyeh +R'n'B +Roanne +Rob +Robert +Roberta +Roberte +Roberto +Roberval +Robespierre +Robin +Robin +Robinson +Roch +Rochebaudin +Rochefort +Rochefoucauld +Roche-la-Molière +Rochelle +Roche-sur-Yon +Rodez +Rodin +Rodney +Rodolfo +Rodolphe +Rodrigo +Rodrigue +Roeser +Roger +Rognac +Rohan +Roissy +Roissy-en-Brie +Rokhlin +Roland +Rolande +Rolando +Rolle +Rolls-Royce +Romagne +Romain +Romainville +Romandie +Romane +Romanov +Romans-sur-Isère +Romaric +Rombas +Romberg +Rome +Roméo +Romilly-sur-Seine +Romorantin-Lanthenay +Romuald +Romulus +Ron +Ronald +Ronan +Roncevaux +Ronchin +Roncq +Ronnie +Ronsard +Roosdaal +Roosevelt +Roquebrune-Cap-Martin +Roquebrune-sur-Argens +Rorschach +Rosa +Rosalie +Rosario +Rose +Rose-Marie +Roseline +Roselyne +Roselyse +Rosemonde +Rosetta +Rosine +Rosita +Rosny-sous-Bois +Ross +Rossini +Rossinière +Rostand +Roswell +Roth +Rothbard +Rothschild +Rotin +Rotselaar +Rotterdam +Roubaix +Roubion +Rouceau +Rouen +Rouergue +Rougemont +Roulers +Roumanie +Rousseau +Roussillon +Rouyn-Noranda +Rowina +Rowling +Roxana +Roxane +Roxanne +Roy +Royan +Royaume-Uni +Roynac +Ruanda +Ruben +Rubens +Rubicon +Ruby +Ruchaud +Rudolf +Rudolph +Rudy +Rueil-Malmaison +Ruffini +Ruhr +Ruillé-Froid-Fonds +Rumelange +Rûmî +Rumilly +Rumst +Runge +Rungis +Rupert +Russell +Russie/S. +Rust +Ruth +Rutherford +Rutishauser +Rwanda +Ryan +Ryanair +Ryxeo +S/U.||-- +SA +SADT +SAP +SARL +SCIC +SCOT +SCSI +SDF +SDTAN +SEO +SEPA +SEPA +SF +SFINX +SFR +SIG +SILL +SIRET +SMIC +SMS +SMTP +SNCF +SOS +SPF +SPIP +SPRL +SQL +SRAS +SS +SSD +SSI +SSII +SST +STMicroelectronics +Saab +Saad +Sabatier +Sabine +Sables-d'Olonne +Sablé-sur-Sarthe +Sabrina +Sacha +Sacramento +Saddam +Sade +Safi +Safia +Sagan +Saguenay +Saguenay–Lac-Saint-Jean +Sahara +Saïd +Saïda +Saïgon +Saillans +Saint-Amand-Montrond +Saint-Amand-les-Eaux +Saint-André +Saint-André-les-Vergers +Saint-André-lez-Lille +Saint-Avertin +Saint-Avold +Saint-Barthélemy +Saint-Benoît +Saint-Brice-sous-Forêt +Saint-Brieuc +Saint-Bruno-de-Montarville +Saint-Chamond +Saint-Claude +Saint-Claude +Saint-Cloud +Saint-Colomban-des-Villards +Saint-Constant +Saint-Cyr +Saint-Cyr-l'École +Saint-Cyr-sur-Loire +Saint-Denis +Saint-Denis-d'Anjou +Saint-Dié +Saint-Dié-des-Vosges +Saint-Dizier +Saint-Domingue +Saint-Égrève +Saint-Empire +Saint-Esprit +Saint-Étienne +Saint-Étienne-du-Rouvray +Saint-Eustache +Saint-Exupéry +Saint-Fargeau-Ponthierry +Saint-Fons +Saint-Fort +Saint-François +Saint-Gall +Saint-Gaudens +Saint-Genis-Laval +Saint-Georges +Saint-Germain-en-Laye +Saint-Ghislain +Saint-Gilles +Saint-Gilles-Waes +Saint-Gratien +Saint-Herblain +Saint-Hyacinthe +Saint-Jacques-de-Compostelle +Saint-Jean +Saint-Jean-Baptiste +Saint-Jean-de-Braye +Saint-Jean-de-Luz +Saint-Jean-de-la-Ruelle +Saint-Jean-sur-Richelieu +Saint-Jérôme +Saint-Joseph +Saint-Josse-ten-Noode +Saint-Junien +Saint-Just +Saint-Just-Saint-Rambert +Saint-Kitts-et-Nevis +Saint-Lambert +Saint-Laurent +Saint-Laurent-des-Mortiers +Saint-Laurent-du-Maroni +Saint-Laurent-du-Var +Saint-Leu +Saint-Leu-la-Forêt +Saint-Lô +Saint-Louis +Saint-Malo +Saint-Mandé +Saint-Marin +Saint-Martin +Saint-Martin-Boulogne +Saint-Martin-Petit +Saint-Martin-d'Hères +Saint-Martin-de-Crau +Saint-Maur-des-Fossés +Saint-Maurice +Saint-Max +Saint-Maximin-la-Sainte-Baume +Saint-Médard-en-Jalles +Saint-Michel-de-Feins +Saint-Michel-sur-Orge +Saint-Nazaire +Saint-Nazaire-le-Désert +Saint-Nicolas +Saint-Nicolas +Saint-Office +Saint-Omer +Saint-Orens-de-Gameville +Saint-Ouen +Saint-Ouen-l'Aumône +Saint-Patrick +Saint-Paul +Saint-Paul-lès-Dax +Saint-Pétersbourg +Saint-Pierre +Saint-Pierre-des-Corps +Saint-Pierre-et-Miquelon +Saint-Pol-sur-Mer +Saint-Priest +Saint-Quentin +Saint-Raphaël +Saint-Renan +Saint-Saëns +Saint-Saulve +Saint-Sébastien-sur-Loire +Saint-Siège +Saint-Sulpice +Saint-Sylvestre +Saint-Trond +Saint-Tropez +Saint-Valentin +Saint-Verhaegen +Saint-Vincent-et-les-Grenadines +Sainte-Alliance +Sainte-Anastasie +Sainte-Anne +Sainte-Catherine-de-Fierbois +Sainte-Croix-Vallée-Française +Sainte-Foy-lès-Lyon +Sainte-Geneviève-des-Bois +Sainte-Hélène +Sainte-Julie +Sainte-Luce-sur-Loire +Sainte-Lucie +Sainte-Marie +Sainte-Maxime +Sainte-Rose +Sainte-Savine +Sainte-Suzanne +Sainte-Thérèse +Saintes +Saintonge +Sajous +Sakharov +Salaberry-de-Valleyfield +Saladin +Salamanque +Salem +Salernes +Salim +Salima +Salisbury +Sallanches +Sallaumines +Sally +Salma +Salmane +Salmon +Salomé +Salomon +Salon-de-Provence +Salonique +Salvador +Salvatore +Salwa +Salzbourg +Sam +Samantha +Samara +Samarcande +Samarie +Sambre +Sambreville +Sami +Samia +Samir +Samira +Samoa +Samothrace +Sampson +Samson +Samsung +Samu +Samuel +Samy +San +Sanaa +Sanary-sur-Mer +Sancerrois +Sand +Sand +Sandra +Sandrine +Sandy +Sanem +Sanjay +Sankara +Sannois +Sanofi +Santerre +Santiago +Santorin +Saône +Saône-et-Loire +Saoû +Saoud +Sapporo +Saqqarah +Sara +Saragaglia +Saragosse +Sarah +Sarajevo +Saran +Sarasvati +Sarcelles +Sard +Sardaigne +Sardanapale +Sargon +Sarkozy +Sarre +Sarrebourg +Sarrebruck +Sarreguemines +Sarthe +Sartre +Sartrouville +Sasha +Saskatchewan +Saskia +Sassandra +Satan +Satie +Sato +Saturne +Saturnin +Saul +Saumur +Saussure +Savannah +Saverne +Savigny-le-Temple +Savigny-sur-Orge +Savoie +Savonarole +Saxe +Saxe-Anhalt +Saxe-Cobourg +Scandinavie +Scarlett +Sceaux +Schaerbeek +Schaffhouse +Schauder +Schengen +Schermann +Schiff +Schifflange +Schilde +Schiller +Schiltigheim +Schleswig-Holstein +Schmidt +Schmitt +Schneider +Schneier +Schnirelmann +Schoelcher +Schoenberg +Schopenhauer +Schoten +Schottky +Schouten +Schreier +Schröder +Schrödinger +Schtroumpf/S. +Schtroumpfette/S. +Schubert +Schumann +Schumpeter +Schur +Schwartz +Schwarz +Schwarzschild +Schwerin +Schwytz +Schwyz +Scipion +Scott +Scoville +Scrameustache/S. +Scred_TV +Scudéry +Scylla +SeaMonkey +Seagate +Seamus +Sean +Seat +Seattle +Sebastian +Sébastien +Sébastopol +Seclin +Sedan +Sega +Ségolène +Séguin +Seidel +Seifert +Seine +Seine-Maritime +Seine-Saint-Denis +Seine-et-Marne +Selena +Séléna +Sélène +Séléné +Sélestat +Selim +Selina +Selma +Seltz +Semarang +Sémélé +Sémiramis +Semois +Sénas +Sendai +Seneffe +Sénégal +Sénégambie +Sénèque +Senlis +Sens +Séoul +Sept-Îles +Septèmes-les-Vallons +Seraing +Séraphin +Séraphine +Sérapis +Serbie +Serena +Serge +Sergio +Sergueï +Servas +Sésostris +Sète +Seth +Severi +Séverin +Séverine +Sévigné +Séville +Sevran +Sèvre +Sèvres +Seychelles +Seyne-sur-Mer +Seynod +Seyssinet-Pariset +Sfax +Sforza +Shaanxi +Shaarli +Shabnam +Shakespeare +Shandong +Shane +Shanghai +Shangri-La +Shannon +Shanxi +Shaolin +Shapiro +Sharon +Shaun +Shawinigan +Shawn +Sheckley +Sheffield +Shéhérazade +Sheila +Shell +Shelley +Shelly +Shenyang +Shenzhen +Sherbrooke +Sherlock +Sheryl +Shijiazhuang +Shikoku +Shimomura +Shimura +Shirley +Shiva +Shoah +Shub-Niggurath +Shuttleworth +Siam +Sibérie +Sibylle +Sichuan +Sicile +Siddhartha +Sidney +Sidoine +Sidon +Sidonie +Sieg +Siegel +Siegfried +Siegrid +Siemens +Sierpiński +Sierra +Sieyès +Sigebert +Siggy +Sigismond +Sigmar +Sigmund +Siguéploum +Sigurd +Sikasso +Silas +Silésie +Sill +Silvère +Silvestre +Silvia +Silvio +Simenon +Siméon +Simmel +Simmons +Simon +Simone +Simonetta +Simpson +Sinaï +Singapour +Sin-le-Noble +Sion +Sirius +Sisimiut +Sisyphe +Six-Fours-les-Plages +Sixtine +Skopje +Slackware +Slimane +Slimane-Baptiste +Slovaquie +Slovénie +Smith +Smolensk +Snoop +Snowden +Sobolev +Socin +Socrate +Sodexo +Sodome +Sofi +Sofia +Sofiane +Sogdiane +Soignies +Soissons +Soisy-sous-Montmorency +Solaar +Solange +Soledad +Soleil +Solène +Soleure +Solex +Solférino +Soliman +Soljenitsyne +Solliès-Pont +Sologne +Solveig +Somain +Somalie +Somme +Sommerfeld +SonarQube +Sonia +Sonntag +Sony +Sonya +Sophia +Sophie +Sophocle +Sophonie +Soraya +Sorbonne +Sorel-Tracy +Soren +Sorghum +Sorgues +Sotteville-lès-Rouen +Sotteville-les-rouen +Souad +Soudan +Souffelweyersheim +Soufiane +Souleymane +Soumagne +Souriau +Sousse +Soustelle +Southampton +Soweto +Soyans +Soyaux +Spa +Spaceroots +SpagoBI +Spartacus +Sparte +Spencer +Spinoza +Split +Sprimont +Sri +St/||-- +Stabroek +Stacey +Stacy +Staden +Staël +Stains +Staline +Stalingrad +Stallman +Stan +Standard_de_Liège +Standford +Stanford +Stanislas +Stanley +Stanleyville +Starbucks +Stark +Starleague +Stasi +Steenokkerzeel +Steeve +Stefan +Stefanie +Stefano +Stein +Steinbeck +Steinhaus +Steinway +Stekene +Stella +Stendhal +Steph +Stephan +Stéphan +Stéphane +Stéphanie +Stephen +Steve +Steven +Stevie +Stieltjes +Stiring-Wendel +Stirling +Stirner +Stockholm +Stœhr +Stoke-on-Trent +Stokes +Stonehenge +Strabon +Stradivarius +Strasbourg +Strauss +Stravinski +Streisand +Strejc +Struts +Stu +Stuart +Stuart/S. +Sturm +Stuttgart +Styx +Sucy-en-Brie +Sud-Bandama +Sud-Kivu +Sud-Soudan +Sudètes +Sue +Suède +Suétone +Suez +Suffolk +Suhuy/-- +Suisse +Sumatra +Sumer +Summer +Surabaya +Surcouf +Suresnes +Surinam +Suriname +Surrey +Susan +Susannah +Susie +Sussex +Suzanne +Suzette +Suzhou +Suzuki +Suzy +Sv/U.||-- +Svalbard +Sven +Sverdlovsk +Svetlana +Swartz +Swatch +Swayvill +Swaziland +Swift +Switch +Sycorax +Sydney +Sye +Sylow +Sylvain +Sylvaine +Sylvère +Sylvestre +Sylvette +Sylvia +Sylviane +Sylvie +Sylvine +Sylvius +Symantec +Syngenta +Syracuse +Syrie +SysML +Sysdream +Szczecin +São +T/U.||-- +TD +TDB +TDF +TER +TF1 +TGI +TGV +THD +TI +TIC +TMS +TNT +TOC +TP +TPE +TTC +TTL +TV +TVA +Tabitha +Tachkent +Tacite +Tadjikistan +Tahiti +Tain-l'Hermitage +Taipei +Taïwan +Taiyuan +Takeshi +Talant +Talence +Talleyrand +Tallinn +Tamagawa +Tamara +Tamerlan +Tamise +Tammy +Tampico +Tampon +Tananarive +Tancrède +Tanger +Tanguy +Tania +Tanit +Tanya +Tanzanie +Tao +Tara +Tarare +Tarascon +Tarascon +Tarbes +Tarek +Tarentaise +Tarente +Tarik +Tarn +Tarn-et-Garonne +Tarnos +Tarquin +Tarraconaise +Tarski +Tartempion +Tasmanie +Tassadit +Tassin-la-Demi-Lune +Tatiana +Taurides +Taverny +Taylor +Tbilissi +Tbit/||-- +Tchad +Tchaïkovski +Tchakaloff +Tchebotarev +Tchebychev +Tchécoslovaquie +Tchekhov +Tcheliabinsk +Tchéquie +Tchernobyl +Tchétchénie +Ted +Teddy +Tedrick +Tegucigalpa +Téhéran +Teichmüller +Tel-Aviv +Telefónica +Télémaque +Témara +Ténakourou +Tenerife +Tengri +Tennessee +Tennyson +Téo +Teotihuacán +Terence +Térénez +Teresa +Térésa +Tergnier +Terhemis +Teri +Termonde +Ternat +Terre +Terre-Neuve +Terre-Neuve-et-Labrador +Terrebonne +Terrence +Terri +Terry +Tertullien +Tervuren +Tesla +Tess +Tessa +Tessenderlo +Tessin +Teste-de-Buch +Téthys +Tétouan +Texas +Tezuka +Thaddée +Thadée +Thaïlande +Thalès +Thalie +Thanatos +Thanksgiving/S. +Thatcher +Thea +Théa +Thèbes +Thècle +Thelma +Thémis +Thémistocle +Théo +Théocrite +Théodebert +Théodora +Théodore +Théodoric +Théodose +Théodule +Théophile +Theresa +Thérésa +Thérèse +Thermopyles +Thésée +Thessalie +Thessalonique +Thetford +Thétis +Theux +Thévenin +Thiais +Thibaud +Thibault +Thibaut +Thiérache +Thierry +Thiers +Thiers +Thiès +Thionville +Thomas +Thompson +Thomson +Thonon-les-Bains +Thor +Thot +Thouars +Thoune +Thoutmosis +Thrace +Thucydide +Thuin +Thunderbird +Thurgovie +Thuringe +Tia +Tianjin +Tibère +Tibériade +Tibet +Tibit/||-- +Tibre +Tielt +Tielt-Winge +Tiers-Monde +Tietze +Tiffany +Tiffauges +Tignes +Tijuana +Tikal +Tillier +Tim +Timéo +Timisoara +Timor +Timothée +Timothy +Tina +Tino +Tinqueux +Tio/||-- +Tiphaine +Tirana +Tirlemont +Titan +Titania +Titanic +Titchmarsh +Tite +Tite-Live +Titicaca +Titien +Titograd +Titouan +Titus +Tizi-Ouzou +To/||-- +ToPIA +Tobias +Tobie +Tobin +Tocqueville +Toda +Todd +Toeplitz +Togo +Tokelau +Tokyo +Tolède +Tolkien +Tolstoï +Tom +Tomas +Tombouctou +Tomcat +Tomé +Tommy +Tonga +Tongres +Toni +Tonils +Tonkin +Tony +Torcy +Torelli +Torhout +Tori +Toronto +Torquemada +Torr/||-- +Torricelli +Toscane +Toshiba +Touba +Toufik +Toul +Toulon +Toulouse +Toulouse-Lautrec +Toungouska +Touraine +Tourcoing +Tourette +Tourgueniev +Tourlaville +Tournai +Tournaisis +Tournefeuille +Tournier +Tours +Toussaint +Tout-Paris +Toutankhamon +Toutatis +Toyooka +Toyota +Tracey +Tracy +Trafalgar +Trajan +Transnistrie +Transylvanie +Trappes-en-Yvelines +Travis +Trélazé +Tremblay-en-France +Tremelo +Trentin-Haut-Adige +Très-Haut +Trevor +Tricia +Triel-sur-Seine +Trieste +Trifouillis-les-Oies +Trinité-et-Tobago +Trinity +Tripoli +Triptolème +Trish +Tristan +Troie +Trois-Rivières +Tronel +Tronel-Peyroz +Trotski +Troy +Troyes +Trudeau +Trudy +Truinas +Truman +Trump +Tryo +Tryton +Tsahal +Tsathoggua +Tshikapa +Tuamotu +Tubize +Tucson +Tudor/S. +Tulle +Tulsa +Tunguska +Tunis +Tunisie +Turgot +Turin +Turing +Turkestan +Turkménistan +Turks-et-Caïcos +Turku +Turner +Turnhout +Turquie +Tutte +Tuttlingen +Tuvalu +Tux +Twain +Twitter +Tychonoff +Tyler +Typhaine +Tyrol +Tyrone +Tórshavn +UE/L' +UEM +ULM/L'D'Q' +UMTS/L'D' +UNIX/D'Q' +UPJV/L'D'Q' +URCA/L'D'Q' +URL/L'D'Q' +URSS/L'D' +URSSAF/L'D'Q' +US +USA +USB/L'D'Q' +USB/L'D'Q' +USD/-- +UTC/L'D'Q' +UTF/L'D'Q' +UV/L'D'Q' +Uber/L'D'Q' +Ubuntu +Uccle/L'D'Q' +Ugo/L'D'Q' +Ukraine/L'D' +Ulam/L'D'Q' +Ulis +Ulm/L'D'Q' +Ulrich/L'D'Q' +Ulster/L'D' +Ulysse/L'D'Q' +Umbriel/L'D'Q' +Ummo/L'D'Q' +Unesco/L'D'Q' +Ungava/L'D' +Unicef/L'D'Q' +Unicode/L'D' +Unilever/L'D'Q' +Upie +Ur/L'D'Q' +Uranus/L'D'Q' +Urbain/L'D'Q' +Uri/L'D' +Ursula/L'D'Q' +Ursule/L'D'Q' +Uruguay/L'D' +Ürümqi +Ushuaïa/L'D'Q' +Ussel/L'D'Q' +Uster/L'D'Q' +Utah/L'D' +Ute/L'D'Q' +Uther/L'D'Q' +Utique/L'D'Q' +Utrecht/L'D'Q' +V/-- +V/U.||-- +VA/U.||-- +VAE +VDF +VF +VI/-- +VIH +VII/-- +VIII/-- +VIIIe/-- +VIIIᵉ/-- +VIIe/-- +VIIᵉ/-- +VIP +VIe/-- +VIᵉ/-- +VO +VOD +VPN +VTC +VTT +Vachez +Vadim +Vaduz +Vahan +Vaires-sur-Marne +Valais +Valbonne +Val-d'Oise +Val-d'Or +Val-de-Marne +Val-de-Reuil +Valence +Valenciennes +Valentigney +Valentin +Valentina +Valentine +Valentinien +Valentino +Valenton +Valère +Valeria +Valérie +Valérien +Valéry +Valette-du-Var +Valgrind +Valjean +Valladolid +Vallauris +Vallouise +Valmy +Valois +Valorex +Valparaiso +Valy +Vancouver +Vandœuvre +Vandœuvre-lès-Nancy +Vanessa +Vanina +Vannes +Vanoise +Vanuatu +Vanves +Var +Varennes +Varennes-Vauzelles +Varetz +Vargas +Varna +Varsovie +Varuna +Vasil +Vassili +Vassily +Vatican +Vauban +Vaucluse +Vaud +Vaudreuil-Dorion +Vaugirard +Vaulx-en-Velin +Vauréal +Vauvert +Vaux-le-Pénil +Ve/-- +Vèbre +Veda +Véda/S. +Véga +Vegas +Veil +Velay +Vélizy-Villacoublay +Velázquez +Vence +Vendée +Vendenheim +Vendôme +Vénétie +Venezuela +Venise +Vénissieux +Venn +Venturi +Vénus +Veolia +Vera +Vercheny +Vercingétorix +Vercors +Verdi +Verdun +Verhaeren +Verizon +Verlaine +Vermeer +Vermont +Verne +Verneuil-sur-Seine +Vernier +Vernon +Vernouillet +Vérone +Veronica +Veronika +Véronique +Véronne +Verrières-le-Buisson +Versailles +Ver-sur-mer +Vertou +Verviers +Vesc +Vésinet +Vesoul +Vespasien +Vesta +Vésuve +Vétérini +Vexin +Veyrier +Vialle +Vichy +Vicki +Vicky +Victoire +Victor +Victoria +Victoriaville +Victorien +Victorine +Vidal +Vienne +Vientiane +Vierzon +Vietnam +Vietoris +Vieux-Condé +Vigenère +Vigneux-sur-Seine +Vigo +Viktor +Viktoria +Vilaine +Ville-d'Avray +Villefontaine +Villefranche-de-Rouergue +Villefranche-sur-Saône +Villejuif +Villemomble +Villemot +Villenave-d'Ornon +Villeneuve +Villeneuve-Loubet +Villeneuve-Saint-Georges +Villeneuve-d'Ascq +Villeneuve-la-Garenne +Villeneuve-le-Roi +Villeneuve-lès-Avignon +Villeneuve-sur-Lot +Villeparisis +Villepinte +Villers-la-Ville +Villers-lès-Nancy +Villetaneuse +Villeurbanne +Villiers-le-Bel +Villiers-sur-Marne +Villon +Vilnius +Vilvorde +Vim +Vimaire +Viminal +Vince +Vincennes +Vincent +Vincenzo +Vinci +Vinciane +Vinsobres +Violaine +Violette +Viollet-le-Duc +Violy +Virasoro +Vire +Virgile +Virginia +Virginie +Virginie-Occidentale +Viroflay +Virton +Viry-Châtillon +Vishnou +Vistule +Vitali +Vitebsk +Viterbi +Vitoria +Vitré +Vitrolles +Vitruve +Vitry-le-François +Vitry-sur-Seine +Vittoria +Vittorio +Vitória +Vivaldi +Vivendi +Vivian +Viviane +Vivien +Vladimir +Vladivostok +Vlaminck +Vodafone +Vogüe +Voiron +Voisins-le-Bretonneux +Volga +Volkswagen +Volta +Voltaire +Volterra +Volvo +Vosges +Vosselaar +Vries +Vve/S. +Vyasa +Vᵉ/-- +Vᵛᵉ +Vᵛᵉˢ +W/U.||-- +W3C +WAI +WASP +WC +WCAG +Waasmunster +Wadowice +Waerden +Wagner +Wagram +Walcourt +Waldo +Walhalla +Walid +Wallace +Wallas +Wallis +Wallis-et-Futuna +Wallonie +Wally +Walmart +Walras +Walt +Walter +Wanda +Wantzel +Wanze +Waregem +Waremme +Waring +Warner +Warren +Washington +Wasquehal +Wassim +Waterloo +Watermael-Boitsfort +Watson +Watt +Watteau +Wattignies +Wattrelos +Wavre +Wavre-Sainte-Catherine +Wayne +Wb/U.||-- +WebSub +Weber +Wedderburn +Wegener +Wehrmacht +Weierstrass +Weimar +Weis +Wellington +Wells +Wemmel +Wenceslas +Wendell +Wendy +Werber +Werewindle +Wernicke +Wervik +Wesley +Wessex +Westende +Westerlo +Westhoek +Westinghouse +Westminster +Westmount +Westphalie +Wetteren +Wetzel +Wevelgem +Weyl +Weymers +Wezembeek-Oppem +Wh/U.||-- +Wheatstone +Whirlpool +Whitehead +Whitehorse +Whitney +Whitney +Wi-Fi +Wi-Fi +Wichelen +Wichita +Wiener +Wiesbaden +Wightman +Wigner +Wii +Wikipédia +Wikivoyage +Wilber +Wilber +Wilbur +Wilde +Wilfred +Wilfrid +Wilfried +Wilhelm +Will +Willa +Willebroek +Willem +William +Williams +Willie +Willy +Wilma +Wilson +Windhoek +Windows +Wingene +Winnipeg +Winterthur +Wirsung +Wisconsin +Witt +Wittelsheim +Wittenheim +Wittgenstein +Woippy +Wojtowicz +Wolfgang +Woluwe-Saint-Lambert +Woluwe-Saint-Pierre +Wolverhampton +Wommelgem +Woody +Woolf +Writer +Wroclaw +Wuhan +Wuppertal +Wurtemberg +Wuustwezel +Wyoming +X/-- +XAF/-- +XI/-- +XII/-- +XIII/-- +XIIIe/-- +XIIIᵉ/-- +XIIe/-- +XIIᵉ/-- +XIV/-- +XIVe/-- +XIVᵉ/-- +XIX/-- +XIXe/-- +XIXᵉ/-- +XIe/-- +XIᵉ/-- +XL/-- +XLI/-- +XLII/-- +XLIII/-- +XLIIIe/-- +XLIIIᵉ/-- +XLIIe/-- +XLIIᵉ/-- +XLIV/-- +XLIVe/-- +XLIVᵉ/-- +XLIX/-- +XLIXe/-- +XLIXᵉ/-- +XLIe/-- +XLIᵉ/-- +XLV/-- +XLVI/-- +XLVII/-- +XLVIII/-- +XLVIIIe/-- +XLVIIIᵉ/-- +XLVIIe/-- +XLVIIᵉ/-- +XLVIe/-- +XLVIᵉ/-- +XLVe/-- +XLVᵉ/-- +XLe/-- +XLᵉ/-- +XML +XOF/-- +XPF/-- +XV/-- +XVI/-- +XVII/-- +XVIII/-- +XVIIIe/-- +XVIIIᵉ/-- +XVIIe/-- +XVIIᵉ/-- +XVIe/-- +XVIᵉ/-- +XVe/-- +XVᵉ/-- +XX/-- +XXI/-- +XXII/-- +XXIII/-- +XXIIIe/-- +XXIIIᵉ/-- +XXIIe/-- +XXIIᵉ/-- +XXIV/-- +XXIVe/-- +XXIVᵉ/-- +XXIX/-- +XXIXe/-- +XXIXᵉ/-- +XXIe/-- +XXIᵉ/-- +XXL +XXV/-- +XXVI/-- +XXVII/-- +XXVIII/-- +XXVIIIe/-- +XXVIIIᵉ/-- +XXVIIe/-- +XXVIIᵉ/-- +XXVIe/-- +XXVIᵉ/-- +XXVe/-- +XXVᵉ/-- +XXX/-- +XXXI/-- +XXXII/-- +XXXIII/-- +XXXIIIe/-- +XXXIIIᵉ/-- +XXXIIe/-- +XXXIIᵉ/-- +XXXIV/-- +XXXIVe/-- +XXXIVᵉ/-- +XXXIX/-- +XXXIXe/-- +XXXIXᵉ/-- +XXXIe/-- +XXXIᵉ/-- +XXXV/-- +XXXVI/-- +XXXVII/-- +XXXVIII/-- +XXXVIIIe/-- +XXXVIIIᵉ/-- +XXXVIIe/-- +XXXVIIᵉ/-- +XXXVIe/-- +XXXVIᵉ/-- +XXXVe/-- +XXXVᵉ/-- +XXXe/-- +XXXᵉ/-- +XXe/-- +XXᵉ/-- +Xander +Xavier +Xavière +Xe/-- +Xebia +Xenia +Xénophane +Xénophon +Xerxès +Xi'an +Xining +Xinjiang +Xᵉ/-- +YHWH +Yacine +Yaël +Yaëlle +Yahvé +Yahweh +Yakov +Yale +Yalta +Yamabe +Yamina +Yamoussoukro +Yanis +Yann +Yannick +Yannis +Yaoundé +Yapaka +Yasmina +Yasmine +Yasser +Yassine +Yazid +Ybit/||-- +Yellowknife +Yellowstone +Yémen +Yennenga +Yerres/L'D'Q' +Yes +Yggdrasil/L'D'Q' +Yibit/||-- +Yinchuan +Yio/||-- +Yo/||-- +Yoan +Yoann +Yog-Sothoth +Yohan +Yohann +Yoko +Yokohama +Yolaine +Yolanda +Yolande +Yoneda +Yonne/L'D' +Yorinne +York +YouTube +Youcef +Yougoslavie +Younes +Younès +Young +Youri +Youssef +Youssouf +Yousuf +Ypres/L'D'Q' +Ys/L'D'Q' +Yser/L' +Yseult/L'D'Q' +Yucatán +Yudhishthira/L'D'Q' +Yukon +Yunnan +Yutz/L'D'Q' +Yvain/L'D'Q' +Yvan/L'D'Q' +Yvelines +Yverdon-les-Bains/L'D'Q' +Yves/L'D'Q' +Yvetot/L'D'Q' +Yvette/L'D'Q' +Yvon/L'D'Q' +Yvonne/L'D'Q' +Yzeure/L'D'Q' +ZAD +ZEP +ZNIEFF +ZUP +Zach +Zacharie +Zachary +Zack +Zaclys +Zagreb +Zahia +Zahra +Zaïre +Zakaria +Zambèze +Zambie +Zandhoven +Zara +Zarathoustra +Zariski +Zaventem +Zawinski +Zay +Zbit/||-- +Zea +ZeaInvent +Zedelgem +Zedong +Zeeman +Zélande +Zelazny +Zele +Zelzate +Zemst +Zener +Zénon +Zermelo +Zeus +Zhejiang +Zhengzhou +Zia +Ziad +Zibit/||-- +Zimbabwe +Zimmermann +Zina +Zineb +Zinédine +Zio/||-- +Zita +Zo/||-- +Zoé +Zoersel +Zoey +Zohra +Zola +Zonhoven +Zonnebeke +Zorn +Zoroastre +Zosime +Zotero +Zottegem +Zoug +Zulte +Zurich +Zweig +Zwevegem +Zwijndrecht +Zwin +Zwingli +Zygmund +_ +a +à/L'D'Q'Q*Qj +a/||-- +ab +abaca/S* +abacule/S* +abaissable/S* +abaissante/F* +abaissée/S* +abaisse-langue/L'D'Q' +abaissement/S* +abaisser/a4p+ +abaisseur/S* +abajoue/S* +abalober +abalone/S* +abalourdir +abandon/S* +abandonnataire/S* +abandonnatrice/F* +abandonnement/S* +abandonner/a4p+ +abandonnique/S* +abandonnisme/S* +abaque/S* +abarticulaire/S* +abarticulation/S* +abasie/S* +abasourdir/f2p+ +abasourdissante/F* +abasourdissement/S* +abat/S* +abatage/S* +abâtardir/f4p+ +abâtardissement/S* +abat-carrage/S* +abat-carre/S* +abat-carrer/a2p+ +abatée/S* +abat-feuille/L'D'Q' +abat-feuille/S* +abat-foin/L'D'Q' +abatis/L'D'Q' +abat-jour/L'D'Q' +abat-poussière/S* +abat-son/L'D'Q' +abat-son/S* +abattable/S* +abattage/S* +abattant/S* +abattée/S* +abattement/S* +abatteuse/F* +abattis/L'D'Q' +abattoir/S* +abattre/uA +abatture/S* +abat-vent/L'D'Q' +abat-voix/L'D'Q' +abbasside/S* +abbatiale/S* +abbatiale/W* +abbatiat/S* +abbaye/S* +abbé/S* +abbesse/S* +abbevillienne/F* +abc/L'D'Q' +abcéder/c4p+ +abcès/L'D'Q' +abdicataire/S* +abdication/S* +abdiquer/a2p+ +abdo/S* +abdomen/S* +abdominal/X* +abdominale/W* +abdomino-génitale/W* +abdos-fessiers/D'Q' +abducteur/S* +abduction/S* +abductrice/F* +abeaudir +abeausir +abécédaire/S* +abécher/c2p+ +abecquer/a2p+ +abée/S* +abeillage/S* +abeille/S* +abeillère/F* +abeillerolle/S* +abeillier/S* +abeillon/S* +abélianisation/S* +abélianisée/F* +abélienne/F* +abénaquise/F* +aber/S* +aberrance/S* +aberrante/F* +aberration/S* +aberrer/a1p. +abessif/S* +abêtifiée/F* +abêtifier +abêtir/f4p+ +abêtissante/F* +abêtissement/S* +abhorrer/a2p+ +abicher +abies/L'D'Q' +abiétacée/S* +abiétine/F* +abiétinée/S* +abigotir +abillot/S* +abîme/S* +abîmer/a4p+ +abiogenèse/S* +abiotique/S* +abiotrophie/S* +abjecte/F* +abjectement/D'Q' +abjection/S* +abjuration/S* +abjurer/a2p+ +abkhaze/S* +ablactation/S* +ablater/a4p+ +ablatif/S* +ablation/S* +ablatir +ablative/F* +able/S* +ablégat/S* +ableret/S* +ablette/S* +ablier/S* +abloc/S* +ablocage/S* +abloquer/a2p+ +abloquir +abluer +ablutiomanie/S* +ablution/S* +ablutionner +abnégation/S* +aboi/S* +aboiement/S* +aboiteau/X* +abolir/f2p+ +abolissement/S* +abolisseur/S* +abolition/S* +abolitionnisme/S* +abolitionniste/S* +abolitive/F* +abomber/a1p. +abominable/S* +abominablement/D'Q' +abomination/S* +abominer/a2p+ +abondamment/D'Q' +abondance/S* +abondanciste/S* +abondante/F* +abondée/F* +abondement/S* +abonder/a1p. +abonnée/F* +abonnement/S* +abonner/a4p+ +abonnir/f4p+ +abonnissement/S* +aborale/W* +abord/S* +abordable/S* +abordage/S* +aborder/a4p+ +abordeur/S* +aborigène/S* +abornée/F* +abornement/S* +aborner +abortif/S* +abortive/F* +abot/S* +aboteau/X* +abotée/F* +aboter +abottée/F* +abotter +abouchement/S* +aboucher/a4p+ +abougrie/F* +abougrir +abouler/a4p+ +aboulie/S* +aboulique/S* +abouquer +about/S* +aboutage/S* +aboutement/S* +abouter/a2p+ +abouteuse/S* +aboutir/f1p+ +aboutissant/S* +aboutissement/S* +aboutonner +aboyante/F* +aboyer/a2p+ +aboyeuse/F* +abracadabra/S* +abracadabrante/F* +abracadabrantesque/S* +abracadabrer +abrahamique/S* +abraquer +abraser/a4p+ +abrasif/S* +abrasion/S* +abrasive/F* +abraxas/L'D'Q' +abréaction/S* +abréagir/f1p+ +abrégé/S* +abrégement/S* +abrègement/S* +abréger/c4p+ +abreuvage/S* +abreuvement/S* +abreuver/a4p+ +abreuvoir/S* +abréviation/S* +abréviative/F* +abréviativement/D'Q' +abréviatrice/F* +abréviée/F* +abrévier +abreyer +abri/S* +abribus/L'D'Q' +abricot/L'D'Q' +abricot/S* +abricoter/a2p+ +abricotier/S* +abricotine/S* +abrier +abri-sous-roche/L'D'Q' +abris-sous-roche/D'Q' +abriter/a4p+ +abrivent/S* +abriver +abrogation/S* +abrogative/F* +abrogatoire/S* +abrogeable/S* +abroger/a2p+ +abroutissement/S* +abrupte/F* +abruptement/D'Q' +abrupto +abrutie/F* +abrutir/f4p+ +abrutissante/F* +abrutissement/S* +abrutisseuse/F* +abscisse/S* +abscission/S* +abscissique/S* +absconder +abscondre +absconse/F* +absconser +absence/S* +absente/F* +absentéisme/S* +absentéiste/S* +absenter/a4p+ +absidale/W* +abside/S* +absidiale/W* +absidiole/S* +absinthe/S* +absinthine/S* +absinthisme/S* +absolu/S* +absolue/F* +absoluité/S* +absolument/D'Q' +absolutif/S* +absolution/S* +absolutisation/S* +absolutiser/a2p+ +absolutisme/S* +absolutiste/S* +absolutive/F* +absolutoire/S* +absorbable/S* +absorbance/S* +absorbante/F* +absorbement/S* +absorber/a4p+ +absorbeur/S* +absorptiométrie/S* +absorption/S* +absorptive/F* +absorptivité/S* +absoudre/xN +absoute/S* +abstème/S* +abstenir/i2q+ +abstention/S* +abstentionnisme/S* +abstentionniste/S* +abstinence/S* +abstinente/F* +abstract/S* +abstracteur/S* +abstraction/S* +abstractionnisme/S* +abstractive/F* +abstracto +abstraire/wL +abstrait/S* +abstraitement/D'Q' +abstruse/F* +absurde/S* +absurde/S* +absurdement/D'Q' +absurdisme/S* +absurdiste/S* +absurdité/S* +absurdo +abus/L'D'Q' +abuser/a4p+ +abuseuse/F* +abusive/F* +abusivement/D'Q' +abutyrotomofilogène/S* +abyme +abyssale/W* +abysse/S* +abyssine/F* +abyssinienne/F* +abyssopélagique/S* +abzyme/S* +ac/D' +acabit/S* +acacia/S* +académicienne/F* +académie/S* +académique/S* +académiquement/D'Q' +académisable/S* +académisme/S* +académiste/S* +acadianisme/S* +acadienne/F* +acagnarder/a3p+ +acajou/L'D'Q' +acajou/S* +acalèphe/S* +acalorique/S* +acanthacée/S* +acanthaire/S* +acanthe/S* +acanthocéphale/S* +acanthoptérygien/S* +acanthure/S* +acare/S* +acariasis/L'D'Q' +acariâtre/S* +acariâtreté/S* +acaricide/S* +acaricide/S* +acaride/S* +acarien/S* +acariose/S* +acarus/L'D'Q' +acatalasémie/S* +acatène/S* +acathisie/S* +acathiste/S* +acaule/S* +acausale/W* +accablante/F* +accablement/S* +accabler/a4p+ +accalmie/S* +accalmir +accaparante/F* +accaparation/S* +accaparement/S* +accaparer/a2p+ +accapareuse/F* +accastillage/S* +accastiller/a2p+ +accastilleuse/F* +accédante/F* +accédée/F* +accéder/c5p. +accelerando/D'Q' +accelerando/L'D'Q' +accélérando/S* +accélérateur/S* +accélération/S* +accélératoire/S* +accélératrice/F* +accélérer/c4p+ +accélérine/S* +accélérographe/S* +accéléromètre/S* +accélérométrie/S* +accent/S* +accenteur/S* +accentuable/S* +accentuation/S* +accentuelle/F* +accentuer/a4p+ +acceptabilité/S* +acceptable/S* +acceptablement/L'D'Q' +acceptante/F* +acceptation/S* +accepter/a4p+ +accepteur/S* +acception/S* +accès/L'D'Q' +accesseur/S* +accessibilité/S* +accessible/S* +accession/S* +accessit/S* +accessoire/S* +accessoire/S* +accessoirement/D'Q' +accessoiriser/a2p+ +accessoiriste/S* +accident/S* +accidentalité/S* +accidentée/F* +accidentelle/F* +accidentellement/D'Q' +accidenter/a2p+ +accidentogène/S* +accidentologie/S* +accidentologue/S* +accipitridé/S* +accise/S* +acclamation/S* +acclamatrice/F* +acclamer/a2p+ +acclimatable/S* +acclimatation/S* +acclimatement/S* +acclimater/a4p+ +accœurer +accointance/S* +accointer/a3p+ +accolade/S* +accolader/a2p+ +accolage/S* +accolement/S* +accoler/a4p+ +accommodable/S* +accommodage/S* +accommodante/F* +accommodat/S* +accommodation/S* +accommodatrice/F* +accommodement/S* +accommoder/a4p+ +accompagnante/F* +accompagnatrice/F* +accompagnement/S* +accompagner/a4p+ +accomplir/f4p+ +accomplissement/S* +accon/S* +acconage/S* +acconier/S* +acconière/F* +accoquiner/a4p+ +accord/S* +accordable/S* +accordage/S* +accordailles/D'Q' +accordée/F* +accordement/S* +accordéon/S* +accordéoniste/S* +accorder/a4p+ +accordeuse/F* +accordoir/S* +accore/S* +accorer/a2p+ +accornée/F* +accorte/F* +accortement/L'D'Q' +accostable/S* +accostage/S* +accoster/a4p+ +accot/S* +accotement/S* +accoter/a4p+ +accotoir/S* +accouardir +accouchée/S* +accouchement/S* +accoucher/a4p+ +accoucheuse/F* +accoudement/S* +accouder/a3p+ +accoudoir/S* +accouer/a2p+ +accouple/S* +accouplement/S* +accoupler/a4p+ +accoupleuse/F* +accourcir/f2p+ +accourcissement/S* +accourir/iD +accourse/S* +accoutrement/S* +accoutrer/a4p+ +accoutumance/S* +accoutumer/a4p+ +accouvage/S* +accouveuse/F* +accréditation/S* +accréditement/S* +accréditer/a4p+ +accréditive/F* +accréditrice/F* +accrescente/F* +accréter/c2p+ +accrétion/S* +accro/S* +accrobranche/S* +accroc/S* +accrochage/S* +accroche/S* +accroche-cœur/L'D'Q' +accroche-cœur/S* +accrochement/S* +accroche-plat/L'D'Q' +accroche-plat/S* +accroche-poisson/S* +accrocher/a4p+ +accrocheuse/F* +accroire/n'q'd'l' +accroissement/S* +accroître/wV +accroupir/f3p+ +accroupissement/S* +accu/S* +accueil/S* +accueillante/F* +accueillir/iR +accul/S* +acculer/a2p+ +acculturation/S* +acculturative/F* +acculturer/a2p+ +accumulation/S* +accumulatrice/F* +accumuler/a4p+ +accusable/S* +accusatif/S* +accusation/S* +accusative/F* +accusatoire/S* +accusatrice/F* +accusée/F* +accuser/a4p+ +ace/S* +acédie/S* +acellulaire/S* +acenser/a2p+ +acentrique/S* +acéphale/S* +acéphalie/S* +acéracée/S* +acéracée/S* +acerbe/S* +acerbité/S* +acérer/c2p+ +acéricole/S* +acéricultrice/F* +acériculture/S* +acérola/S* +acescence/S* +acescente/F* +acésulfame/S* +acétabulaire/S* +acétabulaire/S* +acétal/S* +acétaldéhyde/S* +acétalisation/S* +acétamide/S* +acétaminophène/S* +acétanilide/S* +acétate/S* +acéteuse/W* +acétification/S* +acétifier/a2p+ +acétimètre/S* +acétique/S* +acétobacter/L'D'Q' +acétobacter/S* +acétocellulose/S* +acétone/S* +acétonémie/S* +acétonémique/S* +acétonique/S* +acétonitrile/S* +acétonurie/S* +acétophénone/S* +acétylation/S* +acétylcellulose/S* +acétylcholine/S* +acétylcoenzyme/S* +acétylcystéine/S* +acétyle/S* +acétylène/S* +acétylénique/S* +acétyler/a2p+ +acétylsalicylique/S* +acétylure/S* +achaine/S* +achalandage/S* +achalander/a2p+ +achalasie/S* +achaler/a2p+ +achards/D'Q' +acharnée/F* +acharnement/S* +acharner/a4p+ +achat/S* +ache/S* +achéenne/F* +acheiropoïète/S* +achéménide/S* +acheminement/S* +acheminer/a4p+ +achemineuse/F* +achène/S* +achetable/S* +achète/S* +acheter/b4p+ +acheteuse/F* +acheuléenne/F* +achèvement/S* +achever/b4p+ +achigan/S* +achillée/S* +achirale/W* +acholie/S* +achondroplase/S* +achondroplasie/S* +achoppement/S* +achopper/a4p+ +achromat/S* +achromaticité/S* +achromatique/S* +achromatisation/S* +achromatiser/a2p+ +achromatisme/S* +achromatopsie/S* +achrome/S* +achromie/S* +achromique/S* +achronique/S* +achylie/S* +aciclovir/S* +aciculaire/S* +acidalie/S* +acide/S* +acide/S* +acidifiable/S* +acidifiante/F* +acidification/S* +acidifier/a4p+ +acidimètre/S* +acidimétrie/S* +acidiphile/S* +acidité/S* +acido-basique/S* +acidocétose/S* +acidophile/S* +acidose/S* +aciduler/a2p+ +acier/S* +aciérage/S* +aciération/S* +aciérer/c2p+ +aciéreuse/W* +aciérie/S* +aciériste/S* +acinésie/S* +acineuse/W* +acinus/I* +aciseler/b2p+ +aclinique/S* +aclonifen/S* +acmé/S* +acné/S* +acnéique/S* +acœlomate/S* +acolytat/S* +acolyte/S* +acomat/S* +acompte/S* +acon/S* +aconage/S* +aconier/S* +aconière/F* +aconit/S* +aconitine/S* +acoquinante/F* +acoquinement/S* +acoquiner/a3p+ +acore/S* +à-côté/S* +acotylédone/S* +acotylédone/S* +acoumastique/S* +acoumètre/S* +acoumétrie/S* +à-coup/S* +acouphène/S* +acousmatique/S* +acousmie/S* +acousticienne/F* +acoustique/S* +acoustique/S* +acoustiquement/D'Q' +acquéresse/S* +acquéreuse/F* +acquérir/iK +acquêt/S* +acquiescement/S* +acquiescer/a5p. +acquis/L'D'Q' +acquisition/S* +acquisitive/F* +acquit/S* +acquit-à-caution/L'D'Q' +acquits-à-caution/L'D'Q' +acquittable/S* +acquittée/F* +acquittement/S* +acquitter/a4p+ +acra/S* +âcre/S* +acre/S* +âcrement/D'Q' +âcreté/S* +acridien/S* +acridienne/F* +acridine/S* +acrimonie/S* +acrimonieuse/W* +acrimonieusement/D'Q' +acroamatique/S* +acrobate/S* +acrobatie/S* +acrobatique/S* +acrobatiquement/D'Q' +acrocarpe/S* +acrocentrique/S* +acrocéphale/S* +acrocéphalie/S* +acrocyanose/S* +acrodermatite/S* +acrodynie/S* +acroléine/S* +acromégalie/S* +acromégalique/S* +acromiale/W* +acromion/S* +acron/S* +acronyme/S* +acronymie/S* +acronyque/S* +acroparesthésie/S* +acropathie/S* +acrophobie/S* +acropole/S* +acrosine/S* +acrosome/S* +acrosomique/S* +acrosport/S* +acrostiche/S* +acrotère/S* +acrotomophilie/S* +acrylamide/S* +acrylate/S* +acrylique/S* +acrylique/S* +acrylonitrile/S* +actance/S* +actancielle/F* +actant/S* +acte/S* +actée/S* +actéon/S* +acter/a2p+ +actigramme/S* +actine/S* +acting-out/L'D'Q' +actiniaire/S* +actinide/S* +actinidia/S* +actinie/S* +actinique/S* +actinisme/S* +actinite/S* +actinium/S* +actinobacillose/S* +actinologie/S* +actinomètre/S* +actinométrie/S* +actinométrique/S* +actinomycète/S* +actinomycine/S* +actinomycose/S* +actinopode/S* +actinoptérygien/S* +actinote/S* +actinothérapie/S* +action/S* +actionnable/S* +actionnaire/S* +actionnariale/W* +actionnariat/S* +actionnement/S* +actionner/a2p+ +actionneur/S* +actionnisme/S* +activable/S* +activateur/S* +activation/S* +activatrice/F* +active/F* +activement/D'Q' +activer/a4p+ +activeur/S* +activisme/S* +activiste/S* +activité/S* +actrice/F* +actu/S* +actuaire/S* +actualisable/S* +actualisation/S* +actualiser/a2p+ +actualisme/S* +actualité/S* +actuariat/S* +actuarielle/F* +actuation/S* +actuelle/F* +actuellement/D'Q' +acuité/S* +acul/S* +aculéate/S* +acumen/S* +acuminée/F* +acupunctrice/F* +acupuncture/S* +acutance/S* +acutangle/S* +acyclicité/S* +acyclique/S* +acylation/S* +acyle/S* +acyltransférase/S* +ad +adage/S* +adagietto/S* +adagio/D'Q' +adagio/L'D'Q' +adagio/S* +adamantine/F* +adamique/S* +adamisme/S* +adamite/S* +adaptabilité/S* +adaptable/S* +adaptation/S* +adaptative/F* +adaptatrice/F* +adapter/a4p+ +addax/L'D'Q' +addenda/L'D'Q' +addenda/S* +addendum/I* +addict/S* +addiction/S* +addictive/F* +addictogène/S* +addictologie/S* +addictologique/S* +addictologue/S* +addisonienne/F* +addition/S* +additionnable/S* +additionnelle/F* +additionnellement/D'Q' +additionner/a4p+ +additionneuse/F* +additive/F* +additivement/D'Q' +additivité/S* +add-on/S* +adducteur/S* +adduction/S* +adduit/S* +adèle/S* +adelphe/S* +adelphophagie/S* +adénine/S* +adénite/S* +adénocarcinome/S* +adénogramme/S* +adénoïde/S* +adénoïdectomie/S* +adénomatose/S* +adénome/S* +adénomectomie/S* +adénopathie/S* +adénosarcome/S* +adénosine/S* +adénovirale/W* +adénovirus/L'D'Q' +adent +adent/S* +adeptat/S* +adepte/S* +adéquate/F* +adéquatement/D'Q' +adéquation/S* +adermine/S* +aderne/S* +adessif/S* +adextrée/F* +adhérence/S* +adhérente/F* +adhérer/c5p. +adhésion/S* +adhésive/F* +adhésivité/S* +adiabaticité/S* +adiabatique/S* +adiabatiquement/D'Q' +adiabatisme/S* +adialectique/S* +adiante/S* +adiaphorèse/S* +adiaphorie/S* +adieu/X* +adimensionnelle/F* +adipeuse/W* +adipique/S* +adipocyte/S* +adipolyse/S* +adipopexie/S* +adipose/S* +adiposité/S* +adiposo-génitale/W* +adipsie/S* +adique/S* +adire/yG +adirer/aE +adjacence/S* +adjacente/F* +adjectif/S* +adjectivale/W* +adjectivation/S* +adjective/F* +adjectivement/D'Q' +adjectiver/a2p+ +adjectivisation/S* +adjectiviser/a2p+ +adjoindre/wB +adjointe/F* +adjonction/S* +adjudant-chef/L'D'Q' +adjudante/F* +adjudante-chef/L'D'Q' +adjudante-cheffe/L'D'Q' +adjudantes-cheffes/D'Q' +adjudantes-chefs/D'Q' +adjudants-chefs/D'Q' +adjudicataire/S* +adjudication/S* +adjudicative/F* +adjudicatrice/F* +adjuger/a4p+ +adjuration/S* +adjurer/a2p+ +adjutrice/F* +adjuvant/S* +adjuvante/F* +adjuvat/S* +adlérienne/F* +adlérisme/S* +admettre/vA +admin/S* +adminicule/S* +administrable/S* +administration/S* +administrationaliser +administrative/F* +administrativement/D'Q' +administratrice/F* +administrée/F* +administrer/a4p+ +admirable/S* +admirablement/D'Q' +admiration/S* +admirative/F* +admirativement/D'Q' +admiratrice/F* +admirer/a4p+ +admise/F* +admissibilité/S* +admissible/S* +admission/S* +admittance/S* +admixtion/S* +admonestation/S* +admonester/a4p+ +admonition/S* +admonitrice/F* +adnée/F* +ado/S* +adobe/S* +adolescence/S* +adolescente/F* +adonc/D'Q' +adoncques/D'Q' +adonis/L'D'Q' +adoniser/a3p+ +adonner/a3p+ +adoptable/S* +adoptante/F* +adoptée/F* +adopter/a2p+ +adoption/S* +adoptive/F* +adorable/S* +adorablement/D'Q' +adorante/F* +adoration/S* +adoratrice/F* +adorée/F* +adorer/a4p+ +adorner/a4p+ +ados/L'D'Q' +adossement/S* +adosser/a4p+ +adoubement/S* +adouber/a2p+ +adoucir/f4p+ +adoucissage/S* +adoucissante/F* +adoucissement/S* +adoucisseur/S* +adposition/S* +adragante/F* +adrénaline/S* +adrénergique/S* +adrénolytique/S* +adrénolytique/S* +adressable/S* +adressage/S* +adresse/S* +adresser/a4p+ +adret/S* +adriatique/S* +adroite/F* +adroitement/D'Q' +adscrite/F* +adsorbable/S* +adsorbante/F* +adsorbat/S* +adsorber/a2p+ +adsorbeur/S* +adsorption/S* +adstrat/S* +adulaire/S* +adulation/S* +adulatrice/F* +aduler/a4p+ +adulescence/S* +adulescente/F* +adulte/S* +adultération/S* +adultère/S* +adultérer/c2p+ +adultérine/F* +adultisme/S* +adustible/S* +advection/S* +advenir/iA +adventice/S* +adventice/S* +adventisme/S* +adventiste/S* +adventive/F* +adverbe/S* +adverbiale/W* +adverbialement/D'Q' +adverbialiser/a2p+ +adverbialité/S* +adversaire/S* +adversative/F* +adverse/S* +adversité/S* +adynamie/S* +adynamique/S* +æ +aède/S* +ægagropile/S* +ægipan/S* +ægosome/S* +ægyrine/S* +æpyornis/L'D'Q' +æquo +æquo +aérage/S* +aérateur/S* +aération/S* +aéraulique/S* +aéraulique/S* +aérenchyme/S* +aérer/c4p+ +aéricole/S* +aérienne/F* +aérifère/S* +aériforme/S* +aérium/S* +aérobic/S* +aérobie/S* +aérobie/S* +aérobiologie/S* +aérobiologique/S* +aérobiose/S* +aérobique/S* +aérocâble/S* +aéroclub/S* +aéro-club/S* +aérocolie/S* +aérodigestive/F* +aérodistorsion/S* +aérodrome/S* +aérodynamicienne/F* +aérodynamique/S* +aérodynamique/S* +aérodynamiquement +aérodynamisme/S* +aérodyne/S* +aéroélasticité/S* +aéroélectrique/S* +aérofrein/S* +aérofreinage/S* +aérogare/S* +aérogastrie/S* +aérogel/S* +aérogénérateur/S* +aéroglisseur/S* +aérogramme/S* +aérographe/S* +aérolite/S* +aérolithe/S* +aérologie/S* +aéromancie/S* +aéromaritime/S* +aéromètre/S* +aérométrie/S* +aéromobile/S* +aéromodèle/S* +aéromodélisme/S* +aéromodéliste/S* +aéromoteur/S* +aéronaute/S* +aéronautique/S* +aéronautique/S* +aéronavale/F* +aéronavale/S* +aéronef/S* +aéronomie/S* +aéropathie/S* +aérophagie/S* +aérophone/S* +aéroplane/S* +aéroponie/S* +aéroponique/S* +aéroport/S* +aéroportée/F* +aéroportuaire/S* +aéropostale/W* +aéroréfrigérant/S* +aéroréfrigérante/F* +aéroscope/S* +aérosol/S* +aérosolthérapie/S* +aérosondage/S* +aérospatiale/W* +aérostat/S* +aérostation/S* +aérostatique/S* +aérostatique/S* +aérostière/F* +aérotechnique/S* +aérotechnique/S* +aéroterrestre/S* +aérotherme/S* +aérothermie/S* +aérothermique/S* +aérothermochimie/S* +aérothermochimique/S* +aérothermodynamique/S* +aérothermodynamique/S* +aérotrain/S* +aérotransportée/F* +æschne/S* +æschnidé/S* +æternam +æthuse/S* +affabilité/S* +affable/S* +affablement/D'Q' +affabulation/S* +affabulatrice/F* +affabuler/a2p+ +affacturage/S* +affadir/f4p+ +affadissante/F* +affadissement/S* +affaiblir/f4p+ +affaiblissante/F* +affaiblissement/S* +affaiblisseur/S* +affainéantie/F* +affainéantir +affaire/S* +affairement/S* +affairer/a3p+ +affairisme/S* +affairiste/S* +affaissement/S* +affaisser/a4p+ +affaitage/S* +affaitement/S* +affaiter/a2p+ +affaîter/a2p+ +affalement/S* +affaler/a4p+ +affamante/F* +affamée/F* +affamer/a2p+ +affameuse/F* +affanure/S* +afféager/a2p+ +affect/S* +affectataire/S* +affectation/S* +affecter/a4p+ +affection/S* +affectionner/a2p+ +affective/F* +affectivement/D'Q' +affectivité/S* +affectueuse/W* +affectueusement/D'Q' +affectuosité/S* +affenage/S* +afférente/F* +afférer/c1p. +affermage/S* +affermer/a2p+ +affermir/f4p+ +affermissement/S* +affétée/F* +afféterie/S* +affichable/S* +affichage/S* +affiche/S* +afficher/a4p+ +affichette/S* +afficheuse/F* +affichiste/S* +affidavit/S* +affidée/F* +affilage/S* +affiler/a2p+ +affileuse/F* +affiliation/S* +affilier/a4p+ +affiloir/S* +affinage/S* +affine/F* +affinement/S* +affiner/a4p+ +affinerie/S* +affineuse/F* +affinitaire/S* +affinité/S* +affinoir/S* +affiquet/S* +affirmation/S* +affirmative/F* +affirmativement/D'Q' +affirmer/a4p+ +affixale/W* +affixation/S* +affixe/S* +affixée/F* +affleurage/S* +affleurante/F* +affleurement/S* +affleurer/a2p+ +affliction/S* +afflictive/F* +affligeante/F* +affligée/F* +affliger/a4p+ +afflouer/a2p+ +affluence/S* +affluent/S* +affluente/F* +affluer/a1p. +afflux/L'D'Q' +affolante/F* +affolée/F* +affolement/S* +affoler/a4p+ +affolir +afforestation/S* +affouage/S* +affouager/a2p+ +affouagère/F* +affouagiste/S* +affouillement/S* +affouiller/a2p+ +affouragement/S* +affourager/a2p+ +affourcher/a2p+ +affourrager/a2p+ +affranchie/F* +affranchir/f4p+ +affranchissable/S* +affranchissement/S* +affranchisseuse/F* +affres/D'Q' +affrètement/S* +affréter/c2p+ +affréteuse/F* +affreuse/W* +affreusement/D'Q' +affriander/a2p+ +affricher/a2p+ +affriolante/F* +affrioler/a2p+ +affriquée/F* +affriquée/S* +affriter/a2p+ +affront/S* +affrontement/S* +affronter/a4p+ +affronteuse/F* +affruiter/a2p+ +affublement/S* +affubler/a4p+ +affurer/a2p+ +affusion/S* +affût/S* +affûtage/S* +affûter/a2p+ +affûteuse/F* +affûtiaux/D'Q' +affûtoir/S* +afghane/F* +afghano-pakistanaise/F* +afibrinogénémie/S* +aficionado/S* +afin/Q'Q* +aflatoxine/S* +afocale/W* +africaine/F* +africanisation/S* +africaniser/a4p+ +africanisme/S* +africaniste/S* +africanité/S* +afrikaander/S* +afrikaans/L'D'Q' +afrikaans/L'D'Q' +afrikander/S* +afrikaner/S* +afro/L'D'Q' +afro-américaine/F* +afro-asiatique/S* +afrobeat/S* +afro-beat/S* +afro-brésilienne/F* +afro-cubaine/F* +afroféminisme/S* +afroféministe/S* +afrorock/S* +after-shave/L'D'Q' +aftershave/S* +agaçante/F* +agace/S* +agacement/S* +agace-pissette/S* +agacer/a4p+ +agacerie/S* +agacin/S* +agaillardie/F* +agaillardir +agalactie/S* +agalaxie/S* +agame/S* +agamète/S* +agami/S* +agamidé/S* +agamie/S* +agammaglobulinémie/S* +agamospermie/S* +agapanthe/S* +agape/S* +agapète/S* +agar/S* +agar-agar/L'D'Q' +agaric/S* +agaricacée/S* +agaricale/S* +agaricinée/S* +agarose/S* +agars-agars/D'Q' +agasse/S* +agate/S* +agatisée/F* +agavacée/S* +agave/S* +agavé/S* +age/S* +âge/S* +âgée/F* +agenaise/F* +agence/S* +agencement/S* +agencer/a4p+ +agenceuse/F* +agencière/F* +agenda/S* +agender/a2p+ +agénésie/S* +agenouillée/F* +agenouillement/S* +agenouiller/a3p+ +agenouilliste/S* +agenouilloir/S* +agente/F* +agérate/S* +ageratum/S* +agger/S* +aggiornamento/S* +agglo/S* +agglomérant/S* +agglomérante/F* +agglomérat/S* +agglomération/S* +aggloméré/S* +agglomérer/c4p+ +agglutinante/F* +agglutination/S* +agglutinative/F* +agglutinement/S* +agglutiner/a4p+ +agglutinine/S* +agglutinogène/S* +agglutinogène/S* +aggravante/F* +aggravation/S* +aggraver/a4p+ +agha/S* +agile/S* +agilement/D'Q' +agilité/S* +agio/S* +agiotage/S* +agioter/a1p. +agioteuse/F* +agir/L' +agir/f1p. +âgisme/S* +agissante/F* +agissement/S* +agitante/F* +agitation/S* +agitato/D'Q' +agitatrice/F* +agitée/F* +agiter/a4p+ +aglossa/S* +aglycone/S* +aglyphe/S* +aglyphe/S* +agnate/F* +agnathe/S* +agnathe/S* +agnation/S* +agnatique/S* +agnelage/S* +agneler/d1p. +agnelet/S* +agneline/F* +agnelle/W* +agnosie/S* +agnosique/S* +agnosticisme/S* +agnostique/S* +agnus/L'D'Q' +agnus-castus/L'D'Q' +agogique/S* +agogique/S* +agonie/S* +agonique/S* +agonir/f2p+ +agonisante/F* +agoniser/a1p. +agoniste/S* +agoniste/S* +agonistique/S* +agora/S* +agoraphobe/S* +agoraphobie/S* +agouti/S* +agrafage/S* +agrafe/S* +agrafer/a2p+ +agrafeuse/F* +agrainage/S* +agrainer/a2p+ +agraire/S* +agrammaticale/W* +agrammatisme/S* +agrandir/f4p+ +agrandissante/F* +agrandissement/S* +agrandisseuse/F* +agranulocytose/S* +agraphie/S* +agrarienne/F* +agrarisme/S* +agréable/S* +agréablement/D'Q' +agréage/S* +agréation/S* +agréer/a4p+ +agréeuse/F* +agrégat/S* +agrégateur/S* +agrégation/S* +agrégative/F* +agrégée/F* +agréger/c4p+ +agrément/S* +agrémenter/a2p+ +agrès/L'D'Q' +agresser/a2p+ +agresseuse/F* +agression/S* +agressive/F* +agressivement/D'Q' +agressivité/S* +agreste/S* +agricher/a2p+ +agricole/S* +agricultrice/F* +agriculture/S* +agrienvironnementale/F* +agri-environnementale/F* +agriffer/a3p+ +agrile/S* +agrion/S* +agriote/S* +agripaume/S* +agrippante/F* +agrippement/S* +agripper/a4p+ +agritourisme/S* +agroalimentaire/S* +agro-alimentaire/S* +agroalimentaire/S* +agro-alimentaire/S* +agrobiologie/S* +agrobiologique/S* +agrobiologiste/S* +agrobusiness/L'D'Q' +agrocarburant/S* +agro-carburant/S* +agrochimie/S* +agrochimique/S* +agrochimiste/S* +agroclimatique/S* +agro-climatique/S* +agroclimatologie/S* +agroclimatologique/S* +agroécologie/S* +agroécologique/S* +agro-environnementale/W* +agroéquipement/S* +agroforesterie/S* +agroforestière/F* +agro-industrie/S* +agro-industrielle/F* +agrologie/S* +agromatériau/X* +agro-matériau/X* +agrométéorologie/S* +agronome/S* +agronomie/S* +agronomique/S* +agronomiquement/L'D'Q' +agropastorale/W* +agropastoralisme/S* +agropastoraliste/S* +agrophysiologie/S* +agro-physiologie/S* +agropyrum/S* +agroressource/S* +agro-ressource/S* +agrostide/S* +agrostis/L'D'Q' +agrosystème/S* +agrotechnicienne/F* +agrotis/L'D'Q' +agrotourisme/S* +agroville/S* +agrume/S* +agrumiculture/S* +aguardiente/S* +aguerrir/f4p+ +aguerrissement/S* +aguets/D' +agueusie/S* +agui/S* +aguichage/S* +aguichante/F* +aguiche/S* +aguicher/a2p+ +aguicheuse/F* +ah +ahan/S* +ahanement/S* +ahaner/a1p. +aheurter/a3p+ +ahurie/F* +ahurir/f2p+ +ahurissante/F* +ahurissement/S* +aï/S* +aidante/F* +aide/S* +aide-comptable/L'D'Q' +aide-éducateur/L'D'Q' +aide-éducatrice/L'D'Q' +aide-mémoire/L'D'Q' +aider/a4p+ +aides-comptables/D'Q' +aides-éducateurs/D'Q' +aides-éducatrices/D'Q' +aide-soignant/L'D'Q' +aide-soignante/L'D'Q' +aides-soignantes/D'Q' +aides-soignants/D'Q' +aïe +aïeule/F* +aïeux/D'Q' +aigle/S* +aiglefin/S* +aiglette/S* +aiglonne/F* +aigre/S* +aigre-douce/L'D'Q' +aigre-doux/L'D'Q' +aigrefin/S* +aigrelette/F* +aigrement/D'Q' +aigremoine/S* +aigres-douces/D'Q' +aigres-doux/D'Q' +aigrette/F* +aigrettée/F* +aigreur/S* +aigrie/F* +aigrir/f4p+ +aigrissement/S* +aiguade/S* +aiguage/S* +aiguail/S* +aiguë/F* +aigue-marine/L'D'Q' +aigues-marines/D'Q' +aiguière/S* +aiguillage/S* +aiguillat/S* +aiguille/S* +aiguiller/a2p+ +aiguilleter/d2p+ +aiguilleteuse/F* +aiguillette/S* +aiguilleuse/F* +aiguillier/S* +aiguillon/S* +aiguillonnement/S* +aiguillonner/a2p+ +aiguillot/S* +aiguisage/S* +aiguise-crayon/L'D'Q' +aiguise-crayon/S* +aiguisement/S* +aiguiser/a4p+ +aiguiseuse/F* +aiguisoir/S* +aïkido/S* +ail/S* +ailante/S* +aile/S* +ailée/F* +ailerette/S* +aileron/S* +ailette/S* +ailière/F* +aillade/S* +ailler/a2p+ +ailleurs/L'D'Q' +ailloli/S* +aimable/S* +aimablement/D'Q' +aimant/S* +aimantable/S* +aimantation/S* +aimante/F* +aimanter/a4p+ +aimantin/S* +aimantine/F* +aimée/F* +aimer/a4p+ +aine/S* +aînée/F* +aînesse/S* +aïnou/S* +ainsi/D'Q' +aïoli/S* +air/S* +airain/S* +airbag/S* +aire/S* +airedale/S* +airedale-terrier/S* +airée/S* +airelle/S* +airer/a1p. +ais/L'D'Q' +aisance/S* +aise/S* +aise/S* +aisée/F* +aisément/D'Q' +aisseau/X* +aisselier/S* +aisselle/S* +aissette/S* +aisy/S* +aître/S* +aixoise/F* +ajaccienne/F* +ajointer/a2p+ +ajonc/S* +ajoupa/S* +ajour/S* +ajourer/a2p+ +ajournable/S* +ajournement/S* +ajourner/a2p+ +ajout/S* +ajouter/a4p+ +ajustable/S* +ajustage/S* +ajustement/S* +ajuster/a4p+ +ajusteuse/F* +ajustoir/S* +ajut/S* +ajutage/S* +akathisie/S* +akène/S* +akinésie/S* +akinétique/S* +akkadienne/F* +akvavit/S* +al +alabandine/S* +alabandite/S* +alabastre/S* +alabastrite/S* +alâchir +alacrité/S* +alaire/S* +alaise/S* +alambic/S* +alambiquer/a2p+ +alandier/S* +alangourer +alanguir/f4p+ +alanguissement/S* +alanine/S* +alaouite/S* +alarmante/F* +alarme/S* +alarmer/a4p+ +alarmisme/S* +alarmiste/S* +alastrim/S* +alaterne/S* +albache/S* +albacore/S* +albanaise/F* +albanophone/S* +albâtre/S* +albatros/L'D'Q' +albédo/S* +alberge/S* +albergier/S* +albigeoise/F* +albinisme/S* +albinos/L'D'Q' +albite/S* +albuginée/F* +albugo/S* +album/S* +albumen/S* +albumine/S* +albuminée/F* +albumineuse/W* +albuminoïde/S* +albuminoïde/S* +albuminurie/S* +albuminurique/S* +albumose/S* +alcade/S* +alcaïque/S* +alcalescence/S* +alcalescente/F* +alcali/S* +alcalifiante/F* +alcalimètre/S* +alcalimétrie/S* +alcalimétrique/S* +alcaline/F* +alcalinisante/F* +alcalinisation/S* +alcaliniser/a2p+ +alcalinité/S* +alcalino-terreuse/W* +alcaliser/a2p+ +alcaloïde/S* +alcalose/S* +alcane/S* +alcaptonurie/S* +alcarazas/L'D'Q' +alcazar/S* +alcédinidé/S* +alcée/S* +alcène/S* +alchémille/S* +alchimie/S* +alchimique/S* +alchimiquement/D'Q' +alchimiste/S* +alcoholiser +alcool/S* +alcoolat/S* +alcoolate/S* +alcoolature/S* +alcoolé/S* +alcoolémie/S* +alcoolier/S* +alcoolification/S* +alcoolique/S* +alcooliquement/D'Q' +alcoolisable/S* +alcoolisation/S* +alcooliser/a4p+ +alcoolisme/S* +alcoolo/S* +alcoolodépendance/S* +alcoolodépendante/F* +alcoologie/S* +alcoologue/S* +alcoolomanie/S* +alcoolo-résistante/F* +alcoolyse/S* +alcoomètre/S* +alcoométrie/S* +alcoométrique/S* +alcootest/S* +alcoran/S* +alcôve/S* +alcoylation/S* +alcoyle/S* +alcyne/S* +alcyon/S* +alcyonaire/S* +alcyonienne/F* +aldéhyde/S* +aldéhydique/S* +alderman/S* +aldicarbe/S* +aldine/F* +aldohexose/S* +aldol/S* +aldose/S* +aldostérone/S* +ale/S* +aléa/S* +aléatoire/S* +aléatoirement/D'Q' +alécithe/S* +alémanique/S* +alémanique/S* +alêne/S* +alénois/L'D'Q' +alentir/f2p+ +alentour +alentour/S* +aléoute/S* +aléoutienne/F* +aleph/S* +alépine/F* +alérion/S* +alerte/S* +alerte/S* +alertement/D'Q' +alerter/a2p+ +alésage/S* +alèse/S* +aléser/c2p+ +aléseuse/F* +alésoir/S* +alestir +aléthique/S* +aleurite/S* +aleurode/S* +aleurone/S* +alévie/F* +alevin/S* +alevinage/S* +aleviner/a2p+ +alevinière/F* +alévisme/S* +alexandra/S* +alexandrin/S* +alexandrine/F* +alexandrinisme/S* +alexandrite/S* +alexie/S* +alexine/S* +alexique/S* +alexithymie/S* +alezane/F* +alfa/S* +alfange/S* +alfatière/F* +alfénide/S* +algale/W* +algarade/S* +algazelle/S* +algèbre/S* +algébricité/S* +algébrique/S* +algébriquement/D'Q' +algébrisation/S* +algébriste/S* +algébro-différentielle/F* +algérianisme/S* +algérienne/F* +algéroise/F* +algicide/S* +algide/S* +algidité/S* +algie/S* +alginate/S* +algine/S* +alginique/S* +algique/S* +algo/S* +algocultrice/F* +algoculture/S* +algodystrophie/S* +algologie/S* +algologue/S* +algonkine/F* +algonquienne/F* +algonquine/F* +algorigramme/S* +algorithme/S* +algorithmie/S* +algorithmique/S* +algorithmique/S* +algorithmiquement/D'Q' +algothérapie/S* +alguazil/S* +algue/S* +alias +alias/L'D'Q' +alibi/S* +aliboufier/S* +alicament/S* +alicante/S* +alicot/S* +alicyclique/S* +alidade/S* +alien/S* +aliénabilité/S* +aliénable/S* +aliénante/F* +aliénataire/S* +aliénation/S* +aliénatrice/F* +aliénée/F* +aliéner/c4p+ +aliéniste/S* +alifère/S* +aliforme/S* +alignement/S* +aligner/a4p+ +aligneuse/F* +aligot/S* +aligoté/S* +alim/S* +aliment/S* +alimentaire/S* +alimentation/S* +alimentatrice/F* +alimenter/a4p+ +alinéa/S* +alinéaire/S* +alios/L'D'Q' +aliphatique/S* +aliquante/S* +aliquote/S* +alise/S* +alisier/S* +alismacée/S* +alismacée/S* +alisme/S* +alitée/F* +alitement/S* +aliter/a4p+ +alizari/S* +alizarine/S* +alizé/S* +alizée/F* +alizéenne/F* +alizier/S* +alkaest/L'D' +alkékenge/S* +alkermès/L'D'Q' +alkyde/S* +alkylant/S* +alkylante/F* +alkylat/S* +alkylation/S* +alkyle/S* +alkyler/a4p+ +allache/S* +allaitante/F* +allaitement/S* +allaiter/a2p+ +allante/F* +allantoïde/S* +allantoïde/S* +allantoïne/S* +allate/S* +alléchante/F* +allèchement/S* +allécher/c2p+ +allée/S* +allégation/S* +allégeance/S* +allégement/S* +allègement/S* +alléger/c4p+ +allégérir +allégir/f2p+ +allégorie/S* +allégorique/S* +allégoriquement/D'Q' +allégoriser/a2p+ +allégorisme/S* +allégoriste/S* +allègre/S* +allégrement/D'Q' +allègrement/D'Q' +allégresse/S* +allegretto/D'Q' +allegretto/L'D'Q' +allegro/D'Q' +allegro/L'D'Q' +alléguer/c2p+ +allèle/S* +allélique/S* +allélomorphe/S* +allélopathie/S* +alléluia/S* +allemande/F* +allène/S* +aller/S* +aller/aA +allergène/S* +allergène/S* +allergénique/S* +allergie/S* +allergique/S* +allergisante/F* +allergologie/S* +allergologique/S* +allergologiste/S* +allergologue/S* +aller-retour +allers-retours +alleu/X* +alleutier/S* +alliacée/F* +alliage/S* +alliaire/S* +alliance/S* +alliée/F* +allier/a4p+ +alligator/S* +allitération/S* +allitérative/F* +allô +alloc/S* +allocataire/S* +allocation/S* +allocatrice/F* +allocentrique/S* +allocentrisme/S* +allochtone/S* +allocutaire/S* +allocution/S* +allodiale/W* +allodynie/S* +allogame/S* +allogamie/S* +allogène/S* +allogreffe/S* +allométrie/S* +allométrique/S* +allomorphe/S* +allonge/S* +allongement/S* +allonger/a4p+ +allopathe/S* +allopathie/S* +allopathique/S* +allopatrique/S* +allophone/S* +allopurinol/S* +allosaure/S* +allosome/S* +allostérie/S* +allostérique/S* +allothermique/S* +allotir/f2p+ +allotissement/S* +allotrope/S* +allotropie/S* +allotropique/S* +allotype/S* +allotypie/S* +allouable/S* +allouer/a4p+ +alluchon/S* +allumage/S* +allume-cigare/S* +allume-cigares/L'D'Q' +allumée/F* +allume-feu/L'D'Q' +allume-feu/X* +allume-gaz/L'D'Q' +allumer/a4p+ +allumette/S* +allumettière/F* +allumeuse/F* +allumoir/S* +allure/S* +allurée/F* +allusion/S* +allusive/F* +allusivement/L'D'Q' +alluviale/W* +alluvion/S* +alluvionnaire/S* +alluvionnement/S* +alluvionner/a1p. +allyle/S* +allylène/S* +allylique/S* +almageste/S* +almanach/S* +almandine/F* +almasilicium/S* +almasilium/S* +almée/S* +almélec/S* +almicantarat/S* +almohade/S* +almoravide/S* +aloès/L'D'Q' +aloétique/S* +alogie/S* +alogique/S* +aloi/L'D'Q' +alopécie/S* +alors/D'Q'Qj +alose/S* +alostoise/F* +alouate/S* +alouette/S* +alourdir/f4p+ +alourdissante/F* +alourdissement/S* +aloyau/X* +alpaga/S* +alpage/S* +alpaguer/a2p+ +alpax/L'D'Q' +alpe/S* +alpenstock/S* +alpestre/S* +alpha/L'D'Q' +alphabet/S* +alphabète/S* +alphabétique/S* +alphabétiquement/D'Q' +alphabétisation/S* +alphabétiser/a2p+ +alphabétiseuse/F* +alphabétisme/S* +alphanumérique/S* +alphasyllabaire/S* +alphasyllabique/S* +alpine/F* +alpinisme/S* +alpiniste/S* +alpiste/S* +alquifoux/L'D'Q' +alsacienne/F* +altaïque/S* +alter/L'D'Q' +altérabilité/S* +altérable/S* +altéragène/S* +altérante/F* +altération/S* +altérative/F* +altercation/S* +altérer/c4p+ +altérite/S* +altérité/S* +altermondialisation/S* +altermondialisme/S* +altermondialiste/S* +alternance/S* +alternante/F* +alternaria/S* +alternat/S* +alternateur/S* +alternative/F* +alternativement/D'Q' +alterne/S* +alterner/a2p+ +alternostat/S* +altesse/S* +althæa/S* +althéa/S* +altière/F* +altièrement/D'Q' +altimètre/S* +altimétrie/S* +altimétrique/S* +altiport/S* +altise/S* +altiste/S* +altitude/S* +altitudinaire/S* +altitudinale/W* +alto/S* +altocumulus/L'D'Q' +altostratus/L'D'Q' +altruisme/S* +altruiste/S* +alu/S* +alucite/S* +alule/S* +aluminage/S* +aluminate/S* +alumine/S* +aluminer/a2p+ +aluminerie/S* +alumineuse/W* +aluminiage/S* +aluminier/S* +aluminique/S* +aluminium/S* +aluminosilicate/S* +aluminothermie/S* +alumnat/S* +alun/S* +alunage/S* +aluner/a2p+ +alunifère/S* +alunir/f1p+ +alunissage/S* +alunite/S* +alvéolaire/S* +alvéole/S* +alvéolée/F* +alvéolite/S* +alvéolo-dentaire/S* +alvéoloplastie/S* +alvéolyse/S* +alvine/F* +alya/S* +alysse/S* +alyte/S* +amabile/L'D'Q' +amabilité/S* +amadou/S* +amadouement/S* +amadouer/a2p+ +amadouvier/S* +amagnétique/S* +amaigrir/f4p+ +amaigrissante/F* +amaigrissement/S* +amalgamation/S* +amalgame/S* +amalgamer/a4p+ +amandaie/S* +amande/S* +amandée/F* +amanderaie/S* +amandier/S* +amandine/S* +amandon/S* +amanite/S* +amanitine/S* +amante/F* +amarantacée/S* +amarante/L'D'Q' +amarante/S* +amareyeuse/F* +amarile/F* +amarinage/S* +amariner/a4p+ +amarrage/S* +amarre/S* +amarrer/a4p+ +amaryllidacée/S* +amaryllis/L'D'Q' +amas/L'D'Q' +amasser/a4p+ +amassette/S* +amasseuse/F* +amateur/S* +amateure/S* +amateurisme/S* +amathie/S* +amatir/f2p+ +amatrice/F* +amaurose/S* +amazone/S* +amazonienne/F* +amazonite/S* +ambage/S* +ambassade/S* +ambassadrice/F* +ambiance/S* +ambiancer/a1p. +ambianceuse/F* +ambiante/F* +ambidextre/S* +ambidextrie/S* +ambifier/a3p+ +ambiguë/F* +ambiguïté/S* +ambigument/D'Q' +ambisexuée/F* +ambitieuse/W* +ambitieusement/D'Q' +ambition/S* +ambitionner/a2p+ +ambitus/L'D'Q' +ambivalence/S* +ambivalente/F* +amble/S* +ambler/a1p. +ambleuse/F* +amblygonite/S* +amblyope/S* +amblyopie/S* +amblyoscope/S* +amblystome/S* +ambon/S* +ambre/L'D'Q' +ambre/S* +ambrer/a2p+ +ambrette/S* +ambrienne/F* +ambroisie/S* +ambroisienne/F* +ambrosiaque/S* +ambrosienne/F* +ambulacraire/S* +ambulacre/S* +ambulance/S* +ambulancière/F* +ambulante/F* +ambulateur/S* +ambulation/S* +ambulatoire/S* +âme/S* +amélanche/S* +amélanchier/S* +améliorable/S* +améliorante/F* +amélioration/S* +améliorative/F* +amélioratrice/F* +améliorer/a4p+ +amen +amen/L'D'Q' +amenage/S* +aménageable/S* +aménagement/S* +aménager/a4p+ +aménageuse/F* +aménagiste/S* +amendable/S* +amende/S* +amendement/S* +amender/a4p+ +amène/S* +amener/b4p+ +aménité/S* +amenokal/S* +aménokal/S* +aménorrhée/S* +amentacée/S* +amentifère/S* +amentifère/S* +amenuisement/S* +aménuiser +amenuiser/a2p+ +amer/S* +amère/F* +amèrement/D'Q' +américaine/F* +américanisation/S* +américaniser/a4p+ +américanisme/S* +américaniste/S* +américanité/S* +américano/S* +américano-australienne/F* +américano-britannique/S* +américano-canadienne/F* +américano-danoise/F* +américano-européenne/F* +américano-iranienne/F* +américano-irlandaise/F* +américano-israélienne/F* +américano-mexicaine/F* +américano-néerlandaise/F* +américano-néo-zélandaise/F* +américanophile/S* +américano-russe/S* +américano-soviétique/S* +américano-turque/F* +américium/S* +amérindianisme/S* +amérindianiste/S* +amérindienne/F* +amerloque/S* +amerrir/f1p+ +amerrissage/S* +amertume/S* +amétabole/S* +amétallique/S* +améthyste/S* +amétrope/S* +amétropie/S* +ameublement/S* +ameublir/f2p+ +ameublissement/S* +ameutement/S* +ameuter/a4p+ +amharique/S* +amiable/S* +amiablement/D'Q' +amiante/S* +amiantée/F* +amiantose/S* +amibe/S* +amibiase/S* +amibienne/F* +amiboïde/S* +amicale/W* +amicalement/D'Q' +amicalisme/S* +amicaliste/S* +amicalité/S* +amicrobienne/F* +amict/S* +amide/S* +amidification/S* +amidon/S* +amidonnage/S* +amidonner/a2p+ +amidonnerie/S* +amidonnière/F* +amidopyrine/S* +amidosulfuron/S* +amidure/S* +amie/F* +amiénoise/F* +amigne/S* +amikacine/S* +amimie/S* +amination/S* +amincir/f4p+ +amincissante/F* +amincissement/S* +amine/S* +aminée/F* +aminer/a1p. +aminoacide/S* +amino-acide/S* +aminobutyrique/S* +aminoplaste/S* +aminoside/S* +amiralat/S* +amirale/W* +amirauté/S* +amish/L'D'Q' +amitié/S* +amitose/S* +ammocète/S* +ammodyte/S* +ammodyte/S* +ammonal/S* +ammoniac/S* +ammoniacale/W* +ammoniacée/F* +ammoniaque/S* +ammoniaquée/F* +ammoniotélique/S* +ammonisation/S* +ammonite/S* +ammonitrate/S* +ammonium/S* +ammoniurie/S* +ammophile/S* +ammophile/S* +amnésie/S* +amnésique/S* +amniocentèse/S* +amnios/L'D'Q' +amnioscopie/S* +amniote/S* +amniote/S* +amniotique/S* +amnistiable/S* +amnistiante/F* +amnistie/S* +amnistiée/F* +amnistier/a2p+ +amochée/F* +amocher/a4p+ +amodiataire/S* +amodiation/S* +amodiatrice/F* +amodier/a2p+ +amoindrir/f4p+ +amoindrissement/S* +amok/S* +amollir/f4p+ +amollissante/F* +amollissement/S* +amome/S* +amonceler/d4p+ +amoncellement/S* +amont/S* +amorale/W* +amoralisme/S* +amoralité/S* +amorçable/S* +amorçage/S* +amorce/S* +amorcer/a4p+ +amorceuse/F* +amorçoir/S* +amordancer/a2p+ +amoroso/D'Q' +amorphe/S* +amorphisme/S* +amorti/S* +amortir/f4p+ +amortissable/S* +amortissement/S* +amortisseur/S* +amortisseuse/F* +amour/S* +amouracher/a3p+ +amourer/a2p+ +amourette/S* +amoureuse/W* +amoureusement/D'Q' +amour-propre/L'D'Q' +amours/D'Q' +amours-propres/D'Q' +amovibilité/S* +amovible/S* +ampélographe/S* +ampélographie/S* +ampélographique/S* +ampélologie/S* +ampélopsis/L'D'Q' +ampérage/S* +ampère/Um +ampère-heure/L'D'Q' +ampèremètre/S* +ampèremétrique/S* +ampères-heures/D'Q' +ampérométrie/S* +ampérométrique/S* +amphétamine/S* +amphétaminique/S* +amphi/S* +amphiarthrose/S* +amphibie/S* +amphibie/S* +amphibienne/F* +amphibole/S* +amphibole/S* +amphibolique/S* +amphibolite/S* +amphibologie/S* +amphibologique/S* +amphibologiquement/D'Q' +amphibraque/S* +amphictyon/S* +amphictyonie/S* +amphidrome/S* +amphidromique/S* +amphigastre/S* +amphigouri/S* +amphigourique/S* +amphigourisme/S* +amphimixie/S* +amphioxus/L'D'Q' +amphiphile/S* +amphipode/S* +amphipode/S* +amphiprion/S* +amphiprotique/S* +amphisbène/S* +amphistère/S* +amphistome/S* +amphithéâtre/S* +amphitryon/S* +amphiume/S* +ampholyte/S* +amphore/S* +amphorisque/S* +amphotère/S* +amphotère/S* +amphotéricine/S* +ampicilline/S* +ample/S* +amplective/F* +amplement/D'Q' +ampleur/S* +ampli/S* +ampliation/S* +ampliative/F* +ampliatrice/F* +amplicon/S* +amplifiable/S* +amplifiante/F* +amplification/S* +amplificatrice/F* +amplifier/a4p+ +ampliforme/S* +ampliforme/S* +amplis-syntoniseurs/D'Q' +amplis-tuners/D'Q' +ampli-syntoniseur/L'D'Q' +amplitude/S* +ampli-tuner/L'D'Q' +ampoule/S* +ampoulée/F* +ampullaire/S* +amputation/S* +amputée/F* +amputer/a4p+ +amuïr/fY +amuïssement/S* +amulette/S* +amure/S* +amurer/a2p+ +amusante/F* +amuse-bouche/L'D'Q' +amuse-bouche/S* +amuse-gueule/L'D'Q' +amuse-gueule/S* +amusement/S* +amuser/a4p+ +amusette/S* +amuseuse/F* +amusie/S* +amyélinique/S* +amygdale/S* +amygdalectomie/S* +amygdalienne/F* +amygdaline/S* +amygdalite/S* +amygdaloïde/S* +amylacée/F* +amylase/S* +amyle/S* +amylène/S* +amylique/S* +amylobacter/S* +amyloïde/S* +amyloïde/S* +amyloplaste/S* +amylose/S* +amyotrophie/S* +amyotrophique/S* +an/S* +ana/L'D'Q' +anabaptisme/S* +anabaptiste/S* +anabatique/S* +anabolique/S* +anabolisante/F* +anabolisme/S* +anabolite/S* +anacardiacée/S* +anacardier/S* +anachorète/S* +anachorétique/S* +anachorétisme/S* +anachronique/S* +anachroniquement/D'Q' +anachronisme/S* +anaclitique/S* +anacoluthe/S* +anaconda/S* +anacréontique/S* +anacrouse/S* +anacyclique/S* +anacyclique/S* +anadiplose/S* +anadrome/S* +anaérobie/S* +anaérobie/S* +anaérobiose/S* +anaérobique/S* +anaérocombustion/S* +anafront/S* +anagenèse/S* +anaglyphe/S* +anaglyphe/S* +anaglyptique/S* +anagnoste/S* +anagogie/S* +anagogique/S* +anagrammatique/S* +anagrammatisme/S* +anagrammatiste/S* +anagramme/S* +anagrammer/a2p+ +analcime/S* +anale/W* +analecta/D'Q' +analecte/S* +analemmatique/S* +analemme/S* +analepse/S* +analeptique/S* +analgésie/S* +analgésier/a2p+ +analgésique/S* +analgésique/S* +analgie/S* +analité/S* +anallergique/S* +analogie/S* +analogique/S* +analogiquement/D'Q' +analogisme/S* +analogon/S* +analogue/S* +analogue/S* +analphabète/S* +analphabétisme/S* +analycité/S* +analysable/S* +analysante/F* +analyse/S* +analysée/F* +analyser/a4p+ +analyseur/S* +analyste/S* +analyste-programmeur/L'D'Q' +analyste-programmeuse/L'D'Q' +analystes-programmeurs/D'Q' +analystes-programmeuses/D'Q' +analyticité/S* +analytique/S* +analytique/S* +analytiquement/D'Q' +anamnèse/S* +anamnestique/S* +anamorphe/S* +anamorphe/S* +anamorphique/S* +anamorphose/S* +anamorphosée/F* +anamorphoseur/S* +anamostoser/a4p+ +ananas/L'D'Q' +anapeste/S* +anaphase/S* +anaphore/S* +anaphorèse/S* +anaphorique/S* +anaphoriquement/L'D'Q' +anaphrodisiaque/S* +anaphrodisie/S* +anaphylactique/S* +anaphylactoïde/S* +anaphylaxie/S* +anaplasie/S* +anaplasique/S* +anaplastie/S* +anapside/S* +anar/S* +anarchie/S* +anarchique/S* +anarchiquement/D'Q' +anarchisante/F* +anarchisme/S* +anarchiste/S* +anarcho-capitalisme/S* +anarcho-capitaliste/S* +anarcho-primitivisme/S* +anarcho-syndicalisme/S* +anarcho-syndicaliste/S* +anarthrie/S* +anasarque/S* +anastatique/S* +anastigmat/S* +anastigmatique/S* +anastomose/S* +anastomoser/a3p+ +anastrophe/S* +anatase/S* +anatexie/S* +anathématisation/S* +anathématiser/a2p+ +anathème/S* +anatidé/S* +anatife/S* +anatocisme/S* +anatolienne/F* +anatomie/S* +anatomique/S* +anatomiquement/D'Q' +anatomiser/a2p+ +anatomiste/S* +anatomopathologie/S* +anatomo-pathologie/S* +anatomopathologique/S* +anatomo-pathologique/S* +anatomopathologiste/S* +anatomo-pathologiste/S* +anatopisme/S* +anatoxine/S* +anatrope/S* +anavenin/S* +ancestrale/W* +ancestralement/L'D'Q' +ancestralité/S* +ancêtre/S* +anche/S* +anchoïade/S* +anchois/L'D'Q' +ancienne/F* +anciennement/D'Q' +ancienneté/S* +ancillaire/S* +ancolie/S* +ancrage/S* +ancre/S* +ancrer/a4p+ +ancrure/S* +andain/S* +andainage/S* +andalou/S* +andalouse/S* +andalousite/S* +andante/D'Q' +andante/S* +andantino/D'Q' +andantino/S* +andésine/S* +andésite/S* +andésitique/S* +andine/F* +andorrane/F* +andouille/S* +andouiller/S* +andouillette/S* +andradite/S* +andrène/S* +andrinople/S* +androcée/S* +androcéphale/S* +androconie/S* +androgène/S* +androgène/S* +androgenèse/S* +androgénétique/S* +androgénie/S* +androgénique/S* +androgyne/S* +androgynie/S* +androïde/S* +androlâtre/S* +androlâtrie/S* +andrologie/S* +andrologique/S* +andrologue/S* +andromède/S* +andropause/S* +androphobie/S* +androsace/S* +androstérone/S* +âne/S* +anéantir/f4p+ +anéantissement/S* +anecdote/S* +anecdotière/F* +anecdotique/S* +anecdotiquement/D'Q' +anéchoïque/S* +ânée/S* +anéjaculation/S* +anémiante/F* +anémie/S* +anémier/a2p+ +anémique/S* +anémochore/S* +anémographe/S* +anémomètre/S* +anémomorphose/S* +anémone/S* +anémophile/S* +anémophilie/S* +anencéphale/S* +anencéphalie/S* +anérection/S* +anergie/S* +ânerie/S* +anéroïde/S* +ânesse/F* +anesthésiante/F* +anesthésie/S* +anesthésiée/F* +anesthésier/a4p+ +anesthésiologie/S* +anesthésiologiste/S* +anesthésique/S* +anesthésiste/S* +aneth/S* +aneuploïde/S* +aneuploïdie/S* +aneurine/S* +anévrismale/W* +anévrisme/S* +anévrysmale/W* +anévrysme/S* +anfractueuse/W* +anfractuosité/S* +angarie/S* +ange/S* +angéite/S* +angelet/S* +angélique/S* +angéliquement/D'Q' +angéliser/a4p+ +angélisme/S* +angélologie/S* +angelot/S* +angélus/L'D'Q' +angemme/S* +angenne/S* +angéologie/S* +angevine/F* +angiectasie/S* +angine/S* +angineuse/W* +angiocardiographie/S* +angiocholite/S* +angiogenèse/S* +angiographie/S* +angiologie/S* +angiologue/S* +angiomatose/S* +angiome/S* +angioneurotique/S* +angio-œdème/S* +angioplastie/S* +angiosarcome/S* +angioscopie/S* +angiosperme/S* +angiosperme/S* +angiotensine/S* +angiotensinogène/S* +anglaise/F* +anglaiser/a2p+ +angle/S* +angledozer/S* +anglet/S* +anglicane/F* +anglicanisme/S* +angliche/S* +anglicisation/S* +angliciser/a4p+ +anglicisme/S* +angliciste/S* +anglo-allemande/F* +anglo-américaine/F* +anglo-arabe/S* +anglo-australienne/F* +anglo-autrichienne/F* +anglo-belge/S* +anglo-brésilienne/F* +anglo-bulgare/S* +anglo-canadienne/F* +anglo-chinoise/F* +anglo-danoise/F* +anglo-égyptienne/F* +anglo-espagnole/F* +anglo-finlandaise/F* +anglo-française/F* +anglo-hongroise/F* +anglo-indienne/F* +anglo-irakienne/F* +anglo-iranienne/F* +anglo-irlandaise/F* +anglo-israélienne/F* +anglo-italienne/F* +anglo-japonaise/F* +anglomane/S* +anglomanie/S* +anglo-néerlandaise/F* +anglo-normande/F* +anglo-norvégienne/F* +anglo-pakistanaise/F* +anglophile/S* +anglophilie/S* +anglophobe/S* +anglophobie/S* +anglophone/S* +anglo-polonaise/F* +anglo-portugaise/F* +anglo-russe/S* +anglo-saxonne/F* +anglo-suédoise/F* +anglo-suisse/S* +anglo-tchèque/S* +angoissante/F* +angoisse/S* +angoissée/F* +angoisser/a4p+ +angoisseuse/W* +angolaise/F* +angon/S* +angor/S* +angora/S* +angora/S* +angoreuse/W* +angström/S* +ångström/S* +anguiforme/S* +anguille/S* +anguillère/S* +anguilliforme/S* +anguillule/S* +anguillulose/S* +angulaire/S* +angulairement/D'Q' +angulation/S* +anguleuse/W* +anguleusement/D'Q' +angusticlave/S* +angustura/S* +angusture/S* +anharmonique/S* +anhédonie/S* +anhélation/S* +anhéler/c1p. +anhépatie/S* +anhidrose/S* +anhidrotique/S* +anhistorique/S* +anhydrase/S* +anhydre/S* +anhydride/S* +anhydrite/S* +anhydrobiose/S* +anhypothétique/S* +anicroche/S* +ânière/F* +aniline/S* +anilisme/S* +animadversion/S* +animal/X* +animalcule/S* +animale/W* +animalement/D'Q' +animalerie/S* +animalesque/S* +animalière/F* +animalisation/S* +animaliser/a2p+ +animalisme/S* +animaliste/S* +animalité/S* +animation/S* +animatique/S* +animato +animatrice/F* +animatronique/S* +animé/S* +animelle/S* +animer/a4p+ +animique/S* +animisme/S* +animiste/S* +animosité/S* +anion/S* +anionique/S* +aniridie/S* +anis/L'D'Q' +anisakiase/S* +aniser/a2p+ +anisette/S* +anisocorie/S* +anisocytose/S* +anisogamie/S* +anisole/S* +anisoptère/S* +anisotonie/S* +anisotrope/S* +anisotropie/S* +ankérite/S* +ankylosante/F* +ankylosaure/S* +ankylose/S* +ankyloser/a4p+ +ankylostome/S* +ankylostomiase/S* +ankylostomose/S* +annale/W* +annales/D'Q' +annaliste/S* +annalistique/S* +annalistique/S* +annalité/S* +annamite/S* +anneau/X* +année/S* +année-lumière/L'D'Q' +années-lumière/D'Q' +anneler/d2p+ +annelet/S* +annélide/S* +annexe/S* +annexe/S* +annexer/a4p+ +annexion/S* +annexionnisme/S* +annexionniste/S* +annexite/S* +annihilante/F* +annihilation/S* +annihiler/a4p+ +anniversaire/S* +annonacée/S* +annonce/S* +annoncer/a4p+ +annonceure/S* +annonceuse/F* +annonciation/S* +annonciatrice/F* +annoncière/F* +annone/S* +annotation/S* +annotatrice/F* +annoter/a2p+ +annua +annuaire/S* +annualisation/S* +annualiser/a2p+ +annualité/S* +annuelle/F* +annuellement/D'Q' +annuitaire/S* +annuité/S* +annulabilité/S* +annulable/S* +annulaire/S* +annulation/S* +annulative/F* +annulatrice/F* +annulement/S* +annuler/a4p+ +annulingus/L'D'Q' +annuus +anoblir/f4p+ +anoblissante/F* +anoblissement/S* +anode/S* +anodine/F* +anodique/S* +anodisation/S* +anodiser/a2p+ +anodiseuse/F* +anodonte/S* +anodontie/S* +anomale/W* +anomalie/S* +anomalistique/S* +anomaloscope/S* +anomère/S* +anomérique/S* +anomie/S* +anomique/S* +ânon/S* +anonacée/S* +anone/S* +ânonnement/S* +ânonner/a2p+ +anonymat/S* +anonyme/S* +anonymement/D'Q' +anonymisation/S* +anonymiser/a4p+ +anophèle/S* +anoploure/S* +anorak/S* +anorchidie/S* +anordir/f1p. +anorectale/W* +ano-rectale/W* +anorexie/S* +anorexigène/S* +anorexigène/S* +anorexique/S* +anorganique/S* +anorgasmie/S* +anormale/W* +anormalement/D'Q' +anormalité/S* +anorthite/S* +anorthose/S* +anorthosite/S* +anosmie/S* +anosmique/S* +anosognosie/S* +anoure/S* +anovulation/S* +anovulatoire/S* +anoxémie/S* +anoxie/S* +anoxique/S* +anse/S* +ansée/F* +ansériforme/S* +ansérine/F* +ansérine/S* +anspect/S* +anspessade/S* +antabuse/S* +antagonique/S* +antagonisme/S* +antagoniste/S* +antalgie/S* +antalgique/S* +antalgique/S* +antamanide/S* +antan/D' +antanaclase/S* +antarctique/S* +ante/S* +antébrachiale/W* +antécambrienne/F* +antécédence/S* +antécédente/F* +antéchrist/S* +antédiluvienne/F* +antéfixe/S* +antéhypophysaire/S* +antéhypophyse/S* +antéislamique/S* +antémémoire/S* +antenaise/F* +anténatale/F* +antennate/S* +antenne/S* +antenniste/S* +antennule/S* +antépénultième/S* +antépénultième/S* +antéposer/a2p+ +antéposition/S* +antépulsion/S* +antérieure/F* +antérieurement/D'Q' +antériorité/S* +antérograde/S* +antéropostérieure/F* +antéro-postérieure/F* +antéroventrale/W* +antéro-ventrale/W* +antéversion/S* +anthelminthique/S* +anthémis/L'D'Q' +anthère/S* +anthéridie/S* +anthérozoïde/S* +anthèse/S* +anthocyane/S* +anthocyanine/S* +anthologie/S* +anthologique/S* +anthoméduse/S* +anthonome/S* +anthozoaire/S* +anthracène/S* +anthracite/L'D'Q' +anthracite/S* +anthraciteuse/W* +anthracnose/S* +anthracose/S* +anthracosilicose/S* +anthraquinone/S* +anthrax/L'D'Q' +anthrène/S* +anthropique/S* +anthropisation/S* +anthropisée/F* +anthropobiologie/S* +anthropobiologiste/S* +anthropocène/S* +anthropocentrique/S* +anthropocentrisme/S* +anthropocentriste/S* +anthropogenèse/S* +anthropogénie/S* +anthropoïde/S* +anthropologie/S* +anthropologique/S* +anthropologiquement/D'Q' +anthropologiste/S* +anthropologue/S* +anthropométrie/S* +anthropométrique/S* +anthropomorphe/S* +anthropomorphique/S* +anthropomorphiquement/D'Q' +anthropomorphisation/S* +anthropomorphiser/a4p+ +anthropomorphisme/S* +anthropomorphiste/S* +anthroponyme/S* +anthroponymie/S* +anthroponymique/S* +anthropophage/S* +anthropophagie/S* +anthropophile/S* +anthropophilie/S* +anthropopithèque/S* +anthroposophe/S* +anthroposophie/S* +anthroposophique/S* +anthropotechnie/S* +anthropotechnique/S* +anthropotechnique/S* +anthropozoonose/S* +anthyllis/L'D'Q' +anti/L'D'Q' +anti-IVG/L'D'Q' +anti-UV/L'D'Q' +anti-VIH/L'D'Q' +antiabolitionniste/S* +antiacarien/S* +antiacarienne/F* +antiacide/S* +antiacnéique/S* +antiacnéique/S* +antiadhésive/F* +antiaérienne/F* +anti-aérienne/F* +anti-âge/L'D'Q' +anti-âge/L'D'Q' +antialcoolique/S* +antialcoolisme/S* +antialiasing/S* +antiallergique/S* +antiamarile/F* +antiaméricaine/F* +antiaméricanisme/S* +antiandrogène/S* +anti-androgène/S* +anti-apartheid +antiapartheid/L'D'Q' +antiarthritique/S* +anti-arthritique/S* +antiarythmique/S* +anti-arythmique/S* +antiatome/S* +antiatomique/S* +antiautomorphisme/S* +anti-avortement/L'D'Q' +antiavortement/S* +antibactérienne/F* +anti-bascule/L'D'Q' +antibelge/S* +anti-belge/S* +antibélier/S* +antibiogramme/S* +antibiorésistance/S* +antibiorésistante/F* +antibiothérapie/S* +antibiotique/S* +antibiotique/S* +antiblocage/L'D'Q' +antiblocage/S* +antibois/L'D'Q' +antibourgeoise/F* +antibrouillage/S* +antibrouillard/L'D'Q' +antibrouillard/S* +antibrouillée/F* +antibruit/L'D'Q' +antibuée/L'D'Q' +anticalcaire/L'D'Q' +anticalcaire/S* +anticalcique/S* +anticancéreuse/W* +anticapitalisme/S* +anticapitaliste/S* +anticasseur/S* +anticathode/S* +anticatholique/S* +anticellulite/L'D'Q' +anticerne/S* +antichambre/S* +antichar/S* +antichoc/S* +anticholérique/S* +anticholinergique/S* +anticholinergique/S* +antichômage/L'D'Q' +antichrèse/S* +antichrétienne/F* +antichrist/S* +anticipable/S* +anticipation/S* +anticipative/F* +anticipativement/L'D'Q' +anticipatrice/F* +anticiper/a2p+ +anticléricale/W* +anticléricalisme/S* +anticlinale/W* +anticoagulante/F* +anticodon/S* +anticoloniale/W* +anticolonialisme/S* +anticolonialiste/S* +anticomanie/S* +anticommunisme/S* +anticommuniste/S* +anticommutative/F* +anticommuter/a2p+ +anticonceptionnelle/F* +anticoncurrentielle/F* +anticonformisme/S* +anticonformiste/S* +anticonjoncturelle/F* +anticonstitutionnelle/F* +anticonstitutionnellement/D'Q' +anticopie/L'D'Q' +anticorps/L'D'Q' +anticorpuscule/S* +anticorrosion/L'D'Q' +anti-corruption/L'D'Q' +anticorruption/S* +anticrénelage/S* +anticriminalité/L'D'Q' +anti-criminalité/L'D'Q' +anticryptogamique/S* +anticyclique/S* +anticyclonale/W* +anticyclone/S* +anticyclonique/S* +antidater/a2p+ +antidéflagrante/F* +antidémarrage/L'D'Q' +antidémarrage/S* +antidémocrate/S* +antidémocratique/S* +antidéplacement/S* +antidépresseur/S* +antidépresseur/S* +antidépressive/F* +antidérapante/F* +antidérivation/S* +antidétonante/F* +antidiabétique/S* +antidiabétique/S* +antidiagonale/W* +antidiphtérique/S* +antidiurétique/S* +antidiurétique/S* +antidogmatique/S* +antidopage/L'D'Q' +antidoping/L'D'Q' +antidote/S* +antidouleur/L'D'Q' +antidouleur/S* +antidreyfusarde/F* +antidrogue/L'D'Q' +antidumping/L'D'Q' +anti-écologique/S* +antiéconomique/S* +anti-économique/S* +antieffraction/L'D'Q' +antiémétique/S* +antiémeute/L'D'Q' +antienne/S* +antienzyme/S* +anti-enzyme/S* +antiépileptique/S* +antiesclavagiste/S* +antiétatique/S* +antiétatisme/S* +antifa/S* +antifading/S* +antifascisme/S* +antifasciste/S* +antiféminisme/S* +antiféministe/S* +antiferment/S* +antiferroélectricité/S* +antiferroélectrique/S* +antiferromagnétique/S* +antiferromagnétisme/S* +antifiscale/W* +antifongique/S* +antifongique/S* +antifrançaise/F* +antifraude/S* +antifriction/S* +antifriction/S* +antifuite/S* +antifumée/S* +anti-g/L'D'Q' +antigang/L'D'Q' +antigel/S* +antigène/S* +antigénique/S* +antigivrante/F* +antigivre/L'D'Q' +antiglisse/L'D'Q' +antiglobuline/S* +antigouvernementale/W* +antigravifique/S* +antigravitation/S* +antigravitationnelle/F* +antigravité/S* +antigrippale/W* +antiguaise/F* +anti-guerre/L'D'Q' +antiguerre/S* +antihalo/L'D'Q' +antihalo/S* +antihausse/L'D'Q' +antihémorragique/S* +antihermitienne/F* +antihéros/L'D'Q' +antihistaminique/S* +antihistaminique/S* +antiholomorphe/S* +antihoraire/S* +antihumanisme/S* +antihumaniste/S* +antihydrogène/S* +antihygiénique/S* +antihypertenseur/S* +anti-impérialisme/S* +anti-impérialiste/S* +anti-incendie/L'D'Q' +anti-infectieuse/W* +anti-inflammatoire/S* +anti-inflammatoire/S* +anti-inflationniste/S* +antijeu/X* +antijeune/S* +anti-jeune/S* +antijudaïsme/S* +antilepton/S* +antiliante/F* +antilibérale/W* +antilibéralisme/S* +antilinéaire/S* +antilithique/S* +antillaise/F* +antillanisme/S* +antilocapridé/S* +antilogarithme/S* +antilogie/S* +antilogique/S* +antilope/S* +antimaçonnique/S* +antimalarique/S* +antimatière/S* +antiméridien/S* +antimicrobienne/F* +anti-microbienne/F* +antimigraineuse/W* +antimigraineux/L'D'Q' +antimilitarisme/S* +antimilitariste/S* +antiministérielle/F* +anti-ministérielle/F* +antimissile/S* +antimite/S* +antimitotique/S* +antimoderne/S* +antimoine/S* +antimonarchique/S* +antimonarchiste/S* +antimondialisation/S* +antimondialiste/S* +antimoniate/S* +antimoniée/F* +antimonieuse/W* +antimoniure/S* +antimorale/W* +antimousse/S* +antimusulmane/F* +antimycosique/S* +antimycosique/S* +antinataliste/S* +antinationale/W* +antinationalisme/S* +antinationaliste/S* +antinaturelle/F* +antinaupathique/S* +antinazie/F* +antinazisme/S* +antineutrino/S* +antineutron/S* +antinévralgique/S* +antinomie/S* +antinomique/S* +antinomiquement/D'Q' +antinucléaire/S* +antiœstrogène/S* +anti-œstrogène/S* +antiœstrogène/S* +anti-œstrogène/S* +antioncogène/S* +antioxydant/S* +antioxydante/F* +anti-oxydante/F* +antipaludéenne/F* +antipaludique/S* +antipanique/L'D'Q' +antipape/S* +antiparallèle/S* +antiparasitage/S* +antiparasitage/S* +antiparasitaire/S* +antiparasitaire/S* +antiparasite/S* +antiparasite/S* +antiparlementaire/S* +antiparlementarisme/S* +antiparticule/S* +antipathie/S* +antipathique/S* +antipathiquement/D'Q' +antipatinage/L'D'Q' +antipatinage/S* +antipatriote/S* +antipatriotique/S* +antipatriotisme/S* +antipelliculaire/S* +antipéristaltique/S* +antipersonnel/L'D'Q' +antiphilosophique/S* +antiphlogistique/S* +antiphonaire/S* +antiphrase/S* +antiplaquettaire/S* +antipodale/W* +antipode/S* +antipodisme/S* +antipodiste/S* +antipoétique/S* +antipoison/S* +antipolio/L'D'Q' +antipoliomyélitique/S* +antipollupostage/S* +antipollution/L'D'Q' +antiproductivisme/S* +antiproductiviste/S* +antiprogressisme/S* +antiprogressiste/S* +antiprotéase/S* +antiprotectionniste/S* +antiproton/S* +antipsychiatre/S* +antipsychiatrie/S* +antipsychiatrique/S* +antipsychotique/S* +antipsychotique/S* +antiputride/S* +antipyrétique/S* +antipyrine/S* +antiquaille/S* +antiquaire/S* +antiquark/S* +antique/S* +antiquement/D'Q' +antiquer/a2p+ +antiquité/S* +antirabique/S* +antirachitique/S* +antiracisme/S* +antiraciste/S* +antiradar/S* +antiradiation/S* +anti-radiations/L'D'Q' +antirationalisme/S* +antirationnelle/F* +antireflet/S* +antireflet/S* +antiréflexive/F* +antiréglementaire/S* +antirejet/L'D'Q' +antireligieuse/W* +antirépublicaine/F* +antiretour/S* +antirétroviral/X* +antirétrovirale/W* +antirévolutionnaire/S* +antirides/L'D'Q' +antirides/L'D'Q' +antiripage/S* +antirouille/L'D'Q' +antirouille/S* +antiroulis/L'D'Q' +anti-roulis/L'D'Q' +antirusse/S* +antisalissure/S* +antisatellite/S* +antiscientifique/S* +antiscorbutique/S* +antisèche/S* +antiségrégationniste/S* +antiseigneuriale/W* +anti-seigneuriale/W* +antisémite/S* +antisémitique/S* +antisémitisme/S* +antiséparatif/S* +antisepsie/S* +antiseptique/S* +antiseptique/S* +antisérotoninergique/S* +antisérum/S* +antisexiste/S* +anti-sexiste/S* +antisionisme/S* +anti-sionisme/S* +antisioniste/S* +anti-sioniste/S* +antisismique/S* +antislash/A* +antisociale/W* +anti-sous-marine/F* +antisoviétique/S* +antispasmodique/S* +antispasmodique/S* +antispécisme/S* +antispéciste/S* +antisportive/F* +antistatique/S* +antistatique/S* +antistress/L'D'Q' +antistrophe/S* +antisudorale/W* +antisymétrique/S* +antisyndicale/F* +antisyphilitique/S* +anti-système/L'D'Q' +antisystème/S* +anti-tabac +antitabac/L'D'Q' +antitache/L'D'Q' +antiterminaison/S* +antiterrorisme/S* +antiterroriste/S* +antitétanique/S* +antithermique/S* +antithermique/S* +antithèse/S* +antithétique/S* +antithétiquement/L'D'Q' +antithyroïdien/S* +antithyroïdienne/F* +antitotalitaire/S* +antitoxine/S* +antitoxique/S* +antitrust/L'D'Q' +antitrypsine/S* +antituberculeuse/W* +antitumorale/W* +antitussive/F* +antivaccin/S= +antivariolique/S* +antivénéneuse/W* +antivénérienne/F* +antivenimeuse/W* +antivibratile/S* +antiviral/X* +antivirale/W* +antivirus/L'D'Q' +antivol/S* +antonomase/S* +antonyme/S* +antonymie/S* +antre/S* +antrustion/S* +anulingus/L'D'Q' +anurie/S* +anus/L'D'Q' +anversoise/F* +anxiété/S* +anxieuse/W* +anxieusement/D'Q' +anxiogène/S* +anxiolytique/S* +anxiolytique/S* +aoriste/S* +aorte/S* +aorte/S* +aortique/S* +aortite/S* +août/S* +aoûtage/S* +aoûtat/S* +aoûtement/S* +aoûter/a2p+ +aoûteron/S* +aoûtienne/F* +apache/S* +apagogie/S* +apagogique/S* +apaisante/F* +apaisement/S* +apaiser/a4p+ +apanage/S* +apanager/a2p+ +apanagiste/S* +aparté/S* +apartheid/S* +apatam/S* +apatamer/a1p. +apathie/S* +apathique/S* +apathiquement/D'Q' +apatite/S* +apatosaure/S* +apatride/S* +apatridie/S* +apepsie/S* +aperception/S* +apercevable/S* +apercevoir/pK +aperçu/S* +apériodique/S* +apériteur/S* +apéritif/S* +apéritive/F* +apéritrice/F* +apéro/S* +aperture/S* +apesanteur/S* +apétale/S* +apétale/S* +à-peu-près/L'D'Q' +apeurante/F* +apeurer/a2p+ +apex/L'D'Q' +aphakie/S* +aphasie/S* +aphasique/S* +aphélie/S* +aphélie/S* +aphémie/S* +aphérèse/S* +aphidien/S* +aphodius/L'D'Q' +aphone/S* +aphonie/S* +aphorisme/S* +aphoristique/S* +aphotique/S* +aphrodisiaque/S* +aphrodisiaque/S* +aphrodisie/S* +aphrodite/S* +aphte/S* +aphteuse/W* +aphylle/S* +api/D' +à-pic/L'D'Q' +à-pic/S* +apicale/W* +apicole/S* +apicultrice/F* +apiculture/S* +apidé/S* +apidologie/S* +apiéceuse/F* +apifuge/S* +apiol/S* +apion/S* +apiphobie/S* +apiquage/S* +apiquer/a2p+ +apithérapie/S* +apitoiement/S* +apitoyer/a4p+ +apivore/S* +aplanat/S* +aplanétique/S* +aplanétisme/S* +aplanir/f4p+ +aplanissement/S* +aplasie/S* +aplasique/S* +aplat/S* +aplatir/f4p+ +aplatissage/S* +aplatissement/S* +aplatisseur/S* +aplatissoir/S* +aplatissoire/S* +à-plat-ventrisme/S* +aplite/S* +aplomb/S* +aplomber/a4p+ +aplustre/S* +aplysie/S* +apnée/S* +apnéique/S* +apnéiste/S* +apoapse/S* +apoastre/S* +apocalypse/S* +apocalyptique/S* +apocalyptiquement/D'Q' +apochromatique/S* +apocope/S* +apocrine/S* +apocrisiaire/S* +apocryphe/S* +apocryphe/S* +apocynacée/S* +apocynacée/S* +apode/S* +apode/S* +apodictique/S* +apodictiquement/D'Q' +apodose/S* +apoenzyme/S* +apoferritine/S* +apogamie/S* +apogée/S* +apographe/S* +apolaire/S* +apolipoprotéine/S* +apolitique/S* +apolitisme/S* +apollinienne/F* +apollon/S* +apologétique/S* +apologétique/S* +apologie/S* +apologique/S* +apologiste/S* +apologue/S* +apomixie/S* +apomorphe/S* +apomorphie/S* +apomorphine/S* +aponévrose/S* +aponévrotique/S* +apophantique/S* +apophantique/S* +apophatique/S* +apophatisme/S* +apophonie/S* +apophtegme/S* +apophysaire/S* +apophyse/S* +apoplasme/S* +apoplasmique/S* +apoplectique/S* +apoplexie/S* +apoptose/S* +apoptotique/S* +aporétique/S* +aporie/S* +aposiopèse/S* +apostasie/S* +apostasier/a1p. +apostate/F* +aposter/a2p+ +apostériorité/S* +apostille/S* +apostiller/a2p+ +apostolat/S* +apostolicité/S* +apostolique/S* +apostoliquement/D'Q' +apostrophe/S* +apostrophée/F* +apostropher/a4p+ +apothécie/S* +apothème/S* +apothéose/S* +apothéotique/S* +apothicaire/S* +apothicairerie/S* +apôtre/S* +apotropaïque/S* +appairage/S* +appairer/a2p+ +appalachienne/F* +appaméenne/F* +apparaître/wQq+ +apparat/S* +apparatchik/L'D'Q' +apparatchik/S* +apparaux/D'Q' +appareil/S* +appareillable/S* +appareillade/S* +appareillage/S* +appareillement/S* +appareiller/a4p+ +appareilleuse/F* +apparemment/D'Q' +apparence/S* +apparente/F* +apparentement/S* +apparenter/a4p+ +appariement/S* +apparier/a4p+ +apparition/S* +apparitrice/F* +apparoir/pR +appart/S* +appartement/S* +appartenance/S* +appartenir/iB +appas/D'Q' +appassionato/D'Q' +appât/S* +appâter/a2p+ +appauvrir/f4p+ +appauvrissante/F* +appauvrissement/S* +appeau/X* +appel/S* +appelable/S* +appelante/F* +appelée/F* +appeler/d4p+ +appellation/S* +appellative/F* +appendice/S* +appendicectomie/S* +appendicite/S* +appendiculaire/S* +appendiculaire/S* +appendre/tA +appentis/L'D'Q' +appenzell/S* +appertisation/S* +appertiser/a2p+ +appesantir/f4p+ +appesantissement/S* +appétence/S* +appéter/c2p+ +appétissante/F* +appétit/S* +appétitive/F* +applaudimètre/S* +applaudir/f4p+ +applaudissement/S* +applaudisseuse/F* +applet/S* +applette/S* +appli/S* +applicabilité/S* +applicable/S* +applicage/S* +application/S* +applicative/F* +applicatrice/F* +applique/S* +appliquer/a4p+ +appliquette/S* +appoggiature/S* +appogiature/S* +appoint/S* +appointage/S* +appointements/D'Q' +appointer/a4p+ +appointir/f2p+ +apponse/S* +appontage/S* +appontée/F* +appontement/S* +apponter/a1p. +apponteur/S* +apport/S* +apporter/a2p+ +apporteur/S* +apposer/a2p+ +apposition/S* +appréciabilité/S* +appréciable/S* +appréciablement/D'Q' +appréciation/S* +appréciative/F* +appréciatrice/F* +apprécier/a4p+ +appréhender/a2p+ +appréhension/S* +appréhensive/F* +apprenante/F* +apprendre/tF +apprentie/F* +apprentissage/S* +apprêt/S* +apprêtage/S* +apprêter/a4p+ +apprêteuse/F* +apprivoisable/S* +apprivoisement/S* +apprivoiser/a4p+ +apprivoiseuse/F* +approbation/S* +approbative/F* +approbativement/D'Q' +approbativité/S* +approbatrice/F* +approchable/S* +approchante/F* +approche/S* +approcher/a4p+ +approfondir/f4p+ +approfondissement/S* +appropriable/S* +appropriation/S* +appropriatrice/F* +approprier/a4p+ +approuvable/S* +approuver/a4p+ +approvisionnement/S* +approvisionner/a4p+ +approvisionneuse/F* +approximation/S* +approximative/F* +approximativement/D'Q' +approximer/a2p+ +appui/S* +appuie-bras/L'D'Q' +appuie-livres/L'D'Q' +appuie-main/L'D'Q' +appuie-nuque/L'D'Q' +appuie-tête/L'D'Q' +appuyer/a4p+ +apragmatisme/S* +apraxie/S* +apraxique/S* +âpre/S* +âprement +après/L'D'Q'Qj +après-demain/D'Q' +après-dîner/L'D'Q' +après-dîner/S* +après-guerre/S* +après-midi/L'D'Q' +après-rasage/L'D'Q' +après-rasage/L'D'Q' +après-rasage/S* +après-shampoing/S* +après-shampooing/S* +après-ski/L'D'Q' +après-ski/S* +après-soleil/S* +après-vente/L'D'Q' +âpreté/S* +apriorique/S* +apriorisme/S* +aprioriste/S* +apriorité/S* +à-propos/L'D'Q' +aprotique/S* +apside/S* +apte/S* +aptère/S* +aptère/S* +aptérygote/S* +aptéryx/L'D'Q' +aptienne/F* +aptitude/S* +apurement/S* +apurer/a2p+ +apyre/S* +apyrène/S* +apyrétique/S* +apyrexie/S* +apyrogène/S* +aquabike/S* +aquacole/S* +aquacultrice/F* +aquaculture/S* +aquafortiste/S* +aquagym/S* +aquamanile/S* +aquanaute/S* +aquaplanage/S* +aquaplane/S* +aquaplaning/S* +aquaporine/S* +aquarelle/S* +aquarelliste/S* +aquariophile/S* +aquariophilie/S* +aquarium/S* +aquastat/S* +aquathlon/S* +aquatinte/S* +aquatintiste/S* +aquatique/S* +aquavit/S* +aqueduc/S* +aqueuse/W* +aquicole/S* +aquicultrice/F* +aquiculture/S* +aquifère/S* +aquiger/a1p. +aquilin/S* +aquilon/S* +aquitaine/F* +aquoibonisme/S* +aquoiboniste/S* +aquosité/S* +ara/S* +arabe/S* +arabesque/S* +arabette/S* +arabica/S* +arabinose/S* +arabique/S* +arabisante/F* +arabisation/S* +arabiser/a4p+ +arabisme/S* +arabité/S* +arabitol/S* +arable/S* +arabo-andalou/S* +arabo-andalouse/S* +arabo-berbère/S* +arabo-islamique/S* +arabo-kurde/S* +arabo-musulmane/F* +arabo-palestinienne/F* +arabo-persique/S* +arabophobie/S* +arabophone/S* +arabo-sunnite/S* +aracée/S* +aracée/S* +arachide/S* +arachidonique/S* +arachnéenne/F* +arachnide/S* +arachnoïde/S* +arachnoïdienne/F* +arachnologie/S* +arachnophobe/S* +arachnophobie/S* +aragonaise/F* +aragonite/S* +araignée/S* +araine/S* +araire/S* +arak/S* +araldite/S* +araméenne/F* +aramide/S* +aramon/S* +aranais/L'D'Q' +aranéide/S* +aranéide/S* +aranéologie/S* +aranéomorphe/S* +arantèle/S* +arasement/S* +araser/a2p+ +aratoire/S* +araucaria/S* +arawak/S* +arbalète/S* +arbalétrière/F* +arbitrable/S* +arbitrage/S* +arbitragiste/S* +arbitraire/S* +arbitrairement/D'Q' +arbitrale/W* +arbitralement/D'Q' +arbitre/S* +arbitrer/a2p+ +arborer/a2p+ +arborescence/S* +arborescente/F* +arboretum/S* +arboricole/S* +arboricultrice/F* +arboriculture/S* +arborification/S* +arborisation/S* +arborisée/F* +arboriser/a1p. +arboriste/S* +arbouse/S* +arbousier/S* +arbovirose/S* +arbovirus/L'D'Q' +arbre/S* +arbrier/S* +arbrisseau/X* +arbuste/S* +arbustive/F* +arc/S* +arcade/S* +arcane/S* +arcanson/S* +arcasse/S* +arcature/S* +arc-boutant/L'D'Q' +arc-boutement +arc-bouter/a4p+ +arccos +arccosh +arccotan +arccotanh +arc-doubleau/L'D'Q' +arceau/X* +arc-en-ciel/L'D'Q' +archaïque/S* +archaïquement/D'Q' +archaïsante/F* +archaïser/a1p. +archaïsme/S* +archal/D' +archange/S* +archangélique/S* +arche/S* +archée/S* +archéenne/F* +archégone/S* +archelle/S* +archentéron/S* +archéobactérie/S* +archéologie/S* +archéologique/S* +archéologiquement/D'Q' +archéologue/S* +archéomagnétisme/S* +archéomètre/S* +archéométrie/S* +archéoptéryx/L'D'Q' +archéozoïque/S* +archère/F* +archerie/S* +archet/S* +archèterie/S* +archetière/F* +archétypale/W* +archétype/S* +archétypique/S* +archevêché/S* +archevêque/S* +archi/L'D'Q' +archi/S* +archiatre/S* +archibasilique/S* +archichancelier/S* +archiconfrérie/S* +archiconnue/F* +archicortex +archicube/S* +archidiaconat/S* +archidiaconé/S* +archidiacre/S* +archidiocésaine/F* +archidiocèse/S* +archiduc/S* +archiduché/S* +archiduchesse/S* +archiépiscopale/W* +archiépiscopat/S* +archière/S* +archifacile/S* +archi-fausse/W* +archimandritat/S* +archimandrite/S* +archimédienne/F* +archimie/S* +archimillionnaire/S* +archipel/S* +archiphonème/S* +archipresbytérale/W* +archiprêtré/S* +archiprêtresse/F* +archiptère/S* +architecte/S* +architectonie/S* +architectonique/S* +architectonique/S* +architecturale/W* +architecturalement/D'Q' +architecture/S* +architecturer/a2p+ +architrave/S* +architravée/F* +archivage/S* +archive/S* +archiver/a2p+ +archiviste/S* +archivistique/S* +archivolte/S* +archontat/S* +archonte/S* +archosaurien/S* +archure/S* +arçon/S* +arçonner/a2p+ +arcs-boutants/D'Q' +arcs-boutements +arcs-doubleaux/D'Q' +arcs-en-ciel/D'Q' +arcsin +arcsinh +arctan +arctanh +arctique/S* +arcure/S* +ardéchoise/F* +ardélion/S* +ardemment/D'Q' +ardennaise/F* +ardente/F* +arder/a1p. +ardeur/S* +ardillon/S* +ardoise/S* +ardoiser/a2p+ +ardoiseuse/W* +ardoisière/F* +ardre +ardue/F* +ardûment/D'Q' +are/S* +aréage/S* +arec/S* +arécacée/S* +aréflexie/S* +aréique/S* +aréisme/S* +areligieuse/W* +aréna/S* +arénacée/F* +arène/S* +aréneuse/W* +arénicole/S* +arénicole/S* +arénisation/S* +arénite/S* +aréographie/S* +aréolaire/S* +aréole/S* +aréologie/S* +aréomètre/S* +aréométrie/S* +aréométrique/S* +aréopage/S* +aréostyle/S* +aréquier/S* +arête/S* +arêtière/F* +argan/S* +arganier/S* +argas/L'D'Q' +argent/S* +argentage/S* +argentan/S* +argentation/S* +argenter/a4p+ +argenterie/S* +argenteuse/F* +argentière/F* +argentifère/S* +argentifique/S* +argentine/F* +argentique/S* +argentite/S* +argenture/S* +argh +argilacée/F* +argile/S* +argileuse/W* +argilite/S* +argilo-calcaire/S* +argilo-limoneuse/F* +argilo-siliceuse/W* +arginine/S* +argiope/S* +argol/S* +argon/S* +argonaute/S* +argot/S* +argotique/S* +argotiser/a1p. +argotisme/S* +argotiste/S* +argougner/a2p+ +argoulet/S* +argouse/S* +argousier/S* +argousin/S* +arguer/a4p+ +argument/S* +argumentaire/S* +argumentation/S* +argumentative/F* +argumentatrice/F* +argumentée/F* +argumenter/a1p. +argus/L'D'Q' +argutie/S* +argyraspide/S* +argyrisme/S* +argyronète/S* +argyrose/S* +aria/S* +arianisme/S* +ariary/S* +aride/S* +aridification/S* +aridité/S* +ariégeoise/F* +arienne/F* +ariette/S* +arille/S* +arillée/F* +arion/S* +arioso/I* +ariser/a2p+ +aristo/S* +aristocrate/S* +aristocratie/S* +aristocratique/S* +aristocratiquement/D'Q' +aristocratisation/S* +aristocratisme/S* +aristoloche/S* +aristophanesque/S* +aristotélicienne/F* +aristotélique/S* +aristotélisme/S* +arité/S* +arithméticienne/F* +arithmétique/S* +arithmétique/S* +arithmétiquement/D'Q' +arithmétisation/S* +arithmétiser/a2p+ +arithmographe/S* +arithmologie/S* +arithmomancie/S* +arithmomanie/S* +arithmomètre/S* +arkose/S* +arlequin/S* +arlequinade/S* +arlésienne/F* +armada/S* +armagnac/S* +armailli/S* +armatrice/F* +armature/S* +arme/S* +armée/S* +armeline/S* +armement/S* +arménienne/F* +armer/a4p+ +armet/S* +armeuse/S* +armillaire/S* +armillaire/S* +armilles/D'Q' +arminianisme/S* +arminienne/F* +armistice/S* +armoire/S* +armoirie/S* +armoise/S* +armon/S* +armoriale/W* +armoricaine/F* +armorier/a2p+ +armoriste/S* +armure/S* +armurée/F* +armurerie/S* +armurière/F* +arnaque/S* +arnaquer/a2p+ +arnaqueuse/F* +arnica/S* +arobase/F* +arolle/S* +aromatase/S* +aromate/S* +aromathérapie/S* +aromaticienne/F* +aromaticité/S* +aromatique/S* +aromatique/S* +aromatisant/S* +aromatisante/F* +aromatisation/S* +aromatiser/a2p+ +arôme/S* +aronde/S* +arpège/S* +arpéger/c2p+ +arpent/S* +arpentage/S* +arpenter/a2p+ +arpenteuse/F* +arpète/S* +arpette/S* +arpigner/a2p+ +arpion/S* +arquebusade/S* +arquebuse/S* +arquebuser/a2p+ +arquebuserie/S* +arquebusier/S* +arquepincer/a2p+ +arquer/a4p+ +arrachage/S* +arrache-clou/S* +arrachement/S* +arrache-pied/D' +arracher/a4p+ +arrache-racine/L'D'Q' +arracheuse/F* +arrachis/L'D'Q' +arrachoir/S* +arraisonnement/S* +arraisonner/a2p+ +arrangeable/S* +arrangeante/F* +arrangement/S* +arranger/a4p+ +arrangeuse/F* +arrenter/a2p+ +arrérager/a3p+ +arrérages/D' +arrestation/S* +arrêt/S* +arrêtable/S* +arrêté/S* +arrête-bœuf/L'D'Q' +arrêter/a4p+ +arrêtiste/S* +arrêtoir/S* +arrhes/D'Q' +arriération/S* +arrière/S* +arrière-ban/S* +arrière-bec/S* +arrière-bouche/S* +arrière-boutique/S* +arrière-cerveau/X* +arrière-chœur/S* +arrière-corps/L'D'Q' +arrière-cour/S* +arrière-cuisine/S* +arriérée/F* +arrière-faix/L'D'Q' +arrière-fleur/S* +arrière-fond/S* +arrière-garde/S* +arrière-gorge/S* +arrière-goût/S* +arrière-grand-mère/L'D'Q' +arrière-grand-oncle/L'D'Q' +arrière-grand-père/L'D'Q' +arrière-grands-mères/D'Q' +arrière-grands-oncles/D'Q' +arrière-grands-parents/D'Q' +arrière-grands-pères/D'Q' +arrière-grands-tantes/D'Q' +arrière-grand-tante/L'D'Q' +arrière-main/S* +arrière-pays/L'D'Q' +arrière-pensée/S* +arrière-petite-fille/L'D'Q' +arrière-petite-nièce/L'D'Q' +arrière-petites-filles/D'Q' +arrière-petites-nièces/D'Q' +arrière-petit-fils/L'D'Q' +arrière-petit-neveu/L'D'Q' +arrière-petits-enfants/D'Q' +arrière-petits-fils/D'Q' +arrière-petits-neveux/D'Q' +arrière-plan/S* +arriérer/c2p+ +arrière-saison/S* +arrière-train/S* +arrière-vassal/X* +arrière-voussure/S* +arrimage/S* +arrimer/a2p+ +arrimeuse/F* +arriser/a2p+ +arrivage/S* +arrivante/F* +arrivée/S* +arriver/a2p+ +arrivisme/S* +arriviste/S* +arrobase/F* +arrobe/S* +arroche/S* +arrogamment/D'Q' +arrogance/S* +arrogante/F* +arroger/a3p+ +arroi/S* +arrondi/S* +arrondir/f4p+ +arrondissage/S* +arrondissement/S* +arrondisseuse/F* +arrosable/S* +arrosage/S* +arrosement/S* +arroser/a4p+ +arroseuse/F* +arrosoir/S* +arroyo/S* +ars/L'D'Q' +arsenal/X* +arséniate/S* +arsenic/S* +arsenicale/W* +arséniée/F* +arsénieuse/W* +arsénique/S* +arsenite/S* +arsénite/S* +arséniure/S* +arsénopyrite/S* +arsine/F* +arsouille/S* +arsouiller/a3p+ +art/S* +artefact/S* +artel/S* +artémia/S* +artémise/S* +artère/S* +artériectomie/S* +artérielle/F* +artériographie/S* +artériolaire/S* +artériole/S* +artériologie/S* +artériopathie/S* +artériopathique/S* +artérioscléreuse/W* +artériosclérose/S* +artériotomie/S* +artérite/S* +artéritique/S* +artésienne/F* +arthralgie/S* +arthrite/S* +arthritique/S* +arthritisme/S* +arthrodèse/S* +arthrodie/S* +arthrographie/S* +arthrologie/S* +arthropathie/S* +arthroplastie/S* +arthropode/S* +arthroscopie/S* +arthroscopique/S* +arthrose/S* +arthrosique/S* +arthurienne/F* +artichaut/S* +artichautière/S* +article/S* +articlier/S* +articulaire/S* +articulateur/S* +articulation/S* +articulatoire/S* +articuler/a4p+ +articulet/S* +artifice/S* +artificialisation/S* +artificialiser/a4p+ +artificialité/S* +artificielle/F* +artificiellement/D'Q' +artificière/F* +artificieuse/W* +artificieusement/D'Q' +artiller/a1p. +artillerie/S* +artilleur/S* +artimon/S* +artinienne/F* +artiodactyle/S* +artiozoaire/S* +artisanale/W* +artisanalement/D'Q' +artisanat/S* +artisane/F* +artisanerie/S* +artison/S* +artiste/S* +artistement/D'Q' +artistique/S* +artistiquement/D'Q' +artocarpe/S* +arum/S* +arvale/S* +arvale/S* +arvine/S* +aryanisation/S* +aryballe/S* +aryenne/F* +aryle/S* +aryténoïde/S* +aryténoïde/S* +arythmie/S* +arythmique/S* +as/L'D'Q' +asbeste/S* +asbestose/S* +ascalin/S* +ascaride/S* +ascaridiase/S* +ascaridiose/S* +ascaris/L'D'Q' +ascendance/S* +ascendante/F* +ascendeur/S* +ascenseur/S* +ascension/S* +ascensionnelle/F* +ascensionner/a2p+ +ascensionniste/S* +ascensoriste/S* +ascèse/S* +ascète/S* +ascétique/S* +ascétiquement/L'D'Q' +ascétisme/S* +ascidie/S* +ascite/S* +ascitique/S* +asclépiadacée/S* +asclépiadacée/S* +asclépiade/S* +ascochyta/S* +ascomycète/S* +ascorbique/S* +ascospore/S* +aséité/S* +asémanticité/S* +asémantique/S* +asepsie/S* +aseptique/S* +aseptiquement/D'Q' +aseptisation/S* +aseptiser/a2p+ +asexualité/S* +asexuée/F* +asexuelle/F* +asexuellement/L'D'Q' +ashkenaze/L'D'Q' +ashkénaze/S* +ashkenazi/D'Q' +ashram/S* +asialie/S* +asiate/S* +asiatique/S* +asilaire/S* +asile/S* +asiminier/S* +asinienne/F* +asociabilité/S* +asociale/W* +asocialité/S* +asomatognosie/S* +asparagine/S* +asparagus/L'D'Q' +aspartame/S* +aspartate/S* +aspartique/S* +aspe/S* +aspect/S* +aspecter/a2p+ +asperge/S* +asperger/a4p+ +aspergès/L'D'Q' +aspergille/S* +aspergillome/S* +aspergillose/S* +aspérité/S* +aspermatisme/S* +asperme/S* +aspermie/S* +asperseur/S* +aspersion/S* +aspersoir/S* +aspérule/S* +asphaltage/S* +asphalte/S* +asphaltène/S* +asphalter/a2p+ +asphalteuse/F* +asphaltier/S* +asphaltique/S* +asphaltite/S* +asphérique/S* +asphodèle/S* +asphyxiante/F* +asphyxie/S* +asphyxier/a4p+ +asphyxique/S* +aspic/S* +aspidistra/S* +aspirante/F* +aspirateur/S* +aspiration/S* +aspiratoire/S* +aspiratrice/F* +aspirée/S* +aspirer/a4p+ +aspirine/S* +asple/S* +asque/S* +assa-fœtida/S* +assagir/f4p+ +assagissement/S* +assaillante/F* +assaillie/F* +assaillir/iT +assainir/f2p+ +assainissement/S* +assainisseuse/F* +assaisonnement/S* +assaisonner/a2p+ +assamaise/F* +assarmenter/a2p+ +assassinat/S* +assassine/F* +assassiner/a2p+ +assaut/S* +assavoir +asse/S* +asseau/X* +asséchement/S* +assèchement/S* +assécher/c4p+ +assemblage/S* +assemblée/S* +assemblement/S* +assembler/a4p+ +assembleuse/F* +assener/b2p+ +asséner/c2p+ +assentiment/S* +asseoir/pS +assermentation/S* +assermenter/a2p+ +asserter/a2p+ +assertion/S* +assertive/F* +assertivité/S* +assertorique/S* +asservir/f4p+ +asservissante/F* +asservissement/S* +asservisseur/S* +assesseure/F* +assette/S* +assez/L'D'Q'Q*Qj +assibilation/S* +assibiler/a4p+ +assidue/F* +assiduité/S* +assidûment/D'Q' +assiégeante/F* +assiégée/F* +assiéger/c2p+ +assiette/S* +assiettée/S* +assignable/S* +assignat/S* +assignation/S* +assigner/a2p+ +assimilabilité/S* +assimilable/S* +assimilante/F* +assimilat/S* +assimilation/S* +assimilationniste/S* +assimilative/F* +assimilatrice/F* +assimiler/a4p+ +assise/S* +assistanat/S* +assistance/S* +assistante/F* +assistée/F* +assister/a2p+ +associable/S* +association/S* +associationnisme/S* +associationniste/S* +associative/F* +associativité/S* +associatrice/F* +associée/F* +associer/a4p+ +assoiffée/F* +assoiffer/a2p+ +assolement/S* +assoler/a2p+ +assombrir/f4p+ +assombrissante/F* +assombrissement/S* +assommage/S* +assommante/F* +assommée/F* +assommer/a4p+ +assommeur/S* +assommoir/S* +assomption/S* +assomptionniste/S* +assomptive/F* +assonance/S* +assonancée/F* +assonante/F* +assoner/a1p. +assortiment/S* +assortir/f4p+ +assortisseuse/F* +assoupir/f4p+ +assoupissante/F* +assoupissement/S* +assouplir/f4p+ +assouplissant/S* +assouplissement/S* +assouplisseur/S* +assourdir/f4p+ +assourdissante/F* +assourdissement/S* +assouvir/f4p+ +assouvissement/S* +assuétude/S* +assujettir/f4p+ +assujettissante/F* +assujettissement/S* +assumer/a4p+ +assurabilité/S* +assurable/S* +assurage/S* +assurance/S* +assurance-accidents/L'D' +assurance-chômage/L'D' +assurance-crédit/L'D'Q' +assurance-invalidité/L'D' +assurance-maladie/L'D'Q' +assurances-crédits/D'Q' +assurances-maladie/D'Q' +assurances-vie/D'Q' +assurance-vie/L'D'Q' +assurance-vieillesse/L'D' +assurantielle/F* +assurée/F* +assurément/D'Q' +assurer/a4p+ +assureuse/F* +assyrienne/F* +assyriologie/S* +assyriologue/S* +assyro-babylonienne/F* +astable/S* +astable/S* +astacicultrice/F* +astaciculture/S* +astasie/S* +astate/S* +astatique/S* +aster/S* +astéréognosie/S* +astéride/S* +astérie/S* +astérisme/S* +astérisque/S* +astérixis/L'D'Q' +astéroïdale/W* +astéroïde/S* +astérosismologie/S* +asthénie/S* +asthénique/S* +asthénopie/S* +asthénospermie/S* +asthénosphère/S* +asthmatiforme/S* +asthmatique/S* +asthme/S* +asti/L'D'Q' +asti/S* +asticot/S* +asticotage/S* +asticoter/a2p+ +astigmate/S* +astigmatisme/S* +astiquage/S* +astiquer/a2p+ +astragale/S* +astrakan/S* +astrale/W* +astralement/L'D'Q' +astre/S* +astreignante/F* +astreindre/wB +astreinte/S* +astringence/S* +astringent/S* +astringente/F* +astrobiologie/S* +astroblème/S* +astrochimie/S* +astrocytaire/S* +astrocyte/S* +astrocytome/S* +astrographe/S* +astrographie/S* +astrolabe/S* +astrolâtrie/S* +astrologie/S* +astrologique/S* +astrologiquement/D'Q' +astrologue/S* +astrométrie/S* +astrométrique/S* +astromobile/S* +astronaute/S* +astronauticienne/F* +astronautique/S* +astronautique/S* +astronef/S* +astronome/S* +astronomie/S* +astronomique/S* +astronomiquement/D'Q' +astroparticule/S* +astrophotographie/S* +astrophysicienne/F* +astrophysique/S* +astroport/S* +astrosismologie/S* +astuce/S* +astucieuse/W* +astucieusement/D'Q' +asturienne/F* +asymbolie/S* +asymétrie/S* +asymétrique/S* +asymétriquement/D'Q' +asymptomatique/S* +asymptote/S* +asymptote/S* +asymptotique/S* +asymptotiquement/D'Q' +asynchrone/S* +asynchronisme/S* +asyndète/S* +asynergie/S* +asystolie/S* +atacamite/S* +atactique/S* +ataraxie/S* +ataraxique/S* +atavique/S* +ataviquement/D'Q' +atavisme/S* +ataxie/S* +ataxique/S* +atchoum +atèle/S* +atélectasie/S* +atelier/S* +atellane/S* +atemi/S* +atemporalité/S* +atemporelle/F* +atermoiement/S* +atermoyer/a1p. +athanor/S* +athée/S* +athéisme/S* +athéiste/S* +athématique/S* +athénée/S* +athénienne/F* +athéologie/S* +athéophobe/S* +athéophobie/S* +athermane/S* +athermique/S* +athéromateuse/W* +athérome/S* +athérosclérose/S* +athétose/S* +athlète/S* +athlétique/S* +athlétiquement/L'D'Q' +athlétisme/S* +athrepsie/S* +athymie/S* +atlante/S* +atlantique/S* +atlantisme/S* +atlantiste/S* +atlas/L'D'Q' +atm/||-- +atmosphère/S* +atmosphérique/S* +atoca/S* +atocatière/S* +atoll/S* +atome/S* +atome-gramme/L'D'Q' +atomes-grammes/D'Q' +atomicienne/F* +atomicité/S* +atomique/S* +atomiquement/D'Q' +atomisation/S* +atomiser/a4p+ +atomiseur/S* +atomisme/S* +atomiste/S* +atomistique/S* +atomistique/S* +atonale/W* +atonalité/S* +atonals +atone/S* +atonie/S* +atonique/S* +atopie/S* +atopique/S* +atour/S* +atout/S* +atoxique/S* +atrabilaire/S* +atrabile/S* +atractyligénine/S* +âtre/S* +atrésie/S* +atrière/F* +atrioventriculaire/S* +atrio-ventriculaire/S* +atrium/S* +atroce/S* +atrocement/D'Q' +atrocité/S* +atrophiante/F* +atrophie/S* +atrophier/a4p+ +atrophique/S* +atropine/S* +atropinique/S* +atropisme/S* +attablée/F* +attablement/S* +attabler/a4p+ +attachante/F* +attache/S* +attaché-case/L'D'Q' +attachée/F* +attachement/S* +attacher/a4p+ +attache-remorque/S* +attachés-cases/D'Q' +attache-ski/S* +attacheuse/F* +attagène/S* +attaquable/S* +attaquante/F* +attaque/S* +attaquer/a4p+ +attardée/F* +attardement/S* +attarder/a3p+ +atteignable/S* +atteindre/wB +atteinte/S* +attelage/S* +atteler/d4p+ +attelle/S* +atteloire/S* +attenance/S* +attenante/F* +attendre/tA +attendrir/f4p+ +attendrissante/F* +attendrissement/S* +attendrisseur/S* +attendu +attendu/S* +attentat/S* +attentatoire/S* +attente/S* +attenter/a5p. +attention/S* +attentionnée/F* +attentionnelle/F* +attentisme/S* +attentiste/S* +attentive/F* +attentivement/D'Q' +atténuante/F* +atténuateur/S* +atténuation/S* +atténuer/a4p+ +atterrage/S* +atterrante/F* +atterrer/a2p+ +atterrir/f1p+ +atterrissage/S* +atterrissement/S* +atterrisseur/S* +attestation/S* +attester/a2p+ +atticisme/S* +attiédir/f4p+ +attiédissement/S* +attiéké/S* +attifement/S* +attifer/a4p+ +attifet/S* +attiger/a2p+ +attique/S* +attirable/S* +attirail/S* +attirance/S* +attirante/F* +attirer/a4p+ +attisement/S* +attiser/a2p+ +attisoir/S* +attitrer/a2p+ +attitude/S* +attitudinale/W* +attorney/S* +attouchement/S* +attoucher/a4p+ +attracteur/S* +attraction/S* +attractive/F* +attractivité/S* +attractrice/F* +attraire/L'D'Q' +attrait/S* +attrapable/S* +attrapade/S* +attrapage/S* +attrape-couillon/S* +attrape-gogo/S* +attrape-mouche/S* +attrape-mouches/L'D'Q' +attrape-nigaud/L'D'Q' +attrape-nigaud/S* +attraper/a4p+ +attrape-tout/L'D'Q' +attrapeuse/F* +attrayante/F* +attribuable/S* +attribuer/a4p+ +attribut/S* +attributaire/S* +attribution/S* +attributive/F* +attriquer/a2p+ +attristante/F* +attristement/S* +attrister/a4p+ +attrition/S* +attroupement/S* +attrouper/a4p+ +atypie/S* +atypique/S* +au/L'D'Q'QjQ* +aubade/S* +aubage/S* +aubaine/F* +aube/S* +aubépine/S* +aubère/S* +auberge/S* +aubergine/L'D'Q' +aubergine/S* +aubergiste/S* +auberon/S* +aubette/S* +aubier/S* +aubin/S* +aubiner/a1p. +auboise/F* +auburn/L'D'Q' +aucuba/S* +aucun/Q' +aucune/F* +aucune/Q' +aucunement/D'Q' +audace/S* +audacieuse/W* +audacieusement/D'Q' +au-dedans/Q' +au-dehors/Q' +au-delà/L'D'Q' +au-delà/Q' +au-dessous/Q' +au-dessus/Q' +au-devant/Q' +audibilité/S* +audible/S* +audience/S* +audiencement/S* +audiencer/a0p+ +audiencière/F* +audimat/S* +audimètre/S* +audimétrie/S* +audimétrique/S* +audimutité/S* +audi-mutité/S* +audio/L'D'Q' +audio/S* +audiocassette/S* +audio-cassette/S* +audioconférence/S* +audiodescription/S* +audiodisque/S* +audiofréquence/S* +audiogramme/S* +audioguide/S* +audioguidée/F* +audiolivre/S* +audiologie/S* +audiomètre/S* +audiométrie/S* +audionumérique/S* +audio-orale/W* +audiophile/S* +audiophone/S* +audioprothèse/S* +audioprothésiste/S* +audiotex/L'D'Q' +audiotypiste/S* +audiovidéothèque/S* +audiovision/S* +audiovisuel/S* +audio-visuel/S* +audiovisuelle/F* +audio-visuelle/F* +audit/Q' +audit/S* +auditer/a2p+ +audition/S* +auditionner/a2p+ +auditive/F* +auditivement/D'Q' +auditoire/S* +auditorat/S* +auditorium/S* +auditrice/F* +audoise/F* +auge/S* +augée/S* +auget/S* +augette/S* +augite/S* +augment/S* +augmentable/S* +augmentation/S* +augmentative/F* +augmenter/a4p+ +augurale/W* +augure/S* +augurer/a2p+ +augustale/W* +auguste/S* +auguste/S* +augustement/D'Q' +augustine/F* +augustinienne/F* +augustinisme/S* +aujourd'hui/D'Q'Qj +aulacode/S* +aulique/S* +aulnaie/S* +aulne/S* +aulofée/S* +aulx/D'Q' +aumône/S* +aumônerie/S* +aumônière/F* +aumusse/S* +aunage/S* +aune/S* +auner/a2p+ +auparavant/D'Q' +auprès/D'Q'Qj +auquel +aura/S* +aurantiacée/S* +aurélie/S* +auréole/S* +auréoler/a4p+ +auréomycine/S* +auriculaire/S* +auriculaire/S* +auricule/S* +auriculée/F* +auriculo-temporale/W* +auriculothérapie/S* +auriculo-ventriculaire/S* +aurifère/S* +aurification/S* +aurifier/a2p+ +aurifique/S* +aurige/S* +aurignacienne/F* +aurique/S* +auroch/S* +aurochs/L'D'Q' +aurone/S* +aurorale/W* +aurore/L'D'Q' +aurore/S* +aurure/S* +auscultation/S* +auscultatoire/S* +auscultatrice/F* +ausculter/a4p+ +auspice/S* +auspicieuse/W* +aussi/D'Q' +aussière/S* +aussitôt/D'Q' +austénite/S* +austénitique/S* +austère/S* +austèrement/D'Q' +austéritaire/S* +austérité/S* +australe/W* +australienne/F* +australo-américaine/F* +australo-française/F* +australoïde/S* +australo-néo-zélandaise/F* +australopithèque/S* +australs/D'Q' +austro-allemande/F* +austro-américaine/F* +austro-asiatique/S* +austro-française/F* +austro-hongroise/F* +austronésien/S* +austronésienne/F* +austro-russe/S* +autan/S* +autant/D'Q' +autarcie/S* +autarcique/S* +autécologie/S* +autel/S* +auteur-compositeur/L'D'Q' +auteure/F* +auteurs-compositeurs +authenticité/S* +authentification/S* +authentifier/a4p+ +authentique/S* +authentiquement/D'Q' +authentiquer/a2p+ +autisme/S* +autiste/S* +autistique/S* +auto/S* +autoaccusation/S* +auto-accusation/S* +autoadaptative/F* +auto-adaptative/F* +autoadhésive/F* +auto-adhésive/F* +autoadjointe/F* +auto-adjointe/F* +autoalarme/S* +auto-alarme/S* +autoallumage/S* +auto-allumage/S* +autoamorçage/S* +auto-amorçage/S* +autoanalyse/S* +auto-analyse/S* +auto-apitoiement/S* +autoassemblage/S* +auto-assemblage/S* +autoberge/S* +autobiographe/S* +autobiographie/S* +autobiographique/S* +autobloquante/F* +autobloqueur/S* +autobronzant/S* +autobronzante/F* +autobus/L'D'Q' +autocabrage/S* +autocalibration/S* +auto-calibration/S* +autocanon/S* +autocar/S* +autocaravane/S* +autocaravanière/F* +autocariste/S* +autocassable/S* +autocastration/S* +autocatalyse/S* +autocatalytique/S* +autocélébration/S* +autocensure/S* +autocensurer/a3p+ +autocentrée/F* +autocéphale/S* +autochenille/S* +autochrome/S* +autochrome/S* +autochromie/S* +autochtone/S* +autocinétique/S* +autocinétisme/S* +autoclavable/S* +autoclave/S* +autoclave/S* +autoclaviste/S* +autocollante/F* +autocommutateur/S* +autocompenser/a4p+ +auto-compenser/a4p+ +autocomplétion/S* +autoconcurrence/S* +autoconditionnement/S* +auto-conditionnement/S* +autoconduction/S* +autoconservation/S* +autoconsommation/S* +autoconstruction/S* +autocontrôle/S* +autocopiant/S* +autocopie/S* +autocorrection/S* +autocrate/S* +autocratie/S* +autocratique/S* +autocratiquement/D'Q' +autocratisme/S* +autocritique/S* +autocritique/S* +autocuiseur/S* +autodafé/S* +autodécharge/S* +autodéfense/S* +autodépréciation/S* +autodérision/S* +autodestruction/S* +autodestructrice/F* +autodétermination/S* +autodéterminer/a3p+ +autodétruire/yO +autodictée/S* +autodidacte/S* +autodidactique/S* +autodidactisme/S* +autodidaxie/S* +autodirecteur/S* +autodiscipline/S* +autodrome/S* +auto-école/S* +autoécologie/S* +auto-écologie/S* +autoédition/S* +auto-édition/S* +autoentrepreneuriat/S* +auto-entrepreneuriat/S* +autoentrepreneuse/F* +auto-entrepreneuse/F* +autoentreprise/S* +auto-entreprise/S* +autoéquilibrante/F* +auto-équilibrante/F* +autoérotique/S* +auto-érotique/S* +autoérotisme/S* +auto-érotisme/S* +autoethnonyme/S* +auto-ethnonyme/S* +autoévaluante/F* +auto-évaluante/F* +autoévaluation/S* +auto-évaluation/S* +autoexcitatrice/F* +auto-excitatrice/F* +autoextractible/S* +auto-extractible/S* +autofécondation/S* +autoféconder/a3p+ +autofertile/S* +autofiction/S* +autofinancement/S* +autofinancer/a4p+ +autoflagellation/S* +autofocus/L'D'Q' +autofocus/L'D'Q' +autoformation/S* +autofourniture/S* +autogame/S* +autogamie/S* +autogène/S* +autogérée/F* +autogestion/S* +autogestionnaire/S* +autogire/S* +autogoal/S* +autogouvernement/S* +autogouverner/a3p+ +autographe/S* +autographie/S* +autographier/a2p+ +autographique/S* +autogreffe/S* +autoguérison/S* +autoguidage/S* +autoguider/a3p+ +auto-immune/F* +auto-immunisation/S* +auto-immunitaire/S* +auto-immunité/S* +auto-imposition/S* +auto-inductance/S* +auto-induction/S* +auto-injecteur/S* +auto-inscription/S* +auto-intoxication/S* +autoïque/S* +autojustification/S* +autolimitation/S* +autolissante/F* +autologue/S* +autolysat/S* +autolyse/S* +automate/S* +automaticienne/F* +automaticité/S* +automation/S* +automatique/S* +automatiquement/D'Q' +automatisable/S* +automatisation/S* +automatiser/a2p+ +automatiseur/S* +automatisme/S* +automédication/S* +auto-médication/S* +automédon/S* +automéduse/S* +automitrailleuse/S* +automnale/W* +automne/S* +automobile/S* +automobile/S* +automobilisable/S* +automobilisme/S* +automobiliste/S* +automorphe/S* +automorphisme/S* +automotrice/F* +automutilation/S* +autoneige/S* +autonettoyante/F* +autonome/S* +autonomie/S* +autonomique/S* +autonomisation/S* +autonomiser/a4p+ +autonomisme/S* +autonomiste/S* +autonyme/S* +autonyme/S* +autonymie/S* +autonymique/S* +auto-organisation/S* +autopalpation/S* +autopartage/S* +auto-partage/S* +auto-patrouille/L'D'Q' +autophagie/S* +autophagique/S* +autopilote/S* +autopilotée/F* +autoplastie/S* +autopollinisation/S* +autopompe/S* +autoportante/F* +autoporteuse/F* +autoportrait/S* +autoproclamer/a3p+ +autoproduction/S* +autopromotion/S* +autopropulsée/F* +autopropulseur/S* +autopropulsion/S* +autoprotection/S* +autoprotolyse/S* +autopsie/S* +autopsiée/F* +autopsier/a2p+ +autopsique/S* +autopublication/S* +autopunition/S* +autopunitive/F* +autoradio/S* +autoradiographie/S* +autorail/S* +autoréalisatrice/F* +auto-réalisatrice/F* +autoréférence/S* +auto-référence/S* +autoréférentielle/F* +auto-référentielle/F* +autoréglage/S* +autorégulation/S* +autorégulatrice/F* +autoreproduction/S* +autoreproductrice/F* +autorisation/S* +autorisatrice/F* +autoriser/a4p+ +autoritaire/S* +autoritairement/D'Q' +autoritarisme/S* +autoritariste/S* +autoritative/F* +autorité/S* +autoroute/S* +autoroutière/F* +autosatisfaction/S* +autoscopie/S* +autos-couchettes/L'D'Q' +autos-couchettes/L'D'Q' +autosimilaire/S* +autosomale/W* +autosome/S* +autosomique/S* +autos-patrouilles/D'Q' +autos-tamponneuses/D'Q' +autostimulation/S* +auto-stop/S* +auto-stoppeuse/F* +autostrade/S* +autosubsistance/S* +autosuffisance/S* +autosuffisante/F* +autosuggestion/S* +autosuggestionner/a3p+ +autosuppression/S* +autosurveillance/S* +auto-tamponneuse/L'D'Q' +autotélie/S* +autotélique/S* +autotélisme/S* +autotest/S* +autotomie/S* +autotomiser/a3p+ +autotour/S* +autotractée/F* +autotransformateur/S* +autotransfusion/S* +autotrophe/S* +autotrophie/S* +autour/D'Q' +autour/S* +autovaccin/S* +auto-vaccin/S* +autovaccination/S* +autre +autre/S* +autrefois/D'Q' +autrement/D'Q' +autrice/S* +autrichienne/F* +autruche/S* +autruchon/S* +autrui/L'D'Q' +autunite/S* +auvent/S* +auvergnate/F* +aux/Q'QjQ* +auxdites/Q' +auxdits/Q' +auxiliaire/S* +auxiliairement/D'Q' +auxiliariat/S* +auxiliatrice/F* +auxine/S* +auxotrophe/S* +auxquelles/D' +auxquels/D' +av +avachir/f4p+ +avachissement/S* +aval/S* +avalage/S* +avalanche/S* +avalancheuse/W* +avalante/F* +avalement/S* +avaler/a2p+ +avale-tout/L'D'Q' +avaleuse/F* +avaliser/a2p+ +avaliseuse/F* +avaliste/S* +à-valoir/L'D'Q' +avaloir/S* +avaloire/S* +avance/S* +avancée/S* +avancement/S* +avancer/a4p+ +avanie/S* +avant/D'Q' +avant/S* +avantage/S* +avantagée/F* +avantager/a2p+ +avantageuse/W* +avantageusement/D'Q' +avant-bec/S* +avant-bouche/S* +avant-bras/L'D'Q' +avant-cale/S* +avant-centre/L'D'Q' +avant-chœur/S* +avant-clou/S* +avant-contrat/S* +avant-corps/L'D'Q' +avant-cour/S* +avant-coureur/S* +avant-courrière/F* +avant-creuset/S* +avant-dernière/F* +avant-garde/S* +avant-gardisme/S* +avant-gardiste/S* +avant-goût/S* +avant-guerre/S* +avant-hier/D'Q' +avant-main/S* +avant-midi/L'D'Q' +avant-mont/S* +avant-pays/L'D'Q' +avant-plan/S* +avant-port/S* +avant-poste/S* +avant-première/S* +avant-projet/S* +avant-propos/L'D'Q' +avant-scène/S* +avants-centres/D'Q' +avant-soirée/S* +avant-texte/S* +avant-toit/S* +avant-train/S* +avant-trou/S* +avant-veille/S* +avant-vente/S* +avare/F* +avare/S* +avarement/D'Q' +avarice/S* +avaricieuse/W* +avaricieusement/L'D'Q' +avarie/S* +avarier/a4p+ +avatar/S* +avé/S* +avec/D'Q' +aveindre/wB +aveline/S* +avelinier/S* +aven/S* +avenant/S* +avenante/F* +avènement/S* +avenir +avenir/S* +avent/S* +aventure/S* +aventurer/a4p+ +aventureuse/W* +aventureusement/D'Q' +aventurière/F* +aventurine/S* +aventurisme/S* +aventuriste/S* +avenue/F* +avenue/S* +averdonaise/F* +avérer/c4p+ +averroïsme/S* +avers/L'D'Q' +averse/S* +aversion/S* +aversive/F* +avertir/f2p+ +avertissement/S* +avertisseur/S* +avertisseuse/F* +avestique/S* +avestique/S* +aveu/X* +aveuglante/F* +aveugle/S* +aveuglément/D'Q' +aveuglement/S* +aveugler/a4p+ +aveuglette/S* +aveulir/f4p+ +aveulissement/S* +aveyronnaise/F* +aviaire/S* +aviation/S* +aviatrice/F* +avicole/S* +aviculaire/S* +avicultrice/F* +aviculture/S* +avide/S* +avidement/D'Q' +avidité/S* +avienne/F* +avifaune/S* +avignonnaise/F* +avilir/f4p+ +avilissante/F* +avilissement/S* +aviner/a2p+ +avion/S* +avion-cargo/L'D'Q' +avionique/S* +avionnerie/S* +avionnette/S* +avionneuse/F* +avions-cargos/D'Q' +avipelvien/S* +aviron/S* +avirulence/S* +avis/L'D'Q' +aviser/a4p+ +aviseur/S* +aviso/S* +avitaillement/S* +avitailler/a4p+ +avitailleuse/F* +avitaminose/S* +avivage/S* +avivement/S* +aviver/a2p+ +aviveuse/F* +avocaillon/S* +avocasser/a2p+ +avocasserie/S* +avocassière/F* +avocate/F* +avocatier/S* +avocette/S* +avodiré/S* +avoine/S* +avoiner/a2p+ +avoir/S* +avoir/zA +avoirdupois/L'D'Q' +avoisinante/F* +avoisiner/a4p+ +avortement/S* +avorter/a2p+ +avorteuse/F* +avorton/S* +avouable/S* +avouée/F* +avouer/a4p+ +avoyer/S* +avoyer/a2p+ +avr +avril/S* +avulsion/S* +avunculaire/S* +avunculat/S* +awalé/S* +axe/S* +axénique/S* +axénisation/S* +axer/a4p+ +axérophtol/S* +axiale/W* +axialement/L'D'Q' +axile/S* +axillaire/S* +axinite/S* +axiologie/S* +axiologique/S* +axiologiquement/D'Q' +axiomatique/S* +axiomatiquement/L'D'Q' +axiomatisation/S* +axiomatiser/a2p+ +axiome/S* +axis/L'D'Q' +axisymétrique/S* +axoa/S* +axolotl/S* +axonaise/F* +axonale/W* +axone/S* +axonge/S* +axonométrie/S* +axonométrique/S* +axopode/S* +ayahuasca/S* +ayant/S* +ayatollah/S* +aye-aye/L'D'Q' +ayes-ayes/D'Q' +ayurveda/L'D'Q' +ayur-veda/L'D'Q' +ayurvéda/S* +ayurvédique/S* +azalée/S* +azéotrope/S* +azéotrope/S* +azéotropie/S* +azéotropique/S* +azerbaïdjanaise/F* +azérie/F* +azerole/S* +azerolier/S* +azerty/L'D'Q' +azidothymidine/S* +azimut/S* +azimutale/W* +azimuter/a2p+ +azimuther/a2p+ +azine/S* +azobé/S* +azobenzène/S* +azoïque/S* +azole/S* +azolla/S* +azoospermie/S* +azotate/S* +azote/S* +azotée/F* +azotémie/S* +azotémique/S* +azoteuse/W* +azoth/S* +azothydrique/S* +azotique/S* +azotite/S* +azotobacter/S* +azoture/S* +azoturie/S* +azoxystrobine/S* +aztèque/S* +azulejo/S* +azulène/S* +azur/S* +azurage/S* +azurant/S* +azuréenne/F* +azurer/a2p+ +azurite/S* +azygos/L'D'Q' +azygos/L'D'Q' +azyme/S* +b +b/||-- +ba/||-- +baasisme/S. +baasiste/S. +b.a.-ba +baba/S. +babeler/d0p. +babélisme/S. +babelutte/S. +babeurre/S. +babil/S. +babillage/S. +babillarde/F. +babillement/S. +babiller/a0p. +babine/S. +babiole/S. +babiroussa/S. +babisme/S. +bâbord/S. +bâbordais +babouche/S. +babouchka/S. +babouin/S. +babouvisme/S. +babouviste/S. +baby/A. +baby-blues +baby-boom/S. +baby-boomer/S. +baby-boomeuse/F. +baby-boum/S. +baby-foot +babylonienne/F. +baby-sitter/S. +baby-sitting/S. +bac/S. +baccalauréat/S. +baccara/S. +baccarat/S. +bacchanale/S. +bacchante/S. +bacchique/S. +baccifère/S. +bacciforme/S. +bâchage/S. +bachat/S. +bâche/S. +bachelière/F. +bachelor/S. +bâcher/a0p+ +bachi/S. +bachi-bouzouk/S. +bachique/S. +bacholle/S. +bachot/S. +bachotage/S. +bachoter/a0p. +bacillaire/S. +bacille/S. +bacillifère/S. +bacilliforme/S. +bacillose/S. +bacillurie/S. +bacitracine/S. +backcross +back-cross +backdoor/S. +backgammon/S. +background/S. +back-office/S. +bâclage/S. +bâcler/a0p+ +bâcleuse/F. +bacon/S. +baconienne/F. +bactéricide/S. +bactéricide/S. +bactéridie/S. +bactérie/S. +bactériémie/S. +bactériémique/S. +bactérienne/F. +bactériochlorophylle/S. +bactériocine/S. +bactériologie/S. +bactériologique/S. +bactériologiquement +bactériologiste/S. +bactériologue/S. +bactériophage/S. +bactériostatique/S. +bactériurie/S. +bactéroïde/S. +bactrienne/F. +bacul/S. +bad +badaboum +badaude/F. +badauderie/S. +baddeleyite/S. +badèche/S. +badelaire/S. +bader/a0p+ +baderne/S. +badge/S. +badger/a0p. +badiane/S. +badigeon/S. +badigeonnage/S. +badigeonner/a0p+ +badigeonneuse/F. +badigoinces +badinage/S. +badine/F. +badiner/a0p. +badinerie/S. +badlands +badminton/S. +baeckeofe/S. +baeckeoffe/S. +baffe/S. +baffer/a0p+ +baffle/S. +bafouer/a0p+ +bafoueuse/F. +bafouillage/S. +bafouille/S. +bafouillement/S. +bafouillement/S. +bafouiller/a0p+ +bafouilleuse/F. +bafouillis +bâfrer/a0p+ +bâfreuse/F. +bagad/S. +bagadou +bagage/S. +bagagiste/S. +bagarre/S. +bagarrer/a0p+ +bagarreuse/F. +bagasse/S. +bagatelle/S. +bagel/S. +baggy/A. +bagnarde/F. +bagne/S. +bagnole/S. +bagote/S. +bagoter/a0p. +bagotte/S. +bagotter/a0p. +bagou/S. +bagouler/a0p. +bagout/S. +baguage/S. +baguazhang/S. +bague/S. +baguenaude/S. +baguenauder/a0p+ +baguenaudier/S. +baguer/a0p+ +baguette/S. +baguier/S. +baguiste/S. +bah +baha'ie/F. +bahaïe/F. +baha'isme/S. +bahaïsme/S. +bahamienne/F. +bahreïnie/F. +baht/S. +bahut/S. +bahutage/S. +baie/F. +baignade/S. +baigner/a0p+ +baigneuse/F. +baignoire/S. +bail/X. +bailecito/S. +baille/S. +bâillement/S. +bailler/a0p+ +bâiller/a0p. +bailleresse/F. +bâilleuse/F. +bailli/S. +bailliage/S. +baillie/S. +baillistre/S. +bâillon/S. +bâillonnement/S. +bâillonner/a0p+ +bain/S. +baïne/S. +bain-marie +bains-marie +baïonnette/S. +baïoque/S. +baïram/S. +baisable/S. +baise/S. +baise-en-ville +baisemain/S. +baisement/S. +baiser/S. +baiser/a0p+ +baiseuse/F. +baisodrome/S. +baisoter/a0p+ +baissage/S. +baisse/S. +baissement/S. +baisser/a0p+ +baissière/F. +baisure/S. +bajocienne/F. +bajoue/S. +bajoyer/S. +bakchich/S. +bakélite/S. +baklava/S. +bal/S. +balade/S. +balader/a0p+ +baladeuse/F. +baladin/S. +balado/S. +baladodiffuseuse/F. +baladodiffusion/S. +balafon/S. +balafre/S. +balafrée/F. +balafrer/a0p+ +balai/S. +balai-brosse +balais-brosses +balaise/S. +balalaïka/S. +balance/S. +balancelle/S. +balancement/S. +balancer/a0p+ +balancière/F. +balancine/S. +balançoire/S. +balane/S. +balanin/S. +balanite/S. +balanoglosse/S. +balanoposthite/S. +balanstiquer/a0p+ +balantidiose/S. +balata/S. +balayage/S. +balayer/a0p+ +balayette/S. +balayeuse/F. +balayure/S. +balbutiante/F. +balbutiement/S. +balbutier/a0p+ +balbuzard/S. +balcon/S. +balconnet/S. +baldaquin/S. +baleine/S. +baleineau/X. +baleiner/a0p+ +baleinière/F. +baleinoptère/S. +balénoptère/S. +balèvre/S. +balèze/S. +baligander/a0p. +balinaise/F. +balisage/S. +balise/S. +baliser/a0p+ +baliseur/S. +balisier/S. +baliste/S. +balisticienne/F. +balistique/S. +balistique/S. +balivage/S. +baliveau/X. +baliverne/S. +balkanique/S. +balkanisation/S. +balkaniser/a0p+ +ballade/S. +ballante/F. +ballast/S. +ballastage/S. +ballaster/a0p+ +ballastière/S. +balle/S. +balle-molle +baller/a0p. +ballerine/S. +balles-molles +ballet/S. +balletomane/S. +ballon/S. +ballonnement/S. +ballonner/a0p+ +ballonnet/S. +ballon-sonde +ballons-sondes +ballot/S. +ballote/S. +ballotin/S. +ballottage/S. +ballottement/S. +ballotter/a0p+ +ballottine/S. +ball-trap/S. +balluchon/S. +balnéaire/S. +balnéation/S. +balnéothérapie/S. +bâloise/F. +balourde/F. +balourdement +balourdise/S. +baloutche/S. +baloutchi/S. +balsa/S. +balsamier/S. +balsamine/S. +balsamique/S. +balte/S. +balter/a0p+ +balthazar/S. +baltique/S. +baltringue/S. +baluchithérium/S. +baluchon/S. +baluchonner +balustrade/S. +balustre/S. +balzacienne/F. +balzane/F. +bamakoise/F. +bambine/F. +bambochade/S. +bambocharde/F. +bamboche/S. +bambocher/a0p. +bambocheuse/F. +bambou/S. +bamboula/S. +bambouseraie/S. +ban/S. +banachique/S. +banale/F. +banale/W. +banalement +banalisation/S. +banaliser/a0p+ +banalité/S. +banane/S. +bananer/a0p+ +bananeraie/S. +bananier/S. +bananière/F. +banaste/S. +banc/S. +bancable/S. +bancaire/S. +bancale/F. +bancarisation/S. +bancariser/a0p+ +bancassurance/S. +bancassureur/S. +banchage/S. +banche/S. +bancher/a0p+ +bancheuse/F. +banco/S. +bancoulier/S. +bancroche/S. +bandage/S. +bandagiste/S. +bandaison/S. +bandana/S. +bandante/F. +bande/S. +bande-annonce +bandeau/X. +bandelette/S. +bander/a0p+ +banderille/S. +banderillero/S. +banderole/S. +bandes-annonces +bande-son +bandes-son +bandière/S. +bandit/S. +banditisme/S. +bandonéon/S. +bandoulier/S. +bandoulière/S. +bang/S. +bangladaise/F. +bangladeshi/S. +banian/S. +banjo/S. +banjoïste/S. +bankster/S. +banlieue/S. +banlieusarde/F. +banlon/S. +banne/S. +banner/a0p+ +banneret/S. +banneton/S. +bannette/S. +bannie/F. +bannière/S. +bannir/f0p+ +bannissable/S. +bannissement/S. +banon/S. +banquable/S. +banque/S. +banquer/a0p. +banqueroute/S. +banqueroutière/F. +banquet/S. +banqueter/d0p. +banqueteuse/F. +banquette/S. +banquière/F. +banquise/S. +banquiste/S. +bantoue/F. +bantoustan/S. +banyuls +baobab/S. +baptême/S. +baptisée/F. +baptiser/a0p+ +baptiseuse/F. +baptismale/W. +baptisme/S. +baptistaire/S. +baptiste/S. +baptistère/S. +baquer/a0p+ +baquet/S. +baqueter/d0p+ +baquetures +bar/S. +bar/||-- +barachois +baragouin/S. +baragouinage/S. +baragouiner/a0p+ +baragouineuse/F. +baraka/S. +barakie/F. +baraquage/S. +baraque/S. +baraquée/F. +baraquement/S. +baraquer/a0p+ +baraterie/S. +baratin/S. +baratiner/a0p+ +baratineuse/F. +barattage/S. +baratte/S. +baratter/a0p+ +barbacane/S. +barbadienne/F. +barbante/F. +barbaque/S. +barbare/S. +barbarement +barbaresque/S. +barbarie/S. +barbarisation/S. +barbarisme/S. +barbastelle/S. +barbe/S. +barbeau/X. +barbecue/S. +barbelé/S. +barbelée/F. +barbelure/S. +barber/a0p+ +barbet/S. +barbette/F. +barbiche/S. +barbichette/S. +barbichue/F. +barbier/S. +barbifier/a0p+ +barbille/S. +barbillon/S. +barbital/S. +barbiturique/S. +barbiturique/S. +barbiturisme/S. +barbon/S. +barbotage/S. +barbotement/S. +barboter/a0p+ +barboteuse/F. +barbotière/S. +barbotine/F. +barbouillage/S. +barbouille/S. +barbouiller/a0p+ +barbouilleuse/F. +barbouillis +barbouze/S. +barbouzerie/S. +barbue/F. +barbule/S. +barcarolle/S. +barcasse/S. +barcelonaise/F. +bard/S. +barda/S. +bardaf +bardage/S. +bardane/S. +barde/S. +bardeau/X. +bardée/S. +bardelle/S. +barder/a0p+ +barder/a8p+ +bardeuse/F. +bardière/S. +bardis +bardot/S. +barefoot/S. +barème/S. +barémique/S. +baresthésie/S. +baréter/c0p. +barge/S. +barge/S. +barguignage/S. +barguigner/a0p. +barguigneuse/F. +bariatrique/S. +baribal/S. +barigoule/S. +baril/S. +barillet/S. +barine/S. +bariolage/S. +barioler/a0p+ +bariolure/S. +barisienne/F. +barjaquer/a0p. +barjo/S. +barjot/S. +barkhane/S. +barlongue/F. +barloquer/a0p. +barlotière/S. +barmaid/S. +barman/A. +bar-mitzvah +barn/S. +barnabite/S. +barnache/S. +barnum/S. +barocepteur/S. +barocline/S. +barogramme/S. +barographe/S. +barolo/S. +baromètre/S. +barométrie/S. +barométrique/S. +baronnage/S. +baronne/F. +baronner/a0p+ +baronnet/S. +baronnette/S. +baronnie/S. +baroque/S. +baroque/S. +baroquement +baroquisme/S. +barorécepteur/S. +baroscope/S. +barotraumatique/S. +barotraumatisme/S. +barotrope/S. +baroud/S. +barouder/a0p. +baroudeuse/F. +barouf/S. +baroufle/S. +barque/S. +barquerolle/S. +barquette/S. +barracuda/S. +barrage/S. +barragiste/S. +barre/S. +barreau/X. +barregraphe/S. +barrel/S. +barrement/S. +barrémienne/F. +barrer/a0p+ +barrette/S. +barreuse/F. +barricade/S. +barricader/a0p+ +barrière/S. +barrique/S. +barrir/f0p. +barrissement/S. +barrot/S. +bartavelle/S. +barycentre/S. +barycentrique/S. +barye/S. +barymétrie/S. +baryogenèse/S. +baryon/S. +baryonique/S. +barysphère/S. +baryte/S. +barytée/F. +barytine/S. +baryton/S. +baryum/S. +barzoï/S. +bas +basale/W. +basalte/S. +basaltique/S. +basane/S. +basanée/F. +basaner/a0p+ +basanite/S. +bas-bleu/S. +bas-côté/S. +basculante/F. +bascule/S. +basculement/S. +basculer/a0p+ +basculeur/S. +bas-culotte/S. +bas-de-casse +base/S. +baseball/S. +base-ball/S. +baselle/S. +baser/a0p+ +bas-fond/S. +basicité/S. +baside/S. +basidiomycète/S. +basidiomycète/S. +basidiospore/S. +basilaire/S. +basileis +basileus +basilic/S. +basilicale/W. +basilique/S. +basin/S. +basiphile/S. +basique/S. +basiquement +bas-jointée/F. +basket/S. +basketball/S. +basket-ball/S. +basketteuse/F. +bas-mât/S. +basmati/S. +basocellulaire/S. +basoche/S. +basochienne/F. +bas-officier/S. +basophile/S. +basophilie/S. +basquaise/S. +basquaise/S. +basque/S. +basquine/S. +bas-relief/S. +basse/F. +basse-contre +basse-cour +basse-courière/F. +basse-danse +basse-fosse +basse-lisse +basse-lissière/F. +bassement +basses-contre +basses-cours +basses-danses +basses-fosses +basses-lisses +bassesse/S. +basses-tailles +basses-tiges +basses-villes +basset/S. +basse-taille +basse-tige +basse-ville +bassin/S. +bassinante/F. +bassine/S. +bassiner/a0p+ +bassinet/S. +bassinoire/S. +bassiste/S. +basson/S. +bassoniste/S. +basta +bastaing/S. +baste/S. +baster/a0p. +basterne/S. +bastiaise/F. +bastide/S. +bastidon/S. +bastille/S. +bastillée/F. +bastillonner/a0p+ +bastingage/S. +bastion/S. +bastionner/a0p+ +baston/S. +bastonnade/S. +bastonner/a0p+ +bastos +bastringue/S. +bas-ventre/S. +bât/S. +bataclan/S. +bataille/S. +batailler/a0p+ +batailleuse/F. +bataillon/S. +bâtarde/F. +batardeau/X. +bâtardise/S. +batave/S. +batavia/S. +batavique/S. +batayole/S. +batch/S. +bateau/X. +bateau-citerne +bateau-feu +bateau-lavoir +bateau-mouche +bateau-pilote +bateau-pompe +bateaux-citernes +bateaux-feux +bateaux-lavoirs +bateaux-mouches +bateaux-pilotes +bateaux-pompes +batelage/S. +batelée/F. +bateler/d0p. +batelet/S. +bateleuse/F. +batelière/F. +batellerie/S. +bâter/a0p+ +batésienne/F. +bat-flanc +bath +bathmotrope/S. +batholite/S. +batholithe/S. +bathyale/W. +bathymètre/S. +bathymétrie/S. +bathymétrique/S. +bathypélagique/S. +bathyscaphe/S. +bathysphère/S. +bâtier/S. +bâtière/S. +batifolage/S. +batifolante/F. +batifoler/a0p. +batifoleuse/F. +batik/S. +batillage/S. +bâtiment/S. +bâtir/f0p+ +bâtissable/S. +bâtisse/S. +bâtisseuse/F. +batiste/S. +bâton/S. +bâtonnat/S. +bâtonner/a0p+ +bâtonnet/S. +bâtonnière/F. +batoude/S. +batrachotoxine/S. +batracienne/F. +battage/S. +battance/S. +battante/F. +batte/S. +battée/S. +battellement/S. +battement/S. +batterie/S. +batteuse/F. +battiture/S. +battle-dress +battoir/S. +battologie/S. +battre/uA +battue/S. +batture/S. +batucada/S. +bau/X. +baud/S. +baudelairienne/F. +baudet/S. +baudrier/S. +baudroie/S. +baudruche/S. +bauge/S. +bauger/a0p+ +bauhinie/S. +baume/S. +baumier/S. +bauquière/S. +bauxite/S. +bavante/F. +bavardage/S. +bavarde/F. +bavarder/a0p. +bavaroise/F. +bavasser/a0p. +bave/S. +baver/a0p. +bavette/S. +baveuse/W. +bavochée/F. +bavocher/a0p. +bavochure/S. +bavoir/S. +bavolet/S. +bavure/S. +baxter/S. +bayadère/S. +bayadère/S. +bayer/a0p. +bayésienne/F. +bayle/S. +baylienne/F. +bayonnaise/F. +bayou/S. +bazar/S. +bazarder/a0p+ +bazooka/S. +bazou/S. +be/||-- +beach-volley/S. +beach-volleyeuse/F. +beagle/S. +béal/S. +béalière/S. +béance/S. +béante/F. +béarnaise/F. +béate/F. +béatement +béatifiante/F. +béatification/S. +béatifier/a0p+ +béatifique/S. +béatitude/S. +beatnik/S. +beauceronne/F. +beaucoup +beauf/S. +beauferie/S. +beau-fils +beaufitude/S. +beau-frère +beaujolaise/F. +beau-père +beaupré/S. +beauté/S. +beauvaisienne/F. +beaux-arts +beaux-fils +beaux-frères +beaux-parents +beaux-pères +bébé/S. +bébête/S. +bêbête/S. +be-bop +bec/S. +bécane/S. +bécard/S. +bécarre/S. +bécasse/S. +bécasseau/X. +bécassine/S. +bec-croisé +bec-de-cane +bec-de-corbeau +bec-de-corbin +bec-de-lièvre +becfigue/S. +bêchage/S. +béchamel/S. +bêche/S. +bécher/S. +bêcher/a0p+ +bêcheuse/F. +bêcheveter/d0p+ +béchique/S. +bêchoir/S. +bécot/S. +bécoter/a0p+ +becquée/S. +becquer/a0p+ +becquerel/Um +becquet/S. +becquetage/S. +becquetance/S. +becqueter/d0p+ +becs-croisés +becs-de-cane +becs-de-corbeau +becs-de-corbin +becs-de-lièvre +bectance/S. +becter/a0p+ +bedaine/S. +bédane/S. +bédé/S. +bedeau/X. +bédégar/S. +bédéguar/S. +bédéiste/S. +bédéphile/S. +bédéthèque/S. +bedon/S. +bedonnante/F. +bedonnement/S. +bedonner/a0p. +bédouine/F. +bée/S. +beefsteak/S. +béer/a0p. +beethovénienne/F. +beffroi/S. +bégaiement/S. +bégaler/a0p+ +bégayante/F. +bégayer/a0p+ +bégayeuse/F. +bégonia/S. +béguë/F. +bègue/S. +béguer/c0p. +béguètement/S. +bégueter/b0p. +bégueule/S. +bégueulerie/S. +bégueulisme/S. +béguinage/S. +béguine/F. +bégum/S. +behaviorisme/S. +béhaviorisme/S. +behavioriste/S. +béhavioriste/S. +behaviourisme/S. +behaviouriste/S. +béhémoth/S. +beige/S. +beigeasse/S. +beigeâtre/S. +beigne/S. +beignet/S. +béjaune/S. +béké/S. +bélandre/S. +bêlante/F. +belcanto +bêlement/S. +bélemnite/S. +bêler/a0p. +bel-étage +belette/S. +belge/S. +belgicaine/F. +belgicisme/S. +belgitude/S. +belgo-allemande/F. +belgo-congolaise/F. +belgo-luxembourgeoise/F. +belgo-néerlandaise/F. +bélier/S. +bélière/S. +bélinographe/S. +belître/S. +bélître/S. +bélizienne/F. +belladone/S. +bellâtre/S. +belle/W. +belle-de-jour +belle-de-nuit +belle-doche +belle-famille +belle-fille +belle-maman +bellement +belle-mère +belles-de-jour +belles-de-nuit +belles-doches +belles-familles +belles-filles +belles-lettres +belles-mamans +belles-mères +belle-sœur +belles-sœurs +bellicisme/S. +belliciste/S. +belligérance/S. +belligérante/F. +belliqueuse/W. +belliqueusement +bellissime/S. +belluaire/S. +belon/S. +belote/S. +beloter/a0p. +béluga/S. +belvédère/S. +bémol/S. +bémoliser/a0p+ +ben +bénarde/S. +bénarde/S. +benchmark/S. +bendir/S. +bene +bénédicité/S. +bénédictine/F. +bénédiction/S. +benedictus +bénef/S. +bénéf/S. +bénéfice/S. +bénéficiaire/S. +bénéficier/a0p. +bénéfique/S. +benêt/S. +bénévolat/S. +bénévole/S. +bénévolement +bénévolence/S. +bengalaise/F. +bengalie/F. +bénigne/F. +bénignement +bénignité/S. +béninoise/F. +béni-oui-oui +bénir/f0p+ +bénissante/F. +bénisseuse/F. +bénite/F. +bénitier/S. +benjamine/F. +benjoin/S. +bennage/S. +benne/S. +benner/a0p+ +benoîte/F. +benoîte/S. +benoîtement +bentazone/S. +benthique/S. +benthos +bento/S. +bentonite/S. +benzaldéhyde/S. +benzalkonium/S. +benzédrine/S. +benzène/S. +benzénique/S. +benzine/S. +benzoate/S. +benzodiazépine/S. +benzoïque/S. +benzol/S. +benzolisme/S. +benzonitrile/S. +benzopyrène/S. +benzoyle/S. +benzyle/S. +béotienne/F. +béotisme/S. +bépo +bépoète/S. +béquer/c0p+ +béquet/S. +béqueter/d0p+ +béquillarde/F. +béquille/S. +béquiller/a0p+ +ber/S. +berbère/S. +berbéridacée/S. +berbéris +berbérisme/S. +berbériste/S. +berbérophone/S. +bercail +berçante/F. +berçante/S. +berce/S. +berceau/X. +bercelonnette/S. +bercement/S. +bercer/a0p+ +berceuse/F. +berceuse/S. +berdeller/a0p+ +béret/S. +bergamasque/S. +bergamote/S. +bergamotier/S. +berge/S. +bergère/F. +bergerie/S. +bergeronnette/S. +berginisation/S. +bergsonienne/F. +bergsonisme/S. +béribéri/S. +berimbau/S. +bérimbau/S. +berk +berkélium/S. +berline/S. +berlinette/S. +berlingot/S. +berlinoise/F. +berlue +berlurer/a0p+ +berme/S. +bermuda/S. +bermudienne/F. +bernache/S. +bernacle/S. +bernardine/F. +bernard-l'hermite +berne/S. +berner/a0p+ +berneuse/F. +bernicle/S. +bernique +bernique/S. +bernoise/F. +berrichonne/F. +bersaglier/S. +berthon/S. +bertillonnage/S. +béryl/S. +bérylliose/S. +béryllium/S. +béryx +berzingue +besace/S. +besaiguë/S. +besant/S. +besantée/F. +besicles +bésicles +bésigue/S. +besogne/S. +besogner/a0p. +besogneuse/W. +besogneusement +besoin/S. +bessemer/S. +bessonne/F. +bessonnière/S. +bestiaire/S. +bestiale/W. +bestialement +bestialiser/a0p+ +bestialité/S. +bestiau/X. +bestiole/S. +best-seller/S. +bêta +bêta/S. +bêtabloquant/S. +bêta-bloquant/S. +bêtabloquante/F. +bêta-bloquante/F. +bêtacarotène/S. +bêta-carotène/S. +bétail/S. +bétaillère/S. +bétaïne/S. +bêtalactamine/S. +bêta-lactamine/S. +bêtasse/S. +bêta-test/S. +bêta-testeuse/F. +bêtathérapie/S. +bêtatron/S. +bête/S. +bête/S. +bétel/S. +bêtement +bêtifiante/F. +bêtifier/a0p+ +bêtise/S. +bêtiser/a0p. +bêtisier/S. +bétoine/S. +bétoire/S. +béton/S. +bétonisation/S. +bétonnage/S. +bétonner/a0p+ +bétonneuse/F. +bétonnière/F. +bette/S. +betterave/S. +betteravière/F. +bétulacée/S. +bétulacée/S. +bétyle/S. +beuglante/F. +beuglante/S. +beuglement/S. +beugler/a0p+ +beugleuse/F. +beuh/S. +beur/S. +beurette/S. +beurk +beurouette/S. +beurrage/S. +beurre/S. +beurrée/S. +beurrer/a0p+ +beurrerie/S. +beurrière/F. +beuverie/S. +bévatron/S. +bévue/S. +bey/S. +beylicale/W. +beylicat/S. +beylisme/S. +bézef +bézoard/S. +bhakti/S. +bharatanatyam/S. +bhoutanaise/F. +biacide/S. +bi-active/F. +biacuminée/F. +biais +biaisement/S. +biaiser/a0p+ +biangle/S. +biannuelle/F. +biathlète/S. +biathlon/S. +biauriculaire/S. +biaxe/S. +bibacier/S. +bibande/S. +bibande/S. +bibarder/a0p. +bibelot/S. +bibeloter/a0p. +bibeloteuse/F. +bibendum/S. +biberon/S. +biberonner/a0p+ +bibi/S. +bibine/S. +bibite/S. +bibl +bible/S. +bibliatrique/S. +biblicisme/S. +biblio/S. +bibliobus +bibliogr +bibliographe/S. +bibliographie/S. +bibliographique/S. +bibliolâtre/S. +bibliologie/S. +bibliologique/S. +bibliologue/S. +bibliomancie/S. +bibliomane/S. +bibliomanie/S. +bibliométrie/S. +bibliométrique/S. +bibliophile/S. +bibliophilie/S. +bibliophilique/S. +bibliopole/S. +bibliotechnicienne/F. +bibliothécaire/S. +bibliothéconomie/S. +bibliothèque/S. +biblique/S. +bibliquement +bibliste/S. +bic/S. +bicalcique/S. +bicamérale/W. +bicaméralisme/S. +bicamérisme/S. +bicarbonate/S. +bicarbonatée/F. +bicarburation/S. +bicarrée/F. +bicaténaire/S. +bicentenaire/S. +bicentenaire/S. +bicéphale/S. +bicéphalie/S. +biceps +biche/S. +bichelamar/S. +bicher/a0p. +bichette/S. +bichlamar/S. +bichlorure/S. +bichof/S. +bichonnage/S. +bichonne/F. +bichonner/a0p+ +bichonneuse/F. +bichoter/a8p+ +bichromate/S. +bichromatée/F. +bichrome/S. +bichromie/S. +bicipitale/W. +bickford/S. +biclé/S. +biclef/S. +biclou/S. +bicœur/S. +bicœur/S. +bicolor +bicolore/S. +bicolorié/S. +biconcave/S. +bicône/S. +biconvexe/S. +bicoque/S. +bicorne/S. +bicorps +bicorps +bicot/S. +bicouche/S. +bicourant/S. +bicubique/S. +biculturalisme/S. +biculturelle/F. +bicuspide/S. +bicycle/S. +bicyclette/S. +bicyclique/S. +bicycliste/S. +bicylindre/S. +bidasse/S. +bide/S. +bidegré/S. +bident/S. +bider/a0p+ +bidet/S. +bidimensionnelle/F. +bidimensionnelle/F. +bi-dimensionnelle/F. +bidirectionnalité/S. +bidirectionnelle/F. +bidoche/S. +bidon/S. +bidonnage/S. +bidonnante/F. +bidonner/a0p+ +bidonville/S. +bidouillabilité/S. +bidouillable/S. +bidouillage/S. +bidouille/S. +bidouiller/a0p+ +bidouilleuse/F. +biduale/W. +bidule/S. +bief/S. +bielle/S. +biellette/S. +biélorusse/S. +bien +bien +bien/S. +bien-aimée/F. +bien-aller +bien-dire +bien-être +bienfacture/S. +bienfaisance/S. +bienfaisante/F. +bienfait/S. +bienfaitrice/F. +bien-fondé/S. +bien-fonds +bienheureuse/W. +bienheureusement +bien-jugé/S. +biennale/W. +bien-pensance/S. +bien-pensante/F. +bienséance/S. +bienséante/F. +biens-fonds +bientôt +bientraitance/S. +bienveillamment +bienveillance/S. +bienveillante/F. +bienvenir +bienvenue/F. +bien-vivre +bien-voulue/F. +bière/S. +bièvre/S. +biface/S. +biface/S. +biffage/S. +biffe/S. +biffer/a0p+ +biffeton/S. +biffeton/S. +biffetonner/a0p. +biffin/S. +biffure/S. +bifide/S. +bifidus +bifilaire/S. +bifocale/W. +bifonctionnelle/F. +bifteck/S. +bifton/S. +bifurcation/S. +bifurquée/F. +bifurquer/a0p. +big +bigaille/S. +bigame/S. +bigamie/S. +bigarade/S. +bigaradier/S. +bigarreau/X. +bigarrer/a0p+ +bigarrure/S. +big-bang +bigèbre/S. +bigle/S. +bigle/S. +bigler/a0p+ +bigleuse/W. +biglouser/a0p. +bignole/S. +bignolle/S. +bignonia/S. +bignoniacée/S. +bignoniacée/S. +bigophone/S. +bigophoner/a0p. +bigorne/S. +bigorneau/X. +bigorner/a0p+ +bigote/F. +bigotement +bigoterie/S. +bigotisme/S. +bigoudène/F. +bigoudi/S. +bigre +bigrement +bigrer/a0p. +biguanide/S. +bigue/S. +biguine/S. +bihari/S. +bihebdomadaire/S. +biholomorphe/S. +biholomorphisme/S. +bi-horaire/S. +bihoreau/X. +bi-infinie/F. +bi-invariante/F. +bijection/S. +bijective/F. +bijectivement +bijou/X. +bijouterie/S. +bijoutière/F. +bijuridisme/S. +biker/S. +bikini/S. +bilabiale/S. +bilabiale/W. +bilabiée/F. +bilame/S. +bilan/S. +bilaner/a0p. +bilangue/S. +bilatérale/W. +bilatéralement +bilatéralisme/S. +bilatéralité/S. +bilatère/S. +bilboquet/S. +bile/S. +biler/a0p+ +bileuse/W. +bilharzie/S. +bilharziose/S. +biliaire/S. +biliée/F. +bilieuse/W. +biligénie/S. +bilinéaire/S. +bilinéarité/S. +bilingue/S. +bilinguisme/S. +bilirubine/S. +bilirubinémie/S. +biliverdine/S. +bill/S. +billard/S. +billbergia/S. +bille/S. +billebaude/S. +billebauder/a0p. +biller/a0p. +billet/S. +billetée/F. +billette/S. +billetterie/S. +billettiste/S. +billevesée/S. +billion/S. +billon/S. +billonnage/S. +billonner/a0p+ +billot/S. +bilobée/F. +bilocation/S. +biloculaire/S. +biloquer/a0p+ +biloter/a0p+ +bimane/S. +bimbeloterie/S. +bimbelotière/F. +bimbo/S. +bimensuelle/F. +bimensuellement +bimestre/S. +bimestrielle/F. +bimestriellement +bimesurable/S. +bimétallique/S. +bimétallisme/S. +bimétalliste/S. +bimillénaire/S. +bimillénaire/S. +bimodale/W. +bimodule/S. +bimoteur/S. +binage/S. +binaire/S. +binaire/S. +binairement +binard/S. +binarité/S. +binationale/W. +binaurale/W. +binauriculaire/S. +bindi/S. +biner/a0p+ +binette/S. +bineuse/S. +bingo/S. +biniou/S. +binoclarde/F. +binocle/S. +binoculaire/S. +binodale/S. +binôme/S. +binomiale/W. +binominale/W. +binouze/S. +bin's +bintje/S. +bio +bio/S. +bioabsorbable/S. +bioaccumulable/S. +bioaccumulation/S. +bioacoustique/S. +bioagresseur/S. +bioalimentaire/S. +bioamplification/S. +bioastronomie/S. +biobibliographie/S. +biobibliographique/S. +biocapacité/S. +biocarburant/S. +biocatalyse/S. +biocatalyseur/S. +biocénose/S. +biochimie/S. +biochimique/S. +biochimiquement +biochimiste/S. +biocide/S. +bioclimatique/S. +bioclimatologie/S. +biocœnose/S. +biocombustible/S. +biocompatibilité/S. +biocompatible/S. +bioconstruction/S. +biocontrôle/S. +bioconversion/S. +biocratie/S. +biocratique/S. +biodéchet/S. +biodégradabilité/S. +biodégradable/S. +biodégradation/S. +biodesign/S. +biodétritique/S. +biodiesel/S. +biodisponibilité/S. +biodisponible/S. +biodiversité/S. +biodynamie/S. +biodynamique/S. +bioéconomie/S. +bioélectrique/S. +bioénergétique/S. +bioénergie/S. +bioérosion/S. +bioéthanol/S. +bioéthique/S. +bio-feed-back +biofertilisant/S. +biofilm/S. +biogaz +biogène/S. +biogenèse/S. +biogenèse/S. +biogénétique/S. +biogénétique/S. +biogénie/S. +biogénique/S. +biogéochimie/S. +biogéochimique/S. +biogéographie/S. +biogéographique/S. +biographe/S. +biographème/S. +biographie/S. +biographique/S. +biographiquement +bio-indicateur/S. +bio-indicatrice/F. +bio-industrie/S. +bio-industrielle/F. +bio-informatique/S. +bio-ingénieure/F. +biologie/S. +biologique/S. +biologiquement +biologisation/S. +biologiser/a0p+ +biologisme/S. +biologiste/S. +biolubrifiant/S. +bioluminescence/S. +bioluminescente/F. +biomagnétisme/S. +biomagnification/S. +biomarqueur/S. +biomasse/S. +biomatériau/X. +biomathématique/S. +biomathématique/S. +biome/S. +biomécanique/S. +biomédecine/S. +biomédicale/W. +biométrie/S. +biométrique/S. +biomimétique/S. +biomimétique/S. +biomimétisme/S. +biomoléculaire/S. +biomolécule/S. +biomorphique/S. +bionique/S. +bionique/S. +bionomie/S. +bionomique/S. +biopesticide/S. +biophotonique/S. +biophotonique/S. +biophysicienne/F. +biophysique/S. +biopic/S. +biopiratage/S. +biopirate/S. +biopiraterie/S. +biopolitique/S. +biopolymère/S. +bioproduit/S. +biopsie/S. +biopsier/a0p+ +biopsique/S. +biopuce/S. +bioraffinerie/S. +bioréacteur/S. +biorythme/S. +biosciences +biosécurité/S. +biosourcée/F. +biospéléologie/S. +biosphère/S. +biosphérisation/S. +biostase/S. +biostatisticienne/F. +biostatistique/S. +biostimulant/S. +biostratigraphie/S. +biosynthèse/S. +biosynthétique/S. +biote/S. +biotech/S. +biotechnique/S. +biotechnique/S. +biotechno/S. +biotechnologie/S. +biotechnologique/S. +bioterrorisme/S. +bioterroriste/S. +biothèque/S. +biothérapie/S. +biotine/S. +biotique/S. +biotite/S. +biotope/S. +biotraitement/S. +biotrophe/S. +bioturbation/S. +biotype/S. +biotypologie/S. +biovigilance/S. +bioxyde/S. +biozone/S. +bip/S. +bipale/S. +bipare/S. +biparentale/W. +bipartie/F. +bipartisane/F. +bipartisme/S. +bipartite/S. +bipartite/S. +bipartition/S. +bipasse/S. +bipède/S. +bipédie/S. +bipenne/S. +bipenne/S. +bipennée/F. +biper/a0p+ +biphasée/F. +biphasique/S. +biphasique/S. +biphényle/S. +bipied/S. +biplace/S. +biplace/S. +biplan/S. +bipoint/S. +bipolaire/S. +bipolarisation/S. +bipolarité/S. +bipôle/S. +bipoutre/S. +bipoutre/S. +biquadratique/S. +bique/S. +biquer/a0p. +biquette/F. +biquotidienne/F. +biquotidiennement +birapport/S. +birationnelle/F. +birationnellement +birbe/S. +birdie/S. +biréacteur/S. +biréfringence/S. +biréfringente/F. +birème/S. +birmane/F. +birotor/S. +birotor/S. +biroute/S. +bis +bisaïeule/F. +bisaïeux +bisaiguë/S. +bisannuelle/F. +bisbille/S. +bisbrouille/S. +biscaïenne/F. +biscôme/S. +biscornue/F. +biscoteau/X. +biscotin/S. +biscotte/S. +biscotterie/S. +biscottière/F. +biscuit/S. +biscuiter/a0p+ +biscuiterie/S. +bise/F. +bise/S. +biseau/X. +biseautage/S. +biseauter/a0p+ +biseauteuse/F. +bisegmenter/a0p+ +biser/a0p+ +biset/S. +bisexualité/S. +bisexuée/F. +bisexuelle/F. +bisimpliciale/W. +bismarckienne/F. +bismuth/S. +bismuthée/F. +bismuthine/S. +bismuthinite/S. +bisonne/F. +bisou/S. +bisphénol/S. +bisque/S. +bisquer/a0p. +bisquine/S. +bissac/S. +bissau-guinéenne/F. +bisse/S. +bissection/S. +bissectrice/F. +bissectrice/S. +bisser/a0p+ +bissexte/S. +bissextile/F. +bissexualité/S. +bissexuée/F. +bissexuelle/F. +bistable/S. +bistorte/S. +bistortier/S. +bistouille/S. +bistouquette/S. +bistouri/S. +bistournage/S. +bistourner/a0p+ +bistre +bistre/S. +bistrer/a0p+ +bistro/S. +bistroquet/S. +bistrot/S. +bistrotière/F. +bisulfate/S. +bisulfite/S. +bisulfitique/S. +bisulfure/S. +bit/S. +bit/||-- +bitcoin/S. +bite/S. +bitension/S. +biter/a0p+ +bitmap/S. +bitonale/W. +bitoniau/X. +bitonner/a0p. +bitord/S. +bitos +bittacus +bitte/S. +bitter/a0p+ +bitture/S. +bitturer/a0p+ +bitube/S. +bitube/S. +bitubulaire/S. +bitumage/S. +bitume/S. +bitumer/a0p+ +bitumeuse/W. +bituminer/a0p+ +bitumineuse/W. +biturbine/S. +biture/S. +biturer/a0p+ +biunivoque/S. +biunivoquement +bivalence/S. +bivalente/F. +bivaluée/F. +bivalve/S. +bivalve/S. +bivariante/F. +biveau/X. +bivitelline/F. +bivouac/S. +bivouaquer/a0p. +biwa/S. +bizarre/S. +bizarrement +bizarrerie/S. +bizarroïde/S. +bizut/S. +bizutage/S. +bizuter/a0p+ +bizuth/S. +bla-bla +blabla/S. +bla-bla-bla +blablabla/S. +blablater/a0p. +bla-blater/a0p. +blablateuse/F. +black/S. +black-bass +blackboulage/S. +blackbouler/a0p+ +blacklister/a0p+ +black-out +black-rot/S. +blafarde/F. +blaff/S. +blague/S. +blaguer/a0p+ +blagueuse/F. +blair/S. +blairelle/W. +blairer/a0p+ +blâmable/S. +blâme/S. +blâmer/a0p+ +blanc-bec +blanc-cassis +blanc-estoc +blanc-étoc +blanchaille/S. +blanchâtre/S. +blanche/F. +blanchet/S. +blancheur/S. +blanchiment/S. +blanchir/f0p+ +blanchissage/S. +blanchissante/F. +blanchissement/S. +blanchisserie/S. +blanchisseuse/F. +blanchité/S. +blanchon/S. +blanchoyer/a0p. +blanc-manger +blancs-becs +blanc-seing +blancs-estocs +blancs-étocs +blancs-mangers +blancs-seings +blandice/S. +blanquette/S. +blanquisme/S. +blaps +blasement/S. +blaser/a0p+ +blason/S. +blasonnement/S. +blasonner/a0p+ +blasonneuse/F. +blasphématoire/S. +blasphématrice/F. +blasphème/S. +blasphémer/c0p+ +blastème/S. +blaster/S. +blaster/a0p+ +blastocèle/S. +blastocyste/S. +blastoderme/S. +blastodermique/S. +blastogenèse/S. +blastoïde/S. +blastomère/S. +blastomycose/S. +blastopore/S. +blastula/S. +blastulation/S. +blatèrement/S. +blatérer/c0p. +blatte/S. +blaude/S. +blazar/S. +blazer/S. +blé/S. +blèche/S. +bled/S. +bledarde/F. +blédarde/F. +bleffer/a0p. +blême/S. +blêmir/f0p+ +blêmissante/F. +blêmissement/S. +blende/S. +blender/S. +blennie/S. +blennorragie/S. +blennorragique/S. +blennorrhée/S. +blépharite/S. +blépharoplastie/S. +blépharospasme/S. +blèsement/S. +bléser/c0p. +blésité/S. +blésoise/F. +blessante/F. +blessée/F. +blesser/a0p+ +blessure/S. +blette/F. +blette/S. +blettir/f0p. +blettissement/S. +blettissure/S. +bleuâtre/S. +bleue/F. +bleuet/S. +bleuetier/S. +bleuetière/S. +bleu-gris +bleuir/f0p+ +bleuissement/S. +bleusaille/S. +bleuter/a0p+ +bleu-vert +blindage/S. +blinde/S. +blindé/S. +blinder/a0p+ +blindicide/S. +bling-bling +blini/S. +blinquer/a0p+ +blister/S. +blitz +blitzkrieg/S. +blizzard/S. +blob/S. +blobloter/a0p. +bloc/S. +blocage/S. +blocaille/S. +bloc-cuisine +bloc-cylindres +bloc-évier +blochet/S. +blockbuster/S. +blockchain/S. +blockhaus +bloc-moteur +bloc-notes +blocs-cuisines +blocs-cylindres +blocs-éviers +blocs-moteurs +blocs-notes +blocus +blog/S. +blogosphère/S. +blogue/S. +bloguer/a0p+ +blogueuse/F. +blondasse/S. +blonde/F. +blondel/S. +blondeur/S. +blondine/F. +blondinette/F. +blondir/f0p+ +blondoyer/a0p. +bloom/S. +bloomer/S. +bloquante/F. +bloquer/a0p+ +bloqueuse/F. +blottir/f0p+ +blottissement/S. +blousante/F. +blouse/S. +blouser/a0p+ +blouson/S. +blousse/S. +blue-jean/S. +blues +bluette/F. +bluff/S. +bluffante/F. +bluffer/a0p+ +bluffeuse/F. +blush/S. +blutage/S. +bluteau/X. +bluter/a0p+ +bluterie/S. +blutiner/a0p. +blutoir/S. +boa/S. +boarmie/S. +bob/S. +bobard/S. +bobèche/S. +bobettes +bobeuse/F. +bobinage/S. +bobine/S. +bobiner/a0p+ +bobinette/S. +bobineuse/F. +bobinière/F. +bobinoir/S. +bobo/S. +bobologie/S. +bobonne/S. +bobsleigh/S. +bobtail/S. +bocage/S. +bocagère/F. +bocal/X. +bocard/S. +bocardage/S. +bocarder/a0p+ +boche/S. +bock/S. +bodega/S. +bodéga/S. +bodhi/S. +bodhisattva +bodhisattva/S. +body/A. +bodyboard/S. +bodybuildée/F. +bodybuildeuse/F. +bodybuilding/S. +body-building/S. +boer/S. +boësse/S. +boëte/S. +boette/S. +boëtte/S. +boetter/a0p+ +bœuf/S. +bof +boggie/S. +boghead/S. +boghei/S. +bogie/S. +bogomile/S. +bogue/S. +boguée/F. +boguet/S. +bohème/S. +bohémienne/F. +bohrium/S. +boiler/S. +boille/S. +boire/S. +boire/xC +bois +boisage/S. +boisement/S. +boiser/a0p+ +boiserie/S. +boiseuse/F. +boisseau/X. +boisselée/S. +boisselière/F. +boissellerie/S. +boisson/S. +boîte/S. +boitement/S. +boiter/a0p+ +boiterie/S. +boiteuse/W. +boîtier/S. +boitillante/F. +boitillement/S. +boitiller/a0p. +boit-sans-soif +boitte/S. +bol/S. +bolas +bolbécaise/F. +bolchevik/S. +bolchévik/S. +bolchevique/S. +bolchevisation/S. +bolcheviser/a0p+ +bolchevisme/S. +bolcheviste/S. +boldo/S. +bolduc/S. +bolée/S. +boléro/S. +bolet/S. +boletale/S. +bolétique/S. +bolide/S. +bolier/S. +bolivar/S. +bolivares +bolivarienne/F. +boliviano/S. +bolivienne/F. +bollandiste/S. +bollard/S. +bollywoodienne/F. +bolognaise/F. +bolomètre/S. +bolométrique/S. +boloss +bolus +bombacée/S. +bombage/S. +bombagiste/S. +bombance/S. +bombante/F. +bombarde/S. +bombardement/S. +bombarder/a0p+ +bombardier/S. +bombardon/S. +bombasse/S. +bombe/S. +bombement/S. +bomber/a0p+ +bombeuse/F. +bombinette/S. +bombyx +bôme/S. +bonace/S. +bonapartisme/S. +bonapartiste/S. +bonasse/S. +bonasse/S. +bonassement +bonasserie/S. +bonbec/S. +bonbon/S. +bonbonne/S. +bonbonnière/S. +bon-chrétien +bond/S. +bondage/S. +bonde/S. +bondelle/S. +bonder/a0p+ +bondérisation/S. +bondériser/a0p+ +bondieusarde/F. +bondieuserie/S. +bondir/f0p. +bondissante/F. +bondissement/S. +bondon/S. +bondonner/a0p+ +bondonnière/S. +bondrée/S. +bonellie/S. +bongo/S. +bonheur/S. +bonheur-du-jour +bonheurs-du-jour +bonhomie/S. +bonhomme +bonhomme/S. +bonhommie/S. +boni/S. +bonichon/S. +bonifiante/F. +bonification/S. +bonifier/a0p+ +boniment/S. +bonimenter/a0p. +bonimenteuse/F. +bonite/S. +bonjour/S. +bonnarde/F. +bonne/F. +bonne-maman +bonnement +bonnes-mamans +bonnet/S. +bonnet-de-prêtre +bonneteau/X. +bonneterie/S. +bonneteur/S. +bonnetière/F. +bonnets-de-prêtre +bonnette/S. +bonniche/S. +bonobo/S. +bonobo/S. +bon-papa +bonsaï/S. +bons-chrétiens +bonshommes +bonsoir/S. +bons-papas +bonté/S. +bonus +bonzaï/S. +bonzerie/S. +bonzesse/F. +boogie-woogie/S. +bookmaker/S. +booléenne/F. +boom/S. +boomer/S. +boomerang/S. +booster/S. +booster/a0p+ +bootlegger/S. +bop/S. +boqueteau/X. +boquilloner/a0p. +bora/S. +boraine/F. +borane/S. +borasse/S. +borassus +borate/S. +boratée/F. +borax +borborygme/S. +borchtch/S. +bord/S. +bordage/S. +bordante/F. +bordeaux +bordeaux +bordée/F. +bordel/S. +bordelaise/F. +bordélique/S. +bordéliser/a0p+ +border/a0p+ +bordereau/X. +borderie/S. +borderline/S. +bordeuse/S. +bordière/F. +bordigue/S. +bordisme/S. +bordure/S. +bordurer/a0p+ +bordurette/S. +bordureuse/S. +bore/S. +boréale/W. +boréals +borée/S. +borélien/S. +borélienne/F. +borgne/S. +borgnoter/a0p+ +borie/S. +borique/S. +boriquée/F. +bornage/S. +borne/S. +borne-fontaine +borner/a0p+ +bornes-fontaines +bornier/S. +bornite/S. +bornitude/S. +bornologie/S. +bornologique/S. +bornoyer/a0p+ +borosilicate/S. +borosilicatée/F. +borough/S. +borraginacée/S. +borréliose/S. +bort/S. +bortsch/S. +boruration/S. +bosco/S. +boscotte/F. +boskoop/S. +bosniaque/S. +bosnienne/F. +boson/S. +bosonique/S. +bosquet/S. +boss/A. +bossage/S. +bossanova +bosse/S. +bosselage/S. +bosseler/d0p+ +bossellement/S. +bosselure/S. +bosser/a0p+ +bossette/S. +bosseuse/F. +bossoir/S. +bossue/F. +bossuer/a0p+ +boston/S. +bostonienne/F. +bostonner/a0p. +bostryche/S. +botanique/S. +botanique/S. +botaniquement +botaniser/a0p. +botaniste/S. +bote/F. +bothriocéphale/S. +botnet/S. +botox +botoxée/F. +botryoïde/S. +botrytis +botswanaise/F. +bottage/S. +botte/S. +bottelage/S. +botteler/d0p+ +botteleuse/F. +botter/a0p+ +botteresse/S. +botterie/S. +botteuse/F. +bottière/F. +bottille/S. +bottillon/S. +bottin/S. +bottine/S. +bottiner/a0p+ +bottom-up +botulinique/S. +botulique/S. +botulisme/S. +boubou/S. +boubouler/a0p. +bouc/S. +boucan/S. +boucanage/S. +boucane/S. +boucaner/a0p+ +boucanier/S. +boucau/X. +boucaud/S. +boucaut/S. +bouchage/S. +bouchardage/S. +boucharde/S. +boucharder/a0p+ +bouchardeuse/S. +bouche/S. +bouche-à-bouche +bouche-à-oreille/S= +bouche-bouteille/S. +bouche-bouteilles +bouchée/S. +bouche-pores +boucher/a0p+ +bouchère/F. +boucherie/S. +bouche-trou/S. +boucheuse/F. +bouchoir/S. +boucholeuse/F. +bouchon/S. +bouchonnage/S. +bouchonnement/S. +bouchonner/a0p+ +bouchonneuse/S. +bouchonnière/F. +bouchot/S. +bouchoteur/S. +bouchure/S. +bouclage/S. +boucle/S. +bouclement/S. +boucler/a0p+ +bouclette/S. +bouclier/S. +bouddha/S. +bouddhique/S. +bouddhisme/S. +bouddhiste/S. +bouddhologie/S. +bouddhologue/S. +bouder/a0p+ +bouderie/S. +boudeuse/F. +boudeusement +boudin/S. +boudinage/S. +boudiner/a0p+ +boudineuse/S. +boudoir/S. +boue/S. +bouée/S. +bouette/S. +boueur/S. +boueuse/W. +bouffante/F. +bouffarde/S. +bouffe/S. +bouffée/S. +bouffer/a0p+ +bouffetance/S. +bouffette/S. +bouffeuse/F. +bouffir/f0p+ +bouffissage/S. +bouffissure/S. +bouffonesque/S. +bouffonne/F. +bouffonnement +bouffonner/a0p. +bouffonnerie/S. +bougainvillée/S. +bougainvillier/S. +bouge/S. +bougeoir/S. +bougeotte/S. +bouger/a0p+ +bougie/S. +bougnat/S. +bougnoule/S. +bougonne/F. +bougonnement/S. +bougonner/a0p+ +bougonnerie/S. +bougran/S. +bougrement +bougrerie/S. +bougresse/F. +bouh +boui-boui +bouif/S. +bouillabaisse/S. +bouillage/S. +bouillante/F. +bouillasse/S. +bouille/S. +bouillette/S. +bouilleuse/F. +bouillie/S. +bouillir/iQ +bouillissage/S. +bouilloire/S. +bouillon/S. +bouillonnante/F. +bouillonnement/S. +bouillonner/a0p+ +bouillotte/S. +bouillotter/a0p. +bouiner/a0p. +bouis-bouis +boujaron/S. +boulaie/S. +boulanger/a0p+ +boulangère/F. +boulangerie/S. +boulangisme/S. +boulangiste/S. +boulbène/S. +boule/S. +bouleau/X. +boule-de-neige +bouledogue/S. +bouler/a0p+ +boules-de-neige +bouletée/F. +boulette/F. +boulevard/S. +boulevardière/F. +bouleversante/F. +bouleversement/S. +bouleverser/a0p+ +boulghour/S. +boulgour/S. +boulier/S. +boulimie/S. +boulimique/S. +boulin/S. +bouline/S. +bouliner/a0p+ +boulingrin/S. +boulinière/F. +bouliste/S. +boulocher/a0p. +boulodrome/S. +bouloir/S. +boulon/S. +boulonnage/S. +boulonner/a0p+ +boulonnerie/S. +boulonneuse/S. +boulonnière/F. +boulotte/F. +boulotter/a0p+ +boum/S. +boumer/a8p. +boumeur/S. +bouquet/S. +bouquetière/F. +bouquetin/S. +bouquin/S. +bouquinage/S. +bouquiner/a0p+ +bouquinerie/S. +bouquineuse/F. +bouquiniste/S. +bouracan/S. +bourbe/S. +bourbeuse/W. +bourbier/S. +bourbillon/S. +bourbon/S. +bourbonienne/F. +bourbonnaise/F. +bourdaine/S. +bourdalou/S. +bourde/S. +bourder/a0p. +bourdon/S. +bourdonnante/F. +bourdonnée/F. +bourdonnement/S. +bourdonner/a0p. +bourdonneuse/F. +bourg/S. +bourgade/S. +bourge/S. +bourgeoise/F. +bourgeoisement +bourgeoisiale/W. +bourgeoisie/S. +bourgeoisisme/S. +bourgeon/S. +bourgeonnante/F. +bourgeonnement/S. +bourgeonner/a0p. +bourgeonneuse/W. +bourgeron/S. +bourgmestre/S. +bourgogne/S. +bourguignonne/F. +bourguignotte/S. +bouriate/S. +bourlinguer/a0p. +bourlingueuse/F. +bourrache/S. +bourrade/S. +bourrage/S. +bourras +bourrasque/S. +bourrative/F. +bourre/S. +bourreau/X. +bourrée/S. +bourrèlement/S. +bourreler/d0p+ +bourrelet/S. +bourrelière/F. +bourrellement/S. +bourrellerie/S. +bourre-pif/S. +bourre-pipe/S. +bourrer/a0p+ +bourrette/S. +bourreuse/F. +bourriche/S. +bourrichon/S. +bourricot/S. +bourride/S. +bourrin/S. +bourrinage/S. +bourrique/S. +bourriquet/S. +bourroir/S. +bourrue/F. +bourse/S. +bourse-à-pasteur +bourses-à-pasteur +boursette/S. +boursicot/S. +boursicotage/S. +boursicoter/a0p. +boursicoteuse/F. +boursicotière/F. +boursière/F. +boursoufflage/S. +boursoufflement/S. +boursouffler/a0p+ +boursoufflure/S. +boursouflage/S. +boursouflement/S. +boursoufler/a0p+ +boursouflure/S. +bouscueil/S. +bousculade/S. +bousculement/S. +bousculer/a0p+ +bouse/S. +bouseuse/W. +bousier/S. +bousillage/S. +bousiller/a0p+ +bousilleuse/F. +bousin/S. +bousingot/S. +boussole/S. +boustifaille/S. +boustifailler/a0p. +boustrophédon/S. +bout/S. +boutade/S. +boutante/F. +boutargue/S. +bout-dehors +boute-en-train +boutefas +boutefeu/X. +boutehors +boute-hors +bouteille/S. +bouteiller/S. +bouteiller/a0p+ +bouteillerie/S. +bouteillon/S. +bouter/a0p+ +bouterolle/S. +bouteroue/S. +boute-selle +bouteur/S. +boutique/S. +boutiquière/F. +boutis +boutisme/S. +boutisse/S. +boutisse/S. +boutoir/S. +bouton/S. +bouton-d'argent +bouton-d'or +boutonnage/S. +boutonner/a0p+ +boutonneuse/W. +boutonnière/F. +bouton-poussoir +bouton-pression +boutons-d'argent +boutons-d'or +boutons-poussoirs +boutons-pression +boutre/S. +bout-rimé +bouts-dehors +bouts-rimés +bouturage/S. +bouture/S. +bouturer/a0p+ +bouverie/S. +bouvet/S. +bouveteuse/S. +bouvière/F. +bouvillon/S. +bouvreuil/S. +bouvril/S. +bouzin/S. +bouzouki/S. +bovarysme/S. +bovidé/S. +bovin/S. +bovine/F. +boviné/S. +bowling/S. +bow-window/S. +box +box-calf/S. +boxe/S. +boxer/S. +boxer/a0p+ +boxeuse/F. +box-office/S. +boxon/S. +boxonner/a0p. +boy/S. +boyard/S. +boyau/X. +boyauderie/S. +boyaudière/F. +boyauter/a0p+ +boycott/S. +boycottage/S. +boycotter/a0p+ +boycotteuse/F. +boy-scout/S. +boy-scoutisme/S. +brabançonne/F. +brabant/S. +bracelet/S. +bracelet-montre +bracelets-montres +brachiale/W. +brachialgie/S. +brachiation/S. +brachiocéphalique/S. +brachio-céphalique/S. +brachiopode/S. +brachiosaure/S. +brachycéphale/S. +brachycéphalie/S. +brachycère/S. +brachydactylie/S. +brachygraphie/S. +brachylogie/S. +brachyodonte/S. +brachyoure/S. +braconnage/S. +braconner/a0p+ +braconnière/F. +bractéale/W. +bractée/S. +bractéole/S. +bradage/S. +bradel/S. +brader/a0p+ +braderie/S. +bradeuse/F. +bradycardie/S. +bradykinésie/S. +bradykinine/S. +bradype/S. +bradypnée/S. +bradypsychie/S. +braguette/S. +brahman/S. +brahmane/S. +brahmanique/S. +brahmanisme/S. +brai/S. +braie/S. +braillante/F. +braillarde/F. +braille/S. +braillement/S. +brailler/a0p+ +brailleuse/F. +braiment/S. +brainstorming/S. +brain-trust/S. +braire/wM +braise/S. +braiser/a0p+ +braisette/S. +braisière/S. +braj/S. +brame/S. +bramement/S. +bramer/a0p. +bran/S. +branaire/S. +brancard/S. +brancardage/S. +brancarder/a0p+ +brancardière/F. +branchage/S. +branche/S. +branchement/S. +brancher/a0p+ +branchette/S. +branchiale/W. +branchie/S. +branchiopode/S. +branchiopode/S. +branchitude/S. +branchue/F. +brandade/S. +brande/S. +brandebourg/S. +brandebourgeoise/F. +brandiller/a0p+ +brandir/f0p+ +brandon/S. +brandy/A. +brane/S. +branlage/S. +branlante/F. +branle/S. +branle-bas +branlée/S. +branlement/S. +branle-queue +branle-queue/S. +branler/a0p+ +branlette/S. +branleuse/F. +branlocher/a0p+ +branloire/S. +branquignole/F. +brante/S. +braquage/S. +braque/S. +braque/S. +braquemart/S. +braquement/S. +braquer/a0p+ +braquet/S. +braqueuse/F. +bras +brasage/S. +braser/a0p+ +brasero/S. +braseuse/F. +brasier/S. +brasillement/S. +brasiller/a0p. +bras-le-corps +brasque/S. +brassage/S. +brassard/S. +brasse/S. +brassée/S. +brasser/a0p+ +brasserie/S. +brasseuse/F. +brasseyer/a0p+ +brassicacée/S. +brassicole/S. +brassière/S. +brassin/S. +brasure/S. +bravache/S. +bravade/S. +brave/S. +bravement +braver/a0p+ +braverie/S. +bravissimo +bravo/I. +bravoure/S. +brayer/a0p+ +brayette/S. +break/S. +breakdance/S. +breakfast/S. +brebis +brèche/S. +brèche-dent +bréchet/S. +bréchique/S. +bredouillage/S. +bredouillante/F. +bredouille/S. +bredouille/S. +bredouillement/S. +bredouiller/a0p+ +bredouilleuse/F. +bredouillis +breffage/S. +bregmatique/S. +bréhaigne/S. +bréhaigne/S. +breitschwanz +brelan/S. +brelandière/F. +brèle/S. +brêle/S. +brêler/a0p+ +brélésienne/F. +brelle/S. +breller/a0p+ +breloque/S. +brème/S. +bren/S. +brésil +brésilienne/F. +brésiller/a0p+ +brestoise/F. +bretèche/S. +bretelle/S. +bretessée/F. +bretillienne/F. +bretonnante/F. +bretonne/F. +bretonnisation/S. +bretonniser/a0p+ +bretonnisme/S. +bretteler/d0p+ +bretter/a0p+ +bretteuse/F. +bretzel/S. +breuvage/S. +brève/F. +brevet/S. +brevetabilité/S. +brevetable/S. +brevetage/S. +breveter/d0p+ +brévétoxine/S. +bréviaire/S. +bréviligne/S. +brévité/S. +briançonnaise/F. +briarde/F. +bribe/S. +bric +bric-à-brac +brick/S. +bricolable/S. +bricolage/S. +bricole/S. +bricoler/a0p+ +bricoleuse/F. +bricolo/S. +bridage/S. +bride/S. +brider/a0p+ +brideuse/F. +bridge/S. +bridger/a0p. +bridgeuse/F. +bridon/S. +brie/S. +briefer/a0p+ +briefing/S. +brièvement +brièveté/S. +briffe/S. +briffer/a0p+ +brigade/S. +brigadeiro/S. +brigadière/F. +brigadiste/S. +brigand/S. +brigandage/S. +brigandeau/X. +brigander/a0p+ +briganderie/S. +brigandine/S. +brigantine/F. +brightisme/S. +brigue/S. +briguer/a0p+ +brillamment +brillance/S. +brillantage/S. +brillante/F. +brillanter/a0p+ +brillantine/S. +brillantiner/a0p+ +brillantissime/S. +brillat-savarin +briller/a0p. +brimade/S. +brimbalement/S. +brimbaler/a0p+ +brimbelle/S. +brimborion/S. +brimer/a0p+ +brin/S. +brindezingue/S. +brindille/S. +bringée/F. +bringeure/S. +bringue/S. +bringuebalante/F. +bringuebalement/S. +bringuebaler/a0p+ +brinquebalante/F. +brinquebalement/S. +brinquebaler/a0p+ +brio/S. +brioche/S. +briocher/a0p+ +brique +brique/S. +briquer/a0p+ +briquet/S. +briquetage/S. +briqueter/d0p+ +briqueterie/S. +briqueteuse/F. +briquetier/S. +briquette/S. +bris +brisable/S. +brisance/S. +brisant/S. +brisante/F. +briscard/S. +brise/S. +brise-béton +brise-bise +brise-copeaux +brisée/S. +brise-fer +brise-glace +brise-jet +brise-lames +brise-mariage +brise-mèche +brisement/S. +brise-mottes +briser/a0p+ +brise-soleil +brise-tout +briseuse/F. +brise-vent +brisis +briska/S. +brisolée/S. +brisque/S. +brissotin/S. +bristol/S. +brisure/S. +britannique/S. +british +brittonique/S. +brittophone/S. +brize/S. +broadcaster/a0p+ +broc/S. +brocantage/S. +brocante/S. +brocanter/a0p+ +brocanteuse/F. +brocard/S. +brocarder/a0p+ +brocart/S. +brocatelle/S. +brocciu/S. +brochage/S. +brochante/F. +brochantite/S. +broche/S. +brocher/a0p+ +brochet/S. +brocheton/S. +brochette/S. +brocheuse/F. +brochoir/S. +brochure/S. +brocoli/S. +brodequin/S. +broder/a0p+ +broderie/S. +brodeuse/F. +broie/S. +broiement/S. +broigne/S. +broker/S. +brol/S. +bromacétique/S. +bromate/S. +bromation/S. +brome/S. +broméliacée/S. +broméliacée/S. +bromhydrate/S. +bromhydrique/S. +bromique/S. +bromisme/S. +bromoforme/S. +bromothymol/S. +bromoxynil/S. +bromure/S. +bronca/S. +bronchade/S. +bronche/S. +bronchectasie/S. +broncher/a0p. +bronchiectasie/S. +bronchiole/S. +bronchiolite/S. +bronchioloalvéolaire/S. +bronchique/S. +bronchite/S. +bronchiteuse/W. +bronchitique/S. +bronchoconstriction/S. +bronchodilatateur/S. +bronchodilatation/S. +bronchodilatatrice/F. +bronchographie/S. +bronchopathie/S. +bronchopneumonie/S. +broncho-pneumonie/S. +bronchopneumopathie/S. +broncho-pneumopathie/S. +bronchopulmonaire/S. +broncho-pulmonaire/S. +bronchorrhée/S. +bronchoscope/S. +bronchoscopie/S. +bronchospasme/S. +brontosaure/S. +bronzage/S. +bronzante/F. +bronze/S. +bronzer/a0p+ +bronzette/S. +bronzeuse/F. +bronzière/F. +bronzite/S. +brook/S. +brookite/S. +broque/S. +broquer/a0p. +broquette/S. +brossage/S. +brosse/S. +brosser/a0p+ +brosserie/S. +brossette/S. +brosseuse/F. +brossière/F. +brou/S. +brouet/S. +brouettage/S. +brouette/S. +brouetter/a0p+ +brouhaha/S. +brouillade/S. +brouillage/S. +brouillamini/S. +brouillard/S. +brouillardeuse/W. +brouillassée/F. +brouillasser/a8p. +brouille/S. +brouillement/S. +brouiller/a0p+ +brouillerie/S. +brouilleuse/F. +brouillonne/F. +brouillonner/a0p+ +brouilly/S. +broum +broussaille/S. +broussaillement/S. +broussailleuse/W. +broussarde/F. +brousse/S. +broussin/S. +brout/S. +broutage/S. +broutard/S. +broutement/S. +brouter/a0p+ +brouteuse/F. +broutille/S. +brownie/S. +brownienne/F. +browniennement +browning/S. +broyage/S. +broyat/S. +broyer/a0p+ +broyeuse/F. +brrr +bru/S. +bruant/S. +bruccio/S. +brucella/S. +brucelles +brucellose/S. +bruche/S. +bruchon/S. +brucine/S. +brugeoise/F. +brugnon/S. +brugnonier/S. +bruine/S. +bruinée/F. +bruiner/a8p. +bruineuse/W. +bruir/f0p+ +bruire/yJ +bruissage/S. +bruissante/F. +bruissement/S. +bruisser/a0p. +bruit/S. +bruitage/S. +bruiter/a0p+ +bruiteuse/F. +brûlable/S. +brûlage/S. +brûlante/F. +brûle-bouts +brûlée/F. +brûle-gueule +brûlement/S. +brûle-parfum +brûle-parfum/S. +brûle-pourpoint +brûler/a0p+ +brûlerie/S. +brûleuse/F. +brûlis +brûloir/S. +brûlon/S. +brûlot/S. +brûlure/S. +brumaire/S. +brumale/W. +brumasser/a8p. +brume/S. +brumer/a8p. +brumeuse/W. +brumeusement +brumeusement +brumisateur/S. +brumisation/S. +brunante/S. +brunâtre/S. +brunch/A. +bruncher/a0p. +brune/F. +brunéienne/F. +brunette/F. +brunir/f0p+ +brunissage/S. +brunissante/F. +brunissement/S. +brunisseuse/F. +brunissoir/S. +brunissure/S. +brunoise/S. +brushing/S. +brushless +brusque/S. +brusquement +brusquer/a0p+ +brusquerie/S. +brutale/W. +brutalement +brutalisation/S. +brutaliser/a0p+ +brutalisme/S. +brutaliste/S. +brutalité/S. +brute/F. +brute/S. +brutisme/S. +bruxelloise/F. +bruxisme/S. +bruxomanie/S. +bruyamment +bruyance/S. +bruyante/F. +bruyère/S. +bryologie/S. +bryone/S. +bryophyte/S. +bryozoaire/S. +bu/||-- +buanderie/S. +buandière/F. +bubale/S. +bubon/S. +bubonique/S. +buccale/W. +buccin/S. +buccinateur/S. +bucco-dentaire/S. +bucco-génitale/W. +bucentaure/S. +bucéphale/S. +bûchage/S. +bûche/S. +bûcher/S. +bûcher/a0p+ +bûcheronnage/S. +bûcheronne/F. +bûcheronner/a0p. +bûchette/S. +bûcheuse/F. +bucolique/S. +bucoliquement +bucrane/S. +buddleia/S. +budget/S. +budgétaire/S. +budgétairement +budgéter/c0p+ +budgétisation/S. +budgétiser/a0p+ +budgétivore/S. +buée/S. +buffalo/S. +buffet/S. +buffetière/F. +bufflesse/F. +buffleterie/S. +buffletin/S. +bufflonne/F. +bug/S. +buggy/A. +bugle/S. +buglosse/S. +bugne/S. +bugrane/S. +buguer/a0p+ +build/S. +building/S. +buire/S. +buis +buissaie/S. +buisson/S. +buisson-ardent +buissonnante/F. +buissonnet/S. +buissonneuse/W. +buissonnière/F. +buissons-ardents +bulbaire/S. +bulbe/S. +bulbeuse/W. +bulbille/S. +bulb-keel/S. +bulgare/S. +bull/S. +bullage/S. +bullaire/S. +bullaire/S. +bulldog/S. +bulldozer/S. +bulle/S. +bullée/F. +buller/a0p. +bulletin/S. +bulletin-réponse +bulletins-réponse +bulleuse/W. +bull-finch/A. +bull-terrier/S. +bulot/S. +bun/S. +buna/S. +bungalow/S. +bunker/S. +bunkeriser/a0p+ +bunkériser/a0p+ +buprénorphine/S. +bupreste/S. +buraliste/S. +bure/S. +bureau/X. +bureaucrate/S. +bureaucratie/S. +bureaucratique/S. +bureaucratiquement +bureaucratisation/S. +bureaucratiser/a0p+ +bureaucratisme/S. +bureauticienne/F. +bureautique/S. +bureautique/S. +burèle/S. +burelée/F. +burelle/S. +burette/S. +burgau/X. +burgaudine/S. +burger/S. +burgonde/S. +burgrave/S. +burgraviat/S. +burin/S. +burinage/S. +buriner/a0p+ +burineuse/F. +burkinabè +burkinabé/S. +burkini/S. +burlat/S. +burlesque/S. +burlesque/S. +burlesquement +burlingue/S. +burne/S. +burnous +burn-out +buron/S. +buronnière/F. +burqa/S. +burrata/S. +burrito/S. +burséracée/S. +bursite/S. +burundaise/F. +bus +busard/S. +busc/S. +buse/S. +buselure/S. +buser/a0p+ +bush/A. +bushman/A. +business +businessman/A. +businesswoman/A. +busquée/F. +busserole/S. +bustamite/S. +buste/S. +bustière/F. +but/S. +butadiène/S. +butanal/S. +butane/S. +butanée/F. +butanier/S. +butanol/S. +bute/S. +butée/S. +butène/S. +buter/a0p+ +buteuse/F. +butin/S. +butinage/S. +butinante/F. +butinement/S. +butiner/a0p+ +butineuse/F. +butoir/S. +butome/S. +butor/S. +buttage/S. +butte/S. +butter/a0p+ +butteur/S. +buttoir/S. +butyle/S. +butylène/S. +butylique/S. +butyrate/S. +butyreuse/W. +butyrine/S. +butyrique/S. +butyromètre/S. +buvable/S. +buvard/S. +buvée/S. +buvetière/F. +buvette/S. +buveuse/F. +buvoter/a0p. +buxacée/S. +buxacée/S. +buzz +buzzer/a0p. +bye +bye-bye +by-pass +byssinose/S. +byssus +byte/S. +bytownite/S. +byzantine/F. +byzantinisme/S. +byzantiniste/S. +byzantinologie/S. +byzantinologue/S. +c +cDNA +cP/||-- +cSt/||-- +çà +ça +cab/S. +cabale/S. +cabaler/a0p. +cabaliste/S. +cabalistique/S. +cabalistiquement +caballero/S. +caban/S. +cabane/S. +cabaner/a0p+ +cabanette/S. +cabanon/S. +cabaret/S. +cabaretière/F. +cabas +cabasset/S. +cabèche/S. +cabécou/S. +cabernet/S. +cabestan/S. +cabiai/S. +cabillaud/S. +cabillot/S. +cabin-cruiser/S. +cabine/S. +cabiner/a0p. +cabinet/S. +câblage/S. +câble/S. +câbler/a0p+ +câblerie/S. +câbleuse/F. +câblière/F. +câbliste/S. +câblodistributeur/S. +câblodistribution/S. +câblogramme/S. +câblo-opérateur/S. +câblot/S. +cabocharde/F. +caboche/S. +cabochée/F. +cabochon/S. +cabossage/S. +cabosse/S. +cabosser/a0p+ +cabotage/S. +cabote/F. +caboter/a0p. +caboteur/S. +cabotinage/S. +cabotine/F. +cabotiner/a0p. +caboulot/S. +cabrage/S. +cabrement/S. +cabrer/a0p+ +cabri/S. +cabriole/S. +cabrioler/a0p. +cabriolet/S. +cabrouet/S. +cabus +caca +caca/S. +cacaber/a0p. +cacahuète/S. +cacaille/S. +cacao/S. +cacaotée/F. +cacaotière/F. +cacaoyère/F. +cacardement/S. +cacarder/a0p. +cacatoès +cacatois +cachaça/S. +cachalot/S. +cache/S. +cache-brassière +cache-cache +cache-cœur +cache-col +cache-corset +cachectique/S. +cache-entrée +cache-flamme +cache-lait +cache-lumière +cache-lumière/S. +cachemire/S. +cache-misère +cache-museau +cache-nez +cache-pot +cache-poussière +cache-prise +cacher/a0p+ +cache-radiateur +cachère/S. +cacherout/S. +cache-sexe +cachet/S. +cachetage/S. +cache-tampon +cacheter/d0p+ +cache-théière +cacheton/S. +cachetonner/a0p. +cachette/S. +cachexie/S. +cachiman/S. +cachot/S. +cachotter/a0p+ +cachotterie/S. +cachottière/F. +cachou/S. +cachucha/S. +cacique/S. +cacochyme/S. +cacochyme/S. +cacodylate/S. +cacodyle/S. +cacodylique/S. +cacographe/S. +cacographie/S. +cacolet/S. +cacologie/S. +cacophonie/S. +cacophonique/S. +cacosmie/S. +cacou/S. +cacou/S. +cactacée/S. +cactée/S. +cactus +c.-à-d +cadancher/a0p. +cadastrage/S. +cadastrale/W. +cadastration/S. +cadastre/S. +cadastrer/a0p+ +cadavéreuse/W. +cadavérique/S. +cadavre/S. +caddie/S. +caddy/S. +cade/S. +cadeau/X. +cadeauter/a0p+ +cadenas +cadenassable/S. +cadenassage/S. +cadenasser/a0p+ +cadence/S. +cadencement/S. +cadencer/a0p+ +cadenette/S. +cadette/F. +cadi/S. +cadmiage/S. +cadmie/S. +cadmium/S. +cadogan/S. +cadole/S. +cador/S. +cadrage/S. +cadran/S. +cadrante/F. +cadrat/S. +cadratin/S. +cadrature/S. +cadre/S. +cadrer/a0p+ +cadreuse/F. +cadriciel/S. +caduc/S. +caducée/S. +caducifoliée/F. +caducité/S. +caduque/F. +caduque/S. +cæcale/W. +cæcotrophie/S. +cæcum/S. +caennaise/F. +cænogenèse/S. +cæsine +cæsium/S. +cætera +cafardage/S. +cafarde/F. +cafarder/a0p+ +cafarderie/S. +cafardeuse/F. +cafardeuse/W. +café +café/S. +café-au-lait +café-concert +caféiculture/S. +caféière/F. +caféine/S. +caféinée/F. +caféique/S. +caféisme/S. +cafés-concerts +cafés-théâtres +cafetan/S. +cafeter/d0p+ +cafeteria/S. +cafétéria/S. +café-théâtre +cafetière/F. +cafouillage/S. +cafouiller/a0p. +cafouillis +cafre/S. +caftan/S. +cafter/a0p+ +cafteuse/F. +cage/S. +cageot/S. +cagerotte/S. +caget/S. +cagette/S. +cagibi/S. +cagnarde/F. +cagnarder/a0p. +cagne/S. +cagner/a0p. +cagneuse/W. +cagnotte/S. +cagole/S. +cagote/F. +cagoterie/S. +cagou/S. +cagouille/S. +cagoularde/F. +cagoule/S. +cagoulée/F. +cague/S. +caguer/a0p. +cahier/S. +cahin-caha +cahot/S. +cahotante/F. +cahotement/S. +cahoter/a0p+ +cahoteuse/W. +cahute/S. +caïd/S. +caïdat/S. +caïeu/X. +caillage/S. +caillassage/S. +caillasse/S. +caillasser/a0p+ +caille/S. +caillebotis +caillebotte/S. +caillebotter/a0p+ +caille-lait/S. +caillement/S. +cailler/a0p+ +cailleteau/S. +cailleteau/X. +cailleter/d0p. +caillette/S. +caillot/S. +caillou/X. +cailloutage/S. +caillouter/a0p+ +caillouteuse/W. +cailloutis +caïman/S. +caïmanter/a0p+ +caïpirinha/S. +caïque/S. +cairn/S. +cairote/S. +caisse/S. +caisserie/S. +caissette/S. +caissière/F. +caisson/S. +caissonnée/F. +cajeput/S. +cajeputier/S. +cajoler/a0p+ +cajolerie/S. +cajoleuse/F. +cajou/S. +cajun/S. +cake/S. +cake-walk/S. +cal/S. +cal/U.||-- +calable/S. +calabraise/F. +calade/S. +caladium/S. +calage/S. +calaisienne/F. +calaison/S. +calamar/S. +calambac/S. +calame/S. +calaminage/S. +calamine/S. +calaminer/a0p+ +calamistrer/a0p+ +calamite/S. +calamité/S. +calamiteuse/W. +calamus +calance/S. +calancher/a0p. +calandrage/S. +calandre/S. +calandrer/a0p+ +calandreuse/F. +calanque/S. +calao/S. +calavérite/S. +calcaire/S. +calcaire/S. +calcanéum/S. +calcarone/S. +calcédoine/S. +calcémie/S. +calcéolaire/S. +calcicole/S. +calcifère/S. +calciférol/S. +calcification/S. +calcifier/a0p+ +calcifuge/S. +calcin/S. +calcination/S. +calciner/a0p+ +calciphobe/S. +calcique/S. +calcite/S. +calcitonine/S. +calcitriol/S. +calcium/S. +calciurie/S. +calcosodique/S. +calcul/S. +calculabilité/S. +calculable/S. +calculatoire/S. +calculatrice/F. +calculer/a0p+ +calculette/S. +calculeuse/W. +caldarium/S. +caldeira/S. +cale/S. +calebasse/S. +calebassier/S. +calèche/S. +caleçon/S. +caleçonnade/S. +calédonienne/F. +caléfaction/S. +calembour/S. +calembredaine/S. +calendaire/S. +calendes +calendrier/S. +calendula/S. +cale-pied +cale-pied/S. +calepin/S. +calepinage/S. +calepiner/a0p+ +caler/a0p+ +caleter/d0p+ +caleuse/F. +calfat/S. +calfatage/S. +calfater/a0p+ +calfeutrage/S. +calfeutrement/S. +calfeutrer/a0p+ +calibrage/S. +calibration/S. +calibre/S. +calibrer/a0p+ +calibreuse/F. +calice/S. +caliche/S. +caliciforme/S. +calicot/S. +calicule/S. +calière/F. +califale/W. +califat/S. +calife/S. +californienne/F. +californium/S. +califourchon +câlin/S. +câline/F. +câlinement +câliner/a0p+ +câlinerie/S. +caliorne/S. +calisson/S. +calleuse/W. +call-girl/S. +calligramme/S. +calligraphe/S. +calligraphie/S. +calligraphier/a0p+ +calligraphique/S. +calligraphiquement +callipyge/S. +callose/S. +callosité/S. +callune/S. +calmante/F. +calmar/S. +calme/S. +calme/S. +calmement +calmer/a0p+ +calmir/f0p. +calo +caloduc/S. +calomel/S. +calomniatrice/F. +calomnie/S. +calomniée/F. +calomnier/a0p+ +calomnieuse/W. +calomnieusement +caloporteur/S. +caloporteuse/F. +calopsitte/S. +calorescence/S. +calorie/Um +calorifère/S. +calorification/S. +calorifique/S. +calorifuge/S. +calorifugeage/S. +calorifuger/a0p+ +calorifugeuse/F. +calorimètre/S. +calorimétrie/S. +calorimétrique/S. +calorique/S. +calorisation/S. +caloriser/a0p+ +calot/S. +calotin/S. +calotte/S. +calotter/a0p+ +caloyère/F. +calquage/S. +calque/S. +calquer/a0p+ +calqueuse/F. +calter/a0p+ +calumet/S. +calure/S. +calus +calva/S. +calvados +calvadosienne/F. +calvaire/S. +calville/S. +calvinisme/S. +calviniste/S. +calvitie/S. +calypso/S. +calzone/S. +caló +camaïeu/X. +camail/S. +camaldule/S. +camarade/S. +camaraderie/S. +camarde/F. +camarguaise/F. +camarilla/S. +camarine/S. +cambiaire/S. +cambiale/W. +cambiste/S. +cambium/S. +cambodgienne/F. +cambouis +cambrage/S. +cambrement/S. +cambrer/a0p+ +cambrien/S. +cambrienne/F. +cambriolage/S. +cambriole/S. +cambrioler/a0p+ +cambrioleuse/F. +cambrousard/S. +cambrousse/S. +cambrure/S. +cambuse/S. +cambusier/S. +cambuter/a0p+ +came/S. +camée/F. +camée/S. +caméléon/S. +caméléonienne/F. +camélia/S. +camélidé/S. +camelin/S. +cameline/S. +caméline/S. +camelle/S. +camelot/S. +camelote/S. +cameloter/a0p. +camembérer/c0p. +camembert/S. +camer/a0p+ +caméra/S. +cameraman/A. +camérière/F. +camériste/S. +camerlingat/S. +camerlingue/S. +camerounaise/F. +caméscope/S. +camion/S. +camion-citerne +camionnage/S. +camionner/a0p+ +camionnette/S. +camionneuse/F. +camions-citernes +camisard/S. +camisole/S. +camomille/S. +camouflage/S. +camouflante/F. +camoufler/a0p+ +camouflet/S. +camoufleur/S. +camp/S. +campagnarde/F. +campagne/S. +campagnol/S. +campanaire/S. +campane/S. +campanienne/F. +campaniforme/S. +campanile/S. +campaniste/S. +campanulacée/S. +campanulacée/S. +campanule/S. +campêche/S. +campement/S. +camper/a0p+ +campeuse/F. +camphène/S. +camphre/S. +camphrée/F. +camphrier/S. +campignienne/F. +camping/S. +camping-car/S. +camping-caravaning/S. +camping-gaz +campinoise/F. +campo/S. +campus +camuse/F. +canada/S. +canadair/S. +canadianisme/S. +canadienne/F. +canado-américaine/F. +canaille/S. +canaillement +canaillerie/S. +canaillocratie/S. +canal/X. +canalaire/S. +canaliculaire/S. +canalicule/S. +canalisable/S. +canalisation/S. +canalisatrice/F. +canaliser/a0p+ +cananéenne/F. +canapé/S. +canapé-lit +canapés-lits +canard/S. +canardeau/X. +canarder/a0p+ +canardière/F. +canari/S. +canasson/S. +canasta/S. +cancale/S. +cancan/S. +cancaner/a0p. +cancanière/F. +cancel/S. +cancer/S. +cancéreuse/W. +cancérigène/S. +cancérigène/S. +cancérisation/S. +cancériser/a0p+ +cancérogène/S. +cancérogène/S. +cancérogenèse/S. +cancérologie/S. +cancérologique/S. +cancérologue/S. +cancérophobie/S. +cancéropole/S. +canche/S. +cancoillotte/S. +cancre/S. +cancrelat/S. +cancrinite/S. +cancroïde/S. +candaulisme/S. +candéfaction/S. +candela/Um +candélabre/S. +candeur/S. +candidate/F. +candidater/a0p. +candidature/S. +candide/S. +candidement +candidose/S. +candir/f0p+ +candisation/S. +candomblé/S. +cane/S. +canéficier/S. +canepetière/S. +canéphore/S. +caner/a0p. +canetage/S. +canetière/S. +caneton/S. +canette/S. +canevas +canezou/S. +cangue/S. +caniche/S. +caniculaire/S. +canicule/S. +canidé/S. +canif/S. +canine/F. +canine/S. +canisse/S. +canitie/S. +caniveau/X. +canna/S. +cannabinacée/S. +cannabinacée/S. +cannabinoïde/S. +cannabinoïde/S. +cannabinol/S. +cannabique/S. +cannabis +cannabisme/S. +cannage/S. +cannaie/S. +canne/S. +canneberge/S. +cannelé/S. +canneler/d0p+ +cannelier/S. +cannelle +cannelle/S. +cannelloni +cannelloni/S. +cannelure/S. +canner/a0p+ +cannetille/S. +cannette/S. +canneuse/F. +cannibale/S. +cannibalesque/S. +cannibalisation/S. +cannibaliser/a0p+ +cannibalisme/S. +cannisse/S. +cannoise/F. +canoë/S. +canoéisme/S. +canoéiste/S. +canoë-kayak +canoës-kayaks +canon/S. +canon/S. +cañon/S. +canoniale/W. +canonicat/S. +canonicité/S. +canonique/S. +canoniquement +canonisable/S. +canonisation/S. +canoniser/a0p+ +canoniste/S. +canonnade/S. +canonnage/S. +canonner/a0p+ +canonnière/F. +canope/S. +canopée/S. +canot/S. +canotage/S. +canoter/a0p. +canoteuse/F. +canotière/F. +cantabile +cantabile +cantabrique/S. +cantal/S. +cantaloup/S. +cantate/S. +cantatrice/S. +canter/S. +canthare/S. +cantharellale/S. +cantharide/S. +cantharidine/S. +cantilène/S. +cantilever/S. +cantilever/S. +cantillation/S. +cantine/S. +cantiner/a0p. +cantinière/F. +cantique/S. +canton/S. +cantonade +cantonaise/F. +cantonale/W. +cantonalisation/S. +cantonalisme/S. +cantonaliste/S. +cantonnement/S. +cantonner/a0p+ +cantonnière/F. +cantor/S. +cantre/S. +canulante/F. +canular/S. +canularesque/S. +canule/S. +canuler/a0p+ +canuse/S. +canut/S. +canyon/S. +canyoning/S. +canyonisme/S. +canyoniste/S. +canzone/I. +caoua/S. +caouane/S. +caouanne/S. +caoutchouc/S. +caoutchoutage/S. +caoutchouter/a0p+ +caoutchouteuse/W. +caoutchoutière/F. +cap/S. +capable/S. +capablement +capacimètre/S. +capacitaire/S. +capacitance/S. +capacitation/S. +capacité/S. +capacitisme/S. +capacitiste/S. +capacitive/F. +capahuter/a0p+ +caparaçon/S. +caparaçonner/a0p+ +cape/S. +capée/F. +capéer/a0p. +capelage/S. +capelan/S. +capeler/d0p+ +capelet/S. +capeline/S. +capésienne/F. +capétienne/F. +capeyer/a0p. +capharnaüm/S. +cap-hornière/F. +capillaire/S. +capillariose/S. +capillarité/S. +capillaroscopie/S. +capillicultrice/F. +capilliculture/S. +capillotracter/a0p+ +capilotade/S. +capiston/S. +capitaine/S. +capitainerie/S. +capitale/W. +capitalement +capitalisable/S. +capitalisante/F. +capitalisation/S. +capitaliser/a0p+ +capitalisme/S. +capitaliste/S. +capitalistique/S. +capital-risque +capital-risqueur/S. +capitan/S. +capitanat/S. +capitation/S. +capitaux-risques +capite/S. +capitée/F. +capiteuse/W. +capitole/S. +capitoline/F. +capiton/S. +capitonnage/S. +capitonner/a0p+ +capitoul/S. +capitulaire/S. +capitulairement +capitularde/F. +capitulation/S. +capitule/S. +capitulée/F. +capituler/a0p. +capodastre/S. +capoeira/S. +caponne/F. +caponner/a0p. +caponnière/S. +caporale/W. +caporaliser/a0p+ +caporalisme/S. +capot/S. +capotage/S. +capote/S. +capoter/a0p+ +cappella +cappuccino/S. +câpre/S. +capricante/F. +capriccio/S. +caprice/S. +capricieuse/W. +capricieusement +capricorne/S. +câprier/S. +caprification/S. +caprifiguier/S. +caprifoliacée/S. +caprifoliacée/S. +caprine/F. +capriné/S. +caprique/S. +caproïque/S. +capron/S. +capronier/S. +caprylique/S. +capsaïcine/S. +capselle/S. +capsicum/S. +capside/S. +capsulage/S. +capsulaire/S. +capsule/S. +capsuler/a0p+ +capsulerie/S. +capsuleuse/S. +capsulite/S. +captable/S. +captage/S. +captal/S. +captante/F. +captation/S. +captative/F. +captativité/S. +captatoire/S. +captatrice/F. +captcha/S. +capter/a0p+ +capte-suie +capteur/S. +captieuse/W. +captieusement +captivante/F. +captive/F. +captiver/a0p+ +captivité/S. +capture/S. +capturer/a0p+ +capuce/S. +capuche/S. +capuchon/S. +capuchonner/a0p+ +capucinade/S. +capucine/F. +capulet/S. +cap-verdienne/F. +caque/S. +caquelon/S. +caquer/a0p+ +caquet/S. +caquetage/S. +caquetante/F. +caquètement/S. +caqueter/d0p. +car +car/S. +carabe/S. +carabin/S. +carabine/S. +carabinée/F. +carabinier/S. +carabistouille/S. +caracal/S. +caraco/S. +caracole/S. +caracoler/a0p. +caractère/S. +caractérielle/F. +caractériellement +caractérisable/S. +caractérisante/F. +caractérisation/S. +caractériser/a0p+ +caractéristique/S. +caractéristique/S. +caractéristiquement +caractérologie/S. +caractérologique/S. +carafe/S. +carafon/S. +caraïbe/S. +caraïsme/S. +caraïte/S. +caramba +carambolage/S. +carambole/S. +caramboler/a0p+ +carambolier/S. +carambouillage/S. +carambouille/S. +carambouilleur/S. +caramel +caramel/S. +caramélée/F. +caramélisation/S. +caraméliser/a0p+ +carapace/S. +carapater/a0p+ +caraque/S. +carassin/S. +carat/S. +caravagesque/S. +caravagisme/S. +caravagiste/S. +caravanage/S. +caravane/S. +caravanière/F. +caravaning/S. +caravansérail/S. +caravelle/S. +carbamate/S. +carbamique/S. +carbène/S. +carbet/S. +carbocation/S. +carbochimie/S. +carbochimique/S. +carbogène/S. +carbohémoglobine/S. +carbonado/S. +carbonara/S. +carbonarisme/S. +carbonaro/I. +carbonatation/S. +carbonate/S. +carbonater/a0p+ +carbonatite/S. +carbone/S. +carbonée/F. +carbonifère/S. +carbonique/S. +carbonisation/S. +carboniser/a0p+ +carbonitruration/S. +carbonitrurer/a0p+ +carbonnade/S. +carbono/S. +carbonyle/S. +carbonylée/F. +carborane/S. +carborundum/S. +carbosulfure/S. +carboxamide/S. +carboxyhémoglobine/S. +carboxylase/S. +carboxylate/S. +carboxylation/S. +carboxyle/S. +carboxyle/S. +carboxylique/S. +carburant/S. +carburateur/S. +carburation/S. +carbure/S. +carburéacteur/S. +carburer/a0p+ +carburière/F. +carburologue/S. +carbutamide/S. +carcadet/S. +carcailler/a0p. +carcajou/S. +carcan/S. +carcasse/S. +carcel/S. +carcel/S. +carcérale/W. +carcinogène/S. +carcinogène/S. +carcinogenèse/S. +carcinogénétique/S. +carcinoïde/S. +carcinologie/S. +carcinologique/S. +carcinomateuse/W. +carcinome/S. +carcinose/S. +cardage/S. +cardamine/S. +cardamome/S. +cardamone/S. +cardan/S. +carde/S. +cardé/S. +carder/a0p+ +cardère/S. +carderie/S. +cardeuse/F. +cardia/S. +cardiale/W. +cardialgie/S. +cardiaque/S. +cardiatomie/S. +cardigan/S. +cardinal/X. +cardinalat/S. +cardinale/W. +cardinalice/S. +cardinalité/S. +cardiofréquencemètre/S. +cardiogénique/S. +cardiogramme/S. +cardiographe/S. +cardiographie/S. +cardiographique/S. +cardioïde/S. +cardioïde/S. +cardiologie/S. +cardiologique/S. +cardiologue/S. +cardiomégalie/S. +cardiomyopathie/S. +cardiopathie/S. +cardiopulmonaire/S. +cardio-pulmonaire/S. +cardiorespiratoire/S. +cardio-respiratoire/S. +cardiotomie/S. +cardiotonique/S. +cardiotonique/S. +cardiotoxique/S. +cardio-training/S. +cardiovasculaire/S. +cardio-vasculaire/S. +cardite/S. +cardon/S. +carême/S. +carénage/S. +carence/S. +carencer/a0p+ +carène/S. +caréner/c0p+ +carentielle/F. +caressante/F. +caresse/S. +caresser/a0p+ +caresseuse/F. +caret/S. +carex +car-ferry/A. +cargaison/S. +cargo/S. +cargue/S. +carguer/a0p+ +cari/S. +cariacou/S. +cariatide/S. +caribe/S. +caribe/S. +caribéenne/F. +caribou/S. +caricaturale/W. +caricaturalement +caricature/S. +caricaturer/a0p+ +caricaturiste/S. +carie/S. +carier/a0p+ +carieuse/W. +carignan/S. +carillon/S. +carillonnante/F. +carillonnement/S. +carillonner/a0p+ +carillonneuse/F. +carinate/S. +cariogène/S. +caristade/S. +cariste/S. +caritative/F. +car-jacking/S. +carlin/S. +carline/S. +carlingue/S. +carlinguier/S. +carlisme/S. +carliste/S. +carmagnole/S. +carme/S. +carmel/S. +carmeline/S. +carmeline/S. +carmélitaine/F. +carmélite/S. +carmélite/S. +carmer/a0p+ +carmin +carmin/S. +carminative/F. +carminer/a0p+ +carnage/S. +carnassière/F. +carnation/S. +carnaval/S. +carnavalesque/S. +carnavalière/F. +carne/S. +carneau/X. +carnée/F. +carnèle/S. +carnet/S. +carnettiste/S. +carnier/S. +carnification/S. +carnifier/a0p+ +carnisme/S. +carniste/S. +carnitine/S. +carnivore/S. +carnivorisme/S. +carnotzet/S. +carogne/S. +caroline/S. +carolingienne/F. +carolo/S. +carolorégienne/F. +carolus +caron/S. +caronade/S. +caroncule/S. +carotène/S. +caroténoïde/S. +caroténoïde/S. +carotide/S. +carotidienne/F. +carottage/S. +carotte +carotte/S. +carotter/a0p+ +carotteuse/F. +carottière/F. +caroube/S. +caroubier/S. +carouble/S. +caroubler/a0p+ +carouge/S. +carpaccio/S. +carpatique/S. +carpe/S. +carpeau/X. +carpelle/S. +carpette/S. +carpettière/F. +carpicultrice/F. +carpiculture/S. +carpienne/F. +carpillon/S. +carpocapse/S. +carpologie/S. +carpophore/S. +carquois +carragheen/S. +carrare/S. +carre/S. +carreau/X. +carreautée/F. +carrée/F. +carrefour/S. +carrelage/S. +carreler/d0p+ +carrelet/S. +carreleuse/F. +carrément +carrer/a0p+ +carrick/S. +carrière/F. +carriérisme/S. +carriériste/S. +carriole/S. +carrossable/S. +carrossage/S. +carrosse/S. +carrosser/a0p+ +carrosserie/S. +carrossière/F. +carrousel/S. +carroyage/S. +carroyer/a0p+ +carrure/S. +carry/S. +cartable/S. +carte/S. +cartel/S. +carte-lettre +cartellaire/S. +cartellisation/S. +carter/S. +carter/a0p+ +carte-réponse +carterie/S. +cartésianisme/S. +cartésienne/F. +cartes-lettres +cartes-réponses +cartes-vues +carte-vue +carthaginoise/F. +carthame/S. +cartier/S. +cartilage/S. +cartilagineuse/W. +cartisane/S. +cartogramme/S. +cartographe/S. +cartographie/S. +cartographier/a0p+ +cartographique/S. +cartomancie/S. +cartomancienne/F. +carton/S. +cartonnage/S. +cartonner/a0p+ +cartonnerie/S. +cartonneuse/W. +cartonnière/F. +carton-pâte +cartons-pâtes +cartoon/S. +cartoonesque/S. +cartothèque/S. +cartouche/S. +cartoucher/a0p. +cartoucherie/S. +cartouchière/S. +cartulaire/S. +cartusienne/F. +carvacrol/S. +carvi/S. +cary/S. +caryatide/S. +caryocinèse/S. +caryogamie/S. +caryologie/S. +caryophyllacée/S. +caryophyllacée/S. +caryopse/S. +caryotype/S. +cas +casablancaise/F. +casamançaise/F. +casanière/F. +casaque/S. +casaquin/S. +casbah/S. +cascabelle/S. +cascade/S. +cascader/a0p. +cascadeuse/F. +cascatelle/S. +case/S. +caséeuse/W. +caséification/S. +caséifier/a0p+ +caséine/S. +casemate/S. +casemater/a0p+ +caser/a0p+ +caserne/S. +casernement/S. +caserner/a0p+ +casernière/F. +caseyeur/S. +cash +cash/S. +casher +cash-flow/S. +cashmere/S. +casier/S. +casimir/S. +casino/S. +casinotière/F. +casoar/S. +casquante/F. +casque/S. +casquer/a0p+ +casquette/S. +casquettière/F. +cassable/S. +cassage/S. +cassante/F. +cassate/S. +cassation/S. +cassave/S. +casse/S. +casseau/X. +casse-cou +casse-couilles +casse-croûte +casse-croûter/a0p. +casse-cul +casse-dalle +casse-fil/S. +casse-graine +casse-gueule +casseille/S. +casseillier/S. +cassement/S. +casse-noisettes +casse-noix +casse-pattes +casse-pieds +casse-pierre +casse-pierre/S. +casse-pierres +casse-pipe +casse-pipe/S. +casse-pipes +casse-pot/S. +casser/a0p+ +casserole/S. +casserolière/F. +casse-tête +casse-tête/S. +cassetin/S. +casse-tout +cassette/S. +casseuse/F. +casse-vitesse/S. +cassier/S. +cassine/S. +cassis +cassissier/S. +cassitérite/S. +cassolette/S. +casson/S. +cassonade/S. +cassoulet/S. +cassure/S. +castagne/S. +castagner/a0p+ +castagnettes +castard/S. +castard/S. +caste/S. +castel/S. +castelet/S. +castillane/F. +castillonnaise/F. +castine/S. +casting/S. +castor/S. +castoréum/S. +castrale/W. +castramétation/S. +castrat/S. +castration/S. +castratrice/F. +castrer/a0p+ +castrisme/S. +castriste/S. +casualité/S. +casuel/S. +casuelle/F. +casuellement +casuiste/S. +casuistique/S. +casuistique/S. +catabatique/S. +catabolique/S. +catabolisme/S. +catabolite/S. +catachrèse/S. +catachrétique/S. +cataclysmale/W. +cataclysme/S. +cataclysmique/S. +catacombe/S. +catadioptre/S. +catadioptrique/S. +catadrome/S. +catafalque/S. +catagène/S. +catagenèse/S. +cataire/S. +cataire/S. +catalane/F. +catalase/S. +catalectique/S. +catalepsie/S. +cataleptique/S. +catallactique/S. +catallactique/S. +catallaxie/S. +catalogage/S. +catalogne/S. +catalographie/S. +catalographique/S. +catalogue/S. +cataloguer/a0p+ +catalogueuse/F. +catalpa/S. +catalyse/S. +catalyser/a0p+ +catalyseur/S. +catalytique/S. +catamaran/S. +cataméniale/W. +cataphore/S. +cataphorèse/S. +cataphote/S. +cataphracte/S. +cataplasme/S. +cataplectique/S. +cataplexie/S. +catapultable/S. +catapultage/S. +catapulte/S. +catapulter/a0p+ +cataracte/S. +catarhinien/S. +catarrhale/W. +catarrhe/S. +catarrheuse/W. +catastrophe/S. +catastropher/a0p+ +catastrophique/S. +catastrophiquement +catastrophisme/S. +catastrophiste/S. +catatonie/S. +catatonique/S. +catch/S. +catcher/a0p. +catcheuse/F. +caté/S. +catéchèse/S. +catéchétique/S. +catéchétique/S. +catéchine/S. +catéchisation/S. +catéchiser/a0p+ +catéchisme/S. +catéchiste/S. +catéchistique/S. +catécholamine/S. +catéchuménat/S. +catéchumène/S. +catégorématique/S. +catégorème/S. +catégoriale/F. +catégorie/S. +catégorielle/F. +catégorique/S. +catégoriquement +catégorisante/F. +catégorisation/S. +catégoriser/a0p+ +catelle/S. +caténaire/S. +caténaire/S. +caténairiste/S. +catgut/S. +cathare/S. +catharisme/S. +catharsis +cathartique/S. +cathartique/S. +cathedra +cathédrale/S. +cathédrale/W. +cathèdre/S. +cathepsine/S. +catherinette/S. +cathéter/S. +cathétérisme/S. +cathétomètre/S. +catho/S. +cathode/S. +cathodique/S. +cathodoluminescence/S. +catholicisante/F. +catholiciser/a0p+ +catholicisme/S. +catholicité/S. +catholique/S. +catholiquement +cati/S. +catilinaire/S. +catimini +catin/S. +catiner/a0p+ +cation/S. +cationique/S. +catir/f0p+ +catissage/S. +catoblépas +catogan/S. +catoptrique/S. +catoptrique/S. +cattleya/S. +caucasienne/F. +caucasique/S. +cauchemar/S. +cauchemarder/a0p. +cauchemardesque/S. +cauchemardeuse/W. +caucus +caudale/W. +caudalie/S. +caudataire/S. +caudataire/S. +caudillo/S. +caudine/S. +caudrette/S. +caulescente/F. +caulicole/S. +caulicole/S. +caulinaire/S. +cauris +causa +causale/W. +causalement +causalgie/S. +causalgique/S. +causalisme/S. +causalité/S. +causante/F. +causative/F. +cause/S. +causer/a0p+ +causerie/S. +causette/S. +causeuse/F. +causse/S. +caussenarde/F. +causticité/S. +caustique/S. +caustiquement +cautèle/S. +cauteleuse/W. +cauteleusement +cautère/S. +cautérisante/F. +cautérisation/S. +cautériser/a0p+ +caution/S. +cautionnement/S. +cautionner/a0p+ +cavacher/a0p. +cavage/S. +cavaillon/S. +cavalcade/S. +cavalcader/a0p. +cavalcadour/S. +cavale/S. +cavaler/a0p+ +cavalerie/S. +cavaleuse/F. +cavalière/F. +cavalièrement +cavatine/S. +cave/S. +caveau/X. +caveçon/S. +cavée/S. +caver/a0p+ +caverne/S. +caverneuse/W. +caverneusement +cavernicole/S. +cavet/S. +caveuse/F. +caviar/S. +caviardage/S. +caviarder/a0p+ +cavicorne/S. +caviste/S. +cavitaire/S. +cavitation/S. +cavité/S. +cd/U.||-- +ce +céans +cébette/S. +cébiste/S. +ceci +cécidie/S. +cécidomyie/S. +cécilie/S. +cécité/S. +cédante/F. +céder/c0p+ +cédérom/S. +cédétiste/S. +cedex +cédille/S. +cédraie/S. +cédrat/S. +cédratier/S. +cèdre/S. +cedrela/S. +cédrière/S. +cédulaire/S. +cédule/S. +cégep/S. +cégésimale/W. +cégétiste/S. +cégotter/a0p+ +ceindre/wB +ceinturage/S. +ceinture/S. +ceinturer/a0p+ +ceinturière/F. +ceinturon/S. +cela +céladon +céladon/S. +célébrant/S. +célébrante/F. +célébration/S. +célèbre/S. +célébrer/c0p+ +celebret/S. +célébrissime/S. +célébrité/S. +celer/b0p+ +céleri/S. +célérifère/S. +céleri-rave +céleris-raves +célérité/S. +célesta/S. +céleste/S. +célestement +célestin/S. +célibat/S. +célibataire/S. +célibattante/F. +cella/S. +celle/S. +celle-ci +celle-là +cellérière/F. +celles-ci +celles-là +cellier/S. +cellobiose/S. +cellophane/S. +cellophanée/F. +cellophaneuse/S. +cellulaire/S. +cellulairement +cellular/S. +cellulase/S. +cellule/S. +celluleuse/W. +cellulite/S. +cellulitique/S. +celluloïd/S. +cellulose/S. +cellulosique/S. +celte/S. +celtibère/S. +celtique/S. +celtisante/F. +celtisme/S. +celtitude/S. +celtium/S. +celtomane/S. +celtomanie/S. +celto-romaine/F. +celui +celui-ci +celui-là +cément/S. +cémentation/S. +cémenter/a0p+ +cémenteuse/W. +cémentite/S. +cénacle/S. +cendre/S. +cendrer/a0p+ +cendreuse/W. +cendrier/S. +cendrillon/S. +cène/S. +cenelle/S. +cenellier/S. +cénesthésie/S. +cénesthésique/S. +cénesthopathie/S. +cénesthopathique/S. +cénobite/S. +cénobitique/S. +cénobitisme/S. +cénotaphe/S. +cénozoïque/S. +cens +censée/F. +censément +censeur/S. +censier/S. +censière/F. +censitaire/S. +censive/S. +censorat/S. +censoriale/W. +censuelle/F. +censurable/S. +censure/S. +censurer/a0p+ +cent/S. +cent/S= +centaine/S. +centaurée/S. +centauresse/F. +centavo/S. +centenaire/S. +centenier/S. +centennale/W. +center/a0p+ +centésimale/W. +centiare/S. +centibar/S. +centième/S. +centigrade/S. +centilage/S. +centile/S. +centime/S. +centimétrique/S. +centipoise/S. +centistokes +cent-milliardième/S. +cent-millième/S. +cent-millionième/S. +centon/S. +centrafricaine/F. +centrage/S. +centrale/W. +centralement +centralienne/F. +centralisation/S. +centralisatrice/F. +centraliser/a0p+ +centralisme/S. +centraliste/S. +centralité/S. +centraméricaine/F. +centration/S. +centre/S. +centre-auto +centre-avant +centrer/a0p+ +centres-autos +centres-avant +centres-tirs +centres-villes +centre-tir +centreuse/F. +centre-ville +centrifugation/S. +centrifuge/S. +centrifuger/a0p+ +centrifugeuse/F. +centriole/S. +centripète/S. +centrisme/S. +centriste/S. +centrolécithe/S. +centromère/S. +centromérique/S. +centrosome/S. +centrosymétrique/S. +centumvir/S. +centuple/S. +centupler/a0p+ +centurie/S. +centurion/S. +cénure/S. +cénurose/S. +cep/S. +cépage/S. +cèpe/S. +cépée/S. +cependant +céphalalgie/S. +céphalée/F. +céphalée/S. +céphalique/S. +céphalisation/S. +céphalocordé/S. +céphalon/S. +céphalophore/S. +céphalopode/S. +céphalopode/S. +céphaloptère/S. +céphalo-rachidienne/F. +céphalosporine/S. +céphalothorax +céphéide/S. +cérambycidé/S. +cérambyx +cérame/S. +céramide/S. +céramique/S. +céramiste/S. +céramographie/S. +céramologie/S. +céramologue/S. +céraste/S. +cérastoculture/S. +cérat/S. +cératopsien/S. +cerbère/S. +cercaire/S. +cerce/S. +cerceau/X. +cerclage/S. +cercle/S. +cercler/a0p+ +cercopithèque/S. +cercosporiose/S. +cercueil/S. +céréale/S. +céréalicultrice/F. +céréaliculture/S. +céréalière/F. +cérébelleuse/W. +cérébrale/W. +cérébralement +cérébralisation/S. +cérébraliser/a0p+ +cérébralisme/S. +cérébralité/S. +cérébroside/S. +cérébro-spinale/W. +cérébrovasculaire/S. +cérébro-vasculaire/S. +cérémoniaire/S. +cérémonial/S. +cérémoniale/F. +cérémonialisme/S. +cérémonie/S. +cérémonielle/F. +cérémoniellement +cérémonieuse/W. +cérémonieusement +cerf/S. +cerfeuil/S. +cerfs-volants +cerfs-volistes +cerf-volant +cerf-voliste +cérifère/S. +cerisaie/S. +cerise +cerise/S. +cerisette/S. +cerisier/S. +cérite/S. +cérithe/S. +cérium/S. +cerne/S. +cerneau/X. +cerner/a0p+ +cernier/S. +céroféraire/S. +céroplastique/S. +cerque/S. +certaine/F. +certaine/F. +certainement +certes +certifiante/F. +certificat/S. +certification/S. +certificatrice/F. +certifier/a0p+ +certitude/S. +cérulée/F. +céruléenne/F. +cérumen/S. +cérumineuse/W. +céruse/S. +cérusite/S. +cervaison/S. +cerveau/X. +cervelas +cervelet/S. +cervelle/S. +cervicale/W. +cervicalgie/S. +cervicarthrose/S. +cervicite/S. +cervidé/S. +cervier/S. +cervoise/S. +ces +césalpiniacée/S. +césalpiniacée/S. +césar/S. +césarienne/F. +césariser/a0p+ +césarisme/S. +césaropapisme/S. +césaro-papisme/S. +césine +césium/S. +cespiteuse/W. +cessante/F. +cessation/S. +cesse +cesser/a0p+ +cessez-le-feu +cessibilité/S. +cessible/S. +cession/S. +cessionnaire/S. +c'est-à-dire +ceste/S. +cestode/S. +césure/S. +cet +cétacé/S. +cétane/S. +céteau/X. +cétène/S. +cetera +cétérach/S. +cétoacidose/S. +cétogène/S. +cétohexose/S. +cétoine/S. +cétol/S. +cétolisation/S. +cétologie/S. +cétologique/S. +cétologiste/S. +cétologue/S. +cétone/S. +cétonémie/S. +cétonique/S. +cétonurie/S. +cétose/S. +cette +cétylique/S. +ceusses +ceux +ceux-ci +ceux-là +cévenole/F. +ceviche/S. +ceylanaise/F. +cézannienne/F. +cézigue +cf +cgr/||-- +ch/||-- +chaabi/S. +chaâbi/S. +chabichou/S. +chabler/a0p+ +chablis +chabot/S. +chabraque/S. +chabrol/S. +chabrot/S. +chacal/S. +cha-cha-cha +chachlik/S. +chaconne/S. +chacun +chacune +chadburn/S. +chadouf/S. +chaféisme/S. +chafiite/S. +chafouine/F. +chagrin/S. +chagrinante/F. +chagrine/F. +chagriner/a0p+ +chah/S. +chahada/S. +chahut/S. +chahuter/a0p+ +chahuteuse/F. +chai/S. +chaille/S. +chaînage/S. +chaîne/S. +chaîner/a0p+ +chaînetière/F. +chaînette/S. +chaîneuse/F. +chaînière/F. +chaîniste/S. +chaînon/S. +chair/S. +chaire/S. +chaise/S. +chaisière/F. +chakra/S. +chalandage/S. +chalande/F. +chalandise/S. +chalaze/S. +chalazion/S. +chalcocite/S. +chalcogène/S. +chalcographe/S. +chalcographie/S. +chalcolite/S. +chalcolithique/S. +chalcophile/S. +chalcopyrite/S. +chalcosine/S. +chaldaïque/S. +chaldéenne/F. +châle/S. +chalet/S. +chaleur/S. +chaleureuse/W. +chaleureusement +châlit/S. +challenge/S. +challenger/S. +challengeuse/F. +chaloir/pQ +chalon/S. +chalonnaise/F. +chaloupe/S. +chaloupée/F. +chalouper/a0p. +chalumeau/X. +chalumiste/S. +chalut/S. +chalutage/S. +chaluter/a0p+ +chalutier/S. +chamade/S. +chamærops +chamaille/S. +chamailler/a0p+ +chamaillerie/S. +chamailleuse/F. +chamaillis +chamane/F. +chamanique/S. +chamanisme/S. +chamaniste/S. +chamanistique/S. +chamarre/S. +chamarrer/a0p+ +chamarrure/S. +chambard/S. +chambardement/S. +chambarder/a0p+ +chambellan/S. +chambellanie/S. +chambertin/S. +chamboulement/S. +chambouler/a0p+ +chambranle/S. +chambray/S. +chambre/S. +chambrée/S. +chambrer/a0p+ +chambrette/S. +chambreuse/F. +chambrière/F. +chambriste/S. +chameau/X. +chameauser/a0p. +chamelier/S. +chamelle/S. +chamito-sémitique/S. +chamito-sémitique/S. +chamois +chamois +chamoisage/S. +chamoiser/a0p+ +chamoiserie/S. +chamoisette/S. +chamoiseuse/F. +chamoisine/S. +chamotte/S. +champ/S. +champagne/S. +champagnisation/S. +champagniser/a0p+ +champart/S. +champée/F. +champenoise/F. +champêtre/S. +champi/S. +champi/S. +champignon/S. +champignonneuse/F. +champignonneuse/W. +champignonnière/S. +champignonniste/S. +championnat/S. +championne/F. +champisse/S. +champisse/S. +champlever/b0p+ +chamsin/S. +chançarde/F. +chance/S. +chancel/S. +chancelante/F. +chanceler/d0p. +chancelière/F. +chancellement/S. +chancellerie/S. +chancetiquer/a0p. +chanceuse/W. +chancir/f0p+ +chancissure/S. +chancre/S. +chancrelle/S. +chandail/S. +chandeleur/S. +chandelier/S. +chandelle/S. +chanfrein/S. +chanfreiner/a0p+ +chanfreineuse/S. +change/S. +changeable/S. +changeante/F. +changement/S. +changer/a0p+ +changeuse/F. +chanlatte/S. +chanoinesse/F. +chanson/S. +chansonner/a0p+ +chansonnette/S. +chansonnière/F. +chanstiquer/a0p+ +chant/S. +chantable/S. +chantage/S. +chantante/F. +chanteau/X. +chantefable/S. +chantepleure/S. +chanter/a0p+ +chanterelle/S. +chanteuse/F. +chantier/S. +chantignole/S. +chantignolle/S. +chantilly +chantoir/S. +chantonnement/S. +chantonner/a0p+ +chantournage/S. +chantournement/S. +chantourner/a0p+ +chantourneuse/F. +chantre/S. +chantrerie/S. +chanvre/S. +chanvreur/S. +chanvreuse/S. +chanvrière/F. +chaos +chaosienne/F. +chaotique/S. +chaotiquement +chaouch/S. +chaource/S. +chap +chapardage/S. +chaparder/a0p+ +chapardeuse/F. +chape/S. +chapeau/X. +chapeautage/S. +chapeauter/a0p+ +chapée/F. +chapelain/S. +chapeler/d0p+ +chapelet/S. +chapelière/F. +chapelle/S. +chapellenie/S. +chapellerie/S. +chapelure/S. +chaperon/S. +chaperonnage/S. +chaperonner/a0p+ +chapiste/S. +chapiteau/X. +chapitrage/S. +chapitrale/W. +chapitre/S. +chapitrer/a0p+ +chapka/S. +chaplinesque/S. +chapon/S. +chaponnage/S. +chaponner/a0p+ +chapska/S. +chaptalisation/S. +chaptaliser/a0p+ +chaque +char/S. +charabia/S. +charade/S. +charadriidé/S. +charadriiforme/S. +charançon/S. +charançonnée/F. +charango/S. +charbon/S. +charbonnage/S. +charbonner/a0p+ +charbonnerie/S. +charbonnette/S. +charbonneuse/W. +charbonnière/F. +charcler/a0p+ +charcutage/S. +charcutaille/S. +charcuter/a0p+ +charcuterie/S. +charcutière/F. +chardon/S. +chardonnay/S. +chardonneret/S. +charentaise/F. +charge/S. +chargeable/S. +chargée/F. +chargement/S. +charger/a0p+ +chargeuse/F. +charia/S. +chariboter/a0p. +chariot/S. +chariotage/S. +chariotée/S. +charioter/a0p+ +charismatique/S. +charismatisme/S. +charisme/S. +charitable/S. +charitablement +charité/S. +charivari/S. +charlatan/S. +charlatanerie/S. +charlatanesque/S. +charlatanisme/S. +charlater/a0p. +charleston/S. +charlot/S. +charlotte/S. +charmante/F. +charme/S. +charmer/a0p+ +charmeuse/F. +charmille/S. +charmoie/S. +charnelle/F. +charnellement +charnier/S. +charnière/S. +charnue/F. +charnure/S. +charognage/S. +charognarde/F. +charogne/S. +charognerie/S. +charolaise/F. +charpentage/S. +charpente/S. +charpenter/a0p+ +charpenterie/S. +charpentière/F. +charpie/S. +charrée/S. +charretée/S. +charretière/F. +charretin/S. +charreton/S. +charrette/S. +charriage/S. +charrier/a0p+ +charrière/S. +charriot/S. +charriotage/S. +charriotée/S. +charrioter/a0p+ +charroi/S. +charronnage/S. +charronne/F. +charroyer/a0p+ +charroyeur/S. +charruage/S. +charrue/S. +charte/S. +chartée/S. +charte-partie +charter/S. +chartériser/a0p+ +chartes-parties +chartil/S. +chartisme/S. +chartiste/S. +chartraine/F. +chartreuse/W. +chartrier/S. +chas +chassable/S. +chasse/S. +châsse/S. +chasse-clou/S. +chasse-clous +chassé-croisé +chasséenne/F. +chasse-goupille/S. +chasselas +chasse-marée +chasse-mouches +chasse-moustique/S. +chasse-neige +chasse-pierres +chasse-pointe/S. +chassepot/S. +chasser/a0p+ +chasseresse/S. +chasse-rivet/S. +chasse-rivets +chasse-roue/S. +chasse-roues +chassés-croisés +chasseuse/F. +chasse-vase +chassie/S. +chassieuse/W. +châssis +chassoir/S. +chaste/S. +chastement +chasteté/S. +chasuble/S. +chasublerie/S. +châtaigne +châtaigne/S. +châtaigner/a0p+ +châtaigneraie/S. +châtaignier/S. +châtaine/F. +château/X. +chateaubriand/S. +châtelaine/F. +châtelet/S. +châtellenie/S. +châtelperronienne/F. +chat-huant +châtier/a0p+ +chatière/S. +châtiment/S. +chatoiement/S. +chaton/S. +chatonner/a0p. +chatouille/S. +chatouillement/S. +chatouiller/a0p+ +chatouilleuse/F. +chatouilleux +chatouillis +chatoyante/F. +chatoyer/a0p. +châtrer/a0p+ +châtreuse/F. +chatrou/S. +chats-huants +chatte/F. +chattemite/S. +chatter/a0p. +chatterie/S. +chatterton/S. +chatteuse/F. +chaudasse/S. +chaude/F. +chaudeau/X. +chaudement +chaud-froid +chaudière/S. +chaudrée/S. +chaudron/S. +chaudronnée/F. +chaudronnée/S. +chaudronner/a0p+ +chaudronnerie/S. +chaudronnière/F. +chauds-froids +chauffage/S. +chauffagiste/S. +chauffante/F. +chauffard/S. +chauffe/S. +chauffe-assiette/S. +chauffe-assiettes +chauffe-bain +chauffe-bain/S. +chauffe-ballon/S. +chauffe-biberon/S. +chauffe-biberons +chauffe-cire +chauffe-cire/S. +chauffe-eau +chauffe-lit +chauffe-lit/S. +chauffe-main/S. +chauffe-moût +chauffe-moût/S. +chauffe-pain/S. +chauffe-pieds +chauffe-plat/S. +chauffe-plats +chauffer/a0p+ +chaufferette/S. +chaufferie/S. +chauffeuse/F. +chauffoir/S. +chaufour/S. +chaufournier/S. +chaulage/S. +chauler/a0p+ +chauleuse/S. +chaulmoogra/S. +chaumage/S. +chaumard/S. +chaume/S. +chaumer/a0p+ +chaumière/S. +chaumine/S. +chaussante/F. +chausse/S. +chaussée/S. +chaussement/S. +chausse-pied/S. +chausser/a0p+ +chausse-trape/S. +chausse-trappe/S. +chaussette/S. +chausseuse/F. +chausson/S. +chaussure/S. +chauve/S. +chauve-souris +chauves-souris +chauvine/F. +chauvinisme/S. +chauviniste/S. +chauvir/f0p. +chaux +chavilloise/F. +chavirage/S. +chavirement/S. +chavirer/a0p+ +chawer/a0p. +chayotte/S. +cheap +chebec/S. +chebek/S. +chèche/S. +chechia/S. +chéchia/S. +check-list/S. +check-up +chédail/S. +cheddar/S. +cheddite/S. +cheeseburger/S. +cheesecake/S. +cheese-cake/S. +chef/S. +chefaillon/S. +chef-d'œuvre +cheffe/S. +chefferie/S. +cheffesse/S. +chef-lieu +chefs-d'œuvre +chefs-lieux +cheftaine/S. +cheikh/S. +chéilite/S. +cheire/S. +cheiroptère/S. +chéiroptère/S. +chélate/S. +chélater/a0p+ +chélateur/S. +chélation/S. +chélatrice/F. +chelem/S. +chélicérate/S. +chélicère/S. +chélidoine/S. +chélifère/S. +chelléenne/F. +chéloïde/S. +chéloïdienne/F. +chélonien/S. +cheloue/F. +chemin/S. +chemineau/X. +cheminée/S. +cheminement/S. +cheminer/a0p. +cheminote/F. +chemisage/S. +chemise/S. +chemiser/a0p+ +chemiserie/S. +chemisette/S. +chemisière/F. +chênaie/S. +chenal/X. +chenapan/S. +chêne/S. +chéneau/X. +chêne-liège +chênes-lièges +chenet/S. +chènevière/S. +chènevis +chènevotte/S. +chenil/S. +chenillard/S. +chenille/S. +chenillée/F. +chenillette/S. +chenin/S. +chénodésoxycholique/S. +chénopode/S. +chénopodiacée/S. +chénopodiacée/S. +chenue/F. +cheptel/S. +chèque/S. +chèque-restaurant +chèques-restaurant +chéquier/S. +chercher/a0p+ +chercheuse/F. +chère/F. +chère/S. +chèrement +chergui/S. +chérie/F. +chérif/S. +chérifienne/F. +chérimole/S. +chérimolier/S. +chérir/f0p+ +chérissable/S. +chermès +cherokee/S. +chérot/S. +cherrer/a0p. +cherry/A. +cherté/S. +chérubin/S. +chervis +chessylite/S. +chester/S. +chétive/F. +chétivement +chétognathe/S. +chevaine/S. +cheval/X. +chevalement/S. +chevaler/a0p+ +chevaleresque/S. +chevaleresquement +chevalerie/S. +chevalet/S. +chevalière/F. +chevaline/F. +cheval-vapeur +chevance/S. +chevauchante/F. +chevauchée/S. +chevauchement/S. +chevaucher/a0p+ +chevaucheuse/F. +chevaucheuse/F. +chevau-léger/S. +chevaux-vapeur +chevêche/S. +chevelée/F. +chevelue/F. +chevelure/S. +chevenne/S. +chevesne/S. +chevet/S. +chevêtre/S. +cheveu/X. +chevillage/S. +chevillarde/F. +cheville/S. +cheviller/a0p+ +chevillère/S. +chevillette/S. +cheviotte/S. +chèvre/S. +chevreau/X. +chèvrefeuille/S. +chèvre-pied/S. +chèvrerie/S. +chevreter/d0p. +chevrette/S. +chevreuil/S. +chevrière/F. +chevron/S. +chevronnage/S. +chevronner/a0p+ +chevrotage/S. +chevrotain/S. +chevrotante/F. +chevrotement/S. +chevroter/a0p. +chevrotin/S. +chevrotine/S. +chewing-gum/S. +cheyenne/S. +chez +chez-eux +chez-moi +chez-nous +chez-soi +chez-toi +chez-vous +chi/S. +chiade/S. +chiader/a0p+ +chialage/S. +chialer/a0p. +chialeuse/F. +chiante/F. +chianti/S. +chiard/S. +chiasma/S. +chiasmatique/S. +chiasme/S. +chiasse/S. +chiatique/S. +chibouk/S. +chibouque/S. +chic/S. +chicane/S. +chicaner/a0p+ +chicanerie/S. +chicaneuse/F. +chicanière/F. +chicano/S. +chicha/S. +chiche/S. +chiche-kebab +chiche-kébab +chichement +chiches-kebabs +chiches-kébabs +chicheté/S. +chichi/S. +chichiteuse/W. +chichon/S. +chicon/S. +chicoracée/S. +chicorée/S. +chicorer/a0p+ +chicorner/a0p+ +chicot/S. +chicote/S. +chicoter/a0p+ +chicotin/S. +chicotte/S. +chicotter/a0p+ +chiée/S. +chien-assis +chiendent/S. +chienlit/S. +chien-loup +chienne/F. +chienner/a0p. +chiennerie/S. +chiens-assis +chiens-loups +chier/a0p+ +chierie/S. +chieuse/F. +chiffe/S. +chiffon/S. +chiffonnade/S. +chiffonnage/S. +chiffonnement/S. +chiffonner/a0p+ +chiffonnière/F. +chiffrable/S. +chiffrage/S. +chiffre/S. +chiffrement/S. +chiffrer/a0p+ +chiffreuse/F. +chiffrier/S. +chigner/a0p. +chignole/S. +chignon/S. +chihuahua/S. +chiisme/S. +chiite/S. +chikungunya/S. +chili/S. +chiliasme/S. +chiliaste/S. +chilienne/F. +chilopode/S. +chimer/a0p+ +chimère/S. +chimérique/S. +chimériquement +chimérisme/S. +chimie/S. +chimiluminescence/S. +chimio/S. +chimiolithotrophe/S. +chimioluminescence/S. +chimiorécepteur/S. +chimiosynthèse/S. +chimiotactique/S. +chimiotactisme/S. +chimiotaxie/S. +chimiothèque/S. +chimiothérapeutique/S. +chimiothérapie/S. +chimiothérapique/S. +chimique/S. +chimiquement +chimiquier/S. +chimisme/S. +chimisorption/S. +chimiste/S. +chimpanzé/S. +chinage/S. +chinchard/S. +chinchilla/S. +chine/S. +chiner/a0p+ +chinetoque/S. +chineuse/F. +chinoise/F. +chinoiser/a0p. +chinoiserie/S. +chinook/S. +chintz +chinure/S. +chiot/S. +chiotte/S. +chiourme/S. +chip/S. +chiper/a0p+ +chiperie/S. +chipeuse/F. +chipie/S. +chipiron/S. +chipolata/S. +chipotage/S. +chipoter/a0p. +chipoteuse/F. +chips +chique/S. +chiqué/S. +chiquement +chiquenaude/S. +chiquer/a0p+ +chiqueter/d0p+ +chiqueuse/F. +chirale/W. +chiralité/S. +chiridienne/F. +chirographaire/S. +chirographie/S. +chirographier/a0p+ +chirologie/S. +chiromancie/S. +chiromancienne/F. +chironome/S. +chiropractie/S. +chiropractrice/F. +chiropraticienne/F. +chiropratique/S. +chiropraxie/S. +chiroptère/S. +chirurgicale/W. +chirurgicalement +chirurgie/S. +chirurgien-dentiste +chirurgienne/F. +chirurgiens-dentistes +chistera/S. +chitinase/S. +chitine/S. +chitineuse/W. +chiton/S. +chitosan/S. +chiure/S. +chlamyde/S. +chlamydia/S. +chlamydiae +chlamydiose/S. +chleuhe/F. +chloracétone/S. +chloral/S. +chloralose/S. +chloramine/S. +chloramphénicol/S. +chlorate/S. +chloration/S. +chlore/S. +chlorer/a0p+ +chloreuse/W. +chlorhydrate/S. +chlorhydrique/S. +chlorique/S. +chlorite/S. +chlorobenzène/S. +chlorofluorocarbone/S. +chlorofluorocarbure/S. +chloroforme/S. +chloroformer/a0p+ +chloroformisation/S. +chlorométhane/S. +chlorométrie/S. +chlorométrique/S. +chlorophène/S. +chlorophycée/S. +chlorophycée/S. +chlorophylle/S. +chlorophyllienne/F. +chloropicrine/S. +chloroplaste/S. +chloroplastique/S. +chloroquine/S. +chlorose/S. +chlorothalonil/S. +chlorotique/S. +chlorpromazine/S. +chloruration/S. +chlorure/S. +chlorurer/a0p+ +chnoque/S. +chnouf/S. +choane/S. +choanocyte/S. +choc/S. +chochotte/S. +chocolat +chocolat/S. +chocolatée/F. +chocolaterie/S. +chocolatière/F. +chocolatine/S. +chocotte/S. +chocotter/a0p+ +choéphore/S. +chœur/S. +chofer/a0p+ +choir/pX +choisir/f0p+ +choisisseuse/F. +choix +cholagogue/S. +cholangite/S. +cholécalciférol/S. +cholécystectomie/S. +cholécystite/S. +cholécystotomie/S. +cholédoque/S. +cholémie/S. +choléra/S. +choléra-morbus +choléras-morbus +cholérétique/S. +cholériforme/S. +cholérine/S. +cholérique/S. +cholestase/S. +cholestéatome/S. +cholestérine/S. +cholestérique/S. +cholestérol/S. +cholestérolémie/S. +choliambe/S. +choline/S. +cholinergique/S. +cholinestérase/S. +cholinestérasique/S. +cholique/S. +cholurie/S. +chômable/S. +chômage/S. +chômer/a0p+ +chômeuse/F. +chondre/S. +chondrichtyen/S. +chondriome/S. +chondriosome/S. +chondrite/S. +chondroblaste/S. +chondrocalcinose/S. +chondroclaste/S. +chondrocostale/W. +chondrocyte/S. +chondroïtine/S. +chondromatose/S. +chondrosarcome/S. +chondrostéen/S. +chope/S. +choper/a0p+ +chopine/S. +chopiner/a0p. +chopper/S. +chopper/a0p. +choquable/S. +choquante/F. +choquer/a0p+ +chorale/F. +chorde/S. +chordé/S. +chorée/S. +chorège/S. +chorégie/S. +chorégraphe/S. +chorégraphie/S. +chorégraphier/a0p+ +chorégraphique/S. +choréique/S. +choreute/S. +choriambe/S. +chorioépithéliome/S. +chorio-épithéliome/S. +chorioméningite/S. +chorion/S. +chorionique/S. +choriste/S. +chorizo/S. +chorographie/S. +chorographique/S. +choroïde/S. +choroïdienne/F. +chorologie/S. +choronyme/S. +choronymie/S. +chorus +chose/S. +choser/a0p+ +chosification/S. +chosifier/a0p+ +chott/S. +chou/X. +chouan/S. +chouannerie/S. +choucas +chouchen/S. +chouchou/S. +chouchoutage/S. +chouchoute/S. +chouchouter/a0p+ +choucroute/S. +chouette/S. +chouette/S. +chouettement +choufer/a0p+ +chou-fleur +chouia/S. +chouïa/S. +chouiner/a0p. +chouinerie/S. +chouineuse/F. +chouleur/S. +chou-navet +choupinette/F. +chouquette/S. +chou-rave +chouraver/a0p+ +chourer/a0p+ +chouriner/a0p+ +chourineur/S. +choux-fleurs +choux-navets +choux-raves +chow-chow +chows-chows +choyée/F. +choyer/a0p+ +chrématistique/S. +chrême/S. +chrémeau/X. +chrestomathie/S. +chrétien-démocrate +chrétienne/F. +chrétienne-démocrate +chrétiennement +chrétiennes-démocrates +chrétiens-démocrates +chrétienté/S. +chris-craft +chrismale/W. +chrismation/S. +chrisme/S. +christ/S. +christiania/S. +christianisation/S. +christianiser/a0p+ +christianisme/S. +christianophobe/S. +christianophobie/S. +christique/S. +christocentrisme/S. +christologie/S. +christologique/S. +christophine/S. +chromaffine/S. +chromage/S. +chromatation/S. +chromate/S. +chromaticité/S. +chromatide/S. +chromatine/S. +chromatique/S. +chromatiquement +chromatisme/S. +chromatogramme/S. +chromatographe/S. +chromatographie/S. +chromatographique/S. +chromatophore/S. +chromatopsie/S. +chromatose/S. +chrome/S. +chromer/a0p+ +chromeuse/F. +chromeuse/W. +chrominance/S. +chromique/S. +chromisation/S. +chromiste/S. +chromite/S. +chromo/S. +chromodynamique/S. +chromogène/S. +chromogène/S. +chromolithographie/S. +chromomycose/S. +chromophile/S. +chromoplaste/S. +chromoprotéine/S. +chromosome/S. +chromosomique/S. +chromosphère/S. +chromotropique/S. +chromotypie/S. +chromotypographie/S. +chronaxie/S. +chronaxique/S. +chronicité/S. +chronique/S. +chronique/S. +chroniquement +chroniquer/a0p+ +chroniqueuse/F. +chrono/S. +chronobiologie/S. +chronobiologiste/S. +chronodégradable/S. +chronogramme/S. +chronographe/S. +chronologie/S. +chronologique/S. +chronologiquement +chronométrage/S. +chronomètre/S. +chronométrer/c0p+ +chronométreuse/F. +chronométrie/S. +chronométrique/S. +chronométriquement +chronophage/S. +chronophotographie/S. +chronoséquentielle/F. +chronostratigraphie/S. +chronostratigraphique/S. +chronotachygraphe/S. +chronotrope/S. +chroumer/a0p+ +chrysalide/S. +chrysanthème/S. +chrysanthémique/S. +chryséléphantine/F. +chrysobéryl/S. +chrysocale/S. +chrysocolle/S. +chrysolite/S. +chrysolithe/S. +chrysomèle/S. +chrysope/S. +chrysopée +chrysoprase/S. +chrysostome/S. +chrysothérapie/S. +chrysotile/S. +chtarbée/F. +chthonienne/F. +chti/S. +chtimi/S. +ch'timi/S. +chtouille/S. +chuchotage/S. +chuchotante/F. +chuchotement/S. +chuchoter/a0p+ +chuchoterie/S. +chuchoteuse/F. +chuchotis +chuintante/F. +chuintante/S. +chuintement/S. +chuinter/a0p. +chum/S. +churro/S. +chut +chute/S. +chuter/a0p. +chutney/S. +chyle/S. +chylifère/S. +chyme/S. +chymotrypsine/S. +chyprée/F. +chypriote/S. +ci +ciabatta/S. +ciao +ci-après +ci-avant +cibiche/S. +cibiste/S. +ciblage/S. +cible/S. +cibler/a0p+ +ciboire/S. +ciborium/S. +ciboule/S. +ciboulette/S. +ciboulot/S. +cicadelle/S. +cicatrice/S. +cicatricielle/F. +cicatricule/S. +cicatrisable/S. +cicatrisant/S. +cicatrisante/F. +cicatrisation/S. +cicatriser/a0p+ +cicéro/S. +cicerone/S. +cicérone/S. +cicéronienne/F. +cichlidé/S. +cicindèle/S. +ciclosporine/S. +ciconiidé/S. +ci-contre +cicutine/S. +ci-dessous +ci-dessus +ci-devant +cidre/S. +cidrerie/S. +cidricole/S. +ciel/S. +cierge/S. +cieux +cigale/S. +cigalière/S. +cigare/S. +cigarette/S. +cigarettière/F. +cigarière/F. +cigarillo/S. +ci-gisent +ci-gît +cigogne/S. +cigogneau/X. +ciguë/S. +ci-haut +ci-incluse/F. +ci-jointe/F. +cil/S. +ciliaire/S. +cilice/S. +ciliée/F. +cillement/S. +ciller/a0p. +cimaise/S. +cime/S. +ciment/S. +cimentation/S. +cimenter/a0p+ +cimenterie/S. +cimentière/F. +cimeterre/S. +cimétidine/S. +cimetière/S. +cimier/S. +cimmérienne/F. +cinabre/S. +cinchonine/S. +cincle/S. +cindynique/S. +ciné/S. +cinéaste/S. +ciné-club/S. +cinégénique/S. +cinégraphie/S. +cinégraphique/S. +cinéma/S. +cinémascope/S. +cinémathèque/S. +cinématique/S. +cinématique/S. +cinématiquement +cinématographe/S. +cinématographie/S. +cinématographier/a0p+ +cinématographique/S. +cinématographiquement +cinémomètre/S. +ciné-parc/S. +cinéphage/S. +cinéphile/S. +cinéphilie/S. +cinéraire/S. +cinéraire/S. +cinérama +cinérite/S. +cinéroman/S. +ciné-roman/S. +ciné-shop/S. +cinéthéodolite/S. +cinétique/S. +cinétique/S. +cinétiquement +cinétir/S. +ciné-tir/S. +cinétisme/S. +cinghalaise/F. +cinglage/S. +cinglante/F. +cinglée/F. +cinglement/S. +cingler/a0p+ +cingulaire/S. +cinname/S. +cinnamique/S. +cinnamome/S. +cinoche/S. +cinoque/S. +cinq +cinquantaine/S. +cinquante +cinquante-cinq +cinquante-cinquième/S. +cinquante-deux +cinquante-deuxième/S. +cinquante-et-un +cinquante-huit +cinquante-huitième/S. +cinquantenaire/S. +cinquante-neuf +cinquante-neuvième/S. +cinquante-quatre +cinquante-quatrième/S. +cinquante-sept +cinquante-septième/S. +cinquante-six +cinquante-sixième/S. +cinquante-trois +cinquante-troisième/S. +cinquantième/S. +cinquième/S. +cinquièmement +cintrage/S. +cintre/S. +cintrer/a0p+ +cintreuse/F. +cintrière/F. +cipaye/S. +cipolin/S. +cippe/S. +cirage/S. +circ +circadienne/F. +circaète/S. +circalittorale/W. +circassienne/F. +circinée/F. +circoncire/yV +circoncis +circonciseuse/F. +circoncision/S. +circonférence/S. +circonférenciellement +circonférentielle/F. +circonfixe/S. +circonflexe/S. +circonlocution/S. +circonscriptible/S. +circonscription/S. +circonscrire/y1 +circonspecte/F. +circonspection/S. +circonstance/S. +circonstancielle/F. +circonstanciellement +circonstancier/a0p+ +circonvallation/S. +circonvenir/i0q+ +circonvoisine/F. +circonvolution/S. +circuit/S. +circuiterie/S. +circulaire/S. +circulaire/S. +circulairement +circulante/F. +circularisation/S. +circulariser/a0p+ +circularité/S. +circulateur/S. +circulation/S. +circulatoire/S. +circuler/a0p. +circumduction/S. +circumnavigation/S. +circumnavigatrice/F. +circumpolaire/S. +circumsolaire/S. +circumstellaire/S. +circumterrestre/S. +cire/S. +ciré/S. +cirer/a0p+ +cireuse/F. +cireuse/W. +cirière/F. +ciron/S. +cirque/S. +cirre/S. +cirrhe/S. +cirrhose/S. +cirrhotique/S. +cirripède/S. +cirrocumulus +cirro-cumulus +cirrostratus +cirro-stratus +cirrus +cirse/S. +cis +cisaillage/S. +cisaille/S. +cisaillement/S. +cisailler/a0p+ +cisailleuse/F. +cisalpine/F. +ciseau/X. +ciselage/S. +cisèlement/S. +ciseler/b0p+ +ciselet/S. +ciseleuse/F. +cisellement/S. +ciselure/S. +cisgenre/S. +cisoires +cisplatine/S. +cissexuelle/F. +cissoïdale/F. +cissoïde/S. +ciste/S. +cistercienne/F. +cis-trans +cistre/S. +cistron/S. +cistude/S. +cit +citadelle/S. +citadine/F. +citation/S. +citatrice/F. +cité/S. +cité-dortoir +cité-jardin +citer/a0p+ +citerne/S. +citernière/F. +cités-dortoirs +cités-jardins +cithare/S. +citharède/S. +cithariste/S. +citoyenne/F. +citoyenneté/S. +citral/S. +citrate/S. +citrine/F. +citrique/S. +citron +citron/S. +citronnade/S. +citronnée/F. +citronnelle/S. +citronnier/S. +citrouille/S. +citrus +cive/S. +civelle/S. +civet/S. +civette/S. +civière/S. +civile/F. +civilement +civilisable/S. +civilisation/S. +civilisationnelle/F. +civilisatrice/F. +civiliser/a0p+ +civiliste/S. +civilité/S. +civique/S. +civiquement +civisme/S. +clabaud/S. +clabaudage/S. +clabauder/a0p. +clabauderie/S. +clabaudeuse/F. +clabot/S. +clabotage/S. +claboter/a0p+ +clac +clacher/a0p+ +clade/S. +cladisme/S. +cladistique/S. +cladistique/S. +cladocère/S. +cladocère/S. +cladode/S. +cladogramme/S. +cladonie/S. +clafoutis +claie/S. +clairance/S. +claire/F. +clairement +claires-voies +clairette/F. +claire-voie +clairière/S. +clair-obscur +clairon/S. +claironnante/F. +claironnement/S. +claironner/a0p+ +clairsemer/b0p+ +clairs-obscurs +clairvoyance/S. +clairvoyante/F. +clam/S. +clameau/X. +clamecer/b0p+ +clamer/a0p+ +clameur/S. +clamp/S. +clampage/S. +clamper/a0p+ +clampin/S. +clampser/a0p. +clamser/a0p. +clan/S. +clandé/S. +clandestine/F. +clandestinement +clandestinité/S. +clanique/S. +clanisme/S. +claniste/S. +clap/S. +clapage/S. +claper/a0p+ +clapet/S. +clapier/S. +clapir/f0p+ +clapman/S. +clapot/S. +clapotage/S. +clapotante/F. +clapotement/S. +clapoter/a0p. +clapoteuse/W. +clapotis +clappement/S. +clapper/a0p. +clapser/a0p. +claquage/S. +claquante/F. +claque/S. +claquement/S. +claquemurer/a0p+ +claquer/a0p+ +claqueter/d0p. +claquette/F. +claquoir/S. +clarain/S. +clarias +clarification/S. +clarificatrice/F. +clarifier/a0p+ +clarine/S. +clarinette/S. +clarinettiste/S. +clarisse/S. +clarté/S. +clash/A. +clasher/a0p. +classable/S. +classante/F. +classe/S. +classement/S. +classer/a0p+ +classeuse/F. +classicisante/F. +classicisme/S. +classiciste/S. +classieuse/W. +classification/S. +classificatoire/S. +classificatrice/F. +classifier/a0p+ +classique/S. +classiquement +clastique/S. +clathrate/S. +claude/S. +claudélienne/F. +claudicante/F. +claudication/S. +claudiquer/a0p. +clause/S. +clausoir/S. +claustra/S. +claustrale/W. +claustration/S. +claustrer/a0p+ +claustro/S. +claustromanie/S. +claustrophobe/S. +claustrophobie/S. +clausule/S. +clausus +clavage/S. +clavaire/S. +clavardage/S. +clavarder/a0p. +claveau/X. +clavecin/S. +claveciniste/S. +clavelée/F. +claveleuse/W. +claver/a0p+ +clavetage/S. +claveter/d0p+ +clavette/S. +clavetter/a0p+ +clavicorde/S. +clavicorne/S. +claviculaire/S. +clavicule/S. +clavier/S. +clavière/F. +claviériste/S. +clavigère/S. +claviste/S. +clayère/S. +clayette/S. +claymore/S. +clayon/S. +clayonnage/S. +clayonner/a0p+ +clé/S. +clean +clearing/S. +clébard/S. +cléber/a0p. +clebs +cléchée/F. +clef/S. +cléistogame/S. +cléistogamie/S. +clématite/S. +clémence/S. +clémente/F. +clémentine/S. +clémentinier/S. +clenche/S. +clepsydre/S. +cleptocrate/S. +cleptocratie/S. +cleptocratique/S. +cleptomane/S. +cleptomanie/S. +clerc/S. +clergé/S. +clergeon/S. +clergie/S. +clergyman/A. +cléricale/W. +cléricalement +cléricalisation/S. +cléricalisme/S. +cléricature/S. +clermontoise/F. +clérouque/S. +clétage/S. +cléthodime/S. +clic/S. +clic-clac +clichage/S. +cliche/S. +cliché/S. +clicher/a0p+ +clicherie/S. +clicheuse/F. +cliente/F. +clientélaire/S. +clientèle/S. +clientélisme/S. +clientéliste/S. +clienter/a0p+ +client-serveur +cliffhanger/S. +clifoire/S. +clignement/S. +cligner/a0p+ +clignotante/F. +clignotement/S. +clignoter/a0p. +clignoteur/S. +clim/S. +climat/S. +climatère/S. +climatérique/S. +climatique/S. +climatiquement +climatisante/F. +climatisation/S. +climatiser/a0p+ +climatiseur/S. +climatisme/S. +climatologie/S. +climatologique/S. +climatologiste/S. +climatologue/S. +climatopathologie/S. +climato-scepticisme/S. +climato-sceptique/S. +climatothérapie/S. +clin/S. +clinamen/S. +clinche/S. +clinfoc/S. +clinicat/S. +clinicienne/F. +clinique/S. +clinique/S. +cliniquement +clinker/S. +clinomètre/S. +clinopyroxène/S. +clinorhombique/S. +clino-rhombique/S. +clinozoïsite/S. +clinquante/F. +clip/S. +clipper/S. +clipper/a0p+ +clipsable/S. +clipser/a0p+ +cliquable/S. +clique/S. +cliquer/a0p. +cliquet/S. +cliquetante/F. +cliquètement/S. +cliqueter/d0p. +cliquetis +cliquette/S. +cliquettement/S. +cliquoter/a0p. +clissage/S. +clisse/S. +clisser/a0p+ +clitique/S. +clito/S. +clitocybe/S. +clitoridectomie/S. +clitoridienne/F. +clitoris +clitorisme/S. +clivable/S. +clivage/S. +clivante/F. +cliver/a0p+ +cliveuse/F. +cloacale/W. +cloaque/S. +clocharde/F. +clochardisation/S. +clochardiser/a0p+ +cloche/S. +cloche/S. +clochement/S. +cloche-pied +clocher/S. +clocher/a0p. +clocheton/S. +clochette/S. +clodo/S. +clofibrate/S. +cloison/S. +cloisonnage/S. +cloisonnante/F. +cloisonnement/S. +cloisonner/a0p+ +cloisonnette/S. +cloître/S. +cloîtrer/a0p+ +clomazone/S. +clomifène/S. +clomiphène/S. +clonable/S. +clonage/S. +clonale/W. +clonalité/S. +clone/S. +cloner/a0p+ +clonidine/S. +clonie/S. +clonique/S. +clonus +clope/S. +cloper/a0p. +clopet/S. +clopin-clopant +clopiner/a0p. +clopinettes +cloporte/S. +clopyralid/S. +cloque/S. +cloquer/a0p+ +clore/rArB +clos +close-combat/S. +closerie/S. +closoir/S. +clostridiale/S. +clôture/S. +clôturer/a0p+ +clou/S. +clouage/S. +cloud/S. +clouement/S. +clouer/a0p+ +cloueuse/F. +cloutage/S. +cloutard/S. +clouter/a0p+ +clouterie/S. +cloutière/F. +clovisse/S. +clown/S. +clownerie/S. +clownesque/S. +cloyère/S. +club/S. +clubber/S. +clubbeuse/F. +club-house/S. +clubiste/S. +clunisienne/F. +clupéidé/S. +clupéiforme/S. +cluse/S. +clusiacée/S. +cluster/S. +clysopompe/S. +clystère/S. +cnémide/S. +cnidaire/S. +cnidaire/S. +cnidoblaste/S. +cnidocil/S. +cnidocyste/S. +cnidosporidie/S. +coaccusée/F. +coacervat/S. +coach/A. +coacher/a0p+ +coaching/S. +coacquéreur/S. +coactionnaire/S. +coactive/F. +coadaptation/S. +coadaptatrice/F. +coadjutrice/F. +coadministratrice/F. +coagglutination/S. +coagulabilité/S. +coagulable/S. +coagulante/F. +coagulation/S. +coagulatrice/F. +coaguler/a0p+ +coagulum/I. +coalescence/S. +coalescente/F. +coalisée/F. +coaliser/a0p+ +coalition/S. +coaltar/S. +coanimatrice/F. +coaptation/S. +coarctation/S. +coassante/F. +coassement/S. +coasser/a0p+ +coassociée/F. +coassurance/S. +coati/S. +coauteure/F. +co-auteure/F. +coautrice/S. +co-autrice/S. +coaxiale/W. +coaxialité/S. +cob/S. +cobalt/S. +cobaltifère/S. +cobaltite/S. +cobaltothérapie/S. +cobaye/S. +cobée/S. +cobelligérante/F. +cobord/S. +cobordisme/S. +cobra/S. +coca/S. +cocagne/S. +cocaïer/S. +cocaïne/S. +cocaïnisation/S. +cocaïnisme/S. +cocaïnomane/S. +cocaïnomanie/S. +cocaliser/a0p+ +cocarboxylase/S. +cocarde/S. +cocardière/F. +cocasse/S. +cocassement +cocasserie/S. +cocaution/S. +coccidie/S. +coccidiose/S. +coccinelle/S. +coccobacille/S. +coccolite/S. +coccolithe/S. +coccus/I. +coccygienne/F. +coccyx +cochaîne/S. +coche/S. +cochenille/S. +cocher/a0p+ +cochère/F. +cochette/S. +cochevis +cochinchinoise/F. +cochléaire/S. +cochléaria/S. +cochlée/S. +cochonceté/S. +cochonnaille/S. +cochonne/F. +cochonner/a0p+ +cochonnerie/S. +cochonnet/S. +cochylis +cocker/S. +cockney/S. +cockpit/S. +cocktail/S. +coco/S. +cocompacte/F. +cocon/S. +coconstruire/yM +cocontractante/F. +cocooner/a0p+ +cocooning/S. +cocorico/S. +cocoter/a0p. +cocoteraie/S. +cocotier/S. +cocotte/S. +cocotte-minute +cocotter/a0p. +cocottes-minute +co-courant/S. +cocréancière/F. +cocréatrice/F. +coction/S. +cocuage/S. +cocue/F. +cocufiage/S. +cocufier/a0p+ +cocycle/S. +cocyclique/S. +coda/S. +codable/S. +codage/S. +codante/F. +code/S. +code-barres +codébitrice/F. +codec/S. +codécider/a0p+ +codécision/S. +codéine/S. +codemanderesse/F. +coder/a0p+ +codes-barres +codet/S. +codétentrice/F. +codétenue/F. +codeuse/F. +codéveloppement/S. +codex +codicillaire/S. +codicille/S. +codicologie/S. +codicologique/S. +codicologue/S. +codification/S. +codificatrice/F. +codifier/a0p+ +codimension/S. +codirection/S. +codirectrice/F. +codiriger/a0p+ +codominance/S. +codominante/F. +codominante/F. +codon/S. +coéchangiste/S. +coécrite/F. +coéditer/a0p+ +coédition/S. +coéditrice/F. +coéducation/S. +coefficient/S. +cœlacanthe/S. +cœlentéré/S. +cœliaque/S. +cœliochirurgie/S. +cœlioscope/S. +cœlioscopie/S. +cœlioscopique/S. +cœlomate/S. +cœlome/S. +cœlomique/S. +cœlostat/S. +coempereur/S. +co-empereur/S. +coemployeuse/F. +co-employeuse/F. +coemption/S. +co-encadrante/F. +coencadrer/a0p+ +co-encadrer/a0p+ +cœnesthésie/S. +coentreprise/S. +cœnure/S. +cœnurose/S. +coenzyme/S. +coépouse/W. +coéquation/S. +coéquipière/F. +coercibilité/S. +coercible/S. +coercition/S. +coercitive/F. +coésite/S. +co-état/S. +cœtera +coéternelle/F. +coéternité/S. +cœur/S. +cœur-de-pigeon +cœursage/S. +cœurs-de-pigeon +cœurse/S. +coévoluer/a0p. +coévoluer/a0p. +coévolution/S. +coexistante/F. +coexistence/S. +coexister/a0p. +coextensive/F. +coextruder/a0p+ +co-extruder/a0p+ +coextrusion/S. +coextrusion/S. +co-extrusion/S. +cofacteur/S. +coffin/S. +coffrage/S. +coffre/S. +coffre-fort +coffrer/a0p+ +coffres-forts +coffret/S. +coffretière/F. +coffreuse/F. +cofinancement/S. +cofinancer/a0p+ +cofondatrice/F. +cofonder/a0p+ +cogénération/S. +cogérance/S. +cogérante/F. +cogérer/c0p+ +cogestion/S. +cogitation/S. +cogiter/a0p+ +cogito +cognac/S. +cognassier/S. +cognat/S. +cognation/S. +cognatique/S. +cognatique/S. +cogne/S. +cognée/S. +cognement/S. +cogner/a0p+ +cogneuse/F. +cogniticienne/F. +cognition/S. +cognitive/F. +cognitivement +cognitivisme/S. +cognitiviste/S. +cognoter/a0p. +cohabitante/F. +cohabitation/S. +cohabitationniste/S. +cohabiter/a0p. +cohérence/S. +cohérente/F. +cohéreur/S. +cohériter/a0p. +cohéritière/F. +cohésion/S. +cohésive/F. +cohomologie/S. +cohomologique/S. +cohomologue/S. +cohorte/S. +cohue/S. +coi/S. +coiffage/S. +coiffante/F. +coiffe/S. +coiffer/a0p+ +coiffeuse/F. +coiffure/S. +coin/S. +coinçage/S. +coincement/S. +coincer/a0p+ +coinceur/S. +coinche/S. +coïncidence/S. +coïncidente/F. +coïncider/a0p. +coin-coin +coïnculpée/F. +co-infection/S. +coing/S. +coït/S. +coïtale/W. +coite/S. +coïter/a0p. +coitron/S. +cokage/S. +coke/S. +cokéfaction/S. +cokéfiable/S. +cokéfiante/F. +cokéfier/a0p+ +cokerie/S. +cokser/a0p+ +col/S. +colatitude/S. +colature/S. +colauréate/F. +colback/S. +colbertisme/S. +colbertiste/S. +colchicacée/S. +colchicacée/S. +colchicine/S. +colchique/S. +colcotar/S. +colcothar/S. +colcrete/S. +cold-cream/S. +col-de-cygne +colectomie/S. +colégataire/S. +coléoptère/S. +coléoptère/S. +coléoptile/S. +colère/S. +coléreuse/W. +coléreusement +colérique/S. +coleslaw/S. +coléus +colibacille/S. +colibacillose/S. +colibri/S. +colichemarde/S. +colicine/S. +colicitante/F. +colifichet/S. +coliforme/S. +colimaçon/S. +colin/S. +colinéaire/S. +colinéarité/S. +colineau/X. +colin-maillard/S. +colinot/S. +colin-tampon/S. +colique/S. +colique/S. +coliqueuse/W. +colis +colisage/S. +colistière/F. +colistine/S. +colite/S. +colitigante/F. +coll +collable/S. +collabo/S. +collaboration/S. +collaborationnisme/S. +collaborationniste/S. +collaborative/F. +collaborativement +collaboratrice/F. +collaborer/a0p+ +collage/S. +collagène/S. +collagène/S. +collagénose/S. +collagraphie/S. +collante/F. +collapser/a0p. +collapsologie/S. +collapsus +collargol +collatérale/W. +collatéralement +collatéralisation/S. +collatéraliser/a0p+ +collatéralité/S. +collateur/S. +collation/S. +collationnement/S. +collationner/a0p+ +colle/S. +collectage/S. +collecte/S. +collecter/a0p+ +collection/S. +collectionnement/S. +collectionner/a0p+ +collectionneuse/F. +collectionnite/S. +collective/F. +collectivement +collectivisation/S. +collectiviser/a0p+ +collectivisme/S. +collectiviste/S. +collectivité/S. +collector/S. +collectrice/F. +collège/S. +collégiale/S. +collégiale/W. +collégialement +collégialité/S. +collégienne/F. +collègue/S. +collembole/S. +collement/S. +collenchyme/S. +coller/a0p+ +collerette/S. +collet/S. +colletage/S. +colletailler/a0p+ +colleter/d0p+ +colleteuse/F. +colletin/S. +colleuse/F. +colley/S. +collier/S. +colligative/F. +colliger/a0p+ +collimage/S. +collimateur/S. +collimation/S. +collinaire/S. +colline/S. +collision/S. +collisionner/a0p+ +collisionneur/S. +collocation/S. +collodion/S. +colloïdale/W. +colloïde/S. +colloïde/S. +colloque/S. +colloquer/a0p+ +collusion/S. +collusoire/S. +collutoire/S. +colluvion/S. +collybie/S. +collyre/S. +colmarienne/F. +colmatage/S. +colmater/a0p+ +colo/S. +coloc/S. +colocalisation/S. +colocase/S. +colocataire/S. +colocation/S. +cologarithme/S. +colombage/S. +colombe/S. +colombelle/S. +colombiculture/S. +colombidé/S. +colombienne/F. +colombier/S. +colombine/F. +colombite/S. +colombo/S. +colombophile/S. +colombophilie/S. +colon/S. +côlon/S. +colonage/S. +colonat/S. +colonelle/F. +coloniale/W. +colonialisme/S. +colonialiste/S. +colonie/S. +colonisable/S. +colonisation/S. +colonisatrice/F. +colonisée/F. +coloniser/a0p+ +colonnade/S. +colonnaire/S. +colonne/S. +colonnette/S. +colonoscopie/S. +colopathie/S. +colophane/S. +colophon/S. +coloquinte/S. +colorable/S. +colorant/S. +colorante/F. +coloration/S. +colorature/S. +colorectale/W. +colo-rectale/W. +colorer/a0p+ +coloriage/S. +colorier/a0p+ +colorimètre/S. +colorimétrie/S. +colorimétrique/S. +coloris +colorisation/S. +coloriser/a0p+ +colorisme/S. +coloriste/S. +coloscope/S. +coloscopie/S. +colossale/W. +colossalement +colosse/S. +colossienne/F. +colostomie/S. +colostrum/S. +colpite/S. +colpocèle/S. +colportage/S. +colporter/a0p+ +colporteuse/F. +colposcope/S. +colposcopie/S. +cols-de-cygne +colt/S. +coltan/S. +coltinage/S. +coltiner/a0p+ +coltineur/S. +columbarium/I. +columelle/S. +columnaire/S. +colure/S. +colvert/S. +colza/S. +colzatière/F. +com/||-- +coma/S. +comarque/S. +comater/a0p. +comateuse/W. +comatule/S. +combat/S. +combative/F. +combativité/S. +combattante/F. +combattre/uA +combava/S. +combe/S. +combi/S. +combien +combientième/S. +combinable/S. +combinaison/S. +combinante/F. +combinarde/F. +combinat/S. +combinateur/S. +combinatoire/S. +combinatoire/S. +combinatoirement +combine/S. +combiner/a0p+ +combishort/S. +combi-short/S. +comblanchien/S. +comble/S. +comblement/S. +combler/a0p+ +combo/S. +combourgeoisie/S. +comburante/F. +combustibilité/S. +combustible/S. +combustible/S. +combustion/S. +come-back +comédie/S. +comédienne/F. +comédon/S. +comestibilité/S. +comestible/S. +comestible/S. +cométaire/S. +comète/S. +comice/S. +comics +comique/S. +comiquement +comite/S. +comité/S. +comitiale/W. +comitialité/S. +comitologie/S. +comma/S. +commandable/S. +commandante/F. +commande/S. +commandement/S. +commander/a0p+ +commanderesse/S. +commanderie/S. +commandeuse/F. +commanditaire/S. +commanditer/a0p+ +commando/S. +comme +commémoraison/S. +commémoration/S. +commémorative/F. +commémorer/a0p+ +commençante/F. +commencement/S. +commencer/a0p+ +commendataire/S. +commende/S. +commensale/W. +commensalisme/S. +commensalité/S. +commensurabilité/S. +commensurable/S. +comment +commentaire/S. +commentatrice/F. +commenter/a0p+ +commérage/S. +commerçable/S. +commerçante/F. +commerce/S. +commercer/a0p. +commerciale/W. +commercialement +commercialisable/S. +commercialisation/S. +commercialiser/a0p+ +commercialisme/S. +commercialiste/S. +commercialité/S. +commère/S. +commérer/c0p. +commettage/S. +commettante/F. +commettre/vA +comminatoire/S. +comminutive/F. +commise/F. +commisération/S. +commissaire/S. +commissaire-priseur +commissaire-priseuse +commissaires-priseurs +commissaires-priseuses +commissariat/S. +commission/S. +commissionnaire/S. +commissionnement/S. +commissionner/a0p+ +commissoire/S. +commissurale/W. +commissure/S. +commissurotomie/S. +commit/S. +commiter/a0p+ +commodat/S. +commodataire/S. +commode/S. +commode/S. +commodément +commodité/S. +commodo +commodore/S. +commotion/S. +commotionner/a0p+ +commuabilité/S. +commuable/S. +commuer/a0p+ +communale/W. +communalisation/S. +communaliser/a0p+ +communalisme/S. +communaliste/S. +communalité/S. +communarde/F. +communautaire/S. +communautairement +communautarisation/S. +communautariser/a0p+ +communautarisme/S. +communautariste/S. +communauté/S. +commune/F. +communément +communiante/F. +communicabilité/S. +communicable/S. +communicante/F. +communication/S. +communicationnelle/F. +communicative/F. +communicativité/S. +communicatrice/F. +communicologue/S. +communier/a0p. +communion/S. +communiqué/S. +communiquer/a0p+ +communis +communisante/F. +communisation/S. +communisme/S. +communiste/S. +commutabilité/S. +commutable/S. +commutation/S. +commutative/F. +commutativité/S. +commutatrice/F. +commuter/a0p+ +comorbidité/S. +comorienne/F. +comourant/S. +compacité/S. +compactable/S. +compactage/S. +compacte/F. +compacter/a0p+ +compacteuse/F. +compactification/S. +compactifiée/F. +compaction/S. +compagne/S. +compagnie/S. +compagnonnage/S. +compagnonne/F. +compagnonnique/S. +comparabilité/S. +comparable/S. +comparablement +comparaison/S. +comparaître/wQq. +comparante/F. +comparateur/S. +comparatisme/S. +comparatiste/S. +comparative/F. +comparativement +comparatrice/F. +comparer/a0p+ +comparoir/pP +comparse/S. +compartiment/S. +compartimentage/S. +compartimentation/S. +compartimenter/a0p+ +comparution/S. +compas +compassement/S. +compasser/a0p+ +compassion/S. +compassionnelle/F. +compatibilisant/S. +compatibilité/S. +compatible/S. +compatir/f0p. +compatissance/S. +compatissante/F. +compatriote/S. +compatriotique/S. +compatriotisme/S. +compendieuse/W. +compendieusement +compendium/S. +compénétration/S. +compensable/S. +compensation/S. +compensatoire/S. +compensatrice/F. +compenser/a0p+ +compérage/S. +compère/S. +compère-loriot +compères-loriots +compétemment +compétence/S. +compétente/F. +compéter/c0p. +compétition/S. +compétitionner/a0p. +compétitive/F. +compétitivité/S. +compétitrice/F. +compil/S. +compilable/S. +compilation/S. +compilatrice/F. +compiler/a0p+ +compisser/a0p+ +complainte/S. +complaire/wNq. +complaisamment +complaisance/S. +complaisante/F. +complément/S. +complémentaire/S. +complémentairement +complémentarité/S. +complémentation/S. +complémenter/a0p+ +complet/S. +complète/F. +complètement +complètement/S. +compléter/c0p+ +complétion/S. +complétive/F. +complétude/S. +complexation/S. +complexe/S. +complexe/S. +complexer/a0p+ +complexification/S. +complexifier/a0p+ +complexion/S. +complexité/S. +complexuelle/F. +compliance/S. +complication/S. +complice/S. +complicité/S. +complies +compliment/S. +complimenter/a0p+ +complimenteuse/F. +compliquer/a0p+ +complosphère/S. +complot/S. +comploter/a0p+ +comploteuse/F. +complotisme/S. +complotiste/S. +compo/S. +compograveuse/F. +compogravure/S. +componction/S. +componctueuse/W. +componctueusement +componée/F. +componentielle/F. +comportement/S. +comportementale/W. +comportementalisme/S. +comportementaliste/S. +comporter/a0p+ +composable/S. +composacée/S. +composante/F. +composée/F. +composer/a0p+ +composeuse/F. +composite/S. +composition/S. +compositionnalité/S. +compositionnelle/F. +compositrice/F. +compossibilité/S. +compossible/S. +compost/S. +compostable/S. +compostage/S. +composter/a0p+ +composteuse/F. +compote/S. +compotée/S. +compotier/S. +compound +compréhensibilité/S. +compréhensible/S. +compréhension/S. +compréhensive/F. +comprendre/tF +comprenette/S. +compresse/S. +compresser/a0p+ +compresseur/S. +compressibilité/S. +compressible/S. +compression/S. +compressive/F. +comprimable/S. +comprimé/S. +comprimer/a0p+ +compromettante/F. +compromettre/vA +compromis +compromission/S. +compromissionnaire/S. +compromissoire/S. +comptabilisable/S. +comptabilisation/S. +comptabiliser/a0p+ +comptabilité/S. +comptable/S. +comptablement +comptage/S. +comptant +comptant +comptant/S. +compte/S. +compte-chèques +compte-fils +compte-gouttes +compte-minutes +compte-pas +compter/a0p+ +compte-rendu +comptes-chèques +comptes-rendus +compte-tours +compteuse/F. +comptine/S. +comptoir/S. +compulser/a0p+ +compulsion/S. +compulsionnelle/F. +compulsive/F. +compulsivement +compulsivité/S. +compulsoire/S. +comput/S. +computation/S. +computationnelle/F. +computer/a0p+ +comtale/W. +comtat/S. +comté/S. +comtesse/F. +comtoise/F. +conation/S. +conative/F. +conatus +concassage/S. +concasser/a0p+ +concasseur/S. +concatémère/S. +concaténation/S. +concaténer/c0p+ +concave/S. +concavité/S. +concédante/F. +concéder/c0p+ +concélébration/S. +concélébrer/c0p+ +concentrateur/S. +concentration/S. +concentrationnaire/S. +concentré/S. +concentrer/a0p+ +concentreuse/F. +concentricité/S. +concentrique/S. +concentriquement +concept/S. +conceptacle/S. +conception/S. +conceptisme/S. +conceptrice/F. +conceptualisable/S. +conceptualisation/S. +conceptualiser/a0p+ +conceptualisme/S. +conceptualiste/S. +conceptualité/S. +conceptuelle/F. +conceptuellement +concernant +concernée/F. +concerner/aF +concert/S. +concertante/F. +concertation/S. +concerter/a0p+ +concertina/S. +concertina/S. +concertino/S. +concertiste/S. +concerto/S. +concessible/S. +concession/S. +concessionnaire/S. +concessionnelle/F. +concessive/F. +concetti +concevabilité/S. +concevable/S. +concevoir/pK +conchier/a0p+ +conchoïdale/W. +conchoïde/S. +conchoïde/S. +conchylicole/S. +conchylicultrice/F. +conchyliculture/S. +conchylienne/F. +conchyliologie/S. +conchyliologiste/S. +conchyoline/S. +concierge/S. +conciergerie/S. +concile/S. +conciliable/S. +conciliabule/S. +conciliaire/S. +conciliairement +conciliante/F. +conciliarisme/S. +conciliation/S. +conciliatoire/S. +conciliatrice/F. +concilier/a0p+ +concise/F. +concision/S. +concitoyenne/F. +conclave/S. +conclaviste/S. +concluante/F. +conclure/xL +conclusion/S. +conclusive/F. +concocter/a0p+ +concoction/S. +concombre/S. +concomitamment +concomitance/S. +concomitante/F. +concordance/S. +concordancier/S. +concordante/F. +concordat/S. +concordataire/S. +concorde/S. +concorder/a0p. +concordisme/S. +concordiste/S. +concourante/F. +concourir/iD +concouriste/S. +concours +concrescence/S. +concrescente/F. +concrète/F. +concrètement +concréter/c0p+ +concrétion/S. +concrétisation/S. +concrétiser/a0p+ +concubinage/S. +concubinaire/S. +concubinat/S. +concubine/F. +concupiscence/S. +concupiscente/F. +concupiscible/S. +concurremment +concurrence/S. +concurrencer/a0p+ +concurrente/F. +concurrentielle/F. +concussion/S. +concussionnaire/S. +condamnable/S. +condamnation/S. +condamnatoire/S. +condamnée/F. +condamner/a0p+ +condé/S. +condensable/S. +condensat/S. +condensateur/S. +condensation/S. +condensé/S. +condenser/a0p+ +condenseur/S. +condescendance/S. +condescendante/F. +condescendre/tEq. +condiment/S. +condimentaire/S. +condimenter/a0p+ +condisciple/S. +condition/S. +conditionnalité/S. +conditionnelle/F. +conditionnellement +conditionnement/S. +conditionner/a0p+ +conditionneuse/F. +condoléance/S. +condom/S. +condominium/S. +condor/S. +condottiere/I. +condruzienne/F. +conductance/S. +conductibilité/S. +conductible/S. +conductimètre/S. +conductimétrie/S. +conduction/S. +conductive/F. +conductivité/S. +conducto-convective/F. +conductrice/F. +conduire/yM +conduiseuse/F. +conduite/F. +condyle/S. +condylienne/F. +condylome/S. +cône/S. +conf +confabulation/S. +confabulatrice/F. +confection/S. +confectionner/a0p+ +confectionneuse/F. +confédérale/W. +confédéralisme/S. +confédération/S. +confédérative/F. +confédératrice/F. +confédérée/F. +confédérer/c0p+ +confer +conférence/S. +conférencière/F. +conférent/S. +conférer/c0p+ +conferve/S. +confessante/F. +confesse/S. +confesser/a0p+ +confesseur/S. +confession/S. +confessionnal/X. +confessionnalisation/S. +confessionnalisme/S. +confessionnaliste/S. +confessionnelle/F. +confessionnellement +confetti/S. +confiance/S. +confiancer/a0p+ +confiante/F. +confidemment +confidence/S. +confidente/F. +confidentialité/S. +confidentielle/F. +confidentiellement +confier/a0p+ +config/S. +configurable/S. +configuration/S. +configurationnelle/F. +configurer/a0p+ +confinement/S. +confiner/a0p+ +confins +confiote/S. +confire/yV +confirmande/F. +confirmation/S. +confirmative/F. +confirmatoire/S. +confirmer/a0p+ +confiscable/S. +confiscation/S. +confiscatoire/S. +confiserie/S. +confiseuse/F. +confisquer/a0p+ +confit/S. +confitage/S. +confiteor +confiture/S. +confiturer/a0p+ +confiturerie/S. +confiturière/F. +conflagration/S. +conflictualité/S. +conflictuelle/F. +conflit/S. +confluence/S. +confluent/S. +confluer/a0p. +confondante/F. +confondre/tA +conformateur/S. +conformation/S. +conformationnelle/F. +conforme/S. +conformément +conformer/a0p+ +conformisme/S. +conformiste/S. +conformité/S. +confort/S. +confortable/S. +confortablement +conforter/a0p+ +confortique/S. +confraternelle/F. +confraternellement +confraternité/S. +confrère/S. +confrérie/S. +confrérique/S. +confrontation/S. +confronter/a0p+ +confucéenne/F. +confucianisme/S. +confucianiste/S. +confuse/F. +confusément +confusion/S. +confusionnelle/F. +confusionnisme/S. +confusionniste/S. +conga/S. +congaï/S. +congaye/S. +congé/S. +congéable/S. +congédiable/S. +congédiement/S. +congédier/a0p+ +congelable/S. +congélateur/S. +congélation/S. +congeler/b0p+ +congélo/S. +congénère/S. +congénitale/W. +congénitalement +congère/S. +congestion/S. +congestionner/a0p+ +congestive/F. +congiaire/S. +conglomérale/W. +conglomérat/S. +conglomération/S. +conglomérer/c0p+ +conglutination/S. +conglutiner/a0p+ +congolaise/F. +congratulation/S. +congratuler/a0p+ +congre/S. +congréer/a0p+ +congréganiste/S. +congrégation/S. +congrégationalisme/S. +congrégationaliste/S. +congrès +congressiste/S. +congrève/S. +congrue/F. +congruence/S. +congruente/F. +congruité/S. +congrûment +conicine/S. +conicité/S. +conidie/S. +conifère/S. +conique/S. +conique/S. +coniquement +cônir/f0p+ +conirostre/S. +conjecturable/S. +conjecturale/W. +conjecturalement +conjecture/S. +conjecturer/a0p+ +conjoindre/wB +conjointe/F. +conjointement +conjoncteur/S. +conjonction/S. +conjonctivale/W. +conjonctive/F. +conjonctivite/S. +conjoncture/S. +conjoncturelle/F. +conjoncturellement +conjoncturiste/S. +conjugabilité/S. +conjugable/S. +conjugaison/S. +conjugale/W. +conjugalement +conjugalité/S. +conjuguer/a0p+ +conjugueur/S. +conjungo/S. +conjuration/S. +conjuratoire/S. +conjuratrice/F. +conjurée/F. +conjurer/a0p+ +connaissable/S. +connaissance/S. +connaissement/S. +connaisseuse/F. +connaître/wQq+ +connarde/F. +connasse/S. +connaturelle/F. +conne/F. +conneau/X. +connectabilité/S. +connectable/S. +connecter/a0p+ +connecteur/S. +connecticienne/F. +connectique/S. +connective/F. +connectivité/S. +connée/F. +connement +connerie/S. +connétable/S. +connétablie/S. +connexe/S. +connexion/S. +connexionnisme/S. +connexionniste/S. +connexité/S. +connivence/S. +connivente/F. +connobler +connotation/S. +connotative/F. +connoter/a0p+ +connu/S. +conobrer/a0p+ +conodale/S. +conoïdale/W. +conoïde/S. +conoïde/S. +conopée/S. +conormale/W. +conoyau/X. +conque/S. +conquérante/F. +conquérir/iK +conquêt/S. +conquête/S. +conquise/F. +conquistador/S. +conquistadores +consacrer/a0p+ +consanguine/F. +consanguinité/S. +consciemment +conscience/S. +consciencieuse/W. +consciencieusement +conscient/S. +consciente/F. +conscientisation/S. +conscientiser/a0p+ +conscription/S. +conscrit/S. +consécrateur/S. +consécration/S. +consécratoire/S. +consécution/S. +consécutive/F. +consécutivement +conseil/S. +conseiller/a0p+ +conseillère/F. +conseilleuse/F. +consensuelle/F. +consensuellement +consensus +consentante/F. +consentement/S. +consentir/i5q+ +conséquemment +conséquence/S. +conséquente/F. +conservable/S. +conservation/S. +conservationniste/S. +conservatisme/S. +conservative/F. +conservatoire/S. +conservatoire/S. +conservatrice/F. +conserve/S. +conserver/a0p+ +conserverie/S. +conserveuse/F. +considérable/S. +considérablement +considération/S. +considérative/F. +considérer/c0p+ +consignataire/S. +consignation/S. +consigne/S. +consigner/a0p+ +consistance/S. +consistante/F. +consister/a0p. +consistoire/S. +consistoriale/W. +consistorialement +conso/S. +consœur/S. +consolable/S. +consolante/F. +consolation/S. +consolatrice/F. +console/S. +consoler/a0p+ +consolidable/S. +consolidation/S. +consolider/a0p+ +consommable/S. +consommable/S. +consommation/S. +consommatoire/S. +consommatrice/F. +consommé/S. +consommer/a0p+ +consomptible/S. +consomption/S. +consomptive/F. +consonance/S. +consonante/F. +consonantique/S. +consonantisme/S. +consoner/a0p. +consonne/S. +consort/S. +consortiale/W. +consortium/S. +consoude/S. +conspiration/S. +conspirationnisme/S. +conspirationniste/S. +conspiratrice/F. +conspirer/a0p+ +conspuer/a0p+ +constable/S. +constamment +constance/S. +constantan/S. +constante/F. +constante/S. +constantinienne/F. +constantinoise/F. +constat/S. +constatable/S. +constatation/S. +constater/a0p+ +constellation/S. +consteller/a0p+ +consternante/F. +consternation/S. +consterner/a0p+ +constipation/S. +constiper/a0p+ +constituante/F. +constituer/a0p+ +constitution/S. +constitutionnalisation/S. +constitutionnaliser/a0p+ +constitutionnalisme/S. +constitutionnaliste/S. +constitutionnalité/S. +constitutionnelle/F. +constitutionnellement +constitutive/F. +constitutivement +constricteur/S. +constriction/S. +constrictive/F. +constrictor/S. +constringente/F. +constructibilité/S. +constructible/S. +construction/S. +constructive/F. +constructivisme/S. +constructiviste/S. +constructivité/S. +constructrice/F. +construire/yM +consubstantialité/S. +consubstantiation/S. +consubstantielle/F. +consubstantiellement +consulaire/S. +consulairement +consulat/S. +consule/F. +consultable/S. +consultance/S. +consultante/F. +consultation/S. +consultative/F. +consulter/a0p+ +consulteur/S. +consultrice/F. +consumable/S. +consumation/S. +consumer/a0p+ +consumérisme/S. +consumériste/S. +contact/S. +contacter/a0p+ +contacteur/S. +contactologie/S. +contactologiste/S. +contactologue/S. +contadine/F. +contage/S. +contagieuse/W. +contagieusement +contagion/S. +contagionner/a0p+ +contagiosité/S. +container/S. +containérisation/S. +containériser/a0p+ +contaminable/S. +contaminante/F. +contamination/S. +contaminatrice/F. +contaminer/a0p+ +conte/S. +contemplation/S. +contemplative/F. +contemplativement +contemplatrice/F. +contempler/a0p+ +contemporaine/F. +contemporainement +contemporanéité/S. +contemptrice/F. +contenance/S. +contenante/F. +conteneur/S. +conteneurisation/S. +conteneuriser/a0p+ +contenir/i0q+ +contente/F. +contentement/S. +contenter/a0p+ +contentieuse/W. +contentieusement +contention/S. +contentive/F. +contenu/S. +conter/a0p+ +contestable/S. +contestataire/S. +contestation/S. +contestatrice/F. +conteste/S. +contester/a0p+ +conteuse/F. +contexte/S. +contextualisable/S. +contextualisation/S. +contextualiser/a0p+ +contextualité/S. +contextuelle/F. +contextuellement +contexture/S. +contiguë/F. +contiguïté/S. +continence/S. +continent/S. +continentale/W. +continentalité/S. +continente/F. +contingence/S. +contingente/F. +contingentement/S. +contingenter/a0p+ +continuation/S. +continuatrice/F. +continue/F. +continuelle/F. +continuellement +continuer/a0p+ +continuisme/S. +continuité/S. +continûment +continuo/S. +continuum/S. +contondante/F. +contorsion/S. +contorsionner/a0p+ +contorsionnisme/S. +contorsionniste/S. +contour/S. +contournable/S. +contournage/S. +contournement/S. +contourner/a0p+ +contraceptif/S. +contraception/S. +contraceptive/F. +contractante/F. +contracter/a0p+ +contracteur/S. +contractibilité/S. +contractile/S. +contractilité/S. +contraction/S. +contractualisation/S. +contractualiser/a0p+ +contractualisme/S. +contractualiste/S. +contractualité/S. +contractuelle/F. +contractuellement +contracture/S. +contracturer/a0p+ +contracyclique/S. +contradicteur/S. +contradiction/S. +contradictoire/S. +contradictoirement +contragestif/S. +contragestion/S. +contragestive/F. +contraignable/S. +contraignante/F. +contraindre/wO +contrainte/S. +contraire/S. +contraire/S. +contrairement +contraltiste/S. +contralto/S. +contrapontique/S. +contraposée/F. +contraposée/S. +contraposition/S. +contrapuntique/S. +contrapuntiste/S. +contrariante/F. +contrarier/a0p+ +contrariété/S. +contrario +contrarotative/F. +contrastante/F. +contraste/S. +contraster/a0p+ +contrastive/F. +contrat/S. +contravariant/S. +contravention/S. +contraventionnelle/F. +contravis +contre +contre/S. +contre-alizé/S. +contre-allée/S. +contre-amirale/W. +contre-appel/S. +contre-arc/S. +contre-argument/S. +contre-assurance/S. +contre-attaquable/S. +contre-attaquante/F. +contre-attaque/S. +contre-attaquer/a0p+ +contrebalancement/S. +contrebalancer/a0p+ +contrebande/S. +contrebandière/F. +contrebas +contrebasse/S. +contrebassiste/S. +contrebasson/S. +contrebatte/S. +contrebatterie/S. +contrebattre/uA +contrebord +contrebouter/a0p+ +contrebraquage/S. +contre-braquage/S. +contrebraquer/a0p. +contre-braquer/a0p. +contrebutement/S. +contrebuter/a0p+ +contre-buter/a0p+ +contre-calque/S. +contre-calquer/a0p+ +contrecarrer/a0p+ +contre-caution/S. +contrechamp/S. +contre-chant/S. +contrecharge/S. +contre-charge/S. +contrechâssis +contre-châssis +contre-choc/S. +contreclef/S. +contrecœur/S. +contrecollage/S. +contrecoller/a0p+ +contrecoup/S. +contre-courant/S. +contre-courbe/S. +contre-culture/S. +contredanse/S. +contre-dénonciation/S. +contre-digue/S. +contredire/yD +contredisante/F. +contredit/S. +contrée/S. +contre-écrou/S. +contre-électromotrice/F. +contre-emploi/S. +contre-empreinte/S. +contre-enquête/S. +contre-épaulette/S. +contre-épreuve/S. +contre-espalier/S. +contre-espionnage/S. +contre-essai/S. +contre-exemple/S. +contre-expertise/S. +contre-extension/S. +contre-fa +contrefaçon/S. +contrefaction/S. +contrefactrice/F. +contrefactualité/S. +contrefactuelle/F. +contrefaire/wD +contrefaisante/F. +contrefaiseuse/F. +contre-fenêtre/S. +contre-fer/S. +contre-feu/X. +contrefiche/S. +contre-fiche/S. +contreficher/a0p+ +contre-fil/S. +contre-filet/S. +contrefixation/S. +contreflèche/S. +contrefort/S. +contrefoutre/tM +contre-fugue/S. +contre-haut +contre-hermine/S. +contre-heurtoir/S. +contre-histoire/S. +contre-hus +contre-indication/S. +contre-indiquer/a0p+ +contre-interrogatoire/S. +contre-intuitive/F. +contre-investissement/S. +contre-ion/S. +contre-jambage/S. +contre-jour/S. +contre-la +contre-lame/S. +contre-la-montre +contre-latte/S. +contre-lettre/S. +contre-lignage/S. +contremaîtresse/F. +contre-maîtresse/F. +contremander/a0p+ +contre-manifestante/F. +contre-manifestation/S. +contre-manifester/a0p. +contremarche/S. +contremarquage/S. +contremarque/S. +contremarquer/a0p+ +contre-mesure/S. +contre-mi +contre-mine/S. +contre-miner/a0p+ +contre-mur/S. +contre-murer/a0p+ +contre-offensive/S. +contre-ordre/S. +contre-pal/S. +contrepartie/S. +contrepartiste/S. +contre-pas +contre-passation/S. +contre-passer/a0p+ +contre-pente/S. +contre-perçage/S. +contreperçante/F. +contrepercement/S. +contre-percer/a0p+ +contre-performance/S. +contrepet/S. +contrepèterie/S. +contre-pied/S. +contreplacage/S. +contre-placage/S. +contreplaqué/S. +contre-plaqué/S. +contreplaquer/a0p+ +contre-plaquer/a0p+ +contre-plongée/S. +contrepoids +contre-poil +contre-poinçon/S. +contrepoint/S. +contre-point/S. +contre-pointe/S. +contrepointiste/S. +contrepoison/S. +contre-porte/S. +contre-pousser/a6p+ +contre-pouvoir/S. +contre-préparation/S. +contre-pression/S. +contre-prestation/S. +contre-productive/F. +contre-profil/S. +contre-profiler/a0p+ +contre-projet/S. +contre-propagande/S. +contre-proposition/S. +contre-publicité/S. +contrer/a0p+ +contre-rail/S. +contre-ré +contre-réaction/S. +contre-réforme/S. +contre-rejet/S. +contre-remontrant/S. +contre-révolution/S. +contre-révolutionnaire/S. +contrescarpe/S. +contresceau/X. +contre-sceau/X. +contre-sceller/a0p+ +contreseing/S. +contre-sel/S. +contresens +contre-si +contresignataire/S. +contresignature/S. +contresigner/a0p+ +contre-société/S. +contre-sol +contre-sommet/S. +contre-sujet/S. +contre-taille/S. +contretemps +contre-temps +contre-ténor/S. +contre-terrasse/S. +contre-terrorisme/S. +contre-terroriste/S. +contre-timbre/S. +contre-tirer/a0p+ +contre-torpilleur/S. +contre-transfert/S. +contretype/S. +contre-ut +contre-vair/S. +contre-valeur/S. +contrevallation/S. +contrevenante/F. +contrevenir/i0q+ +contrevent/S. +contreventement/S. +contre-vérification/S. +contre-vérifier/a0p+ +contrevérité/S. +contre-vérité/S. +contre-visite/S. +contre-voie +contre-voie/S. +contribuable/S. +contribuer/a0p. +contributaire/S. +contribution/S. +contributive/F. +contributoire/S. +contributrice/F. +contrister/a0p+ +contrite/F. +contrition/S. +contrôlabilité/S. +contrôlable/S. +controlatérale/W. +contrôle/S. +contrôler/a0p+ +contrôleuse/F. +contrordre/S. +controuver/a0p+ +controversable/S. +controverse/S. +controverser/a0p+ +controversiste/S. +contumace/S. +contumax +contuse/F. +contusion/S. +contusionner/a0p+ +conurbation/S. +convaincable/S. +convaincante/F. +convaincre/wP +convaincue/F. +convalescence/S. +convalescente/F. +convalidation/S. +convalider/a0p+ +convecteur/S. +convection/S. +convective/F. +convenable/S. +convenablement +convenance/S. +convenir/i0q+ +convent/S. +conventicule/S. +convention/S. +conventionnalisme/S. +conventionnaliste/S. +conventionnalité/S. +conventionnelle/F. +conventionnellement +conventionnement/S. +conventionner/a0p+ +conventualité/S. +conventuelle/F. +conventuellement +convergence/S. +convergente/F. +converger/a0p. +conversation/S. +conversationnelle/F. +converse/F. +converser/a0p. +conversion/S. +conversive/F. +convertibilité/S. +convertible/S. +convertir/f0p+ +convertissable/S. +convertissage/S. +convertissement/S. +convertisseuse/F. +convexe/S. +convexité/S. +conviction/S. +convier/a0p+ +convive/S. +conviviale/W. +convivialiser/a0p+ +convivialité/S. +convocable/S. +convocation/S. +convoi/S. +convoiement/S. +convoitable/S. +convoiter/a0p+ +convoiteuse/F. +convoiteuse/W. +convoitise/S. +convoler/a0p. +convolute/S. +convolutée/F. +convolution/S. +convolutive/F. +convolvulacée/S. +convolvulacée/S. +convolvulus +convoquée/F. +convoquer/a0p+ +convoyage/S. +convoyer/a0p+ +convoyeuse/F. +convulser/a0p+ +convulsion/S. +convulsionnaire/S. +convulsionner/a0p+ +convulsive/F. +convulsivement +coobligée/F. +coobtention/S. +co-obtention/S. +cooccupante/F. +cooccurrence/S. +cooccurrente/F. +cookie/S. +cool +coolie/S. +coop/S. +coopérante/F. +coopération/S. +coopératisme/S. +coopérative/F. +coopérative/S. +coopérativisme/S. +coopérativiste/S. +coopératrice/F. +coopérer/c0p. +coopétition/S. +cooptation/S. +coopter/a0p+ +coorbitale/W. +co-orbitale/W. +coordination/S. +coordinatrice/F. +coordinence/S. +coordonnatrice/F. +coordonnée/S. +coordonner/a0p+ +coorganisatrice/F. +coorganiser/a0p+ +copaïer/S. +copain/S. +copal/S. +coparent/S. +coparentale/W. +coparentalité/S. +coparrainage/S. +copartage/S. +copartageante/F. +copartager/a0p+ +coparticipante/F. +coparticipation/S. +copayer/S. +copeau/X. +copépode/S. +copermuter/a0p+ +copernicienne/F. +copernicium/S. +copiable/S. +copiage/S. +copie/S. +copier/a0p+ +copier-coller +copieuse/F. +copieuse/W. +copieusement +copilote/S. +copiloter/a0p+ +copinage/S. +copine/S. +copiner/a0p. +copinerie/S. +copion/S. +copiste/S. +copla/S. +coplanaire/S. +copolymère/S. +copolymérisable/S. +copolymérisation/S. +copolymériser/a0p+ +coposséder/c0p+ +copossesseur/S. +copossession/S. +coprah/S. +coprésence/S. +coprésente/F. +coprésidence/S. +coprésidente/F. +coprésider/a0p+ +coprin/S. +coprocesseur/S. +coproculture/S. +coprocureure/S. +coprocureuse/F. +coproduction/S. +coproductrice/F. +coproduire/yM +coproduit/S. +co-produit/S. +coprolalie/S. +coprolithe/S. +coprologie/S. +coprologique/S. +coprophage/S. +coprophagie/S. +coprophile/S. +coprophilie/S. +copropriétaire/S. +copropriété/S. +coproscopie/S. +copte/S. +copulation/S. +copulative/F. +copulatoire/S. +copulatrice/F. +copule/S. +copuler/a0p. +copyleft/S. +copyright/S. +coq/S. +coq-à-l'âne +coquard/S. +coquart/S. +coque/S. +coquebine/F. +coquecigrue/S. +coquelet/S. +coqueleuse/W. +coquelicot/S. +coqueluche/S. +coquelucheuse/W. +coquemar/S. +coquer/a0p+ +coquerelle/S. +coquerico/S. +coquerie/S. +coqueron/S. +coquètement +coqueter/d0p+ +coquetier/S. +coquetière/S. +coquette/F. +coquettement +coquetterie/S. +coquillage/S. +coquillard/S. +coquillart/S. +coquille/S. +coquiller/a0p+ +coquillette/S. +coquilleuse/F. +coquillière/F. +coquine/F. +coquinement +coquinerie/S. +cor/S. +coracle/S. +coraco-brachiale/W. +coracoïde/S. +coracoïdienne/F. +corail +corail/X. +corailleuse/F. +coralliaire/S. +coralliaire/S. +corallienne/F. +corallifère/S. +coralliforme/S. +coralligène/S. +coralline/F. +coralline/S. +coralloïde/S. +coran/S. +coranique/S. +coraniser/a0p+ +corapporteuse/F. +corb/S. +corbac/S. +corbeau/X. +corbeille/S. +corbeillée/S. +corbillard/S. +corbillat/S. +corbillon/S. +corbin/S. +cordage/S. +corde/S. +cordeau/X. +cordée/F. +cordeler/d0p+ +cordelette/S. +cordelière/F. +corder/a0p+ +corderie/S. +cordeuse/S. +cordiale/W. +cordialement +cordialité/S. +cordière/F. +cordiérite/S. +cordiforme/S. +cordillère/S. +cordiste/S. +cordite/S. +cordon/S. +cordon-bleu +cordonner/a0p+ +cordonnerie/S. +cordonnet/S. +cordonnière/F. +cordons-bleus +cordyline/S. +coréalisatrice/F. +corécepteur/S. +co-récepteur/S. +corédactrice/F. +coréenne/F. +coréférence/S. +corégence/S. +corégente/F. +corégone/S. +coreligionnaire/S. +coréopsis +corépresseur/S. +coresponsabilité/S. +coresponsable/S. +coriace/S. +coriandre/S. +coricide/S. +corindon/S. +corinthienne/F. +corium/S. +corme/S. +cormier/S. +cormophyte/S. +cormoran/S. +cornac/S. +cornacée/S. +cornacée/S. +cornage/S. +cornaline/S. +cornancher/a0p+ +cornaquer/a0p+ +cornard/S. +corne/S. +corned-beef +cornéenne/F. +corneille/S. +cornélienne/F. +cornement/S. +cornemuse/S. +cornemuseuse/F. +cornemuseux +corner/S. +corner/a0p+ +cornet/S. +cornette/S. +cornettiste/S. +corn-flake/S. +corniaud/S. +corniche/S. +cornichon/S. +cornichonnerie/S. +cornière/F. +cornillon/S. +cornique/S. +cornique/S. +corniste/S. +cornouaillaise/F. +cornouille/S. +cornouiller/S. +cornue/F. +corollaire/S. +corollairement +corolle/S. +coron/S. +coronaire/S. +coronale/W. +coronarienne/F. +coronarite/S. +coronarographie/S. +coronavirus +coronelle/S. +coroner/S. +coronille/S. +coronographe/S. +coronographie/S. +coronoïde/S. +corossol/S. +corossolier/S. +corozo/S. +corporal/X. +corporalité/S. +corporation/S. +corporatisme/S. +corporatiste/S. +corporative/F. +corporativement +corporéité/S. +corporelle/F. +corporellement +corporification/S. +corporifier/a0p+ +corporiser/a0p+ +corps +corps-à-corps +corps-mort/S. +corpulence/S. +corpulente/F. +corpus +corpusculaire/S. +corpuscule/S. +corral/S. +corrasion/S. +correcte/F. +correctement +correcticiel/S. +correctif/S. +correction/S. +correctionnalisation/S. +correctionnaliser/a0p+ +correctionnelle/F. +correctionnellement +corrective/F. +correctrice/F. +corrélable/S. +corrélat/S. +corrélation/S. +corrélationnelle/F. +corrélative/F. +corrélativement +corréler/c0p+ +correspondance/S. +correspondancière/F. +correspondante/F. +correspondre/tEq. +corrézienne/F. +corrida/S. +corridor/S. +corrigé/S. +corrigeable/S. +corriger/a0p+ +corrigeuse/F. +corrigible/S. +corroboration/S. +corroborer/a0p+ +corrodante/F. +corroder/a0p+ +corroi/S. +corroierie/S. +corrompre/tA +corrompue/F. +corrosion/S. +corrosive/F. +corrosivité/S. +corroyage/S. +corroyer/a0p+ +corroyeuse/F. +corruptibilité/S. +corruptible/S. +corruption/S. +corruptrice/F. +corsage/S. +corsaire/S. +corse/S. +corselet/S. +corser/a0p+ +corset/S. +corsetage/S. +corseter/b0p+ +corseterie/S. +corsetière/F. +corso/S. +cortège/S. +cortès +cortex +corticale/W. +corticoïde/S. +corticoïde/S. +corticole/S. +corticospinale/W. +cortico-spinale/W. +corticostéroïde/S. +corticostéroïde/S. +corticostérone/S. +corticostimuline/S. +corticosurrénale/S. +cortico-surrénale/S. +corticosurrénale/W. +cortico-surrénale/W. +corticothérapie/S. +corticotrophine/S. +cortinaire/S. +cortine/S. +cortisol/S. +cortisone/S. +cortisonique/S. +coruscante/F. +corvéable/S. +corvée/S. +corvette/S. +corvidé/S. +corybante/S. +corymbe/S. +coryphée/S. +coryza/S. +cos +cosaque/S. +coscénariste/S. +cosécante/S. +cosh +cosignataire/S. +cosignature/S. +cosigner/a0p+ +cosinus +cosméticienne/F. +cosmétique/S. +cosmétiquer/a0p+ +cosmétologie/S. +cosmétologique/S. +cosmétologue/S. +cosmicité/S. +cosmide/S. +cosmique/S. +cosmiquement +cosmochimie/S. +cosmodrome/S. +cosmogénique/S. +cosmogonie/S. +cosmogonique/S. +cosmographe/S. +cosmographie/S. +cosmographique/S. +cosmologie/S. +cosmologique/S. +cosmologiste/S. +cosmologue/S. +cosmonaute/S. +cosmopolite/S. +cosmopolitique/S. +cosmopolitisme/S. +cosmos +cosolvant/S. +cosplay/S. +cosplayeuse/F. +cossarde/F. +cosse/S. +cosser/a0p. +cossette/S. +cosson/S. +cossue/F. +costale/W. +costard/S. +costaricaine/F. +costaricienne/F. +costarmoricaine/F. +costaude/F. +costière/S. +costume/S. +costumer/a0p+ +costumière/F. +cosy/S. +cotable/S. +cotan +cotangente/S. +cotanh +cotation/S. +cote/S. +côte/S. +côté/S. +coteau/X. +côtelée/F. +côtelette/S. +coter/a0p+ +coterie/S. +cothurne/S. +cotice/S. +coticée/F. +coticule/S. +cotidale/W. +cotiennes +côtière/F. +cotillon/S. +cotinga/S. +cotir/f0p+ +cotisante/F. +cotisation/S. +cotiser/a0p+ +côtoiement/S. +coton/S. +cotonéaster/S. +cotonnade/S. +cotonner/a0p+ +cotonnerie/S. +cotonnette/S. +cotonneuse/W. +cotonneusement +cotonnière/F. +cotons-tiges +coton-tige +côtoyer/a0p+ +cotre/S. +cotret/S. +cotriade/S. +cottage/S. +cotte/S. +cotutelle/S. +cotutrice/F. +cotyle/S. +cotylédon/S. +cotylédonée/F. +cotyloïde/S. +cou/S. +couac/S. +couarde/F. +couardement +couardise/S. +couchage/S. +couchailler/a0p. +couchante/F. +couche/S. +couche-culotte +coucher/S. +coucher/a0p+ +coucherie/S. +couches-culottes +couche-tard +couche-tôt +couchette/S. +coucheuse/F. +couchis +couchitique/S. +couchoir/S. +couci-couça +coucou +coucou/S. +coucougnette/S. +coucoumelle/S. +coude/S. +coude-à-coude +coudée/S. +cou-de-pied +couder/a0p+ +coudière/S. +coudoiement/S. +coudoyer/a0p+ +coudraie/S. +coudre/xO +coudrier/S. +couenne/S. +couenneuse/W. +couette/S. +couffin/S. +coufique/S. +coufique/S. +cougar/S. +cougnou/S. +couguar/S. +couic +couillard/S. +couille/S. +couiller/a0p+ +couillonnade/S. +couillonne/F. +couillonner/a0p+ +couillue/F. +couinement/S. +couiner/a0p. +coulabilité/S. +coulage/S. +coulante/F. +coule/S. +coulée/F. +coulemelle/S. +couler/a0p+ +couleur/S. +couleuvre/S. +couleuvreau/X. +couleuvrine/S. +couleuvrinier/S. +coulevrine/S. +coulis +coulissage/S. +coulissante/F. +coulisse/S. +coulisseau/X. +coulissement/S. +coulisser/a0p+ +coulissier/S. +couloir/S. +coulomb/Um +coulombienne/F. +coulommiers +coulpe/S. +coulure/S. +coumarine/S. +country +coup/S. +coupable/S. +coupablement +coupage/S. +coupailler/a0p+ +coupante/F. +coupe/S. +coupeau/X. +coupe-batterie +coupe-bordure/S. +coupe-boulon/S. +coupe-choux +coupe-cigares +coupe-circuit +coupe-coupe +coupecoupe/S. +coupé-décalé +coupée/F. +coupe-faim +coupe-feu +coupe-file +coupe-gorge +coupe-herbe/S. +coupe-jambon +coupe-jarrets +coupe-légumes +coupellation/S. +coupelle/S. +coupeller/a0p+ +coupe-mottes +coupe-ongles +coupe-papier +coupe-pâte +couper/a0p+ +coupe-racines +couper-coller +couperet/S. +couperose/S. +couperosée/F. +coupés-décalés +coupe-tube/S. +coupeuse/F. +coupe-vent +coupe-verre/S. +couplage/S. +couple/S. +coupler/a0p+ +couplet/S. +coupleur/S. +coupoir/S. +coupole/S. +coupon/S. +couponnage/S. +coupon-réponse +coupons-réponse +coupure/S. +couque/S. +cour/S. +courage/S. +courageuse/W. +courageusement +courailler/a0p. +couramment +courant +courante/F. +courantologie/S. +courantomètre/S. +courate/S. +courbaril/S. +courbatue/F. +courbature/S. +courbaturer/a0p+ +courbe/S. +courbe/S. +courbement/S. +courber/a0p+ +courbette/S. +courbure/S. +courcaillet/S. +courée/S. +courette/S. +coureuse/F. +courge/S. +courgette/S. +courir/iE +courlieu/X. +courlis +couronne/S. +couronnement/S. +couronner/a0p+ +couroucou/S. +courre +courriel/S. +courrielleur/S. +courrière/F. +courriériste/S. +courroie/S. +courroucer/a0p+ +courroux +cours +course/S. +course-poursuite +courser/a0p+ +courses-poursuites +coursière/F. +coursive/S. +coursonne/F. +courtage/S. +courtaude/F. +courtauder/a0p+ +court-bouillon +court-circuit +court-circuitage +court-circuiter/a0p+ +court-courrier/S. +courte/F. +courtement +courtepointe/S. +courtesse/S. +courtière/F. +courtilière/S. +courtille/F. +courtine/S. +courtisane/F. +courtisanerie/S. +courtisée/F. +courtiser/a0p+ +court-métrage +courtoise/F. +courtoisement +courtoisie/S. +courtraisienne/F. +courts-bouillons +courts-circuitages +courts-circuits +courts-métrages +court-termisme/S. +court-termiste/S. +court-vêtue/F. +couscous +couscoussier/S. +cous-de-pied +cousette/S. +couseuse/F. +cousinade/S. +cousinage/S. +cousine/F. +cousiner/a0p. +cousoir/S. +coussin/S. +coussinet/S. +coût/S. +coûtante/F. +couteau/X. +couteauner/a0p+ +couteau-scie +couteaux-scies +coutelas +coutelière/F. +coutellerie/S. +coûter/a0p+ +coûteuse/W. +coûteusement +coutil/S. +coutoner/a0p+ +coutoyer/a0p+ +coutre/S. +coutume/S. +coutumière/F. +coutumièrement +couture/S. +couturer/a0p+ +couturière/F. +couvade/S. +couvain/S. +couvaison/S. +couvée/S. +couvent/S. +couventine/S. +couver/a0p+ +couvercle/S. +couverte/F. +couverture/S. +couveuse/S. +couveuse/S. +couvi/S. +couvoir/S. +couvrante/F. +couvre-bouche/S. +couvre-chaussure/S. +couvre-chef/S. +couvre-culasse/S. +couvre-feu/X. +couvre-joint/S. +couvre-lit/S. +couvre-livre/S. +couvre-nuque/S. +couvre-objet/S. +couvre-oreille/S. +couvre-pieds +couvre-plat/S. +couvre-théière/S. +couvreuse/F. +couvrir/iC +covalence/S. +covalente/F. +covariance/S. +covariante/F. +covariation/S. +covecteur/S. +covelline/S. +covellite/S. +covenant/S. +covendeuse/F. +cover-girl/S. +covin/S. +covoiturage/S. +covoiturer/a0p+ +covoitureuse/F. +covolume/S. +cowboy/S. +cow-boy/S. +cowper/S. +coxale/W. +coxalgie/S. +coxalgique/S. +coxarthrose/S. +coxer/a0p+ +coxofémorale/W. +coxo-fémorale/W. +coyau/X. +coyer/S. +coyote/S. +crabe/S. +crabier/S. +crabot/S. +crabotage/S. +crac +crac/S. +crachat/S. +crachement/S. +cracher/a0p+ +cracheuse/F. +crachin/S. +crachiner/a8p. +crachoir/S. +crachotement/S. +crachoter/a0p+ +crachouiller/a0p+ +crachouillis +crack/S. +cracker/S. +cracking/S. +cracovienne/F. +cracra +crade/S. +cradingue/S. +crado/S. +cradot/S. +craie/S. +craignos +crailler/a0p. +craindre/wO +crainte/S. +craintive/F. +craintivement +crambe/S. +crambé/S. +cramer/a0p+ +cramique/S. +cramoisie/F. +crampe/S. +crampillon/S. +crampon/S. +cramponnement/S. +cramponner/a0p+ +cramponnet/S. +crampser/a0p. +cramser/a0p. +cran/S. +cranberry/A. +crâne/S. +crânement +craner/a0p+ +crâner/a0p. +crânerie/S. +crâneuse/F. +craniectomie/S. +crânienne/F. +craniofaciale/W. +cranio-faciale/W. +craniologie/S. +craniologique/S. +craniométrie/S. +craniopharyngiome/S. +craniosténose/S. +crantage/S. +cranter/a0p+ +crapahuter/a0p. +crapaud/S. +crapaudière/S. +crapaudine/S. +crapauduc/S. +crapaüter/a0p. +crapette/S. +crapoter/a0p. +crapoteuse/W. +crapouillot/S. +crapoussine/F. +crapule/S. +crapuler/a0p. +crapulerie/S. +crapuleuse/W. +crapuleusement +craquage/S. +craquante/F. +craquelage/S. +craquèlement/S. +craqueler/d0p+ +craquelin/S. +craquellement/S. +craquelure/S. +craquement/S. +craquer/a0p+ +craquètement/S. +craqueter/d0p. +craquettement/S. +craqueuse/F. +crase/S. +crash/A. +crasher/a0p+ +crassane/S. +crasse/S. +crasser/a0p+ +crasseuse/W. +crassier/S. +crassulacée/S. +crassulacée/S. +crassule/S. +cratère/S. +craterelle/S. +cratériforme/S. +cratérisation/S. +cratérisée/F. +craton/S. +cratonique/S. +cravache/S. +cravacher/a0p+ +cravate/S. +cravater/a0p+ +crave/S. +crawl/S. +crawlée/F. +crawler/a0p. +crawleuse/F. +crayère/S. +crayeuse/W. +crayon/S. +crayonnage/S. +crayonné/S. +crayonner/a0p+ +crayonneuse/F. +crayonneuse/W. +cré +créance/S. +créancière/F. +créatine/S. +créatinine/S. +création/S. +créationnisme/S. +créationniste/S. +créatique/S. +créative/F. +créativité/S. +créatrice/F. +créature/S. +crécelle/S. +crécerelle/S. +crèche/S. +crécher/c0p. +créçoise/F. +crédence/S. +crédibiliser/a0p+ +crédibilité/S. +crédible/S. +crédirentière/F. +crédit/S. +crédit-bail +créditer/a0p+ +créditiste/S. +crédit-relai/S. +crédit-relais +créditrice/F. +crédits-bails +credo +crédule/S. +crédulement +crédulité/S. +creek/S. +créer/a0p+ +crémaillère/S. +crémant/S. +crémaster/S. +crémation/S. +crématiste/S. +crématoire/S. +crematorium/S. +crématorium/S. +crème +crème/S. +crémée/F. +crémer/c0p. +crémerie/S. +crèmerie/S. +crémeuse/W. +crémière/F. +crémone/S. +crénage/S. +créneau/X. +crénelage/S. +crénelée/F. +créneler/aY +crénelure/S. +créner/c0p+ +crénom +crénothérapie/S. +créole/S. +créolisation/S. +créoliser/a0p+ +créolisme/S. +créoliste/S. +créolistique/S. +créolité/S. +créosotage/S. +créosote/S. +créosoter/a0p+ +crêpage/S. +crêpe/S. +crêpelée/F. +crêpelure/S. +crêper/a0p+ +crêperie/S. +crépi/S. +crépidule/S. +crêpière/F. +crépin/S. +crépine/S. +crépinette/S. +crépir/f0p+ +crépissage/S. +crépisseuse/F. +crépissure/S. +crépitante/F. +crépitation/S. +crépitement/S. +crépiter/a0p. +crépon/S. +crépue/F. +crêpure/S. +crépusculaire/S. +crépuscule/S. +crescendo +crescendo +crescendo/S. +crésol/S. +cressicultrice/F. +cressiculture/S. +cresson/S. +cressonnette/S. +cressonnière/S. +crésus +crétacé/S. +crétacée/F. +crête/S. +crételer/aZ +crêter/a0p+ +crétine/F. +crétinerie/S. +crétinisation/S. +crétiniser/a0p+ +crétinisme/S. +crétoise/F. +creton/S. +cretonne/S. +creusage/S. +creuse/W. +creusement/S. +creuser/a0p+ +creuset/S. +creuseuse/F. +creusoise/F. +creute/S. +creux +crevaison/S. +crevante/F. +crevarde/F. +crevasse/S. +crevasser/a0p+ +crève/S. +crevé/S. +crève-chien/S. +crève-cœur +crevée/S. +crève-la-faim +crever/b0p+ +crève-tonneau +crevette/S. +crevetticultrice/F. +crevetticulture/S. +crevettier/S. +crève-vessie +crevure/S. +cri/S. +criaillement/S. +criailler/a0p. +criaillerie/S. +criailleuse/F. +criante/F. +criarde/F. +criardement +criblage/S. +crible/S. +cribler/a0p+ +cribleuse/F. +criblière/F. +criblure/S. +cric/S. +cricket/S. +cricoïde/S. +cricri/S. +cri-cri/S. +criée/S. +crier/a0p+ +crieuse/F. +crime/S. +criméenne/F. +criminalisation/S. +criminaliser/a0p+ +criminaliste/S. +criminalistique/S. +criminalité/S. +criminelle/F. +criminellement +criminogène/S. +criminologie/S. +criminologique/S. +criminologiste/S. +criminologue/S. +crin/S. +crincrin/S. +crinière/S. +crinoïde/S. +crinoïde/S. +crinoline/S. +criocère/S. +crique/S. +criquer/a0p+ +criquet/S. +crise/S. +criser/a0p. +crisique/S. +crispante/F. +crispation/S. +crisper/a0p+ +crissante/F. +crissement/S. +crisser/a0p. +cristal/X. +cristallerie/S. +cristallière/F. +cristallin/S. +cristalline/F. +cristallinienne/F. +cristallinité/S. +cristallisable/S. +cristallisante/F. +cristallisation/S. +cristalliser/a0p+ +cristallisoir/S. +cristallite/S. +cristallochimie/S. +cristallochimique/S. +cristallogène/S. +cristallogène/S. +cristallogenèse/S. +cristallogénie/S. +cristallographe/S. +cristallographie/S. +cristallographique/S. +cristalloïde/S. +cristallophyllienne/F. +criste-marine +cristes-marines +cristobalite/S. +critère/S. +critériologie/S. +critériologique/S. +criterium/I. +critérium/S. +crithme/S. +criticailler/a0p+ +criticisme/S. +criticiste/S. +criticité/S. +critiquable/S. +critique/S. +critiquement +critiquer/a0p+ +critiqueuse/F. +croassante/F. +croassement/S. +croasser/a0p. +croate/S. +croc/S. +croc-en-jambe +croche/S. +croche/S. +croche-patte/S. +croche-pied/S. +crocher/a0p+ +crochet/S. +crochetage/S. +crocheter/b0p+ +crocheteur/S. +crochue/F. +crocidolite/S. +croco/S. +crocodile/S. +crocodiler +crocodilien/S. +crocodilienne/F. +crocs-en-jambe +crocus +croire/xA +croisade/S. +croisée/F. +croisement/S. +croiser/a0p+ +croisetée/F. +croisette/S. +croiseur/S. +croisière/S. +croisiériste/S. +croisillon/S. +croissance/S. +croissant/S. +croissante/F. +croissantée/F. +croissanterie/S. +croissantière/F. +croisure/S. +croît/S. +croître/wTwU +croix +crolle/S. +crollée/F. +croller/a0p. +cromlech/S. +cromoglycate/S. +cromorne/S. +crônir +crooner/S. +croquante/F. +croque-madame +croquembouche/S. +croquemitaine/S. +croque-mitaine/S. +croque-monsieur +croque-mort/S. +croquenot/S. +croque-note/S. +croquer/a0p+ +croquet/S. +croquette/S. +croqueuse/F. +croquignole/S. +croquignolesque/S. +croquignolette/F. +croquine/S. +croquis +croskill/S. +crosne/S. +cross +cross-country/A. +crosse/S. +crosser/a0p+ +crossette/S. +crossoptérygien/S. +crotale/S. +crotaphite/S. +croton/S. +crotonisation/S. +crotte/S. +crotter/a0p+ +crottin/S. +crouillat/S. +crouille/S. +croulante/F. +croule/S. +croulement/S. +crouler/a0p. +crounir +croup/S. +croupade/S. +croupale/W. +croupe/S. +croupetons +croupie/F. +croupière/F. +croupion/S. +croupionner/a0p. +croupir/f0p. +croupissante/F. +croupissement/S. +croupon/S. +croustade/S. +croustillant/S. +croustillante/F. +croustille/S. +croustiller/a0p. +croustilleuse/W. +croustillon/S. +croûte/S. +croûter/a0p+ +croûteuse/W. +croûton/S. +croûtonner/a0p+ +crown-glass +croyable/S. +croyance/S. +croyante/F. +cru/S. +cruauté/S. +cruche/S. +cruchon/S. +cruciale/W. +crucialement +crucifère/S. +crucifère/S. +crucifiante/F. +crucifiée/F. +crucifiement/S. +crucifier/a0p+ +crucifix +crucifixion/S. +cruciforme/S. +cruciverbiste/S. +crudité/S. +crudivore/S. +crudivorisme/S. +crue/F. +crue/S. +cruelle/F. +cruellement +cruentée/F. +cruiser/S. +crumble/S. +crûment +crurale/W. +cruralgie/S. +crustacé/S. +crustale/W. +cruzado/S. +cruzeiro/S. +crwth/S. +cryobiologie/S. +cryochimie/S. +cryochirurgie/S. +cryoconcentration/S. +cryoconductrice/F. +cryoconservation/S. +cryogène/S. +cryogénie/S. +cryogénique/S. +cryogénisation/S. +cryogéniser/a0p+ +cryokinésie/S. +cryolite/S. +cryolithe/S. +cryologie/S. +cryométrie/S. +cryophysique/S. +cryo-protection/S. +cryoscopie/S. +cryoscopique/S. +cryosphère/S. +cryostat/S. +cryotechnique/S. +cryotechnique/S. +cryotempérature/S. +cryothérapie/S. +cryotron/S. +cryoturbation/S. +cryovolcanisme/S. +cryptage/S. +cryptanalyse/S. +cryptanalyste/S. +cryptand/S. +cryptate/S. +crypte/S. +crypter/a0p+ +cryptesthésie/S. +cryptique/S. +cryptobiose/S. +cryptobiotique/S. +cryptococcose/S. +cryptocommuniste/S. +cryptodevise/S. +cryptogame/S. +cryptogame/S. +cryptogamie/S. +cryptogamique/S. +cryptogénétique/S. +cryptogénique/S. +cryptogramme/S. +cryptographe/S. +cryptographie/S. +cryptographier/a0p+ +cryptographique/S. +cryptologie/S. +cryptologique/S. +cryptologue/S. +cryptomnésie/S. +cryptomonnaie/S. +crypto-monnaie/S. +cryptorchidie/S. +cryptosporidiose/S. +cryptozoologie/S. +cryptozoologiste/S. +cryptozoologue/S. +cténaire/S. +cténophore/S. +cuadrilla/S. +cubage/S. +cubaine/F. +cubature/S. +cube/S. +cube/S. +cubèbe/S. +cuber/a0p+ +cuberdon/S. +cubicule/S. +cubilot/S. +cubique/S. +cubique/S. +cubisme/S. +cubiste/S. +cubitainer/S. +cubitale/W. +cubitière/S. +cubitus +cuboctaèdre/S. +cuboïde/S. +cuboméduse/S. +cuche/S. +cucul +cuculle/S. +cucurbitacée/S. +cucurbitacée/S. +cucurbite/S. +cucurbitin/S. +cucuterie/S. +cueillage/S. +cueillaison/S. +cueillette/S. +cueilleuse/F. +cueillir/iR +cueilloir/S. +cuesta/S. +cui-cui +cui-cui +cuider/S. +çuilà +cuiller/S. +cuillère/S. +cuillerée/S. +cuilleron/S. +cuir/S. +cuirasse/S. +cuirassé/S. +cuirassement/S. +cuirasser/a0p+ +cuirassier/S. +cuire/yL +cuisamment +cuisante/F. +cuiseuse/F. +cuisine/S. +cuisiner/a0p+ +cuisinette/S. +cuisinière/F. +cuisiniste/S. +cuissage +cuissarde/F. +cuisse/S. +cuisseau/X. +cuisson/S. +cuissot/S. +cuistance/S. +cuistax +cuistot/S. +cuistre/S. +cuistrerie/S. +cuite/S. +cuiter/a0p+ +cuit-vapeur +cuivrage/S. +cuivre/S. +cuivrer/a0p+ +cuivrerie/S. +cuivreuse/W. +cuivrique/S. +cujus +cul/S. +culasse/S. +culbutage/S. +culbute/S. +culbuter/a0p+ +culbuteur/S. +culbutis +cul-de-basse-fosse +cul-de-jatte +cul-de-lampe +cul-de-poule +cul-de-sac +culée/S. +culer/a0p+ +culeron/S. +culex +culière/S. +culinaire/S. +culinairement +culminance/S. +culminante/F. +culmination/S. +culminer/a0p. +culot/S. +culottage/S. +culotte/S. +culotter/a0p+ +culottière/F. +culpabilisante/F. +culpabilisation/S. +culpabiliser/a0p+ +culpabilité/S. +culs-de-basse-fosse +culs-de-jatte +culs-de-lampe +culs-de-sac +culs-terreux +culte/S. +cul-terreux +cultisme/S. +cultissime/S. +cultivable/S. +cultivar/S. +cultivatrice/F. +cultiver/a0p+ +cultuelle/F. +cultuellement +culturale/W. +culturalisme/S. +culturaliste/S. +culture/S. +culturelle/F. +culturellement +culturisme/S. +culturiste/S. +cumène/S. +cumin/S. +cumul/S. +cumulable/S. +cumularde/F. +cumulation/S. +cumulative/F. +cumulativement +cumulativité/S. +cumulatrice/F. +cumuler/a0p+ +cumulet/S. +cumulo-dôme/S. +cumulonimbus +cumulo-nimbus +cumulostratus +cumulo-stratus +cumulo-volcan/S. +cumulus +cunéiforme/S. +cunéiforme/S. +cunette/S. +cuniculicultrice/F. +cuniculiculture/S. +cunicultrice/F. +cuniculture/S. +cunnilinctus +cunnilingus +cuon/S. +cupcake/S. +cupide/S. +cupidement +cupidité/S. +cupidon/S. +cuprate/S. +cupressinée/S. +cupressinée/S. +cuprifère/S. +cuprique/S. +cuprite/S. +cupro-alliage/S. +cupro-aluminium/S. +cupro-ammoniacale/W. +cupronickel/S. +cupule/S. +curabilité/S. +curable/S. +curaçao/S. +curage/S. +curaillon/S. +curare/S. +curarisante/F. +curarisation/S. +curatelle/S. +curation/S. +curative/F. +curatrice/F. +curcuma/S. +cure/S. +curé/S. +cure-dents +curée/S. +cure-ongles +cure-oreille +cure-oreille/S. +cure-pipe/S. +cure-pipes +curer/a0p+ +curetage/S. +cureter/d0p+ +cureton/S. +curettage/S. +curette/S. +curiale/W. +curie/S. +curie/Um +curiethérapie/S. +curieuse/W. +curieusement +curiosité/S. +curiste/S. +curium/S. +curling/S. +curoir/S. +curriculaire/S. +curriculum/I. +curry/S. +curseur/S. +cursive/F. +cursivement +cursus +curule/S. +curviligne/S. +curvilinéaire/S. +curvimètre/S. +cuscutacée/S. +cuscutacée/S. +cuscute/S. +cuspide/S. +cusser +custode/S. +custom/S. +customisation/S. +customiser/a0p+ +cutanée/F. +cut-back +cuter +cuti/S. +cuticulaire/S. +cuticule/S. +cutine/S. +cuti-réaction/S. +cutter/S. +cuvage/S. +cuvaison/S. +cuve/S. +cuveau/X. +cuvée/S. +cuvelage/S. +cuveler/d0p+ +cuvellement/S. +cuver/a0p+ +cuverie/S. +cuvette/S. +cuvier/S. +cuviste/S. +cyan +cyan/S. +cyanamide/S. +cyanate/S. +cyanelle/S. +cyanhydrique/S. +cyanine/S. +cyanique/S. +cyanoacrylate/S. +cyanobactérie/S. +cyanocobalamine/S. +cyanogène/S. +cyanogène/S. +cyanogénique/S. +cyanophycée/S. +cyanophycée/S. +cyanophyte/S. +cyanose/S. +cyanoser/a0p+ +cyanuration/S. +cyanure/S. +cyanurique/S. +cyberactivisme/S. +cyberattaque/S. +cybercafé/S. +cybercaméra/S. +cybercrime/S. +cybercriminalité/S. +cybercriminelle/F. +cyberculture/S. +cyberdéfense/S. +cyberdélinquance/S. +cyberdélinquante/F. +cyberdépendance/S. +cyberdépendante/F. +cyberespace/S. +cyberespionnage/S. +cyberguerre/S. +cyberharcèlement/S. +cybermarchande/F. +cybermilitante/F. +cybermilitantisme/S. +cybermonde/S. +cybernaute/S. +cybernéticienne/F. +cybernétique/S. +cybernétique/S. +cyberpatrouille/S. +cyberpirate/S. +cyberpolice/S. +cyberpunk +cybersécurité/S. +cybersexe/S. +cybersexisme/S. +cybersquat/S. +cybersquattage/S. +cybersquatter/S. +cybersquatter/a0p+ +cybersquatteuse/F. +cyberterrorisme/S. +cyberviolence/S. +cyborg/S. +cycas +cyclable/S. +cyclage/S. +cyclamen/S. +cyclane/S. +cycle/S. +cyclène/S. +cyclicité/S. +cycline/S. +cyclique/S. +cycliquement +cyclisation/S. +cycliser/a0p+ +cyclisme/S. +cycliste/S. +cyclo/S. +cycloalcane/S. +cycloalcène/S. +cyclo-cross/A. +cyclodextrine/S. +cyclogenèse/S. +cyclohexane/S. +cyclohexanone/S. +cycloïdale/W. +cycloïde/S. +cyclomoteur/S. +cyclomotoriste/S. +cyclonage/S. +cyclonale/W. +cyclone/S. +cyclonique/S. +cyclope/S. +cyclopéenne/F. +cyclopentane/S. +cycloplégie/S. +cyclo-pousse +cyclorama/S. +cyclorameur/S. +cyclosilicate/S. +cyclosporine/S. +cyclostome/S. +cyclothymie/S. +cyclothymique/S. +cyclotomie/S. +cyclotomique/S. +cyclotourisme/S. +cyclotouriste/S. +cyclotron/S. +cycloxydime/S. +cygne/S. +cyhalothrine/S. +cylindrage/S. +cylindraxe/S. +cylindre/S. +cylindrée/S. +cylindrer/a0p+ +cylindreuse/F. +cylindrique/S. +cylindroïde/S. +cylindroïde/S. +cylindro-ogivale/W. +cymaise/S. +cymbalaire/S. +cymbale/S. +cymbalière/F. +cymbaliste/S. +cymbalum/S. +cyme/S. +cymoxanil/S. +cymrique/S. +cynégétique/S. +cynégétique/S. +cynips +cynique/S. +cyniquement +cynisme/S. +cynocéphale/S. +cynodonte/S. +cynodrome/S. +cynoglosse/S. +cynophile/S. +cynorhodon/S. +cynorrhodon/S. +cyon/S. +cypéracée/S. +cypéracée/S. +cyperméthrine/S. +cyphoscoliose/S. +cyphose/S. +cyprès +cyprière/S. +cyprin/S. +cyprine/S. +cypriniculture/S. +cyprinidé/S. +cypriote/S. +cyprotérone/S. +cyrénaïque/S. +cyrillique/S. +cystectomie/S. +cystéine/S. +cysticerque/S. +cystine/S. +cystique/S. +cystite/S. +cystographie/S. +cystoscope/S. +cystoscopie/S. +cystoscopique/S. +cystostomie/S. +cystotomie/S. +cytidine/S. +cytise/S. +cytoarchitectonie/S. +cytoarchitectonique/S. +cytobactériologique/S. +cytochimique/S. +cytochrome/S. +cytodiagnostic/S. +cytodiérèse/S. +cytogénéticienne/F. +cytogénétique/S. +cytokine/S. +cytokinine/S. +cytologie/S. +cytologique/S. +cytologiquement +cytologiste/S. +cytolyse/S. +cytolytique/S. +cytomégalovirus +cytomètre/S. +cytométrie/S. +cytométrique/S. +cytopathologie/S. +cytopathologique/S. +cytopathologiste/S. +cytoplasme/S. +cytoplasmique/S. +cytosine/S. +cytosol/S. +cytosolique/S. +cytosquelette/S. +cytostatique/S. +cytotoxicité/S. +cytotoxique/S. +czar/S. +czardas +czimbalum/S. +d +d/||-- +dB/||-- +daba/S. +dacite/S. +dacryoadénite/S. +dacryocystite/S. +dactyle/S. +dactylique/S. +dactylo/S. +dactylogramme/S. +dactylographe/S. +dactylographie/S. +dactylographier/a0p+ +dactylographique/S. +dactylologie/S. +dactylologique/S. +dactyloscopie/S. +dada/S. +dadais +dadaïsme/S. +dadaïste/S. +dagorne/S. +dague/S. +daguer/a0p+ +daguerréotype/S. +daguerréotypie/S. +daguet/S. +dahabieh/S. +dahir/S. +dahlia/S. +dahoméenne/F. +dahu/S. +daigner/a0p+ +daim/S. +daïmio/S. +daine/S. +dais +dalaï-lama/S. +daleau/X. +dalembertienne/F. +dallage/S. +dalle +dalle/S. +daller/a0p+ +dallette/S. +dalleuse/F. +dalmate/S. +dalmatienne/F. +dalmatique/S. +dalot/S. +dalton/Um +daltonienne/F. +daltonisme/S. +dam +damage/S. +damalisque/S. +daman/S. +damas +damascène/S. +damasquinage/S. +damasquiner/a0p+ +damasquinerie/S. +damasquineuse/F. +damasquinure/S. +damassé/S. +damasser/a0p+ +damassine/S. +damassure/S. +dame/S. +dame-jeanne +damer/a0p+ +dames-jeannes +dameuse/F. +damier/S. +damnable/S. +damnation/S. +damnée/F. +damner/a0p+ +damoiseau/X. +damoiselle/S. +dampmartoise/F. +dan/S. +danaïde/S. +danaïde/S. +dancing/S. +dandin/S. +dandinante/F. +dandinement/S. +dandiner/a0p+ +dandinette/S. +dandy/A. +dandysme/S. +danger/S. +dangereuse/W. +dangereusement +dangerosité/S. +danienne/F. +danoise/F. +dano-islandaise/F. +dans +dansable/S. +dansante/F. +danse/S. +danser/a0p+ +danseuse/F. +dansoter/a0p. +dansotter/a0p. +dantesque/S. +dantoniste/S. +danubienne/F. +daphné/S. +daphnie/S. +daraise/S. +darbouka/S. +dard/S. +darder/a0p+ +dare-dare +dariole/S. +darique/S. +darjeeling/S. +dark +darknet/S. +darmstadtium/S. +darne/S. +darne/S. +daronne/F. +darse/S. +dartois +dartos +dartre/S. +dartreuse/W. +dartrose/S. +darwinienne/F. +darwinisme/S. +darwiniste/S. +dast/||-- +dasyure/S. +data +datable/S. +datacentre/S. +datage/S. +datagramme/S. +dataire/S. +datation/S. +datcha/S. +date/S. +dater/a0p+ +daterie/S. +dateuse/F. +datif/S. +dation/S. +dative/F. +datographe/S. +datte/S. +dattier/S. +datura/S. +daube/S. +dauber/a0p+ +daubeuse/F. +daubière/S. +d'aucuns +dauphine/F. +dauphinelle/S. +dauphinoise/F. +daurade/S. +davantage +davier/S. +dazibao/S. +de +dé/S. +déactiver/a0p+ +deal/S. +dealer/S. +dealer/a0p+ +déambulateur/S. +déambulation/S. +déambulatoire/S. +déambuler/a0p+ +débâchage/S. +débâcher/a0p+ +débâcle/S. +débâclement/S. +débâcler/a0p+ +débagouler/a0p+ +débâillonner/a0p+ +débalancement/S. +déballage/S. +déballastage/S. +déballer/a0p+ +déballonner/a0p+ +débalourder/a0p+ +débanalisation/S. +débanaliser/a0p+ +débandade/S. +débandage/S. +débander/a0p+ +débaptisation/S. +débaptiser/a0p+ +débarbante/F. +débarboter/a0p+ +débarbouillage/S. +débarbouiller/a0p+ +débarbouillette/S. +débarcadère/S. +débardage/S. +débarder/a0p+ +débardeuse/F. +débarquement/S. +débarquer/a0p+ +débarras +débarrasser/a0p+ +débarrasseuse/F. +débarrer/a0p+ +débat/S. +debater/S. +débâter/a0p+ +débâtir/f0p+ +débattable/S. +débattement/S. +débatteuse/F. +débattre/uA +débauchage/S. +débauche/S. +débauchée/F. +débaucher/a0p+ +débaucheuse/F. +débecqueter/d0p+ +débecter/a0p+ +débenture/S. +débenzolage/S. +débenzoler/a0p+ +débet/S. +débile/S. +débilement +débilitante/F. +débilitation/S. +débilité/S. +débiliter/a0p+ +débillarder/a0p+ +débinage/S. +débine/S. +débiner/a0p+ +débineuse/F. +débirentière/F. +débit/S. +débitable/S. +débitage/S. +débitante/F. +débiter/a0p+ +débiteuse/S. +débitmètre/S. +débitrice/F. +déblai/S. +déblaiement/S. +déblatération/S. +déblatérer/c0p. +déblayage/S. +déblayer/a0p+ +déblayeuse/F. +débleuir/f0p+ +déblocable/S. +déblocage/S. +débloquer/a0p+ +débobinage/S. +débobiner/a0p+ +débogage/S. +déboguer/a0p+ +débogueur/S. +déboire/S. +déboisage/S. +déboisement/S. +déboiser/a0p+ +déboîtement/S. +déboîter/a0p+ +débonder/a0p+ +débonnaire/S. +débonnairement +débonnaireté/S. +débord/S. +débordante/F. +débordement/S. +déborder/a0p+ +débosselage/S. +débosseler/d0p+ +débosseleuse/F. +débotté/S. +débotter/a0p+ +débouchage/S. +débouché/S. +débouchement/S. +déboucher/a0p+ +déboucheur/S. +débouchoir/S. +déboucler/a0p+ +débouder/a0p+ +débouilli/S. +débouillir/iQ +débouler/a0p+ +déboulonnage/S. +déboulonnement/S. +déboulonner/a0p+ +débouquement/S. +débouquer/a0p. +débourbage/S. +débourber/a0p+ +débourbeur/S. +débourgeoisée/F. +débourrage/S. +débourrement/S. +débourrer/a0p+ +débourreuse/F. +débours +déboursement/S. +débourser/a0p+ +déboussoler/a0p+ +debout +débouté/S. +déboutement/S. +débouter/a0p+ +déboutonnage/S. +déboutonner/a0p+ +débraguetter/a0p+ +débraillée/F. +débraillement/S. +débrailler/a0p+ +débranchement/S. +débrancher/a0p+ +débrasage/S. +débrayable/S. +débrayage/S. +débrayer/a0p+ +débridement/S. +débrider/a0p+ +débriefer/a0p+ +debriefing/S. +débriefing/S. +débris +débrochable/S. +débrochage/S. +débrocher/a0p+ +débrôler/a0p+ +débrouillage/S. +débrouillarde/F. +débrouillardise/S. +débrouille/S. +débrouillement/S. +débrouiller/a0p+ +débroussaillage/S. +débroussaillement/S. +débroussailler/a0p+ +débroussailleuse/F. +débrousser/a0p+ +débrumage/S. +débucher/a0p+ +débudgétisation/S. +débudgétiser/a0p+ +débuller/a0p+ +débureaucratisation/S. +débureaucratiser/a0p+ +débusquement/S. +débusquer/a0p+ +début/S. +débutante/F. +débuter/a0p+ +déc +deçà +déca/S. +décâbler/a0p+ +décachetage/S. +décacheter/d0p+ +décadaire/S. +décade/S. +décadenasser/a0p+ +décadence/S. +décadente/F. +décadentisme/S. +décadi/S. +décadrer/a0p+ +décaèdre/S. +décaféination/S. +décaféiner/a0p+ +décagonale/W. +décagone/S. +décaissement/S. +décaisser/a0p+ +décalable/S. +décalage/S. +décalaminage/S. +décalaminer/a0p+ +décalcariser/a0p+ +décalcifiante/F. +décalcification/S. +décalcifier/a0p+ +décalcomanie/S. +décaler/a0p+ +décalogie/S. +décalogue/S. +décalotter/a0p+ +décalquage/S. +décalque/S. +décalquer/a0p+ +décalqueuse/F. +décalvante/F. +décamètre/S. +décamétrique/S. +décamper/a0p. +décan/S. +décanale/W. +décanat/S. +décaniller/a0p. +décanoïque/S. +décantage/S. +décantation/S. +décanter/a0p+ +décanteuse/F. +décapage/S. +décapante/F. +décapeler/d0p+ +décapement/S. +décaper/a0p+ +décapeuse/F. +décapitalisation/S. +décapitaliser/a0p+ +décapitation/S. +décapitée/F. +décapiter/a0p+ +décapode/S. +décapode/S. +décapole/S. +décapotable/S. +décapoter/a0p+ +décapsulage/S. +décapsulation/S. +décapsuler/a0p+ +décapsuleur/S. +décapuchonner/a0p+ +décarbonatation/S. +décarbonater/a0p+ +décarboner/a0p+ +décarboxylase/S. +décarboxylation/S. +décarburation/S. +décarburer/a0p+ +décarcasser/a0p+ +décarottage/S. +décarpiller/a0p+ +décarreler/d0p+ +décarrer/a0p. +décartellisation/S. +décartonner/a0p+ +décastère/S. +décasyllabe/S. +décasyllabique/S. +décathlon/S. +décathlonienne/F. +décatir/f0p+ +décatissage/S. +décatisseuse/F. +décauser/a0p+ +decauville/S. +décavaillonner/a0p+ +décavaillonneuse/S. +décaver/a0p+ +décéder/c0p+ +décelable/S. +décèlement/S. +déceler/b0p+ +décélérateur/S. +décélération/S. +décélérée/F. +décélérer/c0p. +décembre/S. +décembriste/S. +décemment +décemvir/S. +décemvirale/W. +décemvirat/S. +decemviri +décence/S. +décennale/W. +décennie/S. +décente/F. +décentrage/S. +décentralisable/S. +décentralisation/S. +décentralisatrice/F. +décentraliser/a0p+ +décentration/S. +décentrement/S. +décentrer/a0p+ +déception/S. +décercler/a0p+ +décérébrante/F. +décérébration/S. +décérébrée/F. +décérébrer/c0p+ +décerner/a0p+ +décervelage/S. +décervelée/F. +décerveler/d0p+ +décès +décesser/a0p+ +décevante/F. +décevoir/pK +déchagriner/a0p+ +déchaînement/S. +déchaîner/a0p+ +déchanter/a0p. +déchaper/a0p+ +déchaperonner/a0p+ +décharge/S. +déchargement/S. +déchargeoir/S. +décharger/a0p+ +déchargeuse/F. +décharnement/S. +décharner/a0p+ +déchatoiement/S. +déchaumage/S. +déchaumer/a0p+ +déchaumeuse/F. +déchaussage/S. +déchaussement/S. +déchausser/a0p+ +déchausseuse/S. +déchaussoir/S. +déchaux +dèche/S. +déchéance/S. +décher/c0p+ +déchet/S. +déchétarienne/F. +déchétarisme/S. +déchetterie/S. +déchevelante/F. +décheveler/d0p+ +déchevêtrer/a0p+ +décheviller/a0p+ +déchiffonner/a0p+ +déchiffrable/S. +déchiffrage/S. +déchiffrement/S. +déchiffrer/a0p+ +déchiffreuse/F. +déchiquetage/S. +déchiqueter/d0p+ +déchiqueteuse/F. +déchiqueture/S. +déchirable/S. +déchirage/S. +déchirante/F. +déchirement/S. +déchirer/a0p+ +déchirure/S. +déchlorurer/a0p+ +déchoir/pX +déchoquage/S. +déchristianisation/S. +déchristianiser/a0p+ +déchromer/a0p+ +déchronologie/S. +déchue/F. +de-ci +déci/S. +décibel/S. +décidabilité/S. +décidable/S. +décidément +décider/a0p+ +décideuse/F. +déciduale/W. +décidue/F. +décigrade/S. +décilage/S. +décile/S. +décimable/S. +décimale/W. +décimalisation/S. +décimaliser/a0p+ +décimalité/S. +décimateur/S. +décimation/S. +décime/S. +décimer/a0p+ +décimétrique/S. +decimo +décintrage/S. +décintrement/S. +décintrer/a0p+ +décision/S. +décision-cadre +décisionnaire/S. +décisionnelle/F. +décisions-cadres +décisive/F. +décisivement +décisoire/S. +décitex +décivilisation/S. +déclamation/S. +déclamatoire/S. +déclamatrice/F. +déclamer/a0p+ +déclarable/S. +déclarante/F. +déclaration/S. +déclarative/F. +déclaratoire/S. +déclarer/a0p+ +déclassement/S. +déclasser/a0p+ +déclassification/S. +déclassifier/a0p+ +déclaveter/d0p+ +déclenchable/S. +déclenchement/S. +déclencher/a0p+ +déclencheur/S. +décléricaliser/a0p+ +déclic/S. +déclin/S. +déclinable/S. +déclinaison/S. +déclinante/F. +déclination/S. +déclinatoire/S. +déclinatoire/S. +déclinement/S. +décliner/a0p+ +déclinisme/S. +décliniste/S. +décliquetage/S. +décliqueter/d0p+ +déclive/S. +déclivité/S. +décloisonnement/S. +décloisonner/a0p+ +déclore/rA +déclouer/a0p+ +déco/S. +décochage/S. +décochement/S. +décocher/a0p+ +décocté/S. +décoction/S. +décodage/S. +décoder/a0p+ +décodeuse/F. +décoffrage/S. +décoffrer/a0p+ +décognoir/S. +décohabitation/S. +décohabiter/a0p+ +décohérence/S. +décohésion/S. +décoiffage/S. +décoiffement/S. +décoiffer/a0p+ +décoinçage/S. +décoincement/S. +décoincer/a0p+ +décolérer/c0p. +décollage/S. +décollation/S. +décollecte/S. +décollement/S. +décoller/a0p+ +décolletage/S. +décolleté/S. +décolleter/d0p+ +décolleteuse/F. +décoloniale/F. +décolonisation/S. +décoloniser/a0p+ +décolorante/F. +décoloration/S. +décolorer/a0p+ +décombre/S. +décommander/a0p+ +décommettre/vA +décommission/S. +décommissionner/a0p+ +décommunisation/S. +décommuniser/a0p+ +décompactage/S. +décompacter/a0p+ +décompaction/S. +décompensation/S. +décompensatoire/S. +décompensée/F. +décompenser/a0p. +décompilation/S. +décompiler/a0p+ +décompléter/c0p+ +décomplexer/a0p+ +décomplexifier/a0p+ +décomplexion/S. +décomposable/S. +décomposer/a0p+ +décomposeur/S. +décomposition/S. +décompresser/a0p+ +décompresseur/S. +décompression/S. +décomprimer/a0p+ +décomptage/S. +décompte/S. +décompter/a0p+ +décompteuse/F. +déconcentration/S. +déconcentrer/a0p+ +déconcertante/F. +déconcerter/a0p+ +déconcubiner +décondensation/S. +décondenser/a0p+ +déconditionnement/S. +déconditionner/a0p+ +déconfessionnalisation/S. +déconfire/yV +déconfiture/S. +décongélation/S. +décongeler/b0p+ +décongestion/S. +décongestionnement/S. +décongestionner/a0p+ +décongestive/F. +déconnade/S. +déconnage/S. +déconnante/F. +déconnecter/a0p+ +déconnecteur/S. +déconner/a0p. +déconneuse/F. +déconnexion/S. +déconseiller/a0p+ +déconsidération/S. +déconsidérer/c0p+ +déconsignation/S. +déconsigner/a0p+ +déconstiper/a0p+ +déconstruction/S. +déconstructionnisme/S. +déconstructionniste/S. +déconstructivisme/S. +déconstructiviste/S. +déconstruire/yM +déconstruisante/F. +décontamination/S. +décontaminer/a0p+ +décontamineur/S. +décontenancer/a0p+ +décontextualisation/S. +décontextualiser/a0p+ +décontractant/S. +décontractante/F. +décontracter/a0p+ +décontraction/S. +déconventionnement/S. +déconventionner/a0p+ +déconvenue/S. +déconversion/S. +déconvolution/S. +décor/S. +décoration/S. +décorative/F. +décorativement +décoratrice/F. +décorcer/a0p+ +décorder/a0p+ +décorer/a0p+ +décorner/a0p+ +décorporation/S. +décorrélation/S. +décorréler/c0p+ +décorticable/S. +décorticage/S. +décortication/S. +décortiquer/a0p+ +décortiqueuse/F. +décorum/S. +décote/S. +décoter/a0p+ +découchage/S. +découcher/a0p. +découdre/xO +découenner/a0p+ +découlement/S. +découler/a0p. +découpable/S. +découpage/S. +découpe/S. +découper/a0p+ +découpeuse/F. +découplage/S. +découplement/S. +découpler/a0p+ +découpleur/S. +découpoir/S. +découpure/S. +décourageante/F. +découragement/S. +décourager/a0p+ +découronnement/S. +découronner/a0p+ +décours +décousure/S. +découverte/F. +découvrable/S. +découvrement/S. +découvreuse/F. +découvrir/iC +décrambuter +décramponner/a0p+ +décrapouiller +décrassage/S. +décrassement/S. +décrasser/a0p+ +décrasseur/S. +décrédibilisation/S. +décrédibiliser/a0p+ +décréditer/a0p+ +décrément/S. +décrémentation/S. +décrémenter/a0p+ +décrêpage/S. +décrêper/a0p+ +décrépir/f0p+ +décrépissage/S. +décrépitation/S. +décrépite/F. +décrépiter/a0p+ +décrépitude/S. +decrescendo +decrescendo +decrescendo/S. +décret/S. +décrétale/S. +décrétaliste/S. +décréter/c0p+ +décret-loi +décrets-lois +décreusage/S. +décreuser/a0p+ +décri/S. +décrier/a0p+ +décriminalisation/S. +décriminaliser/a0p+ +décrire/y1 +décrispation/S. +décrisper/a0p+ +décrochage/S. +décrochement/S. +décrocher/a0p+ +décrocheuse/F. +décroisement/S. +décroiser/a0p+ +décroissance/S. +décroissante/F. +décroissement/S. +décroît/S. +décroître/wT +décrottage/S. +décrotter/a0p+ +décrotteur/S. +décrottoir/S. +décroûter/a0p+ +décruage/S. +décrue/S. +décruer/a0p+ +décrusage/S. +décruser/a0p+ +décryptage/S. +décrypter/a0p+ +décrypteuse/F. +décubitus +décuire/yM +décuivrage/S. +décuivrer/a0p+ +déculasser/a0p+ +déculottage/S. +déculottée/S. +déculotter/a0p+ +déculpabilisation/S. +déculpabiliser/a0p+ +déculturation/S. +déculturer/a0p+ +décuple/S. +décuple/S. +décuplement/S. +décupler/a0p+ +décurie/S. +décurion/S. +décurrente/F. +décuscuteuse/S. +décussée/F. +décuvage/S. +décuvaison/S. +décuver/a0p+ +décyclage/S. +dédaignable/S. +dédaigner/a0p+ +dédaigneuse/W. +dédaigneusement +dédain/S. +dédale/S. +dédaléenne/F. +dedans +dedans +dédiabolisation/S. +dédiaboliser/a0p+ +dédicace/S. +dédicacer/a0p+ +dédicataire/S. +dédicatoire/S. +dédier/a0p+ +dédifférenciation/S. +dédifférencier/a0p+ +dédire/yD +dédit/S. +dédollarisation/S. +dédommagement/S. +dédommager/a0p+ +dédorage/S. +dédorer/a0p+ +dédorure/S. +dédouanage/S. +dédouanement/S. +dédouaner/a0p+ +dédoublage/S. +dédoublement/S. +dédoubler/a0p+ +dédoubleuse/F. +dédoublonnage/S. +dédoublonner/a0p+ +dédramatisation/S. +dédramatiser/a0p+ +déductibilité/S. +déductible/S. +déduction/S. +déductive/F. +déductivement +déduire/yM +déesse/S. +défacement/S. +défacer/a0p+ +défaillance/S. +défaillante/F. +défaillir/iS +défaire/wD +défaisance/S. +défaiseur/S. +défaite/S. +défaitisme/S. +défaitiste/S. +défalcation/S. +défalquer/a0p+ +défanage/S. +défarder/a0p+ +défarguer +défatiguer/a0p+ +défaufiler/a0p+ +défausse/S. +défausser/a0p+ +défaut/S. +défaveur/S. +défavorable/S. +défavorablement +défavorisée/F. +défavoriser/a0p+ +défécation/S. +défection/S. +défective/F. +défectueuse/W. +défectueusement +défectuosité/S. +défendable/S. +défenderesse/F. +défendre/tA +défenestration/S. +défenestrer/a0p+ +défens +défense/S. +défenseure/F. +défensive/F. +défensivement +déféquer/c0p+ +déférence/S. +déférente/F. +déférer/c0p+ +déferlage/S. +déferlante/F. +déferlante/S. +déferlement/S. +déferler/a0p+ +déferrage/S. +déferrement/S. +déferrer/a0p+ +déferriser/a0p+ +déferrure/S. +défervescence/S. +défet/S. +défeuillaison/S. +défeuiller/a0p+ +défeutrage/S. +défeutrer/a0p+ +défi/S. +défiance/S. +défiante/F. +défibrage/S. +défibrer/a0p+ +défibreuse/F. +défibrillateur/S. +défibrillation/S. +déficeler/d0p+ +déficher/a0p+ +déficience/S. +déficiente/F. +déficit/S. +déficitaire/S. +défier/a0p+ +défiger/a0p+ +défiguration/S. +défigurement/S. +défigurer/a0p+ +défilade/S. +défilage/S. +défilante/F. +défilateur/S. +défilé/S. +défilement/S. +défiler/a0p+ +défileuse/F. +définir/f0p+ +définissable/S. +définissante/F. +définiteur/S. +définition/S. +définitionnelle/F. +définitive/F. +définitivement +définitoire/S. +défiscalisation/S. +défiscaliser/a0p+ +déflagrante/F. +déflagrateur/S. +déflagration/S. +déflagrer/a0p. +déflaquer/a0p. +déflation/S. +déflationniste/S. +défléchir/f0p+ +déflecteur/S. +déflectrice/F. +défleuraison/S. +défleurir/f0p+ +déflexion/S. +déflocage/S. +défloquer/a0p+ +défloraison/S. +défloration/S. +déflorer/a0p+ +défluent/S. +défluviation/S. +défoliage/S. +défoliante/F. +défoliation/S. +défoliatrice/F. +défolier/a0p+ +défonçage/S. +défonce/S. +défoncement/S. +défoncer/a0p+ +défonceuse/F. +déforcer/a0p+ +déforestage/S. +déforestation/S. +déforester/a0p+ +déformabilité/S. +déformable/S. +déformante/F. +déformation/S. +déformatrice/F. +déformer/a0p+ +défoulement/S. +défouler/a0p+ +défouloir/S. +défourailler/a0p+ +défournage/S. +défournement/S. +défourner/a0p+ +défourneuse/F. +défourrer/a0p+ +défragmentation/S. +défragmenter/a0p+ +défragmenteur/S. +défraîchir/f0p+ +défraiement/S. +défranchie/F. +défrancisation/S. +défranciser/a0p+ +défrayer/a0p+ +défretter/a0p+ +défrichage/S. +défrichement/S. +défricher/a0p+ +défricheuse/F. +défringuer/a0p+ +défriper/a0p+ +défrisage/S. +défrisement/S. +défriser/a0p+ +défroissable/S. +défroisser/a0p+ +défroncer/a0p+ +défroquage/S. +défroque/S. +défroquer/a0p+ +défruiter/a0p+ +défrusquer +défunte/F. +dégagement/S. +dégager/a0p+ +dégagisme/S. +dégaine/S. +dégainer/a0p+ +dégalonner/a0p+ +déganter/a0p+ +dégarnir/f0p+ +dégasolinage/S. +dégasoliner/a0p+ +dégât/S. +dégauchir/f0p+ +dégauchissage/S. +dégauchissement/S. +dégauchisseuse/S. +dégazage/S. +dégazement/S. +dégazer/a0p+ +dégazolinage/S. +dégazoliner/a0p+ +dégazonnage/S. +dégazonnement/S. +dégazonner/a0p+ +dégel/S. +dégèlement/S. +dégeler/b0p+ +dégénération/S. +dégénérative/F. +dégénérée/F. +dégénérer/c0p+ +dégénérescence/S. +dégénérescente/F. +dégenrer/a0p+ +dégerbage/S. +dégermage/S. +dégermer/a0p+ +dégingander/a0p+ +dégîter/a0p+ +dégivrage/S. +dégivrante/F. +dégivrer/a0p+ +dégivreur/S. +déglaçage/S. +déglacement/S. +déglacer/a0p+ +déglaciation/S. +déglinguer/a0p+ +dégluer/a0p+ +déglutination/S. +déglutir/f0p+ +déglutition/S. +dégobiller/a0p+ +dégoiser/a0p+ +dégommage/S. +dégommer/a0p+ +dégonder/a0p+ +dégonflage/S. +dégonflarde/F. +dégonflement/S. +dégonfler/a0p+ +dégorgeage/S. +dégorgement/S. +dégorgeoir/S. +dégorger/a0p+ +dégoter/a0p+ +dégotter/a0p+ +dégoudronner/a0p+ +dégoulinade/S. +dégoulinante/F. +dégoulinement/S. +dégouliner/a0p. +dégoulinure/S. +dégoupiller/a0p+ +dégourdir/f0p+ +dégourdissage/S. +dégourdissante/F. +dégourdissement/S. +dégourer +dégourrer +dégoût/S. +dégoûtamment +dégoûtante/F. +dégoûtation/S. +dégoûter/a0p+ +dégoutter/a0p. +dégradable/S. +dégradante/F. +dégradateur/S. +dégradation/S. +dégrader/a0p+ +dégrafer/a0p+ +dégrafeur/S. +dégraffitage/S. +dégraissage/S. +dégraissante/F. +dégraisser/a0p+ +dégraisseuse/F. +dégravelante/F. +dégravoiement/S. +dégravoyer/a0p+ +degré/S. +dégréer/a0p+ +dégréner/c0p+ +dégression/S. +dégressive/F. +dégressivité/S. +dégrèvement/S. +dégrever/b0p+ +dégriffé/S. +dégriffer/a0p+ +dégrillage/S. +dégringolade/S. +dégringoler/a0p+ +dégripper/a0p+ +dégrisement/S. +dégriser/a0p+ +dégrosser/a0p+ +dégrossir/f0p+ +dégrossissage/S. +dégrossissement/S. +dégrossisseuse/F. +dégrouiller/a0p+ +dégroupage/S. +dégroupement/S. +dégrouper/a0p+ +déguenillée/F. +déguerpir/f0p+ +déguerpissement/S. +dégueu/X. +dégueulasse/S. +dégueulassement +dégueulasser/a0p+ +dégueulasserie/S. +dégueulatoire/S. +dégueuler/a0p+ +dégueulis +déguisement/S. +déguiser/a0p+ +dégun +dégun/S. +dégurgitation/S. +dégurgiter/a0p+ +dégustation/S. +dégustative/F. +dégustatrice/F. +déguster/a0p+ +dégyration/S. +déhalage/S. +déhâler +déhaler/a0p+ +déhanchement/S. +déhancher/a0p+ +déharder/a0p+ +déharnacher/a0p+ +déhiscence/S. +déhiscente/F. +déhontée/F. +dehors +dehors +déhotter/a0p+ +déhouiller/a0p+ +déhoussable/S. +dei +déicide/S. +déictique/S. +déictique/S. +déification/S. +déifier/a0p+ +déiforme/S. +déisme/S. +déiste/S. +déité/S. +déjà +déjanter/a0p+ +déjauger/a0p. +déjaunir/f0p+ +déjà-vu +déjecter/a0p+ +déjecteur/S. +déjection/S. +déjeter/d0p+ +déjeunatoire/S. +déjeuner/S. +déjeuner/a0p. +déjouer/a0p+ +déjucher/a0p+ +déjudiciarisation/S. +déjudiciariser/a0p+ +déjuger/a0p+ +delà +de-là +délabialisation/S. +délabialiser/a0p+ +délabrement/S. +délabrer/a0p+ +délabyrinther/a0p+ +délacer/a0p+ +délai/S. +délainage/S. +délainer/a0p+ +délaissement/S. +délaisser/a0p+ +délaitage/S. +délaitement/S. +délaiter/a0p+ +délaiteuse/S. +délaminage/S. +délamination/S. +délardement/S. +délarder/a0p+ +délassante/F. +délassement/S. +délasser/a0p+ +délation/S. +délatrice/F. +délatter/a0p+ +délavage/S. +délaver/a0p+ +délayage/S. +délayer/a0p+ +delco/S. +deleatur +déléaturer/a0p+ +délébile/S. +délectable/S. +délectablement +délectation/S. +délecter/a0p+ +délégante/F. +délégataire/S. +délégation/S. +délégatrice/F. +délégitimation/S. +délégitimer/a0p+ +délégitimisation/S. +déléguée/F. +déléguer/c0p+ +délestage/S. +délester/a0p+ +délesteur/S. +délétère/S. +délétion/S. +délibérante/F. +délibération/S. +délibérative/F. +délibératoire/S. +délibéré/S. +délibérée/F. +délibérément +délibérer/c0p. +délicate/F. +délicatement +délicatesse/S. +délice/S. +délices +délicieuse/W. +délicieusement +délictuelle/F. +délictueuse/W. +délié/S. +déliement/S. +délier/a0p+ +délignage/S. +déligner/a0p+ +déligneuse/F. +délignification/S. +délignifier/a0p+ +délimitable/S. +délimitation/S. +délimiter/a0p+ +délimiteur/S. +délinéament/S. +délinéariser/a0p+ +délinéation/S. +délinéer/a0p+ +délinquance/S. +délinquante/F. +délinquantielle/F. +déliquescence/S. +déliquescente/F. +délirante/F. +délire/S. +délirer/a0p. +delirium +délissage/S. +délisser/a0p+ +délit/S. +délitage/S. +délitement/S. +déliter/a0p+ +délitescence/S. +délitescente/F. +délivrable/S. +délivrance/S. +délivrer/a0p+ +délivreur/S. +délocalisable/S. +délocalisante/F. +délocalisation/S. +délocaliser/a0p+ +délogement/S. +déloger/a0p+ +déloquer/a0p+ +délot/S. +délover/a0p+ +déloyale/W. +déloyalement +déloyauté/S. +delphinarium/S. +delphinidé/S. +delphinium/S. +delphique/S. +delta +delta +delta/S. +deltacisme/S. +deltaïque/S. +deltaplane/S. +deltiste/S. +deltoïde/S. +deltoïde/S. +deltoïdienne/F. +déluge/S. +délurée/F. +délurer/a0p+ +délusion/S. +délustrage/S. +délustrer/a0p+ +délutage/S. +déluter/a0p+ +démaçonner/a0p+ +démagnétisation/S. +démagnétiser/a0p+ +démago/S. +démagogie/S. +démagogique/S. +démagogiquement +démagogue/S. +démaigrir/f0p+ +démaigrissement/S. +démaillage/S. +démailler/a0p+ +démailloter/a0p+ +demain +demain/S. +démanchement/S. +démancher/a0p+ +demande/S. +demander/a0p+ +demanderesse/S. +demandeuse/F. +démangeaison/S. +démanger/a0p+ +démantèlement/S. +démanteler/b0p+ +démantibuler/a0p+ +démaquer/a0p+ +démaquillage/S. +démaquillante/F. +démaquiller/a0p+ +démarabouter/a0p+ +démarcation/S. +démarcative/F. +démarchage/S. +démarchandisation/S. +démarche/S. +démarcher/a0p+ +démarcheuse/F. +démariage/S. +démarier/a0p+ +démarquage/S. +démarque/S. +démarquer/a0p+ +démarqueuse/F. +démarrage/S. +démarrer/a0p+ +démarreur/S. +démasclage/S. +démascler/a0p+ +démasquable/S. +démasquage/S. +démasquer/a0p+ +démasticage/S. +démastiquer/a0p+ +démâtage/S. +démâter/a0p+ +dématérialisation/S. +dématérialiser/a0p+ +démazoutage/S. +démazouter/a0p+ +dème/S. +déméchage/S. +démédicalisation/S. +démédicaliser/a0p+ +démêlage/S. +démêlante/F. +démêlé/S. +démêlement/S. +démêler/a0p+ +démêloir/S. +démêlure/S. +démembrement/S. +démembrer/a0p+ +déménagement/S. +déménager/a0p+ +déménageuse/F. +démence/S. +démener/b0p+ +démenotter/a0p+ +démente/F. +démenti/S. +démentielle/F. +démentir/i5q+ +démerdarde/F. +démerder/a0p+ +démerger/a0p+ +démérite/S. +démériter/a0p. +démersale/W. +démesure/S. +démesurée/F. +démesurément +déméthaniser/a0p+ +déméthylation/S. +démettre/vA +démeubler/a0p+ +demeurant +demeure/S. +demeurée/F. +demeurer/a0p. +demi +demiard/S. +demi-bas +demi-botte/S. +demi-bouteille/S. +demi-brigade/S. +demi-cadratin/S. +demi-cercle/S. +demi-circulaire/S. +demi-clé/S. +demi-clef/S. +demi-colonne/S. +demi-deuil/S. +demi-dieu/X. +demi-douzaine/S. +demi-droite/S. +demie/F. +démieller/a0p+ +demi-entière/F. +demi-finale/S. +demi-finaliste/S. +demi-fine/F. +demi-fond +demi-frère/S. +demi-gras +demi-grasse/S. +demi-gros +demi-grossiste/S. +demi-heure/S. +demi-jour/S. +demi-journée/S. +demi-lieue/S. +démilitarisation/S. +démilitariser/a0p+ +demi-litre/S. +demi-livre/S. +demi-longueur/S. +demi-lune/S. +demi-mal/X. +demi-mesure/S. +demi-mondaine/S. +demi-monde/S. +demi-morte/F. +demi-mot +déminage/S. +déminer/a0p+ +déminéralisation/S. +déminéraliser/a0p+ +démineuse/F. +demi-pause/S. +demi-pension/S. +demi-pensionnaire/S. +demi-place/S. +demi-plan/S. +demi-portion/S. +demi-produit/S. +demi-quart/S. +demi-queue/S. +demi-relief/S. +demi-reliure/S. +demi-ronde/S. +demi-saison/S. +demi-sang +demi-sel +demi-siècle/S. +demi-sœur/S. +demi-solde +demi-solde/S. +demi-sommeil/S. +demi-soupir/S. +démission/S. +démissionnaire/S. +démissionner/a0p. +demi-succès +demi-tarif/S. +demi-teinte/S. +demi-tige/S. +demi-ton/S. +demi-tour/S. +demiurge/S. +démiurge/S. +démiurgie/S. +démiurgique/S. +demi-vérité/S. +demi-vie/S. +demi-volée/S. +démixtion/S. +démo/S. +démobilisable/S. +démobilisation/S. +démobilisatrice/F. +démobiliser/a0p+ +démocrate/S. +démocrate-chrétien +démocrate-chrétienne +démocrates-chrétiennes +démocrates-chrétiens +démocratie/S. +démocratique/S. +démocratiquement +démocratisation/S. +démocratiser/a0p+ +démocratisme/S. +démoder/a0p+ +demodex +démodulateur/S. +démodulation/S. +démoduler/a0p+ +démographe/S. +démographie/S. +démographique/S. +démographiquement +demoiselle/S. +démolir/f0p+ +démolissage/S. +démolisseuse/F. +démolition/S. +démondialisation/S. +démone/F. +démonétisation/S. +démonétiser/a0p+ +démoniaque/S. +démoniaquement +démonique/S. +démonisation/S. +démoniser/a0p+ +démonisme/S. +démoniste/S. +démonographe/S. +démonographie/S. +démonologie/S. +démonomanie/S. +démonstration/S. +démonstrative/F. +démonstrativement +démonstratrice/F. +démontabilité/S. +démontable/S. +démontage/S. +démonte-pneu/S. +démonter/a0p+ +démonteuse/F. +démontrabilité/S. +démontrable/S. +démontrer/a0p+ +démoralisante/F. +démoralisation/S. +démoralisatrice/F. +démoraliser/a0p+ +démordre/tEq. +démotique/S. +démotivante/F. +démotivation/S. +démotiver/a0p+ +démoucheter/d0p+ +démouillage/S. +démoulage/S. +démoulante/F. +démouler/a0p+ +démouleuse/F. +démouscailler/a0p+ +démoustication/S. +démoustiquer/a0p+ +démucilagination/S. +démultiplexage/S. +démultiplexer/a0p+ +démultiplexeur/S. +démultiplication/S. +démultiplicatrice/F. +démultiplier/a0p+ +démunir/f0p+ +démurer/a0p+ +démurger/a0p+ +démuseler/d0p+ +démutisation/S. +démutiser/a0p+ +démutualisation/S. +démyélinisation/S. +démystification/S. +démystificatrice/F. +démystifier/a0p+ +démythification/S. +démythifier/a0p+ +dénantir/f0p+ +denar/S. +dénasalisation/S. +dénasaliser/a0p+ +dénatalité/S. +dénationalisation/S. +dénationaliser/a0p+ +dénatter/a0p+ +dénaturalisation/S. +dénaturaliser/a0p+ +dénaturante/F. +dénaturation/S. +dénaturer/a0p+ +dénazification/S. +dénazifier/a0p+ +denchée/F. +dendrimère/S. +dendrite/S. +dendritique/S. +dendrobate/S. +dendrochronologie/S. +dendroclimatologie/S. +dendrogramme/S. +dendrographie/S. +dendrolague/S. +dendrologie/S. +dendrologique/S. +dendrologiste/S. +dendrologue/S. +dendrométrie/S. +dendrométrique/S. +dendrophore/S. +dénébulateur/S. +dénébulation/S. +dénébuler/a0p+ +dénébulisation/S. +dénébuliser/a0p+ +dénégation/S. +dénégatoire/S. +déneigement/S. +déneiger/a0p+ +déneigeuse/F. +dénervation/S. +dénerver/a0p+ +dengue/S. +déni/S. +déniaiser/a0p+ +dénicher/a0p+ +dénicheuse/F. +dénickeler/d0p+ +dénicotinisation/S. +dénicotiniser/a0p+ +dénicotiniseur/S. +denier/S. +dénier/a0p+ +dénigrante/F. +dénigrement/S. +dénigrer/a0p+ +dénigreuse/F. +denim/S. +dénitrer/a0p+ +dénitrification/S. +dénitrifier/a0p+ +dénivelé/S. +déniveler/d0p+ +dénivellation/S. +dénivellement/S. +dénombrabilité/S. +dénombrable/S. +dénombrement/S. +dénombrer/a0p+ +dénominateur/S. +dénomination/S. +dénominative/F. +dénommable/S. +dénommer/a0p+ +dénoncer/a0p+ +dénonciation/S. +dénonciatrice/F. +dénotation/S. +dénotationnelle/F. +dénotative/F. +dénoter/a0p+ +dénouement/S. +dénouer/a0p+ +dénoyage/S. +dénoyautage/S. +dénoyauter/a0p+ +dénoyauteuse/F. +dénoyer/a0p+ +denrée/S. +dense/S. +densément +densification/S. +densifier/a0p+ +densimètre/S. +densimétrie/S. +densimétrique/S. +densité/S. +densitomètre/S. +densitométrie/S. +dent/S. +dentaire/S. +dentale/S. +dentale/W. +dentée/F. +dentée/S. +dentelaire/S. +denteler/d0p+ +denteleuse/F. +dentelle/S. +dentellerie/S. +dentellière/F. +dentelure/S. +denticule/S. +denticulée/F. +dentier/S. +dentifrice/S. +dentifrice/S. +dentinaire/S. +dentine/S. +dentinome/S. +dentirostre/S. +dentiste/S. +dentisterie/S. +dentition/S. +dentofaciale/W. +dento-faciale/W. +dentome/S. +dentue/F. +denture/S. +denturologie/S. +denturologiste/S. +denturologue/S. +dénucléarisation/S. +dénucléariser/a0p+ +dénudation/S. +dénudement/S. +dénuder/a0p+ +dénuement/S. +dénuer/a0p+ +dénutrie/F. +dénutrition/S. +déodorant/S. +déodorante/F. +déontique/S. +déontologie/S. +déontologique/S. +déontologiquement +déontologue/S. +dépagnoter/a0p+ +dépaillage/S. +dépailler/a0p+ +dépaissance/S. +dépaisseler/d0p+ +dépalissage/S. +dépalisser/a0p+ +dépannage/S. +dépanner/a0p+ +dépanneuse/F. +dépapillée/F. +dépaquetage/S. +dépaqueter/d0p+ +déparaffinage/S. +déparaffiner/a0p+ +déparasitage/S. +déparasiter/a0p+ +dépareiller/a0p+ +déparer/a0p+ +dépariage/S. +déparier/a0p+ +déparler/a0p. +départ/S. +départage/S. +départager/a0p+ +département/S. +départementale/S. +départementale/W. +départementalisation/S. +départementaliser/a0p+ +départir/i5q+ +départiteur/S. +dépassable/S. +dépassante/F. +dépassement/S. +dépasser/a0p+ +dépassionner/a0p+ +dépatouiller/a0p+ +dépatrier/a0p+ +dépavage/S. +dépaver/a0p+ +dépaysante/F. +dépaysement/S. +dépayser/a0p+ +dépeçage/S. +dépècement/S. +dépecer/b0p+ +dépeceuse/F. +dépêche/S. +dépêcher/a0p+ +dépeigner/a0p+ +dépeindre/wB +dépelliculage/S. +dépelotonner/a0p+ +dépenaillée/F. +dépénalisante/F. +dépénalisation/S. +dépénaliser/a0p+ +dépendamment +dépendance/S. +dépendante/F. +dépendeuse/F. +dépendre/tA +dépens +dépense/S. +dépenser/a0p+ +dépensière/F. +déperdition/S. +déperditive/F. +dépérir/f0p. +dépérissement/S. +déperlance/S. +déperlante/F. +dépersonnalisable/S. +dépersonnalisation/S. +dépersonnaliser/a0p+ +dépêtrer/a0p+ +dépeuplement/S. +dépeupler/a0p+ +déphasage/S. +déphaser/a0p+ +déphaseur/S. +déphosphatation/S. +déphosphater/a0p+ +déphosphoration/S. +déphosphorer/a0p+ +déphosphorylation/S. +dépiautage/S. +dépiauter/a0p+ +dépicage/S. +dépigeonnage/S. +dépigmentation/S. +dépigmenter/a0p+ +dépilage/S. +dépilation/S. +dépilatoire/S. +dépiler/a0p+ +dépingler/a0p+ +dépiquage/S. +dépiquer/a0p+ +dépistage/S. +dépister/a0p+ +dépit/S. +dépiter/a0p+ +déplaçable/S. +déplacement/S. +déplacer/a0p+ +déplafonnement/S. +déplafonner/a0p+ +déplaire/wNq. +déplaisamment +déplaisance/S. +déplaisante/F. +déplaisir/S. +déplaner/a0p. +déplanification/S. +déplanquer/a0p+ +déplantage/S. +déplantation/S. +déplanter/a0p+ +déplantoir/S. +déplâtrage/S. +déplâtrer/a0p+ +déplétion/S. +dépliable/S. +dépliage/S. +dépliante/F. +dépliement/S. +déplier/a0p+ +déplissage/S. +déplisser/a0p+ +déploiement/S. +déplombage/S. +déplomber/a0p+ +déplombeur/S. +déplorable/S. +déplorablement +déploration/S. +déplorer/a0p+ +déployable/S. +déployer/a0p+ +déplumer/a0p+ +dépocher/a0p+ +dépoétiser/a0p+ +dépoiler +dépointage/S. +dépointer/a0p+ +dépoitrailler/a0p+ +dépolarisation/S. +dépolariser/a0p+ +dépolir/f0p+ +dépolissage/S. +dépolitisation/S. +dépolitiser/a0p+ +dépolluante/F. +dépolluer/a0p+ +dépollution/S. +dépolymérisation/S. +dépolymériser/a0p+ +déponente/F. +dépontiller/a0p. +dépopulation/S. +déport/S. +déportance/S. +déportation/S. +déportée/F. +déportement/S. +déporter/a0p+ +déposante/F. +dépose/S. +déposer/a0p+ +dépositaire/S. +déposition/S. +dépositoire/S. +dépossédée/F. +déposséder/c0p+ +dépossession/S. +dépôt/S. +dépotage/S. +dépotement/S. +dépoter/a0p+ +dépotoir/S. +dépoudrer/a0p+ +dépouille/S. +dépouillement/S. +dépouiller/a0p+ +dépouilleuse/F. +dépourvoir/pJ +dépourvue/F. +dépoussiérage/S. +dépoussiérante/F. +dépoussiérer/c0p+ +dépoussiéreur/S. +dépravante/F. +dépravation/S. +dépravée/F. +dépraver/a0p+ +déprécation/S. +dépréciation/S. +dépréciative/F. +dépréciatrice/F. +déprécier/a0p+ +déprédation/S. +déprédatrice/F. +déprendre/tG +dépressage/S. +dépresseur/S. +dépression/S. +dépressionnaire/S. +dépressive/F. +dépressurisation/S. +dépressuriser/a0p+ +déprimage/S. +déprimante/F. +déprime/S. +déprimée/F. +déprimer/a0p+ +déprimogène/S. +dépriser/a0p+ +déprofessionnalisation/S. +déprogrammation/S. +déprogrammer/a0p+ +déprolétarisation/S. +déprolétariser/a0p+ +dépropagation/S. +dépropaniser/a0p+ +déprotéger/c0p+ +dépucelage/S. +dépuceler/d0p+ +depuis +depuis +dépulper/a0p+ +dépuration/S. +dépurative/F. +dépurer/a0p+ +députation/S. +députée/F. +députer/a0p+ +déqualification/S. +déqualifier/a0p+ +déquiller/a0p+ +der +déracinable/S. +déracinée/F. +déracinement/S. +déraciner/a0p+ +dérader/a0p. +déradicalisation/S. +déradicaliser/a0p+ +dérager/a0p. +déraidir/f0p+ +déraillement/S. +dérailler/a0p. +dérailleur/S. +déraison/S. +déraisonnable/S. +déraisonnablement +déraisonnement/S. +déraisonner/a0p. +déramer/a0p+ +dérangeante/F. +dérangement/S. +déranger/a0p+ +dérangeuse/F. +dérapage/S. +déraper/a0p. +dérasement/S. +déraser/a0p+ +dératée/F. +dérater/a0p+ +dératisation/S. +dératiser/a0p+ +dératiseuse/F. +dérayer/a0p+ +dérayeuse/S. +dérayure/S. +derby/S. +derche/S. +déréalisation/S. +déréaliser/a0p+ +derechef +déréelle/F. +déréférencement/S. +déréférencer/a0p+ +déréglage/S. +dérèglement/S. +déréglementaire/S. +déréglementation/S. +déréglementer/a0p+ +dérégler/c0p+ +dérégulation/S. +dérégulatrice/F. +déréguler/a0p+ +déréistique/S. +déréliction/S. +déremboursement/S. +dérembourser/a0p+ +dérépression/S. +déresponsabilisation/S. +déresponsabiliser/a0p+ +dérésumenter +déridage/S. +dérider/a0p+ +déringardiser/a0p+ +dérision/S. +dérisoire/S. +dérisoirement +dérivabilité/S. +dérivable/S. +dérivante/F. +dérivateur/S. +dérivation/S. +dérivationnelle/F. +dérivative/F. +dérive/S. +dérivée/S. +dériver/a0p+ +dériveur/S. +dermabrasion/S. +dermaptère/S. +dermatite/S. +dermato/S. +dermatoglyphe/S. +dermatologie/S. +dermatologique/S. +dermatologiste/S. +dermatologue/S. +dermatome/S. +dermatomycose/S. +dermatomyosite/S. +dermatopathologie/S. +dermatophyte/S. +dermatophytie/S. +dermatophytose/S. +dermatose/S. +derme/S. +dermeste/S. +dermique/S. +dermite/S. +dermographe/S. +dermographie/S. +dermographisme/S. +dermopharmacie/S. +dermopuncture/S. +dermotrope/S. +dernière/F. +dernièrement +dernière-née +dernières-nées +dernier-né +derniers-nés +derny/S. +dérobade/S. +dérobement/S. +dérober/a0p+ +dérobeuse/F. +dérochage/S. +dérochement/S. +dérocher/a0p+ +déroctage/S. +déroder/a0p+ +dérogation/S. +dérogatoire/S. +dérogeance/S. +déroger/a0p. +dérondir +dérougir/f0p+ +dérouiller/a0p+ +déroulage/S. +déroulante/F. +déroulement/S. +dérouler/a0p+ +dérouleuse/F. +déroutage/S. +déroutante/F. +déroute/S. +déroutement/S. +dérouter/a0p+ +derrick/S. +derrière +derrière +derrière/S. +déruralisation/S. +derviche/S. +des +dès +désabonnée/F. +désabonnement/S. +désabonner/a0p+ +désabusée/F. +désabusement/S. +désabuser/a0p+ +désaccentuation/S. +désaccentuer/a0p+ +désacclimatable/S. +désacclimatation/S. +désacclimatement/S. +désacclimater/a0p+ +désaccord/S. +désaccordable/S. +désaccordement/S. +désaccorder/a0p+ +désaccouplement/S. +désaccoupler/a0p+ +désaccoutumance/S. +désaccoutumer/a0p+ +désacidification/S. +désacidifier/a0p+ +désaciérer/c0p+ +désacralisation/S. +désacraliser/a0p+ +désactivable/S. +désactivateur/S. +désactivation/S. +désactiver/a0p+ +désactiveur/S. +désadaptation/S. +désadapter/a0p+ +désaération/S. +désaérer/c0p+ +désaffectation/S. +désaffecter/a0p+ +désaffection/S. +désaffectionner/a0p+ +désafférentation/S. +désaffiliation/S. +désaffilier/a0p+ +désaffleurement/S. +désaffleurer/a0p+ +désagencement/S. +désagencer/a0p+ +désagglomérer/c0p+ +désagrafage/S. +désagrafer/a0p+ +désagréable/S. +désagréablement +désagrégation/S. +désagrégeante/F. +désagréger/c0p+ +désagrément/S. +désaimantation/S. +désaimanter/a0p+ +désaisonnalisation/S. +désaisonnaliser/a0p+ +désajustement/S. +désajuster/a0p+ +désajuster/a0p+ +désaliénation/S. +désaliéner/c0p+ +désalignement/S. +désaligner/a0p+ +désalinisation/S. +désaliniser/a0p+ +désalkylation/S. +désallouer/a0p+ +désalper/a0p. +désaltérante/F. +désaltérer/c0p+ +désamarrage/S. +désamarrer/a0p+ +désambiguïsation/S. +désambiguïsatrice/F. +désambiguïser/a0p+ +désâmer/a0p+ +désaméricanisation/S. +désaméricaniser/a0p+ +désamiantage/S. +désamianter/a0p+ +désamidonnage/S. +désamidonner/a0p+ +désaminase/S. +désamination/S. +désaminer/a0p+ +désamorçage/S. +désamorcer/a0p+ +désamortissement/S. +désamour/S. +désannexer/a0p+ +désaper/a0p+ +désapparier/a0p+ +désappointement/S. +désappointer/a0p+ +désapprendre/tF +désapprobation/S. +désapprobatrice/F. +désappropriation/S. +désapprouver/a0p+ +désapprovisionnement/S. +désapprovisionner/a0p+ +désarchivage/S. +désarchiver/a0p+ +désarçonnante/F. +désarçonner/a0p+ +désargenter/a0p+ +désarmante/F. +désarmement/S. +désarmer/a0p+ +désarrimage/S. +désarrimer/a0p+ +désarroi/S. +désarticulation/S. +désarticuler/a0p+ +désasphaltage/S. +désassemblage/S. +désassembler/a0p+ +désassimilation/S. +désassimiler/a0p+ +désassortiment/S. +désassortir/f0p+ +désastre/S. +désastreuse/W. +désastreusement +désatomisation/S. +désatomiser/a0p+ +désaturase/S. +désaturation/S. +désautomatisation/S. +désautomatiser/a0p+ +désavantage/S. +désavantager/a0p+ +désavantageuse/W. +désavantageusement +désaveu/X. +désaveugler/a0p+ +désavouer/a0p+ +désaxation/S. +désaxement/S. +désaxer/a0p+ +descellement/S. +desceller/a0p+ +descendance/S. +descendante/F. +descenderie/S. +descendeuse/F. +descendre/tA +descenseur/S. +descension/S. +descente/S. +déscolarisation/S. +déscolariser/a0p+ +descripteur/S. +descriptible/S. +descriptif/S. +description/S. +descriptive/F. +descriptivisme/S. +descriptrice/F. +desdites +desdits +déséchouage/S. +déséchouer/a0p+ +déséconomie/S. +désectorisation/S. +désectoriser/a0p+ +déségrégation/S. +désélectionner/a0p+ +désembobiner/a0p+ +désembouage/S. +désembourber/a0p+ +désembourgeoiser/a0p+ +désembouteiller/a0p+ +désembrayer/a0p+ +désembrigadement/S. +désembrouillage/S. +désembrouiller/a0p+ +désembuage/S. +désembuer/a0p+ +désemmancher/a0p+ +désemparement/S. +désemparer/a0p+ +désempeser/b0p+ +désemplir/f0p+ +désempoisonner/a0p+ +désemprisonner/a0p+ +désencadrement/S. +désencadrer/a0p+ +désencarter/a0p+ +désencastrement/S. +désencastrer/a0p+ +désencerclement/S. +désenchaîner/a0p+ +désenchantement/S. +désenchanter/a0p+ +désenclavement/S. +désenclaver/a0p+ +désencombrement/S. +désencombrer/a0p+ +désencrage/S. +désencrasser/a0p+ +désencrer/a0p+ +désendettement/S. +désendetter/a0p+ +désendoctrinement/S. +désendoctriner/a0p+ +désénerver/a0p+ +désenfiler/a0p+ +désenflammer/a0p+ +désenfler/a0p+ +désenfumage/S. +désenfumer/a0p+ +désengagement/S. +désengager/a0p+ +désengluer/a0p+ +désengorgement/S. +désengorger/a0p+ +désengourdir/f0p+ +désengrener/b0p+ +désenivrer/a0p+ +désenlacer/a0p+ +désenlaidir/f0p+ +désenliser/a0p+ +désennuyer/a0p+ +désenrayer/a0p+ +désenrhumer/a0p+ +désenrouer/a0p+ +désensablement/S. +désensabler/a0p+ +désensibilisateur/S. +désensibilisation/S. +désensibiliser/a0p+ +désensorceler/d0p+ +désentoilage/S. +désentoiler/a0p+ +désentortiller/a0p+ +désentraver/a0p+ +désentrelacer/a4p+ +désenvasement/S. +désenvaser/a0p+ +désenvelopper/a0p+ +désenvenimer/a0p+ +désenverguer/a0p+ +désenvoûtement/S. +désenvoûter/a0p+ +désépaissir/f0p+ +déséquilibrage/S. +déséquilibrante/F. +déséquilibre/S. +déséquilibrer/a0p+ +déséquiper/a0p+ +désert/S. +déserte/F. +déserter/a0p+ +déserteuse/F. +désertifiante/F. +désertification/S. +désertifier/a0p+ +désertion/S. +désertique/S. +désertisation/S. +désescalade/S. +désespéramment +désespérance/S. +désespérante/F. +désespérée/F. +désespérément +désespérer/c0p+ +désespoir/S. +désétablir/f0p+ +désétablissement/S. +désétamer/a0p+ +désétatisation/S. +désétatiser/a0p+ +désexcitation/S. +désexciter/a0p+ +désexualisation/S. +désexualiser/a0p+ +déshabillage/S. +déshabiller/a0p+ +déshabituer/a0p+ +désherbage/S. +désherbante/F. +désherber/a0p+ +déshérence/S. +déshéritée/F. +déshéritement/S. +déshériter/a0p+ +déshonnête/S. +déshonnêtement +déshonnêteté/S. +déshonneur/S. +déshonorable/S. +déshonorante/F. +déshonorer/a0p+ +déshuilage/S. +déshuiler/a0p+ +déshumanisante/F. +déshumanisation/S. +déshumaniser/a0p+ +déshumidificateur/S. +déshumidification/S. +déshumidifier/a0p+ +déshuntage/S. +déshydratante/F. +déshydratation/S. +déshydrater/a0p+ +déshydrogénase/S. +déshydrogénation/S. +déshydrogéner/c0p+ +déshypothéquer/c0p+ +désidérabilité/S. +désidérative/F. +desideratum/I. +design +design/S. +désignation/S. +désignative/F. +designer/S. +désigner/a0p+ +désilage/S. +désiliciage/S. +désillusion/S. +désillusionnement/S. +désillusionner/a0p+ +désimbrication/S. +désimbriquer/a0p+ +désincarcération/S. +désincarcérer/c0p+ +désincarnation/S. +désincarner/a0p+ +désincitation/S. +désincitative/F. +désincorporer/a0p+ +désincrustation/S. +désincruster/a0p+ +désinculper/a0p+ +désindenter/a0p+ +désindexation/S. +désindexer/a0p+ +désindividualiser/a0p+ +désindustrialisation/S. +désindustrialiser/a0p+ +désinence/S. +désinentielle/F. +désinfectante/F. +désinfecter/a0p+ +désinfection/S. +désinfectrice/F. +désinfestation/S. +désinflation/S. +désinformation/S. +désinformer/a0p+ +désingularisation/S. +désinhiber/a0p+ +désinhibition/S. +désinhibitrice/F. +désinscription/S. +désinscrire/y1 +désinscrite/F. +désinsectisation/S. +désinsectiser/a0p+ +désinsectiseuse/F. +désinsertion/S. +désinstallation/S. +désinstaller/a0p+ +désinstitutionnalisation/S. +désinstitutionnaliser/a0p+ +désintégrateur/S. +désintégration/S. +désintégrative/F. +désintégrer/c0p+ +désintéressement/S. +désintéresser/a0p+ +désintérêt/S. +désintermédiation/S. +désintermédier/a0p+ +désintox +désintoxication/S. +désintoxiquer/a0p+ +désintrication/S. +désinvestir/f0p+ +désinvestissement/S. +désinviter/a0p+ +désinvolte/S. +désinvoltement +désinvolture/S. +désir/S. +désirabilité/S. +désirable/S. +désirante/F. +désirer/a0p+ +désireuse/W. +désistement/S. +désister/a0p+ +desman/S. +desmine/S. +desmodonte/S. +desmodontite/S. +desmodromique/S. +desmosome/S. +désobéir/f0p. +désobéissance/S. +désobéissante/F. +désobligeamment +désobligeance/S. +désobligeante/F. +désobliger/a0p+ +désoblitération/S. +désobstruction/S. +désobstruer/a0p+ +désocclusion/S. +désoccuper/a0p+ +désocialisante/F. +désocialisation/S. +désocialiser/a0p+ +désodorisante/F. +désodorisation/S. +désodoriser/a0p+ +désœuvrée/F. +désœuvrement/S. +désœuvrer +désolante/F. +désolation/S. +désoler/a0p+ +désolidarisation/S. +désolidariser/a0p+ +désoperculateur/S. +désoperculer/a0p+ +désopilante/F. +désopiler/a0p+ +désorber/a0p+ +désorbitation/S. +désorbiter/a0p+ +désordonnément +désordonner/a0p+ +désordre/S. +désorganisation/S. +désorganisatrice/F. +désorganiser/a0p+ +désorientation/S. +désorienter/a0p+ +désormais +désorption/S. +désossage/S. +désossement/S. +désosser/a0p+ +désosseuse/F. +désouffler/a0p+ +désoufrer/a0p+ +désoxydante/F. +désoxydation/S. +désoxyder/a0p+ +désoxygénation/S. +désoxygéner/c0p+ +désoxyhémoglobine/S. +désoxyribonucléase/S. +désoxyribonucléique/S. +désoxyribonucléoprotéique/S. +désoxyribose/S. +desperado/S. +déspiritualisation/S. +déspiritualiser/a0p+ +despotat/S. +despote/S. +despotique/S. +despotiquement +despotisme/S. +desquamation/S. +desquamative/F. +desquamer/a0p+ +desquelles +desquels +dessablage/S. +dessablement/S. +dessabler/a0p+ +dessaisir/f0p+ +dessaisissement/S. +dessaisonner/a0p+ +dessalage/S. +dessalaison/S. +dessalement/S. +dessaler/a0p+ +dessalinisation/S. +dessangler/a0p+ +dessaouler/a0p+ +dessaper/a0p+ +desséchante/F. +dessèchement/S. +dessécher/c0p+ +dessein/S. +desseller/a0p+ +desserrage/S. +desserrement/S. +desserrer/a0p+ +dessert/S. +desserte/S. +dessertir/f0p+ +dessertissage/S. +desservable/S. +desservante/F. +desservir/iF +dessicant/S. +dessication/S. +dessiccateur/S. +dessiccation/S. +dessiccative/F. +dessiccatrice/F. +dessillement/S. +dessiller/a0p+ +dessin/S. +dessinatrice/F. +dessiner/a0p+ +dessolement/S. +dessoler/a0p+ +dessouchage/S. +dessouchement/S. +dessoucher/a0p+ +dessoucheuse/S. +dessouder/a0p+ +dessoudure/S. +dessouffler/a0p+ +dessoûler/a0p+ +dessous +dessous +dessous +dessous-de-bouteille +dessous-de-bras +dessous-de-plat +dessous-de-table +dessuintage/S. +dessuinter/a0p+ +dessus +dessus +dessus +dessus-de-lit +dessus-de-plat +dessus-de-porte +déstabilisante/F. +déstabilisation/S. +déstabilisatrice/F. +déstabiliser/a0p+ +déstalinisation/S. +déstaliniser/a0p+ +destin/S. +destinataire/S. +destination/S. +destinatrice/F. +destinée/S. +destiner/a0p+ +destituable/S. +destituer/a0p+ +destitution/S. +déstockage/S. +déstocker/a0p+ +déstressante/F. +déstresser/a0p+ +destrier/S. +destroyer/S. +destructible/S. +destruction/S. +destructive/F. +destructivité/S. +destructrice/F. +déstructurante/F. +destructuration/S. +déstructuration/S. +déstructurer/a0p+ +désuète/F. +désuétude/S. +désulfatage/S. +désulfitage/S. +désulfiter/a0p+ +désulfuration/S. +désulfurer/a0p+ +désunion/S. +désunir/f0p+ +désurbanisation/S. +désutilité/S. +désynchronisation/S. +désynchroniser/a0p+ +désyndicalisation/S. +détachable/S. +détachage/S. +détachante/F. +détachement/S. +détacher/a0p+ +détacheuse/F. +détail/S. +détaillante/F. +détailler/a0p+ +détaler/a0p. +détaller/a0p+ +détalonner/a0p+ +détapisser/a0p+ +détartrage/S. +détartrante/F. +détartrer/a0p+ +détartreur/S. +détaxation/S. +détaxe/S. +détaxer/a0p+ +détectabilité/S. +détectable/S. +détecter/a0p+ +détecteur/S. +détection/S. +détective/S. +détectrice/F. +déteindre/wB +déteinte/S. +dételage/S. +dételer/d0p+ +détendeur/S. +détendre/tA +détenir/i0q+ +détente/S. +détention/S. +détentrice/F. +détenue/F. +détergence/S. +détergent/S. +détergente/F. +déterger/a0p+ +détérioration/S. +détériorer/a0p+ +déterminabilité/S. +déterminable/S. +déterminante/F. +détermination/S. +déterminative/F. +déterminément +déterminer/a0p+ +déterminisme/S. +déterministe/S. +déterminité/S. +déterrage/S. +déterrement/S. +déterrer/a0p+ +déterreuse/F. +déterritorialisation/S. +déterritorialiser/a0p+ +détersion/S. +détersive/F. +détestable/S. +détestablement +détestation/S. +détester/a0p+ +déthéiner/a0p+ +détimbrée/F. +détirer/a0p+ +détireuse/S. +détiser +détisser/a0p+ +détonante/F. +détonateur/S. +détonation/S. +détoner/a0p. +détonique/S. +détonneler/d0p+ +détonner/a0p. +détordre/tA +détorse/F. +détorsion/S. +détortiller/a0p+ +détour/S. +détourage/S. +détourer/a0p+ +détournement/S. +détourner/a0p+ +détox +détoxication/S. +détoxifiante/F. +détoxification/S. +détoxifier/a0p+ +détoxiquer/a0p+ +détracter/a0p+ +détraction/S. +détractrice/F. +détrancher/a0p. +détransposer/a0p+ +détraquée/F. +détraquement/S. +détraquer/a0p+ +détrempe/S. +détremper/a0p+ +détresse/S. +détresser/a0p+ +détricotage/S. +détricoter/a0p+ +détriment/S. +détritique/S. +détritivore/S. +détritivore/S. +détritus +détroit/S. +détrompage/S. +détromper/a0p+ +détrompeur/S. +détrônable/S. +détroncher/a0p. +détrônement/S. +détrôner/a0p+ +détroquage/S. +détroquer/a0p+ +détroussement/S. +détrousser/a0p+ +détrousseuse/F. +détruire/yM +dette/S. +détumescence/S. +deuil/S. +deutérée/F. +deutérium/S. +deutérocanonique/S. +deutéron/S. +deutéronomique/S. +deuton/S. +deutschemark/S. +deux +deux-deux +deux-huit +deuxième/S. +deuxièmement +deux-mâts +deux-pièces +deux-points +deux-ponts +deux-quatre +deux-roues +deux-seize +deux-temps +deuzio +dévalaison/S. +dévalement/S. +dévaler/a0p+ +dévalider/a0p+ +dévaliser/a0p+ +dévaliseuse/F. +dévaloir/S. +dévalorisante/F. +dévalorisation/S. +dévaloriser/a0p+ +dévaluation/S. +dévaluer/a0p+ +devanagari/S. +devanagari/S. +devancement/S. +devancer/a0p+ +devancière/F. +devant +devant +devant/S. +devanture/S. +dévaser/a0p+ +dévastation/S. +dévastatrice/F. +dévaster/a0p+ +déveine/S. +développable/S. +développante/F. +développante/S. +développée/F. +développement/S. +développementale/W. +développer/a0p+ +développeuse/F. +devenir/S. +devenir/i0q+ +déventer/a0p+ +déverbale/W. +déverbatif/S. +déverdir/f0p. +dévergondage/S. +dévergondée/F. +dévergonder/a0p+ +déverguer/a0p+ +déverminage/S. +déverminer/a0p+ +dévernir/f0p+ +dévernissage/S. +déverrouillage/S. +déverrouiller/a0p+ +devers +déverse/F. +déversement/S. +déverser/a0p+ +déversoir/S. +dévésiculeur/S. +dévestiture/S. +dévêtir/iG +déviance/S. +déviante/F. +déviation/S. +déviationnisme/S. +déviationniste/S. +déviatrice/F. +dévidage/S. +dévider/a0p+ +dévideuse/F. +dévidoir/S. +dévier/a0p+ +devin/S. +devinable/S. +deviner/a0p+ +devineresse/S. +devinette/S. +devineuse/F. +dévirer/a0p+ +dévirginer +dévirginiser/a0p+ +dévirilisation/S. +déviriliser/a0p+ +déviroler/a0p+ +devis +dévisager/a0p+ +devise/S. +deviser/a0p. +deviseuse/F. +dévissable/S. +dévissage/S. +dévisser/a0p+ +dévitalisation/S. +dévitaliser/a0p+ +dévitaminer/a0p+ +dévitrification/S. +dévitrifier/a0p+ +dévoiement/S. +dévoilement/S. +dévoiler/a0p+ +devoir/S. +devoir/pCpD +dévoisement/S. +dévoiser/a0p+ +dévoltage/S. +dévolter/a0p+ +dévolteur/S. +dévolu/S. +dévolue/F. +dévolution/S. +dévolutive/F. +devon/S. +dévonien/S. +dévonienne/F. +dévorante/F. +dévoration/S. +dévoratrice/F. +dévorement/S. +dévorer/a0p+ +dévoreuse/F. +dévote/F. +dévotement +dévotieuse/W. +dévotieusement +dévotion/S. +dévotionnelle/F. +dévouement/S. +dévouer/a0p+ +dévoyée/F. +dévoyer/a0p+ +dewar/S. +déwattée/F. +dexaméthasone/S. +dextérité/S. +dextralité/S. +dextre/S. +dextre/S. +dextrement +dextrine/S. +dextrinisation/S. +dextrocardie/S. +dextrochère/S. +dextrogyre/S. +dextrométhorphane/S. +dextrorsum +dextrorsum +dextrose/S. +dey/S. +dézinguer/a0p+ +dézipper/a0p+ +dézoomer/a0p+ +dgr/||-- +dhamma +dharma/S. +dhikr/S. +dhimmi/S. +dhimmitude/S. +dhole/S. +dia +diabase/S. +diabète/S. +diabétique/S. +diabétologie/S. +diabétologue/S. +diablement +diablerie/S. +diablesse/F. +diablotin/S. +diabolique/S. +diaboliquement +diabolisation/S. +diaboliser/a0p+ +diabolisme/S. +diabolo/S. +diacétylmorphine/S. +diachronie/S. +diachronique/S. +diachroniquement +diachylon/S. +diachylum +diacide/S. +diaclase/S. +diacode/S. +diaconale/W. +diaconat/S. +diaconesse/S. +diaconie/S. +diacoustique/S. +diacre/S. +diacritée/F. +diacritique/S. +diadelphe/S. +diadème/S. +diadémée/F. +diadoque/S. +diadrome/S. +diagenèse/S. +diagnose/S. +diagnostic/S. +diagnosticienne/F. +diagnostique/S. +diagnostiquer/a0p+ +diagnostiqueuse/F. +diagonale/W. +diagonalement +diagonalisable/S. +diagonalisation/S. +diagonaliser/a0p+ +diagonalité/S. +diagrammatique/S. +diagramme/S. +diagraphe/S. +diagraphie/S. +diagraphique/S. +dialcool/S. +dialectale/W. +dialectaliser/a0p+ +dialectalisme/S. +dialecte/S. +dialecticienne/F. +dialectique/S. +dialectique/S. +dialectiquement +dialectisation/S. +dialectiser/a0p+ +dialectologie/S. +dialectologique/S. +dialectologue/S. +diallèle/S. +dialogale/W. +dialogicité/S. +dialogique/S. +dialogisme/S. +dialogue/S. +dialoguer/a0p+ +dialogueuse/F. +dialoguiste/S. +dialypétale/S. +dialypétale/S. +dialysat/S. +dialyse/S. +dialysépale/S. +dialyser/a0p+ +dialyseur/S. +diamagnétique/S. +diamagnétisme/S. +diamant/S. +diamantaire/S. +diamanter/a0p+ +diamantifère/S. +diamantine/F. +diamétrale/W. +diamétralement +diamètre/S. +diamide/S. +diamidophénol/S. +diamine/S. +diamorphine/S. +diane/S. +diantre +diantrement +diapason/S. +diapasonner/a0p+ +diapause/S. +diapédèse/S. +diaphane/S. +diaphanéité/S. +diaphanoscopie/S. +diaphasique/S. +diaphonie/S. +diaphorèse/S. +diaphorétique/S. +diaphragmatique/S. +diaphragme/S. +diaphragmer/a0p+ +diaphysaire/S. +diaphyse/S. +diapir/S. +diapo/S. +diaporama/S. +diapositive/F. +diapositive/S. +diaprer/a0p+ +diaprure/S. +diapside/S. +diariste/S. +diarrhée/S. +diarrhéique/S. +diarthrose/S. +diascope/S. +diascopie/S. +diascordium/S. +diaspora/S. +diasporique/S. +diastase/S. +diastasique/S. +diastème/S. +diastéréo-isomère/S. +diastole/S. +diastolique/S. +diastratique/S. +diasystème/S. +diathermane/S. +diatherme/S. +diathermie/S. +diathermique/S. +diathèse/S. +diathésique/S. +diatomée/S. +diatomique/S. +diatomite/S. +diatonique/S. +diatoniquement +diatopique/S. +diatribe/S. +diaule/S. +diazane/S. +diazène/S. +diazine/S. +diazoïque/S. +diazole/S. +diazonium/S. +diazote/S. +dibasique/S. +dibiterie/S. +dibrome/S. +dicalcique/S. +dicarboxylique/S. +dicastère/S. +dicentra/S. +dichlore/S. +dichlorométhane/S. +dichlorure/S. +dichogamie/S. +dichotome/S. +dichotomie/S. +dichotomique/S. +dichotomisation/S. +dichroïque/S. +dichroïsme/S. +dichromatique/S. +dicible/S. +dickensienne/F. +dicline/S. +dico/S. +dicotylédone/S. +dicotylédone/S. +dicoumarol/S. +dicrote/S. +dictame/S. +dictaphone/S. +dictatoriale/W. +dictatorialement +dictatrice/F. +dictature/S. +dictée/S. +dicter/a0p+ +diction/S. +dictionnaire/S. +dictionnairique/S. +dictionnariste/S. +dicton/S. +dictyoptère/S. +didacticiel/S. +didacticienne/F. +didactique/S. +didactique/S. +didactiquement +didactisation/S. +didactiser/a0p+ +didactisme/S. +didactyle/S. +didascalie/S. +didelphidé/S. +didgeridoo/S. +didone/S. +didot/S. +diduction/S. +didyme/S. +didyme/S. +die +diédrale/W. +dièdre/S. +dièdre/S. +diégèse/S. +diégétique/S. +diélectrique/S. +diencéphale/S. +diencéphalique/S. +diène/S. +dieppoise/F. +diérèse/S. +diergol/S. +dièse/S. +diesel/S. +diéséliser/a0p+ +diéséliste/S. +diéser/c0p+ +diester/S. +diète/S. +diététicienne/F. +diététique/S. +diététiste/S. +diéthylénique/S. +diéthylstilbestrol/S. +dieu/X. +difénoconazole/S. +diffa/S. +diffamante/F. +diffamation/S. +diffamatoire/S. +diffamatrice/F. +diffamer/a0p+ +difféologie/S. +difféomorphe/S. +difféomorphisme/S. +différé/S. +différemment +différence/S. +différenciable/S. +différenciateur/S. +différenciation/S. +différenciatrice/F. +différencier/a0p+ +différend/S. +différente/F. +différentiabilité/S. +différentiable/S. +différentiablement +différentialisme/S. +différentialiste/S. +différentiation/S. +différentiée/F. +différentielle/F. +différentiellement +différentier +différer/c0p+ +difficile/S. +difficilement +difficulté/S. +difficultueuse/W. +diffluence/S. +diffluente/F. +difforme/S. +difformer/a0p+ +difformité/S. +diffracter/a0p+ +diffraction/S. +diffractogramme/S. +diffractomètre/S. +diffractométrie/S. +diffractométrique/S. +diffusable/S. +diffuse/F. +diffusément +diffuser/a0p+ +diffuseuse/F. +diffusibilité/S. +diffusible/S. +diffusiomètre/S. +diffusion/S. +diffusionnelle/F. +diffusionnisme/S. +diffusionniste/S. +diffusive/F. +diffusivité/S. +diffusomètre/S. +difluor/S. +digamma +digastrique/S. +digérable/S. +digérer/c0p+ +digest/S. +digeste/S. +digeste/S. +digesteur/S. +digestibilité/S. +digestible/S. +digestif/S. +digestion/S. +digestive/F. +digiKam +digicode/S. +digipuncture/S. +digit/S. +digitaire/S. +digitale/W. +digitaline/S. +digitalique/S. +digitalique/S. +digitalisation/S. +digitaliser/a0p+ +digitaliseur/S. +digitation/S. +digitée/F. +digitiforme/S. +digitigrade/S. +digitopuncture/S. +diglossie/S. +diglossique/S. +digne/S. +dignement +dignitaire/S. +dignité/S. +digon/S. +digramme/S. +digraphe/S. +digraphie/S. +digresser/a0p. +digression/S. +digressive/F. +digue/S. +diholoside/S. +dihydrogène +diiode/S. +dijonnaise/F. +dikkenek/S. +diktat/S. +dilacération/S. +dilacérer/c0p+ +dilapidation/S. +dilapidatrice/F. +dilapider/a0p+ +dilatabilité/S. +dilatable/S. +dilatance/S. +dilatante/F. +dilatateur/S. +dilatation/S. +dilatatrice/F. +dilater/a0p+ +dilation/S. +dilatoire/S. +dilatoirement +dilatomètre/S. +dilatométrie/S. +dilatométrique/S. +dilection/S. +dilemme/S. +dilettante/S. +dilettantisme/S. +diligemment +diligence/S. +diligente/F. +diligenter/a0p+ +dilogie/S. +diluante/F. +diluer/a0p+ +dilution/S. +dilutive/F. +diluviale/W. +diluvienne/F. +diluvium/S. +dimanche +dimanche/S. +dimanganèse/S. +dîme/S. +dimension/S. +dimensionnalité/S. +dimensionnelle/F. +dimensionnement/S. +dimensionner/a0p+ +dimère/S. +dimère/S. +diméthylaniline/S. +diméthylmercure/S. +dimétrodon/S. +diminuendo +diminuendo +diminuendo/S. +diminuer/a0p+ +diminutif/S. +diminution/S. +diminutive/F. +dimissoire/S. +dimissoriale/W. +dimorphe/S. +dimorphique/S. +dimorphisme/S. +dinanderie/S. +dinandière/F. +dinar/S. +dinarique/S. +dînatoire/S. +dinde/S. +dindon/S. +dindonneau/X. +dindonner/a0p+ +dindonnière/F. +dînée/S. +dîner/S. +dîner/a0p. +dînette/S. +dîneuse/F. +ding +dinghy/A. +dingo/S. +dingue/S. +dinguer/a0p. +dinguerie/S. +dinitration/S. +dinitrile/S. +dinoflagellé/S. +dinophysis +dinornis +dinosaure/S. +dinosaurien/S. +dinosaurienne/F. +dinothérium/S. +diocésaine/F. +diocèse/S. +diode/S. +diodique/S. +diodon/S. +dioïque/S. +diol/S. +dioléfine/S. +dione/S. +dionée/S. +dionysiaque/S. +dionysienne/F. +dionysies +dionysisme/S. +diophantienne/F. +diopside/S. +dioptase/S. +dioptre/S. +dioptrie/S. +dioptrique/S. +dioptrique/S. +diorama/S. +diorite/S. +dioscoréacée/S. +dioscure/S. +diot/S. +dioxine/S. +dioxyde/S. +dioxygène/S. +dipeptide/S. +dipétale/S. +diphasée/F. +diphasique/S. +diphénol/S. +diphényle/S. +diphonique/S. +diphosgène/S. +diphosphate/S. +diphtérie/S. +diphtérique/S. +diphtongaison/S. +diphtongue/S. +diphtonguer/a0p+ +diphyodonte/S. +diplégie/S. +diploblastique/S. +diplocoque/S. +diplodocus +diploïde/S. +diploïdie/S. +diplômante/F. +diplomate/S. +diplomatie/S. +diplomation/S. +diplomatique/S. +diplomatique/S. +diplomatiquement +diplôme/S. +diplômée/F. +diplômer/a0p+ +diplopie/S. +diplopode/S. +diploure/S. +dipneumonée/F. +dipneuste/S. +dipneuste/S. +dipode/S. +dipolaire/S. +dipôle/S. +dipsacée/S. +dipsacée/S. +dipsomane/S. +dipsomanie/S. +diptère/S. +diptère/S. +diptyque/S. +diquat/S. +dircom/S. +dire/S. +dire/yC +directe/F. +directement +direction/S. +directionnelle/F. +directive/F. +directivisme/S. +directivité/S. +directoire/S. +directorat/S. +directoriale/W. +directrice/F. +dirham/S. +dirhem/S. +dirigeable/S. +dirigeable/S. +dirigeante/F. +diriger/a0p+ +dirigisme/S. +dirigiste/S. +dirimante/F. +dirimer/a0p+ +dirlo/S. +disaccharide/S. +disamare/S. +discale/W. +discarthrose/S. +discernable/S. +discernement/S. +discerner/a0p+ +disciple/S. +disciplinable/S. +disciplinaire/S. +disciplinairement +discipline/S. +discipliner/a0p+ +disc-jockey/S. +disco/S. +discobole/S. +discographie/S. +discographique/S. +discoïdale/W. +discoïde/S. +discompte/S. +discompter/a0p+ +discompteuse/F. +discomycète/S. +disconnecteur/S. +discontacteur/S. +discontinuation/S. +discontinue/F. +discontinuer +discontinuisme/S. +discontinuité/S. +discontinûment +disconvenance/S. +disconvenir/i0q+ +discopathie/S. +discophile/S. +discophilie/S. +discord/S. +discordance/S. +discordante/F. +discorde/S. +discorder/a0p. +discothécaire/S. +discothèque/S. +discount/S. +discounter/a0p+ +discounteur/S. +discoureuse/F. +discourir/iD +discours +discourtoise/F. +discourtoisement +discourtoisie/S. +discrédit/S. +discréditer/a0p+ +discrépance/S. +discrète/F. +discrètement +discrétion/S. +discrétionnaire/S. +discrétionnairement +discrétisation/S. +discrétiser/a0p+ +discrétoire/S. +discriminante/F. +discrimination/S. +discriminative/F. +discriminatoire/S. +discriminatrice/F. +discriminer/a0p+ +disculpation/S. +disculpée/F. +disculper/a0p+ +discuputer/a0p. +discursive/F. +discursivement +discursiviser +discursivité/S. +discussion/S. +discutable/S. +discutailler/a0p+ +discutaillerie/S. +discutailleuse/F. +discutante/F. +discuter/a0p+ +discuteuse/F. +diserte/F. +disertement +disette/S. +disetteuse/W. +diseuse/F. +disgrâce/S. +disgracier/a0p+ +disgracieuse/W. +disgracieusement +disharmonie/S. +disilane/S. +disjoindre/wB +disjoncter/a0p+ +disjoncteur/S. +disjonction/S. +disjonctive/F. +dislocation/S. +disloquer/a0p+ +dismutase/S. +dismutation/S. +disodique/S. +disomie/S. +disparaître/wQq+ +disparate/S. +disparation/S. +disparité/S. +disparition/S. +disparue/F. +dispatcher/a0p+ +dispatcheuse/F. +dispatching/S. +dispendieuse/W. +dispendieusement +dispensable/S. +dispensaire/S. +dispensation/S. +dispensatoire/S. +dispensatrice/F. +dispense/S. +dispenser/a0p+ +dispersable/S. +dispersal/S. +dispersante/F. +dispersement/S. +disperser/a0p+ +dispersion/S. +dispersive/F. +disponibilité/S. +disponible/S. +disposante/F. +dispose/F. +disposer/a0p+ +dispositif/S. +disposition/S. +disproportion/S. +disproportionnalité/S. +disproportionnelle/F. +disproportionnellement +disproportionnément +disproportionner/a0p+ +disputailler/a0p. +dispute/S. +disputer/a0p+ +disputeuse/F. +disquaire/S. +disqualification/S. +disqualifiée/F. +disqualifier/a0p+ +disque/S. +disquette/S. +disqueuse/S. +disrupter/a0p+ +disruption/S. +disruptive/F. +dissecteur/S. +dissection/S. +dissemblable/S. +dissemblance/S. +dissémination/S. +disséminer/a0p+ +dissension/S. +dissensus +dissentiment/S. +disséquer/c0p+ +disséqueuse/F. +dissertation/S. +disserter/a0p. +dissidence/S. +dissidente/F. +dissimilaire/S. +dissimilarité/S. +dissimilarité/S. +dissimilation/S. +dissimiler/a0p+ +dissimilitude/S. +dissimulable/S. +dissimulation/S. +dissimulatrice/F. +dissimuler/a0p+ +dissipable/S. +dissipation/S. +dissipative/F. +dissipatrice/F. +dissiper/a0p+ +dissociabilité/S. +dissociable/S. +dissociation/S. +dissociative/F. +dissociatrice/F. +dissocier/a0p+ +dissolubilité/S. +dissoluble/S. +dissolue/F. +dissolution/S. +dissolutive/F. +dissolvant/S. +dissolvante/F. +dissonance/S. +dissonante/F. +dissoner/a0p. +dissoudre/xN +dissuader/a0p+ +dissuasion/S. +dissuasive/F. +dissyllabe/S. +dissyllabe/S. +dissyllabique/S. +dissymétrie/S. +dissymétrique/S. +distale/W. +distance/S. +distancer/a0p+ +distanciation/S. +distancielle/F. +distancier/a0p+ +distante/F. +distendre/tA +distension/S. +disthène/S. +distilbène/S. +distillat/S. +distillation/S. +distillatoire/S. +distillatrice/F. +distiller/a0p+ +distillerie/S. +distincte/F. +distinctement +distinction/S. +distinctive/F. +distinguable/S. +distinguer/a0p+ +distinguo/S. +distique/S. +distomatose/S. +distome/S. +distordre/tA +distorsiomètre/S. +distorsion/S. +distraction/S. +distractive/F. +distractivité/S. +distraire/wL +distraitement +distrayante/F. +distribuable/S. +distribuer/a0p+ +distributaire/S. +distributif/S. +distribution/S. +distributionnalisme/S. +distributionnaliste/S. +distributionnelle/F. +distributive/F. +distributivement +distributivité/S. +distributrice/F. +district/S. +distyle/S. +disubstituée/F. +disulfirame/S. +disulfure/S. +dit/S. +diterpène/S. +dithyrambe/S. +dithyrambique/S. +dito +diton/S. +dittographie/S. +diurèse/S. +diurétique/S. +diurétique/S. +diurnal/X. +diurne/S. +div +diva/S. +divagante/F. +divagation/S. +divagatrice/F. +divaguer/a0p. +divalente/F. +divan/S. +dive/S. +divergence/S. +divergente/F. +diverger/a0p. +divers +diverse/F. +diversement +diverses +diversifiable/S. +diversification/S. +diversifier/a0p+ +diversiforme/S. +diversion/S. +diversitaire/S. +diversité/S. +diverticule/S. +diverticulite/S. +diverticulose/S. +divertimento/S. +divertir/f0p+ +divertissante/F. +divertissement/S. +divette/S. +dividende/S. +divination/S. +divinatoire/S. +divinatrice/F. +divine/F. +divinement +divinisation/S. +diviniser/a0p+ +divinité/S. +divise/F. +diviser/a0p+ +diviseuse/F. +divisibilité/S. +divisible/S. +division/S. +divisionnaire/S. +divisionnisme/S. +divisionniste/S. +divisoire/S. +divorce/S. +divorcée/F. +divorcer/a0p. +divortialité/S. +divulgâcheur/S. +divulgâchis +divulgation/S. +divulgatrice/F. +divulguable/S. +divulguer/a0p+ +divulsion/S. +dix +dix-huit +dix-huitième/S. +dixième/S. +dixièmement +dixit +dix-milliardième/S. +dix-millième/S. +dix-millionième/S. +dix-neuf +dix-neuvième/S. +dix-sept +dix-septième/S. +dizain/S. +dizaine/S. +dizygote/S. +dizygote/S. +djaïnisme/S. +djebel/S. +djellaba/S. +djembe/S. +djembé/S. +djiboutienne/F. +djibser/a0p. +djihad/S. +djihadisme/S. +djihadiste/S. +djinn/S. +do +doberman/S. +doc/S. +docétisme/S. +doche/S. +docile/S. +docilement +docilité/S. +docimasie/S. +docimologie/S. +docimologique/S. +dock/S. +docker/S. +docte/S. +doctement +docteur/S. +docteure/S. +doctissime/S. +doctorale/W. +doctoralement +doctorante/F. +doctorat/S. +doctoresse/S. +doctrinaire/S. +doctrinale/W. +doctrinalement +doctrinarisme/S. +doctrine/S. +docu/S. +docudrame/S. +docu-drame/S. +docu-fiction/S. +document/S. +documentaire/S. +documentaire/S. +documentaliste/S. +documentariste/S. +documentation/S. +documenter/a0p+ +documentologie/S. +dodécaèdre/S. +dodécaédrique/S. +dodécagonale/W. +dodécagone/S. +dodécalogie/S. +dodécaphasée/F. +dodécaphonique/S. +dodécaphonisme/S. +dodécaphoniste/S. +dodécastyle/S. +dodécasyllabe/S. +dodécylsulfate/S. +dodelinante/F. +dodelinement/S. +dodeliner/a0p. +dodine/S. +dodo/S. +dodue/F. +dogaresse/S. +dogat/S. +dog-cart/S. +doge/S. +dogger/S. +dogmatique/S. +dogmatiquement +dogmatiser/a0p+ +dogmatiseur/S. +dogmatisme/S. +dogmatiste/S. +dogme/S. +dogonne/F. +dogue/S. +doguer/a0p+ +doigt/S. +doigté/S. +doigter/a0p+ +doigtier/S. +dojo/S. +dol/S. +dolce +dolcissimo +doléance/S. +doleau/X. +dolente/F. +doler/a0p+ +dolérite/S. +dolic/S. +dolichocéphale/S. +dolichocéphalie/S. +dolichocôlon/S. +doline/S. +dolique/S. +dollar/S. +dollarisation/S. +dolman/S. +dolmen/S. +doloire/S. +dolomie/S. +dolomite/S. +dolomitique/S. +dolorisme/S. +doloriste/S. +dolosive/F. +dom/S. +domaine/S. +domaniale/W. +domanialité/S. +dôme/S. +domesticable/S. +domestication/S. +domesticité/S. +domestique/S. +domestiquement +domestiquer/a0p+ +domicile/S. +domiciliaire/S. +domiciliataire/S. +domiciliation/S. +domicilier/a0p+ +domienne/F. +dominance/S. +dominante/F. +domination/S. +dominatrice/F. +dominée/F. +dominer/a0p+ +dominicaine/F. +dominicale/W. +dominion/S. +dominiquaise/F. +domino/S. +dominotée/F. +dominoterie/S. +dominotière/F. +domisme/S. +dommage/S. +dommageable/S. +dommages-intérêts +domoticienne/F. +domotique/S. +domptable/S. +domptage/S. +dompter/a0p+ +dompteuse/F. +dompte-venin +don/S. +doña/S. +donacie/S. +donataire/S. +donation/S. +donation-partage +donations-partages +donatisme/S. +donatiste/S. +donatrice/F. +donc +dondaine/S. +dondon/S. +dongle/S. +donjon/S. +donjonnée/F. +donjuanesque/S. +don-juanesque/S. +donjuanisme/S. +don-juanisme/S. +donnable/S. +donne/S. +donnée/S. +donner/a0p+ +donnerie/S. +donneuse/F. +donquichottesque/S. +don-quichottesque/S. +donquichottisme/S. +don-quichottisme/S. +dont +donut/S. +donzelle/S. +dopage/S. +dopamine/S. +dopaminergique/S. +dopant/S. +dopante/F. +dope/S. +doper/a0p+ +doping/S. +doppelgänger/S. +dorade/S. +dorage/S. +dorée/F. +dorénavant +dorer/a0p+ +doreuse/F. +dorienne/F. +dorin/S. +dorique/S. +doris +dorlotement/S. +dorloter/a0p+ +dormance/S. +dormante/F. +dormeuse/F. +dormir/iI +dormition/S. +dormitive/F. +dorsale/W. +dorsalement +dorsalgie/S. +dorsolombaire/S. +dorso-lombaire/S. +dorsoventrale/W. +dorso-ventrale/W. +dortoir/S. +dorure/S. +doryphore/S. +dos +dosable/S. +dosage/S. +dos-d'âne +dose/S. +doser/a0p+ +dosette/S. +doseuse/F. +dosimètre/S. +dosimétrie/S. +dosimétrique/S. +dos-nu/S. +dossard/S. +dosse/S. +dosseret/S. +dossier/S. +dossière/S. +dostoïevskienne/F. +dot/S. +dotale/W. +dotalité/S. +dotation/S. +doter/a0p+ +douaire/S. +douairière/S. +douairière/S. +douance/S. +douane/S. +douanière/F. +douar/S. +doublage/S. +double/S. +double/S. +doublé/S. +doubleau/X. +double-clic +double-cliquer/a0 +double-commande +double-crème +double-croche +doublement +doublement/S. +doubler/a0p+ +doubles-clics +doubles-commandes +doubles-crèmes +doubles-croches +doublet/S. +doublette/S. +doubleuse/F. +doublier/S. +doublon/S. +doublonner/a0p. +doublure/S. +douce/W. +douce-amère +douceâtre/S. +doucement +doucereuse/W. +doucereusement +douces-amères +doucette/F. +doucettement +douceur/S. +douche/S. +doucher/a0p+ +douchette/S. +doucheuse/F. +doucin/S. +doucine/S. +doucir/f0p+ +doucissage/S. +doudou/S. +doudouisme/S. +doudoune/S. +douée/F. +douelle/S. +douer +douglas +douille/S. +douiller/a0p. +douillette/F. +douillettement +douilletterie/S. +douleur/S. +douloureuse/W. +douloureusement +doum/S. +douma/S. +dourine/S. +douro/S. +doute/S. +douter/a0p+ +douteuse/F. +douteuse/W. +douteusement +douvain/S. +douve/S. +douvelle/S. +doux +douzain/S. +douzaine/S. +douze +douze-huit +douzième/S. +douzièmement +doxa/S. +doxographe/S. +doxologie/S. +doxorubicine/S. +doxycycline/S. +doyenne/F. +doyenné/S. +doyenneté/S. +dpi +dracéna/S. +drache/S. +dracher/a8p. +drachme/S. +draconienne/F. +draconitique/S. +dracunculose/S. +drag/S. +dragage/S. +dragée/S. +dragéifier/a0p+ +dragéiste/S. +drageoir/S. +drageon/S. +drageonnage/S. +drageonnement/S. +drageonner/a0p. +dragline/S. +dragon/S. +dragonnade/S. +dragonne/S. +dragonner/a0p+ +dragonnier/S. +drag-queen/S. +dragster/S. +drague/S. +draguer/a0p+ +dragueuse/F. +draille/S. +drain/S. +drainage/S. +drainante/F. +draine/S. +drainer/a0p+ +draineuse/F. +draisienne/S. +draisine/S. +drakkar/S. +dramatique/S. +dramatiquement +dramatisation/S. +dramatiser/a0p+ +dramatisme/S. +dramaturge/S. +dramaturgie/S. +dramaturgique/S. +drame/S. +drap/S. +drapé/S. +drapeau/X. +drapeler/d0p+ +drapement/S. +draper/a0p+ +draperie/S. +drap-housse +drapière/F. +draps-housses +drastique/S. +drastiquement +drave/S. +draver/a0p+ +draveur/S. +dravidienne/F. +drawback/S. +drayer/a0p+ +drayoir/S. +drayoire/S. +dreadlock/S. +dreadnought/S. +drêche/S. +drège/S. +drelin +drenne/S. +drépanocytaire/S. +drépanocytose/S. +dressage/S. +dressant/S. +dressement/S. +dresser/a0p+ +dresse-tube/S. +dresseuse/F. +dressing/S. +dressing-room/S. +dressoir/S. +drève/S. +dreyfusarde/F. +dreyfusisme/S. +dribble/S. +dribbler/a0p+ +dribbleuse/F. +drifter/S. +drill/S. +drille/S. +driller/a0p+ +dring +dringuelle/S. +drink/S. +drisse/S. +drive/S. +drive-in +driver/S. +driver/a0p+ +drogman/S. +drogue/S. +droguée/F. +droguer/a0p+ +droguerie/S. +droguet/S. +droguiste/S. +droïde/S. +droit-de-l'hommisme/S. +droit-de-l'hommiste/S. +droite/F. +droitement +droit-fil +droitière/F. +droitisation/S. +droitiser/a0p+ +droitisme/S. +droitiste/S. +droitosphère/S. +droits-fils +droiture/S. +drolatique/S. +drôlatique/S. +drolatiquement +drôlatiquement +drôle/S. +drôlement +drôlerie/S. +drôlesse/F. +drôlette/F. +dromadaire/S. +drome/S. +drômoise/F. +dromotrope/S. +drone/S. +droniste/S. +dronte/S. +drop/S. +droper/a0p+ +drop-goal/S. +droppage/S. +droséra/S. +droséracée/S. +droséracée/S. +drosophile/S. +drosser/a0p+ +dru +drue/F. +drugstore/S. +druidesse/F. +druidique/S. +druidisme/S. +drumlin/S. +drummer/S. +drums +drupacée/F. +drupe/S. +druse/S. +druze/S. +dry +dry +dryade/S. +dry-farming/S. +dryopithèque/S. +du +dû +duale/W. +dualisation/S. +dualisme/S. +dualiste/S. +dualistique/S. +dualité/S. +duals +duathlète/S. +duathlon/S. +dub/S. +dubaïote/S. +dubitation/S. +dubitative/F. +dubitativement +dubnium/S. +duc/S. +ducale/W. +ducasse/S. +ducat/S. +duc-d'Albe +duce/S. +duché/S. +duchesse/S. +ducroire/S. +ducroire/S. +ducs-d'Albe +ductile/S. +ductilité/S. +ductus +dudgeonner +dudit +duègne/S. +duel/S. +duelle/F. +duelliste/S. +duettiste/S. +duetto +duetto/S. +duffel-coat/S. +duffle-coat/S. +dugong/S. +duit/S. +duite/S. +dulçaquicole/S. +dulcicole/S. +dulcification/S. +dulcifier/a0p+ +dulcinée/S. +dulcite/S. +dulcitol/S. +dulie/S. +dum-dum +dûment +dumping/S. +dunaire/S. +dundee/S. +dune/S. +dunette/S. +dunite/S. +dunkerquoise/F. +duo/S. +duodécimale/W. +duodénale/W. +duodénite/S. +duodénum/S. +duodi/S. +duolet/S. +duologie/S. +duopole/S. +dupe/S. +dupe/S. +duper/a0p+ +duperie/S. +dupeuse/F. +duplex +duplex +duplexer/a0p+ +duplicable/S. +duplicata +duplicata/S. +duplicateur/S. +duplication/S. +duplicité/S. +dupliquer/a0p+ +duquel +dur +durabilité/S. +durable/S. +durablement +duraille/S. +durale/W. +duralumin/S. +duramen/S. +durant +duratif/S. +durative/F. +durcir/f0p+ +durcissement/S. +durcisseur/S. +dure/F. +durée/S. +durement +dure-mère +durer/a0p. +dures-mères +dureté/S. +durian/S. +durillon/S. +durion/S. +durit/S. +durite/S. +dürüm/S. +dus +duumvir/S. +duumvirat/S. +duumviri +duvet/S. +duveter/d0p+ +duveteuse/W. +duxelles +dyade/S. +dyadique/S. +dyarchie/S. +dyke/S. +dyn/||-- +dynamicienne/F. +dynamique/S. +dynamique/S. +dynamiquement +dynamisante/F. +dynamisation/S. +dynamiser/a0p+ +dynamisme/S. +dynamiste/S. +dynamitage/S. +dynamite/S. +dynamiter/a0p+ +dynamiterie/S. +dynamiteuse/F. +dynamo/S. +dynamoélectrique/S. +dynamo-électrique/S. +dynamogène/S. +dynamogénie/S. +dynamogénique/S. +dynamographe/S. +dynamomètre/S. +dynamométrie/S. +dynamométrique/S. +dynaste/S. +dynastie/S. +dynastique/S. +dyne/S. +dynode/S. +dysacousie/S. +dysacromélie/S. +dysarthrie/S. +dysbarisme/S. +dysbasie/S. +dysboulie/S. +dysboulique/S. +dyscalculie/S. +dyschromatopsie/S. +dyschromie/S. +dyschronométrie/S. +dyscrasie/S. +dyscrasique/S. +dysendocrinie/S. +dysendocrinienne/F. +dysenterie/S. +dysentérique/S. +dysesthésie/S. +dysesthésique/S. +dysfonction/S. +dysfonctionnelle/F. +dysfonctionnement/S. +dysfonctionner/a0p. +dysgénésie/S. +dysgénésique/S. +dysgénique/S. +dysgraphie/S. +dysgraphique/S. +dysgueusie/S. +dysharmonie/S. +dysharmonique/S. +dyshidrose/S. +dysidrose/S. +dyskinésie/S. +dyskinétique/S. +dysleptique/S. +dyslexie/S. +dyslexique/S. +dyslipidémie/S. +dyslogie/S. +dysmélie/S. +dysménorrhée/S. +dysménorrhéique/S. +dysmétrie/S. +dysmnésie/S. +dysmnésique/S. +dysmorphie/S. +dysmorphophobie/S. +dysmorphose/S. +dysorexie/S. +dysorthographie/S. +dysorthographique/S. +dysosmie/S. +dysovulation/S. +dyspareunie/S. +dyspepsie/S. +dyspepsique/S. +dyspeptique/S. +dysphagie/S. +dysphagique/S. +dysphasie/S. +dysphasique/S. +dysphonie/S. +dysphonique/S. +dysphorie/S. +dysphorique/S. +dysplasie/S. +dysplasique/S. +dyspnée/S. +dyspnéique/S. +dyspraxie/S. +dysprosium/S. +dysrégulation/S. +dysrythmie/S. +dyssocialité/S. +dyssomnie/S. +dyssynchronie/S. +dystasie/S. +dysthymie/S. +dysthyroïdie/S. +dystocie/S. +dystocique/S. +dystomie/S. +dystonie/S. +dystonique/S. +dystopie/S. +dystopique/S. +dystrophie/S. +dystrophine/S. +dystrophique/S. +dystrophisation/S. +dysurie/S. +dysurique/S. +dytique/S. +dzêta +e +eV/U.||-- +eau/X* +eau-de-vie/L'D'Q' +eau-forte/L'D'Q' +eaux-de-vie/D'Q' +eaux-fortes/D'Q' +ébahir/f4p+ +ébahissement/S* +ébarbage/S* +ébarber/a2p+ +ébarbeuse/F* +ébarboir/S* +ébarbure/S* +ébat/S* +ébattement/S* +ébattre/uC +ébaubir/f3p+ +ébauchage/S* +ébauche/S* +ébaucher/a4p+ +ébaucheuse/F* +ébauchoir/S* +ébauchon/S* +ébaudir/f4p+ +ébavurage/S* +ébavurer/a2p+ +ébavureuse/F* +ébénacée/S* +ébène/S* +ébénier/S* +ébéniste/S* +ébénisterie/S* +éberluer/a2p+ +ébiseler/d2p+ +éblouir/f2p+ +éblouissante/F* +éblouissement/S* +ébonite/S* +e-book/S* +éborgnage/S* +éborgnement/S* +éborgner/a4p+ +ébosser/a2p+ +ébouer/a2p+ +éboueuse/F* +ébouillantage/S* +ébouillanter/a4p+ +éboulement/S* +ébouler/a4p+ +ébouleuse/W* +éboulis/L'D'Q' +ébouquetée/F* +ébouqueter +ébourgeonnage/S* +ébourgeonnement/S* +ébourgeonner/a2p+ +ébouriffage/S* +ébouriffante/F* +ébouriffement/S* +ébouriffer/a2p+ +ébourrer/a2p+ +éboutage/S* +ébouter/a2p+ +ébouzer +ébraiser/a2p+ +ébranchage/S* +ébranchement/S* +ébrancher/a2p+ +ébranchoir/S* +ébranlement/S* +ébranler/a4p+ +ébrasement/S* +ébraser/a2p+ +ébrasure/S* +ébrèchement/S* +ébrécher/c4p+ +ébréchure/S* +ébriété/S* +ébroudir/f2p+ +ébrouement/S* +ébrouer/a3p+ +ébruitement/S* +ébruiter/a4p+ +ébruter/a2p+ +ébulliomètre/S* +ébulliométrie/S* +ébullioscope/S* +ébullioscopie/S* +ébullition/S* +éburnée/F* +éburnéenne/F* +éburonne/F* +écacher/a2p+ +écaffer/a2p+ +écaillage/S* +écaille/S* +écaillement/S* +écailler/a4p+ +écaillère/F* +écailleuse/W* +écaillure/S* +écaler/a4p+ +écalure/S* +écang/S* +écanguer/a2p+ +écangueur/S* +écarlate/S* +écarquillement/S* +écarquiller/a2p+ +écart/S* +écartèlement/S* +écarteler/b2p+ +écartelure/S* +écartement/S* +écarter/a4p+ +écarteur/S* +écartomètre/S* +écartométrie/S* +écarts-types/D'Q' +écart-type/L'D'Q' +écatir/f2p+ +ecballium/S* +ecce/L'D'Q' +eccéité/S* +ecchymose/S* +ecclésiale/W* +ecclésiaste/S* +ecclésiastique/S* +ecclésiastique/S* +ecclésiastiquement/D'Q' +ecclésiologie/S* +ecclésiologique/S* +ecclésiologue/S* +eccrine/S* +ecdysone/S* +écervelée/F* +échafaud/S* +échafaudage/S* +échafauder/a2p+ +échafaudeuse/F* +échalas/L'D'Q' +échalasser/a2p+ +échalier/S* +échalote/S* +échampir/f2p+ +échancrer/a2p+ +échancrure/S* +échanfreiner/a2p+ +échange/S* +échangeable/S* +échanger/a4p+ +échangeur/S* +échangeuse/F* +échangisme/S* +échangiste/S* +échanson/S* +échansonnerie/S* +échantignole/S* +échantignolle/S* +échantillon/S* +échantillonnage/S* +échantillonner/a2p+ +échantillonneuse/F* +échantillothèque/S* +échanvroir/S* +échappatoire/S* +échappée/S* +échappement/S* +échapper/a4p+ +écharde/S* +échardonnage/S* +échardonner/a2p+ +écharnage/S* +écharnement/S* +écharner/a2p+ +écharneuse/F* +écharnoir/S* +écharpe/S* +écharper/a4p+ +échasse/S* +échassier/S* +échauboulure/S* +échaudage/S* +échaudement/S* +échauder/a4p+ +échaudoir/S* +échaudure/S* +échauffante/F* +échauffée/F* +échauffement/S* +échauffer/a4p+ +échauffourée/S* +échauffure/S* +échauguette/S* +échauler/a2p+ +échaumer/a2p+ +échéance/S* +échéancier/S* +échéante/F* +échec/S* +écheler/d4p+ +échelette/S* +échelier/S* +échelle/S* +échelon/S* +échelonnement/S* +échelonner/a4p+ +échenillage/S* +écheniller/a2p+ +échenilloir/S* +écheveau/X* +échevèlement/S* +écheveler/d2p+ +échevellement/S* +échevette/S* +échevin/S* +échevinage/S* +échevinale/W* +échevinat/S* +échidné/S* +échiffre/S* +échine/S* +échiner/a4p+ +échinide/S* +échinocactus/L'D'Q' +échinococcose/S* +échinocoque/S* +échinoderme/S* +échiquéenne/F* +échiquetée/F* +échiquier/S* +échiurien/S* +écho/S* +échocardiogramme/S* +échocardiographie/S* +échoencéphalogramme/S* +écho-encéphalogramme/S* +échoencéphalographie/S* +écho-encéphalographie/S* +échographe/S* +échographie/S* +échographier/a2p+ +échographique/S* +échographiste/S* +échoir/pY +écholalie/S* +écholalique/S* +écholocalisation/S* +écholocation/S* +échoppe/S* +échopper/a2p+ +échotière/F* +échotomographie/S* +échouage/S* +échouement/S* +échouer/a4p+ +e-cigarette/S* +écimage/S* +écimer/a2p+ +éclaboussante/F* +éclaboussement/S* +éclabousser/a4p+ +éclaboussure/S* +éclair/S* +éclairage/S* +éclairagisme/S* +éclairagiste/S* +éclairante/F* +éclaircie/S* +éclaircir/f4p+ +éclaircissage/S* +éclaircissement/S* +éclaire/S* +éclairement/S* +éclairer/a4p+ +éclairette/S* +éclaireuse/F* +éclampsie/S* +éclamptique/S* +éclanche/S* +éclat/S* +éclatage/S* +éclatante/F* +éclatement/S* +éclater/a4p+ +éclateuse/F* +éclectique/S* +éclectiquement/D'Q' +éclectisme/S* +éclimètre/S* +éclipse/S* +éclipser/a4p+ +écliptique/S* +écliptique/S* +éclisse/S* +éclisser/a2p+ +éclogite/S* +éclopée/F* +écloper/a2p+ +éclore/rC +écloserie/S* +éclosion/S* +éclusage/S* +écluse/S* +éclusée/S* +écluser/a2p+ +éclusière/F* +écobilan/S* +écoblanchiment/S* +écobuage/S* +écobuer/a2p+ +écocertification/S* +écocertifiée/F* +écocide/S* +écocitoyenne/F* +écocitoyenneté/S* +écoconception/S* +éco-conception/S* +écoconduite/S* +écoconstruction/S* +éco-construction/S* +écoemballage/S* +éco-environnementale/F* +écœurante/F* +écœurement/S* +écœurer/a2p+ +écogeste/S* +éco-gestion/S* +écohabitat/S* +écoinçon/S* +éco-industrie/S* +écolabel/S* +écolage/S* +écolâtre/S* +école/S* +écolière/F* +écolleter/d4p+ +écolo/S* +écologie/S* +écologique/S* +écologiquement/D'Q' +écologisme/S* +écologiste/S* +écologue/S* +e-commerce/S* +écomusée/S* +éconduire/yL +éconologie/S* +économat/S* +économe/S* +économètre/S* +économétricienne/F* +économétrie/S* +économétrique/S* +économicisme/S* +économiciste/S* +économicité/S* +économico-politique/S* +économico-sociale/W* +économie/S* +économique/S* +économiquement/D'Q' +économiser/a4p+ +économiseur/S* +économisme/S* +économiste/S* +écoparticipation/S* +écopastille/S* +écopaysagère/F* +écope/S* +écoper/a2p+ +écoperche/S* +écophysiologie/S* +écophysiologique/S* +écopoïèse/S* +écoproduit/S* +écoquartier/S* +écorçage/S* +écorce/S* +écorcement/S* +écorcer/a2p+ +écorceuse/F* +écorchage/S* +écorchée/F* +écorchement/S* +écorcher/a4p+ +écorcherie/S* +écorcheuse/F* +écorchure/S* +écorecharge/S* +éco-recharge/S* +écorégion/S* +écorer/a2p+ +écoresponsable/S* +écornage/S* +écorner/a2p+ +écornifler/a2p+ +écornifleuse/F* +écornure/S* +écosocialisme/S* +écosocialiste/S* +écosphère/S* +écossaise/F* +écosser/a2p+ +écosystème/S* +écosystémique/S* +écot/S* +écotaxe/S* +écotechnique/S* +écotechnologie/S* +écotée/F* +écoterrorisme/S* +écoterroriste/S* +écotone/S* +écotourisme/S* +écotoxicité/S* +écotoxicologie/S* +écotoxicologue/S* +écotoxique/S* +écotype/S* +écoulement/S* +écouler/a4p+ +écoumène/S* +écourter/a2p+ +écoutable/S* +écoutante/F* +écoute/S* +écouter/a4p+ +écouteuse/F* +écoutille/S* +écouvillon/S* +écouvillonnage/S* +écouvillonner/a2p+ +écovolontaire/S* +écovolontariat/S* +écrabouillage/S* +écrabouillement/S* +écrabouiller/a2p+ +écran/S* +écrantage/S* +écrasage/S* +écrasante/F* +écrasement/S* +écraser/a4p+ +écraseuse/F* +écrémage/S* +écrémer/c2p+ +écrémeuse/S* +écrêtage/S* +écrêtement/S* +écrêter/a2p+ +écrêteur/S* +écrevisse/S* +écrier/a3p+ +écrin/S* +écrire/y1 +écrit/S* +écriteau/X* +écritoire/S* +écriture/S* +écrivaillée/F* +écrivailler/a1p. +écrivailleuse/F* +écrivaillon/S* +écrivaine/F* +écrivasser/a2p+ +écrivassière/F* +écrou/S* +écrouelles/D'Q' +écrouer/a2p+ +écrouir/f2p+ +écrouissage/S* +écroulement/S* +écrouler/a3p+ +écroûtage/S* +écroûtement/S* +écroûter/a2p+ +écroûteuse/S* +écrue/F* +ecstasy/A* +ectasie/S* +ecthyma/S* +ectoblaste/S* +ectoderme/S* +ectodermique/S* +ectogenèse/S* +ectoparasite/S* +ectopie/S* +ectopique/S* +ectoplasme/S* +ectoprocte/S* +ectotherme/S* +ectotrophe/S* +ectropion/S* +écu/S* +écubier/S* +écueil/S* +écuelle/S* +écuellée/S* +écuisser/a2p+ +éculer/a2p+ +écumage/S* +écumante/F* +écume/S* +écumer/a2p+ +écumeur/S* +écumeuse/W* +écumoire/S* +écurage/S* +écurer/a2p+ +écureuil/S* +écureuse/F* +écurie/S* +écusson/S* +écussonnage/S* +écussonner/a2p+ +écussonnoir/S* +écuyère/F* +eczéma/S* +eczémateuse/W* +eczématisation/S* +éd +édam/S* +édaphique/S* +édaphologie/S* +edelweiss/L'D'Q' +éden/S* +édénique/S* +édentée/F* +édenter/a2p+ +édicter/a2p+ +édiction/S* +édicule/S* +édifiante/F* +édification/S* +édificatrice/F* +édifice/S* +édifier/a2p+ +édile/S* +édilitaire/S* +édilité/S* +édit/S* +éditable/S* +éditer/a2p+ +édition/S* +éditionner/a2p+ +édito/S* +éditocrate/S* +éditocratie/S* +éditologie/S* +éditorial/X* +éditoriale/W* +éditorialement/L'D'Q' +éditorialiser/a2p+ +éditorialiste/S* +éditrice/F* +édredon/S* +éducabilité/S* +éducable/S* +éducation/S* +éducationnelle/F* +éducative/F* +éducatrice/F* +édulcorant/S* +édulcorante/F* +édulcoration/S* +édulcorer/a2p+ +édumétrie/S* +éduquer/a2p+ +éfaufiler/a2p+ +effaçable/S* +effaçage/S* +effacement/S* +effacer/a4p+ +effaceuse/F* +effaçure/S* +effaner/a2p+ +effanure/S* +effarante/F* +effarement/S* +effarer/a4p+ +effarouchement/S* +effaroucher/a4p+ +effarvatte/S* +effecteur/S* +effectif/S* +effective/F* +effectivement/D'Q' +effectivité/S* +effectrice/F* +effectuation/S* +effectuer/a4p+ +efféminée/F* +efféminement/S* +efféminer/a4p+ +effendi/S* +efférente/F* +effervescence/S* +effervescente/F* +effet/S* +effeuillage/S* +effeuillaison/S* +effeuillement/S* +effeuiller/a4p+ +effeuilleuse/S* +efficace/S* +efficacement/D'Q' +efficacité/S* +efficience/S* +efficiente/F* +effigie/S* +effilage/S* +effilement/S* +effiler/a4p+ +effileuse/F* +effilochage/S* +effiloche/S* +effilochement/S* +effilocher/a4p+ +effilocheuse/F* +effilochure/S* +effilure/S* +efflanquer/a4p+ +effleurage/S* +effleurement/S* +effleurer/a2p+ +effleurie/F* +effleurir/f1p. +effloraison/S* +efflorescence/S* +efflorescente/F* +effluence/S* +effluente/F* +effluve/S* +effluver/a1p. +efflux/L'D'Q' +effondrement/S* +effondrer/a4p+ +effondrilles/D'Q' +efforcer/a3p+ +effort/S* +effraction/S* +effractive/F* +effraie/S* +effrangement/S* +effranger/a4p+ +effrayamment/D'Q' +effrayante/F* +effrayer/a4p+ +effrénée/F* +effritement/S* +effriter/a4p+ +effroi/S* +effrontée/F* +effrontément/D'Q' +effronterie/S* +effroyable/S* +effroyablement/D'Q' +effusion/S* +effusive/F* +effusivité/S* +éfourceau/X* +éfrit/S* +égagropile/S* +égaiement/S* +égailler/a3p+ +égalable/S* +égale/W* +également/D'Q' +égaler/a2p+ +égalisation/S* +égalisatrice/F* +égaliser/a2p+ +égaliseuse/F* +égalitaire/S* +égalitairement/L'D'Q' +égalitarisme/S* +égalitariste/S* +égalité/S* +égard/S* +égarée/F* +égarement/S* +égarer/a4p+ +égayante/F* +égayement/S* +égayer/a4p+ +égéenne/F* +égérie/S* +égermage/S* +égermer/a2p+ +égide/S* +égipan/S* +églantier/S* +églantine/S* +églefin/S* +église/S* +églogue/S* +égnaffer +ego/S* +égo/S* +égocentrée/F* +égocentrique/S* +égocentrisme/S* +égocentriste/S* +égoïne/S* +égoïne/S* +égoïner +égoïsme/S* +égoïste/S* +égoïstement/D'Q' +égorgement/S* +égorger/a4p+ +égorgeuse/F* +égosillement/S* +égosiller/a3p+ +égotique/S* +égotisme/S* +égotiste/S* +égout/S* +égoutière/F* +égouttage/S* +égouttement/S* +égoutter/a4p+ +égouttoir/S* +égoutture/S* +égrainage/S* +égrainer/a4p+ +égrappage/S* +égrapper/a2p+ +égrappoir/S* +égratignement/S* +égratigner/a4p+ +égratignure/S* +égravillonner/a2p+ +égrégore/S* +égrenage/S* +égrènement/S* +égrener/b4p+ +égreneuse/F* +égressive/F* +égrillarde/F* +égrisage/S* +égrisée/F* +égriser/a2p+ +égrotante/F* +égrugeage/S* +égrugeoir/S* +égruger/a2p+ +égrugeure/S* +égueulement/S* +égueuler/a2p+ +égueurziller/a3p+ +égyptienne/F* +égypto-américaine/F* +égyptologie/S* +égyptologique/S* +égyptologue/S* +eh +éhontée/F* +éhontément/D'Q' +eider/S* +eidétique/S* +eighties +einsteinium/S* +eisangélie/S* +éjaculat/S* +éjaculateur/S* +éjaculation/S* +éjaculatoire/S* +éjaculer/a2p+ +éjarrer/a2p+ +éjecta/S* +éjectable/S* +éjecter/a4p+ +éjecteur/S* +éjection/S* +éjective/F* +éjointage/S* +éjointer/a2p+ +ekpyrotique/S* +élaboration/S* +élaboratrice/F* +élaborer/a4p+ +elæis/L'D'Q' +élagage/S* +élaguer/a2p+ +élagueuse/F* +élaïdiser/a0p+ +élan/S* +élancement/S* +élancer/a4p+ +éland/S* +élaphe/S* +élapidé/S* +élargir/f4p+ +élargissement/S* +élargissure/S* +élastase/S* +élasthanne/S* +élasticimétrie/S* +élasticité/S* +élastine/S* +élastique/S* +élastique/S* +élastiquée/F* +élastiquement/D'Q' +élastomère/S* +élatéridé/S* +élavée/F* +elbeuf/S* +elbot/S* +eldorado/S* +e-learning/S* +éléatique/S* +éléatisme/S* +élection/S* +élective/F* +électivement/D'Q' +électivité/S* +électorale/W* +électoralement/D'Q' +électoralisme/S* +électoraliste/S* +électorat/S* +électret/S* +électrice/F* +électricienne/F* +électricité/S* +électrification/S* +électrifier/a2p+ +électrique/S* +électriquement/D'Q' +électrisable/S* +électrisante/F* +électrisation/S* +électriser/a2p+ +électro/S* +électroacousticienne/F* +électro-acousticienne/F* +électroacoustique/S* +électro-acoustique/S* +électroacoustique/S* +électro-acoustique/S* +électroaimant/S* +électro-aimant/S* +électrobiologie/S* +électrocardiogramme/S* +électrocardiographe/S* +électrocardiographie/S* +électrocardiographique/S* +électrocardioscope/S* +électrocautère/S* +électrochimie/S* +électrochimique/S* +électrochoc/S* +électrocinétique/S* +électrocinétique/S* +électrocoagulation/S* +électrocuter/a4p+ +électrocution/S* +électrocyclique/S* +électrode/S* +électrodéposition/S* +électrodiagnostic/S* +électrodialyse/S* +électrodialyseur/S* +électrodynamique/S* +électrodynamique/S* +électrodynamomètre/S* +électroencéphalogramme/S* +électro-encéphalogramme/S* +électroencéphalographe/S* +électro-encéphalographe/S* +électroencéphalographie/S* +électro-encéphalographie/S* +électroérosion/S* +électro-érosion/S* +électrofaible/S* +électro-faible/S* +électrofuge/S* +électrofunk/S* +électrogène/S* +électrokinésie/S* +électrologie/S* +électroluminescence/S* +électroluminescente/F* +électrolysable/S* +électrolyse/S* +électrolyser/a2p+ +électrolyseur/S* +électrolyte/S* +électrolytique/S* +électromagnétique/S* +électromagnétiquement/D'Q' +électromagnétisme/S* +électromécanicienne/F* +électromécanique/S* +électroménager/S* +électroménagère/F* +électroménagiste/S* +électrométallurgie/S* +électromètre/S* +électrométrie/S* +électrométrique/S* +électromobiliste/S* +électromobilité/S* +électromotrice/F* +électromyogramme/S* +électromyographie/S* +électron/S* +électronarcose/S* +électronégative/F* +électronégativité/S* +électronicienne/F* +électronique/S* +électronique/S* +électroniquement/D'Q' +électronisation/S* +électroniser/a2p+ +électronucléaire/S* +électronucléaire/S* +électronvolt/Um +électro-oculogramme/S* +électro-oculographie/S* +électro-optique/S* +électro-osmose/S* +électro-osmotique/S* +électrophile/S* +électrophile/S* +électrophone/S* +électrophorèse/S* +électrophorétique/S* +électrophotographie/S* +électrophotographique/S* +électrophysiologie/S* +électrophysiologique/S* +électroplaque/S* +électropneumatique/S* +électropneumatique/S* +électroporation/S* +électroportative/F* +électropositive/F* +électropuncture/S* +électroradiologie/S* +électroradiologiste/S* +électroscope/S* +électrosensibilité/S* +électrosensible/S* +électrostatique/S* +électrostimulation/S* +électrostriction/S* +électrotechnicienne/F* +électrotechnique/S* +électrotechnique/S* +électrothérapie/S* +électrothermie/S* +électrothermique/S* +électrovalence/S* +électrovanne/S* +électrum/S* +électuaire/S* +électuaire/S* +élégamment/D'Q' +élégance/S* +élégante/F* +élégiaque/S* +élégie/S* +élégir/f2p+ +éléis/L'D'Q' +élément/S* +élémentaire/S* +élémentairement/D'Q' +éléphante/F* +éléphanteau/X* +éléphantesque/S* +éléphantiasique/S* +éléphantiasis/L'D'Q' +éléphantine/F* +élevage/S* +élévation/S* +élévatoire/S* +élévatrice/F* +élève/S* +élèvement/S* +élever/b4p+ +éleveuse/F* +élevon/S* +élevure/S* +elfe/S* +elfique/S* +élicitation/S* +éliciteur/S* +élicitine/S* +élicitrice/F* +élider/a4p+ +éligibilité/S* +éligible/S* +élimage/S* +élimer/a2p+ +éliminable/S* +élimination/S* +éliminatoire/S* +éliminatrice/F* +éliminer/a4p+ +élingue/S* +élinguer/a2p+ +élingueuse/F* +élire/yB +élisabéthaine/F* +élision/S* +élitaire/S* +élite/S* +élitisme/S* +élitiste/S* +élixir/S* +elle/D'Q'Q* +elle-même/D'Q' +elles/D'Q'Q* +elles-mêmes/D'Q' +ellipse/S* +ellipsoïdale/W* +ellipsoïde/S* +ellipsoïde/S* +ellipticité/S* +elliptique/S* +elliptiquement/D'Q' +elliptocytose/S* +élocution/S* +élodée/S* +éloge/S* +élogieuse/W* +élogieusement/D'Q' +éloignement/S* +éloigner/a4p+ +élongation/S* +élonger/a2p+ +éloquemment/D'Q' +éloquence/S* +éloquente/F* +élucidable/S* +élucidation/S* +élucider/a2p+ +élucubration/S* +élucubrer/a2p+ +éluder/a2p+ +élue/F* +éluer/a2p+ +élusive/F* +élution/S* +élutriateur/S* +élutriation/S* +éluviale/W* +éluvion/S* +élyme/S* +élyséenne/F* +élytre/S* +elzévir/S* +elzévirienne/F* +émaciation/S* +émacier/a4p+ +e-mail/S* +émail/X* +émaillage/S* +émailler/a2p+ +émaillerie/S* +émailleuse/F* +émaillure/S* +émanation/S* +émanche/S* +émanchure/S* +émancipation/S* +émancipatoire/S* +émancipatrice/F* +émanciper/a4p+ +émanée/F* +émaner/a1p. +émargement/S* +émarger/a2p+ +émasculation/S* +émasculer/a2p+ +embabouiner/a2p+ +embâcle/S* +emballage/S* +emballagiste/S* +emballante/F* +emballement/S* +emballer/a4p+ +emballeuse/F* +emballotter/a2p+ +embaluchonner/a2p+ +embarbouiller/a4p+ +embarcadère/S* +embarcation/S* +embardée/S* +embarder/a4p+ +embardoufler/a4p+ +embargo/S* +embarquement/S* +embarquer/a4p+ +embarras/L'D'Q' +embarrassante/F* +embarrassée/F* +embarrasser/a4p+ +embarrer/a4p+ +embase/S* +embasement/S* +embastillement/S* +embastiller/a2p+ +embastionner/a2p+ +embatre/uA +embattage/S* +embattre/uA +embauchage/S* +embauche/S* +embauchée/F* +embaucher/a4p+ +embaucheuse/F* +embauchoir/S* +embaumement/S* +embaumer/a2p+ +embaumeuse/F* +embecquer/a2p+ +embecqueter +embéguiner/a3p+ +embellie/S* +embellir/f4p+ +embellissement/S* +emberlificoter/a4p+ +emberlificoteuse/F* +embêtante/F* +embêtement/S* +embêter/a4p+ +embidonner/a2p+ +embiellage/S* +embioptère/S* +embistrouiller +emblavage/S* +emblavement/S* +emblaver/a2p+ +emblavure/S* +emblée/D' +emblématique/S* +emblématiquement/D'Q' +emblème/S* +embobeliner/a2p+ +embobinage/S* +embobiner/a2p+ +embobineuse/F* +emboire/xD +emboîtable/S* +emboîtage/S* +emboîtement/S* +emboîter/a4p+ +emboîture/S* +embole/S* +embolie/S* +embolique/S* +embolisation/S* +embolisme/S* +embonpoint/S* +embossage/S* +embosser/a4p+ +embosseuse/F* +embossure/S* +embotteler/d2p+ +emboucaner/a4p+ +embouche/S* +emboucher/a2p+ +embouchoir/S* +embouchure/S* +embouer/a2p+ +embouquement/S* +embouquer/a2p+ +embourbement/S* +embourber/a4p+ +embourgeoisement/S* +embourgeoiser/a4p+ +embourrer/a4p+ +embourrure/S* +embout/S* +embouteillage/S* +embouteiller/a2p+ +embouteilleuse/F* +embouter/a2p+ +emboutir/f2p+ +emboutissage/S* +emboutisseuse/F* +emboutissoir/S* +embranchement/S* +embrancher/a4p+ +embraquer/a2p+ +embrasement/S* +embraser/a4p+ +embrassade/S* +embrasse/S* +embrassement/S* +embrasser/a4p+ +embrasseuse/F* +embrasure/S* +embratteler/d4p+ +embrayage/S* +embrayer/a2p+ +embrayeur/S* +embreler/d2p+ +embrèvement/S* +embrever/b2p+ +embrigadée/F* +embrigadement/S* +embrigader/a4p+ +embringuer/a4p+ +embrocation/S* +embrochement/S* +embrocher/a4p+ +embronchement/S* +embroncher/a2p+ +embrouillage/S* +embrouillamini/S* +embrouille/S* +embrouillement/S* +embrouiller/a4p+ +embrouilleuse/F* +embroussaillement/S* +embroussailler/a4p+ +embrumer/a2p+ +embrun/S* +embrunir/f2p+ +embryoblaste/S* +embryogenèse/S* +embryogénie/S* +embryogénique/S* +embryologie/S* +embryologique/S* +embryologiste/S* +embryon/S* +embryonnaire/S* +embryonnée/F* +embryopathie/S* +embryophagie/S* +embryotome/S* +embryotomie/S* +embu/S* +embûche/S* +embue/F* +embuer/a4p+ +embuscade/S* +embusquée/F* +embusquer/a4p+ +émécher/c2p+ +éméraldine/S* +émeraude/L'D'Q' +émeraude/S* +émergée/F* +émergement/S* +émergence/S* +émergente/F* +émerger/a1p. +émeri/S* +émerillon/S* +émerillonner/a2p+ +émeriser/a2p+ +éméritat/S* +émérite/S* +émersion/S* +émerveillement/S* +émerveiller/a4p+ +émétine/S* +émétique/S* +émétique/S* +émettre/vA +émettrice/F* +émeu/S* +émeute/S* +émeutière/F* +émier/a2p+ +émiettement/S* +émietter/a4p+ +émigrante/F* +émigration/S* +émigrée/F* +émigrer/a1p. +éminatie/F* +émincer/a2p+ +éminemment/D'Q' +éminence/S* +éminente/F* +éminentissime/S* +émir/S* +émirat/S* +émiratie/F* +émissaire/S* +émission/S* +émissive/F* +émissivité/S* +émissole/S* +émittance/S* +emmagasinage/S* +emmagasinement/S* +emmagasiner/a2p+ +emmaillotage/S* +emmaillotement/S* +emmailloter/a4p+ +emmanchée/F* +emmanchement/S* +emmancher/a4p+ +emmanchure/S* +emmanteler/d4p+ +emmarger/a2p+ +emmêlement/S* +emmêler/a4p+ +emménagement/S* +emménager/a2p+ +emménagogue/S* +emménagogue/S* +emmener/b2p+ +emmental/S* +emmenthal/S* +emmerdante/F* +emmerde/S* +emmerdement/S* +emmerder/a4p+ +emmerderesse/S* +emmerdeuse/F* +emmétrer/c2p+ +emmétrope/S* +emmétropie/S* +emmieller/a2p+ +emmitonner/a2p+ +emmitoufler/a4p+ +emmortaiser/a2p+ +emmotter/a2p+ +emmouscailler/a2p+ +emmurer/a4p+ +emmuseler/d4p+ +émoi/S* +émoji/S* +émolliente/F* +émolument/S* +émonctoire/S* +émondage/S* +émondement/S* +émonder/a2p+ +émondeuse/F* +émondoir/S* +émorfilage/S* +émorfiler/a2p+ +émoticône/S* +émotion/S* +émotionnable/S* +émotionnante/F* +émotionnelle/F* +émotionnellement/D'Q' +émotionner/a4p+ +émotive/F* +émotivement/D'Q' +émotivité/S* +émottage/S* +émottement/S* +émotter/a2p+ +émotteuse/F* +émou/S* +émoucher/a2p+ +émouchet/S* +émoucheter/d2p+ +émouchette/S* +émouchoir/S* +émoudre/xP +émoulage/S* +émouleur/S* +émoussement/S* +émousser/a4p+ +émoustillante/F* +émoustillement/S* +émoustiller/a4p+ +émouvante/F* +émouvoir/pH +empaffée/F* +empaffer/a2p+ +empagement/S* +empaillage/S* +empaillée/F* +empaillement/S* +empailler/a2p+ +empailleuse/F* +empalée/F* +empalement/S* +empaler/a4p+ +empaleuse/F* +empalmage/S* +empalmer/a2p+ +empan/S* +empanacher/a2p+ +empannage/S* +empanner/a2p+ +empannon/S* +empapaouter/a2p+ +empapilloter/a2p+ +empaquetage/S* +empaqueter/d2p+ +empaqueteuse/F* +emparer/a3p+ +emparquer/a2p+ +empâtage/S* +empâtement/S* +empâter/a4p+ +empathe/S* +empathie/S* +empathique/S* +empattement/S* +empatter/a2p+ +empaumer/a2p+ +empaumure/S* +empêchement/S* +empêcher/a4p+ +empêcheuse/F* +empéguer/c4p+ +empeigne/S* +empeigner/a2p+ +empêner/a2p+ +empennage/S* +empenne/S* +empenneler/d2p+ +empenner/a2p+ +empercher/a2p+ +empereur/S* +emperler/a2p+ +emperruquer/a4p+ +empesage/S* +empeser/b2p+ +empester/a2p+ +empêtrer/a4p+ +emphase/S* +emphatique/S* +emphatiquement/D'Q' +emphysémateuse/W* +emphysème/S* +emphytéose/S* +emphytéote/S* +emphytéotique/S* +empiècement/S* +empiéger/c2p+ +empierrage/S* +empierrement/S* +empierrer/a2p+ +empiétement/S* +empiéter/c1p. +empiffrer/a3p+ +empilable/S* +empilade/S* +empilage/S* +empile/S* +empilement/S* +empiler/a4p+ +empileuse/F* +empire/S* +empirer/a4p+ +empiriocriticisme/S* +empirique/S* +empiriquement/D'Q' +empirisme/S* +empiriste/S* +emplacement/S* +emplafonner/a4p+ +emplanture/S* +emplâtre/S* +emplâtrer/a2p+ +emplette/S* +emplir/f4p+ +emplissage/S* +emploi/S* +employabilité/S* +employable/S* +employée/F* +employer/a4p+ +employeuse/F* +emplumer/a2p+ +empocher/a2p+ +empoignade/S* +empoignante/F* +empoigne/D' +empoignement/S* +empoigner/a4p+ +empointure/S* +empois/L'D'Q' +empoisonnante/F* +empoisonnement/S* +empoisonner/a4p+ +empoisonneuse/F* +empoisser/a2p+ +empoissonnement/S* +empoissonner/a2p+ +emporium/I* +emport/S* +emportement/S* +emporte-pièce/L'D'Q' +emporter/a4p+ +empotage/S* +empotée/F* +empotement/S* +empoter/a2p+ +empourprer/a4p+ +empoussiérage/S* +empoussièrement/S* +empoussiérer/c4p+ +empreindre/wB +empreinte/S* +empressement/S* +empresser/a3p+ +emprésurage/S* +emprésurer/a2p+ +emprise/S* +emprisonnement/S* +emprisonner/a4p+ +emprunt/S* +empruntable/S* +emprunter/a2p+ +emprunteuse/F* +empuantir/f2p+ +empuantissement/S* +empuse/S* +empyème/S* +empyrée/S* +empyreumatique/S* +empyreume/S* +émulation/S* +émulatrice/F* +émule/S* +émuler/a2p+ +émulseur/S* +émulsifiable/S* +émulsifiante/F* +émulsifier/a2p+ +émulsine/S* +émulsion/S* +émulsionnable/S* +émulsionner/a2p+ +émulsive/F* +en/Q'Q*Qjd' +en/Q'Q*Qjn'd'j'l'm't's'c' +enamourer/a3p+ +énamourer/a3p+ +énanthème/S* +énantiomère/S* +énantiomérie/S* +énantiomorphe/S* +énantiotrope/S* +énarchie/S* +énarchique/S* +énarque/S* +énarquienne/F* +énarthrose/S* +en-avant/L'D'Q' +en-but/L'D'Q' +en-but/S* +encabanage/S* +encabaner/a2p+ +encablure/S* +encâblure/S* +encadrante/F* +encadré/S* +encadrement/S* +encadrer/a4p+ +encadreuse/F* +encadrure/S* +encagement/S* +encager/a2p+ +encagouler/a4p+ +encaissable/S* +encaissage/S* +encaissante/F* +encaisse/S* +encaissement/S* +encaisser/a2p+ +encaisseuse/F* +encalminée/F* +encan/S* +encanaillement/S* +encanailler/a4p+ +encaper +encapsidation/S* +encapsulage/S* +encapsulation/S* +encapsulement/S* +encapsuler/a2p+ +encapuchonnée/F* +encapuchonner/a4p+ +encaquement/S* +encaquer/a2p+ +encarrer +encart/S* +encartage/S* +encartement/S* +encarter/a2p+ +encarteuse/S* +encartonner/a2p+ +encartoucher/a2p+ +encartoucheuse/F* +en-cas/L'D'Q' +encaserner/a2p+ +encasteler/b3p+ +encastelure/S* +encastrable/S* +encastrement/S* +encastrer/a4p+ +encaustiquage/S* +encaustique/S* +encaustique/S* +encaustiquer/a2p+ +encavage/S* +encavement/S* +encaver/a2p+ +encaveuse/F* +enceindre/wB +enceinte/S* +enceinter/a2p+ +encellulement/S* +encelluler/a2p+ +encens/L'D'Q' +encensement/S* +encenser/a4p+ +encenseuse/F* +encensoir/S* +encépagement/S* +encéphalalgie/S* +encéphale/S* +encéphalique/S* +encéphalisation/S* +encéphalite/S* +encéphalogramme/S* +encéphalographie/S* +encéphalomyélite/S* +encéphalo-myélite/S* +encéphalopathie/S* +encerclement/S* +encercler/a2p+ +enchaînée/F* +enchaînement/S* +enchaîner/a4p+ +enchanteler +enchantement/S* +enchanter/a4p+ +enchanteresse/F* +enchaperonner/a2p+ +encharner/a2p+ +enchâssement/S* +enchâsser/a4p+ +enchâssure/S* +enchatonnement/S* +enchatonner/a2p+ +enchausser/a2p+ +enchemisage/S* +enchemiser/a2p+ +enchère/S* +enchérir/f2p+ +enchérissement/S* +enchérisseuse/F* +enchetarder +enchevalement/S* +enchevaucher/a2p+ +enchevauchure/S* +enchevêtrement/S* +enchevêtrer/a4p+ +enchevêtrure/S* +enchifrènement/S* +enchifrener/b2p+ +enchilada/S* +enchtiber +enchtourber +encirer/a2p+ +enclave/S* +enclavement/S* +enclaver/a4p+ +enclenchement/S* +enclencher/a4p+ +enclencheur/S* +encline/F* +encliquetable/S* +encliquetage/S* +encliqueter/d2p+ +enclise/S* +enclitique/S* +encloîtrer/a2p+ +encloquer +enclore/rA +enclos/L'D'Q' +enclosure/S* +enclôture/S* +enclouage/S* +enclouer/a2p+ +enclouure/S* +enclume/S* +encoche/S* +encochement/S* +encocher/a2p+ +encodage/S* +encoder/a2p+ +encodeuse/F* +encoffrer/a2p+ +encoignure/S* +encolérer/a4p+ +encollage/S* +encoller/a2p+ +encolleuse/F* +encolure/S* +encombrante/F* +encombre/S* +encombrement/S* +encombrer/a4p+ +encontre/L' +encoprésie/S* +encor +encorbellement/S* +encordement/S* +encorder/a4p+ +encore/D'Q' +encorner/a2p+ +encornet/S* +encornure/S* +encouble/S* +encourageante/F* +encouragement/S* +encourager/a4p+ +encourir/iE +en-cours/L'D'Q' +encrage/S* +encrassage/S* +encrassement/S* +encrasser/a4p+ +encravatée/F* +encre/S* +encrêper/a2p+ +encrer/a2p+ +encreur/S* +encrier/S* +encrine/S* +encrister +encrouée/F* +encroumer +encroûtante/F* +encroûtement/S* +encroûter/a4p+ +encryptage/S* +encrypter/a2p+ +enculade/S* +enculage/S* +enculée/F* +enculer/a2p+ +enculerie/S* +enculeuse/F* +encuvage/S* +encuvement/S* +encuver/a2p+ +encyclique/S* +encyclique/S* +encyclopédie/S* +encyclopédique/S* +encyclopédisme/S* +encyclopédiste/S* +endauber/a2p+ +endéans +en-deça/S* +endémicité/S* +endémie/S* +endémique/S* +endémiquement/L'D'Q' +endémisme/S* +endémo-épidémie/S* +endémo-épidémique/S* +endenter/a2p+ +endettée/F* +endettement/S* +endetter/a4p+ +endeuiller/a2p+ +endêvée/F* +endêver +endiabler/a2p+ +endiamantée/F* +endigage/S* +endiguement/S* +endiguer/a2p+ +endimanchement/S* +endimancher/a4p+ +endive/S* +endivière/F* +endivisionner/a2p+ +endoblaste/S* +endocarde/S* +endocardite/S* +endocarpe/S* +endocrânienne/F* +endocrine/S* +endocrinienne/F* +endocrinologie/S* +endocrinologique/S* +endocrinologiste/S* +endocrinologue/S* +endoctrinée/F* +endoctrinement/S* +endoctriner/a2p+ +endocytose/S* +endoderme/S* +endodermique/S* +endodontie/S* +endoénergétique/S* +endogame/S* +endogamie/S* +endogamique/S* +endogée/F* +endogène/S* +endogénéité/S* +endogroupe/S* +endolocalisation/S* +endolorir/f2p+ +endolorissement/S* +endolymphe/S* +endomètre/S* +endométriose/S* +endométrite/S* +endommagement/S* +endommager/a2p+ +endomorphine/S* +endomorphisme/S* +endonymie/S* +endoparasite/S* +endophasie/S* +endophtalmie/S* +endoplasme/S* +endoplasmique/S* +endopodite/S* +endoréique/S* +endoréisme/S* +endormante/F* +endormeuse/F* +endormir/iJ +endormissement/S* +endorphine/S* +endos/L'D'Q' +endoscope/S* +endoscopie/S* +endoscopique/S* +endosmomètre/S* +endosmose/S* +endosperme/S* +endospore/S* +endosquelette/S* +endossable/S* +endossage/S* +endossataire/S* +endossement/S* +endosser/a2p+ +endosseur/S* +endossure/S* +endosymbiose/S* +endothéliale/W* +endothéliome/S* +endothélium/S* +endotherme/S* +endothermicité/S* +endothermicité/S* +endothermie/S* +endothermique/S* +endotoxine/S* +endroit/S* +enduction/S* +enductrice/F* +enduire/yM +enduisage/S* +enduiseuse/F* +enduit/S* +endurable/S* +endurance/S* +endurante/F* +endurcir/f4p+ +endurcissement/S* +endurer/a2p+ +enduro/S* +endymion/S* +énergéticienne/F* +énergétique/S* +énergétiquement/D'Q' +énergétisme/S* +énergétiste/S* +énergie/S* +énergique/S* +énergiquement/D'Q' +énergisant/S* +énergisante/F* +énergivore/S* +énergumène/S* +énervante/F* +énervation/S* +énervée/F* +énervement/S* +énerver/a4p+ +enfaîteau/X* +enfaîtement/S* +enfaîter/a2p+ +enfance/S* +enfançonne/F* +enfant/S* +enfantement/S* +enfanter/a2p+ +enfantillage/S* +enfantine/F* +enfantinement/D'Q' +enfarger/a4p+ +enfariner/a2p+ +enfer/S* +enfermement/S* +enfermer/a4p+ +enferrer/a4p+ +enfeu/S* +enficelée/F* +enficeler +enfichable/S* +enficher/a2p+ +enfieller/a2p+ +enfièvrement/S* +enfiévrer/c4p+ +enfilade/S* +enfilage/S* +enfiler/a4p+ +enfileuse/F* +enfin/D'Q' +enfirouaper/a2p+ +enflammement/S* +enflammer/a4p+ +enflécher/c2p+ +enfléchure/S* +enflement/S* +enfler/a4p+ +enfleurage/S* +enfleurer/a2p+ +enflure/S* +enfoirée/F* +enfoirer +enfonçage/S* +enfoncement/S* +enfoncer/a4p+ +enfonceuse/F* +enfonçure/S* +enforcir/f1p. +enfouiller +enfouir/f4p+ +enfouissement/S* +enfouisseur/S* +enfourailler +enfourchement/S* +enfourcher/a2p+ +enfourchure/S* +enfournage/S* +enfournement/S* +enfourner/a4p+ +enfourneuse/F* +enfreindre/wB +enfroquée/F* +enfuir/iO +enfumade/S* +enfumage/S* +enfumer/a4p+ +enfûtage/S* +enfutailler/a2p+ +enfûter/a2p+ +engageante/F* +engagée/F* +engagement/S* +engager/a4p+ +engainante/F* +engainer/a2p+ +engamer/a2p+ +engargousser/a2p+ +engaver/a2p+ +engazonnement/S* +engazonner/a2p+ +engazonneuse/F* +engeance/S* +engelure/S* +engendrable/S* +engendrement/S* +engendrer/a2p+ +engendreuse/F* +engeôler/a2p+ +engerbage/S* +engerber/a2p+ +engin/S* +engineering/S* +englacer/a2p+ +englobante/F* +englober/a2p+ +engloutir/f4p+ +engloutissement/S* +engluage/S* +engluement/S* +engluer/a4p+ +engobage/S* +engobe/S* +engober/a2p+ +engommage/S* +engommer/a2p+ +engoncer/a2p+ +engorgement/S* +engorger/a4p+ +engouement/S* +engouer/a3p+ +engouffrement/S* +engouffrer/a4p+ +engouiller/a3p+ +engouler/a2p+ +engoulevent/S* +engourdir/f4p+ +engourdissement/S* +engrain/S* +engrainer/a4p+ +engrais/L'D'Q' +engraissage/S* +engraissement/S* +engraisser/a4p+ +engraisseuse/F* +engramme/S* +engrangement/S* +engranger/a2p+ +engraver/a2p+ +engrêlée/F* +engrêlure/S* +engrenage/S* +engrènement/S* +engrener/b4p+ +engreneuse/F* +engrenure/S* +engrois/L'D'Q' +engrosser/a2p+ +engrumeler/d4p+ +engueulade/S* +engueuler/a4p+ +enguichée/F* +enguichure/S* +enguirlander/a2p+ +enhardir/f4p+ +enharmonie/S* +enharmonique/S* +enharmoniquement/D'Q' +enharnacher/a2p+ +enherbement/S* +enherber/a2p+ +énieller/a2p+ +énième/S* +énigmatique/S* +énigmatiquement/D'Q' +énigme/S* +enivrante/F* +enivrement/S* +enivrer/a4p+ +enjambée/S* +enjambement/S* +enjamber/a2p+ +enjambeuse/F* +enjaveler/d2p+ +enjeu/X* +enjoindre/wB +enjôlement/S* +enjôler/a2p+ +enjôleuse/F* +enjolivement/S* +enjoliver/a4p+ +enjoliveur/S* +enjolivure/S* +enjoncer/a2p+ +enjouement/S* +enjouer/a2p+ +enjuguer/a2p+ +enjuiver/a4p+ +enjuponner/a2p+ +enképhaline/S* +enkystement/S* +enkyster/a3p+ +enlacement/S* +enlacer/a4p+ +enlaçure/S* +enlaidir/f4p+ +enlaidissement/S* +enlevage/S* +enlèvement/S* +enlever/b4p+ +enleveuse/F* +enlevure/S* +enliasser/a2p+ +enlier/a2p+ +enligner/a2p+ +enlisement/S* +enliser/a4p+ +enluminer/a2p+ +enlumineuse/F* +enluminure/S* +ennéade/S* +ennéagonale/W* +ennéagone/S* +ennealogie/S* +enneigement/S* +enneiger/a2p+ +ennemie/F* +ennoblir/f2p+ +ennoblissement/S* +ennoiement/S* +ennoyage/S* +ennoyer/a2p+ +ennuager/a4p+ +ennui/S* +ennuyante/F* +ennuyer/a4p+ +ennuyeuse/W* +ennuyeusement/D'Q' +énol/S* +énolate/S* +énonçable/S* +énoncé/S* +énoncer/a4p+ +énonciation/S* +énonciative/F* +énonciatrice/F* +énophtalmie/S* +enorgueillir/f4p+ +énorme/S* +énormément/D'Q' +énormité/S* +énostose/S* +énouer/a2p+ +enquérir/iM +enquerre +enquête/S* +enquêtée/F* +enquêter/a1p. +enquêteuse/F* +enquêtrice/S* +enquiller/a1p. +enquiquinante/F* +enquiquinement/S* +enquiquiner/a4p+ +enquiquineuse/F* +enracinement/S* +enraciner/a4p+ +enrageante/F* +enragée/F* +enragement/S* +enrager/a1p. +enraidissement/S* +enraiement/S* +enrailler/a2p+ +enrayage/S* +enrayement/S* +enrayer/a4p+ +enrayoir/S* +enrayure/S* +enrégimentement/S* +enrégimenter/a2p+ +enregistrable/S* +enregistrement/S* +enregistrer/a4p+ +enregistreuse/F* +enrênement/S* +enrêner/a2p+ +enrésinement/S* +enrésiner/a2p+ +enrhumée/F* +enrhumer/a4p+ +enrhuner +enrichir/f4p+ +enrichissante/F* +enrichissement/S* +enrobage/S* +enrobement/S* +enrober/a4p+ +enrobeuse/S* +enrochement/S* +enrocher/a2p+ +enrôlement/S* +enrôler/a4p+ +enrôleur/S* +enrouement/S* +enrouer/a4p+ +enrouiller/a3p+ +enroulable/S* +enroulage/S* +enroulement/S* +enrouler/a4p+ +enrouleuse/F* +enrubannage/S* +enrubanner/a4p+ +enrubanneuse/S* +enrucher/a2p+ +ensablement/S* +ensabler/a4p+ +ensaboter/a2p+ +ensachage/S* +ensacher/a2p+ +ensacheuse/F* +ensaisinement/S* +ensaisiner/a2p+ +ensanglantement/S* +ensanglanter/a2p+ +ensauvagement/S* +ensauvager/a2p+ +ensauver/a3p+ +enseignable/S* +enseignant-chercheur/L'D'Q' +enseignante/F* +enseignants-chercheurs/D'Q' +enseigne/S* +enseignement/S* +enseigner/a4p+ +enseigniste/S* +ensellée/F* +ensellement/S* +ensellure/S* +ensemble/D'Q' +ensemble/S* +ensemblière/F* +ensembliste/S* +ensemencement/S* +ensemencer/a2p+ +enserrer/a2p+ +enseuillement/S* +ensevelir/f4p+ +ensevelissement/S* +ensevelisseuse/F* +ensiforme/S* +ensilage/S* +ensiler/a2p+ +ensileuse/F* +ensimer/a2p+ +en-soi/L'D'Q' +ensoleillement/S* +ensoleiller/a2p+ +ensommeillée/F* +ensommeillement/S* +ensorcelante/F* +ensorceler/d2p+ +ensorceleuse/F* +ensorcellement/S* +ensoufrer/a2p+ +ensouillement/S* +ensouple/S* +ensoutaner/a2p+ +enstatite/S* +enstérer/c2p+ +ensuite/D'Q' +ensuivre/xR +ensuquer/a2p+ +entablement/S* +entabler/a4p+ +entablure/S* +entacher/a2p+ +entaillage/S* +entaille/S* +entailler/a4p+ +entame/S* +entamer/a2p+ +entaquer/a2p+ +entartage/S* +entarter/a2p+ +entarteuse/F* +entartrage/S* +entartrement/S* +entartrer/a4p+ +entassement/S* +entasser/a4p+ +entéléchie/S* +entendable/S* +entendante/F* +entendement/S* +entendeur/S* +entendre/tA +enténébrer/c4p+ +entente/S* +enter/a2p+ +entérale/W* +entéralgie/S* +entérinement/S* +entériner/a2p+ +entérique/S* +entérite/S* +entérobactérie/S* +entérocolite/S* +entérocoque/S* +entérokinase/S* +entérologie/S* +entéropathie/S* +entéropneuste/S* +entéro-rénale/W* +entérostomie/S* +entérotoxine/S* +entérovaccin/S* +entérovirus/L'D'Q' +enterrage/S* +enterrement/S* +enterrer/a4p+ +entêtante/F* +entête/S* +en-tête/S* +entêtement/S* +entêter/a4p+ +enthalpie/S* +enthalpique/S* +enthésopathie/S* +enthousiasmante/F* +enthousiasme/S* +enthousiasmer/a4p+ +enthousiaste/S* +enthymème/S* +entichement/S* +enticher/a3p+ +entière/F* +entièrement/D'Q' +entièreté/S* +entifler/a4p+ +entité/S* +entoilage/S* +entoiler/a2p+ +entoir/S* +entôlage/S* +entôler/a2p+ +entôleuse/F* +entolome/S* +entomogame/S* +entomologie/S* +entomologique/S* +entomologiste/S* +entomophage/S* +entomophagie/S* +entomophile/S* +entomophilie/S* +entomostracé/S* +entonnage/S* +entonnaison/S* +entonnement/S* +entonner/a2p+ +entonnoir/S* +entoprocte/S* +entorse/S* +entorser/a1p. +entortillage/S* +entortillement/S* +entortiller/a4p+ +entour/S* +entourage/S* +entourer/a4p+ +entourloupe/S* +entourlouper/a2p+ +entourloupette/S* +entournure/S* +entraccorder/a6p+ +entraccuser/a6p+ +entracte/S* +entradmirer/a6p+ +entraide/S* +entraider/a6p+ +entrailles/D'Q' +entr'aimer/a6p+ +entrain/S* +entraînable/S* +entraînante/F* +entraînement/S* +entraîner/a4p+ +entraîneuse/F* +entrait/S* +entrante/F* +entrapercevoir/pK +entr'apercevoir/pK +entrave/S* +entraver/a2p+ +entravon/S* +entraxe/S* +entre/D'Q'Qj +entre-axes/L'D'Q' +entrebâillement/S* +entrebâiller/a4p+ +entrebâilleur/S* +entre-bande/S* +entrebattre/uD +entrechat/S* +entrechoc/S* +entrechoquement/S* +entrechoquer/a4p+ +entrecolonnement/S* +entrecôte/S* +entrecoupement/S* +entrecouper/a4p+ +entrecroisement/S* +entrecroiser/a4p+ +entrecuisse/S* +entre-déchirer/a6p+ +entre-détruire/yN +entre-deux/L'D'Q' +entre-deux-guerres/L'D' +entre-dévorer/a6p+ +entrée/S* +entre-égorger/a6p+ +entrée-sortie/L'D'Q' +entrées-sorties +entrefaite/S* +entrefaites +entrefer/S* +entrefilet/S* +entre-frapper/a6p+ +entregent/S* +entr'égorger/a6p+ +entre-haïr/fB +entre-heurter/a6p+ +entrejambe/S* +entre-jambe/S* +entrelacement/S* +entrelacer/a4p+ +entrelacs/L'D'Q' +entrelarder/a2p+ +entre-ligne/S* +entre-louer/a6p+ +entre-manger/a6p+ +entremêlement/S* +entremêler/a4p+ +entremets/L'D'Q' +entremetteuse/F* +entremettre/vC +entremise/S* +entre-nerf/S* +entre-nœud/S* +entre-nuire/yX +entrepont/S* +entreposage/S* +entreposer/a2p+ +entreposeur/S* +entrepositaire/S* +entrepôt/S* +entreprenante/F* +entreprenariat/S* +entreprenaute/S* +entreprendre/tF +entrepreneure/S* +entrepreneuriale/W* +entrepreneuriat/S* +entrepreneuse/F* +entreprise/S* +entrer/a2p+ +entre-rail/S* +entre-regarder/a6p+ +entre-soi/L'D'Q' +entresol/S* +entretaille/S* +entretailler/a3p+ +entre-temps/D'Q' +entreteneuse/F* +entretenir/i1q+ +entretien/S* +entre-tisser/a4p+ +entretoile/S* +entretoise/S* +entretoisement/S* +entretoiser/a2p+ +entre-tuer/a6p+ +entrevoie/S* +entre-voie/S* +entrevoir/pF +entrevous/L'D'Q' +entrevoûter/a2p+ +entrevue/S* +entr'hiverner +entrisme/S* +entropie/S* +entropion/S* +entropique/S* +entroque/S* +entrouvrir/iC +entr'ouvrir/iC +entrure/S* +entuber/a2p+ +enturbanner/a4p+ +enture/S* +énucléation/S* +énucléer/a2p+ +énumérabilité/S* +énumérable/S* +énumération/S* +énumérative/F* +énumérer/c2p+ +énurésie/S* +énurétique/S* +env +envahir/f2p+ +envahissante/F* +envahissement/S* +envahisseuse/F* +envasement/S* +envaser/a4p+ +enveloppante/F* +enveloppe/S* +enveloppement/S* +envelopper/a4p+ +enveloppeuse/F* +envenimation/S* +envenimement/S* +envenimer/a4p+ +enverger/a2p+ +enverguer/a2p+ +envergure/S* +envers/D'Q' +envers/L' +envi/L' +enviable/S* +enviander/a2p+ +envidage/S* +envider/a2p+ +envie/S* +envieillir/f4p+ +envier/a2p+ +envieuse/W* +envieusement/D'Q' +envinée/F* +environ/D'Q' +environ/S* +environnante/F* +environnement/S* +environnementale/W* +environnementalement/D'Q' +environnementalisme/S* +environnementaliste/S* +environner/a4p+ +envisageable/S* +envisager/a2p+ +envoi/S* +envoiler/a3p+ +envol/S* +envolée/S* +envoler/a3p+ +envoûtante/F* +envoûtée/F* +envoûtement/S* +envoûter/a2p+ +envoûteuse/F* +envoyée/F* +envoyer/aD +envoyeuse/F* +enzootie/S* +enzootique/S* +enzymatique/S* +enzyme/S* +enzymologie/S* +enzymopathie/S* +éocène/S* +éocène/S* +éolienne/F* +éolipyle/S* +éolithe/S* +éon/S* +éosine/S* +éosinophile/S* +éosinophilie/S* +épacte/S* +épagneule/F* +épagomène/S* +épair/S* +épaisse/F* +épaisseur/S* +épaissir/f4p+ +épaississante/F* +épaississement/S* +épaississeur/S* +épaler/a2p+ +épamprage/S* +épamprement/S* +épamprer/a2p+ +épanadiplose/S* +épanchement/S* +épancher/a4p+ +épandage/S* +épandeuse/F* +épandre/tA +épannelage/S* +épanneler/d2p+ +épanner/a2p+ +épanouir/f4p+ +épanouissante/F* +épanouissement/S* +épar/S* +éparchie/S* +épargnante/F* +épargne/S* +épargner/a4p+ +épargne-temps/L'D'Q' +éparpillement/S* +éparpiller/a4p+ +éparque/S* +éparse/F* +épart/S* +éparvin/S* +épatamment/D'Q' +épatante/F* +épatement/S* +épater/a4p+ +épateuse/F* +épaufrer/a2p+ +épaufrure/S* +épaulard/S* +épaule/S* +épaulé/S* +épaulé-jeté/L'D'Q' +épaulement/S* +épauler/a4p+ +épaulés-jetés/D'Q' +épaulette/S* +épaulière/S* +épave/S* +épaviste/S* +épeautre/S* +épée/S* +épeiche/S* +épeichette/S* +épeire/S* +épeirogénique/S* +épéisme/S* +épéiste/S* +épeler/d4p+ +épellation/S* +épendyme/S* +épenthèse/S* +épenthétique/S* +épépinage/S* +épépiner/a2p+ +épépineuse/F* +éperdre/tD +éperdue/F* +éperdument/D'Q' +éperlan/S* +éperon/S* +éperonner/a4p+ +épervier/S* +épervière/S* +épervin/S* +épeuler/a2p+ +épeurer/a2p+ +éphèbe/S* +éphébie/S* +éphélide/S* +éphémère/S* +éphémère/S* +éphémèrement/D'Q' +éphéméride/S* +éphéméroptère/S* +éphéméroptère/S* +éphésienne/F* +éphippigère/S* +éphod/S* +éphorat/S* +éphore/S* +éphorie/S* +épi/S* +épiage/S* +épiaire/S* +épiaison/S* +épiblaste/S* +épiblastique/S* +épicanthus/L'D'Q' +épicarde/S* +épicarpe/S* +épice/S* +épicéa/S* +épicène/S* +épicentrale/W* +épicentre/S* +épicer/a2p+ +épicerie/S* +épichlorhydrine/S* +épicière/F* +épiclèse/S* +épicondyle/S* +épicondylite/S* +épicontinentale/W* +épicrâne/S* +épicrânienne/F* +épicritique/S* +épicurienne/F* +épicurisme/S* +épicycle/S* +épicycloïdale/W* +épicycloïde/S* +épidémicité/S* +épidémie/S* +épidémiologie/S* +épidémiologique/S* +épidémiologiquement/D'Q' +épidémiologiste/S* +épidémique/S* +épidémiquement/L'D'Q' +épiderme/S* +épidermique/S* +épidermolyse/S* +épidermomycose/S* +épidermophytie/S* +épidiascope/S* +épidictique/S* +épididyme/S* +épididymite/S* +épidote/S* +épidurale/W* +épier/a4p+ +épierrage/S* +épierrement/S* +épierrer/a2p+ +épierreuse/F* +épieu/X* +épieuse/F* +épigastralgie/S* +épigastre/S* +épigastrique/S* +épigée/F* +épigenèse/S* +épigénétique/S* +épigénétique/S* +épigénie/S* +épiglotte/S* +épiglottique/S* +épiglottite/S* +épigone/S* +épigrammatique/S* +épigrammatiste/S* +épigramme/S* +épigraphe/S* +épigraphie/S* +épigraphique/S* +épigraphiste/S* +épigyne/S* +épigyne/S* +épilage/S* +épilaryngienne/F* +épilation/S* +épilatoire/S* +épilatoire/S* +épilatrice/F* +épilepsie/S* +épileptiforme/S* +épileptique/S* +épileptiquement/L'D'Q' +épileptologue/S* +épiler/a4p+ +épileuse/F* +épillet/S* +épilobe/S* +épilogue/S* +épiloguer/a4p+ +épilogueuse/F* +épiloir/S* +épimère/S* +épimérie/S* +épimérique/S* +épimérisation/S* +épimorphisme/S* +épinage/S* +épinaie/S* +épinard/S* +épinçage/S* +épinceler/d2p+ +épincer/a2p+ +épincetage/S* +épinceter/d2p+ +épinceteuse/F* +épinceuse/F* +épine/S* +épinéphrine/S* +épiner/a2p+ +épines-vinettes/D'Q' +épinette/S* +épineuse/W* +épine-vinette/L'D'Q' +épinglage/S* +épingle/S* +épingler/a2p+ +épinglerie/S* +épinglette/S* +épinglière/F* +épinier/S* +épinière/S* +épinoche/S* +épinochette/S* +épipélagique/S* +épiphane/S* +épiphanie/S* +épiphénoménale/W* +épiphénomène/S* +épiphénoménisme/S* +épiphénoméniste/S* +épiphonème/S* +épiphylle/S* +épiphysaire/S* +épiphyse/S* +épiphyte/S* +épiphytie/S* +épiploon/S* +épipodite/S* +épique/S* +épiquement/D'Q' +épirogenèse/S* +épirogénique/S* +épisclérite/S* +épiscopale/W* +épiscopalienne/F* +épiscopalisme/S* +épiscopat/S* +épiscope/S* +épisiotomie/S* +épisode/S* +épisodique/S* +épisodiquement/D'Q' +épisome/S* +épissage/S* +épisser/a2p+ +épissoir/S* +épissurage/S* +épissure/S* +épistasie/S* +épistasique/S* +épistaxis/L'D'Q' +épistémè/S* +épistémique/S* +épistémologie/S* +épistémologique/S* +épistémologiquement/D'Q' +épistémologiste/S* +épistémologue/S* +épistolaire/S* +épistolière/F* +épistyle/S* +épisyénite/S* +épitaphe/S* +épitaxie/S* +épite/S* +épitexte/S* +épithalame/S* +épithéliale/W* +épithélioïde/S* +épithélioma/S* +épithélium/S* +épithème/S* +épithète/S* +épithète/S* +épitoge/S* +épitomé/S* +épître/S* +épitrochlée/S* +épitype/S* +épivarder/a3p+ +épizootie/S* +épizootique/S* +éplorée/F* +éployer/a4p+ +épluchage/S* +épluche-légumes/L'D'Q' +épluchement/S* +éplucher/a2p+ +éplucheuse/F* +épluchure/S* +épode/S* +époi/S* +épointage/S* +épointement/S* +épointer/a2p+ +époisses/L'D'Q' +éponge/S* +épongeable/S* +épongeage/S* +épongement/S* +éponger/a4p+ +éponte/S* +épontille/S* +épontiller/a2p+ +éponyme/S* +éponymie/S* +épopée/S* +époque/S* +épouillage/S* +épouiller/a4p+ +époumoner/a3p+ +épousable/S* +épousailles/D'Q' +épouse/S* +épousée/S* +épouser/a4p+ +épouseur/S* +époussetage/S* +épousseter/d2p+ +époussette/S* +époustouflante/F* +époustoufler/a2p+ +époutier/a2p+ +époutir/f2p+ +épouvantable/S* +épouvantablement/D'Q' +épouvantail/S* +épouvante/S* +épouvantement/S* +épouvanter/a4p+ +époux/L'D'Q' +époxy/S* +époxydation/S* +époxyde/S* +époxydée/F* +époxydique/S* +épreindre +épreinte/S* +éprendre/tG +épreuve/S* +éprouvante/F* +éprouver/a4p+ +éprouvette/S* +epsilon/L'D'Q' +epsomite/S* +épucer/a4p+ +épuisable/S* +épuisante/F* +épuisement/S* +épuiser/a4p+ +épuisette/S* +épulide/S* +épulie/S* +épulis/L'D'Q' +épulon/S* +épulpeur/S* +épurage/S* +épuration/S* +épurative/F* +épuratoire/S* +épuratrice/F* +épure/S* +épurement/S* +épurer/a4p+ +épurge/S* +équanime/S* +équanimité/S* +équant/S* +équarrier +équarrir/f2p+ +équarrissage/S* +équarrissement/S* +équarrisseuse/F* +équarrissoir/S* +équateur/S* +équation/S* +équationnelle/F* +équato-guinéenne/F* +équatorial/X* +équatoriale/W* +équatorienne/F* +équerrage/S* +équerre/S* +équerrer/a2p+ +équestre/S* +équeutage/S* +équeuter/a2p+ +équiangle/S* +équidé/S* +équidensité/S* +équidimensionnelle/F* +équidistance/S* +équidistante/F* +équilatérale/W* +équilatère/S* +équilibrage/S* +équilibrante/F* +équilibration/S* +équilibre/S* +équilibrer/a4p+ +équilibreur/S* +équilibreuse/F* +équilibrisme/S* +équilibriste/S* +équille/S* +équimassique/S* +équimolaire/S* +équimoléculaire/S* +équimultiple/S* +équimultiplicité/S* +équine/F* +équinisme/S* +équinoxe/S* +équinoxiale/W* +équipage/S* +équipartition/S* +équipe/S* +équipée/S* +équipement/S* +équipementière/F* +équiper/a4p+ +équipière/F* +équipollence/S* +équipollente/F* +équipoller/a4p+ +équipotence/S* +équipotente/F* +équipotentialité/S* +équipotentielle/F* +équiprobabilité/S* +équiprobable/S* +équiprojectivité/S* +équisétale/S* +équisétinée/S* +équisétophyte/S* +équisingularité/S* +équisingulière/F* +équitable/S* +équitablement/D'Q' +équitante/F* +équitation/S* +équité/S* +équivalemment/D'Q' +équivalence/S* +équivalent/S* +équivalente/F* +équivaloir/pNq. +équivalve/S* +équivariance/S* +équivariante/F* +équivoque/S* +équivoque/S* +équivoquer/a1p. +érable/S* +érablière/S* +éradication/S* +éradicatrice/F* +éradiquer/a2p+ +éraflement/S* +érafler/a4p+ +éraflure/S* +éraillement/S* +érailler/a4p+ +éraillure/S* +éraste/S* +érathème/S* +érayer/a2p+ +erbine/S* +erbium/S* +ère/S* +érectile/S* +érectilité/S* +érection/S* +érectrice/F* +éreintage/S* +éreintante/F* +éreintement/S* +éreinter/a4p+ +éreinteuse/F* +érémitique/S* +érémitisme/S* +érepsine/S* +érésipèle/S* +éréthisme/S* +éreuthophobie/S* +éreutophobie/S* +erg/S* +erg/||-- +ergastoplasme/S* +ergastule/S* +ergatif/S* +ergative/F* +ergativité/S* +ergocalciférol/S* +ergodicité/S* +ergodique/S* +ergographe/S* +ergol/S* +ergologie/S* +ergométrie/S* +ergométrique/S* +ergonome/S* +ergonomie/S* +ergonomique/S* +ergonomiste/S* +ergostérol/S* +ergot/S* +ergotage/S* +ergotamine/S* +ergotée/F* +ergoter/a1p. +ergoterie/S* +ergoteuse/F* +ergothérapeute/S* +ergothérapie/S* +ergotine/S* +ergotisme/S* +éricacée/S* +éricacée/S* +ériger/a4p+ +érigéron/S* +érigne/S* +érine/S* +érinye/S* +érismature/S* +éristale/S* +éristique/S* +erlenmeyer/S* +ermitage/S* +ermite/S* +éroder/a4p+ +érogène/S* +éromène/S* +éros/L'D'Q' +érosion/S* +érosive/F* +érotique/S* +érotiquement/D'Q' +érotisation/S* +érotiser/a2p+ +érotisme/S* +érotologie/S* +érotologique/S* +érotologue/S* +érotomane/S* +érotomaniaque/S* +érotomanie/S* +errance/S* +errante/F* +errata/L'D'Q' +erratique/S* +erratiquement/D'Q' +erratisme/S* +erratum/L'D'Q' +erre/S* +errement/S* +errer/a1p. +erreur/S* +erronée/F* +erronément/D'Q' +ers/L'D'Q' +ersatz/L'D'Q' +erse/S* +erse/S* +erseau/X* +érubescence/S* +érubescente/F* +éruciforme/S* +érucique/S* +éructation/S* +éructer/a2p+ +érudite/F* +érudition/S* +érugineuse/W* +éruption/S* +éruptive/F* +érysipélateuse/W* +érysipèle/S* +érythémateuse/W* +érythème/S* +érythréenne/F* +érythrine/S* +érythrite/S* +érythroblaste/S* +érythroblastopénie/S* +érythroblastose/S* +érythrocytaire/S* +érythrocyte/S* +érythrodermie/S* +érythromycine/S* +érythropoïèse/S* +érythropoïétine/S* +érythrose/S* +érythrosine/S* +ès +esbaudir/f3p+ +esbigner/a3p+ +esbroufe/S* +esbroufer/a2p+ +esbroufeuse/F* +esca/S* +escabeau/X* +escabèche/S* +escabelle/S* +escadre/S* +escadrille/S* +escadron/S* +escagasser/a4p+ +escalade/S* +escalader/a2p+ +escaladeuse/F* +escalateur/S* +escalator/S* +escale/S* +escalier/S* +escaliéteuse/F* +escalope/S* +escaloper/a2p+ +escamotable/S* +escamotage/S* +escamoter/a4p+ +escamoteuse/F* +escampette/S* +escapade/S* +escape/S* +escarbille/S* +escarbot/S* +escarboucle/S* +escarcelle/S* +escargot/S* +escargotière/S* +escarmouche/S* +escarmoucher/a1p. +escarole/S* +escarpe/S* +escarpement/S* +escarper/a2p+ +escarpin/S* +escarpolette/S* +escarre/S* +escarrification/S* +escarrifier/a2p+ +escarrotique/S* +eschare/S* +escharifier/L'D'Q' +eschatologie/S* +eschatologique/S* +eschatologiquement/L'D'Q' +esche/S* +escher/a2p+ +escient/S* +esclaffement/S* +esclaffer/a3p+ +esclandre/S* +esclavage/S* +esclavager/a2p+ +esclavagiser/a4p+ +esclavagisme/S* +esclavagiste/S* +esclave/S* +esclavonne/F* +escobar/S* +escobarderie/S* +escoffier/a2p+ +escogriffe/S* +escomptable/S* +escompte/S* +escompter/a2p+ +escompteuse/F* +escopette/S* +escorte/S* +escorter/a2p+ +escorteur/S* +escort-girl/S* +escot/S* +escouade/S* +escourgeon/S* +escrime/S* +escrimer/a3p+ +escrimeuse/F* +escroc/S* +escroquer/a2p+ +escroquerie/S* +escudo/S* +esculape/S* +esculine/S* +ésérine/S* +esgourde/S* +esgourder/a2p+ +eskimo/S* +ésociculture/S* +ésotérique/S* +ésotériquement/D'Q' +ésotérisme/S* +espace/S* +espacement/S* +espacer/a4p+ +espaces-temps/D'Q' +espace-temps/L'D'Q' +espaceur/S* +espada/S* +espade/S* +espadon/S* +espadrille/S* +espagnole/F* +espagnolette/S* +espagnolisme/S* +espalier/S* +espar/S* +esparcet/S* +esparcette/S* +espèce/S* +espérance/S* +espérantisme/S* +espérantiste/S* +espéranto/S* +espérantophone/S* +espérer/c2p+ +esperluette/S* +espiègle/S* +espièglement/D'Q' +espièglerie/S* +espingole/S* +espionnage/S* +espionne/F* +espionner/a2p+ +espionnite/S* +esplanade/S* +espoir/S* +espolette/S* +espoliner/a2p+ +esponton/S* +espouliner/a2p+ +espressivo/D'Q' +espresso/S* +esprit/S* +esprit-de-bois/L'D' +esprit-de-sel/L'D' +esprit-de-vin/L'D' +esprofonder/a4p+ +esquarre/S* +esquicher/a4p+ +esquif/S* +esquille/S* +esquilleuse/W* +esquimau/X* +esquimau/X* +esquimaude/S* +esquimaude/S* +esquimautage/S* +esquintante/F* +esquinter/a4p+ +esquire/S* +esquisse/S* +esquisser/a4p+ +esquivable/S* +esquive/S* +esquiver/a4p+ +essai/S* +essaim/S* +essaimage/S* +essaimer/a2p+ +essangeage/S* +essanger/a2p+ +essanvage/S* +essart/S* +essartage/S* +essartement/S* +essarter/a2p+ +essayage/S* +essayer/a4p+ +essayeuse/F* +essayiste/S* +esse/S* +essence/S* +essencerie/S* +essencière/F* +essénienne/F* +essénisme/S* +essentialisante/F* +essentialisation/S* +essentialiser/a4p+ +essentialisme/S* +essentialiste/S* +essentialité/S* +essentielle/F* +essentiellement/D'Q' +esseulée/F* +essieu/X* +essif/S* +essonnienne/F* +essor/S* +essorage/S* +essorante/F* +essorer/a4p+ +essoreuse/F* +essorillement/S* +essoriller/a2p+ +essouchage/S* +essouchement/S* +essoucher/a2p+ +essoufflement/S* +essouffler/a4p+ +essuie/S* +essuie-glace/L'D'Q' +essuie-glace/S* +essuie-mains/L'D'Q' +essuie-meubles/L'D'Q' +essuie-phare/L'D'Q' +essuie-phare/S* +essuie-pieds/L'D'Q' +essuie-plume/L'D'Q' +essuie-plume/S* +essuie-tout/L'D'Q' +essuie-verre/S* +essuie-verres/L'D'Q' +essuyage/S* +essuyer/a4p+ +essuyeuse/F* +est/L'D'Q' +establishment/S* +estacade/S* +estafette/S* +estafier/S* +estafilade/S* +estagnon/S* +est-allemande/F* +estaminet/S* +estampage/S* +estampe/S* +estamper/a2p+ +estampeuse/F* +estampillage/S* +estampille/S* +estampiller/a2p+ +estampilleuse/S* +estancia/S* +estarie/S* +este/S* +ester +ester/S* +estérase/S* +estérification/S* +estérifier/a2p+ +esterlin/S* +esthésie/S* +esthésiogène/S* +esthésiologie/S* +esthète/S* +esthéticienne/F* +esthétique/S* +esthétique/S* +esthétiquement/D'Q' +esthétisante/F* +esthétisation/S* +esthétiser/a2p+ +esthétisme/S* +estimable/S* +estimation/S* +estimative/F* +estimatoire/S* +estimatrice/F* +estime/S* +estimer/a4p+ +estivage/S* +estivale/W* +estivante/F* +estivation/S* +estiver/a2p+ +estoc/S* +estocade/S* +estomac/S* +estomaquer/a2p+ +estompage/S* +estompement/S* +estomper/a4p+ +estonienne/F* +estoquer/a2p+ +estouffade/S* +estourbir/f2p+ +estrade/S* +estradiène/S* +estradiol/S* +estradiot/S* +estragon/S* +estramaçon/S* +estramasser/a3p+ +estran/S* +estranciner/a3p+ +estrapade/S* +estrapader/a2p+ +estrapasser/a2p+ +estriol/S* +estrone/S* +estrope/S* +estropiée/F* +estropier/a4p+ +estroprogestative/F* +estuaire/S* +estuarienne/F* +estudiantine/F* +esturgeon/S* +eszett/S* +et +êta/L'D'Q' +étable/S* +établer/a2p+ +établi/S* +établir/f4p+ +établissement/S* +étage/S* +étagement/S* +étager/a4p+ +étagère/S* +étagiste/S* +étai/S* +étaiement/S* +étain/S* +étal/S* +étalage/S* +étalager/a2p+ +étalagiste/S* +étale/S* +étalement/S* +étaler/a4p+ +étaleuse/S* +étalière/F* +étalinguer/a2p+ +étalingure/S* +étalon/S* +étalonnage/S* +étalonnement/S* +étalonner/a2p+ +étalonneuse/F* +étalonnière/F* +étamage/S* +étambot/S* +étambrai/S* +étamer/a2p+ +étameuse/F* +étamine/S* +étampage/S* +étampe/S* +étamper/a2p+ +étamperche/S* +étampeuse/F* +étampure/S* +étamure/S* +étanche/S* +étanche/S* +étanchéification/S* +étanchéifier/a2p+ +étanchéiste/S* +étanchéité/S* +étanchement/S* +étancher/a2p+ +étancheuse/F* +étançon/S* +étançonnement/S* +étançonner/a2p+ +étang/S* +étape/S* +étarquer/a2p+ +étasunienne/F* +état/S* +étatique/S* +étatisation/S* +étatiser/a2p+ +étatisme/S* +étatiste/S* +état-major/L'D'Q' +états-majors/D'Q' +états-unienne/F* +étau/X* +étayage/S* +étayement/S* +étayer/a4p+ +etc +été/S* +éteigneuse/F* +éteignoir/S* +éteindre/wB +étendage/S* +étendard/S* +étendoir/S* +étendre/tA +étendue/S* +éternalisme/S* +éternelle/F* +éternellement/D'Q' +éterniser/a4p+ +éternité/S* +éternuement/S* +éternuer/a1p. +étésien/S* +étêtage/S* +étêtement/S* +étêter/a2p+ +éteuf/S* +éteule/S* +eth/L'D'Q' +éthanal/S* +éthane/S* +éthanoate/S* +éthanoïque/S* +éthanol/S* +éthanolamine/S* +éthanolate/S* +éthanolique/S* +éthène/S* +ether/S* +éther/S* +éthérée/F* +éthérification/S* +éthérifier/a2p+ +éthérique/S* +éthérisation/S* +éthériser/a2p+ +éthérisme/S* +éthéromane/S* +éthéromanie/S* +éthicienne/F* +éthiopienne/F* +éthique/S* +éthique/S* +éthiquement/D'Q' +ethmoïdale/W* +ethmoïde/S* +ethmoïdite/S* +ethnarchie/S* +ethnarque/S* +ethnicisation/S* +ethniciser/a2p+ +ethnicisme/S* +ethniciste/S* +ethnicité/S* +ethnico-religieuse/W* +ethnie/S* +ethnique/S* +ethniquement/D'Q' +ethnobiologie/S* +ethnobotanique/S* +ethnocentrée/F* +ethnocentrique/S* +ethnocentrisme/S* +ethnocentriste/S* +ethnocide/S* +ethnoculturelle/F* +ethno-différentialisme/S* +ethno-différentialiste/S* +ethnogenèse/S* +ethnogénie/S* +ethnographe/S* +ethnographie/S* +ethnographique/S* +ethnohistoire/S* +ethnolinguistique/S* +ethnologie/S* +ethnologique/S* +ethnologiquement/D'Q' +ethnologue/S* +ethnomédecine/S* +ethnométhodologie/S* +ethnométhodologue/S* +ethnomusicologie/S* +ethnomusicologue/S* +ethnonyme/S* +ethnonymie/S* +ethnopsychiatrie/S* +ethnopsychologie/S* +ethno-raciale/W* +ethnoreligieuse/W* +éthographie/S* +éthologie/S* +éthologique/S* +éthologiste/S* +éthologue/S* +ethos/L'D'Q' +éthoxyler/a2p+ +éthuse/S* +éthyl/L'D'Q' +éthylamine/S* +éthylation/S* +éthylbenzène/S* +éthyle/S* +éthylène/S* +éthylénique/S* +éthylique/S* +éthylisme/S* +éthylomètre/S* +éthylotest/S* +éthyne/S* +étiage/S* +étier/S* +étincelage/S* +étincelante/F* +étinceler/d1p. +étincelle/S* +étincellement/S* +étiolement/S* +étioler/a4p+ +étiologie/S* +étiologique/S* +étiopathe/S* +étiopathie/S* +étique/S* +étiquetage/S* +étiqueter/d2p+ +étiqueteuse/F* +étiquette/S* +étirable/S* +étirage/S* +étirement/S* +étirer/a4p+ +étireuse/F* +étisie/S* +étoc/S* +étoffe/S* +étoffement/S* +étoffer/a4p+ +étoile/S* +étoilement/S* +étoiler/a4p+ +étole/S* +étonnamment/D'Q' +étonnante/F* +étonnement/S* +étonner/a4p+ +étouffade/S* +étouffage/S* +étouffante/F* +étouffe-chrétien/L'D'Q' +étouffement/S* +étouffer/a4p+ +étouffeuse/F* +étouffoir/S* +étoupe/S* +étouper/a2p+ +étoupille/S* +étoupiller/a2p+ +étourderie/S* +étourdie/F* +étourdiment/D'Q' +étourdir/f4p+ +étourdissante/F* +étourdissement/S* +étourneau/X* +étrange/S* +étrange/S* +étrangement/D'Q' +étrangère/F* +étrangeté/S* +étranglement/S* +étrangler/a4p+ +étrangleuse/F* +étrangloir/S* +étrave/S* +être/S* +être/zE +étrécir/f4p+ +étrécissement/S* +étreindre/wB +étreinte/S* +étrenne/S* +étrenner/a2p+ +étrésillon/S* +étrésillonnement/S* +étrésillonner/a2p+ +étrier/S* +étrille/S* +étriller/a2p+ +étripade/S* +étripage/S* +étripailler/a2p+ +étripée/F* +étriper/a4p+ +étriquer/a2p+ +étrive/S* +étrivière/S* +étroite/F* +étroitement/D'Q' +étroitesse/S* +étron/S* +étronçonner/a2p+ +étruscologie/S* +étruscologue/S* +étrusque/S* +étude/S* +étudiante/F* +étudier/a4p+ +étui/S* +étuvage/S* +étuve/S* +étuvée/S* +étuvement/S* +étuver/a2p+ +étuveuse/F* +étuviste/S* +étym +étymologie/S* +étymologique/S* +étymologiquement/D'Q' +étymologiste/S* +étymon/S* +eubactérie/S* +eubage/S* +eucalyptol/S* +eucalyptus/L'D'Q' +eucaryote/S* +eucaryote/S* +eucharistie/S* +eucharistique/S* +euchromatine/S* +euclidienne/F* +eucologe/S* +eudémis/L'D'Q' +eudémonisme/S* +eudémoniste/S* +eudémonologie/S* +eudiomètre/S* +eudiométrie/S* +eudiométrique/S* +eudiste/S* +eudiste/S* +eugénate/S* +eugénie/S* +eugénique/S* +eugénisme/S* +eugéniste/S* +eugénol/S* +euglène/S* +euh +eulérienne/F* +eulogie/S* +eumélanine/S* +euménide/S* +eunecte/S* +eunuque/S* +eupatoire/S* +eupatride/S* +eupeptique/S* +euphémique/S* +euphémiquement/D'Q' +euphémisation/S* +euphémiser/a4p+ +euphémisme/S* +euphonie/S* +euphonique/S* +euphoniquement/D'Q' +euphorbe/S* +euphorbiacée/S* +euphorbiacée/S* +euphorie/S* +euphorique/S* +euphorisante/F* +euphorisation/S* +euphoriser/a2p+ +euphotique/S* +euphraise/S* +euphuisme/S* +eupnéique/S* +euprocte/S* +eurafricaine/F* +eurasiatique/S* +eurasienne/F* +eurêka +euro/S* +eurobanque/S* +eurocent/S* +eurocentime/S* +eurocentrisme/S* +eurocentriste/S* +eurocommunisme/S* +eurocommuniste/S* +eurocrate/S* +eurocrédit/S* +eurodéputée/F* +eurodevise/S* +eurodollar/S* +euroise/F* +euromarché/S* +euro-méditerranéenne/F* +euromissile/S* +euro-obligataire/S* +euro-obligation/S* +européanisation/S* +européaniser/a4p+ +européanisme/S* +européanité/S* +européenne/F* +européisme/S* +européiste/S* +européocentrisme/S* +européocentriste/S* +europhile/S* +europhobe/S* +europium/S* +europoïde/S* +eurorégion/S* +euroscepticisme/S* +eurosceptique/S* +eurosignal/S* +eurostratégique/S* +eurovision/S* +euryapside/S* +euryhaline/F* +eurytherme/S* +eurytherme/S* +eurythermie/S* +eurythmie/S* +eurythmique/S* +euscarienne/F* +euskarienne/F* +eusociale/W* +eustache/S* +eustasie/S* +eustatique/S* +eustatisme/S* +eutectique/S* +eutexie/S* +euthanasie/S* +euthanasiée/F* +euthanasier/a2p+ +euthanasique/S* +euthanasiste/S* +euthérien/S* +eutocie/S* +eutrophe/S* +eutrophisation/S* +eux/D'Q' +eux-mêmes/D'Q' +évacuante/F* +évacuation/S* +évacuatrice/F* +évacuer/a4p+ +évadée/F* +évader/a3p+ +évagination/S* +évaginée/F* +évaluable/S* +évaluation/S* +évaluative/F* +évaluatrice/F* +évaluer/a4p+ +évanescence/S* +évanescente/F* +évangéliaire/S* +évangélique/S* +évangéliquement/D'Q' +évangélisation/S* +évangélisatrice/F* +évangéliser/a2p+ +évangélisme/S* +évangéliste/S* +évangile/S* +évanouir/f3p+ +évanouissante/F* +évanouissement/S* +évaporable/S* +évaporateur/S* +évaporation/S* +évaporatoire/S* +évaporer/a4p+ +évaporite/S* +évaporitique/S* +évapotranspiration/S* +évasement/S* +évaser/a4p+ +évasion/S* +évasive/F* +évasivement/D'Q' +évasure/S* +évêché/S* +évection/S* +éveil/S* +éveillée/F* +éveiller/a4p+ +éveilleuse/F* +éveinage/S* +événement/S* +évènement/S* +événementiel/S* +évènementiel/S* +événementielle/F* +évènementielle/F* +évent/S* +éventail/S* +éventailliste/S* +éventaire/S* +éventée/F* +éventement/S* +éventer/a4p+ +éventration/S* +éventrement/S* +éventrer/a4p+ +éventreur/S* +éventualité/S* +éventuelle/F* +éventuellement/D'Q' +évêque/S* +évergète/S* +évergétisme/S* +éversion/S* +évertuer/a3p+ +évhémérisme/S* +éviction/S* +évidage/S* +évidement/S* +évidemment/D'Q' +évidence/S* +évidente/F* +évidentialité/S* +évider/a2p+ +évidoir/S* +évidure/S* +évier/S* +évincement/S* +évincer/a2p+ +éviscération/S* +éviscérer/c2p+ +évitable/S* +évitage/S* +évitement/S* +éviter/a4p+ +évocable/S* +évocation/S* +évocatoire/S* +évocatrice/F* +évohé +évoluée/F* +évoluer/a1p. +évolution/S* +évolutionnaire/S* +évolutionnisme/S* +évolutionniste/S* +évolutive/F* +évolutivité/S* +évoquer/a2p+ +évulsion/S* +evzone/S* +ex +ex/L'D'Q' +exabit/S* +exacerbation/S* +exacerber/a4p+ +exacte/F* +exactement/D'Q' +exacteur/S* +exaction/S* +exactitude/S* +exagération/S* +exagérative/F* +exagératrice/F* +exagérément/D'Q' +exagérer/c4p+ +exaltante/F* +exaltation/S* +exaltée/F* +exalter/a4p+ +examen/S* +examinatrice/F* +examiner/a4p+ +exanthémateuse/W* +exanthématique/S* +exanthème/S* +exaoctet/S* +exarchat/S* +exarque/S* +exaspérante/F* +exaspération/S* +exaspérée/F* +exaspérer/c4p+ +exaucement/S* +exaucer/a4p+ +exbibit/S* +exbioctet/S* +excardination/S* +excardiner/a2p+ +excavation/S* +excavatrice/F* +excaver/a2p+ +excédante/F* +excédent/S* +excédentaire/S* +excéder/c2p+ +excellemment/D'Q' +excellence/S* +excellente/F* +excellentissime/S* +exceller/a1p. +excentration/S* +excentrer/a2p+ +excentricité/S* +excentrique/S* +excentriquement/D'Q' +excepté/Q' +excepter/a2p+ +exception/S* +exceptionnalisme/S* +exceptionnaliste/S* +exceptionnalité/S* +exceptionnelle/F* +exceptionnellement/D'Q' +excès/L'D'Q' +excessive/F* +excessivement/D'Q' +excipée/F* +exciper/a5p. +excipient/S* +excise/S* +exciser/a2p+ +exciseuse/F* +excision/S* +excitabilité/S* +excitable/S* +excitant/S* +excitante/F* +excitation/S* +excitatrice/F* +excitée/F* +exciter/a4p+ +excitomotrice/F* +excito-motrice/F* +exciton/S* +exclamation/S* +exclamative/F* +exclamatoire/S* +exclamer/a3p+ +excluante/F* +exclue/F* +exclure/xL +exclusion/S* +exclusive/F* +exclusivement/D'Q' +exclusivisme/S* +exclusiviste/S* +exclusivité/S* +excommunication/S* +excommuniée/F* +excommunier/a2p+ +excoriation/S* +excorier/a2p+ +excoriose/S* +excracher +excrément/S* +excrémenteuse/W* +excrémentielle/F* +excréter/c2p+ +excrétion/S* +excrétoire/S* +excrétrice/F* +excroissance/S* +excursion/S* +excursionner/a1p. +excursionniste/S* +excursus/L'D'Q' +excusabilité/S* +excusable/S* +excuse/S* +excuser/a4p+ +exeat/L'D'Q' +exécrable/S* +exécrablement/D'Q' +exécration/S* +exécrer/c2p+ +exécutable/S* +exécutante/F* +exécuter/a4p+ +exécutif/S* +exécution/S* +exécutive/F* +exécutoire/S* +exécutoire/S* +exécutoirement/L'D'Q' +exécutrice/F* +exèdre/S* +exégèse/S* +exégète/S* +exégétique/S* +exégétiquement +exemplaire/S* +exemplaire/S* +exemplairement/D'Q' +exemplarisme/S* +exemplarité/S* +exemplative/F* +exemple/S* +exemplification/S* +exemplifier/a2p+ +exemplum/I* +exempte/F* +exemptée/F* +exempter/a4p+ +exemption/S* +exequatur/L'D'Q' +exerçante/F* +exercer/a4p+ +exercice/S* +exerciseur/S* +exérèse/S* +exergie/S* +exergue/S* +exfiltration/S* +exfiltrer/a2p+ +exfoliante/F* +exfoliation/S* +exfoliative/F* +exfolier/a4p+ +exhalaison/S* +exhalation/S* +exhaler/a4p+ +exhaure/S* +exhaussement/S* +exhausser/a2p+ +exhausteur/S* +exhaustion/S* +exhaustive/F* +exhaustivement/D'Q' +exhaustivité/S* +exhérédation/S* +exhéréder/c2p+ +exhiber/a4p+ +exhibition/S* +exhibitionnisme/S* +exhibitionniste/S* +exhilarante/F* +exhortation/S* +exhortative/F* +exhorter/a4p+ +exhumation/S* +exhumer/a2p+ +exigeante/F* +exigence/S* +exiger/a2p+ +exigibilité/S* +exigible/S* +exiguë/F* +exiguïté/S* +exil/S* +exilée/F* +exiler/a4p+ +exinscrite/F* +existante/F* +existence/S* +existentialisme/S* +existentialiste/S* +existentielle/F* +existentiellement/L'D'Q' +exister/a1p. +exit/L'D'Q' +ex-libris/L'D'Q' +exobase/S* +exobiologie/S* +exobiologique/S* +exobiologiste/S* +exocarpe/S* +exocet/S* +exocrine/S* +exocuticule/S* +exocytose/S* +exode/S* +exoderme/S* +exogame/S* +exogamie/S* +exogamique/S* +exogène/S* +exogénéité/S* +exogroupe/S* +exomphale/S* +exon/S* +exondation/S* +exondement/S* +exonder/a3p+ +exonération/S* +exonératoire/S* +exonérer/c4p+ +exonyme/S* +exonymie/S* +exophtalmie/S* +exophtalmique/S* +exoplanète/S* +exopodite/S* +exopolysaccharide/S* +exorable/S* +exorbitante/F* +exorbitée/F* +exorcisation/S* +exorciser/a2p+ +exorciseuse/F* +exorcisme/S* +exorcistat/S* +exorciste/S* +exorde/S* +exoréique/S* +exoréisme/S* +exosmose/S* +exosphère/S* +exosphérique/S* +exosquelette/S* +exostose/S* +exotérique/S* +exotérisme/S* +exoterre/S* +exotherme/S* +exothermicité/S* +exothermicité/S* +exothermie/S* +exothermique/S* +exotique/S* +exotiquement/D'Q' +exotisation/S* +exotisme/S* +exotoxine/S* +expansée/F* +expansibilité/S* +expansible/S* +expansion/S* +expansionnisme/S* +expansionniste/S* +expansive/F* +expansivité/S* +expatriation/S* +expatriée/F* +expatrier/a4p+ +expectante/F* +expectation/S* +expectative/F* +expectative/S* +expectorante/F* +expectoration/S* +expectorer/a2p+ +expédient/S* +expédiente/F* +expédier/a2p+ +expédition/S* +expéditionnaire/S* +expéditive/F* +expéditivement/D'Q' +expéditrice/F* +expérience/S* +expérimentable/S* +expérimentale/W* +expérimentalement/D'Q' +expérimentalisme/S* +expérimentaliste/S* +expérimentation/S* +expérimentatrice/F* +expérimenter/a2p+ +expert-comptable/L'D'Q' +experte/F* +experte-comptable/L'D'Q' +expertement/D'Q' +expertes-comptables/D'Q' +expertise/S* +expertiser/a2p+ +experts-comptables/D'Q' +expiable/S* +expiation/S* +expiatoire/S* +expiatrice/F* +expier/a4p+ +expirante/F* +expiration/S* +expiratoire/S* +expiratrice/F* +expirer/a2p+ +explant/S* +explantation/S* +explanter/a2p+ +explétive/F* +explétivité/S* +explicable/S* +explication/S* +explicative/F* +explicitation/S* +explicite/S* +explicitement/D'Q' +expliciter/a2p+ +expliquer/a4p+ +exploit/S* +exploitabilité/S* +exploitable/S* +exploitante/F* +exploitation/S* +exploitée/F* +exploiter/a2p+ +exploiteuse/F* +explorable/S* +exploration/S* +exploratoire/S* +exploratrice/F* +explorer/a2p+ +explosée/F* +exploser/a1p. +exploseur/S* +explosibilité/S* +explosible/S* +explosif/S* +explosimètre/S* +explosion/S* +explosive/F* +explosivité/S* +expo/S* +exponentiation/S* +exponentielle/F* +exponentiellement/D'Q' +export/S* +exportable/S* +exportation/S* +exportatrice/F* +exporter/a4p+ +exposante/F* +exposé/S* +exposer/a4p+ +exposition/S* +exprès/D'Q' +exprès/L'D'Q' +express/L'D'Q' +express/L'D'Q' +expresse/S* +expressément/D'Q' +expression/S* +expressionnisme/S* +expressionniste/S* +expressiste/S* +expressive/F* +expressivement/D'Q' +expressivité/S* +expresso/S* +exprimable/S* +exprimer/a4p+ +expromission/S* +expropriante/F* +expropriation/S* +expropriatrice/F* +expropriée/F* +exproprier/a2p+ +expulsable/S* +expulsée/F* +expulser/a4p+ +expulsion/S* +expulsive/F* +expurgation/S* +expurgatoire/S* +expurger/a2p+ +exquise/F* +exquisement/D'Q' +exquisément/D'Q' +exquisité/S* +exsangue/S* +exsanguination/S* +exsanguino-transfusion/S* +exstrophie/S* +exsudat/S* +exsudation/S* +exsuder/a2p+ +exsurgence/S* +extase/S* +extasier/a3p+ +extatique/S* +extatiquement/D'Q' +extatisme/S* +extemporanée/F* +extemporanément/D'Q' +extenseur/S* +extensibilité/S* +extensible/S* +extension/S* +extensionnalité/S* +extensionnelle/F* +extensité/S* +extensive/F* +extensivement/L'D'Q' +extensivité/S* +extenso +extensomètre/S* +extensométrie/S* +extensométrique/S* +exténuante/F* +exténuation/S* +exténuée/F* +exténuement/S* +exténuer/a4p+ +extérieur/S* +extérieure/F* +extérieurement/D'Q' +extériorisation/S* +extérioriser/a4p+ +extériorité/S* +extermination/S* +exterminatrice/F* +exterminer/a2p+ +externalisable/S* +externalisation/S* +externaliser/a2p+ +externalisme/S* +externalité/S* +externat/S* +externe/S* +externer/a2p+ +extéroceptive/F* +exterritorialité/S* +extimité/S* +extinction/S* +extinctive/F* +extinctrice/F* +extinguible/S* +extirpable/S* +extirpateur/S* +extirpation/S* +extirper/a4p+ +extorquer/a2p+ +extorqueuse/F* +extorsion/S* +extourner/a2p+ +extra/L'D'Q' +extra/L'D'Q' +extra/S* +extra-atmosphérique/S* +extracellulaire/S* +extra-cellulaire/S* +extrachromosomique/S* +extracommunautaire/S* +extraconjugale/W* +extra-conjugale/W* +extraconjugalité/S* +extracorporelle/F* +extracourant/S* +extra-courant/S* +extractabilité/S* +extractible/S* +extraction/S* +extractive/F* +extractivisme/S* +extractiviste/S* +extractrice/F* +extradable/S* +extradée/F* +extrader/a2p+ +extradiégétique/S* +extradition/S* +extrados/L'D'Q' +extra-dry/L'D'Q' +extra-dry/L'D'Q' +extra-embryonnaire/S* +extra-européenne/F* +extrafine/F* +extra-fine/F* +extraforte/F* +extra-forte/F* +extragalactique/S* +extragénique/S* +extrahumaine/F* +extra-humaine/F* +extraire/wL +extrait/S* +extrajudiciaire/S* +extrajudiciairement/D'Q' +extralégale/W* +extra-légale/W* +extralinguistique/S* +extralucide/S* +extra-lucide/S* +extra-muros/D'Q' +extra-muros/L'D'Q' +extranéité/S* +extranet/S* +extraordinaire/S* +extraordinairement/D'Q' +extraparlementaire/S* +extra-parlementaire/S* +extrapolable/S* +extrapolation/S* +extrapoler/a2p+ +extraprofessionnelle/F* +extra-professionnelle/F* +extrarénale/W* +extrascolaire/S* +extra-scolaire/S* +extrasensible/S* +extra-sensible/S* +extrasensorielle/F* +extra-sensorielle/F* +extrasolaire/S* +extra-solaire/S* +extrasystole/S* +extra-systole/S* +extraterrestre/S* +extra-terrestre/S* +extraterritoriale/W* +extra-territoriale/W* +extraterritorialité/S* +extra-territorialité/S* +extravagamment/D'Q' +extravagance/S* +extravagante/F* +extravaguer/a1p. +extravasation/S* +extravasculaire/S* +extravaser/a4p+ +extravéhiculaire/S* +extraversion/S* +extravertie/F* +extrémale/W* +extrême/S* +extrêmement/D'Q' +extrême-onction/L'D'Q' +extrême-orientale/W* +extrêmes-onctions/D'Q' +extremis +extrémiser/a4p+ +extrémisme/S* +extrémiste/S* +extrémité/S* +extrémophile/S* +extremum/I* +extremum/L'D'Q' +extrinsécisme/S* +extrinsèque/S* +extrinsèquement/D'Q' +extrorse/S* +extroversion/S* +extrovertie/F* +extruder/a2p+ +extrudeuse/F* +extrusion/S* +extubation/S* +extuber/a2p+ +extumescence/S* +exubérance/S* +exubérante/F* +exubérer +exulcération/S* +exulcérer/c2p+ +exultante/F* +exultation/S* +exulter/a1p. +exultet/S* +exutoire/S* +exuviation/S* +exuvie/S* +ex-voto/L'D'Q' +eyeliner/S* +eye-liner/S* +eyra/S* +f +fa +fabacée/S. +fablab/S. +fable/S. +fabliau/X. +fablier/S. +fabricante/F. +fabrication/S. +fabricatrice/F. +fabricien/S. +fabrique/S. +fabriquer/a0p+ +fabulation/S. +fabulatrice/F. +fabuler/a0p. +fabuleuse/W. +fabuleusement +fabuliste/S. +fac/S. +façade/S. +façadière/F. +façadisme/S. +face +face/S. +face-à-face +face-à-main +faces-à-main +facétie/S. +facétieuse/W. +facétieusement +facette/S. +facetter/a0p+ +fâcher/a0p+ +fâcherie/S. +fâcheuse/W. +fâcheusement +facho/S. +fachosphère/S. +faciale/W. +faciès +facile/S. +facilement +facilitation/S. +facilitatrice/F. +facilité/S. +faciliter/a0p+ +façon/S. +faconde/S. +façonnable/S. +façonnage/S. +façonnement/S. +façonner/a0p+ +façonneuse/F. +façonnière/F. +fac-simile +fac-similé/S. +factage/S. +factice/S. +facticement +facticité/S. +factieuse/W. +faction/S. +factionnaire/S. +factitive/F. +facto +factorage/S. +factorerie/S. +factorielle/F. +factoring/S. +factorisable/S. +factorisation/S. +factoriser/a0p+ +factotum/S. +factrice/F. +factualité/S. +factuelle/F. +factuellement +factum/S. +facturable/S. +facturation/S. +facture/S. +facturer/a0p+ +facturette/S. +facturière/F. +faculaire/S. +facule/S. +facultaire/S. +facultative/F. +facultativement +faculté/S. +fada/S. +fadaise/S. +fadasse/S. +fadasserie/S. +fade/S. +fadement +fader/a0p+ +fadette/S. +fadeur/S. +fading/S. +fado/S. +faf/S. +fafiot/S. +fagacée/S. +fagacée/S. +fagnarde/F. +fagne/S. +fagot/S. +fagotage/S. +fagoter/a0p+ +fagotier/S. +fagotin/S. +faiblarde/F. +faible/S. +faiblement +faiblesse/S. +faiblir/f0p. +faiblissante/F. +faïence/S. +faïencée/F. +faïencerie/S. +faïencière/F. +faignante/F. +faignanter/a0p. +faille/S. +failler/a0p+ +faillibilité/S. +faillible/S. +faillie/F. +faillir/iU +faillite/S. +faim/S. +faim-valle +faine/S. +faîne/S. +fainéante/F. +fainéanter/a0p. +fainéantise/S. +fainéantiser +faire/wD +faire-part +faire-valoir +fair-play +fair-play +fairway/S. +faisabilité/S. +faisable/S. +faisandage/S. +faisandeau/X. +faisander/a0p+ +faisanderie/S. +faisandière/F. +faisane/F. +faisanneau/X. +faisceau/X. +faiseuse/F. +faisselle/S. +fait/S. +faîtage/S. +faîte/S. +faîteau/X. +faîtière/F. +faitout/S. +fait-tout +faix +fajita/S. +fakir/S. +fakirisme/S. +falafel/S. +falaise/S. +falarique/S. +falbala/S. +falciforme/S. +falconidé/S. +falconiforme/S. +faldistoire/S. +falerne/S. +fallacieuse/W. +fallacieusement +falloir/qA +falot/S. +falote/F. +faloter +falourde/S. +falsetto/S. +falsifiabilité/S. +falsifiable/S. +falsification/S. +falsificationnisme/S. +falsificatrice/F. +falsifier/a0p+ +faluche/S. +falun/S. +faluner/a0p+ +falunière/S. +falzar/S. +famée/F. +famélique/S. +famennoise/F. +fameuse/W. +fameusement +familiale/W. +familialement +familialisme/S. +familialiste/S. +familiarisation/S. +familiariser/a0p+ +familiarité/S. +familias +familière/F. +familièrement +familistère/S. +famille/S. +famine/S. +fan/S. +fanage/S. +fanaison/S. +fanal/X. +fanatique/S. +fanatiquement +fanatisante/F. +fanatiser/a0p+ +fanatisme/S. +fanchon/S. +fan-club/S. +fancy-fair/S. +fandango/S. +fane/S. +faner/a0p+ +faneuse/F. +fanfare/S. +fanfaronnade/S. +fanfaronne/F. +fanfaronner/a0p. +fanfiction/S. +fanfreluche/S. +fanfrelucher/a0p+ +fange/S. +fangeuse/W. +fangothérapie/S. +fanion/S. +fanny +fanon/S. +fantaisie/S. +fantaisiste/S. +fantaliser/a0p+ +fantasia/S. +fantasmagorie/S. +fantasmagorique/S. +fantasmatique/S. +fantasmatiquement +fantasme/S. +fantasmer/a0p+ +fantasque/S. +fantasquement +fantassin/S. +fantastique/S. +fantastiquement +fantasy +fantoche/S. +fantomale/W. +fantomatique/S. +fantomatiquement +fantôme/S. +fanton/S. +fanzine/S. +faon/S. +faquin/S. +far/S. +farad/Um +faraday/S. +faradique/S. +faradisation/S. +faramineuse/W. +farandole/S. +faraude/F. +farce/S. +farceuse/F. +farcin/S. +farcir/f0p+ +fard/S. +fardage/S. +farde/S. +fardeau/X. +fardelage/S. +fardeler/d0p+ +fardeleuse/S. +farder/a0p+ +fardier/S. +fardoches +farfadet/S. +farfalle +farfalle/S. +farfelue/F. +farfouiller/a0p+ +farfouilleuse/F. +farguer +fargues +faribole/S. +farigoule/S. +farinacée/F. +farinage/S. +farine/S. +fariner/a0p+ +farineuse/W. +farinière/F. +fario/S. +farlouse/S. +farnésol/S. +farniente/S. +faro/S. +farouch/S. +farouche/S. +farouchement +farrago/S. +farsi/S. +fart/S. +fartage/S. +farter/a0p+ +fasce/S. +fascée/F. +fascia/S. +fasciation/S. +fasciculation/S. +fascicule/S. +fasciculée/F. +fasciée/F. +fascinage/S. +fascinante/F. +fascination/S. +fascinatoire/S. +fascinatrice/F. +fascine/S. +fasciner/a0p+ +fascisante/F. +fascisation/S. +fasciser/a0p+ +fascisme/S. +fasciste/S. +faséier +faseiller +faseyer/a0p. +faséyer/c0p. +fashionista/S. +faste/S. +faste/S. +fast-food/S. +fastidieuse/W. +fastidieusement +fastigiée/F. +fastoche/S. +fastueuse/W. +fastueusement +fat/S. +fatale/F. +fatalement +fatalisme/S. +fataliste/S. +fatalité/S. +fatidique/S. +fatidiquement +fatigabilité/S. +fatigable/S. +fatigante/F. +fatigue/S. +fatiguer/a0p+ +fatma +fatma/S. +fatras +fatrasie/S. +fatuité/S. +fatum +fatwa/S. +fauber/S. +faubérer/c0p. +faubert/S. +faubourg/S. +faubourienne/F. +faucard/S. +faucarder/a0p+ +faucardeuse/F. +fauchage/S. +fauchaison/S. +fauchard/S. +fauche/S. +faucher/a0p+ +fauchet/S. +fauchette/S. +faucheuse/F. +faucheux +fauchon/S. +faucille/S. +faucillon/S. +faucon/S. +fauconneau/X. +fauconner/a0p. +fauconnerie/S. +fauconnier/S. +faucre/S. +faufil/S. +faufilage/S. +faufiler/a0p+ +faufilure/S. +faune/S. +faunesque/S. +faunesse/F. +faunique/S. +faunistique/S. +faunistique/S. +faussaire/S. +fausse/W. +faussement +fausser/a0p+ +fausset/S. +fausseté/S. +faustienne/F. +faute/S. +fauter/a0p. +fauteuil/S. +fautive/F. +fautivement +fautrice/F. +fauve/S. +fauve/S. +fauverie/S. +fauvette/S. +fauvisme/S. +fauviste/S. +faux +faux-bourdon/S. +faux-cul/S. +faux-filet/S. +faux-fuyant/S. +faux-monnayeur/S. +faux-semblant/S. +faux-sens +favela +favela/S. +faverole/S. +faveur/S. +favique/S. +favisme/S. +favorable/S. +favorablement +favori/S. +favori/S. +favorisante/F. +favoriser/a0p+ +favorite/S. +favorite/S. +favoritisme/S. +favus +fax +faxer/a0p+ +fayalite/S. +fayard/S. +fayot/S. +fayotage/S. +fayoter/a0p. +fayotter/a0p. +fazenda/S. +féale/W. +féauté/S. +fébricule/S. +fébrifuge/S. +fébrifuge/S. +fébrile/S. +fébrilement +fébrilité/S. +fécale/W. +fécalome/S. +fèces +fécial/X. +fécondabilité/S. +fécondable/S. +fécondance/S. +fécondante/F. +fécondation/S. +fécondatrice/F. +féconde/F. +féconder/a0p+ +fécondité/S. +fécule/S. +féculence/S. +féculent/S. +féculente/F. +féculer/a0p+ +féculerie/S. +féculière/F. +feda'i +fedayin +fedayin/S. +fedda'i +feddayin +fédérale/W. +fédéralisation/S. +fédéraliser/a0p+ +fédéralisme/S. +fédéraliste/S. +fédération/S. +fédérative/F. +fédératrice/F. +fédérer/c0p+ +fée/S. +feed-back +feeder/S. +feeling/S. +féerie/S. +féerique/S. +féeriquement +feignante/F. +feignanter/a0p. +feignasse/S. +feijoada/S. +feindre/wB +feinte/S. +feinter/a0p+ +feinteuse/F. +feintise/S. +feld-maréchal/X. +feldspath/S. +feldspathique/S. +feldspathoïde/S. +feldwebel/S. +fêlée/F. +fêler/a0p+ +félibre/S. +félibrige/S. +félicitation/S. +félicité/S. +féliciter/a0p+ +félidé/S. +féline/F. +félinement +félinité/S. +fellaga/S. +fellagha/S. +fellah/S. +fellation/S. +félonie/S. +félonne/F. +felouque/S. +fêlure/S. +femelle/S. +femelle/S. +féminicide/S. +féminin/S. +féminine/F. +fémininement +féminisante/F. +féminisation/S. +féminiser/a0p+ +féminisme/S. +féministe/S. +féminité/S. +féminitude/S. +femme/S. +femmelette/S. +fémorale/W. +fémur/S. +fenaison/S. +fendage/S. +fendante/F. +fendard/S. +fendart/S. +fendeuse/F. +fendille/S. +fendillement/S. +fendiller/a0p+ +fendoir/S. +fendre/tA +fenestrage/S. +fenestration/S. +fenestrer/a0p+ +fénéthylline/S. +fenêtrage/S. +fenêtre/S. +fenêtrer/a0p+ +feng +fenil/S. +fennec/S. +fenouil/S. +fenouillet/S. +fenouillette/S. +fente/S. +fenton/S. +fenugrec/S. +fenwick/S. +féodale/W. +féodalement +féodalisation/S. +féodalisme/S. +féodalité/S. +fer/S. +féra/S. +férale/W. +féralies +férals +fer-blanc +ferblanterie/S. +ferblantière/F. +fériale/W. +férie/S. +fériée/F. +féringienne/F. +férir/iX +ferler/a0p+ +fermage/S. +fermail/X. +fermante/F. +ferme/S. +ferme/S. +fermement +ferment/S. +fermentable/S. +fermentante/F. +fermentation/S. +fermentative/F. +fermentée/F. +fermenter/a0p. +fermentescible/S. +fermenteur/S. +fermer/a0p+ +fermeté/S. +fermette/S. +fermeture/S. +fermi/S. +fermière/F. +fermion/S. +fermionique/S. +fermium/S. +fermoir/S. +féroce/S. +férocement +férocité/S. +féroïenne/F. +ferrade/S. +ferrage/S. +ferraillage/S. +ferraille/S. +ferraillement/S. +ferrailler/a0p. +ferrailleuse/F. +ferrallitique/S. +ferraraise/F. +ferrate/S. +ferratier/S. +ferrement/S. +ferrer/a0p+ +ferret/S. +ferretier/S. +ferreuse/F. +ferreuse/W. +ferricyanure/S. +ferrière/S. +ferrifère/S. +ferrimagnétique/S. +ferrimagnétisme/S. +ferriprive/S. +ferrique/S. +ferrite/S. +ferritine/S. +ferroalliage/S. +ferro-alliage/S. +ferrocérium/S. +ferrochrome/S. +ferrociment/S. +ferrocyanure/S. +ferroélasticité/S. +ferroélectricité/S. +ferro-électricité/S. +ferroélectrique/S. +ferro-électrique/S. +ferrofluide/S. +ferromagnésienne/F. +ferro-magnésienne/F. +ferromagnétique/S. +ferromagnétisme/S. +ferromanganèse/S. +ferron/S. +ferronickel/S. +ferro-nickel/S. +ferronnerie/S. +ferronnière/F. +ferroprotéine/S. +ferroprussiate/S. +ferrosilicium/S. +ferro-silicium/S. +ferrotypie/S. +ferroutage/S. +ferrouter/a0p+ +ferroutière/F. +ferrovanadium/S. +ferroviaire/S. +ferrugineuse/W. +ferrure/S. +ferry/A. +ferry-boat/S. +fers-blancs +fertile/S. +fertilement +fertilisable/S. +fertilisant/S. +fertilisante/F. +fertilisation/S. +fertilisatrice/F. +fertiliser/a0p+ +fertilité/S. +fertirrigation/S. +férule/S. +fervemment +fervente/F. +ferveur/S. +fesse/S. +fessée/S. +fesse-mathieu/X. +fesser/a0p+ +fesseuse/F. +fessière/F. +fessue/F. +festin/S. +festival/S. +festivalière/F. +festive/F. +festivité/S. +fest-noz +festoiement/S. +feston/S. +festonnage/S. +festonnement/S. +festonner/a0p+ +festoù-noz +festoyer/a0p+ +festoyeuse/F. +feta/S. +fêtarde/F. +fête/S. +fêter/a0p+ +fétiche/S. +fétiche/S. +féticher/a0p+ +féticheur/S. +fétichisation/S. +fétichiser/a0p+ +fétichisme/S. +fétichiste/S. +fétide/S. +fétidité/S. +fettucine +fettucine/S. +fétu/S. +fétuque/S. +feu/X. +feudataire/S. +feudiste/S. +feue/F. +feuil/S. +feuillage/S. +feuillagiste/S. +feuillaison/S. +feuillant/S. +feuillantine/S. +feuillard/S. +feuillardière/F. +feuille/S. +feuille-morte +feuiller/a0p+ +feuilleret/S. +feuillet/S. +feuilletage/S. +feuilleter/d0p+ +feuilletis +feuilletiser/a0p+ +feuilleton/S. +feuilletonesque/S. +feuilletoniste/S. +feuilletonnesque/S. +feuillue/F. +feuillure/S. +feuj/S. +feulement/S. +feuler/a0p. +feutrage/S. +feutrante/F. +feutre/S. +feutrer/a0p+ +feutrière/F. +feutrine/S. +fève/S. +féverole/S. +févier/S. +févr +février/S. +fez +fi +fiabilisation/S. +fiabiliser/a0p+ +fiabiliste/S. +fiabilité/S. +fiable/S. +fiablement +fiacre/S. +fiançailles +fiancée/F. +fiancer/a0p+ +fianchetto/S. +fiasco/S. +fiasque/S. +fiat +fibrage/S. +fibranne/S. +fibration/S. +fibre/S. +fibrer/a0p+ +fibreuse/W. +fibrillaire/S. +fibrillation/S. +fibrille/S. +fibrilleuse/W. +fibrine/S. +fibrinémie/S. +fibrineuse/W. +fibrinogène/S. +fibrinolyse/S. +fibrinolytique/S. +fibroblaste/S. +fibrociment/S. +fibrocyte/S. +fibroïne/S. +fibrokystique/S. +fibromateuse/W. +fibromatose/S. +fibrome/S. +fibromyalgie/S. +fibromyalgique/S. +fibromyome/S. +fibrosarcome/S. +fibroscope/S. +fibroscopie/S. +fibrose/S. +fibula/S. +fibule/S. +fic/S. +ficaire/S. +ficelage/S. +ficeler/d0p+ +ficelle/S. +ficellerie/S. +fichage/S. +fichante/F. +fiche/S. +ficher/a0p+ +fichet/S. +fichier/S. +fichiste/S. +fichoir/S. +fichtre +fichtrement +fichue/F. +fiction/S. +fictionnalisation/S. +fictionnelle/F. +fictive/F. +fictivement +ficus +fidéicommis +fidéicommissaire/S. +fidéisme/S. +fidéiste/S. +fidéjusseur/S. +fidéjussion/S. +fidéjussoire/S. +fidèle/S. +fidèlement +fidélisante/F. +fidélisation/S. +fidéliser/a0p+ +fidélité/S. +fidjienne/F. +fiduciaire/S. +fiduciairement +fiduciant/S. +fiducie/S. +fief/S. +fieffer/a0p+ +fiel/S. +fielleuse/W. +fielleusement +fiente/S. +fienter/a0p. +fier/a0p+ +fier-à-bras +fière/F. +fièrement +fiérote/F. +fiers-à-bras +fierté/S. +fiesta/S. +fieu/X. +fièvre/S. +fiévreuse/W. +fiévreusement +fifille/S. +fifre/S. +fifrelin/S. +fifties +fifty-fifty +fig +figaro/S. +figeage/S. +figement/S. +figer/a0p+ +fignolage/S. +fignoler/a0p+ +fignoleuse/F. +figue/S. +figueraie/S. +figuerie/S. +figuier/S. +figuline/S. +figurable/S. +figuralisme/S. +figurante/F. +figuration/S. +figurative/F. +figurativement +figure/S. +figurément +figurer/a0p+ +figurine/S. +figuriniste/S. +figurisme/S. +figuriste/S. +fil/S. +filable/S. +filage/S. +filaire/S. +filaire/S. +filament/S. +filamenteuse/W. +filandière/S. +filandre/S. +filandreuse/W. +filante/F. +filanzane/S. +filao/S. +filariose/S. +filasse +filasse/S. +filateur/S. +filature/S. +fildefériste/S. +fil-de-fériste/S. +file/S. +filer/a0p+ +filerie/S. +filet/S. +filetage/S. +fileté/S. +fileter/b0p+ +fileuse/F. +fileyeur/S. +filiale/W. +filialement +filialisation/S. +filialiser/a0p+ +filialité/S. +filiation/S. +filicinée/S. +filicophyte/S. +filière/S. +filiforage/S. +filiforme/S. +filigrane/S. +filigraner/a0p+ +filin/S. +filioque +filipendule/S. +filipendule/S. +fillasse/S. +fille/S. +fillette/S. +filleule/F. +film/S. +filmage/S. +filmer/a0p+ +filmeuse/F. +filmique/S. +filmo/S. +filmographie/S. +filmologie/S. +filmothèque/S. +filocher/a0p+ +filon/S. +filonienne/F. +filoselle/S. +filou/S. +filoutage/S. +filouter/a0p+ +filouterie/S. +filovirus +fils +filsdeputerie/S. +filtrable/S. +filtrage/S. +filtrante/F. +filtrat/S. +filtration/S. +filtre/S. +filtre-presse +filtrer/a0p+ +filtres-presses +filtreuse/F. +fin +fin/S. +finage/S. +finale/F. +finale/S. +finalement +finalisation/S. +finaliser/a0p+ +finalisme/S. +finaliste/S. +finalitaire/S. +finalité/S. +finançable/S. +finance/S. +financement/S. +financer/a0p+ +financeuse/F. +financiarisation/S. +financiariser/a0p+ +financiarisme/S. +financière/F. +financièrement +finasser/a0p+ +finasserie/S. +finasseuse/F. +finassière/F. +finaude/F. +finauderie/S. +finaux +fine/F. +finement +finerie/S. +finesse/S. +finette/S. +fingerprinting/S. +finir/f0p+ +finish +finissage/S. +finissante/F. +finisseur/S. +finisseuse/F. +finistérienne/F. +finition/S. +finitisme/S. +finitiste/S. +finitude/S. +finlandaise/F. +finlandisation/S. +finlandiser/a0p+ +finnoise/F. +finno-ougrien/S. +finno-ougrienne/F. +finslérienne/S. +fiole/S. +fion/S. +fioriture/S. +fiotte/S. +fioul/S. +fiqh/S. +firmament/S. +firman/S. +firme/S. +firmware/S. +fisc/S. +fiscale/W. +fiscalement +fiscalisation/S. +fiscaliser/a0p+ +fiscaliste/S. +fiscalité/S. +fish-eye/S. +fissa +fissible/S. +fissile/S. +fission/S. +fissionner/a0p+ +fissipare/S. +fissurale/W. +fissuration/S. +fissure/S. +fissurer/a0p+ +fiston/S. +fistot/S. +fistulaire/S. +fistulaire/S. +fistule/S. +fistuleuse/W. +fistuline/S. +fistulisante/F. +fitness +fiu/S. +fixable/S. +fixage/S. +fixateur/S. +fixatif/S. +fixation/S. +fixative/F. +fixatrice/F. +fixe/S. +fixe/S. +fixe-chaussette/S. +fixement +fixer/a0p+ +fixette/S. +fixeuse/F. +fixing/S. +fixisme/S. +fixiste/S. +fixité/S. +fjeld/S. +fjord/S. +fla +flabellation/S. +flabelle/S. +flabellée/F. +flabelliforme/S. +flac +flac/S. +flaccide/S. +flaccidité/S. +flache/S. +flache/S. +flacherie/S. +flacheuse/W. +flacon/S. +flaconnage/S. +flaconnier/S. +fla-fla/S. +flagada/S. +flagellaire/S. +flagellante/F. +flagellation/S. +flagellatrice/F. +flagelle/S. +flageller/a0p+ +flagelline/S. +flagellum/S. +flageolante/F. +flageolement/S. +flageoler/a0p. +flageolet/S. +flagorner/a0p+ +flagornerie/S. +flagorneuse/F. +flagrance/S. +flagrante/F. +flair/S. +flairer/a0p+ +flaireuse/F. +flamande/F. +flamant/S. +flambage/S. +flambante/F. +flambard/S. +flambart/S. +flambe/S. +flambeau/X. +flambée/S. +flambement/S. +flamber/a0p+ +flamberge/S. +flambeuse/F. +flamboiement/S. +flamboyance/S. +flamboyant/S. +flamboyante/F. +flamboyer/a0p. +flamenco/S. +flamiche/S. +flamine/S. +flamingante/F. +flamingantisme/S. +flamme/S. +flammèche/S. +flammée/F. +flammekueche/S. +flammerole/S. +flan/S. +flânage/S. +flanc/S. +flanc-garde +flancher/a0p+ +flanchet/S. +flanconade/S. +flancs-gardes +flandricisme/S. +flandrin/S. +flanelle/S. +flâner/a0p. +flânerie/S. +flâneuse/F. +flânocher/a0p. +flanquement/S. +flanquer/a0p+ +flapie/F. +flaque/S. +flaquer/a0p. +flash/A. +flashage/S. +flash-back +flashball/S. +flash-ball/S. +flasher/a0p+ +flasheuse/F. +flashmètre/S. +flashy +flasque/S. +flasquement +flatter/a0p+ +flatterie/S. +flatteuse/F. +flatteusement +flatulence/S. +flatulente/F. +flatuosité/S. +flaugnarde/S. +flauper/a0p+ +flavescente/F. +flaveur/S. +flavine/S. +flavone/S. +flavonoïde/S. +fléau/X. +fléchage/S. +flèche/S. +flécher/c0p+ +fléchette/S. +fléchir/f0p+ +fléchissante/F. +fléchissement/S. +fléchisseur/S. +flegmatique/S. +flegmatiquement +flegmatisant/S. +flegmatisme/S. +flegme/S. +flein/S. +flemmarde/F. +flemmarder/a0p. +flemmardise/S. +flemme/S. +flemmingite/S. +fléole/S. +flet/S. +flétan/S. +flétrir/f0p+ +flétrissante/F. +flétrissement/S. +flétrissure/S. +flette/S. +fleur/S. +fleurage/S. +fleuraison/S. +fleurdeliser/a0p+ +fleurer/a0p+ +fleuret/S. +fleurette/S. +fleurettiste/S. +fleurir/f0p+ +fleurissante/F. +fleurissement/S. +fleuriste/S. +fleuron/S. +fleuronnée/F. +fleuve/S. +flexibilisation/S. +flexibiliser/a0p+ +flexibilité/S. +flexible/S. +flexicurité/S. +flexion/S. +flexionnelle/F. +flexisécurité/S. +flexitarienne/F. +flexographe/S. +flexographie/S. +flexueuse/W. +flexum/S. +flexuosité/S. +flexure/S. +flibuste/S. +flibuster/a0p+ +flibusterie/S. +flibustier/S. +flic/S. +flicage/S. +flicaille/S. +flicarde/F. +flingot/S. +flingoter +flingue/S. +flinguer/a0p+ +flingueuse/F. +flint/S. +flipot/S. +flippante/F. +flipper/S. +flipper/a0p. +fliquer/a0p+ +fliquesse/S. +fliquette/S. +flirt/S. +flirter/a0p. +flirteuse/F. +floc/S. +flocage/S. +floche/S. +floche/S. +flock-book/S. +flocon/S. +floconnement/S. +floconner/a0p. +floconneuse/W. +floculation/S. +floculer/a0p. +floe/S. +flognarde/S. +flonflon/S. +flood +flop/S. +flopée/S. +flops/Ui +floquer/a0p+ +floraison/S. +florale/W. +floralies +flore/S. +floréal/S. +florence/S. +florencée/F. +florentine/F. +florès +floribondité/S. +floricole/S. +floricultrice/F. +floriculture/S. +floridée/S. +florifère/S. +florilège/S. +florin/S. +florissante/F. +floristique/S. +floristique/S. +flosculeuse/W. +flot/S. +flottabilité/S. +flottable/S. +flottage/S. +flottaison/S. +flottante/F. +flottard/S. +flottation/S. +flotte/S. +flottement/S. +flotter/a0p+ +flotteur/S. +flottille/S. +floue/F. +flouer/a0p+ +flouser/a0p. +floutage/S. +flouter/a0p+ +flouve/S. +flouze/S. +fluage/S. +fluate/S. +fluber/a0p. +fluctuante/F. +fluctuation/S. +fluctuer/a0p. +fludioxonil/S. +fluence/S. +fluente/F. +fluer/a0p. +fluette/F. +fluide/S. +fluide/S. +fluidement +fluidifiante/F. +fluidification/S. +fluidifier/a0p+ +fluidique/S. +fluidisation/S. +fluidiser/a0p+ +fluidité/S. +fluo +fluocompacte/F. +fluofibre/S. +fluor/S. +fluoration/S. +fluorée/F. +fluorescéine/S. +fluorescence/S. +fluorescente/F. +fluorhydrique/S. +fluorifère/S. +fluorine/S. +fluorique/S. +fluorisation/S. +fluoriser/a0p+ +fluorite/S. +fluorographie/S. +fluorophore/S. +fluoroquinolone/S. +fluoroscopie/S. +fluorose/S. +fluoruration/S. +fluorure/S. +fluosilicate/S. +fluotournage/S. +flupyrsulfuron/S. +flurer +flurochloridone/S. +flush/A. +flustre/S. +flûte/S. +flûteau/X. +flûter/a0p+ +flûtiau/X. +flûtiste/S. +fluviale/W. +fluviatile/S. +fluvio-glaciaire/S. +fluviographe/S. +fluviomètre/S. +fluviométrique/S. +flux +fluxer/a0p+ +fluxion/S. +fluxionnaire/S. +fluxmètre/S. +fluxomique/S. +flyer/S. +flysch/S. +fm/||-- +foc/S. +focaccia/S. +focale/W. +focalisante/F. +focalisation/S. +focaliser/a0p+ +focomètre/S. +focométrie/S. +focométrique/S. +focus +foehn/S. +foène/S. +foëne/S. +foëner/a0p+ +foéner/c0p+ +fœtale/W. +fœticide/S. +fœtologie/S. +fœto-maternelle/F. +fœtopathie/S. +fœtoscopie/S. +fœtoscopique/S. +fœtus +fofolle/W. +foggara/S. +föhn/S. +foi/S. +foie/S. +foil/S. +foin/S. +foirade/S. +foirail/S. +foire/S. +foirer/a0p. +foireuse/W. +foirolle/S. +foiron/S. +fois +foison +foisonnante/F. +foisonnement/S. +foisonner/a0p. +folache/S. +folasse/S. +folate/S. +folâtre/S. +folâtrement +folâtrer/a0p. +folâtrerie/S. +foldingue/S. +foliacée/F. +foliaire/S. +foliation/S. +folichonne/F. +folichonner/a0p. +folichonnerie/S. +folie/S. +foliée/F. +folingue/S. +folio/S. +foliole/S. +foliot/S. +foliotage/S. +folioter/a0p+ +folioteuse/F. +folique/S. +folk/S. +folk/S. +folkeuse/W. +folklo +folklore/S. +folklorique/S. +folklorisation/S. +folkloriser/a0p+ +folkloriste/S. +folksong/S. +folle/F. +follement +follette/F. +folliculaire/S. +follicule/S. +folliculine/S. +folliculite/S. +fomentation/S. +fomentatrice/F. +fomenter/a0p+ +fomenteuse/F. +fonçage/S. +fonçaille/S. +foncement/S. +foncer/a0p+ +fonceuse/F. +foncière/F. +foncièrement +foncteur/S. +fonction/S. +fonctionnaire/S. +fonctionnalisation/S. +fonctionnaliser/a0p+ +fonctionnalisme/S. +fonctionnaliste/S. +fonctionnalité/S. +fonctionnariat/S. +fonctionnarisation/S. +fonctionnariser/a0p+ +fonctionnarisme/S. +fonctionnelle/F. +fonctionnellement +fonctionnement/S. +fonctionner/a0p. +fonctorialité/S. +fonctorielle/F. +fond/S. +fondamentale/W. +fondamentalement +fondamentalisme/S. +fondamentaliste/S. +fondamentalité/S. +fondante/F. +fondation/S. +fondatrice/F. +fondée/F. +fondement/S. +fonder/a0p+ +fonderie/S. +fondeuse/F. +fondoir/S. +fondouk/S. +fondre/tA +fondrière/S. +fonds +fondue/F. +fongibilité/S. +fongible/S. +fongicide/S. +fongicide/S. +fongiforme/S. +fongique/S. +fongistatique/S. +fongoïde/S. +fongosité/S. +fongueuse/W. +fongus +fonio/S. +fontaine/S. +fontainebleau/X. +fontainière/F. +fontanelle/S. +fontange/S. +fontanili/S= +fonte/S. +fontis +fonts +foot/S. +football/S. +footballer/S. +footballeuse/F. +footballistique/S. +footeuse/W. +footing/S. +for/S. +forage/S. +foraine/F. +foramen/I. +foraminée/F. +foraminifère/S. +foraminifère/S. +forban/S. +forçage/S. +forçat/S. +force/S. +forcément +forcement/S. +forcenée/F. +forceps +forcer/a0p+ +forcerie/S. +forcing/S. +forcipressure/S. +forcir/f0p. +forclore/rD +forclusion/S. +fordienne/F. +fordisme/S. +fordiste/S. +forensique/S. +forer/a0p+ +forestage/S. +foresterie/S. +forestière/F. +foret/S. +forêt/S. +forêt-noire +forêts-noires +foreuse/F. +forfaire/wF +forfait/S. +forfaitaire/S. +forfaitairement +forfaitiser/a0p+ +forfaitiste/S. +forfaiture/S. +forfanterie/S. +forficule/S. +forge/S. +forgeable/S. +forgeage/S. +forger/a0p+ +forgerie/S. +forgeronne/F. +forgeuse/F. +forint/S. +forjeter/d0p+ +fork/S. +forlancer/a0p+ +forlane/S. +forligner/a0p. +forlonger/a0p+ +formable/S. +formage/S. +formaldéhyde/S. +formalisable/S. +formalisante/F. +formalisation/S. +formaliser/a0p+ +formalisme/S. +formaliste/S. +formalité/S. +formante/F. +formariage/S. +format/S. +formatage/S. +formater/a0p+ +formation/S. +formative/F. +formatrice/F. +forme/S. +formelle/F. +formellement +formène/S. +former/a0p+ +formeret/S. +formeuse/F. +formiate/S. +formica/S. +formicaliser/a0p+ +formicante/F. +formication/S. +formidable/S. +formidablement +formière/F. +formique/S. +formiste/S. +formol/S. +formoler/a0p+ +formosane/F. +formulable/S. +formulaire/S. +formulation/S. +formule/S. +formuler/a0p+ +formyle/S. +fornication/S. +fornicatrice/F. +forniquer/a0p. +fornix +fors +forstérite/S. +forsythia/S. +fort +forte +forte +forte/F. +fortement +forte-piano +forteresse/S. +fortiche/S. +fortifiante/F. +fortification/S. +fortifier/a0p+ +fortin/S. +fortiori +fortissimo +fortissimo +fortissimo/S. +fortraite/F. +fortraiture/S. +fortuite/F. +fortuité/S. +fortuitement +fortune/S. +fortunée/F. +forum/S. +forumeuse/F. +forure/S. +fosse/S. +fossé/S. +fossette/S. +fossile/S. +fossile/S. +fossilifère/S. +fossilisation/S. +fossiliser/a0p+ +fossoir/S. +fossoyer/a0p+ +fossoyeuse/F. +fouace/S. +fouacier/S. +fouage/S. +fouaille/S. +fouailler/a0p+ +foucade/S. +fouchtra +fouder/a0p+ +foudre/S. +foudroiement/S. +foudroyage/S. +foudroyante/F. +foudroyer/a0p+ +fouée/S. +fouet/S. +fouettarde/F. +fouettement/S. +fouetter/a0p+ +fouetteuse/F. +foufoune/S. +fougasse/S. +fouger/a0p. +fougeraie/S. +fougère/S. +fougerole/S. +fougue/S. +fougueuse/W. +fougueusement +fouille/S. +fouiller/a0p+ +fouilleuse/F. +fouillis +fouinarde/F. +fouine/S. +fouiner/a0p. +fouineuse/F. +fouir/f0p+ +fouissage/S. +fouissement/S. +fouisseuse/F. +foulage/S. +foulante/F. +foulard/S. +foule/S. +foulée/S. +foulement/S. +fouler/a0p+ +foulerie/S. +fouleuse/F. +fouloir/S. +foulon/S. +foulonnage/S. +foulonnier/S. +foulonnière/F. +foulque/S. +foultitude/S. +foulure/S. +four/S. +fourailler/a0p+ +fourbe/S. +fourbement +fourber/a0p+ +fourberie/S. +fourbir/f0p+ +fourbissage/S. +fourbisseur/S. +fourbue/F. +fourbure/S. +fourche/S. +fourchée/S. +fourcher/a0p+ +fourchet/S. +fourchetée/S. +fourchette/S. +fourchon/S. +fourchue/F. +fourchure/S. +fourgat/S. +fourgon/S. +fourgonner/a0p. +fourgonnette/S. +fourgue/S. +fourguer/a0p+ +fouriérisme/S. +fouriériste/S. +fourme/S. +fourmi/S. +fourmilier/S. +fourmilière/S. +fourmi-lion +fourmilion/S. +fourmillante/F. +fourmillement/S. +fourmiller/a0p. +fourmis-lions +fournaise/S. +fourneau/X. +fournée/S. +fournière/F. +fournil/S. +fourniment/S. +fournir/f0p+ +fournissement/S. +fournisseuse/F. +fourniture/S. +fourrage/S. +fourrager/a0p+ +fourragère/F. +fourrageur/S. +fourré/S. +fourreau/X. +fourrer/a0p+ +fourre-tout +fourreuse/F. +fourrière/F. +fourrure/S. +fourvoiement/S. +fourvoyante/F. +fourvoyer/a0p+ +foutage/S. +foutaise/S. +fouteuse/F. +foutoir/S. +foutou/S. +foutrale/F. +foutraque/S. +foutre/S. +foutre/tM +foutredieu +foutrement +foutrerie/S. +foutriquet/S. +foutue/F. +fovéa/S. +fovéale/W. +fox +foxée/F. +fox-hound/S. +fox-terrier/S. +fox-trot +foyer/S. +fr/||-- +frac/S. +fracas +fracassante/F. +fracassement/S. +fracasser/a0p+ +fracasseuse/F. +fractale/F. +fractale/S. +fractile/S. +fraction/S. +fractionnable/S. +fractionnaire/S. +fractionnelle/F. +fractionnement/S. +fractionner/a0p+ +fractionnisme/S. +fractionniste/S. +fractographie/S. +fracturation/S. +fracture/S. +fracturer/a0p+ +fragile/S. +fragilement +fragilisante/F. +fragilisation/S. +fragiliser/a0p+ +fragilité/S. +fragment/S. +fragmentaire/S. +fragmentairement +fragmentation/S. +fragmenter/a0p+ +fragon/S. +fragrance/S. +fragrante/F. +frai/S. +fraîche/F. +fraîche/S. +fraîchement +fraîcheur/S. +fraîchin/S. +fraîchir/f0p. +fraîchissante/F. +frairie/S. +frais +frais +fraisage/S. +fraise/S. +fraiser/a0p+ +fraiseraie/S. +fraiseuse/F. +fraisicultrice/F. +fraisier/S. +fraisière/S. +fraisiériste/S. +fraisil/S. +fraisure/S. +framboise/S. +framboiser/a0p+ +framboisier/S. +framée/S. +framework/S. +franc/S. +franca +française/F. +franc-alleu +franc-bord +franc-bourgeois +franche/S. +franchement +franchir/f0p+ +franchisage/S. +franchise/S. +franchisée/F. +franchiser/a0p+ +franchiseuse/F. +franchissable/S. +franchissement/S. +franchouillarde/F. +francien/S. +francienne/F. +francilienne/F. +francique/S. +francisable/S. +francisante/F. +francisation/S. +franciscaine/F. +franciser/a0p+ +francisme/S. +francisque/S. +franciste/S. +francité/S. +francium/S. +franc-jeu +franc-maçon +franc-maçonne/S. +franc-maçonnerie/S. +franc-maçonnique/S. +franco +franco-afghane/F. +franco-albanaise/F. +franco-algérienne/F. +franco-allemande/F. +franco-américaine/F. +franco-anglaise/F. +franco-argentine/F. +franco-autrichienne/F. +franco-belge/S. +franco-bolivienne/F. +franco-bosniaque/S. +franco-brésilienne/F. +franco-bulgare/S. +franco-canadienne/F. +francocentrisme/S. +franco-chilienne/F. +franco-colombienne/F. +franco-coréenne/F. +franco-croate/S. +franco-cubaine/F. +franco-danoise/F. +franco-équatorienne/F. +franco-espagnole/F. +franco-finlandaise/F. +franco-française/F. +franco-haïtienne/F. +franco-hongroise/F. +franco-indienne/F. +franco-indonésienne/F. +franco-irakienne/F. +franco-iranienne/F. +franco-islandaise/F. +franco-italienne/F. +franco-japonaise/F. +franco-lettonne/F. +franco-libanaise/F. +francolin/S. +franco-luxembourgeoise/F. +franco-macédonienne/F. +franco-marocaine/F. +franco-mexicaine/F. +franco-monégasque/S. +franco-néerlandaise/F. +franco-norvégienne/F. +franco-pakistanaise/F. +franco-panaméenne/F. +franco-paraguayenne/F. +franco-péruvienne/F. +francophile/S. +francophilie/S. +francophobe/S. +francophobie/S. +francophone/S. +francophonie/S. +francophoniser/a0p+ +franco-polonaise/F. +franco-provençal/X. +franco-provençale/W. +franco-québecoise/F. +franco-québécoise/F. +franco-roumaine/F. +franco-russe/S. +franco-slovaque/S. +franco-slovène/S. +franco-suédoise/F. +franco-suisse/S. +franco-surinamaise/F. +franco-tchèque/S. +franco-tunisienne/F. +franco-turque/F. +franco-ukrainienne/F. +franco-uruguayenne/F. +franco-vénézuélienne/F. +franco-vietnamienne/F. +franc-parler +franc-quartier +francs-alleux +francs-bords +francs-bourgeois +francs-jeux +francs-maçons +francs-parlers +francs-quartiers +francs-tireurs +francs-tireuses +franc-tireur +franc-tireuse +frange/S. +frangeante/F. +franger/a0p+ +frangine/F. +frangipane/S. +frangipanier/S. +franglais +franglophone/S. +franklinite/S. +franque/S. +franque/S. +franquette +franquisme/S. +franquiste/S. +fransquillonne/F. +fransquillonner/a0p. +frappadingue/S. +frappage/S. +frappante/F. +frappe/S. +frappement/S. +frapper/a0p+ +frappeuse/F. +frappologie/S. +frasil/S. +frasque/S. +frater/S. +fraternelle/F. +fraternellement +fraternisation/S. +fraterniser/a0p. +fraternité/S. +fratricide/S. +fratrie/S. +fraude/S. +frauder/a0p+ +fraudeuse/F. +frauduleuse/W. +frauduleusement +fraxinelle/S. +frayage/S. +frayement/S. +frayer/a0p+ +frayère/S. +frayeur/S. +frayoir/S. +freak/S. +fredaine/S. +fredonnement/S. +fredonner/a0p+ +free-jazz +free-lance +free-lance/S. +free-martin/S. +freemium/S. +free-shop/S. +freesia/S. +freestyle/S. +free-style/S. +freezer/S. +frégate/S. +frégater/a0p+ +frein/S. +freinage/S. +freinante/F. +freinatrice/F. +freiner/a0p+ +freineuse/F. +freinte/S. +fréjusienne/F. +frelatage/S. +frelater/a0p+ +frêle/S. +frelon/S. +freluche/S. +freluquet/S. +frémir/f0p. +frémissante/F. +frémissement/S. +frênaie/S. +french +frêne/S. +frénésie/S. +frénétique/S. +frénétiquement +fréon/S. +fréquemment +fréquence/S. +fréquencemètre/S. +fréquentable/S. +fréquentation/S. +fréquentative/F. +fréquente/F. +fréquenter/a0p+ +fréquentielle/F. +fréquentiste/S. +frère/S. +frérot/S. +fresque/S. +fresquiste/S. +fressure/S. +fret/S. +fréter/c0p+ +fréteur/S. +frétillante/F. +frétillement/S. +frétiller/a0p. +fretin/S. +frettage/S. +frette/S. +fretter/a0p+ +freudienne/F. +freudisme/S. +freux +friabilité/S. +friable/S. +friande/F. +friandise/S. +fric/S. +fricadelle/S. +fricandeau/X. +fricassée/S. +fricasser/a0p+ +fricasseuse/F. +fricative/F. +fric-frac +friche/S. +frichti/S. +fricot/S. +fricotage/S. +fricoter/a0p+ +fricoteuse/F. +friction/S. +frictionnelle/F. +frictionner/a0p+ +fridolin/S. +friendzone/S. +frigidaire/S. +frigidarium/S. +frigide/S. +frigidité/S. +frigo/S. +frigolite/S. +frigoporteur/S. +frigorie/S. +frigorifère/S. +frigorifier/a0p+ +frigorifique/S. +frigorifuger/a0p+ +frigorigène/S. +frigorigène/S. +frigorimètre/S. +frigoriste/S. +frigothérapie/S. +frileuse/W. +frileusement +frilosité/S. +frimaire/S. +frimas +frime/S. +frimer/a0p+ +frimeuse/F. +frimousse/S. +fringale/S. +fringante/F. +fringillidé/S. +fringue/S. +fringuer/a0p+ +frioulane/F. +fripe/S. +friper/a0p+ +friperie/S. +fripière/F. +friponne/F. +friponneau/X. +friponner/a0p+ +friponnerie/S. +fripouille/S. +fripouillerie/S. +friquer/a0p+ +friquet/S. +frire/yZ +frisage/S. +frisante/F. +frisbee/S. +frise/S. +friselis +friser/a0p+ +frisette/S. +frisko/S. +frisoir/S. +frisolée/S. +frisonne/F. +frisonner +frisottante/F. +frisotter/a0p+ +frisottis +frisquette/F. +frisson/S. +frissonnante/F. +frissonnement/S. +frissonner/a0p. +fristouiller/a0p+ +frisure/S. +frite/S. +friter/a0p+ +friterie/S. +friteuse/S. +fritillaire/S. +frittage/S. +fritte/S. +fritter/a0p+ +friture/S. +fritz +frivole/S. +frivolement +frivolité/S. +froc/S. +frocard/S. +froide/F. +froidement +froideur/S. +froidir/f0p. +froidure/S. +froissable/S. +froissante/F. +froissement/S. +froisser/a0p+ +froissure/S. +frôlement/S. +frôler/a0p+ +frôleuse/F. +fromage/S. +fromagée/F. +fromagère/F. +fromagerie/S. +froment/S. +fromental/X. +fromentale/W. +frometon/S. +fronce/S. +froncement/S. +froncer/a0p+ +fronceur/S. +froncis +frondaison/S. +fronde/S. +fronder/a0p+ +frondeuse/F. +front/S. +frontail/S. +frontale/W. +frontalement +frontalière/F. +frontalité/S. +fronteau/X. +frontière/S. +frontignan/S. +frontisme/S. +frontispice/S. +frontiste/S. +fronton/S. +fronto-temporale/W. +frottage/S. +frottante/F. +frotte-manche/S. +frottement/S. +frotter/a0p+ +frotteurisme/S. +frotteuse/F. +frotti-frotta +frottis +frottoir/S. +frotton/S. +frouer/a0p. +frou-frou +froufrou/S. +froufroutante/F. +froufroutement/S. +froufrouter/a0p. +froufrouteuse/W. +frous-frous +froussarde/F. +frousse/S. +frousser/a0p. +fructane/S. +fructicultrice/F. +fructiculture/S. +fructidor/S. +fructifère/S. +fructification/S. +fructifier/a0p. +fructose/S. +fructueuse/W. +fructueusement +fructuosité/S. +frugale/W. +frugalement +frugalité/S. +frugivore/S. +fruit/S. +fruitage/S. +fruitarienne/F. +fruitée/F. +fruiterie/S. +fruiticultrice/F. +fruitière/F. +fruition/S. +frumentacée/F. +frumentaire/S. +frumentaire/S. +frusque/S. +frusquer/a0p+ +fruste/S. +frustrante/F. +frustration/S. +frustratoire/S. +frustre/S. +frustrée/F. +frustrer/a0p+ +frustule/S. +frutescente/F. +fruticée/S. +frutti +ft/||-- +ftp/S= +fucale/S. +fuchsia +fuchsia/S. +fuchsienne/F. +fuchsine/S. +fucoxanthine/S. +fucus +fuégienne/F. +fuel/S. +fuel-oil/S. +fugace/S. +fugacement +fugacité/S. +fugitive/F. +fugitivement +fugu/S. +fugue/S. +fuguée/F. +fuguer/a0p. +fugueuse/F. +führer/S. +fuie/S. +fuir/f0p+ +fuir/iN +fuite/S. +fuiter/a0p+ +fulgurance/S. +fulgurante/F. +fulguration/S. +fulgurer/a0p+ +fulgurite/S. +fuligineuse/W. +fuligineusement +fuligule/S. +full/S. +fullerène/S. +fulmar/S. +fulmicoton/S. +fulminante/F. +fulminate/S. +fulmination/S. +fulminatoire/S. +fulminer/a0p+ +fulminique/S. +fulvique/S. +fumable/S. +fumage/S. +fumagine/S. +fumaison/S. +fumante/F. +fumariacée/S. +fumariacée/S. +fume-cigare +fume-cigarette +fumée/F. +fumer/a0p+ +fumerie/S. +fumerolle/S. +fumerollienne/F. +fumeron/S. +fumet/S. +fumeterre/S. +fumette/S. +fumeuse/F. +fumeuse/W. +fumier/S. +fumigateur/S. +fumigation/S. +fumigatoire/S. +fumigène/S. +fumiger/a0p+ +fumiste/S. +fumisterie/S. +fumivore/S. +fumivore/S. +fumoir/S. +fumure/S. +fun +funambule/S. +funambulesque/S. +funambulisme/S. +funboard/S. +funèbre/S. +funèbrement +funéraille/S. +funéraire/S. +funérale/W. +funérarium/S. +funeste/S. +funestement +funiculaire/S. +funicule/S. +funiculite/S. +funin/S. +funk +funk/S. +funky +funky/S. +fur +furane/S. +furanne/S. +furax +furcula/S. +furetage/S. +fureter/b0p. +fureteuse/F. +furette/F. +fureur/S. +furfuracée/F. +furfural/S. +furia/S. +furibarde/F. +furibonde/F. +furie/S. +furieuse/W. +furieusement +furigana +furigana/S. +furioso +furioso/S. +furole/S. +furoncle/S. +furonculeuse/W. +furonculose/S. +furosémide/S. +furtive/F. +furtivement +furtivité/S. +fusain/S. +fusainiste/S. +fusante/F. +fusariose/S. +fusarolle/S. +fuscine/S. +fuseau/X. +fusée/S. +fusel/S. +fuselage/S. +fuseler/d0p+ +fuséologie/S. +fuséologue/S. +fuser/a0p. +fusette/S. +fusibilité/S. +fusible/S. +fusiforme/S. +fusil/S. +fusilière/F. +fusillade/S. +fusiller/a0p+ +fusilleur/S. +fusil-mitrailleur +fusils-mitrailleurs +fusiniste/S. +fusion/S. +fusionnante/F. +fusionnelle/F. +fusionnellement +fusionnement/S. +fusionner/a0p+ +fustanelle/S. +fuste/S. +fustet/S. +fustibale/S. +fustigation/S. +fustiger/a0p+ +fusuline/S. +fût/S. +futaie/S. +futaille/S. +futaine/S. +futal/S. +futée/F. +futée/S. +fûtier/S. +futile/S. +futilement +futilité/S. +futon/S. +futsal/S. +future/F. +futurible/S. +futurisme/S. +futuriste/S. +futurologie/S. +futurologue/S. +fuxéenne/F. +fuyante/F. +fuyarde/F. +g +g/U.||-- +gabardine/S. +gabare/S. +gabariage/S. +gabarier/S. +gabarier/a0p+ +gabarit/S. +gabarre/S. +gabarrier/S. +gabbro/S. +gabbroïque/S. +gabegie/S. +gabelle/S. +gabelou/S. +gabian/S. +gabier/S. +gabion/S. +gabionnage/S. +gabionner/a0p+ +gable/S. +gâble/S. +gabonaise/F. +gâchage/S. +gâche/S. +gâcher/a0p+ +gâchette/S. +gâcheuse/F. +gâchis +gade/S. +gadget/S. +gadgétiser/a0p+ +gadidé/S. +gadin/S. +gadji/S. +gadjo/S. +gadolinium/S. +gadoue/S. +gadouille/S. +gadzarette/S. +gadzart/S. +gaélique/S. +gaffe/S. +gaffer/a0p+ +gaffeuse/F. +gafouiller +gag/S. +gaga/S. +gage/S. +gager/a0p+ +gageure/S. +gageuse/F. +gagiste/S. +gagman/A. +gagnable/S. +gagnage/S. +gagnante/F. +gagnant-gagnant +gagne +gagne-pain +gagne-petit +gagner/a0p+ +gagneuse/F. +gaguesque/S. +gaïac/S. +gaïacol/S. +gaie/F. +gaiement +gaieté/S. +gaillac/S. +gaillarde/F. +gaillardement +gaillardie/S. +gaillardise/S. +gaillet/S. +gailleterie/S. +gailletin/S. +gaîment +gain/S. +gainage/S. +gaine/S. +gainer/a0p+ +gaîner/a0p+ +gainerie/S. +gainière/F. +gaîté/S. +gal/S. +gal/||-- +gala/S. +galactagogue/S. +galactane/S. +galactique/S. +galactogène/S. +galactogène/S. +galactomètre/S. +galactophore/S. +galactophore/S. +galactorrhée/S. +galactosamine/S. +galactose/S. +galactosémie/S. +galactosidase/S. +galalithe/S. +galamment +galandage/S. +galante/F. +galanterie/S. +galantin/S. +galantine/S. +galapiat/S. +galate/S. +galathée/S. +galaxie/S. +galbante/F. +galbanum/S. +galbe/S. +galber/a0p+ +gale/S. +galéasse/S. +galée/S. +galéjade/S. +galéjer/a0p. +galène/S. +galénique/S. +galénisme/S. +galéopithèque/S. +galère/S. +galérer/c0p. +galerie/S. +galérien/S. +galeriste/S. +galerne/S. +galet/S. +galetage/S. +galetas +galette/S. +galetteuse/W. +galeuse/W. +galgal/S. +galhauban/S. +galibot/S. +galicienne/F. +galiléenne/F. +galimafrée/S. +galimatias +galion/S. +galiote/S. +galipette/S. +galipot/S. +galipoter/a0p+ +galle/S. +gallec/S. +gallérie/S. +gallicane/F. +gallicanisme/S. +gallicisme/S. +gallicole/S. +galliforme/S. +gallinacée/F. +gallinule/S. +gallique/S. +gallium/S. +gallo/S. +galloise/F. +gallomanie/S. +gallon/S. +gallo-romaine/F. +gallo-roman/S. +gallo-romane/F. +gallup/S. +galoche/S. +galoisienne/F. +galon/S. +galonner/a0p+ +galonnière/F. +galop/S. +galopade/S. +galopante/F. +galope/S. +galoper/a0p+ +galopeuse/F. +galopine/F. +galoubet/S. +galuchat/S. +galure/S. +galurin/S. +galvanique/S. +galvaniquement +galvanisante/F. +galvanisation/S. +galvaniser/a0p+ +galvaniseuse/F. +galvanisme/S. +galvanocautère/S. +galvanomagnétique/S. +galvanomètre/S. +galvanométrique/S. +galvanoplaste/S. +galvanoplastie/S. +galvanoplastique/S. +galvanoscope/S. +galvanostégie/S. +galvanotaxie/S. +galvanotropisme/S. +galvanotype/S. +galvanotypie/S. +galvaudage/S. +galvauder/a0p+ +galvaudeuse/W. +gamay/S. +gamba/S. +gambadante/F. +gambade/S. +gambader/a0p. +gambadeuse/F. +gambe/S. +gamberge/S. +gamberger/a0p+ +gambette/S. +gambienne/F. +gambier/S. +gambille/S. +gambiller/a0p. +gambiste/S. +gambit/S. +gambusie/S. +gamelan/S. +gameler/d0p+ +gamelle/S. +gamer/S. +gamétange/S. +gamète/S. +gamétique/S. +gamétocyte/S. +gamétogenèse/S. +gamétophyte/S. +gamétophytique/S. +gameuse/F. +gamin/S. +gamine/F. +gaminer/a0p. +gaminerie/S. +gamma +gammaglobuline/S. +gammagraphie/S. +gammare/S. +gammathérapie/S. +gamme/S. +gammée/F. +gammiste/S. +gamopétale/S. +gamopétale/S. +gamosépale/S. +gamut/S. +gan/S. +ganache/S. +ganacherie/S. +ganaderia/S. +gandin/S. +gandoura/S. +gang/S. +ganga/S. +gangétique/S. +ganglion/S. +ganglionnaire/S. +gangrène/S. +gangrener/b0p+ +gangreneuse/W. +gangster/S. +gangstérisme/S. +gangue/S. +ganguée/F. +gangui/S. +ganoïde/S. +ganoïde/S. +ganse/S. +ganser/a0p+ +gansette/S. +gant/S. +gantelée/F. +gantelet/S. +ganteline/S. +ganter/a0p+ +ganterie/S. +gantière/F. +gantoise/F. +gap/S. +garage/S. +garagiste/S. +garalde/S. +garançage/S. +garance +garance/S. +garancer/a0p+ +garancerie/S. +garanceur/S. +garancière/S. +garante/F. +garantie/S. +garantir/f0p+ +garba/S. +garbure/S. +garce/S. +garcette/S. +garçonne/F. +garçonnet/S. +garçonnière/F. +garde/S. +garde-à-vous +garde-barrière +garde-bœufs +garde-boue +garde-but +garde-cendre +garde-chasse +garde-chiourme +garde-corps +garde-côte +garde-côtes +garde-feu +garde-fou +garde-frein +garde-frontière +garde-magasin +garde-malade +garde-manège +garde-manger +garde-meubles +garde-mites +gardénal/S. +garde-nappe +gardénia/S. +garden-party/A. +garde-pêche +garde-places +garde-port +garder/a0p+ +garde-rats +garderie/S. +garde-robe/S. +gardes-barrières +gardes-buts +gardes-chasse +gardes-chiourme +gardes-côtes +gardes-freins +gardes-frontières +gardes-magasins +gardes-maisons +gardes-malades +gardes-manèges +gardes-pêche +gardes-ports +gardes-voies +gardeuse/F. +garde-voie +garde-vue +gardiane/F. +gardiennage/S. +gardienne/F. +gardienner/a0p+ +gardoise/F. +gardon/S. +gare/S. +garenne/S. +garer/a0p+ +gargamelle/S. +gargantua/S. +gargantuesque/S. +gargariser/a0p+ +gargarisme/S. +gargote/S. +gargoter/a0p. +gargotière/F. +gargouillade/S. +gargouille/S. +gargouillement/S. +gargouiller/a0p. +gargouillis +gargoulette/S. +gargousse/S. +garibaldienne/F. +gariguette/S. +garnement/S. +garniérite/S. +garnir/f0p+ +garnisaire/S. +garnison/S. +garnisonner/a0p+ +garnissage/S. +garnisseuse/F. +garniture/S. +garonnaise/F. +garou/S. +garrigue/S. +garriguette/S. +garrot/S. +garrottage/S. +garrotte/S. +garrotter/a0p+ +gars +garzette/S. +gasconnade/S. +gasconne/F. +gasconner/a0p. +gasconnisme/S. +gasoil/S. +gas-oil/S. +gaspacho/S. +gaspillage/S. +gaspiller/a0p+ +gaspilleuse/F. +gastéropode/S. +gastralgie/S. +gastralgique/S. +gastre/S. +gastrectomie/S. +gastrique/S. +gastrite/S. +gastro/S. +gastroduodénale/W. +gastro-duodénale/W. +gastro-entérite/S. +gastro-entérologie/S. +gastro-entérologue/S. +gastro-intestinale/W. +gastrolithe/S. +gastronome/S. +gastronomie/S. +gastronomique/S. +gastro-œsophagienne/F. +gastroplastie/S. +gastropode/S. +gastroscope/S. +gastroscopie/S. +gastrostomie/S. +gastrotomie/S. +gastrotriche/S. +gastrozoïde/S. +gastrula/S. +gastrulation/S. +gâteau/X. +gâte-bois +gâte-métiers +gâte-papiers +gâter/a0p+ +gâterie/S. +gâte-sauce +gâteuse/W. +gâtifier/a0p. +gâtine/S. +gâtisme/S. +gatte/S. +gattilier/S. +gauche/S. +gauchement +gauchère/F. +gaucherie/S. +gauchir/f0p+ +gauchisante/F. +gauchiser/a0p+ +gauchisme/S. +gauchissement/S. +gauchiste/S. +gaucho/S. +gauchosphère/S. +gaude/S. +gaudir/f0p+ +gaudriole/S. +gaufrage/S. +gaufre/S. +gaufrer/a0p+ +gaufrette/S. +gaufreuse/F. +gaufrier/S. +gaufroir/S. +gaufrure/S. +gaulage/S. +gaule/S. +gauleiter/S. +gauler/a0p+ +gaulette/S. +gaulis +gaullienne/F. +gaullisme/S. +gaulliste/S. +gauloise/F. +gauloisement +gauloiserie/S. +gaulthérie/S. +gaumaise/F. +gaupe/S. +gaur/S. +gauss/Ui +gausser/a0p+ +gausserie/S. +gaussienne/F. +gavache/S. +gavage/S. +gave/S. +gaver/a0p+ +gaveuse/F. +gavial/S. +gavotte/S. +gavroche/S. +gay +gay/S. +gayal/S. +gayolle/S. +gaz +gazage/S. +gazaouie/F. +gaze/S. +gazée/F. +gazéification/S. +gazéifier/a0p+ +gazéiforme/S. +gazelle/S. +gazer/a0p+ +gazetière/F. +gazette/S. +gazeuse/W. +gazière/F. +gazinière/S. +gazoduc/S. +gazogène/S. +gazole/S. +gazoline/S. +gazomètre/S. +gazométrie/S. +gazon/S. +gazonnage/S. +gazonnante/F. +gazonnement/S. +gazonner/a0p+ +gazonneuse/W. +gazouillante/F. +gazouillement/S. +gazouiller/a0p. +gazouilleuse/F. +gazouillis +geai/S. +géante/F. +géaster/S. +gecko/S. +geek/S. +geekerie/S. +geekette/S. +géhenne/S. +geignante/F. +geignarde/F. +geignement/S. +geindre/wA +geisha/S. +gel/S. +gélada/S. +gélatine/S. +gélatiner/a0p+ +gélatineuse/W. +gélatiniforme/S. +gélatinisation/S. +gélatiniser/a0p+ +gélatino-bromure/S. +gélatino-chlorure/S. +gelée/S. +geler/b0p+ +gélifiante/F. +gélification/S. +gélifier/a0p+ +gélifluxion/S. +gelinotte/S. +gélinotte/S. +gélisol/S. +géliturbation/S. +gélive/F. +gélivité/S. +gélivure/S. +gélose/S. +gélule/S. +gelure/S. +gémeau/X. +gémellaire/S. +gémelle/S. +gémellipare/S. +gémelliparité/S. +gémellité/S. +gémination/S. +géminée/S. +géminer/a0p+ +gémir/f0p+ +gémissante/F. +gémissement/S. +gémisseuse/F. +gemmage/S. +gemmail/X. +gemmation/S. +gemme/S. +gemmer/a0p+ +gemmeuse/F. +gemmifère/S. +gemmologie/S. +gemmologique/S. +gemmologiste/S. +gemmologue/S. +gemmule/S. +gémonies +gênante/F. +gencive/S. +gendarme/S. +gendarmer/a0p+ +gendarmerie/S. +gendarmesque/S. +gendarmette/S. +gendelettre/S. +gendre/S. +gène/S. +gêne/S. +généalogie/S. +généalogique/S. +généalogiquement +généalogiste/S. +genépi/S. +génépi/S. +gêner/a0p+ +généralat/S. +générale/W. +généralement +généralisable/S. +généralisation/S. +généralisatrice/F. +généraliser/a0p+ +généralissime/S. +généraliste/S. +généralité/S. +génération/S. +générationnelle/F. +générative/F. +générativiste/S. +générativité/S. +génératrice/F. +générer/c0p+ +généreuse/W. +généreusement +généricité/S. +générique/S. +générique/S. +génériquement +generis +générosité/S. +genèse/S. +génésiaque/S. +génésique/S. +genet/S. +genêt/S. +généthliaque/S. +généthliaque/S. +généticienne/F. +genêtière/S. +génétique/S. +génétique/S. +génétiquement +génétisme/S. +génétiste/S. +genette/S. +gêneuse/F. +genevoise/F. +genévrier/S. +géniale/W. +génialement +génialissime/S. +génialité/S. +génie/S. +genièvre/S. +genièvrerie/S. +génique/S. +génisse/S. +génitale/W. +génitalement +génitalité/S. +génitif/S. +génito-urinaire/S. +génitrice/F. +géniture/S. +génocidaire/S. +génocide/S. +génogramme/S. +génoise/F. +génome/S. +génomique/S. +génosociogramme/S. +génothérapie/S. +génotoxicité/S. +génotypage/S. +génotype/S. +génotypique/S. +génotypiquement +genou/X. +genouillée/F. +genouillère/S. +génovéfain/S. +génovéfain/S. +genre/S. +genrée/F. +gens +gent/S. +gentamicine/S. +gente/F. +gentianacée/S. +gentiane/S. +gentianée/S. +gentilé/S. +gentilhomme +gentilhommerie/S. +gentilhommière/S. +gentilité/S. +gentillâtre/S. +gentille/F. +gentillesse/S. +gentillette/F. +gentilshommes +gentiment +gentleman/A. +gentleman-farmer +gentleman-rider +gentlemen-farmers +gentlemen-riders +gentrification/S. +gentry/A. +génuflectrice/F. +génuflexion/S. +génuine/S. +géo/S. +géoarchéologie/S. +géobiologie/S. +géobiologique/S. +géobiologiste/S. +géobiologue/S. +géocacheuse/F. +géocaching/S. +géocentrique/S. +géocentrisme/S. +géochimie/S. +géochimique/S. +géochimiste/S. +géochronologie/S. +géochronologique/S. +géocodage/S. +géocoder/a0p+ +géocroiseur/S. +géode/S. +géodésie/S. +géodésienne/F. +géodésique/S. +géodésiquement +géodimètre/S. +géodistribution/S. +géodynamique/S. +géoéconomie/S. +géo-économie/S. +géoéconomique/S. +géo-économique/S. +géoglyphe/S. +géognosie/S. +géognostique/S. +géographe/S. +géographicité/S. +géographie/S. +géographique/S. +géographiquement +géohistoire/S. +géohistorienne/F. +géoïde/S. +géo-ingénierie/S. +geôlage/S. +geôle/S. +geôlière/F. +géolocalisation/S. +géolocaliser/a0p+ +géologie/S. +géologique/S. +géologiquement +géologue/S. +géomagnétique/S. +géomagnétisme/S. +géomancie/S. +géomancienne/F. +géomarketing/S. +géomaticienne/F. +géomatique/S. +géomatique/S. +géomembrane/S. +géomercatique/S. +géométrale/W. +géométralement +géomètre/S. +géomètre-expert +géomètres-experts +géométridé/S. +géométrie/S. +géométrique/S. +géométriquement +géométrisation/S. +géométriser/a0p+ +géomorphologie/S. +géomorphologique/S. +géomorphologue/S. +géonavigateur/S. +géoparc/S. +géophage/S. +géophagie/S. +géophile/S. +géophone/S. +géophysicienne/F. +géophysique/S. +géophysique/S. +géopoliticienne/F. +géopolitique/S. +géopolitique/S. +géopolitiquement +géopolitologue/S. +géopotentielle/F. +géoréférencement/S. +géorgienne/F. +géorgique/S. +géoscience/S. +géospatiale/W. +géosphère/S. +géostation/S. +géostationnaire/S. +géostatistique/S. +géostratégie/S. +géostratégique/S. +géostrophique/S. +géosynchrone/S. +géosynclinal/X. +géosynthétique/S. +géotechnicienne/F. +géotechnique/S. +géotectonique/S. +géotextile/S. +géothermale/W. +géothermie/S. +géothermique/S. +géothermométrie/S. +géotropique/S. +géotropisme/S. +géotrupe/S. +gérable/S. +gérance/S. +géraniacée/S. +géraniacée/S. +géraniée/S. +géraniol/S. +géranium/S. +gérante/F. +gerbage/S. +gerbante/F. +gerbe/S. +gerber/a0p+ +gerbera/S. +gerbeuse/F. +gerbier/S. +gerbière/S. +gerbille/S. +gerboise/S. +gerce/S. +gercement/S. +gercer/a0p+ +gerçure/S. +gérer/c0p+ +géreur/S. +gerfaut/S. +gériatre/S. +gériatrie/S. +gériatrique/S. +germaine/F. +germandrée/S. +germanique/S. +germanisation/S. +germaniser/a0p+ +germanisme/S. +germaniste/S. +germanité/S. +germanium/S. +germano-américaine/F. +germano-autrichienne/F. +germano-britannique/S. +germano-chinoise/F. +germano-danoise/F. +germanophile/S. +germanophilie/S. +germanophobe/S. +germanophobie/S. +germanophone/S. +germano-polonaise/F. +germanopratine/F. +germano-russe/S. +germano-soviétique/S. +germano-suisse/S. +germano-tchèque/S. +germe/S. +germée/F. +germen/S. +germer/a0p. +germicide/S. +germinal/S. +germinale/W. +germination/S. +germinative/F. +germinatrice/F. +germoir/S. +germon/S. +géromé/S. +gérondif/S. +géronte/S. +gérontisme/S. +gérontocratie/S. +gérontocratique/S. +gérontologie/S. +gérontologique/S. +gérontologiste/S. +gérontologue/S. +gérontophile/S. +gérontophilie/S. +gérontoxon/S. +gerris +gerseau/X. +gersoise/F. +gerzeau/X. +gésier/S. +gésine/S. +gésir/iV +gesse/S. +gestalt/S. +gestaltisme/S. +gestaltiste/S. +gestalt-thérapie/S. +gestante/F. +gestapiste/S. +gestation/S. +gestationnelle/F. +gestatoire/S. +gestatrice/S. +geste/S. +gesticulante/F. +gesticulation/S. +gesticulatoire/S. +gesticulatrice/F. +gesticulée/F. +gesticuler/a0p. +gestion/S. +gestionnaire/S. +gestique/S. +gestuaire/S. +gestualité/S. +gestuelle/F. +getter/S. +gewurztraminer/S. +geyser/S. +ghanéenne/F. +ghetto/S. +ghettoïsation/S. +ghettoïser/a0p+ +ghilde/S. +ghillie/S. +giaour/S. +giardia/S. +giardiase/S. +gibbérelline/S. +gibbeuse/W. +gibbon/S. +gibbosité/S. +gibbsite/S. +gibbule/S. +gibecière/S. +gibelet/S. +gibeline/F. +gibelotte/S. +giberne/S. +gibet/S. +gibibit/S. +gibier/S. +gibioctet/S. +giboulée/S. +giboyer/a0p+ +giboyeuse/W. +gibus +giclée/S. +giclement/S. +gicler/a0p. +gicleur/S. +giflable/S. +gifle/S. +gifler/a0p+ +gifleuse/F. +gigabit/S. +gigantale/W. +gigantesque/S. +gigantesquement +gigantisme/S. +gigantomachie/S. +gigaoctet/S. +gigatonne/S. +gigogne/S. +gigogne/S. +gigolette/S. +gigolo/S. +gigot/S. +gigotante/F. +gigotée/F. +gigotement/S. +gigoter/a0p. +gigoteuse/F. +gigue/S. +gilde/S. +gilet/S. +giletière/F. +gille/S. +gimblette/S. +gimmick/S. +gin/S. +gindre/S. +gin-fizz +gingembre/S. +ginger-ale/S. +gingivale/W. +gingivectomie/S. +gingivite/S. +gingivorragie/S. +ginguet/S. +ginguette/F. +gink/S. +ginkgo/S. +gin-rami/S. +gin-rummy/S. +ginseng/S. +giorno +girafe/S. +girafeau/X. +giraferie/S. +girafidé/S. +girafon/S. +girandole/S. +girasol/S. +giration/S. +giratoire/S. +giraumon/S. +giraumont/S. +giravion/S. +girelle/S. +girie/S. +girl/S. +girodyne/S. +girofle/S. +giroflée/S. +giroflier/S. +girolle/S. +giron/S. +gironde/F. +girondine/F. +gironner/a0p+ +girouette/S. +girouetter/a0p. +girouettisme/S. +gisante/F. +gisement/S. +gîtage/S. +gitane/F. +gîte/S. +gîter/a0p. +gîtologie/S. +giton/S. +givrage/S. +givrante/F. +givre/S. +givrer/a0p+ +givreuse/W. +givrure/S. +glabelle/S. +glabre/S. +glabrescente/F. +glaçage/S. +glaçante/F. +glace/S. +glacer/a0p+ +glacerie/S. +glaceuse/F. +glaceuse/W. +glaciaire/S. +glaciale/W. +glacialement +glacials +glaciation/S. +glacier/S. +glacière/S. +glaciérisme/S. +glaciériste/S. +glaciologie/S. +glaciologique/S. +glaciologue/S. +glacis +glaçon/S. +glaçure/S. +gladiatrice/F. +glaglater +glagolitique/S. +glaïeul/S. +glaire/S. +glairer/a0p+ +glaireuse/W. +glairure/S. +glaise/S. +glaiser/a0p+ +glaiseuse/W. +glaisière/S. +glaive/S. +glamour/S. +glamour/S. +glanage/S. +gland/S. +glandage/S. +glande/S. +glandée/F. +glandée/S. +glander/a0p. +glandeuse/F. +glandouille/S. +glandouiller/a0p. +glandulaire/S. +glandule/S. +glanduleuse/W. +glanement/S. +glaner/a0p+ +glaneuse/F. +glanure/S. +glapir/f0p+ +glapissante/F. +glapissement/S. +glaréole/S. +glas +glasnost +glass +glatir/f0p. +glaucomateuse/W. +glaucome/S. +glauconie/S. +glauconite/S. +glauque/S. +glauquement +glaviot/S. +glavioter/a0p. +glaviotter/a0p. +glèbe/S. +gléchome/S. +glène/S. +gléner/c0p+ +glénoïdale/W. +glénoïde/S. +glette/S. +gletter/a0p. +gliadine/S. +gliale/W. +glie/S. +glioblastome/S. +gliome/S. +glissade/S. +glissage/S. +glissando/S. +glissante/F. +glisse/S. +glissement/S. +glisser/a0p+ +glisser-déposer +glisseuse/F. +glissière/S. +glissoir/S. +glissoire/S. +globale/W. +globalement +globalisante/F. +globalisation/S. +globaliser/a0p+ +globalisme/S. +globaliste/S. +globalité/S. +globe/S. +globe-trotter/S. +globe-trotteuse/F. +globicéphale/S. +globigérine/S. +globine/S. +globish/S. +globulaire/S. +globulaire/S. +globule/S. +globuleuse/W. +globuline/S. +glockenspiel/S. +gloire/S. +glome/S. +gloméris +glomérulaire/S. +glomérule/S. +glomérulée/F. +glomérulonéphrite/S. +glomérulopathie/S. +gloria/S. +gloriette/S. +glorieuse/W. +glorieusement +glorifiante/F. +glorification/S. +glorificatrice/F. +glorifier/a0p+ +gloriole/S. +glose/S. +gloser/a0p+ +gloss +glossaire/S. +glossateur/S. +glossectomie/S. +glossématique/S. +glossématique/S. +glossème/S. +glossette/S. +glossine/S. +glossite/S. +glossolalie/S. +glossologie/S. +glossonyme/S. +glosso-pharyngienne/F. +glossotomie/S. +glottale/W. +glotte/S. +glottique/S. +glouglou/S. +glougloutante/F. +glougloutement/S. +glouglouter/a0p. +gloussante/F. +gloussement/S. +glousser/a0p. +glouteron/S. +gloutonne/F. +gloutonnement +gloutonner/a0p+ +gloutonnerie/S. +gloxinia/S. +glu/S. +gluante/F. +gluau/X. +glucagon/S. +glucanase/S. +glucane/S. +glucide/S. +glucidique/S. +glucinium/S. +glucocorticoïde/S. +glucomètre/S. +gluconate/S. +gluconique/S. +glucosamine/S. +glucose/S. +glucosée/F. +glucoserie/S. +glucoside/S. +glucosinolate/S. +glucuronique/S. +glui/S. +glume/S. +glumelle/S. +gluon/S. +glutamate/S. +glutamine/S. +glutamique/S. +glutathion/S. +gluten/S. +glutineuse/W. +glycanase/S. +glycation/S. +glycémie/S. +glycémique/S. +glycéraldéhyde/S. +glycéride/S. +glycérie/S. +glycérine/S. +glycériner/a0p+ +glycérique/S. +glycérol/S. +glycérolé/S. +glycérophosphate/S. +glycérophtalique/S. +glycine/S. +glycocolle/S. +glycogène/S. +glycogène/S. +glycogenèse/S. +glycogénique/S. +glycogénogenèse/S. +glycogénolyse/S. +glycogénose/S. +glycol/S. +glycolipide/S. +glycolysation/S. +glycolyse/S. +glycolytique/S. +glyconien/S. +glyconique/S. +glycoprotéine/S. +glycoprotéique/S. +glycosaminoglycane/S. +glycoside/S. +glycosidique/S. +glycosurie/S. +glycosurique/S. +glycosylation/S. +glycosylée/F. +glyphe/S. +glyphosate/S. +glyptique/S. +glyptique/S. +glyptodon/S. +glyptodon/S. +glyptodonte/S. +glyptographie/S. +glyptothèque/S. +gnangnan +gnangnan/S. +gnaque/S. +gnathion/S. +gnathologie/S. +gnathologique/S. +gnathostome/S. +gneiss +gneissique/S. +gnétophyte/S. +gnian-gnian +gnocchi +gnocchi/S. +gnognotte/S. +gnôle/S. +gnoll/S. +gnome/S. +gnomique/S. +gnomon/S. +gnomonique/S. +gnomonique/S. +gnomoniste/S. +gnon/S. +gnose/S. +gnoséologie/S. +gnoséologique/S. +gnosie/S. +gnosique/S. +gnosticisme/S. +gnostique/S. +gnotobiotique/S. +gnou/S. +gnouf/S. +go +go +goal/S. +goal-average/S. +goaler/a0p+ +gobage/S. +gobelet/S. +gobeleterie/S. +gobeletière/F. +gobeline/F. +gobe-mouche/S. +gobe-mouches +gober/a0p+ +goberge/S. +goberger/a0p+ +gobeter/d0p+ +gobeuse/F. +gobie/S. +gobille/S. +godage/S. +godaille/S. +godailler/a0p. +godasse/S. +gode/S. +godelureau/X. +godemiché/S. +godemichet/S. +godendart/S. +goder/a0p. +godet/S. +godiche/S. +godichonne/F. +godillante/F. +godille/S. +godiller/a0p. +godilleuse/F. +godillot/S. +godiner/a0p+ +godiveau/X. +godron/S. +godronnage/S. +godronner/a0p+ +goéland/S. +goélette/S. +goémon/S. +goémonière/F. +goethite/S. +goétie/S. +goglu/S. +gogo/S. +gogole/F. +goguenarde/F. +goguenarder/a0p. +goguenarderie/S. +goguenardise/S. +goguenot/S. +gogues +goguette/S. +goï/S. +goïm +goinfre/S. +goinfrer/a0p+ +goinfrerie/S. +goitre/S. +goitreuse/W. +goji/S. +golden +golden/S. +golem/S. +golf/S. +golfe/S. +golfer/a0p. +golfeuse/F. +golfique/S. +golmotte/S. +gombo/S. +goménol/S. +goménolée/F. +gomina/S. +gominer/a0p+ +gommage/S. +gomme/S. +gomme-gutte +gommer/a0p+ +gomme-résine +gommes-guttes +gommes-résines +gommette/S. +gommeuse/W. +gommier/S. +gommose/S. +gomorrhéenne/F. +gomorrhiser +gonade/S. +gonadique/S. +gonadostimuline/S. +gonadotrope/S. +gonadotrophine/S. +gonalgie/S. +gonange/S. +gonarthrose/S. +goncourable/S. +gond/S. +gonder/a0p+ +gondoïque/S. +gondolage/S. +gondolante/F. +gondole/S. +gondolement/S. +gondoler/a0p+ +gondolière/F. +gone/S. +gonelle/S. +gonfalon/S. +gonfalonier/S. +gonfanon/S. +gonfanonier/S. +gonflable/S. +gonflage/S. +gonflante/F. +gonflement/S. +gonfler/a0p+ +gonflette/S. +gonfleur/S. +gong/S. +gongonner/a0p. +gongorisme/S. +gonio/S. +goniomètre/S. +goniométrie/S. +goniométrique/S. +gonioscopie/S. +gonnelle/S. +gonochorique/S. +gonochorisme/S. +gonococcie/S. +gonococcique/S. +gonocoque/S. +gonocyte/S. +gonophore/S. +gonopode/S. +gonoréaction/S. +gonorrhée/S. +gonosome/S. +gonosomique/S. +gonozoïde/S. +gonzesse/F. +gonzo/S. +good +gopi/S. +gord/S. +gordien/S. +gore +gore/S. +goret/S. +gorfou/S. +gorge/S. +gorge-de-pigeon +gorgée/S. +gorgeon/S. +gorgeonner +gorger/a0p+ +gorgerette/S. +gorgerin/S. +gorget/S. +gorgone/S. +gorgonzola/S. +gorille/S. +goron/S. +gosette/S. +gosier/S. +gospel/S. +gosse/S. +gotha/S. +gothe/F. +gothique/S. +gotique/S. +goton/S. +gouache/S. +gouacher/a0p+ +gouacheuse/F. +gouaille/S. +gouailler/a0p. +gouaillerie/S. +gouailleuse/F. +gouailleusement +goualante/S. +goualer/a0p+ +gouape/S. +gouaper/a0p. +gouda/S. +goudou/S. +goudron/S. +goudronnage/S. +goudronner/a0p+ +goudronneuse/F. +goudronneuse/W. +gouelle/F. +gouet/S. +gouffre/S. +gouge/S. +gouger/a0p+ +gougère/S. +gougnafier/S. +gougnotte/S. +gougnotter +gouinasse/S. +gouine/S. +goujat/S. +goujaterie/S. +goujon/S. +goujonnage/S. +goujonner/a0p+ +goujonnette/S. +goujonnière/S. +goulache/S. +goulafre/S. +goulag/S. +goulasch/S. +goule/S. +goulée/S. +goulet/S. +gouleyante/F. +goulot/S. +goulotte/S. +goulue/F. +goulûment +goum/S. +goumier/S. +goupil/S. +goupille/S. +goupiller/a0p+ +goupillon/S. +goupillonner/a0p+ +gour/S. +goura/S. +gourami/S. +gourance/S. +gourancer +gourbi/S. +gourde/F. +gourdin/S. +gouren/S. +gourer/a0p+ +gourgandine/S. +gourgane/S. +gourmade/S. +gourmande/F. +gourmandement +gourmander/a0p+ +gourmandise/S. +gourme/S. +gourmée/F. +gourmet/S. +gourmette/S. +gournable/S. +gourou/S. +gousse/S. +gousset/S. +goût/S. +goûter/S. +goûter/a0p+ +goûteuse/F. +goûteuse/W. +goûte-vin +goutte/S. +goutte-à-goutte +gouttelette/S. +goutter/a0p. +gouttereau/X. +goutteur/S. +goutteuse/W. +gouttière/S. +gouttiner/a8p. +gouvernable/S. +gouvernail/S. +gouvernance/S. +gouvernante/F. +gouverne/S. +gouvernement/S. +gouvernementale/W. +gouvernementalisme/S. +gouvernementalité/S. +gouverner/a0p+ +gouverneure/F. +gouvernorat/S. +gouzi-gouzi +gouzis-gouzis +goy/S. +goyave/S. +goyavier/S. +goyim +gr/||-- +grabat/S. +grabataire/S. +grabatisation/S. +graben/S. +grabuge/S. +grâce +grâce/S. +graciable/S. +gracier/a0p+ +gracieuse/W. +gracieusement +gracieuseté/S. +gracile/S. +gracilité/S. +gracioso +gradateur/S. +gradation/S. +grade/S. +gradée/F. +gradeuse/F. +gradient/S. +gradin/S. +gradine/S. +gradualisme/S. +gradualiste/S. +gradualité/S. +graduat/S. +graduateur/S. +graduation/S. +graduée/F. +graduel/S. +graduelle/F. +graduellement +graduer/a0p+ +gradus +grafcet/S. +graff/S. +graffer +graffeuse/F. +graffiter/a0p+ +graffiteuse/F. +graffiti +graffiti/S. +grafigner/a0p+ +graille/S. +graillement/S. +grailler/a0p+ +graillon/S. +graillonner/a0p. +graillonneuse/W. +grain/S. +grainage/S. +graine/S. +grainer/a0p+ +graineterie/S. +grainetière/F. +grainière/F. +grainothèque/S. +graissage/S. +graissante/F. +graisse/S. +graisser/a0p+ +graisseuse/F. +graisseuse/W. +gram +gramen/S. +gramicidine/S. +graminacée/S. +graminée/S. +graminée/S. +grammage/S. +grammaire/S. +grammairienne/F. +grammaticale/W. +grammaticalement +grammaticalisation/S. +grammaticaliser/a0p+ +grammaticalité/S. +grammatiste/S. +grammatologie/S. +grammatologique/S. +gramme/Um +gramophone/S. +gramscisme/S. +grand-angle +grand-angulaire +grand-chose +grand-croix +grand-duc +grand-ducale/W. +grand-duché +grande/F. +grande-duchesse +grandelette/F. +grandement +grandes-duchesses +grandesse/S. +grandette/F. +grandeur/S. +grand-guignolesque/S. +grandiloquence/S. +grandiloquente/F. +grandiose/S. +grandiosement +grandir/f0p+ +grandissante/F. +grandissement/S. +grandissime/S. +grand-maman/S. +grand-mère/S. +grand-messe/S. +grand-oncle +grand-papa +grand-peine +grand-père +grand-place/S. +grand-route +grand-route/S. +grand-rue +grands-angles +grands-angulaires +grands-croix +grands-duchés +grands-ducs +grands-mamans +grands-mères +grands-messes +grands-oncles +grands-papas +grands-parents +grands-pères +grands-routes +grands-rues +grands-tantes +grands-voiles +grand-tante/S. +grand-voile/S. +grange/S. +grangée/S. +granit/S. +granite/S. +graniter/a0p+ +graniteuse/W. +granitique/S. +granito/S. +granitoïde/S. +granivore/S. +granivore/S. +granny-smith +granoclassement/S. +granodiorite/S. +granulaire/S. +granularité/S. +granulat/S. +granulation/S. +granule/S. +granulé/S. +granuler/a0p+ +granuleuse/W. +granulie/S. +granulite/S. +granulocyte/S. +granulomatose/S. +granulome/S. +granulométrie/S. +granulométrique/S. +grapefruit/S. +grape-fruit/S. +graphe/S. +graphème/S. +graphène/S. +grapheuse/F. +graphie/S. +graphiose/S. +graphique/S. +graphiquement +graphisme/S. +graphiste/S. +graphitage/S. +graphite/S. +graphiter/a0p+ +graphiteuse/W. +graphitique/S. +graphologie/S. +graphologique/S. +graphologue/S. +graphomane/S. +graphomanie/S. +graphomètre/S. +graphométrie/S. +graphométrique/S. +graphorrhée/S. +grappe/S. +grappillage/S. +grappiller/a0p+ +grappilleuse/F. +grappillon/S. +grappin/S. +graptolite/S. +gras +gras-double/S. +grasse/F. +grassement +grasserie/S. +grasset/S. +grasseyante/F. +grasseyement/S. +grasseyer/a0p+ +grassmannienne/F. +grassouillette/F. +gratelle/S. +grateron/S. +graticulation/S. +graticuler/a0p+ +gratifiante/F. +gratification/S. +gratifier/a0p+ +gratin/S. +gratiner/a0p+ +gratiole/S. +gratis +gratis +gratitude/S. +gratos +grattage/S. +grattante/F. +gratte/S. +gratte-ciel +gratte-cul +gratte-dos +grattelle/S. +grattement/S. +gratte-papier +gratter/a0p+ +gratteron/S. +gratteuse/F. +grattoir/S. +gratton/S. +grattouille/S. +grattouiller/a0p+ +gratture/S. +gratuiciel/S. +gratuite/F. +gratuité/S. +gratuitement +grau/X. +grauwacke/S. +gravatière/F. +gravats +grave +grave/S. +gravelée/S. +graveler/d0p+ +graveleuse/W. +gravelle/S. +gravelure/S. +gravement +graver/a0p+ +gravettienne/F. +graveuse/F. +gravide/S. +gravidique/S. +gravidité/S. +gravier/S. +gravière/S. +gravifique/S. +gravillon/S. +gravillonnage/S. +gravillonner/a0p+ +gravillonneuse/F. +gravimètre/S. +gravimétrie/S. +gravimétrique/S. +gravir/f0p+ +gravisphère/S. +gravissime/S. +gravitaire/S. +gravitante/F. +gravitation/S. +gravitationnelle/F. +gravitationnellement +gravité/S. +graviter/a0p. +gravitique/S. +graviton/S. +gravlax +gravois +gravure/S. +gray/Um +gré +gréage/S. +grèbe/S. +grébiche/S. +grébige/S. +gréciser/a0p+ +grécité/S. +gréco-arabe/S. +gréco-bouddhique/S. +gréco-latine/F. +gréco-romaine/F. +gréco-turque/S. +grecquage/S. +grecque/F. +grecquer/a0p+ +gredine/F. +gredinerie/S. +gréement/S. +green/S. +gréer/a0p+ +gréeuse/F. +greffage/S. +greffe/S. +greffer/a0p+ +greffeuse/F. +greffière/F. +greffoir/S. +greffon/S. +grégaire/S. +grégarisme/S. +grège/S. +grégeois +grégorienne/F. +grègues +grêle/S. +grêle/S. +grêler/a8p+ +grêleuse/W. +grelin/S. +grelinette/S. +grêlon/S. +grelot/S. +grelote/S. +grelottante/F. +grelotte/S. +grelottement/S. +grelotter/a0p. +greluche/S. +greluchon/S. +grémial/X. +grémil/S. +grémille/S. +grenache/S. +grenadage/S. +grenade/S. +grenadeur/S. +grenadienne/F. +grenadière/F. +grenadille/S. +grenadine/F. +grenage/S. +grenaillage/S. +grenaille/S. +grenailler/a0p+ +grenailleuse/F. +grenaison/S. +grenat +grenat/S. +grenatite/S. +greneler/d0p+ +grener/b0p+ +grènetis +greneuse/F. +grenier/S. +grenobloise/F. +grenouillage/S. +grenouillante/F. +grenouille/S. +grenouiller/a0p. +grenouillère/S. +grenouillesque/S. +grenouillette/S. +grenue/F. +grenure/S. +grès +grésage/S. +gréser/c0p+ +gréseuse/S. +gréseuse/W. +grésière/S. +grésil/S. +grésillante/F. +grésillement/S. +grésiller/a0p. +grésoir/S. +gressin/S. +grève/S. +gréver/a0p. +grever/b0p+ +grévicultrice/F. +gréviste/S. +gribiche/S. +gribouillage/S. +gribouille/S. +gribouiller/a0p+ +gribouilleuse/F. +gribouillis +grièche/S. +grief/S. +grièvement +griffade/S. +griffage/S. +griffe/S. +griffer/a0p+ +griffeuse/F. +griffon/S. +griffonnage/S. +griffonnement/S. +griffonner/a0p+ +griffonneuse/F. +griffue/F. +griffure/S. +grignarde/F. +grigne/S. +grigner/a0p. +grignon/S. +grignotage/S. +grignotement/S. +grignoter/a0p+ +grignoteuse/F. +grignotine/S. +grignotis +grigou/S. +gri-gri +grigri/S. +grigriser/a0p+ +gril/S. +grill/S. +grillade/S. +grilladerie/S. +grilladine/F. +grillage/S. +grillager/a0p+ +grillageur/S. +grille/S. +grillé/S. +grille-pain +griller/a0p+ +grillette/F. +grilloir/S. +grillon/S. +grill-room/S. +grimaçante/F. +grimace/S. +grimacer/a0p. +grimacerie/S. +grimacière/F. +grimage/S. +grimaude/F. +grimer/a0p+ +grimoire/S. +grimpante/F. +grimpe/S. +grimpée/S. +grimper/a0p+ +grimpereau/X. +grimpette/S. +grimpeuse/F. +grinçante/F. +grincement/S. +grincer/a0p. +grinche/S. +grincher/a0p+ +grincheuse/W. +gringalet/S. +gringe/S. +gringo/S. +gringolée/F. +gringue/S. +gringuer/a0p. +griotte/F. +griottier/S. +grip/S. +grippage/S. +grippale/W. +grippe/S. +grippement/S. +gripper/a0p+ +grippe-sou/S. +grisaille/S. +grisailler/a0p+ +grisante/F. +grisard/S. +grisâtre/S. +grisbi/S. +gris-bleu +grise/F. +griséofulvine/S. +griser/a0p+ +griserie/S. +griset/S. +grisette/S. +gris-gris +grisoler/a0p. +grisoller/a0p. +grisonnante/F. +grisonne/F. +grisonnement/S. +grisonner/a0p. +grisou/S. +grisoumètre/S. +grisouteuse/W. +gris-vert +grive/S. +griveler/d0p+ +grivèlerie/S. +grivelure/S. +griveton/S. +grivoise/F. +grivoisement +grivoiserie/S. +grizzli/S. +grizzly/A. +groenendael/S. +groenlandaise/F. +grog/S. +groggy +grognante/F. +grognarde/F. +grognasse/S. +grognasser/a0p. +grogne/S. +grognement/S. +grogner/a0p+ +grognerie/S. +grogneuse/F. +grognonne/F. +grognonner/a0p. +groin/S. +groisil/S. +grolle/S. +grommeler/d0p+ +grommellement/S. +grondante/F. +gronde/S. +grondement/S. +gronder/a0p+ +gronderie/S. +grondeuse/F. +grondin/S. +groom/S. +groove +gros-boutiste/S. +groschen/S. +groseille +groseille/S. +groseillier/S. +gros-grain/S. +gros-porteur/S. +grosse/F. +grosserie/S. +grossesse/S. +grosseur/S. +grossière/F. +grossièrement +grossièreté/S. +grossir/f0p+ +grossissante/F. +grossissement/S. +grossiste/S. +grosso +grossophobe/S. +grossophobie/S. +grossoyer/a0p+ +grotesque/S. +grotesquement +grotte/S. +grouillante/F. +grouillement/S. +grouiller/a0p+ +grouillis +grouillot/S. +groûler/a0p. +groumer/a0p. +groupage/S. +groupale/W. +groupe/S. +groupement/S. +grouper/a0p+ +groupeuse/F. +groupie/S. +groupiste/S. +groupoïde/S. +groupusculaire/S. +groupuscule/S. +grouse/S. +grrr +gruau/X. +grue/S. +gruerie/S. +grugeoir/S. +gruger/a0p+ +grugeuse/F. +grulette/S. +grume/S. +grumeau/X. +grumeler/d0p+ +grumeleuse/W. +grumelure/S. +grumier/S. +grunge/S. +gruppetto/I. +grutière/F. +gruyère/S. +gryphée/S. +guacamole/S. +guacharo/S. +guadeloupéenne/F. +guai/S. +guaïfénésine/S. +guanaco/S. +guanidine/S. +guanine/S. +guano/S. +guanosine/S. +guar/S. +guarana/S. +guarani/S. +guatémaltèque/S. +guayule/S. +gué/S. +guéable/S. +guéage/S. +guèbre/S. +guède/S. +guéer/a0p+ +guéguerre/S. +guelfe/S. +guelte/S. +guenille/S. +guenon/S. +guépard/S. +guêpe/S. +guêpière/F. +guère +guéret/S. +guéridon/S. +guérilla/S. +guérillero/S. +guérir/f0p+ +guérison/S. +guérissable/S. +guérissante/F. +guérisseuse/F. +guérite/S. +guernouille/S. +guerre/S. +guerrière/F. +guerroyer/a0p+ +guerroyeuse/F. +guet/S. +guet-apens +guêtre/S. +guêtrer/a0p+ +guêtron/S. +guets-apens +guette/S. +guetter/a0p+ +guetteuse/F. +gueulante/F. +gueularde/F. +gueule/S. +gueule-de-loup +gueulement/S. +gueuler/a0p+ +gueules-de-loup +gueuleton/S. +gueuletonner/a0p. +gueusaille/S. +gueuse/W. +gueuser/a0p+ +gueuserie/S. +gueuze/S. +guèze/S. +gugusse/S. +gui/S. +guibolle/S. +guibre/S. +guiche/S. +guichet/S. +guichetière/F. +guidage/S. +guidance/S. +guide/S. +guide-âne/S. +guideau/X. +guide-fil +guider/a0p+ +guiderope/S. +guidisme/S. +guidon/S. +guifette/S. +guignard/S. +guignarde/F. +guigne/S. +guigner/a0p+ +guignette/S. +guignier/S. +guignolade/S. +guignole/F. +guignolesque/S. +guignolet/S. +guignon/S. +guilde/S. +guili-guili +guillaume/S. +guilledou/S. +guillemet/S. +guillemeter/d0p+ +guillemot/S. +guillerette/F. +guilleri/S. +guillochage/S. +guillocher/a0p+ +guillocheuse/F. +guillochis +guillochure/S. +guillotine/S. +guillotinée/F. +guillotiner/a0p+ +guillotineuse/F. +guimauve/S. +guimbarde/S. +guimpe/S. +guinche/S. +guincher/a0p. +guindage/S. +guindaille/S. +guindailler/a0p. +guindailleuse/F. +guindeau/X. +guinder/a0p+ +guinderesse/S. +guinée/S. +guinéenne/F. +guingois +guinguette/S. +guipage/S. +guiper/a0p+ +guipoir/S. +guipon/S. +guipure/S. +guirlande/S. +guisarme/S. +guise/S. +guitare/S. +guitariste/S. +guitoune/S. +guivre/S. +guivrée/F. +gujarati/S. +gulaire/S. +gulden/S. +gummifère/S. +gunitage/S. +gunite/S. +günz +guppy/S. +gupta/S. +gur +guru/S. +gus +gusse/S. +gustation/S. +gustative/F. +gustativement +gustométrie/S. +gutta-percha +guttas-perchas +guttiféracée/S. +gutturale/W. +gutturalement +guyanaise/F. +guyanienne/F. +guyot/S. +guzla/S. +gym/S. +gymkhana/S. +gymnarque/S. +gymnase/S. +gymnasiale/W. +gymnasiarque/S. +gymnasienne/F. +gymnaste/S. +gymnastique/S. +gymnastique/S. +gymnique/S. +gymnocarpe/S. +gymnosophiste/S. +gymnosperme/S. +gymnosperme/S. +gymnote/S. +gynandromorphisme/S. +gynécée/S. +gynéco/S. +gynécologie/S. +gynécologique/S. +gynécologiste/S. +gynécologue/S. +gynécomastie/S. +gynerium/S. +gynérium/S. +gynogenèse/S. +gynogénétique/S. +gynoïde/S. +gypaète/S. +gypse/S. +gypserie/S. +gypseuse/W. +gypsier/S. +gypsomètre/S. +gypsophile/S. +gypsothèque/S. +gyrencéphale/S. +gyrin/S. +gyrobicoupole/S. +gyrobus +gyrocompas +gyrolaser/S. +gyromagnétique/S. +gyromagnétisme/S. +gyromètre/S. +gyromitre/S. +gyrophare/S. +gyropilote/S. +gyropode/S. +gyros +gyroscope/S. +gyroscopique/S. +gyrostat/S. +gyrovague/S. +gyrus +h +h/||-- +ha +ha/||-- +hab +habanera/S. +habeas/L'D'Q' +habile/S* +habilement/D'Q' +habileté/S* +habilitable/S* +habilitation/S* +habilité/S* +habiliter/a2p+ +habillable/S* +habillage/S* +habillement/S* +habiller/a4p+ +habilleuse/F* +habit/S* +habitabilité/S* +habitable/S* +habitacle/S* +habitante/F* +habitat/S* +habitation/S* +habiter/a2p+ +habituation/S* +habitude/S* +habituée/F* +habituelle/F* +habituellement/D'Q' +habituer/a4p+ +habitus/L'D'Q' +hâbler/a0p+ +hâblerie/S. +hâbleuse/F. +habsbourgeoise/F* +hachage/S. +hache/S. +hache-fourrage +hache-légumes +hachement/S. +hachémite/S. +hache-paille +hacher/a0p+ +hachereau/X. +hachette/S. +hacheuse/F. +hache-viande +hachis +hachisch/S. +hachischée/F. +hachischine/F. +hachischisme/S. +hachoir/S. +hachure/S. +hachurer/a0p+ +hacienda/S* +hackathon/S* +hacker/S. +hacking/S. +hacktivisme/S* +hacktiviste/S* +hadale/W* +haddock/S. +hadith +hadith/S. +hadj +hadji +hadji/S. +hadron/S* +hadronique/S* +hadronthérapie/S* +hadrosaure/S* +hafnium/S. +hagarde/F. +haggis +hagiographe/S* +hagiographie/S* +hagiographique/S* +hagiotoponyme/S* +hagiotoponymie/S* +haha +haïe +haïe/F. +haie/S. +haïk/S. +haïkaï/S. +haïku/S. +haillon/S. +haillonneuse/W. +haine/S. +haineuse/W. +haineusement +haïr/fA +haire/S. +haïssable/S. +haïsseuse/F. +haïtienne/F. +hajj +haka/S. +halage/S. +halal +halbi/S. +halbran/S. +halde/S. +hâle/S. +halecret/S. +haleine/S* +halenée/S* +halener/b2p+ +haler/a0p+ +hâler/a0p+ +haletante/F. +halètement/S. +haleter/b0p. +haleuse/F. +half-track/S. +halicte/S* +halieute/S* +halieutique/S* +halin/S. +haline/F. +halioculture/S* +haliotide/S* +haliotis +haliple/S. +halite/S* +halitose/S* +halitueuse/W* +halkiner/a0p+ +hall/S. +hallage/S. +hallal +hallali/S* +halle/S. +hallebarde/S. +hallebardier/S. +hallier/S. +hallstattienne/F. +hallucinante/F* +hallucination/S* +hallucinatoire/S* +hallucinée/F* +halluciner/a2p+ +hallucinogène/S* +hallucinogène/S* +hallucinose/S* +halo/S. +halochimie/S* +halochromie/S* +halogénation/S* +halogène/S* +halogène/S* +halogénée/F* +halogénure/S* +halogénure/S* +halographie/S* +haloïde/S* +hâloir/S. +halophile/S* +halophile/S* +halophyte/S* +halophyte/S* +halotechnie/S* +halotolérance/S* +halotolérante/F* +halte/S. +halte-garderie +haltère/S* +haltérophile/S* +haltérophilie/S* +haltes-garderies +halva/S. +hamac/S. +hamada/S. +hamadryade/S* +hamadryas/L'D'Q' +hamamélis/L'D'Q' +hambourgeoise/F. +hamburger/S. +hameau/X. +hameçon/S* +hameçonnage/S* +hameçonner/a2p+ +hamiltonienne/F* +hammam/S. +hammerless +hampe/S. +hamster/S. +han +han/S. +hanafisme/S. +hanap/S. +hanbalisme/S. +hanche/S. +hanchement/S. +hancher/a0p+ +handball/S. +hand-ball/S. +handballeuse/F. +handeler/d0p+ +handicap/S. +handicapante/F. +handicapée/F. +handicaper/a2p+ +handicapeur/S. +handiphobe/S* +handisport/S. +hangar/S. +hanneton/S. +hannetonnage/S. +hannetonner/a0p+ +hanovrienne/F* +hansart/S. +hanse/S. +hanséatique/S. +hanter/a0p+ +hantise/S. +haoussa/S. +hapax/L'D'Q' +haplobionte/S* +haplo-diploïdisation/S* +haplographie/S* +haploïde/S* +haploïdie/S* +haplologie/S* +haplotype/S* +happe/S. +happement/S. +happening/S. +happer/a0p+ +haptène/S* +haptique/S* +haptique/S* +haptonomie/S* +haptonomique/S* +haquebute/S. +haquenée/S. +haquet/S. +hara-kiri/S. +haram +harangue/S. +haranguer/a0p+ +harangueuse/F. +haras +harassante/F. +harassement/S. +harasser/a0p+ +harcelante/F. +harcèlement/S. +harceler/b0p+ +harceleuse/F. +hard +hard +hard-core +hardcore/S* +hardcore/S. +hard-core/S. +harde/S. +harder/a0p+ +hardeuse/F. +hardie/F. +hardiesse/S. +hardiment +hard-rock/S. +hardware/S. +harem/S. +hareng/S. +harengaison/S. +harengère/S. +harenguet/S. +harengueux +harenguier/S. +haret/S. +harfang/S. +hargne/S. +hargneuse/W. +hargneusement +haricot/S. +haricoter/a0p+ +haridelle/S. +harissa/S. +harka/S. +harkie/F. +harle/S. +harmattan/S* +harmonica/S* +harmoniciste/S* +harmonicité/S* +harmonicorde/S* +harmonie/S* +harmonieuse/W* +harmonieusement/D'Q' +harmonique/S* +harmoniquement/D'Q' +harmonisation/S* +harmoniser/a4p+ +harmoniste/S* +harmonium/S* +harnachement/S. +harnacher/a0p+ +harnacheur/S. +harnais +harnois +haro/S. +harpagon/S* +harpail/S. +harpailler/a0p+ +harpe/S. +harpe-luth +harper/a0p+ +harpes-luths +harpie/S. +harpiste/S. +harpon/S. +harponnage/S. +harponnement/S. +harponner/a0p+ +harponneuse/F. +harraga +harraga/S. +harrisme/S. +harriste/S. +hart/S. +haruspice/S* +harzburgite/S* +hasard/S. +hasarder/a0p+ +hasardeuse/W. +hasardeusement +hasardisation/S. +hasch/S. +haschich/S. +haschichée/F. +haschichine/F. +haschichisme/S. +haschisch/S. +haschischée/F. +haschischine/F. +haschischisme/S. +hase/S. +hashtag/S. +hassidique/S. +hassidisme/S. +hassium/S. +hast/S* +hastaire/S. +haste/S. +hastée/F. +hâte/S. +hâtelet/S. +hâtelette/S. +hâtelle/S. +hâter/a0p+ +hâtereau/X. +hâtier/S. +hâtive/F. +hâtiveau/X. +hâtivement +hauban/S. +haubanage/S. +haubaner/a0p+ +haubert/S. +hausse/S. +hausse-col/S. +haussement/S. +hausser/a0p+ +haussière/F. +haussmannienne/F* +haut +haut/S. +hautaine/F. +hautainement +hautbois +hautboïste/S. +haut-commissaire +haut-commissariat +haut-de-chausses +haut-de-forme +haute/F. +haute-contre +haute-fidélité +haute-fidélité +haute-lisse +haute-lissière/F. +hautement +hautes-contre +hautes-fidélités +hautes-fidélités +hautes-lisses +hautesse/S. +hautes-villes +hauteur/S. +haute-ville +haut-fond +hautin/S. +haut-le-cœur +haut-le-corps +haut-parleur/S. +haut-relief +hauts-commissaires +hauts-commissariats +hauts-de-chausses +hauts-de-forme +hauts-fonds +hauts-reliefs +hauturière/F. +haüyne/S. +havage/S. +havanaise/F. +havane +havane/S. +hâve/S. +haveneau/X. +havenet/S. +haver/a0p+ +haversienne/F* +haveuse/F. +havir/f0p+ +havraise/F. +havre/S. +havresac/S. +hawaïenne/F* +hayon/S. +hé +heaume/S. +heaumière/F. +hebdo/S* +hebdomadaire/S* +hebdomadaire/S* +hebdomadairement/D'Q' +hebdomadière/F* +hébéphrénie/S* +hébéphrénique/S* +hébergement/S* +héberger/a2p+ +hébergeuse/F* +hébertisme/S* +hébertiste/S* +hébétement/S* +hébéter/c4p+ +hébétude/S* +hébraïque/S* +hébraïquement/D'Q' +hébraïsante/F* +hébraïser/a2p+ +hébraïsme/S* +hébraïste/S* +hébreu/X* +hécatombe/S* +hectare/S* +hectique/S* +hectisie/S* +hectométrique/S* +hectopièze/S* +hédenbergite/S* +hédéracée/S* +hédonique/S* +hédonisme/S* +hédoniste/S* +hédonistique/S* +hégélianisme/S* +hégélienne/F* +hégémonie/S* +hégémonique/S* +hégémonisme/S* +hégémoniste/S* +hégire/S* +hégirienne/F* +hégoumène/S* +heideggerienne/F. +heiduque/S. +heimatlos +heimatlosat/S* +hein +hélas/Q' +hélépole/S* +héler/c0p+ +hélianthe/S* +hélianthème/S* +hélianthine/S* +héliaque/S* +héliaste/S* +hélicase/S* +hélice/S* +hélicicultrice/F* +héliciculture/S* +hélicité/S* +hélico/S* +hélicoïdale/W* +hélicoïde/S* +hélicon/S* +hélicoptère/S* +hélicoptériste/S* +héligare/S* +hélio/S* +héliocentrique/S* +héliocentrisme/S* +héliochimique/S* +héliochromie/S* +héliodore/S* +héliogaine/S* +héliographe/S* +héliographie/S* +héliographique/S* +héliograveuse/F* +héliogravure/S* +héliomarine/F* +héliomètre/S* +hélion/S* +héliopause/S* +héliophile/S* +héliosismologie/S* +héliosphère/S* +héliosphérique/S* +héliostat/S* +héliosynchrone/S* +héliosynchronisme/S* +héliothérapie/S* +héliothermique/S* +héliotrope/S* +héliotrope/S* +héliotropine/S* +héliotropisme/S* +héliozoaire/S* +héliport/S* +héliportage/S* +héliporter/a2p+ +hélistation/S* +hélisurface/S* +hélitreuillage/S* +hélitreuiller/a2p+ +hélium/S* +hélix/L'D'Q' +hellébore/S* +hellène/S* +hellénique/S* +hellénisante/F* +hellénisation/S* +helléniser/a4p+ +hellénisme/S* +helléniste/S* +hellénistique/S* +hellénophone/S* +hello +helminthe/S* +helminthiase/S* +helminthique/S* +helminthologie/S* +helminthosporiose/S* +hélodée/S* +héloderme/S* +hélophyte/S* +helvelle/S* +helvète/S* +helvétique/S* +helvétisme/S* +hem +hémagglutinine/S* +hémangiome/S* +hémarthrose/S* +hématémèse/S* +hématidrose/S* +hématie/S* +hématine/S* +hématique/S* +hématite/S* +hématocèle/S* +hématocrite/S* +hémato-encéphalique/S* +hématogène/S* +hématologie/S* +hématologique/S* +hématologiste/S* +hématologue/S* +hématome/S* +hématophage/S* +hématopoïèse/S* +hématopoïétique/S* +hématoporphyrine/S* +hématose/S* +hématosine/S* +hématoxyline/S* +hématozoaire/S* +hématurie/S* +hème/S* +héméralope/S* +héméralopie/S* +hémérobe/S* +hémérocalle/S* +hémérothèque/S* +hémialgie/S* +hémicellulose/S* +hémicorps/L'D'Q' +hémicrânie/S* +hémicryptophyte/S* +hémicycle/S* +hémicylindrique/S* +hémièdre/S* +hémiédrie/S* +hémiédrique/S* +hemigrammus/L'D'Q' +hémine/S* +héminée/S* +hémiole/S* +hémione/S* +hémiparésie/S* +hémiperméable/S* +hémiplégie/S* +hémiplégique/S* +hémiptère/S* +hémiptère/S* +hémisphère/S* +hémisphérique/S* +hémistiche/S* +hémitropie/S* +hémochromatose/S* +hémocompatible/S* +hémoconcentration/S* +hémoculture/S* +hémocyanine/S* +hémodialyse/S* +hémodynamique/S* +hémogénie/S* +hémogénique/S* +hémoglobine/S* +hémoglobinopathie/S* +hémoglobinose/S* +hémoglobinurie/S* +hémogramme/S* +hémolymphe/S* +hémolysante/F* +hémolyse/S* +hémolysine/S* +hémolytique/S* +hémopathie/S* +hémophile/S* +hémophilie/S* +hémophilique/S* +hémoprotéine/S* +hémoptysie/S* +hémoptysique/S* +hémorragie/S* +hémorragique/S* +hémorroïdaire/S* +hémorroïdale/W* +hémorroïde/S* +hémosidérine/S* +hémospermie/S* +hémostase/S* +hémostatique/S* +hémothorax/L'D'Q' +hémotypologie/S* +hémovigilance/S* +hendécagone/S* +hendécagone/S* +hendécalogie/S* +hendécasyllabe/S* +hendécasyllabe/S* +hendiadys +henné/S. +hennin/S. +hennir/f0p. +hennissante/F. +hennissement/S. +hennuyère/F. +hénothéisme/S* +henry/Um +hensélienne/F* +hentai/S. +hep +héparane/S* +héparine/S* +hépatalgie/S* +hépatectomie/S* +hépatique/S* +hépatisation/S* +hépatisme/S* +hépatite/S* +hépatobiliaire/S* +hépato-biliaire/S* +hépatocèle/S* +hépatocellulaire/S* +hépato-cellulaire/S* +hépatocyte/S* +hépatographie/S* +hépatologie/S* +hépatologue/S* +hépatome/S* +hépatomégalie/S* +hépatonéphrite/S* +hépatotoxique/S* +hépiale/S* +heptacorde/S* +heptaèdre/S* +heptagonale/W* +heptagone/S* +heptalogie/S* +heptamètre/S* +heptane/S* +heptarchie/S* +heptasyllabe/S* +heptathlon/S* +heptathlonienne/F* +heptatonique/S* +heptose/S* +heptoxyde/S* +héraclitéenne/F* +héraldique/S* +héraldique/S* +héraldiquement/D'Q' +héraldiste/S* +héraultaise/F. +héraut/S. +herbacée/F* +herbage/S* +herbagement/S* +herbager/a2p+ +herbagère/F* +herbe/S* +herber/a2p+ +herberie/S* +herbette/S* +herbeuse/W* +herbicide/S* +herbier/S* +herbivore/S* +herborisation/S* +herborisatrice/F* +herborisée/F* +herboriser/a1p. +herboriste/S* +herboristerie/S* +herbue/F* +herbue/S* +herchage/S. +hercher/a0p. +hercheuse/F. +hercule/S* +herculéenne/F* +hercynienne/F* +herd-book/S. +hère/S. +héréditaire/S* +héréditairement/D'Q' +hérédité/S* +hérédo-syphilis/L'D'Q' +hérédo-syphilitique/S* +hérésiarque/S* +hérésie/S* +hérésiologie/S* +hérésiologique/S* +hérésiologue/S* +héréticité/S* +hérétique/S* +hérissement/S. +hérisser/a0p+ +hérissonne/F. +hérissonner/a0p+ +héritabilité/S* +héritable/S* +héritage/S* +héritée/F* +hériter/a1p. +héritière/F* +hermandad/S* +hermaphrodisme/S* +hermaphrodite/S* +herméneute/S* +herméneutique/S* +herméneutique/S* +hermès/L'D'Q' +hermesse/S. +herméticité/S* +hermétique/S* +hermétiquement/D'Q' +hermétisme/S* +hermétiste/S* +hermine/S* +herminée/F* +herminette/S* +hermitienne/F* +herniaire/S. +herniaire/S. +hernie/S. +herniée/F. +hernieuse/W. +héro/L'D'Q' +héroïcité/S* +héroï-comique/S* +héroïde/S* +héroïne/S* +héroïnomane/S* +héroïnomanie/S* +héroïque/S* +héroïquement/D'Q' +héroïsme/S* +héron/S. +héronneau/X. +héronnière/S. +héros +herpe/S. +herpès/L'D'Q' +herpétiforme/S* +herpétique/S* +herpétisme/S* +herpétologie/S* +herpétologique/S* +herpétologiste/S* +hersage/S. +herschage/S. +herscher/a0p. +herscheuse/F. +herse/S. +herser/a0p+ +herseuse/F. +hertz/Ui +hertzienne/F. +hervienne/F. +hesbignonne/F. +hésitante/F* +hésitation/S* +hésiter/a1p. +hessienne/F. +hétaïre/S* +hétairie/S* +hétéro/S* +hétérocentrique/S* +hétérocère/S* +hétérocerque/S* +hétérochromatine/S* +hétérochrome/S* +hétérochromie/S* +hétérochromosome/S* +hétérochronie/S* +hétéroclite/S* +hétéroclitique/S* +hétérocycle/S* +hétérocyclique/S* +hétérodiégétique/S* +hétérodonte/S* +hétérodoxe/S* +hétérodoxie/S* +hétéroduplex/L'D'Q' +hétérodyne/S* +hétérogame/S* +hétérogamie/S* +hétérogène/S* +hétérogénéité/S* +hétérogenèse/S* +hétérogénie/S* +hétérogreffe/S* +hétérojonction/S* +hétérolécithe/S* +hétérologue/S* +hétérolyse/S* +hétérométabole/S* +hétéromorphe/S* +hétéromorphie/S* +hétéromorphisme/S* +hétéronome/S* +hétéronomie/S* +hétéronormativité/S* +hétéronormée/F* +hétéronyme/S* +hétéronyme/S* +hétéroparentale/W* +hétéroparentalité/S* +hétérophilie/S* +hétérophyllie/S* +hétéroplastie/S* +hétéroplastique/S* +hétéroprotéine/S* +hétéroprothallie/S* +hétéroptère/S* +hétéroptère/S* +hétéroscédasticité/S* +hétérosexualité/S* +hétérosexuelle/F* +hétéroside/S* +hétérosis/L'D'Q' +hétérosome/S* +hétérosphère/S* +hétérosporée/F* +hétérotherme/S* +hétérotherme/S* +hétérothermie/S* +hétérotrophe/S* +hétérotrophie/S* +hétérozygote/S* +hétérozygotie/S* +hetman/S* +hêtraie/S. +hêtre/S. +heu +heulandite/S. +heur/S* +heure/S* +heure-homme/L'D'Q' +heure-machine/L'D'Q' +heures-homme/D'Q' +heures-machine/D'Q' +heureuse/W* +heureusement/D'Q' +heuristique/S* +heuristique/S* +heuristiquement/L'D'Q' +heurt/S. +heurter/a0p+ +heurtoir/S. +hévéa/S* +hévéaculture/S* +hexacanthe/S* +hexachlorophène/S* +hexachlorure/S* +hexacontaèdre/S* +hexacoralliaire/S* +hexacorde/S* +hexadécane/S* +hexadécimale/W* +hexaèdre/S* +hexaédrique/S* +hexafluorure/S* +hexagonale/W* +hexagone/S* +hexagramme/S* +hexalogie/S* +hexamètre/S* +hexamètre/S* +hexane/S* +hexanedioïque/S* +hexanoïque/S* +hexapode/S* +hexapode/S* +hexapolaire/S* +hexasyllabe/S* +hexatonique/S* +hexavalente/F* +hexitol/S. +hexogène/S* +hexose/S* +hi +hiatale/W* +hiatus/L'D'Q' +hibernale/W* +hibernante/F* +hibernation/S* +hiberner/a1p. +hibiscus/L'D'Q' +hibou/X. +hic +hickory/S. +hidalgo/S* +hiddénite/S* +hideur/S. +hideuse/W. +hideusement +hidjab/S. +hidrosadénite/S* +hie/S. +hièble/S* +hiémale/W* +hiement/S. +hier/D'Q' +hiérarchie/S. +hiérarchique/S. +hiérarchiquement +hiérarchisation/S. +hiérarchiser/a0p+ +hiérarque/S. +hiératique/S* +hiératiquement/D'Q' +hiératisée/F* +hiératisme/S* +hiérodule/S* +hiérogamie/S* +hiérogamique/S* +hiéroglyphe/S. +hiéroglyphique/S. +hiérogrammate/S* +hiérogrammatiste/S* +hiéronymite/S. +hiérophanie/S. +hiérophante/S* +hi-fi +hi-fi +high +highlander/S. +high-tech +higoumène/S* +hi-han +hi-han +hijab/S. +hikikomori/S* +hilaire/S. +hilarante/F* +hilare/S* +hilarité/S* +hilbertienne/F* +hile/S. +hiloire/S* +hilote/S* +hilotisme/S* +himalayenne/F* +himation/S* +hindi/S. +hindie/F. +hindoue/F* +hindouisme/S* +hindouiste/S* +hindoustani/S* +hindoustanie/F* +hinterland/S* +hip-hop +hip-hop +hipparchie/S* +hipparion/S* +hipparque/S* +hippiatre/S* +hippiatrie/S* +hippiatrique/S* +hippie/S. +hippique/S* +hippisme/S* +hippobosque/S* +hippocampe/S* +hippocastanacée/S* +hippocratique/S* +hippocratisme/S* +hippodrome/S* +hippogriffe/S* +hippologie/S* +hippologique/S* +hippomobile/S* +hippophaé/S* +hippophage/S* +hippophagie/S* +hippophagique/S* +hippopotame/S* +hippopotamesque/S* +hippotechnie/S* +hippotrague/S* +hippurique/S* +hippy/A. +hipster/S. +hiragana +hiragana/S. +hircine/F* +hirondeau/X* +hirondelle/S* +hirsute/S* +hirsutisme/S* +hirudine/S* +hirudinée/S* +hirudiniculture/S* +hispanique/S* +hispanisante/F* +hispanisation/S* +hispaniser/a4p+ +hispanisme/S* +hispaniste/S* +hispanité/S* +hispano-américaine/F* +hispano-arabe/S* +hispano-mauresque/S* +hispanophone/S* +hispide/S* +hissage/S. +hisser/a0p+ +histamine/S* +histaminique/S* +histaminique/S* +histidine/S* +histiocytaire/S* +histiocyte/S* +histiocytose/S* +histochimie/S* +histochimique/S* +histocompatibilité/S* +histocompatible/S* +histogenèse/S* +histogramme/S* +histoire/S* +histologie/S* +histologique/S* +histologiquement/D'Q' +histologiste/S* +histolyse/S* +histone/S* +histopathologie/S* +histopathologique/S* +histopathologiste/S* +histoplasmose/S* +historiale/W* +historicisation/S* +historiciser/a2p+ +historicisme/S* +historiciste/S* +historicité/S* +historico-critique/S* +historienne/F* +historier/a2p+ +historiette/S* +historiographe/S* +historiographie/S* +historiographique/S* +historique/S* +historique/S* +historiquement/D'Q' +historisante/F* +historisation/S* +historiser/a4p+ +historisme/S* +histrion/S* +histrionique/S* +hit/S. +hitlérienne/F* +hitlérisme/S* +hit-parade/S. +hittite/S. +hiver/S* +hivernage/S* +hivernale/W* +hivernante/F* +hivernation/S* +hivernement/S* +hiverner/a2p+ +hmm +ho +hobbesienne/F* +hobbit/S. +hobby/A. +hobbyiste/S. +hobereau/X. +hoc +hocco/S. +hochement/S. +hochepot/S. +hochequeue/S. +hocher/a0p+ +hochet/S. +hockey/S. +hockeyeuse/F. +hodgkinienne/F. +hodjatoleslam/S. +hodographe/S* +hoir/S* +hoirie/S* +hojjat-al-islam/S. +hoki/S. +holà +holacratie/S* +holding/S. +hold-up +holisme/S* +holiste/S* +holistique/S* +hollandaise/F. +hollande/S. +hollywoodienne/F. +holmium/S* +holocauste/S* +holocène/S* +holocène/S* +holocrine/S* +holocristalline/F. +holoèdre/S* +hologamie/S* +hologramme/S* +holographe/S* +holographie/S* +holographier/a2p+ +holographique/S* +holométabole/S* +holométabole/S* +holomorphe/S* +holomorphie/S* +holomorphiquement/D'Q' +holonome/S* +holonomie/S* +holonyme/S* +holonymie/S* +holophrastique/S* +holoprotéine/S* +holoside/S* +holostéen/S* +holothurie/S* +holotype/S* +holster/S. +homard/S. +homarderie/S. +hombre/S* +home/S. +home-jacking/S. +homélie/S* +homéodomaine/S* +homéomorphe/S* +homéomorphisme/S* +homéopathe/S* +homéopathie/S* +homéopathique/S* +homéopathiquement/D'Q' +homéoprotéine/S* +homéostasie/S* +homéostat/S* +homéostatique/S* +homéotherme/S* +homéotherme/S* +homéothermie/S* +homéotique/S* +homérique/S* +homériquement +homespun/S. +homicidaire/S* +homicide/S* +homilétique/S* +hominem +hominidé/S* +hominien/S* +homininé/S* +hominisation/S* +hominisée/F* +hominoïde/S* +hommage/S* +hommasse/S* +homme/S* +homme-grenouille/L'D'Q' +homme-orchestre/L'D'Q' +homme-sandwich/L'D'Q' +hommes-grenouilles/D'Q' +hommes-orchestres/D'Q' +hommes-sandwiches/D'Q' +hommes-sandwichs/D'Q' +homo/L'D'Q' +homo/S* +homocentre/S* +homocentrique/S* +homocerque/S* +homochrome/S. +homochromie/S* +homocinétique/S* +homocyclique/S* +homodiégétique/S* +homodonte/S* +homodonte/S* +homodontie/S* +homoduplex/L'D'Q' +homo-épitaxie/S* +homofocale/W* +homogame/S* +homogamie/S* +homoganique/S* +homogénat/S* +homogène/S* +homogénéifier/a2p+ +homogénéisateur/S* +homogénéisation/S* +homogénéisatrice/F* +homogénéiser/a2p+ +homogénéité/S* +homographe/S* +homographe/S* +homographie/S* +homographique/S* +homogreffe/S* +homolatérale/W* +homologable/S* +homologation/S* +homologie/S* +homologique/S* +homologiquement/D'Q' +homologue/S* +homologuer/a2p+ +homolyse/S* +homolytique/S* +homolytique/S* +homomorphe/S* +homomorphisme/S* +homoncule/S* +homonyme/S* +homonyme/S* +homonymie/S* +homonymique/S* +homoparentale/W* +homoparentalité/S* +homophile/S* +homophilie/S* +homophobe/S* +homophobie/S* +homophone/S* +homophone/S* +homophonie/S* +homoplasie/S* +homopolaire/S* +homopolymère/S* +homopolymérique/S* +homopolymérisation/S* +homoptère/S* +homoptère/S* +homorythmique/S* +homoscédasticité/S* +homosexualité/S* +homosexuelle/F* +homosphère/S* +homothermie/S* +homothétie/S* +homothétique/S* +homotope/S* +homotopie/S* +homotopique/S* +homotopiquement/D'Q' +homoxylée/F. +homozygote/S* +homozygotie/S* +homuncule/S* +hondurienne/F. +hongkongaise/F. +hongre/S. +hongre/S. +hongrer/a0p+ +hongreuse/F. +hongroierie/S. +hongroise/F. +hongroyage/S. +hongroyer/a0p+ +hongroyeuse/F. +honnête/S* +honnêtement/D'Q' +honnêteté/S* +honneur/S* +honnir/f0p+ +honorabilité/S* +honorable/S* +honorablement/D'Q' +honoraire/S* +honorariat/S* +honorer/a4p+ +honorifique/S* +honorifiquement/D'Q' +honoris +honte/S. +honteuse/W. +honteusement +hooligan/S. +hooliganisme/S. +hop +hôpital/X* +hoplite/S* +hoquet/S. +hoqueter/d0p. +hoqueton/S. +horaire/S* +horaire/S* +horde/S. +hordéine/S* +horeca/L' +horion/S. +horizon/S* +horizontale/W* +horizontalement/D'Q' +horizontalité/S* +horloge/S* +horlogère/F* +horlogerie/S* +horlogique/S* +hormis +hormonale/W* +hormone/S* +hormoner/a2p+ +hormonothérapie/S* +hornblende/S. +horocycle/S* +horocyclique/S* +horodatage/S* +horodater/a2p+ +horodatrice/F* +horographie/S* +horokilométrique/S* +horométrie/S* +horoptère/S* +horoscope/S* +horoscopique/S* +horosphère/S* +horreur/S* +horrible/S* +horriblement/D'Q' +horrifiante/F* +horrifier/a2p+ +horrifique/S* +horripilante/F* +horripilation/S* +horripiler/a2p+ +hors +hors +horsaine/F. +hors-bilan +hors-bord +hors-champ +hors-concours +hors-cote +hors-cote +hors-d'œuvre +horseball/S. +horse-ball/S. +horse-guard/S. +horse-power +horse-pox +hors-jeu +hors-la-loi +hors-ligne +hors-média +hors-piste +hors-série +hors-série +hors-série +hors-série/S. +hors-sol +hors-sol +hors-statut +horst/S. +hors-taxe +hors-texte +hortensia/S* +horticole/S* +horticultrice/F* +horticulture/S* +hortillonnage/S* +hosanna/S* +hospice/S* +hospitalière/F* +hospitalièrement +hospitalièrement/L'D'Q' +hospitalisation/S* +hospitaliser/a2p+ +hospitalisme/S* +hospitalité/S* +hospitalo-universitaire/S* +hospodar/S* +hostellerie/S* +hostie/S* +hostile/S* +hostilement/D'Q' +hostilité/S* +hosto/S* +hot +hot-dog/S. +hôte/S* +hôtel/S* +hôtel-Dieu/L'D'Q' +hôtelière/F* +hôtellerie/S* +hôtels-Dieu/D'Q' +hôtesse/S* +hotline/S. +hot-line/S. +hotte/S. +hottée/S. +hottentote/F. +hottereau/X. +hotteret/S. +hotu/S. +hou +houache/S. +houaiche/S. +houblon/S. +houblonnage/S. +houblonner/a0p+ +houblonnière/F. +houdan/S. +houe/S. +houer/a0p+ +houille/S. +houillère/F. +houilleur/S* +houillification/S. +houka/S. +houle/S. +houlette/S. +houleuse/W. +houlomotrice/F. +houlque/S. +houmous/L'D'Q' +houp +houppe/S. +houppelande/S. +houpper/a0p+ +houppette/S. +houppier/S. +houque/S. +hourd/S. +hourdage/S. +hourder/a0p+ +hourdir/f0p+ +hourdis +houri/S. +hourque/S. +hourra +hourra/S. +hourvari/S. +housard/S* +house/S. +houseau/X. +houspiller/a0p+ +houspilleuse/F. +houssaie/S. +housse/S. +housser/a0p+ +houssine/S. +houssiner/a0p+ +houssoir/S. +houx +hovercraft/S* +hoyau/X. +hpz/||-- +http/S= +huard/S. +huart/S. +hub/S. +hublot/S. +hubris/L'D'Q' +huche/S. +hucher/a0p+ +huchet/S. +hue +huée/S. +huer/a0p+ +huerta/S. +hugolienne/F* +huguenote/F. +huilage/S* +huile/S* +huiler/a2p+ +huilerie/S* +huileuse/W* +huilière/F* +huis/L'D'Q' +huisserie/S* +huissière/F* +huit +huitain/S. +huitaine/S. +huitante +huitante-cinq +huitante-deux +huitante-et-un +huitante-huit +huitante-neuf +huitante-quatre +huitante-sept +huitante-six +huitante-trois +huitantième/S. +huitième/S. +huitièmement +huître/S* +huit-reflets +huîtrière/F* +hulotte/S. +hululement/S. +hululer/a0p. +hum +humage/S. +humagne/S* +humaine/F* +humainement/D'Q' +humanisation/S* +humaniser/a4p+ +humanisme/S* +humaniste/S* +humanistique/S* +humanitaire/S* +humanitarisme/S* +humanitariste/S* +humanité/S* +humanoïde/S* +humble/S* +humble/S* +humblement/D'Q' +humectage/S* +humectant/S* +humectation/S* +humecter/a4p+ +humecteur/S* +humer/a0p+ +humérale/W* +huméro-scapulaire/S. +humérus/L'D'Q' +humeur/S* +humide/S* +humidement/D'Q' +humidificateur/S* +humidification/S* +humidifier/a2p+ +humidistance/S* +humidité/S* +humifère/S* +humification/S* +humifier/a4p+ +humiliante/F* +humiliation/S* +humiliée/F* +humilier/a4p+ +humilité/S* +humine/S* +humique/S* +hummock/S* +humorale/W* +humorisme/S* +humoriste/S* +humoristique/S* +humoristiquement/D'Q' +humour/S* +humus/L'D'Q' +hune/S. +hunier/S. +hunnique/S* +hunter/S* +huppe/S. +huppée/F. +hurdler/S. +hure/S. +hurlante/F. +hurlement/S. +hurler/a0p+ +hurleuse/F. +hurluberlue/F* +huronienne/F. +huronne/F. +hurrah +hurrah/S. +hurricane/S. +husky/A. +hussarde/F. +husserlienne/F* +hussite/S. +hutin/S. +hutinet/S. +hutte/S. +hutue/F* +hyacinthe/S* +hyaline/F* +hyalite/S* +hyaloclastite/S* +hyaloïde/S* +hyalophane/S* +hyaloplasme/S* +hyaluronate/S* +hyaluronidase/S* +hyaluronique/S* +hybridation/S* +hybride/S* +hybrider/a4p+ +hybrideur/S* +hybridisme/S* +hybridité/S* +hybridome/S* +hybris/L'D'Q' +hydarthrose/S* +hydatide/S* +hydatidose/S* +hydatiforme/S* +hydatique/S* +hydne/S* +hydracide/S* +hydragogue/S* +hydraire/S* +hydralcoolique/S* +hydranthe/S* +hydrargyre/S* +hydrargyrique/S* +hydrargyrisme/S* +hydratable/S* +hydratante/F* +hydratation/S* +hydrate/S* +hydrater/a4p+ +hydraulicienne/F* +hydraulicité/S* +hydraulique/S* +hydrauliquement/D'Q' +hydravion/S* +hydrazine/S* +hydrazone/S* +hydre/S* +hydrémie/S* +hydrie/S* +hydrique/S* +hydroalcoolique/S* +hydro-alcoolique/S* +hydrobase/S* +hydrobiologie/S* +hydrobiologiste/S* +hydrocarbonate/S* +hydrocarbonée/F* +hydrocarbure/S* +hydrocèle/S* +hydrocéphale/S* +hydrocéphalie/S* +hydrocharidacée/S* +hydrocharidée/S* +hydrochlorate/S* +hydrochlorique/S* +hydroclasseur/S* +hydrocoralliaire/S* +hydrocortisone/S* +hydrocotyle/S* +hydrocraquage/S* +hydroculture/S* +hydrocution/S* +hydrodynamique/S* +hydroélectricité/S* +hydro-électricité/S* +hydroélectrique/S* +hydro-électrique/S* +hydroélectrolytique/S* +hydro-électrolytique/S* +hydrofluorocarbure/S* +hydrofoil/S* +hydrofuge/S* +hydrofuger/a2p+ +hydrogel/S* +hydrogénation/S* +hydrogène/S* +hydrogéner/c2p+ +hydrogénocarbonate/S* +hydrogénoïde/S* +hydrogénosulfate/S* +hydrogénosulfite/S* +hydrogénosulfure/S* +hydrogéologie/S* +hydrogéologique/S* +hydrogéologue/S* +hydroglisseur/S* +hydrogramme/S* +hydrographe/S* +hydrographie/S* +hydrographique/S* +hydrohémie/S* +hydrojet/S* +hydrolase/S* +hydrolat/S* +hydrolienne/F* +hydrolienne/S* +hydrolipidique/S. +hydrolithe/S* +hydrologie/S* +hydrologique/S* +hydrologiste/S* +hydrologue/S* +hydrolysable/S* +hydrolysat/S* +hydrolyse/S* +hydrolyser/a2p+ +hydromancie/S* +hydromassage/S* +hydromécanique/S* +hydromel/S* +hydrométallurgie/S* +hydrométéore/S* +hydromètre/S* +hydrométrie/S* +hydrométrique/S* +hydrominérale/W* +hydromorphe/S* +hydromorphie/S* +hydronéphrose/S* +hydronium/S* +hydronyme/S* +hydronymie/S* +hydronymique/S* +hydropathe/S* +hydropéricarde/S* +hydroperoxyde/S* +hydrophane/S* +hydrophile/S* +hydrophile/S* +hydrophobe/S* +hydrophobie/S* +hydrophone/S* +hydrophyte/S* +hydrophyte/S* +hydropique/S* +hydropisie/S* +hydropneumatique/S* +hydropolitique/S* +hydropolitique/S* +hydroponie/S* +hydroponique/S* +hydroptère/S* +hydropulseur/S* +hydroquinone/S* +hydroraffinage/S* +hydrorésistante/F* +hydroscopie/S* +hydrosilicate/S* +hydrosoluble/S* +hydrosphère/S* +hydrostatique/S* +hydrostatique/S* +hydrostratégie/S* +hydrosulfurique/S* +hydrosystème/S* +hydrotechnique/S* +hydrotechnique/S* +hydrothérapie/S* +hydrothérapique/S* +hydrothermale/W* +hydrothermalisme/S* +hydrothorax/L'D'Q' +hydrotimètre/S* +hydrotimétrie/S* +hydrotimétrique/S* +hydrotraitement/S* +hydrotrope/S* +hydrotropie/S* +hydrotropique/S* +hydrotropisme/S* +hydroxyde/S* +hydroxylamine/S* +hydroxylase/S. +hydroxylation/S* +hydroxyle/S* +hydroxylée/F* +hydrozoaire/S* +hydrure/S* +hydrurée/F* +hyène/S* +hygiaphone/S* +hygiène/S* +hygiénique/S* +hygiéniquement/D'Q' +hygiénisme/S* +hygiéniste/S* +hygiéno-diététique/S. +hygroma/S* +hygromètre/S* +hygrométricité/S* +hygrométrie/S* +hygrométrique/S* +hygrophile/S* +hygrophobe/S* +hygrophyte/S* +hygrophyte/S* +hygroréglable/S* +hygroscope/S* +hygroscopie/S* +hygroscopique/S* +hygrostat/S* +hygrothermie/S* +hylé/S* +hylésine/S* +hylobatidé/S* +hylozoïsme/S* +hymen/S* +hyménée/S* +hyménium/S* +hyménomycète/S* +hyménoplastie/S* +hyménoptère/S* +hyménoptère/S* +hymne/S* +hymnographe/S* +hymnologie/S* +hyoïde/S* +hyoïdienne/F* +hyoscyamine/S* +hypallage/S* +hype +hyper/S* +hyperacidité/S* +hyperacousie/S* +hyperactive/F* +hyperactivité/S* +hyperaldostéronisme/S* +hyperalgésie/S* +hyperalgésique/S* +hyperalgie/S* +hyperalgique/S* +hyperappel/S* +hyperbare/S* +hyperbate/S* +hyperbole/S* +hyperbolicité/S* +hyperbolique/S* +hyperboliquement/D'Q' +hyperboliser/a2p+ +hyperboloïde/S* +hyperboloïde/S* +hyperboréenne/F* +hypercalcémie/S* +hypercalorique/S* +hypercapnie/S* +hypercentre/S* +hyperchimie/S* +hyperchlorhydrie/S* +hypercholestérolémie/S* +hypercholestérolémique/S* +hyperchrome/S* +hyperchromie/S* +hypercoagulabilité/S* +hypercomplexe/S* +hyperconformisme/S* +hyperconnectée/F* +hypercontinentale/W* +hypercontrôle/S* +hypercorrecte/F* +hypercorrection/S* +hypercorticisme/S* +hypercritique/S* +hypercube/S* +hyperdolichocéphale/S* +hyperdulie/S* +hyperelliptique/S* +hyperémèse/S* +hyperémie/S* +hyperémotive/F* +hyperémotivité/S* +hyperespace/S* +hyperesthésie/S* +hyperesthésique/S* +hypereutectique/S* +hyper-eutectique/S* +hyperexcitabilité/S* +hyperfine/F* +hyperfocale/S* +hyperfocale/W* +hyperfonction/S* +hyperfréquence/S* +hypergame/S* +hypergamie/S* +hypergamique/S* +hypergéante/S* +hypergenèse/S* +hypergéométrique/S* +hyperglycémiante/F* +hyperglycémie/S* +hyperglycémique/S* +hypergol/S* +hypergolique/S* +hypergonar/S* +hypergraphe/S* +hyperhémie/S* +hyperhidrose/S* +hypéricacée/S* +hyperindividualisme/S* +hyperinflation/S* +hyperkaliémie/S* +hyperkératose/S* +hyperkinésie/S* +hyperkinétique/S* +hyperleucocytose/S* +hyperlien/S* +hyperlipémie/S* +hyperlipidémie/S* +hypermarché/S* +hypermédia/S* +hypermédia/S* +hypermédiatisation/S* +hyperménorrhée/S* +hypermètre/S* +hypermétrie/S* +hypermétrope/S* +hypermétropie/S* +hypermnésie/S* +hypermonde/S* +hypernatrémie/S* +hypernerveuse/W* +hypernova/L'D'Q' +hypernovæ/D'Q' +hypéron/S* +hyperonyme/S* +hyperonymie/S* +hyperonymique/S* +hyperostose/S* +hyperoxie/S* +hyperparasite/S* +hyperparathyroïdie/S* +hyperphagie/S* +hyperphagique/S* +hyperphalangie/S* +hyperplan/S* +hyperplasie/S* +hyperplasique/S* +hyperproductivité/S* +hyperprolactinémie/S* +hyperpuissance/S* +hyperréactivité/S* +hyperréalisme/S* +hyperréaliste/S* +hyperréelle/F* +hyperreligiosité/S* +hypersécrétion/S* +hypersensibilisation/S* +hypersensibilité/S* +hypersensible/S* +hypersensitive/F* +hypersexualisation/S* +hypersexualisée/F* +hypersialie/S* +hypersollicitation/S* +hypersomniaque/S* +hypersomnie/S* +hypersonique/S* +hypersphère/S* +hyperstatique/S* +hyperstatisme/S* +hypersthène/S* +hypersthénie/S* +hyperstimulation/S* +hypersurface/S* +hypersustentateur/S* +hypersustentation/S* +hypersustentatrice/F* +hypersyntonie/S* +hypertélescope/S* +hypertélie/S* +hypertendue/F* +hypertenseur/S* +hypertension/S* +hypertensive/F* +hypertexte/S* +hypertexte/S* +hypertextuelle/F* +hyperthermie/S* +hyperthermique/S* +hyperthyroïdie/S* +hyperthyroïdienne/F* +hypertonie/S* +hypertonique/S* +hypertrichose/S* +hypertriglycéridémie/S* +hypertrophie/S* +hypertrophier/a4p+ +hypertrophique/S* +hyperuricémie/S* +hypervariable/S* +hyperventilation/S* +hyperventiler/a1p. +hypervigilance/S* +hyperviolence/S* +hyperviolente/F* +hyperviscosité/S* +hyperviseur/S* +hypervitaminose/S* +hyphe/S* +hypholome/S* +hypnagogique/S* +hypnogramme/S* +hypnoïde/S* +hypnologie/S* +hypnologue/S* +hypnopompique/S* +hypnose/S* +hypnothérapeute/S* +hypnothérapeutique/S* +hypnothérapie/S* +hypnotique/S* +hypnotiquement/D'Q' +hypnotisable/S* +hypnotisation/S* +hypnotiser/a4p+ +hypnotiseuse/F* +hypnotisme/S* +hypoacousie/S* +hypoalgésie/S* +hypoallergénique/S* +hypoallergique/S* +hypoblaste/S* +hypocalcémie/S* +hypocalorique/S* +hypocapnie/S* +hypocauste/S* +hypocentre/S* +hypochloreuse/W* +hypochlorhydrie/S* +hypochlorite/S* +hypochrome/S* +hypochromie/S* +hypocondre/S* +hypocondriaque/S* +hypocondrie/S* +hypocoristique/S* +hypocorrection/S* +hypocras/L'D'Q' +hypocrisie/S* +hypocrite/S* +hypocritement/D'Q' +hypocycloïde/S* +hypoderme/S* +hypodermique/S* +hypodermite/S* +hypodermose/S* +hypodorien/S* +hypoelliptique/S* +hypoesthésie/S* +hypoeutectique/S* +hypo-eutectique/S* +hypogame/S* +hypogamie/S* +hypogamique/S* +hypogastre/S* +hypogastrique/S* +hypogée/F* +hypogée/S* +hypoglosse/S* +hypoglosse/S* +hypoglycémiante/F* +hypoglycémie/S* +hypoglycémique/S* +hypogonadisme/S* +hypogyne/S* +hypoïde/S* +hypokaliémie/S* +hypokhâgne/S* +hypolipémie/S* +hypomaniaque/S* +hypomanie/S* +hypomimie/S* +hyponatrémie/S* +hyponomeute/S* +hyponyme/S* +hyponymie/S* +hypoparathyroïdie/S* +hypoperfusion/S* +hypophosphite/S* +hypophosphoreuse/W* +hypophosphorique/S* +hypophysaire/S* +hypophyse/S* +hypopituitarisme/S* +hypoplasie/S* +hypoplasique/S* +hypoprotéinémie/S* +hyposcenium/S* +hyposécrétion/S* +hyposialie/S* +hyposodée/F* +hypospade/S* +hypospadias/L'D'Q' +hypostase/S* +hypostasier/a2p+ +hypostatique/S* +hypostatisme/S* +hypostyle/S* +hyposulfite/S* +hyposulfureuse/W* +hyposynchrone/S* +hypotendue/F* +hypotenseur/S* +hypotension/S* +hypotensive/F* +hypoténuse/S* +hypothalamique/S* +hypothalamo-hypophysaire/S* +hypothalamus/L'D'Q' +hypothécable/S* +hypothécaire/S* +hypothécairement/L'D'Q' +hypothénar/L'D'Q' +hypothèque/S* +hypothéquer/c4p+ +hypothermie/S* +hypothèse/S* +hypothético-déductive/F* +hypothétique/S* +hypothétiquement/D'Q' +hypothyroïdie/S* +hypothyroïdisme/S* +hypotonie/S* +hypotonique/S* +hypotrophie/S* +hypotrophique/S* +hypotypose/S* +hypoventilation/S* +hypovigilance/S* +hypovitaminose/S* +hypovolémie/S* +hypovolémique/S* +hypoxémie/S* +hypoxie/S* +hypoxique/S* +hypsochrome/S. +hypsomètre/S* +hypsométrie/S* +hypsométrique/S* +hysope/S* +hystérectomie/S* +hystérèse/S* +hystérésis/L'D'Q' +hystérie/S* +hystériforme/S* +hystérique/S* +hystériquement/D'Q' +hystérisation/S* +hystériser/a2p+ +hystérisme/S* +hystérographie/S* +hystéromètre/S* +hystérométrie/S* +hystérosalpingographie/S* +hystéroscope/S* +hystéroscopie/S* +hystéroscopique/S* +hystérotomie/S* +i +iambe/S* +ïambe/S* +iambique/S* +ïambique/S* +iatrogène/S* +iatrogénique/S* +iatromathématique/S* +ibère/S* +ibéride/S* +ibérique/S* +ibéris/L'D'Q' +ibid +ibidem +ibis/L'D'Q' +ibn +iboga/S* +ibuprofène/S* +icaque/S* +icaquier/S* +icarienne/F* +iceberg/S* +ice-field/S* +icelle/D'Q' +icelles/D'Q' +icelui/D'Q' +ice-shelf/A* +iceux/D'Q' +ichneumon/S* +ichnologie/S* +ichor/S* +ichoreuse/W* +ichtyocolle/S* +ichtyoïde/S* +ichtyol/S* +ichtyologie/S* +ichtyologique/S* +ichtyologiste/S* +ichtyologue/S* +ichtyophage/S* +ichtyophagie/S* +ichtyornis/L'D'Q' +ichtyosaure/S* +ichtyose/S* +ici/D'Q'Qj +ici-bas/D'Q' +icoglan/S* +icône/S* +iconicité/S* +iconique/S* +iconiser +iconoclasme/S* +iconoclaste/S* +iconoclastie/S* +iconodulie/S* +iconogène/S* +iconogène/S* +iconographe/S* +iconographie/S* +iconographique/S* +iconolâtre/S* +iconolâtrie/S* +iconologie/S* +iconologiste/S* +iconologue/S* +iconométrie/S* +iconophile/S* +iconophilie/S* +iconoscope/S* +iconostase/S* +iconothèque/S* +icosaèdre/S* +icosidodécaèdre/S* +icositétraèdre/S* +ictère/S* +ictérique/S* +ictus/L'D'Q' +id +ide/S* +idéal/X* +idéale/W* +idéalement/D'Q' +idéalisable/S* +idéalisation/S* +idéalisatrice/F* +idéaliser/a4p+ +idéalisme/S* +idéaliste/S* +idéalité/S* +idéals/D'Q' +idéation/S* +idée/S* +idée-force/L'D'Q' +idéelle/F* +idées-forces/D'Q' +idem +idempotence/S* +idempotente/F* +identifiable/S* +identifiant/S* +identification/S* +identificatoire/S* +identificatrice/F* +identifier/a4p+ +identifieur/S* +identique/S* +identiquement/D'Q' +identitaire/S* +identitarisme/S* +identité/S* +idéogrammatique/S* +idéogramme/S* +idéographie/S* +idéographique/S* +idéologie/S* +idéologique/S* +idéologiquement/D'Q' +idéologiser/a2p+ +idéologue/S* +idéomotrice/F* +idéo-motrice/F* +idéotype/S* +ides/D'Q' +idiographique/S* +idiolecte/S* +idiomatique/S* +idiome/S* +idiomographie/S* +idiomorphe/S* +idiopathie/S* +idiopathique/S* +idiophone/S* +idiosyncrasie/S* +idiosyncrasique/S* +idiosyncratique/S* +idiote/F* +idiotement/D'Q' +idiotie/S* +idiotifier/a2p+ +idiotiser/a2p+ +idiotisme/S* +idiotype/S* +idiste/S* +ido/S* +idoine/S* +idolâtre/S* +idolâtrement/L'D'Q' +idolâtrer/a4p+ +idolâtrie/S* +idolâtrique/S* +idole/S* +iduronique/S* +idylle/S* +idyllique/S* +if/S* +igloo/S* +igname/S* +ignare/S* +ignarerie/S* +ignée/F* +ignicole/S* +ignifugation/S* +ignifuge/S* +ignifugeante/F* +ignifuger/a2p+ +ignigène/S* +ignimbrite/S* +ignipuncture/S* +igniteur/S* +ignition/S* +ignivome/S* +ignoble/S* +ignoblement/D'Q' +ignominie/S* +ignominieuse/W* +ignominieusement/D'Q' +ignorance/S* +ignorante/F* +ignorantin/S* +ignorer/a4p+ +iguane/S* +iguanodon/S* +igue/S* +ijtihad/S* +ikebana/S* +il/D'Q'Q*QjSi +île/S* +iléale/W* +iléite/S* +iléo-cæcale/W* +iléo-colique/S* +iléon/S* +îlet/S* +iléus/L'D'Q' +iliaque/S* +ilicacée/S* +ilicacée/S* +îlienne/F* +ilion/S* +ilio-tibiale/F* +illatif/S* +illative/F* +illectronisme/S* +illégale/W* +illégalement/D'Q' +illégaliser/a2p+ +illégalité/S* +illégitime/S* +illégitimement/D'Q' +illégitimité/S* +illettrée/F* +illettrisme/S* +illibérale/W* +illicéité/S* +illicite/S* +illicitement/D'Q' +illico/D'Q' +illimitable/S* +illimitation/S* +illimitée/F* +illiquide/S* +illiquidité/S* +illisibilité/S* +illisible/S* +illisiblement/D'Q' +illogique/S* +illogiquement/D'Q' +illogisme/S* +illuminante/F* +illuminati/L'D'Q' +illumination/S* +illuminative/F* +illuminatrice/F* +illuminée/F* +illuminer/a4p+ +illuminisme/S* +illusion/S* +illusionner/a4p+ +illusionnisme/S* +illusionniste/S* +illusoire/S* +illusoirement/D'Q' +illustration/S* +illustrative/F* +illustratrice/F* +illustré/S* +illustre/S* +illustrement/D'Q' +illustrer/a4p+ +illustrissime/S* +illuviale/W* +illuviation/S* +illuvium/S* +illyrienne/F* +ilménite/S* +îlot/S* +îlotage/S* +ilote/S* +îlotière/F* +ilotisme/S* +ils/D'Q'Q*Si +image/S* +imager/a2p+ +imagerie/S* +imageur/S* +imageuse/F* +imagière/F* +imaginable/S* +imaginaire/S* +imaginaire/S* +imaginairement/D'Q' +imaginale/W* +imagination/S* +imaginative/F* +imaginativement/D'Q' +imaginer/a4p+ +imagisme/S* +imagiste/S* +imago/S* +imagoïque/S* +imam/S* +imamat/S* +imazamox/L'D'Q' +imbaisable/S* +imbattable/S* +imbécile/S* +imbécilement/D'Q' +imbécilité/S* +imbécillité/S* +imberbe/S* +imbiber/a4p+ +imbibition/S* +imbitable/S* +imbrication/S* +imbriquer/a4p+ +imbroglio/S* +imbrûlable/S* +imbrûlée/F* +imbrûlés/D'Q' +imbue/F* +imbuvable/S* +imidazole/S* +imidazoline/S* +imide/S* +imine/S* +imitable/S* +imitation/S* +imitative/F* +imitatrice/F* +imiter/a2p+ +immaculée/F* +immaîtrisable/S* +immanence/S* +immanente/F* +immanentisme/S* +immangeable/S* +immanquable/S* +immanquablement/D'Q' +immarcescible/S* +immariable/S* +immatérialiser/a4p+ +immatérialisme/S* +immatérialiste/S* +immatérialité/S* +immatérielle/F* +immatériellement/D'Q' +immatriculation/S* +immatriculer/a2p+ +immaturation/S* +immature/S* +immaturité/S* +immédiate/F* +immédiatement/D'Q' +immédiateté/S* +immémorable/S* +immémoriale/W* +immémorialement/D'Q' +immense/S* +immensément/D'Q' +immensité/S* +immensurable/S* +immerger/a4p+ +imméritée/F* +immersion/S* +immersive/F* +immettable/S* +immeuble/S* +immeuble/S* +immigrante/F* +immigration/S* +immigrationnisme/S* +immigrationniste/S* +immigrée/F* +immigrer/a1p. +imminemment/L'D'Q' +imminence/S* +imminente/F* +immiscer/a3p+ +immiscibilité/S* +immiscible/S* +immixtion/S* +immobile/S* +immobilement/D'Q' +immobilier/S* +immobilière/F* +immobilisation/S* +immobiliser/a4p+ +immobilisme/S* +immobiliste/S* +immobilité/S* +immodération/S* +immodérée/F* +immodérément/D'Q' +immodeste/S* +immodestement/D'Q' +immodestie/S* +immodifiable/S* +immolation/S* +immolatrice/F* +immoler/a4p+ +immonde/S* +immondice/S* +immondicité/S* +immontrable/S* +immorale/W* +immoralement/D'Q' +immoralisme/S* +immoraliste/S* +immoralité/S* +immortalisation/S* +immortaliser/a4p+ +immortalité/S* +immortelle/F* +immortellement/D'Q' +immotique/S* +immotivée/F* +immuabilité/S* +immuable/S* +immuablement/D'Q' +immune/F* +immunisante/F* +immunisation/S* +immunisée/F* +immuniser/a4p+ +immunitaire/S* +immunité/S* +immunochimie/S* +immunocompétence/S* +immunocompétente/F* +immunodéficience/S* +immunodéficiente/F* +immunodéficitaire/S* +immunodépresseur/S* +immunodépression/S* +immunodépressive/F* +immunodéprimée/F* +immunofluorescence/S* +immuno-fluorescence/S* +immunogène/S* +immunogénétique/S* +immunogénicité/S* +immunogénique/S* +immunoglobuline/S* +immunohistochimie/S* +immunologie/S* +immunologique/S* +immunologiquement/L'D'Q' +immunologiste/S* +immunologue/S* +immunopathologie/S* +immunopathologique/S* +immunostimulant/S* +immunostimulante/F* +immunosuppresseur/S* +immunosuppression/S* +immunosuppressive/F* +immunosupprimée/F* +immunothérapie/S* +immunotolérance/S* +immunotolérante/F* +immunotransfusion/S* +immutabilité/S* +impact/S* +impacter/a2p+ +impacteur/S* +impaction/S* +impactite/S* +impaire/F* +impala/S* +impalpabilité/S* +impalpable/S* +impalpablement/D'Q' +impaludation/S* +impaludée/F* +impanation/S* +imparable/S* +imparablement/D'Q' +impardonnable/S* +impardonnablement/D'Q' +impardonnée/F* +imparfait/S* +imparfaite/F* +imparfaitement/D'Q' +imparidigitée/F* +imparipennée/F* +imparisyllabique/S* +imparité/S* +impartageable/S* +impartiale/W* +impartialement/D'Q' +impartialité/S* +impartir/fC +impassable/S* +impasse/S* +impassibilité/S* +impassible/S* +impassiblement/D'Q' +impatiemment/D'Q' +impatience/S* +impatiens/L'D'Q' +impatientante/F* +impatiente/F* +impatienter/a4p+ +impatriation/S* +impatriée/F* +impatronisation/S* +impatroniser/a4p+ +impavide/S* +impavidement/D'Q' +impavidité/S* +impayable/S* +impayé/S* +impayée/F* +impeachment/S* +impeccabilité/S* +impeccable/S* +impeccablement/D'Q' +impécunieuse/W* +impécuniosité/S* +impédance/S* +impédancemètre/S* +impédante/F* +impedimentum/I* +impénétrabilité/S* +impénétrable/S* +impénétrablement/D'Q' +impénitence/S* +impénitente/F* +impensabilité/S* +impensable/S* +impensablement/D'Q' +impensée/F* +impenses/D'Q' +imper/S* +impérative/F* +impérativement/D'Q' +impératrice/S* +imperçable/S* +imperceptibilité/S* +imperceptible/S* +imperceptiblement/D'Q' +imperdable/S* +imperfectibilité/S* +imperfectible/S* +imperfection/S* +imperfective/F* +imperforation/S* +imperforée/F* +impériale/W* +impérialement/D'Q' +impérialisme/S* +impérialiste/S* +impérialité/S* +impérieuse/W* +impérieusement/D'Q' +impériosité/S* +impérissable/S* +impérissablement/D'Q' +impéritie/S* +imperium/S* +impermanence/S* +impermanente/F* +imperméabilisante/F* +imperméabilisation/S* +imperméabiliser/a2p+ +imperméabilité/S* +imperméable/S* +imperméable/S* +imperscrutable/S* +impersonnalité/S* +impersonnelle/F* +impersonnellement/D'Q' +impertinemment/D'Q' +impertinence/S* +impertinente/F* +imperturbabilité/S* +imperturbable/S* +imperturbablement/D'Q' +impesanteur/S* +impétigineuse/W* +impétigo/S* +impétrante/F* +impétration/S* +impétrer/c2p+ +impétueuse/W* +impétueusement/D'Q' +impétuosité/S* +impie/S* +impiété/S* +impitoyable/S* +impitoyablement/D'Q' +implacabilité/S* +implacable/S* +implacablement/D'Q' +implant/S* +implantable/S* +implantation/S* +implanter/a4p+ +implanteuse/F* +implantologie/S* +implantologique/S* +implantologiste/S* +implantologue/S* +implémentable/S* +implémentation/S* +implémenter/a2p+ +implexe/S* +implication/S* +implicature/S* +implicite/S* +implicite/S* +implicitement/D'Q' +impliquer/a4p+ +implorante/F* +imploration/S* +imploratrice/F* +implorer/a2p+ +implosée/F* +imploser/a1p. +implosion/S* +implosive/F* +impluvium/S* +impolarisable/S* +impolie/F* +impoliment/D'Q' +impolitesse/S* +impolitique/S* +impondérabilité/S* +impondérable/S* +impondérée/F* +impopulaire/S* +impopularité/S* +import/S* +importable/S* +importance/S* +importante/F* +importation/S* +importatrice/F* +importer/a4p+ +import-export/L'D'Q' +imports-exports/D'Q' +imports-exports/D'Q' +importune/F* +importunément/D'Q' +importuner/a2p+ +importunité/S* +imposable/S* +imposante/F* +imposer/a4p+ +imposeuse/F* +imposition/S* +impossibilité/S* +impossible/S* +impossiblement/D'Q' +imposte/S* +imposteur/S* +imposture/S* +impôt/S* +impotence/S* +impotente/F* +impraticabilité/S* +impraticable/S* +imprécation/S* +imprécatoire/S* +imprécatrice/F* +imprécise/F* +imprécisément/D'Q' +imprécision/S* +imprédictibilité/S* +imprédictible/S* +imprégnable/S* +imprégnation/S* +imprégner/c4p+ +impréhensible/S* +imprenable/S* +impréparation/S* +impréparée/F* +impresario/I* +imprésario/S* +imprescriptibilité/S* +imprescriptible/S* +imprésentable/S* +impression/S* +impressionnabilité/S* +impressionnable/S* +impressionnante/F* +impressionner/a2p+ +impressionnisme/S* +impressionniste/S* +impressive/F* +imprévisibilité/S* +imprévisible/S* +imprévisiblement/D'Q' +imprévision/S* +imprévoyance/S* +imprévoyante/F* +imprévu/S* +imprévue/F* +imprimable/S* +imprimante/F* +imprimante/S* +imprimatur/L'D'Q' +imprimé/S* +imprimer/a4p+ +imprimerie/S* +imprimeuse/F* +imprimitive/F* +impro/S* +improbabilité/S* +improbable/S* +improbation/S* +improbative/F* +improbatrice/F* +improbité/S* +improductive/F* +improductivité/S* +impromptu/S* +impromptue/F* +imprononçable/S* +impropre/S* +improprement/D'Q' +impropriété/S* +improuvable/S* +improuver/a2p+ +improvisation/S* +improvisatrice/F* +improviser/a4p+ +improviste/L'D' +imprudemment/D'Q' +imprudence/S* +imprudente/F* +impubère/S* +impuberté/S* +impubliable/S* +impubliée/F* +impudemment/D'Q' +impudence/S* +impudente/F* +impudeur/S* +impudicité/S* +impudique/S* +impudiquement/D'Q' +impuissance/S* +impuissante/F* +impulser/a2p+ +impulsion/S* +impulsionnelle/F* +impulsive/F* +impulsivement/D'Q' +impulsivité/S* +impunément/D'Q' +impunie/F* +impunité/S* +impure/F* +impurement/D'Q' +impureté/S* +imputabilité/S* +imputable/S* +imputation/S* +imputer/a4p+ +imputrescibilité/S* +imputrescible/S* +in +in/||-- +inabondance/S* +inabordable/S* +inabordée/F* +inaboutie/F* +inabritée/F* +inabrogeable/S* +inaccentuée/F* +inacceptabilité/S* +inacceptable/S* +inacceptation/S* +inacceptée/F* +inacceptée/F* +inaccessibilité/S* +inaccessible/S* +inacclimatable/S* +inacclimatement/S* +inaccomplie/F* +inaccomplissement/S* +inaccord/S* +inaccordable/S* +inaccostable/S* +inaccoutumance/S* +inaccoutumée/F* +inaccusable/S* +inachetable/S* +inachevable/S* +inachevée/F* +inachèvement/S* +inactinique/S* +inaction/S* +inactivation/S* +inactive/F* +inactivement/D'Q' +inactiver/a2p+ +inactivité/S* +inactuelle/F* +inadaptabilité/S* +inadaptable/S* +inadaptation/S* +inadaptée/F* +inadéquate/F* +inadéquatement/D'Q' +inadéquation/S* +inadmissibilité/S* +inadmissible/S* +inadvertance/S* +inajournable/S* +inaliénabilité/S* +inaliénable/S* +inaliénablement/D'Q' +inaliénation/S* +inalliable/S* +inaltérabilité/S* +inaltérable/S* +inaltérablement/D'Q' +inaltérée/F* +inamicale/W* +inamissibilité/S* +inamissible/S* +inamovibilité/S* +inamovible/S* +inanalysable/S* +inanimée/F* +inanité/S* +inanition/S* +inapaisable/S* +inapaisée/F* +inaperçue/F* +inapparente/F* +inappartenance/S* +inappétence/S* +inapplicabilité/S* +inapplicable/S* +inapplication/S* +inappliquée/F* +inappréciable/S* +inappréciée/F* +inapprivoisable/S* +inapprivoisée/F* +inapprochable/S* +inappropriable/S* +inappropriée/F* +inapte/S* +inaptitude/S* +inarrachable/S* +inarrangeable/S* +inarrêtable/S* +inarticulée/F* +inassiduité/S* +inassignable/S* +inassimilable/S* +inassociable/S* +inassouvie/F* +inassouvissable/S* +inassouvissement/S* +inassujettie/F* +inattaquable/S* +inattaquée/F* +inatteignable/S* +inattendue/F* +inattention/S* +inattentive/F* +inattentivement/L'D'Q' +inaudible/S* +inaugurale/W* +inauguration/S* +inauguratrice/F* +inaugurer/a2p+ +inauthenticité/S* +inauthentique/S* +inavouable/S* +inavouablement/D'Q' +inavouée/F* +inca/S* +incalcinable/S* +incalculable/S* +incandescence/S* +incandescente/F* +incantation/S* +incantatoire/S* +incantatrice/F* +incanter/a2p+ +incapable/S* +incapacitante/F* +incapacité/S* +incarcération/S* +incarcérer/c2p+ +incardination/S* +incardiné/S* +incarnadin/S* +incarnadine/F* +incarnat/S* +incarnate/F* +incarnation/S* +incarner/a4p+ +incartade/S* +incasable/S* +incasique/S* +incassable/S* +incendiaire/S* +incendie/S* +incendier/a2p+ +incération/S* +incertaine/F* +incertitude/S* +incessamment/D'Q' +incessante/F* +incessibilité/S* +incessible/S* +inceste/S* +incestueuse/W* +incestueusement/D'Q' +inchangeable/S* +inchangée/F* +inchantable/S* +inchauffable/S* +inchavirable/S* +inchoation/S* +inchoative/F* +incidemment/D'Q' +incidence/S* +incidente/F* +incidentelle/F* +incidenter/a1p+ +incinérateur/S* +incinération/S* +incinérer/c2p+ +incipit/L'D'Q' +incirconcise/F* +incirconcision/S* +incise/S* +inciser/a2p+ +inciseur/S* +incision/S* +incisive/F* +incisive/S* +incisivement/L'D'Q' +incisure/S* +incitabilité/S* +incitante/F* +incitation/S* +incitative/F* +incitatrice/F* +inciter/a2p+ +incivile/F* +incivilement/L'D'Q' +incivilité/S* +incivique/S* +incivisme/S* +inclassable/S* +inclémence/S* +inclémente/F* +inclinable/S* +inclinaison/S* +inclination/S* +incliner/a4p+ +inclinomètre/S* +inclure/xL +inclusion/S* +inclusive/F* +inclusivement/D'Q' +inclusivité/S* +incoagulable/S* +incoercibilité/S* +incoercible/S* +incoerciblement/D'Q' +incognita +incognito/S* +incohérence/S* +incohérente/F* +incoiffable/S* +incollable/S* +incolore/S* +incomber/aG +incombustibilité/S* +incombustible/S* +incomestible/S* +incommensurabilité/S* +incommensurable/S* +incommensurablement/D'Q' +incommodante/F* +incommode/S* +incommodément/D'Q' +incommoder/a2p+ +incommodité/S* +incommodo +incommunicabilité/S* +incommunicable/S* +incommunication/S* +incommutabilité/S* +incommutable/S* +incomparabilité/S* +incomparable/S* +incomparablement/D'Q' +incompatibilité/S* +incompatible/S* +incompétence/S* +incompétente/F* +incomplète/F* +incomplètement/D'Q' +incomplétude/S* +incomplexe/S* +incompréhensibilité/S* +incompréhensible/S* +incompréhensiblement/D'Q' +incompréhension/S* +incompréhensive/F* +incompressibilité/S* +incompressible/S* +incomprise/F* +inconcevabilité/S* +inconcevable/S* +inconcevablement/D'Q' +inconciliabilité/S* +inconciliable/S* +inconciliablement/D'Q' +incondensable/S* +inconditionnalité/S* +inconditionnée/F* +inconditionnelle/F* +inconditionnellement/D'Q' +inconduite/S* +inconfiance/S* +inconfort/S* +inconfortable/S* +inconfortablement/D'Q' +incongelable/S* +incongrue/F* +incongruence/S* +incongruité/S* +incongrûment/D'Q' +inconjugable/S* +inconnaissable/S* +inconnaissable/S* +inconnaissance/S* +inconnue/F* +inconquise/F* +inconsciemment/D'Q' +inconscience/S* +inconsciente/F* +inconséquemment/L'D'Q' +inconséquence/S* +inconséquente/F* +inconsidération/S* +inconsidérée/F* +inconsidérément/D'Q' +inconsistance/S* +inconsistante/F* +inconsolable/S* +inconsolée/F* +inconsommable/S* +inconstamment/D'Q' +inconstamment/L'D'Q' +inconstance/S* +inconstante/F* +inconstatable/S* +inconstitutionnalité/S* +inconstitutionnelle/F* +inconstitutionnellement/D'Q' +inconstructibilité/S* +inconstructible/S* +incontestabilité/S* +incontestable/S* +incontestablement/D'Q' +incontestée/F* +incontinence/S* +incontinente/F* +incontournable/S* +incontrôlable/S* +incontrôlée/F* +inconvenable/S* +inconvenance/S* +inconvenante/F* +inconvénient/S* +inconventionnalité/S* +inconventionnelle/F* +inconvertibilité/S* +inconvertible/S* +incoordination/S* +incoordonnée/F* +incopiable/S* +incorporabilité/S* +incorporable/S* +incorporalité/S* +incorporation/S* +incorporatrice/F* +incorporéité/S* +incorporelle/F* +incorporer/a4p+ +incorrecte/F* +incorrectement/D'Q' +incorrection/S* +incorrigibilité/S* +incorrigible/S* +incorrigiblement/D'Q' +incorruptibilité/S* +incorruptible/S* +incorruptiblement/D'Q' +incoterm/S* +incrédibilité/S* +incrédule/S* +incrédulité/S* +incréée/F* +incrément/S* +incrémentale/W* +incrémentalement/D'Q' +incrémentation/S* +incrémenter/a2p+ +incrémentielle/F* +increvable/S* +incriminable/S* +incriminante/F* +incrimination/S* +incriminer/a4p+ +incristallisable/S* +incritiquable/S* +incrochetable/S* +incroyable/S* +incroyablement/D'Q' +incroyance/S* +incroyante/F* +incrustante/F* +incrustation/S* +incrustatrice/F* +incruster/a4p+ +incrusteuse/F* +incubation/S* +incubatrice/F* +incube/S* +incuber/a2p+ +incuite/F* +inculcation/S* +inculpable/S* +inculpation/S* +inculpée/F* +inculper/a2p+ +inculquer/a2p+ +inculte/S* +incultivable/S* +incultivée/F* +inculturation/S* +inculture/S* +incunable/S* +incunable/S* +incurabilité/S* +incurable/S* +incurablement/D'Q' +incurie/S* +incurieuse/W* +incuriosité/S* +incursion/S* +incurvation/S* +incurver/a4p+ +incuse/S* +incuse/S* +indaguer/a1p. +indatable/S* +inde/S* +indéboulonnable/S* +indébrouillable/S* +indécachetable/S* +indécelable/S* +indécemment/D'Q' +indécence/S* +indécente/F* +indéchiffrable/S* +indéchiffrée/F* +indéchirable/S* +indécidabilité/S* +indécidable/S* +indécise/F* +indécision/S* +indéclinable/S* +indécodable/S* +indécollable/S* +indécomposable/S* +indécrochable/S* +indécrottable/S* +indécrottablement/D'Q' +indéfectibilité/S* +indéfectible/S* +indéfectiblement/D'Q' +indéfendable/S* +indéfinie/F* +indéfiniment/D'Q' +indéfinissable/S* +indéfinissablement/D'Q' +indéfinition/S* +indéformabilité/S* +indéformable/S* +indéfrichable/S* +indéfrisable/S* +indéhiscence/S* +indéhiscente/F* +indélébile/S* +indélébilement/D'Q' +indélébilité/S* +indélibérée/F* +indélicate/F* +indélicatement/D'Q' +indélicatesse/S* +indélogeable/S* +indémaillable/S* +indémêlable/S* +indemne/S* +indemnisable/S* +indemnisation/S* +indemniser/a4p+ +indemnitaire/S* +indemnité/S* +indémodable/S* +indémontable/S* +indémontrable/S* +indéniable/S* +indéniablement/D'Q' +indénombrable/S* +indénouable/S* +indentation/S* +indenter/a2p+ +indépassable/S* +indépassée/F* +indépendamment/D'Q' +indépendance/S* +indépendante/F* +indépendantisme/S* +indépendantiste/S* +indéplaçable/S* +indéracinable/S* +indéréglable/S* +indescriptible/S* +indésirable/S* +indésirablement/D'Q' +indésirée/F* +indésireuse/W* +indestructibilité/S* +indestructible/S* +indestructiblement/D'Q' +indétectable/S* +indéterminable/S* +indétermination/S* +indéterminée/F* +indéterminisme/S* +indéterministe/S* +indétrônable/S* +index/L'D'Q' +indexable/S* +indexage/S* +indexation/S* +indexer/a2p+ +indianisme/S* +indianiste/S* +indianité/S* +indianocéanique/S* +indic/S* +indican/S* +indication/S* +indicative/F* +indicatrice/F* +indice/S* +indicer/a2p+ +indiciaire/S* +indicibilité/S* +indicible/S* +indiciblement/D'Q' +indicielle/F* +indiction/S* +indienne/F* +indifféremment/D'Q' +indifférence/S* +indifférenciation/S* +indifférenciée/F* +indifférente/F* +indifférentisme/S* +indifférentiste/S* +indifférer/c2p+ +indigénat/S* +indigence/S* +indigène/S* +indigénisme/S* +indigéniste/S* +indigente/F* +indigeste/S* +indigestible/S* +indigestion/S* +indigète/S* +indignation/S* +indigne/S* +indignée/F* +indignement/D'Q' +indigner/a4p+ +indignité/S* +indigo/L'D'Q' +indigo/S* +indigotier/S* +indigotine/S* +indilatable/S* +indiquer/a2p+ +indirecte/F* +indirectement/D'Q' +indirection/S* +indiscernabilité/S* +indiscernable/S* +indisciplinable/S* +indiscipline/S* +indisciplinée/F* +indiscrète/F* +indiscrètement/D'Q' +indiscrétion/S* +indiscriminée/F* +indiscutable/S* +indiscutablement/D'Q' +indiscutée/F* +indispensabilité/S* +indispensable/S* +indispensablement/D'Q' +indisponibilité/S* +indisponible/S* +indisposer/a2p+ +indisposition/S* +indisputable/S* +indissociabilité/S* +indissociable/S* +indissociablement/D'Q' +indissolubilité/S* +indissoluble/S* +indissolublement/D'Q' +indistincte/F* +indistinctement/D'Q' +indistinction/S* +indistinguable/S* +indium/S* +individu/S* +individualisable/S* +individualisante/F* +individualisation/S* +individualiser/a4p+ +individualisme/S* +individualiste/S* +individualité/S* +individuation/S* +individuelle/F* +individuellement/D'Q' +individuer/a4p+ +indivisaire/S* +indivise/F* +indivisément/D'Q' +indivisibilité/S* +indivisible/S* +indivisiblement/D'Q' +indivision/S* +in-dix-huit/L'D'Q' +in-dix-huit/L'D'Q' +indo-aryen/S* +indo-aryenne/F* +indochinoise/F* +indocile/S* +indocilité/S* +indo-européenne/F* +indole/S* +indolemment/D'Q' +indolence/S* +indolente/F* +indolique/S* +indolore/S* +indo-malaise/F* +indomptable/S* +indomptablement/D'Q' +indomptée/F* +indonésienne/F* +indo-pakistanaise/F* +indophénol/S* +in-douze/L'D'Q' +in-douze/L'D'Q' +indri/S* +indubitable/S* +indubitablement/D'Q' +inductance/S* +inductible/S* +induction/S* +inductive/F* +inductivement/D'Q' +inductivisme/S* +inductrice/F* +indue/F* +induire/yL +induit/S* +indulgemment/D'Q' +indulgence/S* +indulgencier/a2p+ +indulgente/F* +induline/S* +indult/S* +indûment/D'Q' +induration/S* +indurer/a2p+ +indusie/S* +industrialisable/S* +industrialisation/S* +industrialiser/a4p+ +industrialisme/S* +industrie/S* +industrielle/F* +industriellement/D'Q' +industrieuse/W* +industrieusement/D'Q' +induvie/S* +inébranlable/S* +inébranlablement/D'Q' +inébranlée/F* +inéchangeable/S* +inécoutable/S* +inécoutée/F* +inédite/F* +inéducable/S* +inéducation/S* +inéduquée/F* +ineffabilité/S* +ineffable/S* +ineffablement/D'Q' +ineffaçable/S* +ineffaçablement/D'Q' +ineffective/F* +ineffectivité/S* +inefficace/S* +inefficacement/D'Q' +inefficacité/S* +inefficience/S* +inefficiente/F* +inégalable/S* +inégale/W* +inégalée/F* +inégalement/D'Q' +inégalitaire/S* +inégalité/S* +inélasticité/S* +inélastique/S* +inélégamment/D'Q' +inélégance/S* +inélégante/F* +inéligibilité/S* +inéligible/S* +inéluctabilité/S* +inéluctable/S* +inéluctablement/D'Q' +inémotivité/S* +inemployabilité/S* +inemployable/S* +inemployée/F* +inénarrable/S* +inengendrée/F* +inentamable/S* +inentamée/F* +inentendue/F* +inenvisageable/S* +inéprouvée/F* +inepte/S* +ineptement/D'Q' +ineptie/S* +inépuisable/S* +inépuisablement/D'Q' +inépuisée/F* +inéquation/S* +inéquitable/S* +inerme/S* +inertage/S* +inerte/S* +inertie/S* +inertielle/F* +inescomptable/S* +inespérable/S* +inespérance/S* +inespérée/F* +inespérément/D'Q' +inespoir/S* +inesquivable/S* +inessentialité/S* +inessentielle/F* +inessif/S* +inesthétique/S* +inestimable/S* +inétanchéité/S* +inétendue/F* +inévitabilité/S* +inévitable/S* +inévitablement/D'Q' +inexacte/F* +inexactement/D'Q' +inexactitude/S* +inexaucée/F* +inexcitabilité/S* +inexcitable/S* +inexcusable/S* +inexcusablement/L'D'Q' +inexécutable/S* +inexécutée/F* +inexécution/S* +inexercée/F* +inexhaustible/S* +inexigibilité/S* +inexigible/S* +inexistante/F* +inexistence/S* +inexorabilité/S* +inexorable/S* +inexorablement/D'Q' +inexpérience/S* +inexpérimentée/F* +inexperte/F* +inexpiable/S* +inexpiablement/D'Q' +inexpiée/F* +inexplicabilité/S* +inexplicable/S* +inexplicablement/D'Q' +inexpliquée/F* +inexploitable/S* +inexploitée/F* +inexplorable/S* +inexplorée/F* +inexplosible/S* +inexpressive/F* +inexprimable/S* +inexprimablement/D'Q' +inexprimée/F* +inexpugnable/S* +inextensibilité/S* +inextensible/S* +inextinguible/S* +inextirpable/S* +inextricable/S* +inextricablement/D'Q' +infaillibilité/S* +infaillible/S* +infailliblement/D'Q' +infaisabilité/S* +infaisable/S* +infalsifiable/S* +infamante/F* +infâme/S* +infamie/S* +infante/F* +infanterie/S* +infanticide/S* +infantile/S* +infantilisante/F* +infantilisation/S* +infantiliser/a2p+ +infantilisme/S* +infarctus/L'D'Q' +infatigabilité/S* +infatigable/S* +infatigablement/D'Q' +infatuation/S* +infatuée/F* +infatuer/a4p+ +inféconde/F* +infécondité/S* +infectante/F* +infecte/F* +infectée/F* +infecter/a4p+ +infectieuse/W* +infectiologie/S* +infectiologique/S* +infectiologue/S* +infection/S* +infectiosité/S* +infectivité/S* +infélicité/S* +inféodation/S* +inféoder/a4p+ +infère/S* +inférence/S* +inférentielle/F* +inférer/c2p+ +inférieure/F* +inférieurement/D'Q' +infériorisation/S* +inférioriser/a2p+ +infériorité/S* +infermentescible/S* +infernale/W* +infernalement/D'Q' +inférovariée/F* +infertile/S* +infertilité/S* +infestation/S* +infester/a2p+ +infeutrable/S* +infibulation/S* +infichue/F* +infidèle/S* +infidèlement/D'Q' +infidélité/S* +infigurabilité/S* +infiltrat/S* +infiltration/S* +infiltrée/F* +infiltrer/a4p+ +infiltrométrie/S* +infime/S* +infime/S* +infinie/F* +infiniment/L'D'Q' +infinitaire/S* +infinité/S* +infinitésimale/W* +infinitésimalement/D'Q' +infinitisme/S* +infinitive/F* +infinitude/S* +infinitum +infirmable/S* +infirmation/S* +infirmative/F* +infirme/S* +infirmer/a2p+ +infirmerie/S* +infirmière/F* +infirmité/S* +infixe/S* +inflammabilité/S* +inflammable/S* +inflammation/S* +inflammatoire/S* +inflation/S* +inflationnaire/S* +inflationniste/S* +infléchir/f4p+ +infléchissement/S* +inflexibilité/S* +inflexible/S* +inflexiblement/D'Q' +inflexion/S* +infliger/a4p+ +inflorescence/S* +influençable/S* +influence/S* +influencer/a2p+ +influenceuse/F* +influente/F* +influenza/S* +influer/a1p. +influx/L'D'Q' +info/S* +infobésité/S* +infobulle/S* +infogérance/S* +infogérant/S* +infographe/S* +infographie/S* +infographique/S* +infographiste/S* +in-folio/L'D'Q' +in-folio/L'D'Q' +infondée/F* +infonuagique/S* +informaticienne/F* +information/S* +informationnelle/F* +informatique/S* +informatique/S* +informatiquement/D'Q' +informatisable/S* +informatisation/S* +informatiser/a4p+ +informative/F* +informatrice/F* +informe/S* +informelle/F* +informellement/D'Q' +informer/a4p+ +informité/S* +informulable/S* +informulée/F* +inforoute/S* +infortune/S* +infortunée/F* +infosphère/S* +infothèque/S* +infoutue/F* +infra/L'D' +infrabasse/S* +infra-classe/S* +infraction/S* +infractionnelle/F* +infractrice/F* +infradienne/F* +infra-embranchement/S* +infralapsaire/S* +infraliminaire/S* +infraliminale/W* +infralittorale/W* +inframonde/S* +infra-monde/S* +infranationale/W* +infranchissable/S* +infrangible/S* +infra-ordre/S* +infra-règne/S* +infrarouge/S* +infrason/S* +infra-son/S* +infrasonore/S* +infra-sonore/S* +infraspécifique/S* +infrastructure/S* +infravision/S* +infréquentable/S* +infréquentée/F* +infroissabilité/S* +infroissable/S* +infructueuse/W* +infructueusement/D'Q' +infule/S* +infumable/S* +infundibuliforme/S* +infundibulum/S* +infuse/F* +infuser/a2p+ +infusibilité/S* +infusible/S* +infusion/S* +infusoire/S* +ingagnable/S* +ingambe/S* +ingé/S* +ingénier/a3p+ +ingénierie/S* +ingénierique/S* +ingénieur-conseil/L'D'Q' +ingénieure/F* +ingénieure-conseil/L'D'Q' +ingénieures-conseils/D'Q' +ingénieurs-conseils/D'Q' +ingénieuse/W* +ingénieusement/D'Q' +ingéniosité/S* +ingénue/F* +ingénuité/S* +ingénument/D'Q' +ingérable/S* +ingérence/S* +ingérer/c4p+ +ingestion/S* +ingouvernable/S* +ingrate/F* +ingratement/D'Q' +ingratitude/S* +ingrédient/S* +ingression/S* +ingressive/F* +inguérissable/S* +inguinale/W* +ingurgitation/S* +ingurgiter/a2p+ +inhabile/S* +inhabilement/D'Q' +inhabileté/S* +inhabilité/S* +inhabitable/S* +inhabitation/S* +inhabitée/F* +inhabituelle/F* +inhabituellement/D'Q' +inhalateur/S* +inhalation/S* +inhalatrice/F* +inhaler/a2p+ +inhalothérapeute/S* +inhalothérapie/S* +inharmonie/S* +inharmonieuse/W* +inharmonique/S* +inhérence/S* +inhérente/F* +inhiber/a2p+ +inhibition/S* +inhibitive/F* +inhibitrice/F* +inhomogène/S* +inhomogénéité/S* +inhospitalière/F* +inhospitalièrement/D'Q' +inhospitalité/S* +inhumaine/F* +inhumainement/D'Q' +inhumanité/S* +inhumation/S* +inhumée/F* +inhumer/a2p+ +inimaginable/S* +inimaginablement/D'Q' +inimaginée/F* +inimitabilité/S* +inimitable/S* +inimitablement/D'Q' +inimitée/F* +inimitié/S* +ininflammabilité/S* +ininflammable/S* +inintelligemment/D'Q' +inintelligence/S* +inintelligente/F* +inintelligibilité/S* +inintelligible/S* +inintelligiblement/D'Q' +inintentionnellement/L'D'Q' +inintéressante/F* +inintérêt/S* +ininterprétable/S* +ininterrompue/F* +inique/S* +iniquement/D'Q' +iniquité/S* +initiale/W* +initialement/D'Q' +initialer/a2p+ +initialisation/S* +initialiser/a2p+ +initiation/S* +initiatique/S* +initiatiquement/D'Q' +initiative/S* +initiatrice/F* +initiée/F* +initier/a4p+ +initio +injaculation/S* +injectable/S* +injecter/a4p+ +injection/S* +injective/F* +injectivité/S* +injectrice/F* +injoignable/S* +injonction/S* +injonctive/F* +injouable/S* +injure/S* +injuriée/F* +injurier/a4p+ +injurieuse/W* +injurieusement/D'Q' +injuste/S* +injustement/D'Q' +injustice/S* +injustifiable/S* +injustifiée/F* +inlandsis/L'D'Q' +inlassable/S* +inlassablement/D'Q' +inlay/S* +innavigable/S* +innée/F* +innéisme/S* +innéiste/S* +innéité/S* +innervation/S* +innerver/a2p+ +innocemment/D'Q' +innocence/S* +innocente/F* +innocentée/F* +innocenter/a2p+ +innocuité/S* +innombrable/S* +innombrablement/D'Q' +innomée/F* +innominée/F* +innommable/S* +innommée/F* +innovante/F* +innovation/S* +innovatrice/F* +innover/a2p+ +innumérisme/S* +inobservable/S* +inobservance/S* +inobservation/S* +inobservée/F* +inoccupation/S* +inoccupée/F* +in-octavo/L'D'Q' +in-octavo/L'D'Q' +inoculabilité/S* +inoculable/S* +inoculation/S* +inoculer/a4p+ +inoculum/S* +inodore/S* +inoffensive/F* +inoffensivement/L'D'Q' +inondable/S* +inondation/S* +inondée/F* +inonder/a4p+ +inopérable/S* +inopérante/F* +inopinée/F* +inopinément/D'Q' +inopportune/F* +inopportunément/D'Q' +inopportunité/S* +inopposabilité/S* +inopposable/S* +inorganique/S* +inorganisable/S* +inorganisation/S* +inorganisée/F* +inositol/S* +inotrope/S* +inoubliable/S* +inoubliablement/D'Q' +inoubliée/F* +inouïe/F* +inox/L'D'Q' +inoxydabilité/S* +inoxydable/S* +in-plano/L'D'Q' +in-plano/L'D'Q' +input/S* +inqualifiable/S* +inquart/S* +inquartation/S* +in-quarto/L'D'Q' +in-quarto/L'D'Q' +inquestionnée/F* +inquiétante/F* +inquiète/F* +inquiéter/c4p+ +inquiétude/S* +inquisition/S* +inquisitive/F* +inquisitoire/S* +inquisitoriale/W* +inquisitrice/F* +inracontable/S* +inratable/S* +inrayable/S* +insaisissabilité/S* +insaisissable/S* +insalissable/S* +insalivation/S* +insalubre/S* +insalubrité/S* +insane/S* +insanité/S* +insaponifiable/S* +insatiabilité/S* +insatiable/S* +insatiablement/D'Q' +insatisfaction/S* +insatisfaisante/F* +insatisfaite/F* +insaturable/S* +insaturation/S* +insaturée/F* +insauvable/S* +insciemment/L'D'Q' +inscriptible/S* +inscription/S* +inscrire/y1 +inscrite/F* +inscrivante/F* +inscrutable/S* +insculper/a2p+ +insécabilité/S* +insécable/S* +insectarium/S* +insecte/S* +insecticide/S* +insectifuge/S* +insectivore/S* +insectivore/S* +insectoïde/S* +insécure/S* +insécuritaire/S* +insécurité/S* +in-seize/L'D'Q' +in-seize/L'D'Q' +inselberg/S* +insémination/S* +inséminatrice/F* +inséminer/a2p+ +insensée/F* +insensément/D'Q' +insensibilisation/S* +insensibiliser/a4p+ +insensibilité/S* +insensible/S* +insensiblement/D'Q' +inséparabilité/S* +inséparable/S* +inséparablement/D'Q' +insérable/S* +insérer/c4p+ +insermentée/F* +insert/S* +insertion/S* +insidieuse/W* +insidieusement/D'Q' +insigne/S* +insigne/S* +insignifiance/S* +insignifiante/F* +insincère/S* +insincérité/S* +insinuante/F* +insinuation/S* +insinuative/F* +insinuer/a4p+ +insipide/S* +insipidité/S* +insistance/S* +insistante/F* +insister/a1p. +insituable/S* +insociabilité/S* +insociable/S* +insoignable/S* +insolation/S* +insolemment/D'Q' +insolence/S* +insolente/F* +insoler/a2p+ +insolite/S* +insolite/S* +insolitement/D'Q' +insolubilisation/S* +insolubiliser/a2p+ +insolubilité/S* +insoluble/S* +insolvabilité/S* +insolvable/S* +insomniaque/S* +insomnie/S* +insomnieuse/W* +insondabilité/S* +insondable/S* +insondée/F* +insonore/S* +insonorisante/F* +insonorisation/S* +insonoriser/a2p+ +insonorité/S* +insortable/S* +insouciamment/D'Q' +insouciance/S* +insouciante/F* +insoucieuse/W* +insoucieusement/D'Q' +insoumise/F* +insoumission/S* +insoupçonnable/S* +insoupçonnée/F* +insoutenabilité/S* +insoutenable/S* +inspecter/a2p+ +inspection/S* +inspectorat/S* +inspectrice/F* +inspirante/F* +inspiration/S* +inspiratoire/S* +inspiratrice/F* +inspirée/F* +inspirer/a4p+ +instabilité/S* +instable/S* +installable/S* +installation/S* +installatrice/F* +installer/a4p+ +installeur/S* +instamment/D'Q' +instance/S* +instanciation/S* +instancier/a2p+ +instant/S* +instantanée/F* +instantanéiste/S* +instantanéité/S* +instantanément/D'Q' +instante/F* +instanton/S* +instar/L' +instationnaire/S* +instauration/S* +instauratrice/F* +instaurer/a4p+ +instigation/S* +instigatrice/F* +instiguer/a2p+ +instillation/S* +instiller/a2p+ +instinct/S* +instinctive/F* +instinctivement/D'Q' +instinctuelle/F* +instit/S* +instituer/a4p+ +institut/S* +institutes/D' +institution/S* +institutionnalisation/S* +institutionnaliser/a4p+ +institutionnalisme/S* +institutionnaliste/S* +institutionnelle/F* +institutionnellement/D'Q' +institutrice/F* +instruction/S* +instructive/F* +instructivement/D'Q' +instructrice/F* +instruire/yM +instrument/S* +instrumentaire/S* +instrumental/X* +instrumentale/W* +instrumentalement/D'Q' +instrumentalisation/S* +instrumentaliser/a2p+ +instrumentalisme/S* +instrumentaliste/S* +instrumentalité/S* +instrumentation/S* +instrumenter/a2p+ +instrumentiste/S* +insu/L' +insubmersibilité/S* +insubmersible/S* +insubordination/S* +insubordonnée/F* +insuccès/L'D'Q' +insuffisamment/D'Q' +insuffisance/S* +insuffisante/F* +insufflateur/S* +insufflation/S* +insuffler/a2p+ +insulaire/S* +insularité/S* +insulinase/S* +insuline/S* +insulinémie/S* +insulinique/S* +insulinodépendante/F* +insulino-dépendante/F* +insulinome/S* +insulinorésistance/S* +insulinothérapie/S* +insultante/F* +insulte/S* +insultée/F* +insulter/a4p+ +insulteur/S* +insupportabilité/S* +insupportable/S* +insupportablement/D'Q' +insupporter/a3p+ +insurgée/F* +insurgence/S* +insurgente/F* +insurger/a3p+ +insurmontable/S* +insurpassable/S* +insurrection/S* +insurrectionnelle/F* +insurrectionniste/S* +intacte/F* +intactile/S* +intaille/S* +intailler/a2p+ +intangibilité/S* +intangible/S* +intarissable/S* +intarissablement/D'Q' +intégrabilité/S* +intégrable/S* +intégrale/S* +intégrale/W* +intégralement/D'Q' +intégralité/S* +intégrande/S* +intégrante/F* +intégrateur/S* +intégration/S* +intégrationniste/S* +intègre/S* +intègrement/L'D'Q' +intégrer/c4p+ +intégrisme/S* +intégriste/S* +intégrité/S* +intégrodifférentielle/F* +intellect/S* +intellection/S* +intellectisme/S* +intellectualisation/S* +intellectualiser/a2p+ +intellectualisme/S* +intellectualiste/S* +intellectualité/S* +intellectuelle/F* +intellectuellement/D'Q' +intelligemment/D'Q' +intelligence/S* +intelligente/F* +intelligentsia/S* +intelligentzia/S* +intelligibilité/S* +intelligible/S* +intelligiblement/D'Q' +intello/S* +intempérance/S* +intempérante/F* +intempérie/S* +intempestive/F* +intempestivement/D'Q' +intempestivité/S* +intemporalité/S* +intemporelle/F* +intemporellement/L'D'Q' +intenable/S* +intendance/S* +intendante/F* +intense/S* +intensément/D'Q' +intensification/S* +intensifier/a4p+ +intensité/S* +intensive/F* +intensivement/D'Q' +intensivité/S* +intenter/a2p+ +intention/S* +intentionnalité/S* +intentionnée/F* +intentionnelle/F* +intentionnellement/D'Q' +inter/S* +interacadémique/S* +interacteur/S* +interaction/S* +interactionnelle/F* +interactionnisme/S* +interactionniste/S* +interactive/F* +interactivement/D'Q' +interactivité/S* +interagir/f1p+ +interagissante/F* +interagissement/S* +interalliée/F* +interannuelle/F* +interarabe/S* +interarmées/L'D'Q' +interarmes/L'D'Q' +interastrale/W* +interatomique/S* +interattraction/S* +interbancaire/S* +interbancarité/S* +interblocage/S* +intercalaire/S* +intercalaire/S* +intercalation/S* +intercaler/a4p+ +intercantonale/W* +intercéder/c1p. +intercellulaire/S* +interceltique/S* +intercepter/a2p+ +intercepteur/S* +interception/S* +intercesseur/S* +intercession/S* +interchangeabilité/S* +interchangeable/S* +interchanger/a2p+ +interchromosomique/S* +intercirculation/S* +intercité/S* +interclasse/S* +interclassement/S* +interclasser/a2p+ +interclasseuse/S* +interclubs/D'Q' +interclubs/L'D'Q' +intercommunale/W* +intercommunalité/S* +intercommunautaire/S* +intercommunication/S* +intercommunion/S* +intercompréhension/S* +interconfessionnelle/F* +interconnaissance/S* +interconnectable/S* +interconnecter/a2p+ +interconnexion/S* +intercontinentale/W* +intercostale/W* +intercotidale/W* +intercours/L'D'Q' +intercourse/S* +intercritique/S* +interculturalisme/S* +interculturalité/S* +interculturelle/F* +intercurrente/F* +interdécile/S* +interdentaire/S* +interdépartementale/W* +interdépendance/S* +interdépendante/F* +interdiction/S* +interdigitale/W* +interdimensionnelle/F* +interdire/yD +interdisciplinaire/S* +interdisciplinarité/S* +interdit/S* +interentreprises +intéressante/F* +intéressée/F* +intéressement/S* +intéresser/a4p+ +intérêt/S* +interétatique/S* +inter-étatique/S* +interethnique/S* +inter-ethnique/S* +interfaçable/S* +interfaçage/S* +interface/S* +interfacer/a2p+ +interfaciale/F* +interfécondation/S* +interféconde/F* +interfécondité/S* +interférence/S* +interférente/F* +interférentielle/F* +interférer/c1p. +interféromètre/S* +interférométrie/S* +interférométrique/S* +interféron/S* +interfertile/S* +interfluve/S* +interfoliage/S* +interfolier/a2p+ +interfonctionnement/S* +interfonctionner/a8p. +intergalactique/S* +intergénérationnelle/F* +intergiciel/S* +interglaciaire/S* +intergouvernementale/W* +intergouvernementalité/S* +intergranulaire/S* +intergroupe/S* +interhumaine/F* +intérieur/S* +intérieure/F* +intérieurement/D'Q' +intérim/S* +intérimaire/S* +interindividuelle/F* +interinstitutionnelle/F* +inter-institutionnelle/F* +intériorisation/S* +intérioriser/a2p+ +intériorité/S* +interjection/S* +interjective/F* +interjeter/d2p+ +interlettrage/S* +interleukine/S* +interlignage/S* +interligne/S* +interligner/a2p+ +interlinéaire/S* +interlingua/S* +interlinguale/W* +interlingue/S* +interlinguistique/S* +interlinguistique/S* +interlock/S* +interlocution/S* +interlocutoire/S* +interlocutrice/F* +interlope/S* +interloquée/F* +interloquer/a2p+ +interlude/S* +intermariage/S* +intermaxillaire/S* +intermède/S* +intermédiaire/S* +intermédiation/S* +intermédier/a2p+ +intermétallique/S* +intermezzo/S* +interminable/S* +interminablement/D'Q' +interministérielle/F* +intermission/S* +intermittence/S* +intermittente/F* +intermodale/W* +intermodalité/S* +intermodulation/S* +intermoléculaire/S* +intermusculaire/S* +internalisation/S* +internaliser/a2p+ +internalisme/S* +internat/S* +internationale/W* +internationalement/D'Q' +internationalisation/S* +internationaliser/a4p+ +internationalisme/S* +internationaliste/S* +internationalité/S* +internaute/S* +interne/S* +internée/F* +internégatif/S* +internement/S* +interner/a2p+ +internet/S* +interniste/S* +internonce/S* +interocéanique/S* +intéroceptive/F* +interoculaire/S* +interopérabilité/S* +interopérable/S* +interorbitale/W* +interosseuse/W* +interpariétale/W* +interparlementaire/S* +interpelée/F* +interpeler/dA +interpellante/F* +interpellation/S* +interpellative/F* +interpellatrice/F* +interpellée/F* +interpeller/a2p+ +interpénétration/S* +interpénétrer/c3p+ +interpersonnelle/F* +interphase/S* +interphone/S* +interphonie/S* +interplanétaire/S* +interpolation/S* +interpolatrice/F* +interpoler/a2p+ +interposer/a4p+ +interpositif/S* +interposition/S* +interprétable/S* +interprétante/F* +interprétariat/S* +interprétation/S* +interprétative/F* +interprétatrice/F* +interprète/S* +interpréter/c4p+ +interpréteur/S* +interprofession/S* +interprofessionnelle/F* +interpsychologie/S* +interquartile/S* +interquartile/S* +interraciale/W* +interrégionale/W* +interrègne/S* +interrelation/S* +interreliée/F* +interreligieuse/W* +interro/S* +interrogat/S* +interrogation/S* +interrogative/F* +interrogativement/D'Q' +interrogatoire/S* +interrogatrice/F* +interrogeable/S* +interrogée/F* +interroger/a4p+ +interroi/S* +interrompre/tA +interronégative/F* +interro-négative/F* +interruptible/S* +interruption/S* +interruptive/F* +interruptrice/F* +intersaison/S* +intersecter/a2p+ +intersection/S* +intersectionnalité/S* +intersectionnelle/F* +intersectorielle/F* +intersession/S* +intersexe/S* +intersexualité/S* +intersexuation/S* +intersexuée/F* +intersexuelle/F* +intersidérale/W* +intersigne/S* +interspatialité/S* +interspécifique/S* +interstellaire/S* +interstice/S* +interstitielle/F* +intersubjective/F* +intersubjectivité/S* +intersyndicale/S* +intersyndicale/W* +intertemporelle/F* +intertexte/S* +intertextualité/S* +intertextuelle/F* +intertidale/W* +intertitre/S* +intertrigo/S* +intertropicale/W* +interuniversitaire/S* +interurbaine/F* +intervallaire/S* +intervalle/S* +intervalliste/S* +intervenante/F* +intervenir/i0q+ +intervention/S* +interventionnelle/F* +interventionnisme/S* +interventionniste/S* +interventriculaire/S* +interverrouillage/S* +interversion/S* +intervertébrale/W* +intervertir/f2p+ +interview/S* +interviewée/F* +interviewer/S* +interviewer/a2p+ +intervieweuse/F* +intervocalique/S* +interzonale/W* +interzone/S* +intestat/L'D'Q' +intestat/S* +intestin/S* +intestinale/W* +intestine/F* +inti/S* +intifada/S* +intimation/S* +intime/S* +intimée/F* +intimement/D'Q' +intimer/a2p+ +intimidable/S* +intimidante/F* +intimidation/S* +intimidatrice/F* +intimidée/F* +intimider/a2p+ +intimisme/S* +intimiste/S* +intimité/S* +intitulation/S* +intitulé/S* +intituler/a4p+ +intolérable/S* +intolérablement/D'Q' +intolérance/S* +intolérante/F* +intolérantisme/S* +intonation/S* +intouchabilité/S* +intouchable/S* +intouchée/F* +intox/L'D'Q' +intoxicante/F* +intoxication/S* +intoxiquée/F* +intoxiquer/a4p+ +intra-artérielle/F* +intra-articulaire/S* +intra-atomique/S* +intra-auriculaire/S* +intraçable/S* +intracardiaque/S* +intracellulaire/S* +intracérébrale/W* +intrachromosomique/S* +intracommunautaire/S* +intracontinentale/W* +intracrânienne/F* +intradermique/S* +intradermoréaction/S* +intradermo-réaction/S* +intradiégétique/S* +intrados/L'D'Q' +intraduisible/S* +intra-embryonnaire/S* +intraépidermique/S* +intraépithéliale/W* +intra-européenne/F* +intrafamiliale/W* +intra-familiale/W* +intragénérationnelle/F* +intragénique/S* +intraitable/S* +intra-membranaire/S* +intramodale/W* +intramoléculaire/S* +intra-muros/D'Q' +intra-muros/L'D'Q' +intramusculaire/S* +intramusculaire/S* +intranet/S* +intranquille/S* +intranquillité/S* +intransférable/S* +intransigeance/S* +intransigeante/F* +intransitive/F* +intransitivement/D'Q' +intransitivité/S* +intransmissibilité/S* +intransmissible/S* +intransportable/S* +intrant/S* +intranucléaire/S* +intraoculaire/S* +intra-oculaire/S* +intrapsychique/S* +intrarachidienne/F* +intraspécifique/S* +intrathoracique/S* +intra-utérine/F* +intravaginale/W* +intravasculaire/S* +intraveineuse/S* +intraveineuse/W* +intraventriculaire/S* +intraversable/S* +intrépide/S* +intrépidement/D'Q' +intrépidité/S* +intrication/S* +intrigante/F* +intrigue/S* +intriguer/a2p+ +intrinsèque/S* +intrinsèquement/D'Q' +intriquer/a2p+ +intro/S* +introduction/S* +introductive/F* +introductoire/S* +introductrice/F* +introduire/yM +introgression/S* +introït/S* +introjecter/a0p+ +introjection/S* +intromission/S* +intron/S* +intronisation/S* +introniser/a4p+ +introrse/S* +introspection/S* +introspective/F* +introspectivement/D'Q' +introublée/F* +introuvable/S* +introversion/S* +introvertie/F* +intruse/F* +intrusion/S* +intrusive/F* +intubation/S* +intuber/a2p+ +intuition/S* +intuitionnisme/S* +intuitionniste/S* +intuitive/F* +intuitivement/D'Q' +intuitivité/S* +intuitu/L'D'Q' +intumescence/S* +intumescente/F* +intussusception/S* +inuite/F* +inukshuk/S* +inuksuk/S* +inuktitut/S* +inule/S* +inuline/S* +inusabilité/S* +inusable/S* +inusitée/F* +inusuelle/F* +inutile/S* +inutilement/D'Q' +inutilisable/S* +inutilisation/S* +inutilisée/F* +inutilité/S* +invagination/S* +invaginer/a3p+ +invaincue/F* +invalidante/F* +invalidation/S* +invalide/S* +invalidement/L'D'Q' +invalider/a2p+ +invalidité/S* +invar/S* +invariabilité/S* +invariable/S* +invariablement/D'Q' +invariance/S* +invariant/S* +invariante/F* +invasion/S* +invasive/F* +invective/S* +invectiver/a2p+ +invendable/S* +invendue/F* +inventaire/S* +inventer/a4p+ +inventeuse/S* +invention/S* +inventive/F* +inventivité/S* +inventoriage/S* +inventorier/a2p+ +inventrice/F* +invérifiable/S* +inversable/S* +inverse/S* +inverse/S* +inversement/D'Q' +inverser/a4p+ +inverseur/S* +inverseuse/F* +inversibilité/S* +inversible/S* +inversion/S* +inversive/F* +invertase/S* +invertébrée/F* +invertine/S* +invertir/f2p+ +investigation/S* +investigatrice/F* +investiguer/a1p. +investir/f4p+ +investison/S* +investissement/S* +investisseuse/F* +investiture/S* +invétérer/c3p+ +invigoration/S* +invincibilité/S* +invincible/S* +invinciblement/D'Q' +inviolabilité/S* +inviolable/S* +inviolablement/D'Q' +inviolée/F* +invisibilisation/S* +invisibiliser/a4p+ +invisibilité/S* +invisible/S* +invisiblement/D'Q' +invitante/F* +invitation/S* +invitatoire/S* +invite/S* +invitée/F* +inviter/a4p+ +inviteuse/F* +invivable/S* +invocable/S* +invocation/S* +invocatoire/S* +invocatrice/F* +involontaire/S* +involontairement/D'Q' +involucelle/S* +involucre/S* +involucrée/F* +involutée/F* +involution/S* +involutive/F* +involutivité/S* +invoquée/F* +invoquer/a2p+ +invraisemblable/S* +invraisemblablement/D'Q' +invraisemblance/S* +invulnérabilité/S* +invulnérable/S* +iodate/S* +iodation/S* +iode/S* +ioder/a2p+ +iodhydrique/S* +iodique/S* +iodisme/S* +iodoforme/S* +iodure/S* +iodurée/F* +ion/S* +ionienne/F* +ionique/S* +ionisable/S* +ionisante/F* +ionisation/S* +ioniser/a2p+ +ionogramme/S* +ionone/S* +ionosphère/S* +ionosphérique/S* +iota/L'D'Q' +iotacisme/S* +iouler/a1p. +ipé/S* +ipéca/S* +ipécacuanha/S* +ipomée/S* +ippon/S* +ipse/S* +ipséité/S* +ipso/Q' +irakienne/F* +irako-syrienne/F* +iranienne/F* +irascibilité/S* +irascible/S* +irato +ire/S* +irénique/S* +irénisme/S* +iréniste/S* +iridacée/S* +iridectomie/S* +iridescence/S* +iridescente/F* +iridiée/F* +iridienne/F* +iridium/S* +iridocyclite/S* +iridologie/S* +iridologique/S* +iridologue/S* +irienne/F* +iris/L'D'Q' +irisable/S* +irisation/S* +iriser/a4p+ +irish-terrier/S* +iritis/L'D'Q' +irlandaise/F* +iroko/S* +irone/S* +ironie/S* +ironique/S* +ironiquement/D'Q' +ironiser/a1p. +ironisme/S* +ironiste/S* +iroquoise/F* +irraccommodable/S* +irrachetable/S* +irracontable/S* +irradiance/S* +irradiante/F* +irradiateur/S* +irradiation/S* +irradiée/F* +irradier/a4p+ +irraison/S* +irraisonnable/S* +irraisonnablement/D'Q' +irraisonnée/F* +irrassasiable/S* +irrassasiée/F* +irrationalisme/S* +irrationaliste/S* +irrationalité/S* +irrationnelle/F* +irrationnellement/D'Q' +irrattrapable/S* +irréalisable/S* +irréalisée/F* +irréalisme/S* +irréaliste/S* +irréalité/S* +irrecevabilité/S* +irrecevable/S* +irréconciliable/S* +irrécouvrable/S* +irrécupérable/S* +irrécusabilité/S* +irrécusable/S* +irrécusablement/D'Q' +irrédentisme/S* +irrédentiste/S* +irréductibilité/S* +irréductible/S* +irréductiblement/D'Q' +irréelle/F* +irréellement/D'Q' +irréfléchie/F* +irréflexion/S* +irréformabilité/S* +irréformable/S* +irréfragable/S* +irréfragablement/L'D'Q' +irréfrénable/S* +irréfutabilité/S* +irréfutable/S* +irréfutablement/D'Q' +irréfutée/F* +irrégularité/S* +irrégulière/F* +irrégulièrement/D'Q' +irréligieuse/W* +irréligieusement/L'D'Q' +irréligion/S* +irréligiosité/S* +irremboursable/S* +irrémédiable/S* +irrémédiablement/D'Q' +irrémissible/S* +irrémissiblement/D'Q' +irremplaçabilité/S* +irremplaçable/S* +irréparable/S* +irréparablement/D'Q' +irrépétible/S* +irrépréhensible/S* +irreprésentable/S* +irreprésentable/S* +irrépressible/S* +irrépressiblement/D'Q' +irréprochable/S* +irréprochablement/D'Q' +irrésignée/F* +irrésistibilité/S* +irrésistible/S* +irrésistiblement/D'Q' +irrésolue/F* +irrésolument/L'D'Q' +irrésolution/S* +irrespect/S* +irrespectueuse/W* +irrespectueusement/D'Q' +irrespirable/S* +irresponsabilité/S* +irresponsable/S* +irrétrécissable/S* +irrévélée/F* +irrévéremment/D'Q' +irrévérence/S* +irrévérencieuse/W* +irrévérencieusement/D'Q' +irrévérente/F* +irréversibilité/S* +irréversible/S* +irréversiblement/D'Q' +irrévocabilité/S* +irrévocable/S* +irrévocablement/D'Q' +irrigable/S* +irrigante/F* +irrigation/S* +irrigatrice/F* +irriguer/a2p+ +irritabilité/S* +irritable/S* +irritante/F* +irritation/S* +irritative/F* +irriter/a4p+ +irrotationnelle/F* +irruption/S* +isabelle/L'D'Q' +isabelle/S* +isallobare/S* +isard/S* +isarienne/F* +isatis/L'D'Q' +isba/S* +ischémie/S* +ischémique/S* +ischiatique/S* +ischion/S* +isenthalpe/S* +isenthalpique/S* +isenthalpiquement/L'D'Q' +isentrope/S* +isentropique/S* +isentropiquement/L'D'Q' +isiaque/S* +islam/S* +islamique/S* +islamiquement/L'D'Q' +islamisation/S* +islamiser/a4p+ +islamisme/S* +islamiste/S* +islamité/S* +islamo-conservatrice/F* +islamologie/S* +islamologue/S* +islamophobe/S* +islamophobie/S* +islandaise/F* +ismaélienne/F* +ismaélisme/S* +ismaélite/S* +isoagglutination/S* +isobare/S* +isobarique/S* +isobarycentre/S* +isobathe/S* +isobathe/S* +isobutane/S* +isobutanol/S* +isocarde/S* +isocarène/S* +isocèle/S* +isocéphalie/S* +isochimène/S* +isochore/S* +isochore/S* +isochromatique/S* +isochrone/S* +isochrone/S* +isochronique/S* +isochronisme/S* +isocinétique/S* +isocinétisme/S* +isocitrate/S* +isoclinale/W* +isocline/S* +isocortex/L'D'Q' +isocratie/S* +isocyanate/S* +isodynamie/S* +isodynamique/S* +isoédrique/S* +isoélectrique/S* +isoénergétique/S* +isoenzyme/S* +isoépitype/S* +isoflavone/S* +isoforme/S* +isoforme/S* +isogame/S* +isogamie/S* +isogénie/S* +isogéotherme/S* +isoglosse/S* +isoglosse/S* +isoglucose/S* +isogone/S* +isogone/S* +isogreffe/S* +isohyète/S* +isohyète/S* +isohypse/S* +isohypse/S* +isoionique/S* +iso-ionique/S* +isolable/S* +isolante/F* +isolat/S* +isolation/S* +isolationnisme/S* +isolationniste/S* +isolatrice/F* +isolectotype/S* +isolée/F* +isolément/D'Q' +isolement/S* +isoler/a4p+ +isoleucine/S* +isologue/S* +isoloir/S* +isomérase/S* +isomère/S* +isomérie/S* +isomérique/S* +isomérisation/S* +isomériser/a2p+ +isomérisme/S* +isométrie/S* +isométrique/S* +isométriquement/D'Q' +isomonodromique/S* +isomorphe/S* +isomorphie/S* +isomorphiquement/D'Q' +isomorphisme/S* +isonéotype/S* +isoniazide/S* +isonomie/S* +isopérimètre/S* +isopérimétrie/S* +isopérimétrique/S* +isoperte/S* +iso-perte/S* +isopet/S* +isophase/S* +isopique/S* +isopode/S* +isopode/S* +isoprénaline/S* +isoprène/S* +isoprénique/S* +isopropanol/S* +isopropyle/S* +isopropylique/S* +isoptère/S* +isoptère/S* +isopycne/S* +isorel/S* +isoschizomère/S* +isoséiste/S* +isoséiste/S* +isosiste/S* +isosiste/S* +isospectrale/W* +isospectralité/S* +isospin/S* +isosporée/F* +isosporie/S* +isostasie/S* +isostatique/S* +isostatisme/S* +isosyntype/S* +isotactique/S* +isotherme/S* +isothermicité/S* +isothermie/S* +isothermique/S* +isothermiquement/L'D'Q' +isotonie/S* +isotonique/S* +isotope/S* +isotope/S* +isotopie/S* +isotopique/S* +isotopiquement/D'Q' +isotopomère/S* +isotrope/S* +isotropie/S* +isotype/S* +isotypique/S* +isozyme/S* +israélienne/F* +israélite/S* +israélo-américaine/F* +israélo-arabe/S* +israélo-palestinienne/F* +issante/F* +issir/iY +issue/S* +isthme/S* +isthmique/S* +italianisante/F* +italianiser/a4p+ +italianisme/S* +italianiste/S* +italianité/S* +italienne/F* +italiote/S* +italique/S* +italo-africaine/F* +italo-albanaise/F* +italo-américaine/F* +italo-autrichienne/F* +italo-belge/S* +italo-espagnole/F* +italo-éthiopienne/F* +italo-française/F* +italo-néerlandaise/F* +italophone/S* +item +item/S* +itérabilité/S* +itérable/S* +itérateur/S* +itération/S* +itérative/F* +itérativement/D'Q' +itérer/c2p+ +ithyphallique/S* +itinéraire/S* +itinéraire/S* +itinérance/S* +itinérante/F* +itou +iule/S* +ive/S* +ivette/S* +ivoire/S* +ivoirerie/S* +ivoirienne/F* +ivoirière/F* +ivoirine/F* +ivoiriser/a2p+ +ivoirité/S* +ivraie/S* +ivre/S* +ivresse/S* +ivressomètre/S* +ivrognerie/S* +ivrognesse/F* +iwan/S* +ixia/S* +ixième/S* +ixode/S* +j +jabiru/S. +jable/S. +jabler/a0p+ +jablière/S. +jabloir/S. +jabloire/S. +jaborandi/S. +jabot/S. +jabotage/S. +jaboter/a0p+ +jaboteuse/F. +jacaranda/S. +jacassante/F. +jacasse/S. +jacassement/S. +jacasser/a0p. +jacasserie/S. +jacasseuse/F. +jacassière/F. +jacée/S. +jachère/S. +jacinthe/S. +jaciste/S. +jack/S. +jacket/S. +jackpot/S. +jacobée/S. +jacobien/S. +jacobienne/F. +jacobine/F. +jacobinisme/S. +jacobite/S. +jacobus +jaconas +jacot/S. +jacquard/S. +jacqueline/S. +jacquemart/S. +jacquerie/S. +jacques +jacquet/S. +jacqueter +jacquier/S. +jacquot/S. +jactance/S. +jacter/a0p+ +jaculatoire/S. +jacuzzi/S. +jade/S. +jadéite/S. +jadis +jaffe/S. +jaffer/a0p. +jaguar/S. +jaguarondi/S. +jaille/S. +jaillir/f0p+ +jaillissante/F. +jaillissement/S. +jaïna/S. +jaïne/F. +jaïnisme/S. +jais +jalap/S. +jale/S. +jalon/S. +jalonnement/S. +jalonner/a0p+ +jalonneur/S. +jalouse/W. +jalousement +jalouser/a0p+ +jalousie/S. +jam/S. +jamaïcaine/F. +jamais +jambage/S. +jambalaya/S. +jambart/S. +jambe/S. +jambée/F. +jambette/S. +jambière/F. +jambon/S. +jambonneau/X. +jambonner/a0p+ +jambonnette/S. +jamboree/S. +jambose/S. +jambosier/S. +jamerosier/S. +jam-session/S. +jan/S. +jangada/S. +janissaire/S. +janotisme/S. +jansénisme/S. +janséniste/S. +jante/S. +janv +janvier/S. +japhétique/S. +japon/S. +japonaise/F. +japonaiserie/S. +japonerie/S. +japonisante/F. +japoniser/a0p+ +japonisme/S. +japoniste/S. +japonité/S. +japonner/a0p+ +japonologie/S. +japonologue/S. +jappement/S. +japper/a0p. +jappeuse/F. +jaque/S. +jaquemart/S. +jaquette/S. +jaquier/S. +jar/S. +jard/S. +jarde/S. +jardin/S. +jardinage/S. +jardiner/a0p+ +jardinerie/S. +jardinet/S. +jardineuse/W. +jardinière/F. +jardiniste/S. +jardon/S. +jargon/S. +jargonaphasie/S. +jargonnante/F. +jargonner/a0p. +jargonneuse/F. +jargonneuse/W. +jarnicoton +jarnidieu +jarosse/S. +jarovisation/S. +jarre/S. +jarret/S. +jarretelle/S. +jarreter/d0p+ +jarretière/S. +jars +jas +jasement/S. +jaser/a0p. +jaseran/S. +jaseron/S. +jasette/S. +jaseuse/F. +jasmin/S. +jasmonate/S. +jasmonique/S. +jaspe/S. +jasper/a0p+ +jaspiner/a0p+ +jaspure/S. +jatte/S. +jattée/S. +jauge/S. +jaugeage/S. +jauger/a0p+ +jaugeuse/F. +jaumière/S. +jaunasse/S. +jaunâtre/S. +jaune/S. +jaune-orange +jaunette/F. +jaune-vert +jaunir/f0p+ +jaunissage/S. +jaunissante/F. +jaunisse/S. +jaunissement/S. +jaunissure/S. +java/S. +javanaise/F. +javart/S. +javeau/X. +javel/S. +javelage/S. +javeler/d0p+ +javeleuse/F. +javeline/S. +javelle/S. +javellisation/S. +javelliser/a0p+ +javelot/S. +javer/a0p+ +jazz +jazzman/A. +jazz-rock/S. +jazzy +je +jean/S. +jean-foutre +jean-le-blanc +jeannette/S. +jeans +jectisse/S. +jeep/S. +jéjunale/W. +jéjuno-iléon/S. +jéjunum/S. +je-m'en-fichisme/S. +je-m'en-fichiste/S. +je-m'en-foutisme/S. +je-m'en-foutiste/S. +je-ne-sais-quoi +jennérienne/F. +jenny/S. +jérémiade/S. +jerez +jerk/S. +jéroboam/S. +jerrican/S. +jerrycan/S. +jersey/S. +jersiaise/F. +jésuite/S. +jésuitique/S. +jésuitiquement +jésuitisme/S. +jésus +jet/S. +jetable/S. +jetage/S. +jeté/S. +jeter/d0p+ +jeteuse/F. +jeton/S. +jet-set/S. +jet-setteuse/F. +jet-ski/S. +jet-society/A. +jet-stream/S. +jettatura/S. +jeu/X. +jeudi +jeudi/S. +jeun +jeûne/S. +jeune/S. +jeunement +jeûner/a0p. +jeunesse/S. +jeunette/F. +jeûneuse/F. +jeunisme/S. +jeuniste/S. +jeunotte/F. +jigger/S. +jihad/S. +jihadisme/S. +jihadiste/S. +jingle/S. +jinn/S. +jiu-jitsu +joaillerie/S. +joaillière/F. +job/S. +job/S. +jobarde/F. +jobarder/a0p+ +jobarderie/S. +jobardise/S. +jobastre/S. +jobelin/S. +jobiste/S. +jocasse/S. +jociste/S. +jockey/S. +jocoler/a0p. +jocrisse/S. +jodhpurs +jodler/a0p. +jogger/S. +jogger/aH +joggeuse/F. +jogging/S. +johannique/S. +johannisberg/S. +johannite/S. +joie/S. +joignabilité/S. +joignable/S. +joindre/wB +joint/S. +jointée/S. +jointer/a0p+ +jointeuse/F. +jointive/F. +jointivement +jointoiement/S. +jointoyer/a0p+ +jointoyeuse/F. +jointure/S. +joint-venture/S. +jojo/S. +jojoba/S. +jokari/S. +joker/S. +jolie/F. +joliesse/S. +joliette/F. +joliment +jonagold/S. +jonc/S. +joncacée/S. +joncacée/S. +joncer/a0p+ +jonchaie/S. +jonchée/S. +joncher/a0p+ +joncheraie/S. +jonchère/S. +jonchet/S. +jonciforme/S. +joncteur/S. +jonction/S. +jonctionnelle/F. +jonglage/S. +jongler/a0p. +jonglerie/S. +jongleuse/F. +jonkheer/S. +jonque/S. +jonquille +jonquille/S. +jordanienne/F. +josei/S. +joseph/S. +joseph/S. +jota/S. +jottereau/X. +jouabilité/S. +jouable/S. +jouailler/a0p. +joual/S. +jouale/F. +joubarbe/S. +joue/S. +jouée/S. +jouer/a0p+ +jouerie/S. +jouet/S. +jouette/S. +jouette/S. +joueuse/F. +joufflue/F. +joug/S. +jouir/f0p. +jouissance/S. +jouissante/F. +jouisseuse/F. +jouissive/F. +joujou/X. +joule/Um +jour/S. +journade/S. +journal/X. +journaleuse/W. +journalière/F. +journalisation/S. +journaliser/a0p+ +journalisme/S. +journaliste/S. +journalistique/S. +journée/S. +journellement +joute/S. +jouter/a0p. +jouteuse/F. +jouvence/S. +jouvenceau/X. +jouvencelle/S. +jouxter/a0p+ +joviale/W. +jovialement +jovialité/S. +jovials +jovienne/F. +joyau/X. +joyeuse/W. +joyeusement +joyeuseté/S. +joystick/S. +jubarte/S. +jubé/S. +jubilaire/S. +jubilante/F. +jubilation/S. +jubilatoire/S. +jubilé/S. +jubiler/a0p. +juchée/S. +jucher/a0p+ +juchoir/S. +judaïcité/S. +judaïque/S. +judaïsante/F. +judaïser/a0p+ +judaïsme/S. +judaïté/S. +judas +judéité/S. +judelle/S. +judéo-allemande/F. +judéo-arabe/S. +judéo-chrétienne/F. +judéo-christianisme/S. +judéo-espagnole/F. +judéophobe/S. +judéophobie/S. +judicature/S. +judiciaire/S. +judiciairement +judiciarisation/S. +judiciariser/a0p+ +judicieuse/W. +judicieusement +judo/S. +judogi/S. +judoka/S. +judokate/S. +jugale/W. +juge/S. +jugeable/S. +jugement/S. +jugeote/S. +juger/a0p+ +jugère/S. +jugeuse/F. +juglandacée/S. +jugulaire/S. +jugulaire/S. +juguler/a0p+ +juil +juillet/S. +juillettiste/S. +juin/S. +juive/F. +juiverie/S. +ju-jitsu +jujitsu/S. +jujube/S. +jujubier/S. +juke-box/A. +julep/S. +jules +julienne/F. +julot/S. +jumart/S. +jumbo/S. +jumel/S. +jumelage/S. +jumeler/d0p+ +jumelle/W. +jument/S. +jumenterie/S. +jumping/S. +jungienne/F. +jungle/S. +junior/S. +junker/S. +junkie/S. +junky/A. +junonienne/F. +junte/S. +jupe/S. +jupe-culotte +jupes-culottes +jupette/S. +jupitérienne/F. +jupon/S. +juponner/a0p+ +jurançon/S. +jurande/S. +jurassienne/F. +jurassique/S. +jurat/S. +juratoire/S. +jurée/F. +jurement/S. +jurer/a0p+ +jureur/S. +juridicisation/S. +juridicité/S. +juridiction/S. +juridictionnelle/F. +juridique/S. +juridiquement +juridisme/S. +jurisconsulte/S. +jurisprudence/S. +jurisprudentielle/F. +juriste/S. +juron/S. +jury/S. +jus +jusant/S. +jusée/S. +jusnaturalisme/S. +jusnaturaliste/S. +jusqu/-- +jusqu'au-boutisme/S. +jusqu'au-boutiste/S. +jusque +jusque-là +jusques +jusquiame/S. +jussiée/S. +jussion/S. +justaucorps +juste +juste/S. +juste-à-temps +justement +juste-milieu/X. +justes-milieux +justesse/S. +justice/S. +justiciabilité/S. +justiciable/S. +justicière/F. +justifiable/S. +justifiante/F. +justificatif/S. +justification/S. +justificative/F. +justificatrice/F. +justifier/a0p+ +jutage/S. +jute/S. +juter/a0p. +juteuse/W. +juvénat/S. +juvénile/S. +juvénilement +juvénilité/S. +juxtalinéaire/S. +juxtaposable/S. +juxtaposante/F. +juxtaposer/a0p+ +juxtaposition/S. +k +kabbale/S. +kabbaliste/S. +kabbalistique/S. +kabic/S. +kabig/S. +kabuki/S. +kabyle/S. +kacha/S. +kachoube/S. +kaddish/S. +kadi/S. +kafir/S. +kafkaïenne/F. +kaïnite/S. +kaiser/S. +kakapo/S. +kakatoès +kakawi/S. +kakemono +kakemono/S. +kaki +kaki/S. +kala-azar/S. +kalachnikov/S. +kalanchoé/S. +kaléidoscope/S. +kaléidoscopique/S. +kali/S. +kalicytie/S. +kaliémie/S. +kalium/S. +kalmia/S. +kalmouke/F. +kamala/S. +kami/S. +kamichi/S. +kamikaze/S. +kammerspiel/S. +kana +kana/S. +kanake/F. +kanamycine/S. +kanban/S. +kandjar/S. +kangourou/S. +kanji +kanji/S. +kannara/S. +kantienne/F. +kantisme/S. +kaoliang/S. +kaolin/S. +kaolinique/S. +kaolinisation/S. +kaolinite/S. +kaon/S. +kaoter/a0p+ +kaotiser/a0p+ +kapo/S. +kapok/S. +kapokier/S. +kappa +kaputt +karaïsme/S. +karaïte/S. +karakul/S. +karaoké/S. +karaté/S. +karatéka/S. +karbau/S. +karcher/S. +karité/S. +karma/S. +karman/S. +karmique/S. +karpatique/S. +karst/S. +karstification/S. +karstique/S. +karstologie/S. +kart/S. +karting/S. +kascher +kasher +kashrout +kat/U.||-- +kata/S. +katakana +katakana/S. +katal/Um +katana/S. +kathak/S. +kathakali/S. +kava/S. +kawa/S. +kayak/S. +kayakiste/S. +kazakhe/F. +kbit/||-- +kebab/S. +keepsake/S. +keffieh/S. +kéfir/S. +kefta/S. +keiretsu/S. +kéké/S. +kelp/S. +kelvin/Um +kelvinomètre/S. +kémalisme/S. +kendo/S. +kénose/S. +kénotron/S. +kentia/S. +kentrophylle/S. +kényane/F. +kenyapithèque/S. +képhir/S. +képi/S. +kérabau/S. +kératane/S. +kératine/S. +kératinisation/S. +kératiniser/a0p+ +kératite/S. +kératocône/S. +kératogenèse/S. +kératolytique/S. +kératolytique/S. +kératome/S. +kératoplastie/S. +kératose/S. +kératotomie/S. +kéraunique/S. +kerma/S. +kermès +kermesse/S. +kérogène/S. +kérosène/S. +kerrie/S. +kérygme/S. +kétamine/S. +ketch/S. +ketchup/S. +ketmie/S. +kétoconazole/S. +keuf/S. +keum/S. +kevlar/S. +keynésianisme/S. +keynésienne/F. +khagan/S. +khaganat/S. +khâgne/S. +khâgneuse/W. +khalifale/W. +khalifat/S. +khalife/S. +khamsin/S. +khan/S. +khanat/S. +kharidjisme/S. +kharidjite/S. +khat/S. +khédivale/W. +khédivat/S. +khédive/S. +khédiviale/W. +khédiviat/S. +khi +khmère/F. +khobz +khôl/S. +kibboutz +kibboutzim +kibboutznik +kibboutznik/S. +kibibit/S. +kibioctet/S. +kichenotte/S. +kick/S. +kickboxing/S. +kick-boxing/S. +kicker/S. +kidnappage/S. +kidnappée/F. +kidnapper/a0p+ +kidnappeuse/F. +kidnapping/S. +kief/S. +kieselguhr/S. +kiesérite/S. +kif/S. +kiffer/a0p+ +kif-kif +kiki/S. +kil/S. +kilim/S. +kilo/S. +kilobase/S. +kilobit/S. +kilogrammètre/S. +kilométrage/S. +kilométrer/c0p+ +kilométrique/S. +kilooctet/S. +kiloparsec/S. +kilothermie/S. +kilotonne/S. +kilt/S. +kimbanguisme/S. +kimbanguiste/S. +kimberlite/S. +kimberlitique/S. +kimono/S. +kinase/S. +kiné/S. +kinescope/S. +kinésie/S. +kinésiologie/S. +kinésiologue/S. +kinésique/S. +kinésiste/S. +kinésithérapeute/S. +kinésithérapie/S. +kinesthésie/S. +kinesthésique/S. +kinétochore/S. +kinétoscope/S. +king/S. +king-charles +kinkajou/S. +kinoise/F. +kiosque/S. +kiosquière/F. +kippa/S. +kipper/S. +kir/S. +kirghize/F. +kirsch/S. +kissel/S. +kit/S. +kitch +kitch +kitchenette/S. +kitesurf/S. +kitsch +kitsch +kiwi/S. +klaxon/S. +klaxonner/a0p+ +kleenex +kleinienne/F. +klephte/S. +kleptocrate/S. +kleptocratie/S. +kleptocratique/S. +kleptomane/S. +kleptomanie/S. +klezmer/S. +klezmer/S. +klystron/S. +kn/||-- +knack/S. +knickerbockers +knickers +knock-down +knock-down +knock-out +knock-out +knout/S. +ko/||-- +koala/S. +kobold/S. +koinè +kola/S. +kolatier/S. +kolinski/S. +kolkhoz +kolkhoze/S. +kolkhozienne/F. +komatiite/S. +komboloï/S. +kombucha/S. +kommandantur/S. +komsomole/F. +konzern/S. +kookaburra/S. +kopeck/S. +korê/S. +koriste/S. +korrigane/F. +kosovare/F. +kot/S. +koter/a0p. +koto/S. +koubba/S. +koudou/S. +kouffar/S. +kouglof/S. +kouign-amann/S. +koulak/S. +koulibiac/S. +koumis +koumys +kourgane/S. +kouros +koweïtienne/F. +kpc/||-- +kraal/S. +krach/S. +kraft/S. +krak/S. +kraken/S. +kravmaga/S. +krav-maga/S. +kremlin/S. +kremlinologie/S. +kremlinologique/S. +kremlinologue/S. +kreutzer/S. +kriegspiel/S. +kriek/S. +krill/S. +krishnaïsme/S. +krishnaïte/S. +kriss +kronprinz +kroumir/S. +krypton/S. +ksar +ksatriya +kshatriya +ksi +ksour +kss +kt/||-- +kth/||-- +kufique/S. +kufique/S. +kummel/S. +kumquat/S. +kung-fu +kurde/S. +kvas +kwas +kwashiorkor/S. +kymographe/S. +kymographie/S. +kymrique/S. +kyrie +kyrielle/S. +kyriologique/S. +kyste/S. +kystique/S. +kyu/S. +kyudo/S. +l +l +l/U.||-- +là +la +la +la +labadens +labarum/S. +là-bas +labbe/S. +labdanum/S. +label/S. +labelle/S. +labellisation/S. +labelliser/a0p+ +labeur/S. +labiacée/S. +labiale/W. +labialisation/S. +labialiser/a0p+ +labiée/F. +labile/S. +labilité/S. +labiodentale/S. +labio-dentale/S. +labiodentale/W. +labio-dentale/W. +labioplastie/S. +labio-vélaire/S. +labium/S. +labo/S. +laborante/F. +laborantine/F. +laboratoire/S. +laborieuse/W. +laborieusement +laboriste/S. +labour/S. +labourable/S. +labourage/S. +labourer/a0p+ +laboureur/S. +labrador/S. +labradorite/S. +labre/S. +labri/S. +labridé/S. +labrit/S. +labyrinthe/S. +labyrinthique/S. +labyrinthite/S. +labyrinthodon/S. +labyrinthodonte/S. +lac/S. +laçage/S. +lacanienne/F. +lacaniser +lacanisme/S. +laccase/S. +laccolite/S. +laccolithe/S. +lacédémonienne/F. +lacement/S. +lacer/a0p+ +lacérante/F. +lacération/S. +lacérer/c0p+ +lacerie/S. +lacet/S. +laceuse/F. +lâchage/S. +lâche/S. +lâchement +lâcher/S. +lâcher/a0p+ +lâcher-prise/S. +lâcheté/S. +lâcheuse/F. +laciniée/F. +lacis +laconique/S. +laconiquement +laconisme/S. +lacquemant/S. +lacrima-christi +lacrymale/W. +lacrymo/S. +lacrymogène/S. +lacrymogène/S. +lactaire/S. +lactaire/S. +lactalbumine/S. +lactame/S. +lactarium/S. +lactase/S. +lactate/S. +lactation/S. +lactéale/W. +lactée/F. +lactescence/S. +lactescente/F. +lactifère/S. +lactique/S. +lactobacille/S. +lactocoque/S. +lactodensimètre/S. +lactofermentation/S. +lacto-fermentation/S. +lactoflavine/S. +lactogène/S. +lactomètre/S. +lactone/S. +lactose/S. +lactosérum/S. +lactucarium/S. +lacunaire/S. +lacune/S. +lacuneuse/W. +lacustre/S. +lad/S. +ladanifère/S. +ladanum/S. +là-dedans +là-dehors +là-dessous +là-dessus +ladin/S. +ladine/F. +ladite +ladre/S. +ladrerie/S. +lady/A. +laetare/S. +lagen/S. +lagomorphe/S. +lagon/S. +lagopède/S. +lagothrix +lagotriche/S. +lagrangien/S. +lagrangienne/F. +laguiole/S. +laguis +lagunage/S. +lagunaire/S. +lagune/S. +lahar/S. +là-haut +laïc/S. +laïcarde/F. +laïcat/S. +laîche/S. +laïcisation/S. +laïciser/a0p+ +laïcisme/S. +laïcité/S. +laide/F. +laidement +laideronne/F. +laideur/S. +laie/F. +lainage/S. +laine/S. +lainer/a0p+ +lainerie/S. +laineuse/F. +laineuse/W. +lainière/F. +laïque/S. +laird/S. +laisse/S. +laissée-pour-compte +laissées-pour-compte +laissé-pour-compte +laisser/a0p+ +laisser-aller +laisser-faire +laissés-pour-compte +laissez-passer +lait/S. +laitage/S. +laitance/S. +laite/S. +laitée/F. +laiterie/S. +laiteron/S. +laiteuse/W. +laitière/F. +laiton/S. +laitonner/a0p+ +laitue/S. +laïus +laïusser/a0p. +laïusseuse/F. +laize/S. +lakiste/S. +lallation/S. +lama/S. +lamage/S. +lamaïque/S. +lamaïsme/S. +lamaïste/S. +lamanage/S. +lamaneuse/F. +lamantin/S. +lamarckienne/F. +lamarckisme/S. +lamarckiste/S. +lamartinienne/F. +lamaserie/S. +lambada/S. +lambda +lambda +lambdacisme/S. +lambeau/X. +lambel/S. +lambic/S. +lambine/F. +lambiner/a0p. +lambinerie/S. +lambliase/S. +lambourde/S. +lambrequin/S. +lambris +lambrissage/S. +lambrisser/a0p+ +lambruche/S. +lambrusque/S. +lambswool/S. +lame/S. +lamellaire/S. +lamellaire/S. +lamellation/S. +lamelle/S. +lamellée/F. +lamelleuse/W. +lamellibranche/S. +lamellibranche/S. +lamelliforme/S. +lamellophone/S. +lamentable/S. +lamentablement +lamentation/S. +lamenter/a0p+ +lamento/S. +lamer/a0p+ +lamiacées +lamibois +lamie/S. +lamier/S. +lamifiée/F. +laminage/S. +laminaire/S. +laminaire/S. +laminale/W. +laminarine/S. +lamination/S. +lamine/S. +laminectomie/S. +laminer/a0p+ +lamineuse/F. +lamineux +laminoir/S. +lampadaire/S. +lampadophore/S. +lampante/F. +lamparo/S. +lampas +lampassée/F. +lampe/S. +lampée/S. +lamper/a0p+ +lampes-tempête +lampe-tempête +lampion/S. +lampiste/S. +lampisterie/S. +lampourde/S. +lamprillon/S. +lamproie/S. +lampyre/S. +lançable/S. +lançage/S. +lance/S. +lance-amarres +lance-bombes +lance-engins +lance-flammes +lance-fusées +lance-grenades +lancement/S. +lance-missiles +lancéolée/F. +lance-pierres +lancequiner/a0p. +lancer/S. +lancer/a0p+ +lance-roquettes +lance-satellites +lance-torpilles +lancette/S. +lanceuse/F. +lancier/S. +lancière/S. +lancinante/F. +lanciner/a0p+ +lançon/S. +land +landaise/F. +landammann/S. +landau/S. +landaulet/S. +lande/S. +länder +landgrave/S. +landgraviat/S. +landgravine/S. +landier/S. +landsturm/S. +landtag/S. +landwehr/S. +laneret/S. +langage/S. +langage-machine +langagière/F. +lange/S. +langer/a0p+ +langoureuse/W. +langoureusement +langouste/S. +langoustière/F. +langoustine/S. +langue/S. +languedocienne/F. +languée/F. +languette/S. +langueur/S. +langueyage/S. +langueyer/a0p+ +languide/S. +languier/S. +languir/f0p+ +languissamment +languissante/F. +languissement/S. +langur/S. +lanice/S. +lanier/S. +lanière/S. +lanifère/S. +lanigère/S. +laniste/S. +lanlaire +lanoline/S. +lansquenet/S. +lansquine/S. +lansquiner/a0p. +lantanier/S. +lanterne/S. +lanterneau/X. +lanterner/a0p+ +lanternon/S. +lanthane/S. +lanthanide/S. +lanugineuse/W. +lanugo/S. +laotienne/F. +lapalissade/S. +laparoscopie/S. +laparoscopique/S. +laparotomie/S. +lapement/S. +laper/a0p+ +lapereau/X. +lapiaz +lapicide/S. +lapicide/S. +lapidaire/S. +lapidairement +lapidation/S. +lapider/a0p+ +lapidification/S. +lapidifier/a0p+ +lapilli +lapine/F. +lapiner/a0p. +lapinière/S. +lapinisme/S. +lapis +lapis-lazuli +laplacien/S. +laplacienne/F. +lapone/F. +laponne/F. +laps +lapsus +laptot/S. +laquage/S. +laquais +laque/S. +laquelle +laquer/a0p+ +laqueuse/F. +laqueuse/W. +laquier/S. +laraire/S. +larbin/S. +larbinat/S. +larcin/S. +lard/S. +larder/a0p+ +lardoire/S. +lardon/S. +lardonner/a0p+ +lardure/S. +lare/S. +largable/S. +largage/S. +large +large/S. +largement +largesse/S. +largeur/S. +larghetto +larghetto/S. +largo +largo +largo/S. +larguer/a0p+ +largueuse/F. +larigot/S. +larme/S. +larmier/S. +larmoiement/S. +larmoyante/F. +larmoyer/a0p. +larmoyeuse/F. +larron/S. +larronnesse/S. +larsen/S. +larvaire/S. +larve/S. +larvée/F. +larvicide/S. +laryngale/S. +laryngale/W. +laryngectomie/S. +laryngée/F. +laryngienne/F. +laryngite/S. +laryngologie/S. +laryngologique/S. +laryngologiste/S. +laryngologue/S. +laryngoscope/S. +laryngoscopie/S. +laryngoscopique/S. +laryngotomie/S. +larynx +lasagne +lasagne/S. +lascar/S. +lascive/F. +lascivement +lasciveté/S. +lascivité/S. +laser/S. +lassante/F. +lasse/F. +lasser/a0p+ +lassis +lassitude/S. +lasso/S. +lastex +lasting/S. +lasure/S. +lasurer/a0p+ +lat +latanier/S. +latence/S. +latente/F. +latérale/W. +latéralement +latéralisation/S. +latéralité/S. +latere +latere +latérite/S. +latéritique/S. +latex +lathyrisme/S. +laticifère/S. +laticlave/S. +latifoliée/F. +latifundiaire/S. +latifundium/I. +latina/S. +latine/F. +latinisante/F. +latinisation/S. +latiniser/a0p+ +latinisme/S. +latiniste/S. +latinité/S. +latino/S. +latino-américaine/F. +latitude/S. +latitudinaire/S. +latitudinale/W. +latomies +latrie/S. +latrines +lattage/S. +latte/S. +latter/a0p+ +lattis +laudanisée/F. +laudanum/S. +laudative/F. +laudatrice/F. +laudes +lauracée/S. +laure/S. +lauréate/F. +laurée/F. +lauréole/S. +laurier/S. +laurier-cerise +laurier-rose +lauriers-cerises +lauriers-roses +laurique/S. +laurylsulfate/S. +lausannoise/F. +lauze/S. +lavable/S. +lavabo/S. +lavage/S. +lavallière/S. +lavallière/S. +lavande/S. +lavandicultrice/F. +lavandiculture/S. +lavandière/F. +lavandin/S. +lavante/F. +lavaret/S. +lavatory/A. +lave/S. +lave-auto +lave-dos +lave-glace +lave-linge +lave-mains +lavement/S. +lave-pont +laver/a0p+ +laverie/S. +lave-tête +lavette/S. +laveuse/F. +lave-vaisselle +lavique/S. +lavis +lavoir/S. +lavoisienne/F. +lavure/S. +lawrencium/S. +laxatif/S. +laxative/F. +laxisme/S. +laxiste/S. +laxité/S. +layer/a0p+ +layetière/F. +layette/S. +layon/S. +lazaret/S. +lazariste/S. +lazulite/S. +lazurite/S. +lazzarone/I. +lazzi +lazzi/S. +lb/||-- +le +le +lé/S. +leader/S. +leadership/S. +leasing/S. +lebel/S. +lécanore/S. +léchable/S. +léchage/S. +lèche/S. +lèche-bottes +lèche-cul +lèchefrite/S. +lèchement/S. +lécher/c0p+ +lécheuse/F. +lèche-vitrines +léchouiller/a0p+ +lécithine/S. +leçon/S. +lectine/S. +lectionnaire/S. +lectorat/S. +lectotype/S. +lectrice/F. +lecture/S. +lécythe/S. +ledit +légale/W. +légalement +légalisation/S. +légaliser/a0p+ +légalisme/S. +légaliste/S. +légalité/S. +légat/S. +légataire/S. +légation/S. +legato +legato +legato/S. +lège/S. +légendaire/S. +légende/S. +légender/a0p+ +legendrienne/F. +légère/F. +légèrement +légèreté/S. +leggings +leggins +leghorn/S. +légifération/S. +légiférée/F. +légiférer/c0p. +légine/S. +légion/S. +légionelle/S. +légionellose/S. +légionnaire/S. +législation/S. +législative/F. +législativement +législatrice/F. +législature/S. +légiste/S. +légitimation/S. +légitime/S. +légitimée/F. +légitimement +légitimer/a0p+ +légitimisme/S. +légitimiste/S. +légitimité/S. +legs +léguer/c0p+ +légume/S. +légumière/F. +légumine/S. +légumineuse/W. +lehm/S. +lei +léiomyome/S. +leishmanie/S. +leishmaniose/S. +leitmotiv/S. +leitmotive +lek/S. +lémanique/S. +lemmatique/S. +lemmatisation/S. +lemmatiser/a0p+ +lemmatiseur/S. +lemme/S. +lemming/S. +lemnacée/S. +lemniscate/S. +lempira/S. +lémur/S. +lémure/S. +lémurien/S. +lendemain/S. +lendit/S. +lénifiante/F. +lénifier/a0p+ +léninisme/S. +léniniste/S. +lénition/S. +lénitive/F. +lente/F. +lente/S. +lentement +lenteur/S. +lenticelle/S. +lenticulaire/S. +lenticule/S. +lentiforme/S. +lentigine/S. +lentigo/S. +lentille/S. +lentillon/S. +lentisque/S. +lentivirus +lento +lento +lento/S. +léonarde/F. +léonardesque/S. +léonine/F. +léontocéphale/S. +léonure/S. +léopard/S. +léopardée/F. +lépidodendron/S. +lépidolite/S. +lépidoptère/S. +lépidoptère/S. +lépidoptériste/S. +lépidoptérophile/S. +lépidosirène/S. +lépidostée/S. +lépiote/S. +lépisme/S. +lépisostée/S. +léporidé/S. +lèpre/S. +leprechaun/S. +lépreuse/W. +léprologie/S. +léprologiste/S. +léprologue/S. +léprome/S. +léproserie/S. +lepte/S. +leptine/S. +leptocéphale/S. +leptogenèse/S. +leptolithique/S. +leptoméduse/S. +leptoméninge/S. +lepton/S. +leptonique/S. +leptospire/S. +leptospirose/S. +lepture/S. +lequel +lerche +lérot/S. +les +lès +les +lesbianisme/S. +lesbienne/F. +lesbophobe/S. +lesbophobie/S. +lesdites +lesdits +lèse-majesté +léser/c0p+ +lésinante/F. +lésine/S. +lésiner/a0p. +lésinerie/S. +lésineuse/F. +lésion/S. +lésionnaire/S. +lésionnelle/F. +lesquelles +lesquels +lesquerellique/S. +lessivable/S. +lessivage/S. +lessive/S. +lessiver/a0p+ +lessiveuse/F. +lessivielle/F. +lessivière/F. +lest/S. +lestage/S. +leste/S. +lestement +lester/a0p+ +let +létale/W. +létalité/S. +letchi/S. +léthargie/S. +léthargique/S. +léthifère/S. +lettone/F. +lettonne/F. +lettrage/S. +lettre/S. +lettrée/F. +lettreuse/F. +lettrine/S. +lettrisme/S. +lettriste/S. +leu +leucanie/S. +leucémie/S. +leucémique/S. +leucine/S. +leucite/S. +leucobryum/S. +leucocrate/S. +leucocytaire/S. +leucocyte/S. +leucocytose/S. +leucocyturie/S. +leucoderme/S. +leucodermie/S. +leucodystrophie/S. +leucoencéphalite/S. +leucogranite/S. +leucome/S. +leucopénie/S. +leucoplasie/S. +leucopoïèse/S. +leucorrhée/S. +leucose/S. +leucotomie/S. +leucotrichie/S. +leucoxène/S. +leude/S. +leur +leur +leur/S. +leurre/S. +leurrer/a0p+ +leurs +leurszigues +lev/S. +levage/S. +levageuse/F. +levain/S. +levalloisien/S. +levalloisienne/F. +lévamisole/S. +levant/S. +levantine/F. +levée/F. +lève-glace +lève-glace/S. +lever/S. +lever/b0p+ +lève-tard +lève-tôt +leveuse/F. +lève-vitre +lève-vitre/S. +léviathan/S. +levier/S. +lévigation/S. +léviger/a0p+ +lévirat/S. +levis +lévitation/S. +lévite/S. +léviter/a0p. +lévitique/S. +lévogyre/S. +levraut/S. +lèvre/S. +levrette/S. +levrettée/F. +levretter/a0p. +lévrier/S. +levronne/F. +lévulose/S. +levure/S. +lewisite/S. +lexème/S. +lexicale/W. +lexicalement +lexicalisation/S. +lexicaliser/a0p+ +lexicographe/S. +lexicographie/S. +lexicographique/S. +lexicologie/S. +lexicologique/S. +lexicologue/S. +lexie/S. +lexique/S. +lexis +lez +lézarde/F. +lézarder/a0p+ +lherzolite/S. +li/S. +liage/S. +liais +liaison/S. +liaisonner/a0p+ +liane/S. +lianescente/F. +liant/S. +liante/F. +liard/S. +liarder/a0p. +lias +liasique/S. +liasse/S. +libage/S. +libanaise/F. +libanisation/S. +libaniser/a0p+ +libation/S. +libelle/S. +libellé/S. +libeller/a0p+ +libelliste/S. +libellule/S. +liber/S. +libérable/S. +libérale/W. +libéralement +libéralisante/F. +libéralisation/S. +libéraliser/a0p+ +libéralisme/S. +libéralité/S. +libération/S. +libératoire/S. +libératrice/F. +libérer/c0p+ +libérienne/F. +libérine/S. +libériste/S. +libéro-ligneuse/W. +libertaire/S. +libertarianisme/S. +libertarienne/F. +libertarisme/S. +liberté/S. +liberticide/S. +libertinage/S. +libertine/F. +liberty +libidinale/W. +libidineuse/W. +libidinosité/S. +libido/S. +libitum +libouret/S. +libournaise/F. +libraire/S. +librairie/S. +libration/S. +libre/S. +libre-échange/S. +libre-échangisme +libre-échangiste/S. +librement +libre-penseur +libre-penseuse +libre-service +libres-penseurs +libres-penseuses +libres-services +librettiste/S. +libretto/I. +librisme/S. +libriste/S. +libyenne/F. +lice/S. +licéité/S. +licence/S. +licenciée/F. +licenciement/S. +licencier/a0p+ +licencieuse/W. +licencieusement +lichaven/S. +liche/S. +lichee/S. +lichen/S. +lichénification/S. +lichénique/S. +licher/a0p+ +lichetrogner +lichette/S. +lichoter +lichotter +licière/F. +licitation/S. +licite/S. +licitement +liciter/a0p+ +licol/S. +licorne/S. +licou/S. +licteur/S. +lidar/S. +lido/S. +lidocaïne/S. +lie/S. +liechtensteinoise/F. +lied/S. +lieder +lie-de-vin +liège/S. +liégeoise/F. +liéger/c0p+ +liégeuse/W. +lien/S. +lier/a0p+ +lierne/S. +lierre/S. +liesse/S. +lieu/S. +lieu/X. +lieu-dit +lieue/S. +lieuse/F. +lieutenance/S. +lieutenant-colonel +lieutenante/F. +lieutenante-gouverneure +lieutenantes-gouverneures +lieutenant-gouverneur +lieutenants-colonels +lieutenants-gouverneurs +lieux-dits +lièvre/S. +lift/S. +lifter/a0p+ +liftière/F. +lifting/S. +ligament/S. +ligamentaire/S. +ligamenteuse/W. +ligand/S. +ligase/S. +ligature/S. +ligaturer/a0p+ +lige/S. +ligérienne/F. +light +light/S. +ligie/S. +lignage/S. +lignagère/F. +lignane/S. +lignarde/F. +ligne/S. +lignée/S. +ligner/a0p+ +lignerolle/S. +ligneul/S. +ligneuse/F. +ligneuse/W. +lignicole/S. +ligniculture/S. +lignifiante/F. +lignification/S. +lignifier/a0p+ +lignine/S. +lignite/S. +lignivore/S. +lignocellulose/S. +lignomètre/S. +ligot/S. +ligotage/S. +ligoter/a0p+ +ligue/S. +liguer/a0p+ +ligueuse/F. +ligule/S. +ligulée/F. +liguliflore/S. +liguliflore/S. +ligure/S. +like/S. +lilas +liliacée/F. +liliale/W. +lilliputienne/F. +lilloise/F. +limace/S. +limaçon/S. +limage/S. +limaille/S. +liman/S. +limande/S. +limander/a0p+ +limbaire/S. +limbe/S. +limbique/S. +limbourgeoise/F. +lime/S. +limer/a0p+ +limerick/S. +limes +limette/S. +limettier/S. +limeuse/F. +limicole/S. +limier/S. +liminaire/S. +liminale/W. +limitable/S. +limitante/F. +limitateur/S. +limitation/S. +limitative/F. +limitativement +limitatrice/F. +limite/S. +limite/S= +limiter/a0p+ +limiteur/S. +limitrophe/S. +limnée/S. +limniculture/S. +limnique/S. +limnologie/S. +limogeage/S. +limoger/a0p+ +limon/S. +limonade/S. +limonadière/F. +limonage/S. +limonaire/S. +limonène/S. +limoner/a0p+ +limoneuse/W. +limonière/F. +limonite/S. +limoselle/S. +limougeaude/F. +limousinage/S. +limousine/F. +limousiner/a0p+ +limousinerie/S. +limpide/S. +limpidement +limpidité/S. +limule/S. +lin/S. +linacée/S. +linacée/S. +linaigrette/S. +linaire/S. +linalol/S. +linceul/S. +linçoir/S. +lindane/S. +linéaire/S. +linéaire/S. +linéairement +linéale/W. +linéament/S. +linéarisabilité/S. +linéarisable/S. +linéarisation/S. +linéariser/a0p+ +linéarité/S. +linéation/S. +linéature/S. +linéique/S. +liner/S. +linette/S. +linga +linga/S. +lingala/S. +lingam +lingam/S. +linge/S. +linger/a0p+ +lingère/F. +lingerie/S. +lingette/S. +lingot/S. +lingotière/S. +lingua +linguale/W. +linguatule/S. +lingue/S. +linguet/S. +linguette/S. +linguiforme/S. +linguiste/S. +linguistique/S. +linguistique/S. +linguistiquement +lingule/S. +lini +liniculture/S. +linière/F. +liniment/S. +linkage/S. +links +linnéenne/F. +lino/S. +linogravure/S. +linoléique/S. +linolénique/S. +linoleum/S. +linoléum/S. +linon/S. +linotte/S. +linotype/S. +linotypie/S. +linotypiste/S. +linsang/S. +linteau/X. +linter/S. +lionceau/X. +lionne/F. +lionnée/F. +liparis +lipase/S. +lipémie/S. +lipide/S. +lipidémie/S. +lipidique/S. +lipidogenèse/S. +lipidomique/S. +lipizzan/S. +lipoaspiration/S. +lipo-aspiration/S. +lipochimie/S. +lipochrome/S. +lipodystrophie/S. +lipogenèse/S. +lipogrammatique/S. +lipogramme/S. +lipoïde/S. +lipoïde/S. +lipoïdique/S. +lipolyse/S. +lipolytique/S. +lipomatose/S. +lipome/S. +lipophile/S. +lipophilie/S. +lipophobe/S. +lipoplastie/S. +lipoprotéine/S. +lipoprotéinémie/S. +lipoprotéique/S. +liposarcome/S. +liposoluble/S. +liposome/S. +liposuccion/S. +liposucer/a0p+ +lipothymie/S. +lipotrope/S. +lipovaccin/S. +lippe/S. +lippée/S. +lippue/F. +lipschitzienne/F. +liquation/S. +liquéfacteur/S. +liquéfaction/S. +liquéfiable/S. +liquéfiante/F. +liquéfier/a0p+ +liquette/S. +liqueur/S. +liquidable/S. +liquidambar/S. +liquidation/S. +liquidative/F. +liquidatrice/F. +liquide/S. +liquide/S. +liquider/a0p+ +liquidienne/F. +liquidité/S. +liquoreuse/W. +liquoriste/S. +lire/S. +lire/yA +lirette/S. +liron/S. +lis +lisage/S. +lisboète/S. +lisbroquer +lisérage/S. +liseré/S. +liséré/S. +liserer/b0p+ +lisérer/c0p+ +liseron/S. +lisette/S. +liseuse/F. +lisibilité/S. +lisible/S. +lisiblement +lisier/S. +lisière/S. +lissage/S. +lissante/F. +lisse/S. +lisse/S. +lissé/S. +lisser/a0p+ +lisseron/S. +lisseuse/F. +lissier/S. +lissoir/S. +listage/S. +liste/S. +listeau/X. +listel/S. +lister/a0p+ +listeria +listéria/S. +listériose/S. +listing/S. +liston/S. +lit/S. +litanie/S. +litchi/S. +liteau/X. +litée/S. +liter/a0p+ +literie/S. +litham/S. +litharge/S. +lithergol/S. +lithiase/S. +lithiasique/S. +lithine/S. +lithinée/F. +lithinifère/S. +lithique/S. +lithium/S. +litho/S. +lithodome/S. +lithogène/S. +lithogenèse/S. +lithographe/S. +lithographie/S. +lithographier/a0p+ +lithographique/S. +lithogravure/S. +lithologie/S. +lithologique/S. +lithopédion/S. +lithophage/S. +lithophanie/S. +lithophone/S. +lithopone/S. +lithosphère/S. +lithosphérique/S. +lithostatique/S. +lithostratigraphie/S. +lithothamnium/S. +lithotripsie/S. +lithotriteur/S. +lithotritie/S. +lithotypographie/S. +litière/S. +litige/S. +litigeur/S. +litigieuse/W. +litispendance/S. +litorne/S. +litote/S. +litre/S. +litre/Um +litron/S. +litroner +litt +littéraire/S. +littérairement +littérale/W. +littéralement +littéralisme/S. +littéraliste/S. +littéralité/S. +littérarité/S. +littératie/S. +littératrice/F. +littérature/S. +littérisme/S. +littorale/W. +littoralisation/S. +littorine/S. +lituanienne/F. +liturge/S. +liturgie/S. +liturgique/S. +liturgiquement +liturgiste/S. +liure/S. +livarde/S. +livarot/S. +live +live/S. +livèche/S. +livet/S. +livide/S. +lividité/S. +living/S. +living-room/S. +livrable/S. +livraison/S. +livre/S. +livre-cassette +livrée/S. +livrer/a0p+ +livres-cassettes +livresque/S. +livresquement +livret/S. +livreuse/F. +lixiviation/S. +llano/S. +lm/U.||-- +ln +loader/S. +loase/S. +lob/S. +lobaire/S. +lobby/A. +lobbying/S. +lobbyisme/S. +lobbyiste/S. +lobe/S. +lobectomie/S. +lobélie/S. +lobéline/S. +lober/a0p+ +lobotomie/S. +lobotomisante/F. +lobotomiser/a0p+ +lobulaire/S. +lobule/S. +lobulée/F. +lobuleuse/W. +local/X. +locale/W. +localement +localier/S. +localisable/S. +localisante/F. +localisateur/S. +localisation/S. +localisatrice/F. +localiser/a0p+ +localisme/S. +localiste/S. +localité/S. +locataire/S. +locataire-gérant +locataires-gérants +locatif/S. +location/S. +location-gérance +locations-gérances +locations-ventes +location-vente +locative/F. +locatrice/F. +locature/S. +locavore/S. +loch/S. +loche/S. +locher/a0p+ +lochies +lock-out +lock-outer/a0p+ +loco/S. +locomobile/S. +locomobile/S. +locomotion/S. +locomotive/F. +locomotive/S. +locomotrice/F. +locorégionale/W. +loco-régionale/W. +locotracteur/S. +locrienne/F. +loculaire/S. +loculée/F. +loculeuse/W. +locus +locuste/S. +locution/S. +locutrice/F. +loden/S. +lods +loess +lof/S. +lofer/a0p. +loft/S. +log/S. +logarithme/S. +logarithmique/S. +loge/S. +logeable/S. +logement/S. +loger/a0p+ +loge-tout +logette/S. +logeuse/F. +loggia/S. +logiciel/S. +logicielle/F. +logiciellement +logicienne/F. +logicisme/S. +logiciste/S. +logico-mathématique/S. +logico-positivisme/S. +logigramme/S. +login/S. +logique/S. +logique/S. +logiquement +logis +logiste/S. +logisticienne/F. +logistique/S. +logistique/S. +logithèque/S. +log-normale/W. +logo/S. +logocentrisme/S. +logogramme/S. +logogrammique/S. +logographe/S. +logographie/S. +logographique/S. +logogriphe/S. +logogriphique/S. +logomachie/S. +logomachique/S. +logopathie/S. +logopède/S. +logopédie/S. +logopédique/S. +logopédiste/S. +logorrhée/S. +logorrhéique/S. +logos +logotype/S. +loguer/a0p. +loi/S. +loi-cadre +loin +lointaine/F. +lointainement +loi-programme +loir/S. +loirétaine/F. +lois-cadres +loisible/S. +loisir/S. +lois-programmes +lokoum/S. +lol +lolette/S. +lolita/S. +lolo/S. +lombaire/S. +lombalgie/S. +lombarde/F. +lombarthrose/S. +lombes +lombo-sacrée/F. +lombosciatique/S. +lombo-sciatique/S. +lombostat/S. +lombric/S. +lombricoïde/S. +lombricompost/S. +lombricompostage/S. +lombricomposteur/S. +lombricultrice/F. +lombriculture/S. +lompe/S. +londonienne/F. +londrès +lône/S. +longane/S. +longanier/S. +longanime/S. +longanimité/S. +long-courrier/S. +longe/S. +longeole/S. +longer/a0p+ +longère/S. +longeron/S. +longévité/S. +longévive/F. +longicorne/S. +longiforme/S. +longiligne/S. +longimétrie/S. +longitude/S. +longitudinale/W. +longitudinalement +long-métrage +longotte/S. +longrine/S. +longs-métrages +longtemps +longue/F. +longuéenne/F. +longuement +longues-vues +longuette/F. +longueur/S. +longue-vue +lonotriche/S. +looch/S. +loofa/S. +look/S. +lookée/F. +looping/S. +lopette/S. +lophobranche/S. +lophophore/S. +lophotriche/S. +lopin/S. +loquace/S. +loquacité/S. +loque/S. +loquer/a0p+ +loquet/S. +loqueteau/X. +loqueteuse/W. +loran/S. +loranthacée/S. +loranthacée/S. +lord/S. +lord-maire +lordose/S. +lords-maires +lorentzienne/F. +lorette/S. +lorgnement/S. +lorgner/a0p+ +lorgnette/S. +lorgneuse/F. +lorgnon/S. +lori/S. +loricaire/S. +lorientaise/F. +loriot/S. +loriquet/S. +lorraine/F. +lorry/A. +lors +lorsqu/-- +lorsque +losange/S. +losangée/F. +losangique/S. +loser/S. +lot/S. +loterie/S. +lotier/S. +lotion/S. +lotionner/a0p+ +lotir/f0p+ +lotissement/S. +lotisseuse/F. +loto/S. +lotoise/F. +lotte/S. +lotus +louable/S. +louablement +louage/S. +louange/S. +louanger/a0p+ +louangeuse/F. +louangeusement +loubar/S. +loubarde/F. +louche/S. +louchée/S. +louchement +louchement/S. +loucher/a0p. +loucherie/S. +louchet/S. +loucheuse/F. +louchir/f0p. +louchonne/F. +louer/a0p+ +loueuse/F. +loufer/a0p. +loufiat/S. +loufoque/S. +loufoquerie/S. +lougre/S. +louis +louise-bonne +louises-bonnes +louisianaise/F. +louis-philipparde/F. +loukoum/S. +loulou/S. +louloute/S. +loup/S. +loupage/S. +loup-cervier +loupe/S. +loupé/S. +louper/a0p+ +loup-garou +loupiote/F. +loupiotte/S. +loups-cerviers +loups-garous +louquer +lourdaude/F. +lourde/F. +lourdement +lourder/a0p+ +lourderie/S. +lourdeur/S. +lourdingue/S. +loure/S. +lourer/a0p+ +lousse/S. +loustic/S. +loutre/S. +louvaniste/S. +louve/S. +louver/a0p+ +louveteau/X. +louveter/d0p. +louveterie/S. +louvetier/S. +louvette/F. +louviéroise/F. +louvoiement/S. +louvoyage/S. +louvoyante/F. +louvoyer/a0p. +lovecraftienne/F. +lovelace/S. +lover/a0p+ +low +loxodromie/S. +loxodromique/S. +loyale/W. +loyalement +loyalisme/S. +loyaliste/S. +loyauté/S. +loyer/S. +lozérienne/F. +lubie/S. +lubricité/S. +lubrifiante/F. +lubrificateur/S. +lubrification/S. +lubrificatrice/F. +lubrifier/a0p+ +lubrique/S. +lubriquement +lucane/S. +lucaniste/S. +lucanophile/S. +lucarne/S. +lucernaire/S. +lucide/S. +lucidement +lucidité/S. +luciférase/S. +luciférienne/F. +lucifuge/S. +lucilie/S. +lucimètre/S. +luciole/S. +lucite/S. +lucrative/F. +lucrativement +lucrativité/S. +lucre/S. +luddisme/S. +luddite/S. +ludiciel/S. +ludion/S. +ludique/S. +ludiquement +ludisme/S. +ludo-éducative/F. +ludopoésie/S. +ludospace/S. +ludothécaire/S. +ludothèque/S. +ludwigia/S. +luétine/S. +luette/S. +lueur/S. +luffa/S. +luge/S. +luger/a0p. +lugeuse/F. +lugubre/S. +lugubrement +lui +lui +lui-même +luire/yU +luisance/S. +luisante/F. +lulu/S. +lumachelle/S. +lumachellique/S. +lumbago/S. +lumen/Um +lumière/S. +lumignon/S. +luminaire/S. +luminance/S. +luminescence/S. +luminescente/F. +lumineuse/W. +lumineusement +luminifère/S. +luminique/S. +luminisme/S. +luministe/S. +luminol/S. +luminomètre/S. +luminophore/S. +luminosité/S. +luminothérapie/S. +lumitype/S. +lump/S. +lumpenproletariat/S. +lumpenprolétariat/S. +lunaire/S. +lunaison/S. +lunatique/S. +lunch/A. +luncher/a0p. +lundi +lundi/S. +lune/S. +lunée/F. +lunetière/F. +lunette/S. +lunetterie/S. +luni-solaire/S. +lunule/S. +lunure/S. +lupanar/S. +lupercale/W. +lupercales +lupin/S. +lupique/S. +lupome/S. +lupuline/F. +lupus +lurette/S. +luronne/F. +lusin/S. +lusitanienne/F. +lusophone/S. +lusophonie/S. +lustrage/S. +lustrale/W. +lustrante/F. +lustration/S. +lustre/S. +lustrer/a0p+ +lustrerie/S. +lustreuse/F. +lustrine/S. +lustroir/S. +lutage/S. +lutation/S. +lutéale/W. +lutécienne/F. +lutécium/S. +lutéine/S. +lutéinique/S. +lutéinisation/S. +luter/a0p+ +luth/S. +luthéranisme/S. +lutherie/S. +luthérienne/F. +luthière/F. +luthiste/S. +lutin/S. +lutiner/a0p+ +lutrin/S. +lutte/S. +lutter/a0p. +lutteuse/F. +lutz +lux/Ui +luxation/S. +luxe/S. +luxembourgeoise/F. +luxembourgisme/S. +luxembourgiste/S. +luxembourgophone/S. +luxer/a0p+ +luxmètre/S. +luxueuse/W. +luxueusement +luxure/S. +luxuriance/S. +luxuriante/F. +luxurieuse/W. +luxurieusement +luzerne/S. +luzernière/S. +luzule/S. +lx/U.||-- +lycanthrope/S. +lycanthropie/S. +lycaon/S. +lycée/S. +lycéenne/F. +lycène/S. +lychee/S. +lychnide/S. +lychnis +lycienne/F. +lycope/S. +lycopène/S. +lycoperdon/S. +lycophyte/S. +lycopode/S. +lycopodiale/S. +lycose/S. +lycra +lyddite/S. +lydienne/F. +lymphadénite/S. +lymphadénopathie/S. +lymphangiome/S. +lymphangite/S. +lymphatique/S. +lymphatisme/S. +lymphe/S. +lymphocèle/S. +lymphocytaire/S. +lymphocyte/S. +lymphocytopénie/S. +lymphocytose/S. +lymphœdème/S. +lymphogranulomatose/S. +lymphographie/S. +lymphoïde/S. +lymphokine/S. +lymphome/S. +lymphopénie/S. +lymphosarcome/S. +lynchage/S. +lyncher/a0p+ +lyncheuse/F. +lynx +lyonnaise/F. +lyophile/S. +lyophilisat/S. +lyophilisateur/S. +lyophilisation/S. +lyophiliser/a0p+ +lyophobe/S. +lypémanie/S. +lyre/S. +lyrée/F. +lyrer/a0p. +lyric/S. +lyrique/S. +lyriquement +lyrisme/S. +lys +lysat/S. +lyse/S. +lyser/a0p+ +lysergamide/S. +lysergide/S. +lysergique/S. +lysimaque/S. +lysine/S. +lysogène/S. +lysogénie/S. +lysogénique/S. +lysosomale/W. +lysosome/S. +lysosomiale/W. +lysozyme/S. +lytique/S. +m +m/U.||-- +mCE +mR/||-- +ma +maar/S. +maboule/F. +maboulisme/S. +mac/S. +macabre/S. +macache +macadam/S. +macadamia/S. +macadamisage/S. +macadamiser/a0p+ +macaque/S. +macareux +macaron/S. +macaroni +macaroni/S. +macaronique/S. +macassar/S. +maccarthysme/S. +macchabée/S. +macchaber +macédoine/S. +macédonienne/F. +macérat/S. +macérateur/S. +macération/S. +macérer/c0p+ +maceron/S. +macfarlane/S. +mach +machaon/S. +mâche/S. +mâchefer/S. +mâchement/S. +mâcher/a0p+ +machette/S. +mâcheuse/F. +machiavel/S. +machiavélique/S. +machiavéliquement +machiavélisme/S. +machicoter/a0p. +mâchicoulis +machin/S. +machinale/W. +machinalement +machination/S. +machinatrice/F. +machine/S. +machine-outil +machiner/a0p+ +machinerie/S. +machines-outils +machinique/S. +machinisme/S. +machiniste/S. +machisme/S. +machiste/S. +machmètre/S. +macho/S. +mâchoire/S. +mâchon/S. +mâchonnement/S. +mâchonner/a0p+ +mâchouiller/a0p+ +mâchure/S. +mâchurer/a0p+ +macis +maclage/S. +macle/S. +macler/a0p+ +mâcon/S. +maçonnage/S. +mâconnaise/F. +maçonne/F. +maçonner/a0p+ +maçonnerie/S. +maçonnique/S. +macque/S. +macquer/a0p+ +macramé/S. +macre/S. +macreuse/S. +macro/S. +macrobiologique/S. +macrobiote/S. +macrobiotique/S. +macrocéphale/S. +macrocéphalie/S. +macrocommande/S. +macro-commande/S. +macrocosme/S. +macrocosmique/S. +macrocycle/S. +macrocyclique/S. +macrocystis +macrocyte/S. +macrocytose/S. +macrodactyle/S. +macrodécision/S. +macroéconomie/S. +macro-économie/S. +macroéconomique/S. +macro-économique/S. +macroéconomiste/S. +macroévolution/S. +macrofaune/S. +macroglossie/S. +macrographie/S. +macrographique/S. +macro-instruction/S. +macrolide/S. +macromoléculaire/S. +macromolécule/S. +macromutation/S. +macromycète/S. +macron/S. +macronutriment/S. +macro-ordinateur/S. +macro-organisme/S. +macrophage/S. +macrophage/S. +macrophomina/S. +macrophotographie/S. +macrophotographique/S. +macrophyte/S. +macropode/S. +macroscélide/S. +macroscopie/S. +macroscopique/S. +macroscopiquement +macroséisme/S. +macrosismique/S. +macrosociologique/S. +macrosporange/S. +macrospore/S. +macrostructure/S. +macroure/S. +macroure/S. +macula/S. +maculage/S. +maculaire/S. +maculation/S. +maculature/S. +macule/S. +maculer/a0p+ +macumba/S. +madame/S. +madapolam/S. +made +madécasse/S. +madéfier/a0p+ +madeleine/S. +madelonnette/S. +mademoiselle +madère/S. +madériser/a0p+ +madison/S. +madone/S. +madrague/S. +madras +madrasa/S. +madrassa/S. +madrée/F. +madréporaire/S. +madrépore/S. +madréporique/S. +madrier/S. +madrigal/X. +madrigaliser/a0p. +madrigaliste/S. +madrilène/S. +madrinienne/F. +madrure/S. +maelstrom/S. +maelström/S. +maërl/S. +maestoso +maestria/S. +maestro/S. +maffia/S. +maffieuse/W. +maffioso/I. +mafflue/F. +mafia/S. +mafieuse/W. +mafioso/I. +mafique/S. +magadhi/S. +maganer/a0p+ +magasin/S. +magasinage/S. +magasiner/a0p+ +magasinière/F. +magazine/S. +magdalénienne/F. +mage/S. +magellanique/S. +magenta +magenta/S. +maghrébine/F. +maghzen/S. +magicienne/F. +magie/S. +magique/S. +magiquement +magister/S. +magistère/S. +magistrale/W. +magistralement +magistrate/F. +magistrature/S. +magma/S. +magmatique/S. +magmatisme/S. +magmatologie/S. +magnanarelle/S. +magnanerie/S. +magnanière/F. +magnanime/S. +magnanimement +magnanimité/S. +magnat/S. +magner/a0p+ +magnésie/S. +magnésienne/F. +magnésioferrite/S. +magnésique/S. +magnésite/S. +magnésium/S. +magnet/S. +magnétar/S. +magnétique/S. +magnétiquement +magnétisable/S. +magnétisante/F. +magnétisation/S. +magnétiser/a0p+ +magnétiseuse/F. +magnétisme/S. +magnétite/S. +magnéto/S. +magnétocassette/S. +magnétochimie/S. +magnétodynamique/S. +magnétoélasticité/S. +magnéto-élasticité/S. +magnétoélectrique/S. +magnéto-électrique/S. +magnétoformage/S. +magnétogaine/S. +magnétohydrodynamique/S. +magnétoile/S. +magnétomètre/S. +magnétométrie/S. +magnétomotrice/F. +magnéton/S. +magnéto-optique/S. +magnéto-optique/S. +magnétopause/S. +magnétophone/S. +magnétophonique/S. +magnétorésistance/S. +magnétoscope/S. +magnétoscoper/a0p+ +magnétosphère/S. +magnétosphérique/S. +magnétostatique/S. +magnétostatique/S. +magnétostratigraphie/S. +magnétostriction/S. +magnétothermique/S. +magnétron/S. +magnificat +magnificence/S. +magnifier/a0p+ +magnifique/S. +magnifiquement +magnitude/S. +magnolia/S. +magnoliacée/S. +magnum/S. +magot/S. +magoter/a0p+ +magotte/S. +magouillage/S. +magouille/S. +magouiller/a0p+ +magouilleuse/F. +magret/S. +magyare/F. +mahaleb/S. +maharadja/S. +maharadjah/S. +maharaja/S. +maharajah/S. +maharani/S. +maharashtri/S. +mahatma/S. +mahdi/S. +mahdisme/S. +mahdiste/S. +mah-jong/S. +mahométane/F. +mahométisme/S. +mahonia/S. +mahonne/S. +mahoraise/F. +mahousse/F. +mahratte/S. +mai/S. +maïa/S. +maie/S. +maïeure/F. +maïeuticienne/F. +maïeutique/S. +maigre/S. +maigrelette/F. +maigrement +maigreur/S. +maigrichonne/F. +maigriotte/F. +maigrir/f0p+ +mail/S. +mail-coach/A. +mailing/S. +mailing-list/S. +maillage/S. +maillard/S. +maille/S. +maillechort/S. +mailler/a0p+ +maillet/S. +mailleton/S. +mailleuse/F. +mailloche/S. +mailloche/S. +maillon/S. +maillot/S. +maillotin/S. +maillure/S. +main/S. +mainate/S. +main-d'œuvre +main-forte +mainlevée/S. +mainmettre/vA +mainmise/S. +mainmortable/S. +mainmorte/S. +mains-d'œuvre +mainte/F. +maintenabilité/S. +maintenable/S. +maintenance/S. +maintenant +mainteneur/S. +mainteneuse/S. +maintenicienne/F. +maintenir/i0q+ +maintien/S. +maïorale/W. +maïorat/S. +maire/S. +mairesse/S. +mairie/S. +mais +mais +maïs +maïserie/S. +maïsicultrice/F. +maïsiculture/S. +maison/S. +maisonnée/S. +maisonnerie/S. +maisonnette/S. +maistrance/S. +maître-à-danser +maître-assistant +maître-assistante +maître-autel +maître-chien +maître-coq +maître-couple +maître-cylindre +maître-esclave +maître-mot +maître-nageur +maître-penseur +maître-queux +maîtres-à-danser +maîtres-assistantes +maîtres-assistants +maîtres-autels +maîtres-chiens +maîtres-coqs +maîtres-couples +maîtres-cylindres +maîtres-mots +maîtres-nageurs +maîtres-penseurs +maîtres-queux +maîtresse/F. +maîtrisable/S. +maîtrise/S. +maîtriser/a0p+ +maïzena/S. +majesté/S. +majestueuse/W. +majestueusement +majeure/F. +majolique/S. +ma-jong/S. +major/S. +majorable/S. +majoral/X. +majorante/F. +majorat/S. +majoration/S. +majordome/S. +majorer/a0p+ +majorette/S. +majoritaire/S. +majoritairement +majorité/S. +majuscule/S. +makach +makaire/S. +makhzen/S. +maki/S. +makimono/S. +makrout/S. +mal +mal/X. +malabar/S. +malabsorption/S. +malachite/S. +malacologie/S. +malacologique/S. +malacologiste/S. +malacologue/S. +malacoptérygien/S. +malacostracé/S. +malade/S. +maladie/S. +maladive/F. +maladivement +maladrerie/S. +maladresse/S. +maladroite/F. +maladroitement +malaga/S. +mal-aimée/F. +malaire/S. +malaisante/F. +malaise/F. +malaise/S. +malaisée/F. +malaisément +malaisienne/F. +malandre/S. +malandreuse/W. +malandrin/S. +malapprise/F. +malard/S. +malaria/S. +malariathérapie/S. +malariologie/S. +malart/S. +malavisée/F. +malawienne/F. +malawite/S. +malaxage/S. +malaxation/S. +malaxer/a0p+ +malaxeur/S. +malayo-polynésien/S. +malayo-polynésienne/F. +mal-baisée/F. +malbar/S. +malbaraise/S. +malbec/S. +malbouffe/S. +malchance/S. +malchanceuse/W. +malcommode/S. +maldivienne/F. +maldonne/S. +mâle/S. +mâle/S. +malebranchiste/S. +malédiction/S. +maléfice/S. +maléficieuse/W. +maléfique/S. +malékisme/S. +malékite/S. +malemort/S. +malencontre/S. +malencontreuse/W. +malencontreusement +malendurante/F. +mal-en-point +malentendante/F. +malentendu/S. +mal-être +malévolence/S. +malévolente/F. +malfaçon/S. +malfaire +malfaisance/S. +malfaisante/F. +malfaitrice/F. +malfamée/F. +mal-famée/F. +malfonction/S. +malfonctionnement/S. +malformation/S. +malformer/a0p+ +malfrat/S. +malgache/S. +malgracieuse/W. +malgré +malhabile/S. +malhabilement +malhabileté/S. +malherbologie/S. +malheur/S. +malheureuse/W. +malheureusement +malhonnête/S. +malhonnêtement +malhonnêteté/S. +mali/S. +malice/S. +maliciel/S. +malicieuse/W. +malicieusement +malienne/F. +maligne/F. +malignement +malignité/S. +maline/S. +maline/S. +malingre/S. +malinoise/F. +malintentionnée/F. +malique/S. +mal-jugé/S. +malle/S. +malléabilisation/S. +malléabiliser/a0p+ +malléabilité/S. +malléable/S. +malléolaire/S. +malléole/S. +malletière/F. +mallette/S. +mal-logée/F. +mal-logement/S. +mallophage/S. +mallouser/a0p+ +malmenage/S. +malmener/b0p+ +malmignatte/S. +malnutrie/F. +malnutrition/S. +malocclusion/S. +malodorante/F. +malolactique/S. +malonique/S. +malossol/S. +malotrue/F. +malouf/S. +malouine/F. +maloya/S. +malpighie/S. +malplaisante/F. +malpolie/F. +malposition/S. +malpropre/S. +malproprement +malpropreté/S. +malsaine/F. +malséance/S. +malséante/F. +malsonnante/F. +malt/S. +maltage/S. +maltaise/F. +maltase/S. +malter/a0p+ +malterie/S. +malteuse/F. +malthusianisme/S. +malthusienne/F. +maltose/S. +maltôte/S. +maltraitance/S. +maltraitante/F. +maltraiter/a0p+ +malus +malvacée/S. +malvacée/S. +malveillance/S. +malveillante/F. +malvenante/F. +malvenue/F. +malversation/S. +malvoisie/S. +malvoyance/S. +malvoyante/F. +malware/S. +mama/S. +mamamouchi/S. +maman/S. +mamba/S. +mambo/S. +mamelle/S. +mamelon/S. +mamelonnaire/S. +mamelonner/a0p+ +mamelouk/S. +mamelouk/S. +mamelue/F. +mameluk/S. +mameluk/S. +mamie/S. +mamillaire/S. +mamillaire/S. +mammaire/S. +mammalienne/F. +mammalogie/S. +mammalogique/S. +mammalogiste/S. +mammectomie/S. +mammifère/S. +mammite/S. +mammographe/S. +mammographie/S. +mammoplastie/S. +mammouth/S. +mammy/S. +mamours +mam'selle/S. +mamy/S. +mam'zelle/S. +man/S. +mana/S. +manade/S. +manadière/F. +management/S. +manager/S. +manager/a0p+ +managériale/W. +manant/S. +mancelle/S. +mancenille/S. +mancenillier/S. +manche/S. +mancheron/S. +manchette/S. +manchoise/F. +manchon/S. +manchonnage/S. +manchonner/a0p+ +manchote/F. +mancie/S. +mancipation/S. +mandale/S. +mandante/F. +mandarinale/W. +mandarinat/S. +mandarine/F. +mandarinier/S. +mandat/S. +mandataire/S. +mandat-carte +mandat-contributions +mandatement/S. +mandater/a0p+ +mandat-lettre +mandats-cartes +mandats-contributions +mandats-lettres +mandature/S. +mandchoue/F. +mandement/S. +mander/a0p+ +mandibulaire/S. +mandibulate/S. +mandibule/S. +mandille/S. +mandingue/S. +mandoline/S. +mandoliniste/S. +mandore/S. +mandorle/S. +mandragore/S. +mandrill/S. +mandrin/S. +mandrinage/S. +mandriner/a0p+ +manducation/S. +manducatrice/F. +manécanterie/S. +manège/S. +manéger/c0p+ +mânes +maneton/S. +manette/S. +manga/S. +mangabey/S. +mangaka/S. +manganate/S. +manganèse/S. +manganésifère/S. +manganeuse/W. +manganine/S. +manganique/S. +manganite/S. +mangeable/S. +mangeaille/S. +mange-merde +mangeoire/S. +mangeotter/a0p+ +manger/S. +manger/a0p+ +mangerie/S. +mange-tout +mangeure/S. +mangeuse/F. +manglier/S. +mangonneau/X. +mangoustan/S. +mangoustanier/S. +mangouste/S. +mangrove/S. +mangue/S. +manguier/S. +maniabilité/S. +maniable/S. +maniaco-dépressive/F. +maniaque/S. +maniaquement +maniaquerie/S. +manichéenne/F. +manichéisme/S. +manichéiste/S. +manichordion/S. +manicle/S. +manicorde/S. +manie/S. +maniement/S. +manier/a0p+ +manière/S. +maniérer/c0p+ +maniérisme/S. +maniériste/S. +manieuse/F. +manif/S. +manifestante/F. +manifestation/S. +manifeste/S. +manifeste/S. +manifestement +manifester/a0p+ +manifold/S. +manifold/S. +manigance/S. +manigancer/a0p+ +maniguette/S. +manille/S. +manilleuse/F. +manillon/S. +manioc/S. +manip/S. +manipulable/S. +manipulation/S. +manipulatoire/S. +manipulatrice/F. +manipule/S. +manipuler/a0p+ +manique/S. +manitou/S. +manivelle/S. +manne/S. +mannequin/S. +mannequinage/S. +mannequinat/S. +mannequine/S. +mannequiner/a0p+ +mannite/S. +mannitol/S. +mannose/S. +manodétendeur/S. +manœuvrabilité/S. +manœuvrable/S. +manœuvre/S. +manœuvrer/a0p+ +manœuvrière/F. +manoir/S. +manomètre/S. +manométrie/S. +manométrique/S. +manoque/S. +manoquer/a0p+ +manostat/S. +manouche/S. +manouvrière/F. +manquante/F. +manque/S. +manquement/S. +manquer/a0p+ +mansarde/S. +mansarder/a0p+ +manse/S. +mansion/S. +mansuétude/S. +manta/S. +mante/S. +manteau/X. +mantelée/F. +mantelet/S. +mantellique/S. +mantelure/S. +manticore/S. +mantille/S. +mantique/S. +mantique/S. +mantisse/S. +mantra/S. +manu +manuaire/S. +manuaire/S. +manubrium/S. +manucure/S. +manucurer/a0p+ +manuéline/F. +manuelle/F. +manuellement +manufacturable/S. +manufacture/S. +manufacturer/a0p+ +manufacturière/F. +manumission/S. +manuportage/S. +manuscriptologie/S. +manuscrit/S. +manuscrite/F. +manutention/S. +manutentionnaire/S. +manutentionner/a0p+ +manuterge/S. +manzanilla/S. +maoïsme/S. +maoïste/S. +maorie/F. +maousse/F. +mappage/S. +mappemonde/S. +mapper/a0p+ +maquer/a0p+ +maquereau/X. +maquereautage/S. +maquerellage/S. +maquerelle/S. +maquettage/S. +maquette/S. +maquetter/a0p+ +maquettisme/S. +maquettiste/S. +maquignonnage/S. +maquignonne/F. +maquignonner/a0p+ +maquillage/S. +maquiller/a0p+ +maquilleuse/F. +maquis +maquisarde/F. +marabout/S. +maraboutage/S. +marabouter/a0p+ +maraboutique/S. +maraboutisme/S. +maraca/S. +maracudja/S. +maracuja/S. +maraîchage/S. +maraîchère/F. +maraîchine/F. +marais +maranta/S. +marasme/S. +marasque/S. +marasquin/S. +marathe/S. +marathi/S. +marathon/S. +marathonienne/F. +maratoner/a0p. +marâtre/S. +maraudage/S. +maraude/F. +marauder/a0p+ +maraudeuse/F. +maravédis +maraver/a0p+ +marbre/S. +marbrer/a0p+ +marbrerie/S. +marbreuse/F. +marbrière/F. +marbrure/S. +marc/S. +marcassin/S. +marcassite/S. +marcel/S. +marcescence/S. +marcescente/F. +marcescible/S. +marchage/S. +marchandage/S. +marchande/F. +marchander/a0p+ +marchandeuse/F. +marchandisable/S. +marchandisage/S. +marchandisation/S. +marchandise/S. +marchandiser/a0p+ +marchante/F. +marchantie/S. +marche/S. +marché/S. +marchéage/S. +marchepied/S. +marcher/a0p. +marchette/S. +marcheuse/F. +marcionisme/S. +marcionite/S. +marcottage/S. +marcotte/S. +marcotter/a0p+ +mardi +mardi/S. +mare/S. +marécage/S. +marécageuse/W. +maréchalat/S. +maréchale/W. +maréchale-ferrante +maréchalerie/S. +maréchales-ferrantes +maréchal-ferrant +maréchaliste/S. +maréchaussée/S. +maréchaux-ferrants +marée/S. +marégramme/S. +marégraphe/S. +marelle/S. +maremmatique/S. +maremme/S. +marémotrice/F. +marengo +marengo/S. +marennes +maréomètre/S. +mareyage/S. +mareyeuse/F. +marfil/S. +margaille/S. +margarine/S. +margarique/S. +margarita/S. +margarite/S. +margauder/a0p. +margay/S. +marge/S. +margelle/S. +marger/a0p+ +margeuse/F. +marginale/W. +marginalement +marginalisation/S. +marginaliser/a0p+ +marginalisme/S. +marginaliste/S. +marginalité/S. +marginer/a0p+ +margis +margoter/a0p. +margotin/S. +margotter/a0p. +margouillat/S. +margouillis +margoulette/S. +margoulin/S. +margousier/S. +margrave/S. +margraviat/S. +marguerite/S. +marguillerie/S. +marguillière/F. +mari/S. +mariable/S. +mariage/S. +mariale/W. +marials +maricultrice/F. +mariculture/S. +marie-couche-toi-là +mariée/F. +marie-jeanne +marier/a0p+ +marie-salope +maries-salopes +marieuse/F. +marigot/S. +marihuana/S. +marijuana/S. +marimba/S. +marina/S. +marinade/S. +marinage/S. +marine/F. +marine/S. +mariner/a0p+ +maringouin/S. +marinière/F. +marinisme/S. +marin-pompier +marins-pompiers +mariole/S. +mariolle/S. +mariologie/S. +marionnette/S. +marionnettiste/S. +marisque/S. +mariste/S. +maritale/W. +maritalement +maritime/S. +maritorne/S. +marivaudage/S. +marivauder/a0p. +marjolaine/S. +mark/S. +marketeuse/F. +marketing/S. +markovienne/F. +marli/S. +marlin/S. +marlou/S. +marmaille/S. +marmelade/S. +marmenteau/X. +marmitage/S. +marmite/S. +marmiter/a0p+ +marmiteuse/W. +marmitonne/F. +marmonnement/S. +marmonner/a0p+ +marmoréenne/F. +marmoriser/a0p+ +marmot/S. +marmottage/S. +marmottante/F. +marmotte/S. +marmottement/S. +marmotter/a0p+ +marmotteuse/F. +marmouset/S. +marnage/S. +marnaise/F. +marne/S. +marner/a0p+ +marneuse/F. +marneuse/W. +marnière/S. +marnoise/F. +marocaine/F. +maroilles +maronite/S. +maronner/a0p. +maroquin/S. +maroquinage/S. +maroquiner/a0p+ +maroquinerie/S. +maroquinière/F. +marotique/S. +marotte/S. +marouette/S. +marouflage/S. +maroufle/S. +maroufler/a0p+ +maroute/S. +marquage/S. +marquante/F. +marque/S. +marque-page +marque-page/S. +marquer/a0p+ +marqueter/d0p+ +marqueterie/S. +marqueteuse/F. +marqueuse/F. +marquisat/S. +marquise/F. +marquoir/S. +marraine/S. +marrante/F. +marre +marrer/a0p+ +marrie/F. +marron +marron/S. +marronnage/S. +marronne/F. +marronner/a0p. +marronnier/S. +marrube/S. +mars +marsault/S. +marseillaise/F. +marshall/S. +marshallaise/F. +marshmallow/S. +marsouin/S. +marsouinage/S. +marsouiner/a0p. +marsupial/X. +marsupiale/W. +marsupium/S. +martagon/S. +marte/S. +marteau/X. +marteau/X. +marteau-pilon +marteau-piqueur +marteaux-pilons +marteaux-piqueurs +martel +martelage/S. +martèlement/S. +marteler/b0p+ +marteleuse/F. +martellement/S. +martellière/S. +martensite/S. +martensitique/S. +martiale/W. +martialement +martialiste/S. +martienne/F. +martin/S. +martin-chasseur +martinet/S. +martingale/S. +martini +martini/S. +martiniquaise/F. +martin-pêcheur +martins-chasseurs +martins-pêcheurs +martre/S. +martyre/F. +martyre/S. +martyriser/a0p+ +martyrium/S. +martyrologe/S. +martyrologie/S. +marxienne/F. +marxisante/F. +marxiser/a0p+ +marxisme/S. +marxisme-léninisme +marxiste/S. +marxiste-léniniste +marxistes-léninistes +marxologie/S. +marxologue/S. +maryland/S. +mas +mas/||-- +mascara/S. +mascarade/S. +mascaret/S. +mascaron/S. +mascarpone/S. +mascogne/S. +mascotte/S. +masculin/S. +masculine/F. +masculinisation/S. +masculiniser/a0p+ +masculinisme/S. +masculiniste/S. +masculinité/S. +maser/S. +maskinongé/S. +maso/S. +masochisme/S. +masochiste/S. +masquable/S. +masquage/S. +masquante/F. +masque/S. +masquer/a0p+ +massacrante/F. +massacre/S. +massacrer/a0p+ +massacreuse/F. +massage/S. +massaliote/S. +masse/S. +masselotte/S. +massepain/S. +masser/a0p+ +masséter/S. +massette/S. +masseuse/F. +massicot/S. +massicotage/S. +massicoter/a0p+ +massicotière/F. +massière/F. +massif/S. +massification/S. +massifier/a0p+ +massique/S. +massive/F. +massivement +massivité/S. +massorah/S. +massore/S. +massorète/S. +massorétique/S. +massothérapeute/S. +massothérapie/S. +massue/S. +mastaba/S. +mastectomie/S. +mastéguer +master/S. +mastère/S. +masterisation/S. +mastérisation/S. +mastic +mastic/S. +masticage/S. +masticateur/S. +mastication/S. +masticatoire/S. +masticatoire/S. +masticatrice/F. +mastiff/S. +mastiquer/a0p+ +mastite/S. +mastoc +mastocyte/S. +mastocytose/S. +mastodonte/S. +mastodynie/S. +mastoïde/S. +mastoïdectomie/S. +mastoïdienne/F. +mastoïdite/S. +mastologie/S. +mastopathie/S. +mastose/S. +mastroquet/S. +masturbation/S. +masturbatoire/S. +masturbatrice/F. +masturber/a0p+ +m'as-tu-vu +masure/S. +masurium/S. +mât/S. +matabiche/S. +matabicher/a0p+ +matador/S. +mataf/S. +matage/S. +matamore/S. +matassin/S. +match/A. +matcha/S. +matcher/a0p+ +matchiche/S. +match-play/S. +mate/F. +maté/S. +matefaim/S. +matelas +matelassage/S. +matelasser/a0p+ +matelassière/F. +matelassure/S. +matelotage/S. +matelote/F. +mâter/a0p+ +mater/a0p+ +mâtereau/X. +matérialisation/S. +matérialiser/a0p+ +matérialisme/S. +matérialiste/S. +matérialité/S. +matériau/X. +matérielle/F. +matériellement +maternage/S. +maternalisme/S. +maternaliste/S. +maternelle/F. +maternellement +materner/a0p+ +materniser/a0p+ +maternité/S. +maternologie/S. +mateuse/F. +math/S= +mathématicienne/F. +mathématique/S. +mathématique/S. +mathématiquement +mathématisable/S. +mathématisation/S. +mathématiser/a0p+ +mathématisme/S. +matheuse/W. +matière/S. +matifiante/F. +matin/S. +matinale/W. +matinalement +mâtine/F. +matinée/S. +mâtiner/a0p+ +matines +matineuse/W. +matinière/F. +matir/f0p+ +matité/S. +matoir/S. +matoise/F. +matoiserie/S. +matonne/F. +matorral/S. +matos +matou/S. +matoufet/S. +matouner/a0p+ +matoutou/S. +matraquage/S. +matraque/S. +matraquer/a0p+ +matraqueuse/F. +matras +matriarcale/W. +matriarcat/S. +matriarche/S. +matriarchie/S. +matriçage/S. +matricaire/S. +matrice/S. +matricer/a0p+ +matriceuse/F. +matricide/S. +matricielle/F. +matricule/S. +matriculer/a0p+ +matrie/S. +matrilinéaire/S. +matrilocale/W. +matrimoniale/W. +matrimonialement +matriochka/S. +matroïde/S. +matrone/S. +matronyme/S. +matronymique/S. +matte/S. +matthiole/S. +maturase/S. +maturation/S. +mature/S. +mâture/S. +maturer/a0p+ +maturité/S. +matutinale/W. +maubèche/S. +maudire/yF +maudite/F. +maugréante/F. +maugréer/a0p+ +maurandie/S. +maure/S. +maurelle/S. +mauresque/S. +mauricienne/F. +mauritanienne/F. +mauser/S. +mausolée/S. +maussade/S. +maussadement +maussaderie/S. +mauvaise/F. +mauvaisement +mauvaiseté/S. +mauve/S. +mauve/S. +mauvéine/S. +mauviette/S. +mauvis +mauzac/S. +max +maxi +maxillaire/S. +maxillaire/S. +maxille/S. +maxillipède/S. +maxillo-dentaire/S. +maxillo-faciale/W. +maxillule/S. +maxima +maxima/S. +maximale/W. +maximalement +maximalisation/S. +maximaliser/a0p+ +maximalisme/S. +maximaliste/S. +maxime/S. +maximisation/S. +maximisatrice/F. +maximiser/a0p+ +maximum/S. +maximum/S. +maxwell/S. +maxwellienne/F. +maya/S. +maye/S. +mayen/S. +mayennaise/F. +mayo/S. +mayonnaise/S. +mays +mazagran/S. +mazama/S. +mazarinade/S. +mazatèque/S. +mazdéenne/F. +mazdéisme/S. +mazéage/S. +mazette/S. +mazot/S. +mazout/S. +mazoutage/S. +mazouter/a0p+ +mazurka/S. +mbalax +mbar/||-- +me +mea-culpa +méandre/S. +méandreuse/W. +méandriforme/S. +méandrine/S. +méat/S. +méatoscopie/S. +mébibit/S. +mébioctet/S. +mec/S. +mécane/S. +mécanicien-dentiste +mécanicienne/F. +mécaniciens-dentistes +mécanicisme/S. +mécaniciste/S. +mécanicité/S. +mécanique/S. +mécanique/S. +mécaniquement +mécanisable/S. +mécanisation/S. +mécaniser/a0p+ +mécanisme/S. +mécaniste/S. +mécano/S. +mécanographe/S. +mécanographie/S. +mécanographique/S. +mécano-souder/a0p+ +mécano-soudure/S. +mécanothérapie/S. +mécatronicienne/F. +mécatronique/S. +meccano/S. +mécénat/S. +mécène/S. +méchage/S. +méchamment +méchanceté/S. +méchante/F. +mèche/S. +mécher/c0p+ +mécheuse/W. +méchoui/S. +mechta/S. +mécompréhension/S. +mécompte/S. +mécompter/a0p+ +méconduire/yL +méconduite/S. +méconiale/W. +méconium/S. +méconnaissable/S. +méconnaissance/S. +méconnaître/wQq+ +mécontente/F. +mécontentement/S. +mécontenter/a0p+ +mécoptère/S. +mecquoise/F. +mécréance/S. +mécréante/F. +mécroire/xA +médaillable/S. +médaille/S. +médaillée/F. +médailler/a0p+ +médailleuse/F. +médaillier/S. +médailliste/S. +médaillon/S. +mède/S. +médecin/S. +médecine/S. +medecine-ball/S. +médecine-ball/S. +medersa/S. +média/S. +médiacratie/S. +médiagraphie/S. +médiale/W. +médialogie/S. +médialogue/S. +médiane/F. +médianoche/S. +médiante/S. +médiaplanneuse/F. +média-planneuse/F. +médiaplanning/S. +média-planning/S. +médiascopie/S. +médiastin/S. +médiastinale/W. +médiate/F. +médiatement +médiathécaire/S. +médiathèque/S. +médiation/S. +médiatique/S. +médiatiquement +médiatisable/S. +médiatisation/S. +médiatiser/a0p+ +médiator/S. +médiatrice/F. +médicale/W. +médicalement +médicalisante/F. +médicalisation/S. +médicaliser/a0p+ +médicament/S. +médicamentation/S. +médicamenter/a0p+ +médicamenteuse/W. +médicastre/S. +médication/S. +médicinale/W. +médicinier/S. +médico-chirurgicale/W. +médico-judiciaire/S. +médico-légale/W. +médico-pédagogique/S. +médico-professionnelle/F. +médico-psychologique/S. +médico-sociale/W. +médico-sportive/F. +médiévale/W. +médiévalisme/S. +médiévisme/S. +médiéviste/S. +médina/S. +médiocratie/S. +médiocre/S. +médiocrement +médiocrité/S. +médiologie/S. +médiologue/S. +médio-océanique/S. +médiopalatale/W. +médique/S. +médire/yE +médisance/S. +médisante/F. +médiser/a0p. +méditante/F. +méditation/S. +méditative/F. +méditativement +méditer/a0p+ +méditerranée/F. +méditerranéenne/F. +medium/I. +médium/S. +médiumnique/S. +médiumnité/S. +médius +médoc/S. +médulla/S. +médullaire/S. +médullaire/S. +médulleuse/W. +médullo-surrénale/F. +médullosurrénale/W. +médusante/F. +méduse/S. +méduser/a0p+ +meeting/S. +méfaire +méfait/S. +mefenoxam/S. +méfiance/S. +méfiante/F. +méfier/a0p+ +méforme/S. +méga/S. +mégabase/S. +mégabit/S. +mégacaryocyte/S. +mégacéphalie/S. +mégacéros +mégacôlon/S. +mégacycle/S. +mégadonnées +mégafaune/S. +mégalérythème/S. +mégalithe/S. +mégalithique/S. +mégalithisme/S. +mégalo/S. +mégaloblastique/S. +mégalocéphalie/S. +mégalodon/S. +mégalomane/S. +mégalomaniaque/S. +mégalomanie/S. +mégalopole/S. +mégaloptère/S. +mégaoctet/S. +mégaparsec/S. +mégaphone/S. +mégapixel/S. +mégapode/S. +mégapole/S. +mégaptère/S. +mégarde/S. +mégaron/S. +mégastructure/S. +mégathérium/S. +mégatonne/S. +mégatonnique/S. +mégavirus +mégère/S. +mégir/f0p+ +mégis +mégisser/a0p+ +mégisserie/S. +mégissière/F. +mégohmmètre/S. +mégot/S. +mégotage/S. +mégoter/a0p+ +mehalla/S. +méhara +méharée/S. +méhari/S. +méhariste/S. +meilleure/F. +méiose/S. +méiotique/S. +meistre/S. +meitnérium/S. +méjanage/S. +méjuger/a0p+ +mél +melæna/S. +mélæna/S. +mélamine/S. +mélaminé/S. +mélaminée/F. +mélampyre/S. +mélancolie/S. +mélancolique/S. +mélancoliquement +mélanésienne/F. +mélange/S. +mélangeage/S. +mélangeante/F. +mélanger/a0p+ +mélangeur-doseur/S. +mélangeurs-doseurs +mélangeuse/F. +mélangisme/S. +mélanine/S. +mélanique/S. +mélanisme/S. +mélanite/S. +mélanocrate/S. +mélanocyte/S. +mélanoderme/S. +mélanodermie/S. +mélanome/S. +mélanophore/S. +mélanosarcome/S. +mélanose/S. +mélanostimuline/S. +mélasse/S. +mélatonine/S. +melba +melba +melchior/S. +melchite/S. +méléagrine/S. +mêlé-cass +mêlée/S. +méléna/S. +mêler/a0p+ +mêle-tout +mélèze/S. +mélia/S. +méliacée/S. +méligèthe/S. +mélilite/S. +mélilot/S. +méli-mélo +mélinite/S. +mélioïdose/S. +méliorative/F. +méliphage/S. +mélique/S. +mélis-mélos +mélisse/S. +mélitococcie/S. +mélitte/S. +melkite/S. +mellah/S. +mellifère/S. +mellification/S. +mellifique/S. +melliflue/F. +melliflue/S. +mellite/S. +mélo/S. +mélodie/S. +mélodieuse/W. +mélodieusement +mélodique/S. +mélodiquement +mélodiste/S. +mélodramatique/S. +mélodrame/S. +mélomane/S. +melon/S. +mélongine/S. +melonnée/F. +melonnière/S. +mélopée/S. +mélophage/S. +melting-pot/S. +mélusine/S. +membranaire/S. +membrane/S. +membraneuse/W. +membraniforme/S. +membranophone/S. +membranule/S. +membre/S. +membrée/F. +membron/S. +membrue/F. +membrure/S. +même +même/S. +mème/S. +mémé/S. +mêmement +memento/S. +mémento/S. +mémérage/S. +mémère/S. +mémétique/S. +mémétique/S. +mémo/S. +mémoire/S. +mémorabilité/S. +mémorable/S. +mémorablement +memorandum/I. +mémorandum/S. +mémoration/S. +mémorial/X. +mémorialiste/S. +mémorielle/F. +mémorisable/S. +mémorisation/S. +mémoriser/a0p+ +m'en +menaçante/F. +menace/S. +menacer/a0p+ +ménade/S. +ménage/S. +ménageable/S. +ménagement/S. +ménager/a0p+ +ménagère/F. +ménagerie/S. +ménagiste/S. +menante/S. +ménapienne/F. +ménaquinone/S. +ménarche/S. +menchevik/S. +menchevique/S. +mendélévium/S. +mendélienne/F. +mendélisme/S. +mendiante/F. +mendicité/S. +mendier/a0p+ +mendigote/F. +mendigoter/a0p+ +mendole/S. +meneau/X. +menée/S. +mener/b0p+ +ménestrel/S. +ménétrier/S. +meneuse/F. +menhir/S. +ménilite/S. +menine/F. +méninge/S. +méningée/F. +méningiome/S. +méningite/S. +méningitique/S. +méningocoque/S. +méningo-encéphalite/S. +méniscale/W. +ménisque/S. +mennonite/S. +mennonitisme/S. +ménologe/S. +ménopause/S. +ménopausée/S. +ménopausique/S. +menorah/S. +ménorah/S. +ménorragie/S. +menottage/S. +menotte/S. +menotter/a0p+ +mense/S. +mensonge/S. +mensongère/F. +mensongèrement +menstruation/S. +menstrue +menstruelle/F. +menstrues +mensualisation/S. +mensualiser/a0p+ +mensualité/S. +mensuelle/F. +mensuellement +mensurable/S. +mensuration/S. +mensurer/a0p+ +mentale/W. +mentalement +mentalisme/S. +mentaliste/S. +mentalité/S. +menterie/S. +menteuse/F. +menthe/S. +menthol/S. +mentholée/F. +menthone/S. +mention/S. +mentionner/a0p+ +mentir/i5q. +mentisme/S. +menton/S. +mentonnet/S. +mentonnière/F. +mentonnière/S. +mentor/S. +mentorat/S. +menu/S. +menuaille/S. +menue/F. +menuet/S. +menuise/S. +menuiser/a0p+ +menuiserie/S. +menuisière/F. +ménure/S. +ményanthe/S. +méphistophélique/S. +méphitique/S. +méphitisme/S. +méplat/S. +méplate/F. +méprendre/tG +mépris +méprisable/S. +méprisante/F. +méprise/S. +méprisée/F. +mépriser/a0p+ +méprobamate/S. +mer/S. +merbau/X. +merbromine/S. +mercanti/S. +mercantile/S. +mercantilisation/S. +mercantiliser/a0p+ +mercantilisme/S. +mercantiliste/S. +mercaptan/S. +mercaticienne/F. +mercatique/S. +mercato/S. +mercenaire/S. +mercenariat/S. +mercenarisme/S. +mercerie/S. +mercerisage/S. +merceriser/a0p+ +merceriseuse/S. +merchandising/S. +merci/S. +mercière/F. +mercredi +mercredi/S. +mercure/S. +mercureux +mercuriale/S. +mercurielle/F. +mercurienne/F. +mercurique/S. +mercurochrome/S. +merdaille/S. +merdaillon/S. +merde/S. +merder/a0p. +merdeuse/W. +merdier/S. +merdique/S. +merditude/S. +merdouille/S. +merdouiller/a0p. +merdoyer/a0p. +mère/S. +mère-grand +mérelle/S. +merengue/S. +mères-grand +merguez +mergule/S. +méridienne/F. +méridionale/W. +mérièdre/S. +mériédrie/S. +meringue/S. +meringuer/a0p+ +mérinos +merise/S. +merisier/S. +mérisme/S. +méristématique/S. +méristème/S. +méritante/F. +mérite/S. +mériter/a0p+ +méritocratie/S. +méritocratique/S. +méritoire/S. +méritoirement +merlan/S. +merle/S. +merleau/X. +merlette/S. +merlin/S. +merlon/S. +merlot/S. +merlu/S. +merluche/S. +mérocrine/S. +méromorphe/S. +méromorphie/S. +méromorphiquement +méronyme/S. +méronymie/S. +mérostome/S. +mérou/S. +mérovingienne/F. +merrain/S. +merroutage/S. +mérule/S. +merveille/S. +merveilleuse/W. +merveilleusement +mérycisme/S. +merzlota/S. +mes +mesa/S. +mésadaptée/F. +mésalliance/S. +mésallier/a0p+ +mésange/S. +mésangeai/S. +mésangette/S. +mésappariement/S. +mésaventure/S. +mescal/S. +mescaline/S. +mesclun/S. +mesdames +mesdames +mesdemoiselles +mesdemoiselles +mésemploi/S. +mésencéphale/S. +mésencéphalique/S. +mésenchymateuse/W. +mésenchyme/S. +mésentente/S. +mésentère/S. +mésentérique/S. +mésestimation/S. +mésestime/S. +mésestimer/a0p+ +mésiale/W. +mésintelligence/S. +mésinterprétation/S. +mésique/S. +mesmérienne/F. +mesmérisme/S. +mésoblaste/S. +mésoblastique/S. +mésocarpe/S. +mésocentre/S. +mésocéphale/S. +mésocéphale/S. +mésocéphalique/S. +mésocolon/S. +mésocôlon/S. +mésocrate/S. +mésocyclone/S. +mésoderme/S. +mésodermique/S. +mésoglée/S. +mésolithique/S. +mésomère/S. +mésomère/S. +mésomérie/S. +mésomorphe/S. +méson/S. +mésonéphros +mésonique/S. +mésopause/S. +mésopélagique/S. +mésophase/S. +mésophile/S. +mésophylle/S. +mésophyte/S. +mésopique/S. +mésopotamienne/F. +mésoscopique/S. +mésosphère/S. +mésosphérique/S. +mésothéliale/W. +mésothéliome/S. +mésothélium/S. +mésothérapeute/S. +mésothérapie/S. +mésothorax +mésotonique/S. +mésozoaire/S. +mésozoïque/S. +mésozoïque/S. +mesquine/F. +mesquinement +mesquinerie/S. +mess +message/S. +messagère/F. +messagerie/S. +messe/S. +messeigneurs +messeigneurs +messeoir/pW +messer/S. +messianique/S. +messianisme/S. +messianiste/S. +messianité/S. +messicole/S. +messidor/S. +messie/S. +messier/S. +messieurs +messieurs +messine/F. +messire/S. +mestre/S. +mesurabilité/S. +mesurable/S. +mesurablement +mesurage/S. +mesurande/S. +mesure/S. +mesurément +mesurer/a0p+ +mesurette/S. +mesureuse/F. +mésusage/S. +mésuser/a0p. +méta/S. +métabole/S. +métabole/S. +métabolique/S. +métabolisable/S. +métabolisation/S. +métaboliser/a0p+ +métabolisme/S. +métabolite/S. +métabolome/S. +métabolomique/S. +métabotypage/S. +métacaractère/S. +métacarpe/S. +métacarpienne/F. +métacentre/S. +métacentrique/S. +métacercaire/S. +métacognition/S. +métaconnaissance/S. +métadiégétique/S. +métadiscours +métadonnée/S. +métafiction/S. +métagénome/S. +métagénomique/S. +métagénomique/S. +métahistoire/S. +métahistorique/S. +métairie/S. +métal/X. +métalangage/S. +métalangue/S. +métalaxyl/S. +métaldéhyde/S. +métalepse/S. +métalinguistique/S. +métalléité/S. +métallerie/S. +métallicité/S. +métallière/F. +métallifère/S. +métallique/S. +métalliquement +métallisation/S. +métalliser/a0p+ +métalliseuse/F. +métalliste/S. +métallo/S. +métallochromie/S. +métallogénie/S. +métallogénique/S. +métallographe/S. +métallographie/S. +métallographique/S. +métalloïde/S. +métallophone/S. +métalloplastique/S. +métalloprotéine/S. +métallurgie/S. +métallurgique/S. +métallurgiste/S. +métalogique/S. +métalogique/S. +métalogisme/S. +métamathématique/S. +métamathématique/S. +métamère/S. +métamérie/S. +métamérique/S. +métamérisation/S. +métamérisée/F. +métamérisme/S. +métamorphe/S. +métamorphique/S. +métamorphiser/a0p+ +métamorphisme/S. +métamorphosable/S. +métamorphose/S. +métamorphoser/a0p+ +métamoteur/S. +métanéphros +métaphase/S. +métaphasique/S. +métaphore/S. +métaphorique/S. +métaphoriquement +métaphorisation/S. +métaphoriser/a0p+ +métaphosphate/S. +métaphosphorique/S. +métaphysaire/S. +métaphyse/S. +métaphysicienne/F. +métaphysique/S. +métaphysique/S. +métaphysiquement +métaplasie/S. +métaplasme/S. +métaplectique/S. +métapolitique/S. +métapopulation/S. +métaprogrammation/S. +métapsychique/S. +métapsychique/S. +métapsychologie/S. +métapsychologique/S. +métareprésentation/S. +métasomatique/S. +métasomatose/S. +métastabilité/S. +métastable/S. +métastase/S. +métastaser/a0p+ +métastatique/S. +métatarse/S. +métatarsienne/F. +métataxe/S. +métatextualité/S. +métatextuelle/F. +métathéorie/S. +métathèse/S. +métathorax +métaxiale/W. +métayage/S. +métayère/F. +métazachlore/S. +métazoaire/S. +metconazole/S. +méteil/S. +métempsychose/S. +métempsycose/S. +métencéphale/S. +météo/S. +météogramme/S. +météore/S. +météorique/S. +météorisation/S. +météoriser/a0p+ +météorisme/S. +météorite/S. +météoritique/S. +météoroïde/S. +météoroïde/S. +météorologie/S. +météorologique/S. +météorologiste/S. +météorologue/S. +météoromancie/S. +métèque/S. +méthacrylate/S. +méthacrylate/S. +méthacrylique/S. +méthadone/S. +méthamphétamine/S. +méthanal/S. +méthane/S. +méthanier/S. +méthanique/S. +méthanisation/S. +méthaniser/a0p+ +méthanogène/S. +méthanoïque/S. +méthanol/S. +méthaqualone/S. +méthémoglobine/S. +méthémoglobinémie/S. +méthionine/S. +méthode/S. +méthodique/S. +méthodiquement +méthodisme/S. +méthodiste/S. +méthodologie/S. +méthodologique/S. +méthodologiquement +méthyl +méthylamine/S. +méthylation/S. +méthylcyclopropane/S. +méthyle/S. +méthylène/S. +méthyler/a0p+ +méthylique/S. +méthylmercure/S. +méthylphénidate/S. +méticilline/S. +méticuleuse/W. +méticuleusement +méticulosité/S. +métier/S. +métissage/S. +métisse/F. +métisser/a0p+ +métoclopramide/S. +metolachlore/S. +métonymie/S. +métonymique/S. +métonymiquement +métope/S. +métopique/S. +métrage/S. +mètre/Um +métrer/c0p+ +métreuse/F. +métricienne/F. +métrique/S. +métrique/S. +métrisable/S. +métrite/S. +métro/S. +métrologie/S. +métrologique/S. +métrologiste/S. +métrologue/S. +métromanie/S. +métronidazole/S. +métronome/S. +métronomique/S. +métropole/S. +métropolisation/S. +métropolitaine/F. +métropolite/S. +métrorragie/S. +métrosexualité/S. +métrosexuelle/F. +mets +metsulfuron/S. +mettable/S. +metteure/S. +metteuse/F. +mettre/vA +meublante/F. +meuble/S. +meuble/S. +meublé/S. +meubler/a0p+ +meuf/S. +meuglement/S. +meugler/a0p. +meuh +meulage/S. +meule/S. +meuler/a0p+ +meulette/S. +meuleuse/F. +meulière/F. +meulon/S. +meunerie/S. +meunière/F. +meurette/S. +meursault/S. +meurtre/S. +meurtrière/F. +meurtrir/f0p+ +meurtrissable/S. +meurtrissante/F. +meurtrissure/S. +meusienne/F. +meute/S. +mévendre/tA +mévente/S. +mexicaine/F. +mexicanisation/S. +mexico-américaine/F. +mézail/S. +mézigue +mezzanine/S. +mezza-voce +mezzo +mezzo/S. +mezzo-soprano +mezzo-soprano/S. +mezzo-tinto +mezzotinto/S. +mgr/||-- +mi +mi/||-- +miacidé/S. +miam +miam-miam +miaou/S. +mi-août +miasmatique/S. +miasme/S. +miaulement/S. +miauler/a0p. +miauleuse/F. +mi-avril +mi-bas +mica/S. +micacée/F. +mi-carême/S. +micaschiste/S. +micellaire/S. +micelle/S. +mi-chaussette/S. +miche/S. +micheline/S. +mi-chemin +micheton/S. +michetonner/a0p. +mi-close/F. +micmac/S. +micocoulier/S. +mi-corps +mi-côte +mi-course +micro/S. +microalvéole/S. +microampèremètre/S. +micro-ampèremètre/S. +microanalyse/S. +micro-analyse/S. +microarray/S. +microbalance/S. +microbe/S. +microbicide/S. +microbienne/F. +microbille/S. +microbiologie/S. +microbiologique/S. +microbiologiste/S. +microbiome/S. +microbiote/S. +microblog/S. +microbouturage/S. +microbrasserie/S. +microbulle/S. +microbus +microcalorimètre/S. +microcalorimétrie/S. +microcalorimétrique/S. +microcanal/X. +micro-casque +microcéphale/S. +microcéphalie/S. +microchimie/S. +microchirurgie/S. +microcinéma/S. +microcinématographie/S. +microcircuit/S. +microclimat/S. +microclimatique/S. +microcline/S. +microcontact/S. +microcontrôleur/S. +microcopie/S. +microcoque/S. +microcosme/S. +microcosmique/S. +microcoupure/S. +micro-cravate +microcrédit/S. +microcristal/X. +microcristalline/F. +microcuvette/S. +microcytose/S. +microdécision/S. +microdifférentiel/S. +microdissection/S. +microdistribution/S. +microdosage/S. +microéconométrie/S. +microéconomie/S. +micro-économie/S. +microéconomique/S. +micro-économique/S. +microéconomiste/S. +microédition/S. +microélectrode/S. +microélectronique/S. +micro-électronique/S. +microélectronique/S. +micro-électronique/S. +micro-embranchement/S. +microémulsion/S. +microencapsulation/S. +microentreprise/S. +micro-entreprise/S. +microévolution/S. +microfaune/S. +microfibre/S. +microfibrée/F. +microfibrille/S. +microfiche/S. +microfilm/S. +microfilmer/a0p+ +microfiltration/S. +microfiltre/S. +microfinance/S. +microfissure/S. +microflore/S. +microfluidique/S. +microfluidique/S. +microfonction/S. +microformat/S. +microglobuline/S. +microglossaire/S. +microgranite/S. +micrographie/S. +micrographique/S. +microgravité/S. +microgrenue/F. +microhistoire/S. +microhistorique/S. +micro-informatique/S. +micro-informatique/S. +micro-instruction/S. +micro-irrigation/S. +microkyste/S. +microlangage/S. +microlentille/S. +microlite/S. +microlithe/S. +microlithique/S. +microlitique/S. +microlocale/W. +microlocalement +microlocalisée/F. +micrologiciel/S. +micromachine/S. +micromanipulateur/S. +micromanipulation/S. +micromécanique/S. +micromélange/S. +micromélangeage/S. +micromélie/S. +micrométéorite/S. +micrométrie/S. +micrométrique/S. +micrométriquement +microminiaturisation/S. +micromonde/S. +micromoteur/S. +micromutation/S. +micron/S. +micronésienne/F. +micronisation/S. +microniser/a0p+ +micronoyau/X. +micronucléus +micronutriment/S. +micro-ondable/S. +micro-onde/S. +micro-ondes +micro-ordinateur/S. +micro-ordre/S. +micro-organisme/S. +micropaiement/S. +micropaléontologie/S. +microparti/S. +microparticule/S. +micropénis +micropesanteur/S. +microphage/S. +microphage/S. +microphagie/S. +microphone/S. +microphonique/S. +microphotographie/S. +microphysique/S. +micropilule/S. +microplaquette/S. +micropli/S. +microplissement/S. +microporeuse/W. +microprocesseur/S. +microprogrammation/S. +microprogramme/S. +microprogrammée/F. +micropropagation/S. +micropyle/S. +microröntgen/S. +microsatellite/S. +micros-casques +microscope/S. +microscopie/S. +microscopique/S. +microscopiquement +micros-cravates +microséisme/S. +microsillon/S. +microsociété/S. +microsociologie/S. +microsociologique/S. +microsomale/W. +microsomatie/S. +microsome/S. +microsomiale/W. +microsonde/S. +microsphère/S. +microsporange/S. +microspore/S. +micros-trottoirs +microstructure/S. +microsystème/S. +microtechnologie/S. +microtome/S. +microtonale/F. +microtracteur/S. +microtransaction/S. +microtraumatisme/S. +micro-trottoir +microtubule/S. +microvillosité/S. +microzoaire/S. +miction/S. +mictionnelle/F. +middleware/S. +mi-décembre +midi/S. +midinette/S. +mi-distance +midship/S. +midshipman/A. +mie/S. +miel/S. +miellat/S. +miellée/F. +miellée/S. +miellerie/S. +mielleuse/W. +mielleusement +mienne/F. +miette/S. +mieux +mieux-disante/F. +mieux-être +mieux-vivre +mièvre/S. +mièvrement +mièvrerie/S. +mi-fer +mi-février +mi-fin/S. +migmatique/S. +migmatite/S. +mignarde/F. +mignardement +mignarder/a0p+ +mignardise/S. +mignonne/F. +mignonnement +mignonnerie/S. +mignonnet/S. +mignonnette/F. +mignonnette/S. +mignoter/a0p+ +migraine/S. +migraineuse/W. +migrante/F. +migration/S. +migratoire/S. +migratrice/F. +migrer/a0p. +mihrab/S. +mi-jambe +mi-janvier +mijaurée/S. +mijoler/a0p. +mijotage/S. +mijoter/a0p+ +mijoteuse/S. +mi-juillet +mi-juin +mikado/S. +mil +mil/S. +milady/A. +milan/S. +milanaise/F. +mildiou/S. +mildiousée/F. +mile/S. +miliaire/S. +miliaire/S. +milice/S. +milicienne/F. +milieu/X. +militaire/S. +militairement +militance/S. +militante/F. +militantisme/S. +militari +militarisation/S. +militariser/a0p+ +militarisme/S. +militariste/S. +militaro-économique/S. +militaro-industrielle/F. +militer/a0p. +milk-bar/S. +milk-shake/S. +millage/S. +millas +millasse/S. +mille +mille/S. +mille-feuille/S. +mille-fleurs +millénaire/S. +millénale/W. +millénarisme/S. +millénariste/S. +millénium/S. +mille-pattes +millepertuis +mille-pertuis +millépore/S. +milleraies +mille-raies +millerandage/S. +millerandée/F. +millésimale/W. +millésime/S. +millésimer/a0p+ +millet/S. +milliaire/S. +milliaire/S. +milliampèremètre/S. +milliard/S. +milliardaire/S. +milliardième/S. +milliasse/S. +millibar/S. +millième/S. +millier/S. +milligrade/S. +millime/S. +millimétrée/F. +millimétrique/S. +millimicron/S. +million/S. +millionième/S. +millionnaire/S. +milliröntgen/S. +millithermie/S. +milord/S. +milouin/S. +mi-lourde/F. +mi-mai +mi-mars +mime/S. +mimer/a0p+ +mimesis +mimétique/S. +mimétiquement +mimétisme/S. +mimi/S. +mimine/S. +mimique/S. +mimivirus +mimodrame/S. +mimographe/S. +mimolette/S. +mi-mollet +mimologie/S. +mimosa/S. +mimosacée/S. +mimosée/S. +mimosée/S. +min/S. +min/||-- +minable/S. +minablement +minage/S. +minahouet/S. +minarchie/S. +minarchisme/S. +minarchiste/S. +minaret/S. +minarine/S. +minauder/a0p. +minauderie/S. +minaudière/F. +minbar/S. +mince/S. +minceur/S. +mincir/f0p. +mine/S. +miner/a0p+ +minerai/S. +minérale/W. +minéralier/S. +minéralier-pétrolier/S. +minéraliers-pétroliers +minéralisable/S. +minéralisante/F. +minéralisation/S. +minéralisatrice/F. +minéraliser/a0p+ +minéralocorticoïde/S. +minéralocorticoïde/S. +minéralogie/S. +minéralogique/S. +minéralogiquement +minéralogiste/S. +minéralurgie/S. +minérographie/S. +minerval/S. +minerve/S. +minerviste/S. +minestrone/S. +minette/F. +mineure/F. +mineuse/S. +mini/S. +miniature/S. +miniaturer/a0p+ +miniaturisation/S. +miniaturiser/a0p+ +miniaturiste/S. +minibar/S. +minibus +minicar/S. +minicassette/S. +mini-cassette/S. +minichaîne/S. +mini-chaîne/S. +minidisque/S. +minière/F. +minification/S. +minifier/a0p+ +minigolf/S. +mini-golf/S. +minijupe/S. +mini-jupe/S. +minima +minima/S. +minimale/W. +minimalement +minimalisme/S. +minimaliste/S. +minimalité/S. +minime/S. +minimement +minimessage/S. +mini-message/S. +minimex +minimexée/F. +minimisante/F. +minimisation/S. +minimiser/a0p+ +minimum/S. +minimum/S. +mini-ordinateur/S. +minipilule/S. +mini-pilule/S. +minisatellite/S. +mini-satellite/S. +mini-série/S. +minispace/S. +ministère/S. +ministériat/S. +ministérielle/F. +ministrable/S. +ministre/S. +ministre-président +ministre-présidente +ministres-présidentes +ministres-présidents +minitel/S. +minitéliste/S. +minium/S. +minivague/S. +minnesang/S. +minnesinger/S. +minoenne/F. +minois +minon/S. +minorante/F. +minoration/S. +minorative/F. +minorer/a0p+ +minoritaire/S. +minoritairement +minorité/S. +minot/S. +minotaure/S. +minoterie/S. +minotière/F. +minotte/F. +minou/S. +mi-novembre +minuit/S. +minus +minuscule/S. +minusculité/S. +minutage/S. +minutaire/S. +minute/S. +minuter/a0p+ +minuterie/S. +minuteur/S. +minutie/S. +minutier/S. +minutieuse/W. +minutieusement +miocène/S. +miocène/S. +mioche/S. +mi-octobre +mi-partie/F. +miquelet/S. +mir/S. +mirabelle/S. +mirabellier/S. +mirabilis +miracidium/S. +miracle/S. +miraculée/F. +miraculeuse/W. +miraculeusement +mirador/S. +mirage/S. +miraillée/F. +mirbane/S. +mire/S. +mire-œufs +mirepoix +mirepoix +mirer/a0p+ +mirettes +mireuse/F. +mirifique/S. +mirifiquement +mirliflor/S. +mirliflore/S. +mirliton/S. +mirmillon/S. +miro/S. +mirobolante/F. +mirodrome/S. +miroir/S. +miroitante/F. +miroitée/F. +miroitement/S. +miroiter/a0p. +miroiterie/S. +miroitière/F. +mironton/S. +miroton/S. +misaine/S. +misandre/S. +misandrie/S. +misanthrope/S. +misanthropie/S. +misanthropique/S. +miscellanées +miscibilité/S. +miscible/S. +mise/S. +mi-septembre +miser/a0p+ +misérabilisme/S. +misérabiliste/S. +misérable/S. +misérablement +misère/S. +misérer/c0p. +miserere +miséréré/S. +miséreuse/W. +miséricorde/S. +miséricordieuse/W. +miséricordieusement +miso/S. +misogyne/S. +misogynie/S. +misologie/S. +misonéisme/S. +misonéiste/S. +mispickel/S. +miss/A. +missel/S. +missile/S. +missilière/F. +mission/S. +missionnaire/S. +missionnariat/S. +missionner/a0p+ +missive/S. +mistelle/S. +mistigri/S. +mistonne/F. +mistoufle/S. +mistral/S. +mitage/S. +mitaine/S. +mitan/S. +mitard/S. +mitarder +mite/S. +mi-temps +miter/a0p+ +miteuse/W. +miteusement +mithraïsme/S. +mithriacisme/S. +mithriaque/S. +mithridatisation/S. +mithridatiser/a0p+ +mithridatisme/S. +mitigation/S. +mitiger/a0p+ +mitigeur/S. +mitochondriale/W. +mitochondrie/S. +miton/S. +mitonner/a0p+ +mitose/S. +mitotique/S. +mitoyenne/F. +mitoyenneté/S. +mitraillade/S. +mitraillage/S. +mitraille/S. +mitrailler/a0p+ +mitraillette/S. +mitrailleuse/F. +mitrale/W. +mitre/S. +mitrée/F. +mitron/S. +mi-voix +mix +mixage/S. +mixer/S. +mixer/a0p+ +mixeuse/F. +mixité/S. +mixologie/S. +mixolydienne/F. +mixte/S. +mixte/S. +mixtiligne/S. +mixtion/S. +mixtionner/a0p+ +mixture/S. +mloukhiya/S. +mmCE +mmHg/||-- +mmm +mnème/S. +mnémonique/S. +mnémoniquement +mnémotechnie/S. +mnémotechnique/S. +mnémotechnique/S. +mnésique/S. +moabite/S. +mob/S. +mobile/S. +mobile/S. +mobilier/S. +mobilière/F. +mobilisable/S. +mobilisante/F. +mobilisation/S. +mobilisatrice/F. +mobiliser/a0p+ +mobilisme/S. +mobiliste/S. +mobilitaire/S. +mobilité/S. +mobilophone/S. +mobilophonie/S. +mobinaute/S. +moblot/S. +mobutisme/S. +mobylette/S. +mocassin/S. +mocharde/F. +moche/S. +mocheté/S. +moco/S. +modale/W. +modalisation/S. +modalisatrice/F. +modalisme/S. +modalité/S. +mode/S. +modelable/S. +modelage/S. +modelante/F. +modèle/S. +modeler/b0p+ +modeleuse/F. +modélisable/S. +modélisation/S. +modélisatrice/F. +modéliser/a0p+ +modélisme/S. +modéliste/S. +modem/S. +modénature/S. +moder/S. +modérabilité/S. +modérable/S. +modérantisme/S. +modérantiste/S. +modération/S. +moderato +moderato +moderato/S. +modératrice/F. +modérée/F. +modérément +modérer/c0p+ +moderne/S. +modernement +modernisation/S. +modernisatrice/F. +moderniser/a0p+ +modernisme/S. +modernissime/S. +moderniste/S. +modernité/S. +modeste/S. +modestement +modestie/S. +modicité/S. +modif/S. +modifiable/S. +modifiante/F. +modification/S. +modificative/F. +modificatrice/F. +modifier/a0p+ +modillon/S. +modique/S. +modiquement +modiste/S. +modo +modulable/S. +modulaire/S. +modulante/F. +modularisation/S. +modularité/S. +modulation/S. +modulatrice/F. +module/S. +moduler/a0p+ +modulo/S. +modulor/S. +modus +moelle/S. +moelleuse/W. +moelleusement +moellon/S. +moellonnage/S. +moere/S. +moëre/S. +mœurs +mofette/S. +mofler/a0p+ +moghole/F. +mohair/S. +mohawk/S. +moi +moie/S. +moignon/S. +moi-même +moindre/S. +moindrement +moine/S. +moineau/X. +moinerie/S. +moinillon/S. +moins +moins +moins-disante/F. +moins-perçu/S. +moins-que-rien +moinssoyer/a0p+ +moins-value/S. +moirage/S. +moire/S. +moiré/S. +moirer/a0p+ +moireuse/F. +moirure/S. +mois +moise/S. +moïse/S. +moiser/a0p+ +moisi/S. +moisir/f0p+ +moisissure/S. +moissine/S. +moisson/S. +moissonnage/S. +moissonner/a0p+ +moissonneuse/F. +moissonneuse-batteuse +moissonneuse-lieuse +moissonneuses-batteuses +moissonneuses-lieuses +moite/S. +moiter/a0p. +moiteur/S. +moitié/S. +moitié-moitié +moitir/f0p+ +mojito/S. +moka/S. +moksha/S. +mol/U.||-- +molaire/S. +môlaire/S. +molaire/S. +molalité/S. +molarité/S. +molasse/S. +moldave/S. +môle/S. +mole/Um +moléculaire/S. +moléculairement +molécularité/S. +molécule/S. +molène/S. +moleskine/S. +molestation/S. +molester/a0p+ +moletage/S. +moleter/d0p+ +molette/S. +molière/S. +moliéresque/S. +molinisme/S. +moliniste/S. +molinosisme/S. +molinosiste/S. +mollah/S. +mollarchie/S. +mollard/S. +mollarder/a0p+ +mollasse/S. +mollasserie/S. +mollassonne/F. +molle/F. +mollement +mollesse/S. +mollet/S. +molletière/S. +molleton/S. +molletonner/a0p+ +molletonneuse/W. +mollette/F. +mollir/f0p+ +mollisol/S. +mollo +molluscum/S. +mollusque/S. +moloch/S. +molosse/S. +molossoïde/S. +molossoïde/S. +moly/S. +molybdate/S. +molybdène/S. +molybdénite/S. +molybdique/S. +molysmologie/S. +mombin/S. +môme/S. +moment/S. +momentanée/F. +momentanément +momerie/S. +momie/S. +momification/S. +momifier/a0p+ +momordique/S. +mon +monacale/W. +monachisme/S. +monade/S. +monadelphe/S. +monadique/S. +monadisme/S. +monadiste/S. +monadologie/S. +monandre/S. +monarchie/S. +monarchique/S. +monarchiquement +monarchisme/S. +monarchiste/S. +monarde/S. +monarque/S. +monastère/S. +monastique/S. +monaurale/W. +monazite/S. +monbazillac/S. +monceau/X. +mondaine/F. +mondainement +mondanité/S. +monde/S. +monder/a0p+ +mondiale/W. +mondialement +mondialisation/S. +mondialiser/a0p+ +mondialisme/S. +mondialiste/S. +mondialité/S. +mondiovision/S. +mondovision/S. +monégasque/S. +monel/S. +monème/S. +monétaire/S. +monétairement +monétarisation/S. +monétariser/a0p+ +monétarisme/S. +monétariste/S. +monétique/S. +monétique/S. +monétisable/S. +monétisation/S. +monétiser/a0p+ +mongole/F. +mongolienne/F. +mongolique/S. +mongolisme/S. +mongoliste/S. +mongoloïde/S. +moniale/W. +monilia/S. +monisme/S. +moniste/S. +monition/S. +monitoire/S. +monitoire/S. +monitor/S. +monitorage/S. +monitorat/S. +monitorer/a0p+ +monitoring/S. +monitrice/F. +monnaie/S. +monnayable/S. +monnayage/S. +monnayer/a0p+ +monnayeuse/F. +mono/S. +monoacide/S. +monoamine/S. +monoarthrite/S. +monoatomique/S. +monobasique/S. +monobloc/S. +monobloc/S. +monobrin/S. +monocalcique/S. +monocamérale/W. +monocaméralisme/S. +monocamérisme/S. +monocarboxylique/S. +monocarte/S. +monocaténaire/S. +monocellulaire/S. +monochasse/S. +monochromateur/S. +monochromatique/S. +monochrome/S. +monochromie/S. +monocinétique/S. +monocistronique/S. +monocle/S. +monoclinale/W. +monoclinique/S. +monoclonale/W. +monocœur/S. +monocœur/S. +monocomposante/F. +monocoque/S. +monocoque/S. +monocorde/S. +monocorde/S. +monocorps +monocorps +monocotylédone/S. +monocouche/S. +monocratie/S. +monocristal/X. +monocristalline/F. +monoculaire/S. +monoculture/S. +monoculturelle/F. +monocycle/S. +monocyclique/S. +monocylindre/S. +monocylindrique/S. +monocyte/S. +monodie/S. +monodimensionnelle/F. +monodique/S. +monodirectionnelle/F. +monodisciplinaire/S. +monodromie/S. +monodromique/S. +monœcie/S. +monoflorale/W. +monofocale/W. +monofonctionnelle/F. +monogame/S. +monogamie/S. +monogamique/S. +monogastrique/S. +monogène/S. +monogénique/S. +monogénisme/S. +monograde/S. +monogramme/S. +monogrammiste/S. +monographie/S. +monographique/S. +monoïde/S. +monoïdéique/S. +monoïdéisme/S. +monoïque/S. +monoisotopique/S. +monokini/S. +monolingue/S. +monolinguisme/S. +monolithe/S. +monolithe/S. +monolithique/S. +monolithisme/S. +monologue/S. +monologuer/a0p. +monologueuse/F. +monologuiste/S. +monomane/S. +monomaniaque/S. +monomanie/S. +monôme/S. +monomère/S. +monomère/S. +monomérique/S. +monométallisme/S. +monométalliste/S. +monométhylmercure/S. +monomètre/S. +monomode/S. +monomoléculaire/S. +monomorphisme/S. +monomoteur/S. +monomotrice/F. +mononitration/S. +mononucléaire/S. +mononucléaire/S. +mononucléée/F. +mononucléidique/S. +mononucléose/S. +monoparentale/W. +monoparentalité/S. +monopartisme/S. +monopétale/S. +monophasée/F. +monophasique/S. +monophonie/S. +monophonique/S. +monophosphate/S. +monophotonique/S. +monophtongue/S. +monophylétique/S. +monophyodonte/S. +monophysisme/S. +monophysite/S. +monoplace/S. +monoplan/S. +monoplégie/S. +monopolaire/S. +monopole/S. +monopôle/S. +monopoleuse/F. +monopolisante/F. +monopolisation/S. +monopolisatrice/F. +monopoliser/a0p+ +monopoliste/S. +monopolistique/S. +monoposte/S. +monoprix +monoprocesseur/S. +monoprocesseur/S. +monopsone/S. +monoptère/S. +monoptère/S. +monorail/S. +monorail/S. +monorime/S. +monorime/S. +monosaccharide/S. +monosémie/S. +monosémique/S. +monosépale/S. +monosilane/S. +monoski/S. +monoskieuse/F. +monosodique/S. +monosomie/S. +monospace/S. +monospécifique/S. +monosperme/S. +monostable/S. +monostiche/S. +monostique/S. +monostyle/S. +monostyle/S. +monosulfite/S. +monosyllabe/S. +monosyllabe/S. +monosyllabique/S. +monosyllabisme/S. +monotâche/S. +monoterpène/S. +monothéique/S. +monothéisme/S. +monothéiste/S. +monothérapie/S. +monotone/S. +monotonement +monotonicité/S. +monotonie/S. +monotonique/S. +monotrace/S. +monotrème/S. +monotube/S. +monotube/S. +monotubulaire/S. +monotype/S. +monovalente/F. +monovariable/S. +monovariante/F. +monoxène/S. +monoxyde/S. +monoxyle/S. +monozygote/S. +monseigneur +monseigneur +monsieur +monsignor/S. +monsignore/I. +monstrance/S. +monstration/S. +monstre/S. +monstresse/S. +monstrueuse/W. +monstrueusement +monstruosité/S. +mont/S. +montable/S. +montage/S. +montagnarde/F. +montagne/S. +montagnette/S. +montagneuse/W. +montaison/S. +montalbanaise/F. +montanisme/S. +montaniste/S. +montant/S. +montante/F. +montbéliarde/F. +mont-blanc +mont-de-piété +monte/S. +monte-charge +montée/S. +monte-fût +monte-glace +monte-meuble/S. +monte-meuble/S. +monte-meubles +monténégrine/F. +monte-pente +monte-plats +monter/a0p+ +monte-sacs +monteuse/F. +montgolfière/S. +monticole/S. +monticole/S. +monticule/S. +mont-joie +montmartroise/F. +montmorency/S. +montmorillonite/S. +montoir/S. +montoise/F. +montpelliéraine/F. +montrable/S. +montre/S. +montréalaise/F. +montre-bracelet +montrer/a0p+ +montres-bracelets +montreuse/F. +monts-blancs +monts-de-piété +monts-joie +montueuse/W. +monture/S. +monument/S. +monumentale/W. +monumentalité/S. +mooré +moquer/a0p+ +moquerie/S. +moquette/S. +moquetter/a0p+ +moquettiste/S. +moqueuse/F. +moqueusement +moracée/S. +moraille/S. +moraillon/S. +moraine/S. +morainique/S. +morale/W. +moralement +moralisante/F. +moralisation/S. +moralisatrice/F. +moraliser/a0p+ +moraliseuse/F. +moralisme/S. +moraliste/S. +moralité/S. +morasse/S. +moratoire/S. +moratoire/S. +moratorium/S. +morbide/S. +morbidement +morbidesse/S. +morbidité/S. +morbier/S. +morbifique/S. +morbihannaise/F. +morbilleuse/W. +morbilliforme/S. +morbleu +morceau/X. +morcelable/S. +morceler/d0p+ +morcellement/S. +mordache/S. +mordacité/S. +mordançage/S. +mordancer/a0p+ +mordante/F. +mordeuse/F. +mordicante/F. +mordicus +mordillage/S. +mordillement/S. +mordiller/a0p+ +mordorer/a0p+ +mordorure/S. +mordre/tA +mordue/F. +more/S. +moreau/X. +morelle/S. +morène/S. +moresque/S. +morfale/F. +morfaler/a0p. +morfil/S. +morfiler/a0p+ +morfler/a0p+ +morfondre/tEq+ +morfondue/F. +morganatique/S. +morganatiquement +morganite/S. +morgeline/S. +morgue/S. +morguenne +morguienne +moribonde/F. +moricaude/F. +morigéner/c0p+ +morille/S. +morillon/S. +moringa/S. +morio/S. +morion/S. +mormone/F. +mormonisme/S. +morna/S. +morne/S. +mornée/F. +mornement +mornifle/S. +mornifler/a0p+ +morose/S. +morosité/S. +morphe/S. +morphématique/S. +morphème/S. +morphine/S. +morphing/S. +morphinique/S. +morphinisme/S. +morphinomane/S. +morphinomanie/S. +morphisme/S. +morphogène/S. +morphogène/S. +morphogenèse/S. +morphogénétique/S. +morphogénique/S. +morphologie/S. +morphologique/S. +morphologiquement +morphologiste/S. +morphologue/S. +morphophonologie/S. +morphophonologique/S. +morphopsychologie/S. +morphosyntaxe/S. +morphosyntaxique/S. +morpion/S. +mors +morse/S. +morsure/S. +mort/S. +mortadelle/S. +mortaisage/S. +mortaise/S. +mortaiser/a0p+ +mortaiseuse/F. +mortalité/S. +mort-aux-rats +morte/F. +morte-eau +mortelle/F. +mortellement +mortem +morte-saison +mortes-eaux +mortes-saisons +mortier/S. +mortifère/S. +mortifiante/F. +mortification/S. +mortifier/a0p+ +mortinaissance/S. +mortinatalité/S. +mort-née/F. +morts-vivants +mortuaire/S. +mort-vivant +morue/S. +morula/S. +morutier/S. +morutière/F. +morve/S. +morveuse/W. +mosaïculture/S. +mosaïque/S. +mosaïque/S. +mosaïquée/F. +mosaïsme/S. +mosaïste/S. +mosane/F. +mosasaure/S. +moscoutaire/S. +moscovite/S. +moscovium/S. +mosellane/F. +mosette/S. +mosquée/S. +mossi/S. +mot/S. +motacillidé/S. +motamoter/a0p. +motarde/F. +mot-clé +mot-clef +motel/S. +motelle/S. +motet/S. +motif/S. +motilité/S. +motion/S. +motionner/a0p. +motivante/F. +motivation/S. +motivationnelle/F. +motivatrice/F. +motiver/a0p+ +moto/S. +motobasculeur/S. +motobineuse/S. +motociste/S. +motocross +moto-cross +motoculteur/S. +motoculture/S. +motocycle/S. +motocyclette/S. +motocyclisme/S. +motocycliste/S. +motofaucheuse/S. +motogodille/S. +motomarine/S. +motonautique/S. +motonautisme/S. +motoneige/S. +motoneigiste/S. +motoneurone/S. +motopompe/S. +motopropulseur/S. +motoréducteur/S. +motorisable/S. +motorisation/S. +motoriser/a0p+ +motoriste/S. +motorship/S. +motoski/S. +mototracteur/S. +motovariateur/S. +motoventilateur/S. +motrice/F. +motricité/S. +mots-clefs +mots-clés +mots-croisiste/S. +mots-valises +motte/S. +motter/a0p+ +motteux +motus +mot-valise +mouais +mouchage/S. +moucharabieh/S. +mouchardage/S. +moucharde/F. +moucharder/a0p+ +mouche/S. +moucher/a0p+ +moucherolle/S. +moucheron/S. +moucheronner/a0p. +mouchet/S. +mouchetage/S. +moucheter/d0p+ +mouchetis +moucheture/S. +moucheuse/F. +mouchoir/S. +mouchure/S. +mouclade/S. +moudjahid +moudjahidin +moudre/xP +moue/S. +mouette/S. +mouetter/a0p. +moufeter +moufette/S. +mouffette/S. +mouflage/S. +moufle/S. +moufler/a0p+ +mouflette/F. +mouflon/S. +moufter/a0p. +moui +mouillabilité/S. +mouillable/S. +mouillage/S. +mouillante/F. +mouille/S. +mouillement/S. +mouiller/a0p+ +mouillère/S. +mouillette/S. +mouilleur/S. +mouilloir/S. +mouillon/S. +mouillure/S. +mouise/S. +moujik/S. +moujingue/S. +moukère/S. +moulage/S. +moulante/F. +moule/S. +mouler/a0p+ +mouleuse/F. +moulière/S. +moulin/S. +moulinage/S. +mouliner/a0p+ +moulinet/S. +moulinette/S. +moulineuse/F. +moulinière/F. +mouliste/S. +moult +moulure/S. +moulurer/a0p+ +moumoute/S. +mouna/S. +mouquère/S. +mourante/F. +mouride/S. +mouridisme/S. +mourir/iP +mouroir/S. +mouron/S. +mouronner/a0p+ +mourre/S. +mouscaille/S. +mousmé/S. +mousquet/S. +mousquetade/S. +mousquetaire/S. +mousqueterie/S. +mousqueton/S. +moussage/S. +moussaillon/S. +moussaka/S. +moussante/F. +mousse/S. +mousseline/S. +mousser/a0p. +mousseron/S. +mousseuse/W. +moussoir/S. +mousson/S. +moussue/F. +moustache/S. +moustachue/F. +moustérienne/F. +moustiquaire/S. +moustique/S. +moût/S. +moutard/S. +moutarde/S. +moutardière/F. +moutier/S. +mouton/S. +moutonnante/F. +moutonnée/F. +moutonnement/S. +moutonner/a0p. +moutonnerie/S. +moutonneuse/W. +moutonnière/F. +mouture/S. +mouvance/S. +mouvante/F. +mouvement/S. +mouvementer/a0p+ +mouver/a0p+ +mouvoir/pHpI +moviola/S. +moxa/S. +moxibustion/S. +moyée/F. +moyen-âge +moyenâgeuse/W. +moyen-courrier/S. +moyennabilité/S. +moyennable/S. +moyennage/S. +moyenne/F. +moyennement +moyenner/a0p+ +moyennisation/S. +moyen-orientale/W. +moyette/S. +moyeu/X. +mozabite/S. +mozambicaine/F. +mozarabe/S. +mozette/S. +mozzarella/S. +mozzarelle/S. +mth/||-- +mu +muance/S. +mucher/a0p+ +mucilage/S. +mucilagineuse/W. +mucine/S. +mucite/S. +mucoïde/S. +mucolytique/S. +mucolytique/S. +mucopolysaccharide/S. +mucor/S. +mucoracée/S. +mucosité/S. +mucoviscidose/S. +mucoviscidosique/S. +mucron/S. +mucronée/F. +mucus +mudéjare/F. +mudrâ +mudra/S. +mue/S. +muer/a0p+ +muesli/S. +muette/F. +muettement +muezzin/S. +muffin/S. +mufle/S. +muflerie/S. +muflier/S. +mufti/S. +mug/S. +muge/S. +mugir/f0p+ +mugissante/F. +mugissement/S. +muguet/S. +mugueter/d0p+ +muid/S. +mularde/F. +mulassière/F. +mulâtresse/F. +mulch/S. +mule/S. +mule-jenny/S. +mulet/S. +muleta/S. +muletière/F. +mulette/S. +mull/S. +mullite/S. +mulon/S. +mulot/S. +muloter/a0p. +mulsion/S. +multi +multibande/S. +multibras +multibrin/S. +multibroche/S. +multicanale/W. +multicatégorielle/F. +multi-catégorielle/F. +multicaténaire/S. +multicaule/S. +multicausale/W. +multicellulaire/S. +multicentenaire/S. +multi-centenaire/S. +multicentrique/S. +multicœur/S. +multicœur/S. +multicolinéarité/S. +multicolore/S. +multicomposant/S. +multicomposante/F. +multicompte/S. +multicomptes +multiconductrice/F. +multiconfessionnelle/F. +multicoque/S. +multicouche/S. +multicritère/S. +multiculturalisme/S. +multiculturaliste/S. +multiculturalité/S. +multiculturelle/F. +multidécennale/W. +multidevise/S. +multidiffusion/S. +multidimensionnalité/S. +multidimensionnelle/F. +multidirectionnalité/S. +multidirectionnelle/F. +multidisciplinaire/S. +multidisciplinarité/S. +multiethnique/S. +multi-ethnique/S. +multifactorielle/F. +multifamiliale/W. +multifilaire/S. +multiflore/S. +multifonction/S. +multifonctionnalité/S. +multifonctionnelle/F. +multiforme/S. +multifréquence/S. +multifréquences +multigénérationnelle/F. +multigénique/S. +multigrade/S. +multigraduée/F. +multigraphe/S. +multihomogène/S. +multi-instrumentiste/S. +multijoueur/S. +multijoueurs +multilatérale/W. +multilatéralement +multilatéralisme/S. +multilatération/S. +multilinéaire/S. +multilinéarité/S. +multilingue/S. +multilinguisme/S. +multilobée/F. +multiloculaire/S. +multimédia +multimédia/S. +multimètre/S. +multimillénaire/S. +multimilliardaire/S. +multimillionnaire/S. +multimodale/W. +multimode/S. +multimoteur/S. +multinationale/W. +multinationalisation/S. +multinomiale/W. +multinucléée/F. +multipare/S. +multiparité/S. +multipartisme/S. +multipartite/S. +multiphysique/S. +multiplan/S. +multiplate-forme/S. +multiple/S. +multiple/S. +multiplement +multiplet/S. +multiplex +multiplex +multiplexage/S. +multiplexe/S. +multiplexer/a0p+ +multiplexeur/S. +multipliable/S. +multiplicande/S. +multiplicateur/S. +multiplication/S. +multiplicative/F. +multiplicativement +multiplicativité/S. +multiplicatrice/F. +multiplicité/S. +multiplier/a0p+ +multiplieur/S. +multipoint/S. +multipolaire/S. +multipolarité/S. +multipôle/S. +multiposte/S. +multiprise/S. +multiprise/S. +multiprocesseur/S. +multiprocesseur/S. +multiprogrammation/S. +multipropriété/S. +multiraciale/W. +multirécidiviste/S. +multirésistance/S. +multirésistante/F. +multirisque/S. +multisalle/S. +multiscalaire/S. +multisectorielle/F. +multiséculaire/S. +multisoc/S. +multisommabilité/S. +multisommable/S. +multispectrale/W. +multistandard/S. +multisupport/S. +multisupport/S. +multitâche/S. +multitraitement/S. +multitube/S. +multitube/S. +multitubulaire/S. +multitude/S. +multitudinaire/S. +multiusage/S. +multi-usage/S. +multi-utilisateur/S. +multivalente/F. +multivaluée/F. +multivariable/S. +multivariée/F. +multivers +multivibrateur/S. +multivoie/S. +multivoie/S. +multivoque/S. +munichoise/F. +municipale/W. +municipales +municipalisation/S. +municipaliser/a0p+ +municipalisme/S. +municipaliste/S. +municipalité/S. +municipe/S. +munificence/S. +munificente/F. +munir/f0p+ +munition/S. +munitionnaire/S. +munitionner/a0p+ +munster/S. +muntjac/S. +muon/S. +muonique/S. +muonium/S. +muphti/S. +muqarnas +muqueuse/S. +muqueuse/W. +mur/S. +murage/S. +muraille/S. +murailler/a0p+ +murale/W. +muralisme/S. +muraliste/S. +mûre/F. +mûre/S. +mûrement +murène/S. +murer/a0p+ +muret/S. +muretin/S. +murette/S. +murex +murge/S. +murger/a0p+ +muriate/S. +muriatique/S. +mûrie/F. +mûrier/S. +murine/F. +mûrir/f0p+ +mûrissage/S. +murissante/F. +mûrissante/F. +mûrissement/S. +mûrisserie/S. +murmel/S. +murmurante/F. +murmure/S. +murmurer/a0p+ +mûron/S. +murrhine/F. +musacée/S. +musagète/S. +musaraigne/S. +musarde/F. +musarder/a0p. +musardise/S. +musc/S. +muscade/S. +muscadelle/S. +muscadet/S. +muscadier/S. +muscadin/S. +muscadine/S. +muscardine/F. +muscari/S. +muscarine/S. +muscarinique/S. +muscat/S. +muscidé/S. +muscinale/W. +muscinée/S. +muscle/S. +muscler/a0p+ +muscovite/S. +musculaire/S. +musculairement +musculation/S. +musculature/S. +musculeuse/W. +musculo-squelettique/S. +musculotrope/S. +musculotrope/S. +muse/S. +muséale/W. +museau/X. +musée/S. +muséification/S. +muséifier/a0p+ +museler/d0p+ +muselet/S. +muselière/S. +musellement/S. +muséographe/S. +muséographie/S. +muséographique/S. +muséologie/S. +muséologique/S. +muséologue/S. +muser/a0p+ +muserolle/S. +musette/S. +muséum/S. +museuse/F. +musicale/W. +musicalement +musicaliser/a0p+ +musicalité/S. +music-hall/S. +musicienne/F. +musicographe/S. +musicographie/S. +musicographique/S. +musicologie/S. +musicologique/S. +musicologue/S. +musicos +musicothérapie/S. +musique/S. +musiquer/a0p+ +musiquette/S. +musoir/S. +musquer/a0p+ +musse/S. +musser/a0p+ +mussitation/S. +mussive/F. +mussolinienne/F. +must/S. +mustang/S. +mustélidé/S. +musulmane/F. +mutabilité/S. +mutable/S. +mutage/S. +mutagène/S. +mutagène/S. +mutagenèse/S. +mutandis +mutante/F. +mutateur/S. +mutation/S. +mutationnisme/S. +mutationniste/S. +mutatis +muter/a0p+ +mutilante/F. +mutilation/S. +mutilatrice/F. +mutilée/F. +mutiler/a0p+ +mutine/F. +mutinement +mutiner/a0p+ +mutinerie/S. +mutique/S. +mutisme/S. +mutité/S. +mutualisation/S. +mutualiser/a0p+ +mutualisme/S. +mutualiste/S. +mutualité/S. +mutuelle/F. +mutuellement +mutuellisme/S. +mutuelliste/S. +mutule/S. +myalgie/S. +myalgique/S. +myase/S. +myasthénie/S. +myasthénique/S. +mycélienne/F. +mycélium/S. +mycénienne/F. +mycète/S. +mycétome/S. +mycobactéricide/S. +mycobactérie/S. +mycoderme/S. +mycodermique/S. +mycologie/S. +mycologique/S. +mycologue/S. +mycophage/S. +mycoplasme/S. +mycorhization/S. +mycorhize/S. +mycorhizienne/F. +mycose/S. +mycosique/S. +mycotoxicologie/S. +mycotoxine/S. +mydriase/S. +mydriatique/S. +mydriatique/S. +mye/S. +myélencéphale/S. +myéline/S. +myélinique/S. +myélinisation/S. +myélinisée/F. +myélite/S. +myéloblaste/S. +myélocyte/S. +myélodysplasique/S. +myélogramme/S. +myélographie/S. +myéloïde/S. +myélome/S. +myélopathie/S. +myélosarcome/S. +myélotoxique/S. +mygale/S. +myiase/S. +myocarde/S. +myocardiopathie/S. +myocardique/S. +myocardite/S. +myoclonie/S. +myocyte/S. +myodésopsie/S. +myofibrille/S. +myofilament/S. +myoglobine/S. +myogramme/S. +myographe/S. +myographie/S. +myologie/S. +myologique/S. +myomatose/S. +myome/S. +myomètre/S. +myopathe/S. +myopathie/S. +myopathique/S. +myope/S. +myopie/S. +myopotame/S. +myosine/S. +myosis +myosite/S. +myosotis +myotatique/S. +myotique/S. +myotique/S. +myotome/S. +myotonie/S. +myotonique/S. +myriade/S. +myriagramme/S. +myriamètre/S. +myriapode/S. +myringoplastie/S. +myriophylle/S. +myrmécologie/S. +myrmécologue/S. +myrmécophage/S. +myrmécophile/S. +myrmidone/F. +myrobolan/S. +myrosine/S. +myroxyle/S. +myroxylon/S. +myrrhe/S. +myrtacée/S. +myrtaie/S. +myrte/S. +myrtiforme/S. +myrtille/S. +myrtillier/S. +mystagogie/S. +mystagogique/S. +mystagogue/S. +myste/S. +mystère/S. +mystérieuse/W. +mystérieusement +mysticète/S. +mysticisme/S. +mysticité/S. +mystico-religieuse/W. +mystifiable/S. +mystifiante/F. +mystification/S. +mystificatrice/F. +mystifier/a0p+ +mystique/S. +mystiquement +mythe/S. +mythification/S. +mythifier/a0p+ +mythique/S. +mytho/S. +mythographe/S. +mythographique/S. +mythologie/S. +mythologique/S. +mythologiquement +mythologue/S. +mythomane/S. +mythomaniaque/S. +mythomanie/S. +mytilicole/S. +mytilicultrice/F. +mytiliculture/S. +mytilotoxine/S. +myxine/S. +myxœdémateuse/W. +myxœdème/S. +myxomatose/S. +myxome/S. +myxomycète/S. +myxovirus +m² +m³ +n +na +naan/S. +nabab/S. +nabatéenne/F. +nabi/S. +nabisme/S. +nabla/S. +nable/S. +nabote/F. +nabuchodonosor/S. +nacarat +nacarat/S. +nacelle/S. +naco/S. +nacre/S. +nacrer/a0p+ +nadir/S. +nævi +nævocarcinome/S. +nævo-carcinome/S. +nævus +nafé/S. +nagaïka/S. +nagari/S. +nagari/S. +nage/S. +nagée/S. +nageoire/S. +nager/a0p+ +nageuse/F. +naguère +nahaïka/S. +nahua/S. +nahuatl/S. +naïadacée/S. +naïade/S. +naine/F. +naira/S. +naissain/S. +naissance/S. +naissante/F. +naisseuse/F. +naître/wR +naïve/F. +naïvement +naïveté/S. +naja/S. +namibienne/F. +namuroise/F. +nana/S. +nanan/S. +nanar/S. +nancéienne/F. +nandou/S. +nandrolone/S. +nanifier/a0p+ +nanisante/F. +nanisme/S. +nanite/S. +nankin/S. +nanobiologie/S. +nanocomposant/S. +nanocristalline/F. +nanoélectronique/S. +nano-électronique/S. +nanoélectronique/S. +nano-électronique/S. +nanofiltration/S. +nanofiltre/S. +nanomachine/S. +nano-machine/S. +nanomatériau/X. +nanométrique/S. +nanoparticule/S. +nano-particule/S. +nanophysique/S. +nanoplancton/S. +nanoréseau/X. +nanorobot/S. +nanoscience/S. +nanoscope/S. +nanoscopie/S. +nanotechnologie/S. +nanotechnologique/S. +nanotube/S. +nansouk/S. +nantaise/F. +nantie/F. +nantir/f0p+ +nantissable/S. +nantissement/S. +naos +napalm/S. +napalmer/a0p+ +napée/S. +napel/S. +naphta/S. +naphtalène/S. +naphtaline/S. +naphte/S. +naphténique/S. +naphtol/S. +napoléon/S. +napoléonienne/F. +napolitaine/F. +nappage/S. +nappe/S. +napper/a0p+ +napperon/S. +napus +narbonnaise/F. +narcéine/S. +narcisse/S. +narcissique/S. +narcissiquement +narcissisme/S. +narco/S. +narcoanalyse/S. +narco-analyse/S. +narcodollar/S. +narcolepsie/S. +narcoleptique/S. +narcose/S. +narcothérapie/S. +narcotine/S. +narcotique/S. +narcotique/S. +narcotrafic/S. +narcotrafiquante/F. +nard/S. +nareuse/W. +narghilé/S. +narghileh/S. +nargue/S. +narguer/a0p+ +nargueuse/F. +narguilé/S. +narine/S. +narquoise/F. +narquoisement +narquoiserie/S. +narrataire/S. +narration/S. +narrative/F. +narrativement +narrativité/S. +narratologie/S. +narratrice/F. +narrer/a0p+ +narthex +narval/S. +nasale/W. +nasalement +nasalisation/S. +nasaliser/a0p+ +nasalité/S. +nasarde/F. +naseau/X. +nashi/S. +nasillarde/F. +nasillement/S. +nasiller/a0p+ +nasilleuse/F. +nasique/S. +nasitort/S. +nasonnement/S. +nasopharynx +nasse/S. +nassérisme/S. +nassériste/S. +nastie/S. +natale/F. +natalement +nataliste/S. +natalité/S. +natation/S. +natatoire/S. +natchaver/a0p. +natel/S. +natice/S. +nation/S. +nationale/W. +nationalement +nationalisable/S. +nationalisation/S. +nationaliser/a0p+ +nationalisme/S. +nationaliste/S. +nationalité/S. +national-socialisme/S. +national-socialiste +nationaux-socialistes +native/F. +nativement +nativisme/S. +nativiste/S. +nativité/S. +natoufien/S. +natoufienne/F. +natrémie/S. +natrium/S. +natrolite/S. +natron/S. +natrum/S. +nattage/S. +natte/S. +natter/a0p+ +nattière/F. +naturalisation/S. +naturaliser/a0p+ +naturalisme/S. +naturaliste/S. +naturalité/S. +nature/S. +naturelle/F. +naturellement +naturisme/S. +naturiste/S. +naturopathe/S. +naturopathie/S. +naucore/S. +naufrage/S. +naufragée/F. +naufrager/a0p. +naufrageuse/F. +naumachie/S. +naupathie/S. +naupathique/S. +nauplius +nauséabonde/F. +nauseam +nausée/S. +nauséeuse/W. +nautile/S. +nautique/S. +nautisme/S. +nautonière/F. +navaja/S. +navajo/S. +navale/F. +navaler +navalisation/S. +navarin/S. +navarque/S. +navarraise/F. +navel/S. +navet/S. +navette/S. +navetteuse/F. +navicert/S. +naviculaire/S. +navicule/S. +navigabilité/S. +navigable/S. +navigante/F. +navigation/S. +navigatrice/F. +naviguer/a0p. +naviplane/S. +navire/S. +navire-atelier +navire-école +navires-ateliers +navires-écoles +navires-usines +navire-usine +navisphère/S. +navrance/S. +navrante/F. +navrement/S. +navrer/a0p+ +navrure/S. +nazaréenne/F. +naze/S. +nazie/F. +nazification/S. +nazillonne/F. +nazir/S. +naziréat/S. +naziréenne/F. +nazisme/S. +ne +néandertalien/S. +néandertalienne/F. +néanmoins +néant/S. +néantisation/S. +néantiser/a0p+ +néantissement/S. +nebka/S. +nébulaire/S. +nébuleuse/W. +nébuleusement +nébulisation/S. +nébuliser/a0p+ +nébuliseur/S. +nébulosité/S. +nec +nécessaire/S. +nécessaire/S. +nécessairement +nécessitante/F. +nécessité/S. +nécessiter/a0p+ +nécessiteuse/W. +neck/S. +nec-plus-ultra +nécro/S. +nécrobie/S. +nécrobiose/S. +nécrologe/S. +nécrologie/S. +nécrologique/S. +nécrologue/S. +nécrolyse/S. +nécromancie/S. +nécromancienne/F. +nécromante/F. +nécrophage/S. +nécrophagie/S. +nécrophile/S. +nécrophilie/S. +nécrophilique/S. +nécrophore/S. +nécropole/S. +nécropsie/S. +nécrosante/F. +nécrose/S. +nécroser/a0p+ +nécrosique/S. +nécrotique/S. +nectaire/S. +nectar/S. +nectarifère/S. +nectarine/S. +nectarivore/S. +necton/S. +néerlandaise/F. +néerlandophone/S. +nef/S. +néfaste/S. +nèfle/S. +néflier/S. +négation/S. +négationnisme/S. +négationniste/S. +négative/F. +négativement +négativisme/S. +négativiste/S. +négativité/S. +négaton/S. +négatoscope/S. +négatrice/F. +négligeable/S. +négligemment +négligence/S. +négligente/F. +négliger/a0p+ +négo/S. +négoce/S. +négociabilité/S. +négociable/S. +négociante/F. +négociation/S. +négociatrice/F. +négocier/a0p+ +nègre/S. +nègre/S. +négrerie/S. +nègrerie/S. +négresse/S. +négrière/F. +négrifier/a0p+ +négrille/S. +négrillonne/F. +négritude/S. +négro/S. +négro-africaine/F. +négroïde/S. +négrophobe/S. +négrophobie/S. +negro-spiritual/S. +néguentropie/S. +néguer/a0p+ +negundo/S. +négundo/S. +négus +neige/S. +neigeoter/a8p. +neiger/a8p. +neigeuse/W. +neiman/S. +nelumbo/S. +nem/S. +némale/S. +némalion/S. +némathelminthe/S. +nématicide/S. +nématicide/S. +nématique/S. +nématoblaste/S. +nématocère/S. +nématocyste/S. +nématode/S. +nématologie/S. +nématomorphe/S. +néné/S. +nénette/S. +nénies +nenni +nénufar/S. +nénuphar/S. +néo/S. +néoblaste/S. +néo-calédonienne/F. +néocapitalisation/S. +néo-capitalisation/S. +néocapitalisme/S. +néo-capitalisme/S. +néocapitaliste/S. +néo-capitaliste/S. +néoceltique/S. +néo-celtique/S. +néoclassicisme/S. +néo-classicisme/S. +néoclassique/S. +néo-classique/S. +néocoloniale/W. +néocolonialisme/S. +néo-colonialisme/S. +néocolonialiste/S. +néo-colonialiste/S. +néocomienne/F. +néocommunisme/S. +néo-communisme/S. +néocommuniste/S. +néo-communiste/S. +néocon/S. +néoconservatisme/S. +néo-conservatisme/S. +néoconservatrice/F. +néo-conservatrice/F. +néocortex +néocorticale/W. +néocriticisme/S. +néo-criticisme/S. +néocriticiste/S. +néo-criticiste/S. +néodarwinienne/F. +néodarwinisme/S. +néo-darwinisme/S. +néodyme/S. +néofascisme/S. +néo-fascisme/S. +néofasciste/S. +néo-fasciste/S. +néoformation/S. +néoformée/F. +néogène/S. +néoglucogenèse/S. +néogothique/S. +néo-gothique/S. +néogrammairienne/F. +néo-grammairienne/F. +néogrecque/F. +néo-grecque/F. +néo-hébridaise/F. +néo-impressionnisme/S. +néo-impressionniste/S. +néokantisme/S. +néo-kantisme/S. +néolamarckienne/F. +néolamarckisme/S. +néolatine/F. +néolibérale/W. +néo-libérale/W. +néolibéralisme/S. +néo-libéralisme/S. +néolithique/S. +néolithique/S. +néolithisation/S. +néologie/S. +néologique/S. +néologiser/a0p+ +néologisme/S. +néologiste/S. +néomalthusianisme/S. +néo-malthusianisme/S. +néomalthusienne/F. +néomarxiste/S. +néoménie/S. +néomercantilisme/S. +néo-mercantilisme/S. +néomycine/S. +néon/S. +néonatale/F. +néo-natale/F. +néonatalogie/S. +néonaticide/S. +néonatologie/S. +néo-natologie/S. +néonazie/F. +néo-nazie/F. +néonazisme/S. +néo-nazisme/S. +néonicotinoïde/S. +néopaganisme/S. +néophilologie/S. +néophilologique/S. +néophobie/S. +néophyte/S. +néoplasie/S. +néoplasique/S. +néoplasme/S. +néoplatonicienne/F. +néo-platonicienne/F. +néoplatonisme/S. +néo-platonisme/S. +néopositivisme/S. +néo-positivisme/S. +néopositiviste/S. +néo-positiviste/S. +néoprène/S. +néoprotectionnisme/S. +néo-protectionnisme/S. +néoréac/S. +néo-réac/S. +néoréactionnaire/S. +néo-réactionnaire/S. +néoréalisme/S. +néo-réalisme/S. +néoréaliste/S. +néo-réaliste/S. +néoromane/F. +néo-romane/F. +néoromantique/S. +néo-romantique/S. +néoromantisme/S. +néo-romantisme/S. +néorurale/W. +néosynéphrine/S. +néotectonique/S. +néoténie/S. +néoténique/S. +néotestamentaire/S. +néo-testamentaire/S. +néothomisme/S. +néo-thomisme/S. +néottie/S. +néotype/S. +néovasculaire/S. +néo-vasculaire/S. +néovascularisation/S. +néo-vascularisation/S. +néo-zélandaise/F. +néozoïque/S. +népalaise/F. +nèpe/S. +népenthès +néper/S. +népérienne/F. +népète/S. +néphéline/S. +néphélinique/S. +néphélinite/S. +néphélion/S. +néphélométrie/S. +néphile/S. +néphrectomie/S. +néphrétique/S. +néphridie/S. +néphridienne/F. +néphrite/S. +néphritique/S. +néphroangiosclérose/S. +néphroblastome/S. +néphrographie/S. +néphrologie/S. +néphrologique/S. +néphrologue/S. +néphron/S. +néphropathie/S. +néphropathologie/S. +néphrose/S. +néphrotique/S. +néphrotoxique/S. +népotique/S. +népotisme/S. +neptunium/S. +nerd/S. +néréis +nerf/S. +néritique/S. +néroli/S. +néronienne/F. +nerprun/S. +nervation/S. +nerver/a0p+ +nerveuse/W. +nerveusement +nervi/S. +nervin/S. +nervosisme/S. +nervosité/S. +nervure/S. +nervurer/a0p+ +nescafé/S. +nestorianisme/S. +nestorienne/F. +net +net +netcam/S. +netiquette/S. +nétiquette/S. +nette/F. +nette/S. +nettement +netteté/S. +nettoiement/S. +nettoyable/S. +nettoyage/S. +nettoyant/S. +nettoyante/F. +nettoyer/a0p+ +nettoyeuse/F. +neuchâteloise/F. +neuf +neufchâtel/S. +neumatique/S. +neume/S. +neu-neu +neuneu/S. +neurale/W. +neuraminidase/S. +neuraminique/S. +neurasthénie/S. +neurasthénique/S. +neurinome/S. +neuroanatomie/S. +neuro-anatomie/S. +neuroanatomique/S. +neuro-anatomique/S. +neuroanatomiste/S. +neuro-anatomiste/S. +neuroatypique/S. +neuro-atypique/S. +neurobiochimie/S. +neurobiochimique/S. +neurobiochimiste/S. +neurobiologie/S. +neurobiologique/S. +neurobiologiste/S. +neuroblaste/S. +neuroblastome/S. +neurochimie/S. +neurochimique/S. +neurochimiste/S. +neurochirurgicale/W. +neurochirurgie/S. +neurochirurgienne/F. +neurocognitive/F. +neurodégénérative/F. +neurodépresseur/S. +neurodiversité/S. +neuroéconomie/S. +neuroendocrine/S. +neuroendocrinienne/F. +neuro-endocrinienne/F. +neuroendocrinologie/S. +neuro-endocrinologie/S. +neurofibrille/S. +neurofibromatose/S. +neurofonctionnelle/F. +neurogène/S. +neurogenèse/S. +neurohistologie/S. +neuro-histologie/S. +neurohormone/S. +neurohypophyse/S. +neuro-hypophyse/S. +neuro-imagerie/S. +neuroleptique/S. +neuroleptique/S. +neurolinguistique/S. +neurolinguistique/S. +neurologie/S. +neurologique/S. +neurologiquement +neurologiste/S. +neurologue/S. +neuromédiateur/S. +neuromédiation/S. +neuromotrice/F. +neuromusculaire/S. +neuro-musculaire/S. +neuronale/W. +neurone/S. +neuronique/S. +neuropaludisme/S. +neuropathie/S. +neuropathique/S. +neuropathologie/S. +neuropathologique/S. +neuropathologiste/S. +neuropédiatre/S. +neuropeptide/S. +neuropharmacologie/S. +neurophysiologie/S. +neurophysiologique/S. +neurophysiologiste/S. +neuroplasticité/S. +neuroplégique/S. +neuropsychiatre/S. +neuropsychiatrie/S. +neuropsychiatrique/S. +neuropsychologie/S. +neuropsychologique/S. +neuropsychologue/S. +neuropsychopharmacologie/S. +neuroradiologie/S. +neurorécepteur/S. +neuroscience/S. +neurosensorielle/F. +neurotensine/S. +neurotomie/S. +neurotonie/S. +neurotonique/S. +neurotoxicité/S. +neurotoxine/S. +neurotoxique/S. +neurotoxique/S. +neurotransmetteur/S. +neurotransmission/S. +neurotrope/S. +neurotropisme/S. +neurotypique/S. +neurovasculaire/S. +neurovégétative/F. +neurula/S. +neurulation/S. +neutralement +neutralisable/S. +neutralisante/F. +neutralisation/S. +neutraliser/a0p+ +neutralisme/S. +neutraliste/S. +neutralité/S. +neutre/S. +neutre/S. +neutrino/S. +neutrographie/S. +neutron/S. +neutronique/S. +neutronique/S. +neutronographie/S. +neutronthérapie/S. +neutropénie/S. +neutrophage/S. +neutrophile/S. +neutrophile/S. +neuvaine/S. +neuve/F. +neuvième/S. +neuvièmement +neux-neux +névé/S. +neveu/X. +névralgie/S. +névralgique/S. +névraxe/S. +névrilème/S. +névrite/S. +névritique/S. +névrodermite/S. +névroglie/S. +névrologie/S. +névropathe/S. +névropathie/S. +névropathique/S. +névroptère/S. +névroptère/S. +névrose/S. +névrosée/F. +névrosique/S. +névrotique/S. +névrotomie/S. +new +new-look +new-look +news +newsletter/S. +newsmagazine/S. +newton/Um +newtonienne/F. +new-yorkaise/F. +nexus +nez +ni +niable/S. +niacine/S. +niaise/F. +niaisement +niaiser/a0p. +niaiserie/S. +niaiseuse/W. +niangon/S. +niaouli/S. +niaque/S. +nib +nibard/S. +nicaraguayenne/F. +niche/S. +nicher/a0p+ +nichet/S. +nicheuse/F. +nichoir/S. +nichon/S. +nichrome/S. +nickel +nickel/S. +nickelage/S. +nickeler/d0p+ +nickélifère/S. +nic-nac +nicnac/S. +nicodème/S. +niçoise/F. +nicol/S. +nicolaïsme/S. +nicolaïte/S. +nicotinamide/S. +nicotine/S. +nicotinique/S. +nicotiniser/a0p+ +nicotinisme/S. +nictation/S. +nictitante/F. +nictitation/S. +nid/S. +nidation/S. +nid-d'abeilles +nid-de-pie +nid-de-poule +nidicole/S. +nidification/S. +nidificatrice/F. +nidifier/a0p. +nidifuge/S. +nids-d'abeilles +nids-de-pie +nids-de-poule +nièce/S. +niellage/S. +nielle/S. +nieller/a0p+ +nielleur/S. +niellure/S. +nier/a0p+ +nietzschéenne/F. +nietzschéisme/S. +nife/S. +nigaude/F. +nigaudement +nigauder +nigauderie/S. +nigelle/S. +nigériane/F. +nigérianiser/a0p+ +nigérienne/F. +nigéro-congolaise/F. +night-club/S. +nihilisme/S. +nihiliste/S. +nihilo +nihonium/S. +nilgaut/S. +nille/S. +nilo-saharienne/F. +nilotique/S. +nilpotence/S. +nilpotente/F. +nilvariété/S. +nimbe/S. +nimber/a0p+ +nimbostratus +nimbo-stratus +nimbus +nîmoise/F. +n'importe +ninas +ninja/S. +ninjato/S. +niobate/S. +niobite/S. +niobium/S. +niôle/S. +niolo/S. +niortaise/F. +nippe/S. +nipper/a0p+ +nippo-américaine/F. +nippo-coréenne/F. +nippone/F. +nipponne/F. +niqab/S. +nique/S. +niquedouille/S. +niquer/a0p+ +niqueuse/F. +nirvana/S. +nitescence/S. +nitratation/S. +nitrate/S. +nitrater/a0p+ +nitration/S. +nitre/S. +nitrer/a0p+ +nitreuse/W. +nitrière/S. +nitrifiante/F. +nitrification/S. +nitrificatrice/F. +nitrifier/a0p+ +nitrile/S. +nitrique/S. +nitrite/S. +nitrobacter/S. +nitrobactérie/S. +nitrobenzène/S. +nitrobenzine/S. +nitrocellulose/S. +nitrogénase/S. +nitrogène/S. +nitroglycérine/S. +nitrophile/S. +nitrosation/S. +nitrosomonas +nitrosyle/S. +nitrotoluène/S. +nitruration/S. +nitrure/S. +nitrurer/a0p+ +nivale/W. +nivaquiner/a0p. +nivéale/W. +niveau/X. +nivelage/S. +niveler/d0p+ +nivelette/S. +niveleuse/F. +nivellement/S. +nivéole/S. +nivernaise/F. +nivicole/S. +nivo-glaciaire/S. +nivologie/S. +nivologue/S. +nivo-pluviale/W. +nivôse/S. +nivosité/S. +nixe/S. +nizeré/S. +n-linéaire/S. +nô +no/S. +nobélisable/S. +nobélium/S. +nobiliaire/S. +nobiliaire/S. +nobilité/S. +noblaillonne/F. +noble/S. +noblement +noblesse/S. +nobliau/X. +nobo/S. +nobscuriter/a0p. +noce/S. +nocebo/S. +nocer/a0p. +noceuse/F. +nocher/S. +nocicepteur/S. +nociception/S. +nociceptive/F. +nocive/F. +nocivité/S. +noctambule/S. +noctambulisme/S. +noctiluque/S. +noctiluque/S. +noctuelle/S. +noctule/S. +nocturne/S. +nocuité/S. +nodale/W. +nodosité/S. +nodulaire/S. +nodule/S. +noduleuse/W. +noël/S. +noématique/S. +noème/S. +noethérienne/F. +noétique/S. +noétique/S. +nœud/S. +noirâtre/S. +noiraude/F. +noirceur/S. +noircir/f0p+ +noircissante/F. +noircissement/S. +noircisseur/S. +noircissure/S. +noire/F. +noise/S. +noiseraie/S. +noisetier/S. +noisette +noisette/S. +noix +noli-me-tangere +nolis +nolisement/S. +noliser/a0p+ +nom/S. +nomade/S. +nomadisation/S. +nomadiser/a0p. +nomadisme/S. +nomarque/S. +nombrable/S. +nombre/S. +nombrer/a0p+ +nombreuse/W. +nombril/S. +nombrilisme/S. +nombriliste/S. +nome/S. +nomenclatrice/F. +nomenclature/S. +nomenklatura/S. +nomenklaturiste/S. +nominale/W. +nominalement +nominalisation/S. +nominaliser/a0p+ +nominalisme/S. +nominaliste/S. +nominante/F. +nominatif/S. +nomination/S. +nominative/F. +nominativement +nominatrice/F. +nominée/F. +nominer/a0p+ +nominette/S. +nommable/S. +nommage/S. +nommée/F. +nommément +nommer/a0p+ +nomogramme/S. +nomographie/S. +nomologie/S. +nomologique/S. +nomophobie/S. +nomothète/S. +nomothétique/S. +nomothétique/S. +non +non +non-acceptation/S. +non-activité/S. +nonagénaire/S. +non-agir +non-agression/S. +nonaire/S. +non-alignée/F. +non-alignement/S. +non-animé/S. +nonantaine/S. +nonante +nonante-cinq +nonante-deux +nonante-et-un +nonante-huit +nonante-neuf +nonante-quatre +nonante-sept +nonante-six +nonante-trois +nonantième/S. +non-appartenance/S. +non-assistance/S. +non-belligérance/S. +non-belligérante/F. +nonce/S. +noncer/a0p. +nonchalamment +nonchalance/S. +nonchalante/F. +nonchaloir/S. +nonciature/S. +non-combattante/F. +non-comparante/F. +non-comparution/S. +non-comptable/S. +non-conciliation/S. +non-concurrence +non-conformisme/S. +non-conformiste/S. +non-conformité/S. +non-contradiction/S. +non-croyante/F. +non-cumul/S. +non-dénonciation/S. +non-directive/F. +non-directivité/S. +non-discrimination/S. +non-dit/S. +non-droit/S. +none/S. +non-engagée/F. +non-engagement/S. +non-être +non-euclidienne/F. +non-événement/S. +non-évènement/S. +non-exécution/S. +non-existence/S. +non-figuration/S. +non-figurative/F. +non-fumeuse/F. +non-gage/S. +nonidi/S. +nonillion/S. +non-imposition/S. +non-ingérence/S. +non-initiée/F. +non-inscrite/F. +non-intervention/S. +non-interventionniste/S. +non-jouissance/S. +non-lieu/X. +non-linéaire/S. +non-métal/X. +non-moi +nonne/S. +nonnette/S. +nono +nonobstant +non-paiement/S. +nonpareille/F. +non-participation/S. +non-prolifération/S. +non-rapatriement/S. +non-recevoir +non-remboursement/S. +non-réponse/S. +non-résidente/F. +non-respect/S. +non-responsabilité/S. +non-retour +non-rétroactivité/S. +non-satisfaction/S. +non-sens +non-spécialiste/S. +non-stop +non-tissé/S. +nonupler/a0p+ +non-usage/S. +non-valeur/S. +non-viabilité/S. +non-viable/S. +non-violence/S. +non-violente/F. +non-voyante/F. +noologique/S. +noosphère/S. +noosphérique/S. +nopal/S. +nope/S. +noper/a0p+ +noquette/S. +noradrénaline/S. +noradrénergique/S. +nord +nord-africaine/F. +nord-américaine/F. +nord-coréenne/F. +nord-est +nordicité/S. +nordique/S. +nordir/f0p. +nordiste/S. +nord-ouest +nord-vietnamienne/F. +noria/S. +norite/S. +normale/W. +normalement +normalienne/F. +normalisable/S. +normalisation/S. +normalisatrice/F. +normaliser/a0p+ +normalité/S. +normande/F. +normative/F. +normativement +normativisme/S. +normativité/S. +norme/S. +normée/F. +normer/a0p+ +normoblaste/S. +normographe/S. +norois +noroît/S. +norroise/F. +norvégienne/F. +nos +noséane/S. +nosocomiale/W. +nosographie/S. +nosographique/S. +nosologie/S. +nosologique/S. +nosophobie/S. +nostalgie/S. +nostalgique/S. +nostalgiquement +nostoc/S. +noszigues +notabilité/S. +notable/S. +notable/S. +notablement +notaire/S. +notairesse/S. +notamment +notariale/W. +notariat/S. +notariée/F. +notation/S. +notatrice/F. +note/S. +noter/a0p+ +notice/S. +notification/S. +notificative/F. +notifier/a0p+ +notion/S. +notionnelle/F. +notoire/S. +notoirement +notonecte/S. +notoriété/S. +notre +nôtre/S. +notule/S. +nouage/S. +nouaison/S. +nouba/S. +noue/S. +nouement/S. +nouer/a0p+ +noueuse/F. +noueuse/W. +nougat/S. +nougatine/S. +nouille/S. +noulet/S. +nouménale/W. +noumène/S. +nounou/S. +nounours +nourrain/S. +nourrice/S. +nourricerie/S. +nourricière/F. +nourrir/f0p+ +nourrissage/S. +nourrissante/F. +nourrissement/S. +nourrisseur/S. +nourrisson/S. +nourriture/S. +nous +nous +nous-même +nous-mêmes +nouure/S. +nouveau-née/F. +nouveauté/S. +nouvel +nouvelle/W. +nouvellement +nouvelleté/S. +nouvelliste/S. +nov +nova +novæ +novation/S. +novatoire/S. +novatrice/F. +novelette/S. +novélisation/S. +novelle/S. +novembre/S. +nover/a0p+ +novice/S. +noviciat/S. +novillada/S. +novlangue/S. +novocaïne/S. +noyade/S. +noyau/X. +noyautage/S. +noyauter/a0p+ +noyauteuse/F. +noyer/S. +noyer/a0p+ +nu/S. +nuage/S. +nuageuse/W. +nuance/S. +nuancer/a0p+ +nuancier/S. +nubienne/F. +nubile/S. +nubilité/S. +nubuck/S. +nucale/W. +nucelle/S. +nucléaire/S. +nucléarisation/S. +nucléariser/a0p+ +nucléariste/S. +nucléarité/S. +nucléase/S. +nucléation/S. +nucléer/a0p+ +nucléide/S. +nucléine/S. +nucléique/S. +nucléocapside/S. +nucléocrate/S. +nucléocytoplasmique/S. +nucléofuge/S. +nucléoïde/S. +nucléole/S. +nucléolyse/S. +nucléon/S. +nucléonique/S. +nucléophile/S. +nucléophile/S. +nucléoprotéine/S. +nucléoside/S. +nucléosome/S. +nucléosynthèse/S. +nucléotide/S. +nucléotidique/S. +nucleus +nucléus +nudibranche/S. +nudisme/S. +nudiste/S. +nudité/S. +nue/F. +nue/S. +nuée/S. +nue-propriétaire +nue-propriété +nuer/a0p+ +nues-propriétaires +nues-propriétés +nugget/S. +nuire/yU +nuisance/S. +nuisette/S. +nuisibilité/S. +nuisible/S. +nuisible/S. +nuisiblement +nuit/S. +nuitamment +nuitarde/F. +nuitée/S. +nul +nullarde/F. +nulle/F. +nulle/F. +nullement +nullipare/S. +nullipare/S. +nullissime/S. +nullité/S. +numbat/S. +nûment +numéraire/S. +numéraire/S. +numéral/X. +numérale/W. +numérateur/S. +numératie/S. +numération/S. +numérative/F. +numérique/S. +numériquement +numérisation/S. +numériser/a0p+ +numériseur/S. +numéro/S. +numérologie/S. +numérologique/S. +numérologue/S. +numérotage/S. +numérotation/S. +numéroter/a0p+ +numéroteur/S. +numerus +numide/S. +numismate/S. +numismatique/S. +numismatique/S. +nummulaire/S. +nummulaire/S. +nummulite/S. +nummulitique/S. +nunatak/S. +nunc +nunchaku/S. +nuncupation/S. +nuncupative/F. +nunuche/S. +nunuche/S. +nuoc-mâm +nu-pieds +n-uple/S. +n-uplet/S. +nu-propriétaire +nuptiale/W. +nuptialité/S. +nuque/S. +nuraghe/I. +nursage/S. +nurse/S. +nursery/A. +nursing/S. +nus-propriétaires +nutation/S. +nuton/S. +nutraceutique/S. +nutricière/F. +nutriment/S. +nutrithérapie/S. +nutrition/S. +nutritionnelle/F. +nutritionnellement +nutritionniste/S. +nutritive/F. +nyctaginacée/S. +nyctalope/S. +nyctalopie/S. +nycthémérale/W. +nycthémère/S. +nyctinastie/S. +nycturie/S. +nylon/S. +nymphale/W. +nymphalidé/S. +nymphe/S. +nymphéa/S. +nymphéacée/S. +nymphée/S. +nymphette/S. +nympho/S. +nymphomane/S. +nymphomanie/S. +nymphoplastie/S. +nymphose/S. +nystagmus +ô +o +o/||-- +oaï/S* +oaristys/L'D'Q' +oasienne/F* +oasis/L'D'Q' +obduction/S* +obédience/S* +obédiencier/S* +obédientielle/F* +obéir/f5p+ +obéissance/S* +obéissante/F* +obel/S* +obèle/S* +obélie/S* +obélisque/S* +obérer/c4p+ +obèse/S* +obésité/S* +obi/S* +obier/S* +obit/S* +obituaire/S* +obituaire/S* +objectale/W* +objecter/a2p+ +objecteur/S* +objectif/S* +objection/S* +objectivable/S* +objectivation/S* +objective/F* +objectivement/D'Q' +objectiver/a4p+ +objectivisation/S* +objectivisme/S* +objectiviste/S* +objectivité/S* +objet/S* +objurgation/S* +objurguer/a1p. +oblade/S* +oblast/S* +oblate/F* +oblation/S* +oblative/F* +oblativité/S* +oblature/S* +oblicité/S* +obligataire/S* +obligation/S* +obligatoire/S* +obligatoirement/D'Q' +obligeamment/D'Q' +obligeance/S* +obligeante/F* +obligée/F* +obliger/a4p+ +oblique/S* +obliquement/D'Q' +obliquer/a1p. +obliquité/S* +oblitération/S* +oblitératrice/F* +oblitérer/c2p+ +oblongue/F* +obnubilation/S* +obnubiler/a2p+ +obole/S* +obombrer/a2p+ +obscène/S* +obscènement/D'Q' +obscénité/S* +obscurantisme/S* +obscurantiste/S* +obscuration/S* +obscurcir/f4p+ +obscurcissement/S* +obscure/F* +obscurément/D'Q' +obscurité/S* +obsécration/S* +obsédante/F* +obsédée/F* +obséder/c2p+ +obsèques/D'Q' +obséquieuse/W* +obséquieusement/D'Q' +obséquiosité/S* +observabilité/S* +observable/S* +observance/S* +observante/F* +observantine/F* +observation/S* +observationnelle/F* +observatoire/S* +observatrice/F* +observer/a4p+ +obsession/S* +obsessionnelle/F* +obsessionnellement/D'Q' +obsessive/F* +obsessivement/D'Q' +obsidienne/S* +obsidionale/W* +obsolescence/S* +obsolescente/F* +obsolète/S* +obstacle/S* +obstétricale/W* +obstétricienne/F* +obstétrique/S* +obstétrique/S* +obstination/S* +obstinée/F* +obstinément/D'Q' +obstiner/a3p+ +obstruction/S* +obstructionnisme/S* +obstructionniste/S* +obstructive/F* +obstruer/a4p+ +obtempérer/c5p. +obtenable/S* +obtenir/i1q+ +obtention/S* +obtentrice/F* +obturable/S* +obturation/S* +obturatrice/F* +obturer/a2p+ +obtusangle/S* +obtuse/F* +obus/L'D'Q' +obusier/S* +obvenir/i0q+ +obvers/L'D'Q' +obviation/S* +obvier/a5p. +oc/D' +ocarina/S* +occase/S* +occasion/S* +occasionnalisme/S* +occasionnaliste/S* +occasionnelle/F* +occasionnellement/D'Q' +occasionner/a2p+ +occident/S* +occidentale/W* +occidentalisation/S* +occidentaliser/a4p+ +occidentalisme/S* +occidentaliste/S* +occidentalité/S* +occipitale/W* +occiput/S* +occire/yY +occision/S* +occitane/F* +occitanienne/F* +occitanisme/S* +occitaniste/S* +occlure/xK +occlusale/W* +occlusion/S* +occlusive/F* +occultation/S* +occulte/S* +occulte/S* +occultement/D'Q' +occulter/a2p+ +occulteur/S* +occultisme/S* +occultiste/S* +occupante/F* +occupation/S* +occuper/a4p+ +occurrence/S* +occurrente/F* +occurrer/a1p. +océan/S* +océanaute/S* +océane/S* +océanide/S* +océanienne/F* +océanique/S* +océaniste/S* +océanite/S* +océanographe/S* +océanographie/S* +océanographique/S* +océanologie/S* +océanologique/S* +océanologue/S* +ocelle/S* +ocellée/F* +ocelot/S* +ochlocratie/S* +ocre/L'D'Q' +ocre/S* +ocrer/a2p+ +ocreuse/W* +oct +octa/S* +octacorde/S* +octaèdre/S* +octaédrique/S* +octale/W* +octalogie/S* +octane/S* +octanoïque/S* +octant/S* +octante/L'D'Q' +octante-cinq/L'D'Q' +octante-deux/L'D'Q' +octante-et-un/L'D'Q' +octante-huit/L'D'Q' +octante-neuf/L'D'Q' +octante-quatre/L'D'Q' +octante-sept/L'D'Q' +octante-six/L'D'Q' +octante-trois/L'D'Q' +octantième/S* +octave/S* +octavier/a2p+ +octavin/S* +octavo/D'Q' +octet/S* +octidi/S* +octillion/S* +octobre/S* +octocoralliaire/S* +octodon/S* +octogénaire/S* +octogonale/W* +octogone/S* +octonion/S* +octopode/S* +octopode/S* +octopus/L'D'Q' +octostyle/S* +octosyllabe/S* +octosyllabe/S* +octosyllabique/S* +octroi/S* +octroyer/a4p+ +octuor/S* +octuple/S* +octuple/S* +octupler/a2p+ +oculaire/S* +oculaire/S* +oculariste/S* +oculiste/S* +oculogyre/S* +oculométrie/S* +oculomotrice/F* +oculus/I* +ocytocine/S* +odalisque/S* +ode/S* +odelette/S* +odéon/S* +odeur/S* +odieuse/W* +odieusement/D'Q' +odomètre/S* +odométrie/S* +odonate/S* +odontalgie/S* +odontalgique/S* +odontoblaste/S* +odontoblastique/S* +odontocète/S* +odontoïde/S* +odontologie/S* +odontologique/S* +odontologiste/S* +odontologue/S* +odontomètre/S* +odontostomatologie/S* +odonyme/S* +odonymie/S* +odorante/F* +odorat/S* +odoriférante/F* +odorologie/S* +odyssée/S* +œ +œconomicus +œcuménicité/S* +œcuménique/S* +œcuménisme/S* +œdémateuse/W* +œdème/S* +œdicnème/S* +œdipe/S* +œdipienne/F* +œil/S* +œil-de-bœuf/L'D'Q' +œil-de-chat/L'D'Q' +œil-de-perdrix/L'D'Q' +œil-de-pie/L'D'Q' +œillade/S* +œillard/S* +œiller/a2p+ +œillère/S* +œillet/S* +œilleton/S* +œilletonnage/S* +œilletonner/a2p+ +œillette/S* +œils-de-bœuf/D'Q' +œils-de-chat/D'Q' +œils-de-perdrix/D'Q' +œils-de-pie/D'Q' +œkoumène/S* +œnanthe/S* +œnanthique/S* +œnilisme/S* +œnolique/S* +œnolisme/S* +œnologie/S* +œnologique/S* +œnologue/S* +œnomètre/S* +œnométrie/S* +œnométrique/S* +œnophile/S* +œnotechnie/S* +œnotechnique/S* +œnothèque/S* +œnothera/S* +œnothéracée/S* +œnothère/S* +œrsted/S* +œrstite/S* +œsophage/S* +œsophagectomie/S* +œsophagienne/F* +œsophagique/S* +œsophagisme/S* +œsophagite/S* +œsophagomalacie/S* +œsophagoplastie/S* +œsophagoscope/S* +œsophagoscopie/S* +œsophagostomie/S* +œsophagotomie/S* +œstradiène/S* +œstradiol/S* +œstrale/W* +œstre/S* +œstriol/S* +œstrogène/S* +œstrogène/S* +œstrogénique/S* +œstrogénothérapie/S* +œstromane/S* +œstromanie/S* +œstrone/S* +œstroprogestative/F* +œstrus/L'D'Q' +œuf/S* +œufrier/S* +œuvée/F* +œuvre/S* +œuvrer/a1p. +œuvrette/S* +ofbizextra/D'Q' +off +off/L'D'Q' +offensante/F* +offense/S* +offensée/F* +offenser/a4p+ +offenseur/S* +offensive/F* +offensivement/D'Q' +offerte/S* +offertoire/S* +office/S* +official/X* +officialisation/S* +officialiser/a2p+ +officialité/S* +officiante/F* +officielle/F* +officiellement/D'Q' +officier/a1p. +officière/F* +officieuse/W* +officieusement/D'Q' +officinale/W* +officine/S* +offrande/S* +offrante/F* +offre/S* +offreuse/F* +offrir/iC +offset/L'D'Q' +offset/S* +offsettiste/S* +offshore/L'D'Q' +off-shore/L'D'Q' +off-shore/L'D'Q' +offshore/S* +offuscation/S* +offusquer/a4p+ +oflag/S* +oganesson/S* +ogham/S* +oghamique/S* +ogivale/W* +ogive/S* +ognon/S* +ognonade/S* +ognonière/S* +ogonek/S* +ogresse/F* +oh +ohé +ohm/Um +ohmique/S* +ohmmètre/S* +ohnisme/S* +oïdium/S* +oie/S* +oignon/S* +oignonade/S* +oignonière/S* +oïl/D' +oille/S* +oindre/wB +oing/S* +oint/S* +oiseau/X* +oiseau-lyre/L'D'Q' +oiseau-mouche/L'D'Q' +oiseau-soleil/L'D'Q' +oiseau-trompette/L'D'Q' +oiseaux-lyres/D'Q' +oiseaux-mouches/D'Q' +oiseaux-soleils/D'Q' +oiseaux-trompettes +oiseler/d2p+ +oiselet/S* +oiseleuse/F* +oiselière/F* +oiselle/S* +oisellerie/S* +oiseuse/W* +oiseusement/D'Q' +oisillon/S* +oisive/F* +oisivement/D'Q' +oisiveté/S* +oison/S* +okapi/S* +okoumé/S* +olé +oléacée/S* +oléacée/S* +oléagineuse/W* +oléandre/S* +oléastre/S* +oléate/S* +olécrane/S* +olécranienne/F* +oléfiante/F* +oléfine/S* +oléicole/S* +oléicultrice/F* +oléiculture/S* +oléifère/S* +oléiforme/S* +oléine/S* +oléique/S* +oléochimie/S* +oléochimique/S* +oléoduc/S* +oléohydraulique/S* +oléolat/S* +oléomètre/S* +oléopneumatique/S* +oléo-pneumatique/S* +oléoprotéagineuse/F* +oléo-protéagineuse/F* +oléoprotéagineuse/W* +oléoprotéagineux/L'D'Q' +oléorésine/S* +oléosome/S* +oléum/S* +olfaction/S* +olfactive/F* +olfactivement/L'D'Q' +olibrius/L'D'Q' +olifant/S* +oligandrine/S* +oligarchie/S* +oligarchique/S* +oligarque/S* +oligiste/S* +oligiste/S* +oligoasthénotératospermie/S* +oligocène/S* +oligochète/S* +oligoclase/S* +oligodendrocyte/S* +oligodendrogliome/S* +oligoélément/S* +oligo-élément/S* +oligogalacturonate/S* +oligo-galacturonate/S* +oligomère/S* +oligomérique/S* +oligomérisation/S* +oligonucléotide/S* +oligo-nucléotide/S* +oligopectine/S* +oligo-pectine/S* +oligopeptide/S* +oligophrénie/S* +oligopole/S* +oligopolistique/S* +oligosaccharide/S* +oligoside/S* +oligospermie/S* +oligothérapie/S* +oligotrophe/S* +oligozoospermie/S* +oligurie/S* +olim/L'D'Q' +oliphant/S* +olivacée/F* +olivaie/S* +olivaison/S* +olivâtre/S* +olive/L'D'Q' +olive/S* +oliveraie/S* +olivétain/S* +olivette/S* +olivier/S* +olivine/S* +ollaire/S* +olla-podrida/L'D'Q' +ollas-podridas/D'Q' +ollé +olmèque/S* +olographe/S* +olympe/S* +olympiade/S* +olympienne/F* +olympique/S* +olympisme/S* +omanaise/F* +ombelle/S* +ombellée/F* +ombellifère/S* +ombellifère/S* +ombelliforme/S* +ombellule/S* +ombilic/S* +ombilicale/W* +ombiliquée/F* +omble/S* +ombrage/S* +ombrager/a2p+ +ombrageuse/W* +ombrageusement/D'Q' +ombre/S* +ombrée/S* +ombrelle/S* +ombrer/a2p+ +ombrette/S* +ombreuse/W* +ombrienne/F* +ombrienne/F* +ombrière/S* +ombrine/S* +ombrophile/S* +ombrothermique/S* +ombudsman/A* +oméga/L'D'Q' +omelette/S* +omerta/S* +omettre/vA +omicron/L'D'Q' +omissible/S* +omission/S* +ommatidie/S* +omnibus/L'D'Q' +omnicolore/S* +omnidirectionnalité/S* +omnidirectionnelle/F* +omnipotence/S* +omnipotente/F* +omnipraticienne/F* +omniprésence/S* +omniprésente/F* +omnipuissante/F* +omniscience/S* +omnisciente/F* +omnisports/D' +omnium/S* +omnivore/S* +omoplate/S* +omphacite/S* +omphalite/S* +omphalocèle/S* +omphalos/L'D'Q' +on/L'D'Q'Q* +onagracée/S* +onagrariée/S* +onagre/S* +onanisme/S* +onaniste/S* +once/S* +onchocercose/S* +onciale/W* +oncle/S* +oncogène/S* +oncogène/S* +oncogenèse/S* +oncologie/S* +oncologiste/S* +oncologue/S* +oncotique/S* +oncques/D'Q' +onction/S* +onctueuse/W* +onctueusement/D'Q' +onctuosité/S* +ondatra/S* +onde/S* +ondée/F* +ondelette/S* +ondemètre/S* +ondine/F* +ondinisme/S* +on-dit +ondoiement/S* +ondoyante/F* +ondoyer/a2p+ +ondulante/F* +ondulation/S* +ondulatoire/S* +onduler/a2p+ +onduleur/S* +onduleuse/W* +onduleusement/D'Q' +one-man-show +onéreuse/W* +onéreusement/D'Q' +one-step/S. +one-woman-show +ongle/S* +onglée/F* +onglerie/S* +onglet/S* +onglette/S* +onglier/S* +onglon/S* +onguent/S* +onguiculée/F* +onguiforme/S* +ongulé/S* +ongulée/F* +onguligrade/S* +onirique/S* +oniriquement/D'Q' +onirisme/S* +onirologie/S* +onirologue/S* +oniromancie/S* +oniromancienne/F* +onkotique/S* +onomasiologie/S* +onomasiologique/S* +onomastique/S* +onomastique/S* +onomatopée/S* +onomatopéique/S* +onques +ontogenèse/S* +ontogénétique/S* +ontogénie/S* +ontogénique/S* +ontologie/S* +ontologique/S* +ontologiquement/D'Q' +ontologisme/S* +onusienne/F* +onychomycose/S* +onychophagie/S* +onychophore/S* +onyx/L'D'Q' +onyxis/L'D'Q' +onzain/S* +onze/L'D'Q' +onzième/S* +onzièmement/D'Q' +oocyte/S* +oogamie/S* +oogone/S* +oolite/S* +oolithe/S* +oolithique/S* +oolitique/S* +oomycète/S* +oosphère/S* +oospore/S* +oothèque/S* +op +opacifiante/F* +opacification/S* +opacifier/a4p+ +opacimétrie/S* +opacimétrique/S* +opacité/S* +opale/S* +opalescence/S* +opalescente/F* +opaline/F* +opaline/S* +opalisation/S* +opaliser/a2p+ +opaque/S* +opaquement/D'Q' +ope/S* +opéable/S* +opéable/S* +open/L'D'Q' +open/L'D'Q' +open/S* +openSUSE +open-core/S* +opensourcer/a2p+ +open-sourcer/a2p+ +opéra/S* +opérabilité/S* +opérable/S* +opéra-bouffe/L'D'Q' +opéra-comique/L'D'Q' +opérande/S* +operandi +opérante/F* +opéras-bouffes/D'Q' +opéras-comiques/D'Q' +opération/S* +opérationnalisation/S* +opérationnaliser/a2p+ +opérationnalité/S* +opérationnelle/F* +opérationnellement/D'Q' +opératique/S* +opérative/F* +opérativité/S* +opératoire/S* +opératoirement/L'D'Q' +opératrice/F* +operculaire/S* +opercule/S* +operculée/F* +opérée/F* +opérer/c4p+ +opérette/S* +opéron/S* +ophicléide/S* +ophidien/S* +ophidienne/F* +ophioglosse/S* +ophiographie/S* +ophiolâtrie/S* +ophiolite/S* +ophiolitique/S* +ophiologie/S* +ophite/S* +ophiure/S* +ophrys/L'D'Q' +ophtalmie/S* +ophtalmique/S* +ophtalmo/S* +ophtalmologie/S* +ophtalmologique/S* +ophtalmologiste/S* +ophtalmologue/S* +ophtalmomètre/S* +ophtalmométrie/S* +ophtalmoplégie/S* +ophtalmoscope/S* +ophtalmoscopie/S* +opiacé/S* +opiacer/a2p+ +opiat/S* +opilion/S* +opime/S* +opinel/S* +opiner/a1p. +opiniâtre/S* +opiniâtrement/D'Q' +opiniâtrer/a3p+ +opiniâtreté/S* +opinion/S* +opioïde/S* +opioïde/S* +opiomane/S* +opiomanie/S* +opisthobranche/S* +opisthobranche/S* +opisthodome/S* +opisthoglyphe/S* +opisthographe/S* +opisthographe/S* +opium/S* +opodeldoch/S* +oponce/S* +opopanax/L'D'Q' +opoponax/L'D'Q' +opossum/S* +opothérapie/S* +oppidum/I* +opportune/F* +opportunément/D'Q' +opportunisme/S* +opportuniste/S* +opportunité/S* +opposabilité/S* +opposable/S* +opposante/F* +opposée/F* +opposer/a4p+ +opposite/S* +opposite/S* +opposition/S* +oppositionnelle/F* +oppositive/F* +oppressante/F* +oppresser/a2p+ +oppresseur/S* +oppression/S* +oppressive/F* +opprimante/F* +opprimée/F* +opprimer/a2p+ +opprobre/S* +opsine/S* +opsonine/S* +opsonique/S* +opsonisation/S* +optative/F* +opter/a1p. +opticienne/F* +optimale/W* +optimalement/L'D'Q' +optimalisation/S* +optimaliser/a2p+ +optimalité/S* +optimisation/S* +optimiser/a2p+ +optimiseur/S* +optimisme/S* +optimiste/S* +optimum/I* +optimum/S* +option/S* +optionnelle/F* +optionnellement/D'Q' +optique/S* +optique/S* +optiquement/D'Q' +optocoupleur/S* +optoélectronique/S* +opto-électronique/S* +optoélectronique/S* +opto-électronique/S* +optomètre/S* +optométrie/S* +optométriste/S* +optronique/S* +optronique/S* +opulemment/L'D'Q' +opulence/S* +opulente/F* +opuntia/S* +opus/L'D'Q' +opuscule/S* +or +or/S* +oracle/S* +oraculaire/S* +orage/S* +orageuse/W* +orageusement/D'Q' +oraison/S* +oral/X* +orale/W* +oralement/D'Q' +oralisation/S* +oraliser/a2p+ +oralisme/S* +oralité/S* +oranaise/F* +orange/L'D'Q' +orange/S* +orangeade/S* +oranger/S* +oranger/a2p+ +orangeraie/S* +orangerie/S* +orangette/S* +orangiste/S* +orang-outan/L'D'Q' +orang-outang/L'D'Q' +orangs-outangs/D'Q' +orangs-outans/D'Q' +orante/F* +oratoire/S* +oratoire/S* +oratorienne/F* +oratorio/S* +oratrice/F* +orbe/S* +orbi +orbicole/S* +orbiculaire/S* +orbitaire/S* +orbitale/S* +orbitale/W* +orbitalement/D'Q' +orbite/S* +orbiter/a1p. +orbiteur/S* +orbitographie/S* +orbiton/S* +orcanette/S* +orchestie/S* +orchestique/S* +orchestrale/W* +orchestration/S* +orchestratrice/F* +orchestre/S* +orchestrer/a2p+ +orchidacée/S* +orchidacée/S* +orchidée/S* +orchidologie/S* +orchi-épididymite/S* +orchis/L'D'Q' +orchite/S* +ordalie/S* +ordalique/S* +ordi/S* +ordinaire/S* +ordinairement/D'Q' +ordinale/W* +ordinand/S* +ordinant/S* +ordinariat/S* +ordinateur/S* +ordination/S* +ordinatrice/F* +ordinogramme/S* +ordinosaure/S* +ordiphone/S* +ordo/L'D'Q' +ordolibérale/F* +ordolibéralisme/S* +ordo-libéralisme/S* +ordonnable/S* +ordonnance/S* +ordonnancement/S* +ordonnancer/a2p+ +ordonnanceur/S* +ordonnancière/F* +ordonnatrice/F* +ordonnée/S* +ordonner/a4p+ +ordovicienne/F* +ordre/S* +ordure/S* +ordurière/F* +oréade/S* +orée/S* +oreillarde/F* +oreille/S* +oreiller/S* +oreillette/S* +oreillon/S* +orémus/L'D'Q' +ores/D' +orfèvre/S* +orfévrée/F* +orfèvrerie/S* +orfraie/S* +orfroi/S* +org/||-- +orga/S* +organdi/S* +organe/S* +organeau/X* +organicienne/F* +organicisme/S* +organiciste/S* +organicité/S* +organigramme/S* +organique/S* +organiquement/D'Q' +organisable/S* +organisation/S* +organisationnelle/F* +organisationnellement/L'D'Q' +organisatrice/F* +organiser/a4p+ +organiseur/S* +organisme/S* +organiste/S* +organite/S* +organochloré/S* +organochlorée/F* +organogène/S* +organogenèse/S* +organoleptique/S* +organologie/S* +organologique/S* +organomagnésien/S* +organomagnésienne/F* +organométallique/S* +organométallique/S* +organophosphoré/S* +organophosphorée/F* +organostannique/S* +organothérapie/S* +organsin/S* +organsinage/S* +organsiner/a2p+ +orgasme/S* +orgasmique/S* +orgastique/S* +orge/S* +orgeat/S* +orgelet/S* +orgiaque/S* +orgiastique/S* +orgie/S* +orgue/S* +orgueil/S* +orgueilleuse/W* +orgueilleusement/D'Q' +orgues/D'Q' +oribus/L'D'Q' +orichalque/S* +oriel/S* +orient/S* +orientable/S* +orientale/W* +orientaliser/a4p+ +orientalisme/S* +orientaliste/S* +orientation/S* +orientatrice/F* +orientement/S* +orienter/a4p+ +orienteuse/F* +orifice/S* +oriflamme/S* +origami/S* +origan/S* +origénisme/S* +origéniste/S* +originaire/S* +originairement/D'Q' +originale/W* +originalement/D'Q' +originalité/S* +origine/S* +originelle/F* +originellement/D'Q' +originer/a4p+ +orignal/X* +orillon/S* +orin/S* +oringuer/a2p+ +oriole/S* +oriolidé/S* +oripeau/X* +oriya/S* +orle/S* +orléanaise/F* +orléanisme/S* +orléaniste/S* +orlon/S* +ormaie/S* +orme/S* +ormeau/X* +ormille/S* +ormoie/S* +ornaise/F* +ornemaniste/S* +ornement/S* +ornementale/W* +ornementation/S* +ornementer/a2p+ +orner/a4p+ +ornière/S* +ornithine/S* +ornithischien/S* +ornithogale/S* +ornithologie/S* +ornithologique/S* +ornithologiste/S* +ornithologue/S* +ornithomancie/S* +ornithophile/S* +ornithophilie/S* +ornithopode/S* +ornithorynque/S* +ornithose/S* +orobanche/S* +orobe/S* +orofaciale/W* +orogène/S* +orogenèse/S* +orogénie/S* +orogénique/S* +orographie/S* +orographique/S* +oronge/S* +oronymie/S* +oronymique/S* +oropharynx/L'D'Q' +orpaillage/S* +orpailleuse/F* +orphelinat/S* +orpheline/F* +orphéon/S* +orphéoniste/S* +orphie/S* +orphique/S* +orphisme/S* +orpiment/S* +orpin/S* +orque/S* +orseille/S* +orteil/S* +orthèse/S* +orthésiste/S* +orthocentre/S* +orthocentrique/S* +orthochromatique/S* +orthodontie/S* +orthodontique/S* +orthodontiste/S* +orthodoxe/S* +orthodoxie/S* +orthodromie/S* +orthodromique/S* +orthoépie/S* +orthoépique/S* +orthogenèse/S* +orthogénie/S* +orthogénisme/S* +orthogonale/W* +orthogonalement/D'Q' +orthogonalisation/S* +orthogonaliser/a4p+ +orthogonalité/S* +orthographe/S* +orthographie/S* +orthographier/a4p+ +orthographique/S* +orthographiquement/D'Q' +orthologue/S* +orthométrique/S* +orthonormale/W* +orthonormalisation/S* +orthonormée/F* +orthopédagogie/S* +orthopédagogique/S* +orthopédagogue/S* +orthopédie/S* +orthopédique/S* +orthopédiquement/L'D'Q' +orthopédiste/S* +orthophonie/S* +orthophonique/S* +orthophoniste/S* +orthophosphate/S* +orthophosphorique/S* +orthophoto/S* +orthophotographie/S* +orthopnée/S* +orthoprothésiste/S* +orthoptère/S* +orthoptère/S* +orthoptie/S* +orthoptique/S* +orthoptiste/S* +orthopyroxène/S* +orthorexie/S* +orthorexique/S* +orthorhombique/S* +orthoscopie/S* +orthoscopique/S* +orthose/S* +orthostate/S* +orthostatique/S* +orthostatisme/S* +orthosympathique/S* +orthotrope/S* +orthotropie/S* +orthotropisme/S* +orthotypographie/S* +orthotypographique/S* +ortie/S* +ortolan/S* +orvale/S* +orvet/S* +orviétan/S* +orwellienne/F* +oryctérope/S* +oryx/L'D'Q' +os/L'D'Q' +oscabrion/S* +oscar/S* +oscariser/a2p+ +osciètre/S* +oscillante/F* +oscillation/S* +oscillatoire/S* +oscillatrice/F* +osciller/a1p. +oscillo-battante/F* +oscillo-coulissante/F* +oscillogramme/S* +oscillographe/S* +oscillomètre/S* +oscillométrique/S* +oscilloscope/S* +osculateur/S* +osculation/S* +osculatrice/F* +oscule/S* +ose/S* +oseille/S* +oser/a2p+ +oseraie/S* +oside/S* +osidique/S* +osier/S* +osiériculture/S* +osirienne/F* +osmique/S* +osmium/S* +osmolalité/S* +osmolarité/S* +osmolyte/S* +osmomètre/S* +osmonde/S* +osmoprotecteur/S* +osmose/S* +osmotique/S* +osmotrophe/S* +osque/S* +ossature/S* +osséine/S* +osselet/S* +ossement/S* +ossète/S* +osseuse/W* +ossianique/S* +ossianisme/S* +ossiculoplastie/S* +ossification/S* +ossifier/a4p+ +osso-buco/L'D'Q' +ossuaire/S* +ossue/F* +ost/S* +ostéalgie/S* +ostéichtyen/S* +ostéite/S* +ostensible/S* +ostensiblement/D'Q' +ostension/S* +ostensoir/S* +ostentation/S* +ostentatoire/S* +ostentatoirement/D'Q' +ostentatrice/F* +ostéoarthrite/S* +ostéoarticulaire/S* +ostéo-articulaire/S* +ostéoblaste/S* +ostéoblastique/S* +ostéoblastome/S* +ostéochondrite/S* +ostéoclasie/S* +ostéoclaste/S* +ostéocyte/S* +ostéodensitométrie/S* +ostéodystrophie/S* +ostéogenèse/S* +ostéogénie/S* +ostéologie/S* +ostéologique/S* +ostéolyse/S* +ostéomalacie/S* +ostéomyélite/S* +ostéonécrose/S* +ostéopathe/S* +ostéopathie/S* +ostéopathique/S* +ostéopénie/S* +ostéophyte/S* +ostéophytose/S* +ostéoplastie/S* +ostéopontine/S* +ostéoporose/S* +ostéoporotique/S* +ostéosarcome/S* +ostéosclérose/S* +ostéose/S* +ostéosynthèse/S* +ostéotomie/S* +ostiak/S* +ostinato/S* +ostiole/S* +ostracée/F* +ostracisation/S* +ostraciser/a2p+ +ostracisme/S* +ostracode/S* +ostracoderme/S* +ostracon/S* +ostréicole/S* +ostréicultrice/F* +ostréiculture/S* +ostréidé/S* +ostrogothe/F* +ostrogothique/S* +otage/S* +otalgie/S* +otarie/S* +ôter/a4p+ +otique/S* +otite/S* +otitique/S* +otocyon/S* +otocyste/S* +o-toit +otolite/S* +otolithe/S* +otolithique/S* +otolitique/S* +otologie/S* +otologique/S* +oto-rhino/S* +oto-rhino-laryngologie/S* +oto-rhino-laryngologique/S* +oto-rhino-laryngologiste/S* +otorragie/S* +otorrhée/S* +otosclérose/S* +otoscope/S* +otoscopie/S* +otospongiose/S* +ottomane/F* +ottonienne/F* +ou +où/D'Q'Qj +ouabaïne/S* +ouadi/D'Q' +ouah +ouaille/S* +ouais +ouananiche/S* +ouaouaron/S* +ouate/S* +ouater/a2p+ +ouateuse/W* +ouatiner/a2p+ +oubli/S* +oubliable/S* +oublie/S* +oubliée/F* +oublier/a4p+ +oubliette/S* +oublieuse/W* +ouche/S* +oud/S* +oued/S* +ouest/L'D'Q' +ouest-allemande/F* +ouf +oufti +ougandaise/F* +ougaritique/S* +ougrienne/F* +ouguiya/S* +oui +oui +oui-da +ouï-dire +ouïe/S* +ouïghour/S* +ouïgour/S* +ouillage/S* +ouille +ouiller/a2p+ +ouillère/S* +ouillière/S* +ouin +ouïr/iW +ouistiti/S. +oukase/S* +ouléma/S* +oulipienne/F* +oumma/S* +oups +ouragan/S* +ouralienne/F* +ouralo-altaïque/S* +ourder +ourdir/f4p+ +ourdissage/S* +ourdisserie/S* +ourdisseuse/F* +ourdissoir/S* +ourdou/S* +ourdoue/F* +ourler/a2p+ +ourlet/S* +ourleuse/F* +ourlienne/F* +ourse/F* +oursin/S* +oursonne/F* +oust +ouste +out/D'Q' +out/S* +outaouaise/F* +outarde/S* +outardeau/X* +outil/S* +outillage/S* +outiller/a4p+ +outilleuse/F* +outing/S* +outlaw/S* +outplacement/S* +output/S* +outrage/S* +outrageante/F* +outragée/F* +outrager/a2p+ +outrageuse/W* +outrageusement/D'Q' +outrance/S* +outrancière/F* +outrancièrement/D'Q' +outre +outre/Q' +outre/S* +outre-Atlantique/D'Q' +outre-Manche/D'Q' +outre-Quiévrain/D'Q' +outre-Rhin/D'Q' +outrecuidance/S* +outrecuidante/F* +outre-mer/D'Q' +outre-mer/L'D' +outremer/L'D'Q' +outremer/S* +outrepassement/S* +outrepasser/a2p+ +outrer/a2p+ +outre-tombe/L'D'Q' +outrigger/S* +outsider/S* +ouvertement/D'Q' +ouverture/S* +ouvrabilité/S* +ouvrable/S* +ouvrage/S* +ouvrager/a2p+ +ouvraison/S* +ouvrante/F* +ouvreau/X* +ouvre-boîte/S* +ouvre-boîtes/L'D'Q' +ouvre-bouteille/S* +ouvre-bouteilles/L'D'Q' +ouvre-gant/S* +ouvre-gants/L'D'Q' +ouvre-huître/S* +ouvre-huîtres/L'D'Q' +ouvrer/a2p+ +ouvreuse/F* +ouvrière/F* +ouvriérisme/S* +ouvriériste/S* +ouvrir/iC +ouvroir/S* +ouzbèke/F* +ouzo/S* +ovaire/S* +ovalaire/S* +ovalbumine/S* +ovale/S* +ovalie/S* +ovalisation/S* +ovaliser/a2p+ +ovariectomie/S* +ovarienne/F* +ovariohystérectomie/S* +ovarite/S* +ovate/S* +ovation/S* +ovationner/a2p+ +ove/S* +ovée/F* +overclocker/a4p+ +overclocking/S* +overdose/S* +overdrive/S* +ovibos/L'D'Q' +ovidé/S* +oviducte/S* +ovigène/S* +ovigère/S* +ovin/S* +ovine/F* +oviné/S* +ovipare/S* +oviparité/S* +ovipositeur/S* +oviposition/S* +oviscapte/S* +ovni/S* +ovo +ovocyte/S* +ovogenèse/S* +ovoïdale/W* +ovoïde/S* +ovoïde/S* +ovotestis +ovovivipare/S* +ovovivipare/S* +ovoviviparité/S* +ovulaire/S* +ovulation/S* +ovulatoire/S* +ovule/S* +ovulée/F* +ovuler/a1p. +oxacide/S* +oxalate/S* +oxalidacée/S* +oxalide/S* +oxalique/S* +oxalis/L'D'Q' +oxazépam/S* +oxazine/S* +oxazole/S* +oxford/S* +oxfordienne/F* +oxhydrique/S* +oxime/S* +oxonium/S* +oxyacétylénique/S* +oxycarbonée/F* +oxychlorure/S* +oxycodone/S* +oxycombustion/S* +oxycoupage/S* +oxycoupeuse/F* +oxycrat/S* +oxydabilité/S* +oxydable/S* +oxydante/F* +oxydase/S* +oxydation/S* +oxydative/F* +oxyde/S* +oxyder/a4p+ +oxydimétrie/S* +oxydoréductase/S* +oxydoréduction/S* +oxydo-réduction/S* +oxydoréductrice/F* +oxygénase/S* +oxygénation/S* +oxygène/S* +oxygéner/c4p+ +oxygénothérapie/S* +oxyhémoglobine/S* +oxyhydroxyde/S* +oxylithe/S* +oxymel/S* +oxymètre/S* +oxymétrie/S* +oxymore/S* +oxymoron/S* +oxyologie/S* +oxyrhine/S* +oxysulfure/S* +oxyton/S* +oxyure/S* +oxyurose/S* +oyat/S* +oz/||-- +ozène/S* +ozocérite/S* +ozokérite/S* +ozonation/S* +ozone/S* +ozonée/F* +ozoner/a2p+ +ozonide/S* +ozonisateur/S* +ozonisation/S* +ozoniser/a2p+ +ozoniseur/S* +ozonosphère/S* +p +pH/|| +pH-mètre/S.|| +paca/S. +pacage/S. +pacager/a0p+ +pacane/S. +pacanier/S. +pacemaker/S. +pace-maker/S. +pacfung/S. +pacha/S. +pachalik/S. +pachinko/S. +pachto/S. +pachtoune/S. +pachyderme/S. +pachydermie/S. +pachydermique/S. +pachyure/S. +pacifiante/F. +pacification/S. +pacificatrice/F. +pacifier/a0p+ +pacifique/S. +pacifiquement +pacifisme/S. +pacifiste/S. +pack/S. +package/S. +packager/S. +packageuse/F. +packaging/S. +packfung/S. +paclobutrazol/S. +pacotille/S. +pacquage/S. +pacquer/a0p+ +pacs +pacsée/F. +pacser/a0p+ +pacson/S. +pacte/S. +pactiser/a0p. +pactole/S. +paddock/S. +paddocker/a0p+ +paddy/A. +padichah/S. +padischah/S. +padisha/S. +padishah/S. +padou/S. +padoue/S. +paella/S. +paf +pagaie/S. +pagaïe/S. +pagaille/S. +paganiser/a0p+ +paganisme/S. +pagano-christianisme +pagayer/a0p. +pagayeuse/F. +page/S. +page-écran +pagel/S. +pageot/S. +pageoter/a0p+ +pager/a0p+ +pages-écrans +pagination/S. +paginer/a0p+ +pagne/S. +pagnote/S. +pagnote/S. +pagnoter/a0p+ +pagnoter/a0p. +pagode/S. +pagodon/S. +pagre/S. +pagure/S. +pagus/I. +paidologie/S. +paie/S. +paiement/S. +païenne/F. +païennement +paierie/S. +paillage/S. +paillarde/F. +paillardement +paillarder/a0p+ +paillardise/S. +paillasse/S. +paillasson/S. +paillassonnage/S. +paillassonner/a0p+ +paille +paille/S. +pailler/a0p+ +paillet/S. +pailletage/S. +pailleter/d0p+ +pailleteur/S. +paillette/S. +pailleuse/W. +paillis +paillon/S. +paillonner/a0p+ +paillot/S. +paillote/S. +pain/S. +paintball/S. +pair-à-pair +paire/F. +pairement +pairesse/S. +pairie/S. +pairle/S. +paisible/S. +paisiblement +paissance/S. +paisseau/X. +paisseler/d0p+ +paître/wS +paix +pajoter +pakistanaise/F. +pakistano-afghane/F. +pakol/S. +pal/S. +pala/S. +palabre/S. +palabrer/a0p. +palabreuse/F. +palace/S. +paladin/S. +palafitte/S. +palais +palan/S. +palanche/S. +palançon/S. +palancrer/a0p+ +palangre/S. +palangrer/a0p+ +palangrotte/S. +palanguer/a0p+ +palanque/S. +palanquée/S. +palanquer/a0p+ +palanquin/S. +palastre/S. +palatabilité/S. +palatale/W. +palatalisation/S. +palataliser/a0p+ +palatiale/W. +palatinat/S. +palatine/F. +palato-glosse/S. +palazzo/I. +pâle/S. +pale/S. +pale-ale/S. +palée/F. +palée/S. +palefrenière/F. +palefroi/S. +pâlement +pâlement +palémon/S. +paléoanthropologie/S. +paléo-anthropologie/S. +paléoanthropologue/S. +paléo-anthropologue/S. +paléobiogéographie/S. +paléobiogéographique/S. +paléobiologie/S. +paléobotanique/S. +paléobotaniste/S. +paléocène/S. +paléochrétienne/F. +paléoclimat/S. +paléoclimatique/S. +paléoclimatologie/S. +paléocortex +paléoécologie/S. +paléoenvironnement/S. +paléo-environnement/S. +paléoenvironnementale/W. +paléo-environnementale/W. +paléogène/S. +paléogéographie/S. +paléogéographique/S. +paléographe/S. +paléographie/S. +paléographique/S. +paléohistologie/S. +paléolithique/S. +paléomagnétique/S. +paléomagnétisme/S. +paléontologie/S. +paléontologique/S. +paléontologiste/S. +paléontologue/S. +paléoocéanographie/S. +paléo-océanographie/S. +paléopalynologie/S. +paléoptère/S. +paléorelief/S. +paléosol/S. +paléotempérature/S. +paléothérium/S. +paléozoïque/S. +paléozoïque/S. +paléozoologie/S. +paleron/S. +palestinienne/F. +palestre/S. +palet/S. +paletot/S. +palette/S. +paletter/a0p+ +palettisable/S. +palettisation/S. +palettiser/a0p+ +palettiseur/S. +palettiseur/S. +palétuvier/S. +pâleur/S. +pâlichonne/F. +palicinésie/S. +palière/F. +palikare/S. +palilalie/S. +palimpseste/S. +palindrome/S. +palindromique/S. +palingénésie/S. +palingénésique/S. +palinodie/S. +palinodique/S. +pâlir/f0p+ +palis +palissade/S. +palissader/a0p+ +palissadique/S. +palissage/S. +palissandre/S. +pâlissante/F. +pâlissement/S. +palisser/a0p+ +palissonnage/S. +palissonner/a0p+ +palissonneuse/F. +paliure/S. +palladianisme/S. +palladienne/F. +palladium/S. +pallasite/S. +palle/S. +palléale/W. +palliative/F. +pallidectomie/S. +pallidum/S. +pallier/a0p+ +pallikare/S. +pallium/S. +palmacée/S. +palma-christi +palmaire/S. +palmarès +palmatifide/S. +palmatilobée/F. +palmatiséquée/F. +palmature/S. +palme/S. +palmer/a0p+ +palmeraie/S. +palmette/S. +palmier/S. +palmifide/S. +palmilobée/F. +palmipartie/F. +palmipartite/S. +palmipède/S. +palmipède/S. +palmique/S. +palmiséquée/F. +palmiste/S. +palmiste/S. +palmitate/S. +palmite/S. +palmitine/S. +palmitique/S. +palmure/S. +palombe/S. +palombière/S. +palonnier/S. +palot/S. +paloter/a0p+ +pâlotte/F. +palourde/S. +palpable/S. +palpation/S. +palpe/S. +palpébrale/W. +palper/a0p+ +palpeur/S. +palpitante/F. +palpitation/S. +palpitement/S. +palpiter/a0p. +palplanche/S. +palsambleu +paltoquet/S. +paluche/S. +palucher/a0p+ +palud/S. +paludarium/S. +palude/S. +paludéenne/F. +paludière/F. +paludine/S. +paludique/S. +paludisme/S. +paludologie/S. +palus +palustre/S. +palynologie/S. +palynologique/S. +palynologue/S. +pâmer/a0p+ +pâmoison/S. +pampa/S. +pampéro/S. +pamphlet/S. +pamphlétaire/S. +pampille/S. +pamplemousse/S. +pamplemoussier/S. +pampre/S. +pan +pan/S. +panacée/S. +panachage/S. +panache/S. +panacher/a0p+ +panachure/S. +panade/S. +panafricaine/F. +panafricanisme/S. +panage/S. +panais +panama/S. +panaméenne/F. +panaméricaine/F. +panaméricanisme/S. +panarabisme/S. +panard/S. +panarde/F. +panaris +panatela/S. +panathénées +panax +pan-bagnat +pancake/S. +pancalisme/S. +pancarte/S. +panchromatique/S. +panchronique/S. +panclastite/S. +pancosmisme/S. +pancrace/S. +pancratiaste/S. +pancréas +pancréatectomie/S. +pancréatine/S. +pancréatique/S. +pancréatite/S. +pancytopénie/S. +panda/S. +pandanus +pandectes +pandèmes +pandémie/S. +pandémique/S. +pandémonium/S. +pandiculation/S. +pandiculer/a0p. +pandit/S. +pandoravirus +pandore/S. +pandour/S. +panégyrie/S. +panégyrique/S. +panégyriste/S. +panel/S. +panéliste/S. +panencéphalite/S. +paner/a0p+ +panerée/S. +paneterie/S. +panetière/F. +paneton/S. +panettone/S. +paneuropéenne/F. +pangermanique/S. +pangermanisme/S. +pangermaniste/S. +pangolin/S. +pangramme/S. +panhellénique/S. +panhellénisme/S. +panhypopituitarisme/S. +panic/S. +panicaut/S. +panicule/S. +paniculée/F. +panière/F. +panier-repas +paniers-repas +panifiable/S. +panification/S. +panifier/a0p+ +panini/S. +paniquante/F. +paniquarde/F. +panique/S. +paniquer/a0p+ +panislamique/S. +panislamisme/S. +panka/S. +panlogisme/S. +panmixie/S. +panne/S. +panneau/X. +panneautage/S. +panneauter/a0p+ +pannequet/S. +panner/a0p+ +panneresse/S. +panneton/S. +pannicule/S. +panniculite/S. +panonceau/X. +panophtalmie/S. +panoplie/S. +panoptique/S. +panorama/S. +panoramique/S. +panoramique/S. +panoramiquer/a0p. +panorpe/S. +panosse/S. +panoufle/S. +panpsychisme/S. +pansage/S. +pans-bagnats +panse/S. +pansement/S. +panser/a0p+ +panseuse/F. +pansexuelle/F. +panslave/S. +panslavisme/S. +panspermie/S. +pansue/F. +pantacourt/S. +pantagruélique/S. +pantalon/S. +pantalonnade/S. +pante/S. +pantelante/F. +panteler/d0p. +pantène/S. +pantenne/S. +panthéisme/S. +panthéiste/S. +panthéon/S. +panthéonisation/S. +panthéoniser/a0p+ +panthère/S. +pantière/S. +pantin/S. +pantographe/S. +pantoire/S. +pantoise/F. +pantomètre/S. +pantomime/S. +pantonyme/S. +pantonymie/S. +pantothénique/S. +pantouflage/S. +pantouflarde/F. +pantoufle/S. +pantoufler/a0p. +pantouflière/F. +pantoum/S. +pantropicale/W. +panty/A. +panure/S. +panurgisme/S. +panzer/S. +panzootie/S. +paonne/F. +paonneau/X. +papa/S. +papabile/S. +papable/S. +papaïne/S. +papale/W. +papamobile/S. +paparazzi/S. +paparazzo/I. +papauté/S. +papaver/S. +papavéracée/S. +papavéracée/S. +papavérine/S. +papaye/S. +papayer/S. +papegai/S. +papelarde/F. +papelardise/S. +paperasse/S. +paperasserie/S. +paperassière/F. +papesse/F. +papeterie/S. +papetière/F. +papette/S. +papier/S. +papier-calque +papier-filtre +papier-monnaie +papiers-calque +papiers-filtres +papiers-monnaies +papilionacée/F. +papilionacée/S. +papillaire/S. +papille/S. +papilleuse/W. +papillifère/S. +papillite/S. +papillomatose/S. +papillomavirus +papillome/S. +papillon/S. +papillonnage/S. +papillonnante/F. +papillonnement/S. +papillonner/a0p. +papillonneuse/F. +papillotage/S. +papillotante/F. +papillote/S. +papillotement/S. +papilloter/a0p+ +papion/S. +papisme/S. +papiste/S. +papivore/S. +papotage/S. +papoter/a0p. +papoteuse/F. +papouasienne/F. +papoue/F. +papouille/S. +papouiller/a0p+ +paprika/S. +papule/S. +papuleuse/W. +papy/S. +papy-boom/S. +papy-boomer/S. +papyrologie/S. +papyrologique/S. +papyrologue/S. +papyrus +pâque/S. +paquebot/S. +pâquerette/S. +paquet/S. +paquetage/S. +paquetée/F. +paqueteuse/F. +par +para/S. +parabase/S. +parabellum +parabellum/S. +paraben/S. +parabiose/S. +parabole/S. +parabolique/S. +paraboliquement +paraboloïde/S. +paracentèse/S. +paracétamol/S. +parachèvement/S. +parachever/b0p+ +parachimie/S. +parachronisme/S. +parachutage/S. +parachutale/W. +parachute/S. +parachutée/F. +parachuter/a0p+ +parachutisme/S. +parachutiste/S. +paraclet/S. +paracompacte/S. +parade/S. +parader/a0p. +paradeur/S. +paradigmatique/S. +paradigme/S. +paradis +paradisiaque/S. +paradisier/S. +parador/S. +parados +paradoxale/W. +paradoxalement +paradoxe/S. +paraffinage/S. +paraffine/S. +paraffiner/a0p+ +paraffinique/S. +parafiscale/W. +parafiscalité/S. +paraformaldéhyde/S. +parafoudre/S. +parage/S. +paragenèse/S. +paragneiss +paragoge/S. +paragogique/S. +paragraphe/S. +paragrêle/S. +paragrêle/S. +paraguante/S. +paraguayenne/F. +parahydroxybenzoïque/S. +paraison/S. +paraisonner/a0p+ +paraître +paraître/wQq+ +parajudiciaire/S. +parakératose/S. +paralangage/S. +paralipomènes +paralique/S. +paralittéraire/S. +paralittérature/S. +paraliturgie/S. +parallactique/S. +parallaxe/S. +parallèle/S. +parallèlement +parallélépipède/S. +parallélépipédique/S. +parallélisable/S. +parallélisation/S. +paralléliser/a0p+ +parallélisme/S. +parallélogramme/S. +paralogisme/S. +paralympique/S. +paralysante/F. +paralysée/F. +paralyser/a0p+ +paralysie/S. +paralytique/S. +paramagnétique/S. +paramagnétisme/S. +paramécie/S. +paramédic/S. +paramédicale/W. +paramentique/S. +paramétrable/S. +paramétrage/S. +paramètre/S. +paramétrer/c0p+ +paramétrique/S. +paramétriquement +paramétrisation/S. +paramétriser/a0p+ +paramilitaire/S. +paramnésie/S. +paramnésique/S. +paramoteur/S. +paranéoplasique/S. +parangon/S. +parangonnage/S. +parangonner/a0p+ +parano/S. +paranoïa/S. +paranoïaque/S. +paranoïde/S. +paranoïer/a1p. +paranormal +paranormale/W. +paranthrope/S. +paranymphe/S. +parapente/S. +parapentiste/S. +parapet/S. +parapétrolière/F. +parapharmaceutique/S. +parapharmacie/S. +parapharmacienne/F. +paraphasie/S. +paraphe/S. +parapher/a0p+ +paraphernale/W. +parapheur/S. +paraphilie/S. +paraphilique/S. +paraphimosis +paraphlébite/S. +paraphrasable/S. +paraphrase/S. +paraphraser/a0p+ +paraphraseuse/F. +paraphrastique/S. +paraphrénie/S. +paraphylétique/S. +paraphylie/S. +paraphyse/S. +paraplégie/S. +paraplégique/S. +parapluie/S. +parapode/S. +paraprotéine/S. +parapsychique/S. +parapsychologie/S. +parapsychologique/S. +parapublique/F. +paraquat/S. +parasange/S. +parascève/S. +parascolaire/S. +parasélène/S. +parasexualité/S. +parasismique/S. +parasitage/S. +parasitaire/S. +parasite/S. +parasiter/a0p+ +parasiticide/S. +parasiticide/S. +parasitique/S. +parasitisme/S. +parasitoïde/S. +parasitologie/S. +parasitologique/S. +parasitologiste/S. +parasitologue/S. +parasitose/S. +parasol/S. +parasomnie/S. +parastatale/W. +parasurtenseur/S. +parasympathique/S. +parasympathomimétique/S. +parasympathomimétique/S. +parasynthèse/S. +parasynthétique/S. +parataxe/S. +paratexte/S. +parathormone/S. +parathymie/S. +parathyroïde/S. +parathyroïde/S. +paratonnerre/S. +parâtre/S. +paratype/S. +paratyphique/S. +paratyphoïde/S. +paratyphoïde/S. +paravalanche/S. +paraveineuse/W. +paravent/S. +paraverbale/W. +paravolcanique/S. +paraxiale/W. +parbleu +parc/S. +parcage/S. +parce +parcellaire/S. +parcellarisation/S. +parcellariser/a0p+ +parcelle/S. +parcellement/S. +parceller/a0p+ +parcellisation/S. +parcelliser/a0p+ +parchemin/S. +parcheminer/a0p+ +parcheminerie/S. +parchemineuse/W. +parcheminière/F. +par-ci +parcimonie/S. +parcimonieuse/W. +parcimonieusement +parcmètre/S. +parcomètre/S. +parcourable/S. +parcourir/iE +parcours +par-dehors +par-delà +par-derrière +par-dessous +par-dessus +pardessus +par-devant +par-devant +par-devers +pardi +pardieu +pardon/S. +pardonnable/S. +pardonnante/F. +pardonner/a0p+ +paréage/S. +pare-avalanches +pare-balles +pare-balles +pare-battage +pare-boue +pare-brise +pare-brise/S. +pare-cendres +pare-chocs +pare-clous +parèdre/S. +pare-éclats +pare-étincelles +pare-étoupilles +pare-feu +pare-feu +pare-fumée +parégorique/S. +paréidolie/S. +pareil +pareille/F. +pareillement +parement/S. +parementer/a0p+ +parementure/S. +parémiologie/S. +parenchymateuse/W. +parenchyme/S. +pare-neige +parentale/W. +parentalies +parentalité/S. +parente/F. +parenté/S. +parentèle/S. +parentelle/S. +parentérale/W. +parenthésage/S. +parenthèse/S. +parenthésée/F. +paréo/S. +parer/a0p+ +parère/S. +parésie/S. +pare-soleil +paresse/S. +paresser/a0p. +paresseuse/W. +paresseusement +paresthésie/S. +pareuse/F. +pare-vapeur +pare-vapeur/S. +pare-vent +parfaire/wD +parfaite/F. +parfaitement +parfilage/S. +parfiler/a0p+ +parfin +parfois +parfondre/tA +parfum/S. +parfumer/a0p+ +parfumerie/S. +parfumeuse/F. +parhélie/S. +pari/S. +paria/S. +pariade/S. +pariage/S. +parian/S. +paridé/S. +paridigitidée/F. +parier/a0p+ +pariétaire/S. +pariétaire/S. +pariétale/W. +parieuse/F. +parigote/F. +paripennée/F. +parisette/S. +parisianisme/S. +parisianiste/S. +parisienne/F. +parisis +parisyllabique/S. +paritaire/S. +paritairement +paritarisme/S. +parité/S. +parjure/S. +parjurer/a0p+ +parka/S. +parkérisation/S. +parkériser/a0p+ +parking/S. +parkinsonienne/F. +parkinsonisme/S. +parkour/S. +par-là +parlable/S. +parlage/S. +parlando/S. +parlante/F. +parlement/S. +parlementaire/S. +parlementairement +parlementarisme/S. +parlementariste/S. +parlementer/a0p. +parler/S. +parler/a0p+ +parlerie/S. +parleuse/F. +parloir/S. +parlophone/S. +parlote/S. +parloter/a0p. +parlotte/S. +parlure/S. +parme +parmélie/S. +parmentier +parmenture/S. +parmesane/F. +parmi +parmi +parnasse/S. +parnassienne/F. +parodie/S. +parodier/a0p+ +parodique/S. +parodiquement +parodiste/S. +parodontale/W. +parodonte/S. +parodontie/S. +parodontiste/S. +parodontite/S. +parodontologie/S. +parodontologiste/S. +parodontologue/S. +parodontolyse/S. +parodontopathie/S. +parodontose/S. +paroi/S. +paroir/S. +paroisse/S. +paroissiale/W. +paroissienne/F. +parole/S. +paroli +parolière/F. +paronomase/S. +paronyme/S. +paronyme/S. +paronymie/S. +paronymique/S. +paronyque/S. +paroptique/S. +paros +parotide/S. +parotidienne/F. +parotidite/S. +parousie/S. +paroxysmale/W. +paroxysme/S. +paroxysmique/S. +paroxyste/S. +paroxystique/S. +paroxyton/S. +parpaillote/F. +parpaing/S. +parquer/a0p+ +parquet/S. +parquetage/S. +parqueter/d0p+ +parqueterie/S. +parqueteuse/F. +parquetière/F. +parqueuse/F. +parrain/S. +parrainage/S. +parrainer/a0p+ +parraineuse/F. +parricide/S. +parsec/S. +parsemer/b0p+ +parsie/F. +parsisme/S. +part/S. +partage/S. +partageable/S. +partager/a0p+ +partageuse/F. +partageuse/W. +partagiciel/S. +partance/S. +partant +partante/F. +partenaire/S. +partenariale/F. +partenariale/W. +partenariat/S. +partènement/S. +parterre/S. +parthe/S. +parthénocarpie/S. +parthénogenèse/S. +parthénogénétique/S. +parti/S. +partiaire/S. +partiale/W. +partialement +partialité/S. +participante/F. +participation/S. +participationniste/S. +participative/F. +participe/S. +participer/a0p. +participiale/W. +particratie/S. +particulaire/S. +particularisation/S. +particulariser/a0p+ +particularisme/S. +particulariste/S. +particularité/S. +particule/S. +particulière/F. +particulièrement +partie/S. +partielle/F. +partiellement +partir/i5q+ +partisane/F. +partisanerie/S. +partita/I. +partiteur/S. +partition/S. +partitionnement/S. +partitionner/a0p+ +partitive/F. +partoche/S. +parton/S. +partout +partouzarde/F. +partouze/S. +partouzer/a0p. +partouzeuse/F. +parturiente/S. +parturiente/S. +parturition/S. +parulie/S. +parure/S. +parurerie/S. +parurière/F. +parution/S. +parvenir/i0q+ +parvenue/F. +parvis +pas +pas +pas-à-pas +pas-à-pas +pascal/Um +pascale/F. +pascalienne/F. +pascaline/S. +pascaux +pas-d'âne +pas-de-géant +pas-de-porte +paseo/S. +pashmina/S. +pasionaria/S. +paso-doble +pasquin/S. +pasquinade/S. +passable/S. +passablement +passacaille/S. +passade/S. +passage/S. +passagère/F. +passagèrement +passante/F. +passation/S. +passavant/S. +passé +passe/S. +passe-bande +passe-boules +passe-coupe +passe-crassane +passe-droit +passe-droit/S. +passe-droits +passée/F. +passéisme/S. +passéiste/S. +passe-lacet +passe-lacet/S. +passe-lacets +passe-lait +passement/S. +passementer/a0p+ +passementerie/S. +passementière/F. +passe-montagne +passe-montagne/S. +passe-montagnes +passe-partout +passe-partout +passe-passe +passe-pied +passe-pied/S. +passe-pieds +passe-pierre +passe-pierre/S. +passe-pierres +passe-plat +passe-plat/S. +passe-plats +passepoil/S. +passepoile/S. +passepoiler/a0p+ +passeport/S. +passer/a0p+ +passerage/S. +passereau/X. +passerelle/S. +passériforme/S. +passerillage/S. +passerine/S. +passerinette/S. +passe-rose +passerose/S. +passe-roses +passe-temps +passe-thé +passette/S. +passeuse/F. +passe-velours +passe-vite +passe-volant +passe-volant/S. +passe-volants +passible/S. +passif/S. +passiflore/S. +passim +passing-shot/S. +passion/S. +passioniste/S. +passionnante/F. +passionnée/F. +passionnelle/F. +passionnellement +passionnément +passionner/a0p+ +passionnette/S. +passionniste/S. +passivation/S. +passive/F. +passivement +passiver/a0p+ +passivité/S. +passoire/S. +passure/S. +pastel +pastel/S. +pasteller/a0p+ +pastelliste/S. +pastenague/S. +pastèque/S. +pasteur/S. +pasteurellose/S. +pasteurienne/F. +pasteurisateur/S. +pasteurisation/S. +pasteurisatrice/F. +pasteuriser/a0p+ +pastichage/S. +pastiche/S. +pasticher/a0p+ +pasticheuse/F. +pastillage/S. +pastille/S. +pastiller/a0p+ +pastilleuse/F. +pastiquer/a0p. +pastis +pastorale/W. +pastoralement +pastoralisme/S. +pastoraliste/S. +pastoralité/S. +pastorat/S. +pastorienne/F. +pastoureau/X. +pastourelle/S. +pat +patache/S. +patachon/S. +patafioler/a0p+ +patagonne/F. +pataphysicienne/F. +pataphysique/S. +patapouf/S. +pataquès +pataras +patarasse/S. +patard/S. +patata +patate/S. +patati +patatoïde/S. +patatras +pataude/F. +pataugas +pataugeage/S. +pataugement/S. +pataugeoire/S. +patauger/a0p. +pataugeuse/F. +patch/S. +patcher/a0p+ +patchouli/S. +patchwork/S. +pâte/S. +pâté/S. +pâtée/S. +patelin/S. +patelinage/S. +pateline/F. +pateliner/a0p+ +patelinerie/S. +patellaire/S. +patelle/S. +patène/S. +patenôtre/S. +patenôtrier/S. +patentable/S. +patentage/S. +patente/F. +patenter/a0p+ +pater/S. +patère/S. +paterfamilias +paternalisme/S. +paternaliste/S. +paterne/S. +paternelle/F. +paternellement +paternité/S. +pâteuse/W. +pâteusement +pathétique/S. +pathétiquement +pathétisme/S. +pathogène/S. +pathogenèse/S. +pathogénicité/S. +pathogénie/S. +pathogénique/S. +pathognomonique/S. +pathologie/S. +pathologique/S. +pathologiquement +pathologisation/S. +pathologiser/a0p+ +pathologiste/S. +pathomimie/S. +pathos +pathosystème/S. +patibulaire/S. +patiemment +patience/S. +patiente/F. +patientèle/S. +patienter/a0p. +patin/S. +patinage/S. +patine/S. +patiner/a0p+ +patinette/S. +patineuse/F. +patinoire/S. +patio/S. +pâtir/f0p. +pâtis +pâtisser/a0p. +pâtisserie/S. +pâtissière/F. +pâtissoire/S. +pâtisson/S. +patoche/S. +patois +patoisante/F. +patoiser/a0p. +pâton/S. +patouillage/S. +patouillard/S. +patouille/S. +patouiller/a0p+ +patraque/S. +pâtre/S. +patres +patriarcale/W. +patriarcalement +patriarcat/S. +patriarche/S. +patriarchie/S. +patrice/S. +patriciale/W. +patriciat/S. +patricienne/F. +patriclan/S. +patrie/S. +patrilinéaire/S. +patrilocale/W. +patrimoine/S. +patrimoniale/W. +patrimonialisation/S. +patrimonialité/S. +patriotarde/F. +patriote/S. +patriotique/S. +patriotiquement +patriotisme/S. +patristique/S. +patristique/S. +patrologie/S. +patronage/S. +patronale/W. +patronat/S. +patronne/F. +patronner/a0p+ +patronnesse/S. +patronnière/F. +patronyme/S. +patronymique/S. +patrouille/S. +patrouiller/a0p. +patrouilleuse/F. +patte/S. +patte-d'oie +pattemouille/S. +patter/a0p+ +pattern/S. +pattes-d'oie +pattier/S. +pattinsonage/S. +pattue/F. +pâturable/S. +pâturage/S. +pâture/S. +pâturer/a0p+ +pâturin/S. +paturon/S. +pâturon/S. +pauchouse/S. +pauciflore/S. +paulette/S. +paulicienne/F. +paulienne/F. +paulinienne/F. +paulinisme/S. +pauliste/S. +paulownia/S. +paume/S. +paumée/F. +paumelle/S. +paumer/a0p+ +paumière/F. +paumoyer/a0p+ +paumure/S. +paupérisation/S. +paupériser/a0p+ +paupérisme/S. +paupière/S. +paupiette/S. +pause/S. +pause-café +pause-carrière +pauser/a0p. +pauses-café +pauses-carrière +pauvre/S. +pauvrement +pauvresse/S. +pauvreté/S. +pauvrette/F. +pavage/S. +pavane/S. +pavaner/a0p+ +pavé/S. +pavement/S. +paver/a0p+ +paveur/S. +pavie/S. +pavillon/S. +pavillonnaire/S. +pavillonnée/F. +pavillonnerie/S. +pavimenteuse/W. +pavlovienne/F. +pavois +pavoisement/S. +pavoiser/a0p+ +pavot/S. +paxille/S. +payable/S. +payante/F. +paye/S. +payement/S. +payer/a0p+ +payeuse/F. +pays +paysage/S. +paysagée/F. +paysagère/F. +paysagisme/S. +paysagiste/S. +paysannat/S. +paysanne/F. +paysannerie/S. +payse/S. +pc/||-- +péage/S. +péagère/F. +péagiste/S. +péan/S. +peau/X. +peaucier/S. +peaufinage/S. +peaufiner/a0p+ +peau-rouge +peausser/a0p. +peausserie/S. +peaussier/S. +peaux-rouges +pébibit/S. +pébioctet/S. +pébrine/S. +pébroc/S. +pébroque/S. +pécaïre +pecan/S. +pécan/S. +pécari/S. +peccable/S. +peccadille/S. +peccamineuse/W. +peccante/F. +pechblende/S. +pêche/S. +péché/S. +pêcher/S. +pêcher/a0p+ +pécher/c0p. +pécheresse/F. +pêcherie/S. +pêchette/S. +pêcheuse/F. +pêchue/F. +pecnot/S. +pécoptéris +pécore/S. +pecorino/I. +pecque/S. +pecquer/a0p. +pecten/S. +pectine/S. +pectinée/F. +pectiniculture/S. +pectique/S. +pectocellulosique/S. +pectoral/X. +pectorale/W. +péculat/S. +pécule/S. +pécuniaire/S. +pécuniairement +pédagogie/S. +pédagogique/S. +pédagogiquement +pédagogue/S. +pédalage/S. +pédale/S. +pédaler/a0p. +pédaleuse/F. +pédalier/S. +pédalo/S. +pédante/F. +pédanterie/S. +pédantesque/S. +pédantesquement +pédantisme/S. +pédé/S. +pédégée/F. +pédégère/S. +pédéraste/S. +pédérastie/S. +pédérastique/S. +pédestre/S. +pédestrement +pédiatre/S. +pédiatrie/S. +pédiatrique/S. +pedibus +pédicellaire/S. +pédicelle/S. +pédicellée/F. +pédiculaire/S. +pédiculaire/S. +pédicule/S. +pédiculée/F. +pédiculose/S. +pédicure/S. +pédicurie/S. +pédieuse/W. +pedigree/S. +pédiluve/S. +pédimane/S. +pédiment/S. +pédipalpe/S. +pédiplaine/S. +pédoclimatique/S. +pédocriminalité/S. +pédocriminelle/F. +pédodontie/S. +pédofaune/S. +pédoflore/S. +pédogenèse/S. +pédogénétique/S. +pédologie/S. +pédologique/S. +pédologue/S. +pédonculaire/S. +pédoncule/S. +pédonculée/F. +pédophile/S. +pédophilie/S. +pédophilique/S. +pédopornographe/S. +pédopornographie/S. +pédopornographique/S. +pédopsychiatre/S. +pédopsychiatrie/S. +pédopsychologie/S. +pédopsychologue/S. +pedum/S. +pedzouille/S. +peeling/S. +peep-show/S. +peer-to-peer +pégase/S. +pegmatite/S. +pégosité/S. +pègre/S. +pehlvi +peignage/S. +peigne/S. +peigne-cul +peigner/a0p+ +peignette/S. +peigneuse/F. +peignier/S. +peignoir/S. +peignures +peille/S. +peinarde/F. +peinardement +peindre/wB +peine/S. +peine-à-jouir +peiner/a0p+ +peintre/S. +peinture/S. +peinturer/a0p+ +peinturlurer/a0p+ +péjoration/S. +péjorative/F. +péjorativement +pékan/S. +péket/S. +pékin/S. +pékinée/F. +pékinoise/F. +pelade/S. +pelage/S. +pélagianisme/S. +pélagienne/F. +pélagique/S. +pelagos +pelain/S. +pélamide/S. +pélamyde/S. +pelanage/S. +pelard/S. +pélargonium/S. +pélasgienne/F. +pélasgique/S. +pélécaniforme/S. +peléenne/F. +péléenne/F. +pêle-mêle +pêle-mêle +peler/b0p+ +pèlerinage/S. +pèlerine/F. +péliade/S. +pélican/S. +pelisse/S. +pellagre/S. +pellagreuse/W. +pelle/S. +pelle-pioche +peller/a0p+ +pelles-pioches +pellet/S. +pelletage/S. +pelletée/S. +pelleter/d0p+ +pelleterie/S. +pelleteuse/F. +pelletière/F. +pelletiérine/S. +pelletisation/S. +pelliculage/S. +pelliculaire/S. +pellicule/S. +pelliculée/F. +pelliculeuse/W. +pellucide/S. +pélobate/S. +pélodyte/S. +pelotage/S. +pelotari/S. +pelote/S. +peloter/a0p+ +peloteuse/F. +peloton/S. +pelotonnement/S. +pelotonner/a0p+ +pelouse/S. +pelta/S. +peltaste/S. +pelte/S. +peltée/F. +peluche/S. +peluchée/F. +pelucher/a0p. +pelucheuse/W. +pelure/S. +pelvectomie/S. +pelvienne/F. +pelvigraphie/S. +pelvimètre/S. +pelvimétrie/S. +pelvimétrique/S. +pelvipéritonite/S. +pelvis +pembeniser/a0p+ +pemmican/S. +pemphigoïde/S. +pénale/W. +pénalement +pénalisable/S. +pénalisante/F. +pénalisation/S. +pénaliser/a0p+ +pénaliste/S. +pénalité/S. +penalty/A. +pénarde/F. +pénardement +pénates +penaude/F. +pence +penchant/S. +penchante/F. +pencher/a0p+ +pendable/S. +pendage/S. +pendaison/S. +pendant +pendant/S. +pendante/F. +pendarde/F. +pendeloque/S. +pendentif/S. +penderie/S. +pendiller/a0p. +pendillon/S. +pendiméthaline/S. +pendoir/S. +pendouiller/a0p. +pendre/tA +pendue/F. +pendulaire/S. +pendule/S. +penduler/a0p. +pendulette/S. +pêne/S. +pénéiculture/S. +pénéplaine/S. +pénétrabilité/S. +pénétrable/S. +pénétrance/S. +pénétrante/F. +pénétrateur/S. +pénétration/S. +pénétrer/c0p+ +pénétromètre/S. +pénibilité/S. +pénible/S. +péniblement +péniche/S. +pénichette/S. +pénicillée/F. +pénicillinase/S. +pénicilline/S. +pénicillinorésistante/F. +pénicillino-résistante/F. +pénicillium/S. +pénienne/F. +pénil/S. +péninsulaire/S. +péninsule/S. +pénis +pénitence/S. +pénitencerie/S. +pénitencier/S. +pénitente/F. +pénitentiaire/S. +pénitentiale/W. +pénitentielle/F. +pennage/S. +pennatule/S. +penne/S. +pennée/F. +penniforme/S. +pennines +pennon/S. +penny/A. +pénologie/S. +pénombre/S. +penon/S. +pensable/S. +pensante/F. +pense-bête/S. +pensée/S. +penser/a0p+ +penseuse/F. +pension/S. +pensionnaire/S. +pensionnat/S. +pensionnée/F. +pensionner/a0p+ +pensive/F. +pensivement +pensum/S. +pentachlorure/S. +pentacle/S. +pentacorde/S. +pentacrine/S. +pentacrinite/S. +pentadactyle/S. +pentadécagone/S. +pentaèdre/S. +pentaérythritol/S. +pentagonale/W. +pentagone/S. +pentagramme/S. +pentakidodécaèdre/S. +pentalogie/S. +pentamère/S. +pentamère/S. +pentamètre/S. +pentamidine/S. +pentane/S. +pentanol/S. +pentapole/S. +pentarchie/S. +pentasodique/S. +pentastomide/S. +pentasyllabe/S. +pentasyllabique/S. +pentateuque/S. +pentathlon/S. +pentathlonienne/F. +pentatome/S. +pentatonique/S. +pentavalente/F. +pente/S. +pentecôte/S. +pentecôtisme/S. +pentecôtiste/S. +pentédécagone/S. +penthiobarbital/S. +penthode/S. +penthotal/S. +pentitol/S. +pentlandite/S. +pentode/S. +pentosane/S. +pentose/S. +pentoxyde/S. +pentue/F. +penture/S. +penty/S. +pénultième/S. +pénurie/S. +pénurique/S. +péon/S. +people/S. +peopolisation/S. +péotte/S. +pep +pépé/S. +pépère/S. +pépère/S. +péperin/S. +pépètes +pépettes +pépiante/F. +pépie/S. +pépiement/S. +pépier/a0p. +pépin/S. +pépinière/S. +pépiniériste/S. +pépite/S. +péplum/S. +pépon/S. +péponide/S. +peppermint/S. +pepperoni/S. +pepsine/S. +peptidase/S. +peptide/S. +peptidique/S. +peptique/S. +peptone/S. +peptonisation/S. +péquenaude/F. +péquenotte/F. +péquin/S. +péquiste/S. +peracétique/S. +peracide/S. +pérail/S. +péramèle/S. +perborate/S. +perçable/S. +perçage/S. +percale/S. +percaline/S. +perçante/F. +perce/S. +percée/S. +perce-maille/S. +percement/S. +perce-muraille +perce-muraille/S. +perce-neige +percentile/S. +perce-oreille +perce-oreille/S. +perce-oreilles +perce-pierre +perce-pierre/S. +perce-pierres +percept/S. +perceptibilité/S. +perceptible/S. +perceptiblement +perception/S. +perceptionnisme/S. +perceptionniste/S. +perceptive/F. +perceptrice/F. +perceptuelle/F. +perceptuellement +percer/a0p+ +percerette/S. +perceuse/F. +percevable/S. +percevoir/pK +perche/S. +percher/a0p+ +percheronne/F. +percheuse/F. +perchis +perchiste/S. +perchlorate/S. +perchloréthylène/S. +perchlorique/S. +perchloroéthylène/S. +perchlorure/S. +perchman/A. +perchoir/S. +perciforme/S. +percipient/S. +percluse/F. +percnoptère/S. +perçoir/S. +percolateur/S. +percolation/S. +percoler/a8a9p+ +percussion/S. +percussionniste/S. +percussive/F. +percutanée/F. +percutante/F. +percuter/a0p+ +percuteur/S. +percuti-réaction/S. +perdable/S. +perdante/F. +perditance/S. +perdition/S. +perdre/tA +perdreau/X. +perdrigon/S. +perdrix +perdue/F. +perdurable/S. +perdurer/a0p. +père/S. +pérégrination/S. +pérégrine/F. +pérégriner/a0p. +péremption/S. +péremptoire/S. +péremptoirement +pérennante/F. +perenne +pérenne/S. +pérennisation/S. +pérenniser/a0p+ +pérennité/S. +péréquater/a0p+ +péréquation/S. +perestroïka +perf/S. +perfectibilité/S. +perfectible/S. +perfection/S. +perfectionnement/S. +perfectionner/a0p+ +perfectionnisme/S. +perfectionniste/S. +perfective/F. +perfide/S. +perfidement +perfidie/S. +perfoliée/F. +perforage/S. +perforante/F. +perforation/S. +perforatrice/F. +perforelieuse/F. +perforer/a0p+ +perforeuse/S. +performance/S. +performante/F. +performative/F. +performativité/S. +performeuse/F. +perfuser/a0p+ +perfusion/S. +pergélisol/S. +pergola/S. +péri/S. +périanthe/S. +périapicale/W. +périapse/S. +périartérite/S. +périarthrite/S. +périarticulaire/S. +périastre/S. +péribole/S. +péribuccale/W. +péricarde/S. +péricardique/S. +péricardite/S. +péricarpe/S. +périchondre/S. +périchondrite/S. +périclase/S. +périclitante/F. +périclitation/S. +péricliter/a0p. +péricope/S. +péricrâne/S. +péricycle/S. +péricyclique/S. +périderme/S. +péridot/S. +péridotite/S. +péridurale/W. +périe/F. +périgée/S. +périglaciaire/S. +périgourdine/F. +périgueux +périhélie/S. +périhélie/S. +périhépatite/S. +péri-informatique/S. +péri-informatique/S. +péril/S. +pérille/S. +périlleuse/W. +périlleusement +périlymphe/S. +périmer/a0p+ +périmètre/S. +périmétrie/S. +périmétrique/S. +périnatale/F. +périnatalité/S. +périnatalogie/S. +périnéale/W. +périnée/S. +périnéorraphie/S. +périnèvre/S. +période/S. +périodicité/S. +periodique/S. +périodique/S. +périodique/S. +périodiquement +périodisation/S. +périodonte/S. +périodontite/S. +périœsophagienne/F. +périonyxis +périorale/F. +périorbitaire/S. +périoste/S. +périostite/S. +péripate/S. +péripatéticienne/F. +péripatétique/S. +péripatétisme/S. +péripétie/S. +périph/S. +périphérie/S. +périphérique/S. +périphérique/S. +périphériquement +périphlébite/S. +périphrase/S. +périphraser/a0p. +périphrastique/S. +périple/S. +péripneumonie/S. +périptère/S. +périr/f0p. +périscolaire/S. +périscope/S. +périscopique/S. +périsperme/S. +périsplénite/S. +périspomène/S. +périspomène/S. +périssabilité/S. +périssable/S. +périssodactyle/S. +périssoire/S. +périssologie/S. +péristaltique/S. +péristaltisme/S. +péristase/S. +péristasis +péristome/S. +péristyle/S. +périsystole/S. +péritel +péritéléphonie/S. +péritexte/S. +périthèce/S. +péritoine/S. +péritonéale/W. +péritonite/S. +pérityphlite/S. +périurbaine/F. +péri-urbaine/F. +périurbanisation/S. +péri-urbanisation/S. +périvasculaire/S. +périzonium/S. +perle/S. +perlèche/S. +perler/a0p+ +perliculture/S. +perlière/F. +perlimpinpin +perlinguale/W. +perlite/S. +perlitique/S. +perlon/S. +perlot/S. +perlouse/S. +perlouze/S. +perluète/S. +perlure/S. +permacultrice/F. +permaculture/S. +permaculturelle/F. +permafrost/S. +permalien/S. +permalloy/S. +permanence/S. +permanencière/F. +permanente/F. +permanenter/a0p+ +permanganate/S. +permanganique/S. +perméabiliser/a0p+ +perméabilité/S. +perméable/S. +perméation/S. +permettre/vA +permienne/F. +permis +permission/S. +permissionnaire/S. +permissive/F. +permissivité/S. +permittivité/S. +permutabilité/S. +permutable/S. +permutante/F. +permutateur/S. +permutation/S. +permuter/a0p+ +pernicieuse/W. +pernicieusement +perniciosité/S. +péroné/S. +péronéo-tibiale/W. +péronier/S. +péronière/F. +péronisme/S. +péroniste/S. +péronnelle/S. +péroraison/S. +pérorer/a0p. +péroreuse/F. +pérot/S. +pérovskite/S. +peroxidase/S. +peroxydase/S. +peroxydation/S. +peroxyde/S. +peroxyder/a0p+ +peroxydique/S. +peroxysome/S. +perpendiculaire/S. +perpendiculaire/S. +perpendiculairement +perpendicularité/S. +perpète +perpétration/S. +perpétrer/c0p+ +perpette +perpétuation/S. +perpétuelle/F. +perpétuellement +perpétuer/a0p+ +perpétuité/S. +perpignanaise/F. +perplexe/S. +perplexité/S. +perquisiteur/S. +perquisition/S. +perquisitionnée/F. +perquisitionner/a0p. +perron/S. +perroquet/S. +perruche/S. +perruque/S. +perruquière/F. +persane/F. +persanophone/S. +perse/F. +perse/S. +persécutante/F. +persécutée/F. +persécuter/a0p+ +persécution/S. +persécutive/F. +persécutrice/F. +perséides +persel/S. +persévéramment +persévérance/S. +persévérante/F. +persévération/S. +persévérer/c0p. +persicaire/S. +persicot/S. +persienne/S. +persiflage/S. +persifler/a0p+ +persifleuse/F. +persil/S. +persillade/S. +persiller/a0p+ +persillère/S. +persique/S. +persistance/S. +persistante/F. +persister/a0p. +perso +persona/S. +personæ +personnage/S. +personnalisable/S. +personnalisation/S. +personnaliser/a0p+ +personnalisme/S. +personnaliste/S. +personnalité/S. +personne +personne/S. +personnel/S. +personnelle/F. +personnellement +personnification/S. +personnifier/a0p+ +perspective/F. +perspectivement +perspectivisme/S. +perspicace/S. +perspicacement +perspicacité/S. +perspirante/F. +perspiration/S. +perspirer/a0p+ +persuader/a0p+ +persuasion/S. +persuasive/F. +persuasivement +persulfate/S. +persulfure/S. +persulfurée/F. +perte/S. +perthite/S. +pertinemment +pertinence/S. +pertinente/F. +pertuis +pertuisane/S. +pertuisanier/S. +perturbable/S. +perturbante/F. +perturbation/S. +perturbative/F. +perturbatrice/F. +perturber/a0p+ +péruvienne/F. +pervenche +pervenche/S. +perverse/F. +perversement +perversion/S. +perversité/S. +pervertir/f0p+ +pervertissement +pervertisseuse/F. +pervibrage/S. +pervibrer/a0p+ +pérylène/S. +pesade/S. +pesage/S. +pesamment +pesant +pesante/F. +pesanteur/S. +pèse-acide +pèse-acide/S. +pèse-alcool +pèse-bébé +pèse-bébé/S. +pesée/S. +pèse-esprit +pèse-lait +pèse-lettre +pèse-lettre/S. +pèse-liqueur +pèse-liqueur/S. +pèse-moût +pèse-moût/S. +pèse-personne +pèse-personne/S. +peser/b0p+ +pèse-sel +pèse-sel/S. +pèse-sirop +pèse-sirop/S. +peseta/S. +pesette/S. +peseuse/F. +peseuse-ensacheuse +peseuses-ensacheuses +pèse-vin +peshmerga/S. +peso/S. +peson/S. +pessaire/S. +pesse/S. +pessière/S. +pessigner +pessimisme/S. +pessimiste/S. +peste/S. +pesteller/a0p. +pester/a0p. +pesteuse/W. +pesticide/S. +pestiférée/F. +pestiférer/c0p+ +pestilence/S. +pestilente/F. +pestilentielle/F. +pesto/S. +pet/S. +pétabit/S. +pétage/S. +pétainisme/S. +pétainiste/S. +pétale/S. +pétalisme/S. +pétaloïde/S. +pétamètre/S. +pétanque/S. +pétanqueuse/F. +pétante/F. +pétaoctet/S. +pétaradante/F. +pétarade/S. +pétarader/a0p. +pétard/S. +pétardage/S. +pétardement/S. +pétarder/a0p+ +pétase/S. +pétasse/S. +pétaudière/S. +pétaure/S. +pétauriste/S. +pet-de-nonne +pétéchiale/W. +pétéchie/S. +péter/c0p+ +pétersbourgeoise/F. +pète-sec +péteuse/F. +péteuse/W. +pétillante/F. +pétillement/S. +pétiller/a0p. +pétiole/S. +pétiolée/F. +petiote/F. +petit-beurre +petit-bois +petit-bourgeois +petit-boutiste/S. +petit-déj' +petit-déjeuner +petit-déjeuner/a0p. +petite/F. +petite-bourgeoise +petite-fille +petite-maîtresse +petitement +petite-nièce +petites-bourgeoises +petites-filles +petites-maîtresses +petites-nièces +petitesse/S. +petit-fils +petit-gris +pétition/S. +pétitionnaire/S. +pétitionnement/S. +pétitionner/a0p. +petit-lait +petit-maître +petit-nègre +petit-neveu +pétitoire/S. +pétitoire/S. +petit-pois +petits-beurre +petits-bois +petits-bourgeois +petits-déjeuners +petits-enfants +petits-fils +petits-gris +petits-laits +petits-maîtres +petits-neveux +petits-pois +petits-suisses +petit-suisse +pétocharde/F. +pétoche/S. +pétocher/a0p. +pétoire/S. +pétole/S. +pétomane/S. +peton/S. +pétoncle/S. +pétrarquisante/F. +pétrarquiser/a0p. +pétrarquisme/S. +pétrarquiste/S. +pétrée/F. +pétrel/S. +pétreuse/W. +pétrifiante/F. +pétrification/S. +pétrifier/a0p+ +pétrin/S. +pétrinienne/F. +pétrir/f0p+ +pétrissable/S. +pétrissage/S. +pétrisseuse/F. +pétrochimie/S. +pétrochimique/S. +pétrochimiste/S. +pétrodollar/S. +pétro-dollar/S. +pétrogale/S. +pétrogenèse/S. +pétroglyphe/S. +pétrographe/S. +pétrographie/S. +pétrographique/S. +pétrole/S. +pétrolette/S. +pétroleuse/F. +pétrolière/F. +pétrolifère/S. +pétrolochimie/S. +pétrolochimique/S. +pétrologie/S. +pétrologique/S. +pétrologiste/S. +pétrologue/S. +pétromonarchie/S. +pets-de-nonne +petto +pétulance/S. +pétulante/F. +pétun/S. +pétuner/a0p. +pétunia/S. +peu +peucédan/S. +peuchère +peuh +peuhle/F. +peule/F. +peulven/S. +peuplade/S. +peuple/S. +peuplement/S. +peupler/a0p+ +peupleraie/S. +peuplier/S. +peur/S. +peureuse/W. +peureusement +peut-être +peuton/S. +peyotl/S. +pèze/S. +pézize/S. +pfaffienne/F. +pfennig/S. +pff +pfft +pfut +ph/||-- +phacochère/S. +phacomètre/S. +phaéton/S. +phage/S. +phagédénique/S. +phagédénisme/S. +phagocytage/S. +phagocytaire/S. +phagocyte/S. +phagocyter/a0p+ +phagocytose/S. +phalaenopsis +phalange/S. +phalanger/S. +phalangette/S. +phalangienne/F. +phalangine/S. +phalangiste/S. +phalanstère/S. +phalanstérienne/F. +phalarope/S. +phalène/S. +phalère/S. +phaléristique/S. +phalline/S. +phallique/S. +phallocentrique/S. +phallocentrisme/S. +phallocrate/S. +phallocratie/S. +phallocratique/S. +phalloïde/S. +phalloïdine/S. +phalloplastie/S. +phallotoxine/S. +phallus +phanère/S. +phanérogame/S. +phanérogame/S. +phanérogamie/S. +phanie/S. +phantasme/S. +pharamineuse/W. +pharaonesque/S. +pharaonienne/F. +pharaonique/S. +pharaonne/F. +phare/S. +pharillon/S. +pharisaïque/S. +pharisaïsme/S. +pharisienne/F. +pharmaceutique/S. +pharmacie/S. +pharmacienne/F. +pharmacocinétique/S. +pharmacocinétique/S. +pharmacodépendance/S. +pharmacodépendante/F. +pharmacodynamie/S. +pharmacodynamique/S. +pharmacodynamique/S. +pharmacogénétique/S. +pharmacognosie/S. +pharmacologie/S. +pharmacologique/S. +pharmacologiste/S. +pharmacologue/S. +pharmacomanie/S. +pharmacopée/S. +pharmacotechnie/S. +pharmacothérapie/S. +pharmacovigilance/S. +pharyngale/W. +pharyngée/F. +pharyngienne/F. +pharyngite/S. +pharyngo-laryngite/S. +pharynx +phasage/S. +phascolome/S. +phase/S. +phasemètre/S. +phaser/a0p. +phasianidé/S. +phasme/S. +phasmide/S. +phasmidé/S. +phatique/S. +phelloderme/S. +phellogène/S. +phellogène/S. +phème/S. +phénacétine/S. +phénakisticope/S. +phénakistiscope/S. +phénanthrène/S. +phénate/S. +phencyclidine/S. +phénétique/S. +phénicienne/F. +phénicoptère/S. +phénique/S. +phéniquée/F. +phénix +phénobarbital/S. +phénocopie/S. +phénocristal/X. +phénol/S. +phénolate/S. +phénolique/S. +phénologie/S. +phénologique/S. +phénolphtaléine/S. +phénoménale/W. +phénoménalement +phénoménalisme/S. +phénoménalité/S. +phénomène/S. +phénoménique/S. +phénoménisme/S. +phénoméniste/S. +phénoménologie/S. +phénoménologique/S. +phénoménologiquement +phénoménologue/S. +phénoplaste/S. +phénotypage/S. +phénotype/S. +phénotypique/S. +phénotypiquement +phénylacétique/S. +phénylacétone/S. +phénylalanine/S. +phénylamine/S. +phénylbutazone/S. +phénylcétonurie/S. +phényle/S. +phényléphrine/S. +phénylique/S. +phénylpyruvique/S. +phéochromocytome/S. +phéomélanine/S. +phéon/S. +phéophycée/S. +phéromonale/W. +phéromone/S. +phi +philanthe/S. +philanthrope/S. +philanthropie/S. +philanthropique/S. +philatélie/S. +philatélique/S. +philatéliste/S. +philharmonie/S. +philharmonique/S. +philhellène/S. +philhellénique/S. +philhellénisme/S. +philibeg/S. +philippienne/F. +philippine/F. +philippique/S. +philistine/F. +philistinisme/S. +philo/S. +philodendron/S. +philologie/S. +philologique/S. +philologiquement +philologue/S. +philomathique/S. +philosophale/F. +philosophe/S. +philosopher/a0p. +philosophie/S. +philosophique/S. +philosophiquement +philosophisme/S. +philotechnique/S. +philtre/S. +phimosis +phlébite/S. +phlébographie/S. +phlébolithe/S. +phlébologie/S. +phlébologue/S. +phléborragie/S. +phlébothrombose/S. +phlébotome/S. +phlébotomie/S. +phlegmasie/S. +phlegmasique/S. +phlegmatique/S. +phlegme/S. +phlegmon/S. +phlegmoneuse/W. +phloème/S. +phlogistique/S. +phlogopite/S. +phlox +phlyctène/S. +phlycténulaire/S. +phobie/S. +phobique/S. +phobogène/S. +phocéenne/F. +phœniciculture/S. +phœnix +pholade/S. +pholiote/S. +pholque/S. +phoma/S. +phomopsis +phonation/S. +phonatoire/S. +phonatrice/F. +phone/S. +phonématique/S. +phonème/S. +phonémique/S. +phonéticienne/F. +phonétique/S. +phonétique/S. +phonétiquement +phonétisation/S. +phonétisme/S. +phoniatre/S. +phoniatrie/S. +phonie/S. +phonique/S. +phoniquement +phono/S. +phonocaptrice/F. +phonogénie/S. +phonogénique/S. +phonogramme/S. +phonogrammique/S. +phonographe/S. +phonographie/S. +phonographique/S. +phonographiquement +phonolite/S. +phonolithe/S. +phonolithique/S. +phonolitique/S. +phonologie/S. +phonologique/S. +phonologiquement +phonologisation/S. +phonologue/S. +phonométrie/S. +phonon/S. +phonotactique/S. +phonotactique/S. +phonothèque/S. +phoque/S. +phorésie/S. +phormion/S. +phormium/S. +phosgène/S. +phosgénite/S. +phosphatage/S. +phosphatase/S. +phosphatation/S. +phosphate/S. +phosphater/a0p+ +phosphatidique/S. +phosphatidylcholine/S. +phosphatidyléthanolamine/S. +phosphatidylsérine/S. +phosphatière/F. +phosphatine/S. +phosphatique/S. +phosphaturie/S. +phosphène/S. +phosphine/S. +phosphite/S. +phosphocalcique/S. +phospholipide/S. +phospholipidique/S. +phospho-potassique/S. +phosphoprotéine/S. +phosphore/S. +phosphorée/F. +phosphorémie/S. +phosphorer/a0p. +phosphorescence/S. +phosphorescente/F. +phosphoreuse/W. +phosphorique/S. +phosphorisation/S. +phosphorisme/S. +phosphorite/S. +phosphorylase/S. +phosphorylation/S. +phosphoryle/S. +phosphoryler/a0p+ +phosphure/S. +phot/S. +photique/S. +photo +photo/S. +photobiologie/S. +photocalque/S. +photocatalyse/S. +photocatalytique/S. +photocathode/S. +photocellule/S. +photochimie/S. +photochimique/S. +photochrome/S. +photochromie/S. +photochromique/S. +photochromisme/S. +photocomposeuse/S. +photocomposition/S. +photocompositrice/F. +photoconductivité/S. +photoconductrice/F. +photocopie/S. +photocopier/a0p+ +photocopieuse/F. +photocopillage/S. +photocoupleur/S. +photodermatose/S. +photodésintégration/S. +photodétecteur/S. +photodétection/S. +photodiode/S. +photodissociation/S. +photoélasticimétrie/S. +photo-élasticimétrie/S. +photoélectricité/S. +photo-électricité/S. +photoélectrique/S. +photo-électrique/S. +photoélectron/S. +photoélectronique/S. +photoémettrice/F. +photo-émettrice/F. +photoémission/S. +photo-émission/S. +photo-finish +photogène/S. +photogénie/S. +photogénique/S. +photogramme/S. +photogrammètre/S. +photogrammétrie/S. +photogrammétrique/S. +photographe/S. +photographie/S. +photographier/a0p+ +photographique/S. +photographiquement +photograveuse/F. +photogravure/S. +photohéliographe/S. +photo-interprétation/S. +photojournalisme/S. +photojournaliste/S. +photojournalistique/S. +photolecture/S. +photolithographie/S. +photoluminescence/S. +photolyse/S. +photomacrographie/S. +photomagnétique/S. +photomaton/S. +photomécanique/S. +photométéore/S. +photomètre/S. +photométrie/S. +photométrique/S. +photomicrographie/S. +photomontage/S. +photomorphogenèse/S. +photomultiplicateur/S. +photon/S. +photonique/S. +photonique/S. +photo-oxydative/F. +photopériode/S. +photopériodique/S. +photopériodisme/S. +photophile/S. +photophobie/S. +photophore/S. +photophosphorylation/S. +photopile/S. +photopique/S. +photorajeunissement/S. +photoréalisme/S. +photoréaliste/S. +photorécepteur/S. +photoréceptrice/F. +photoreportage/S. +photoreportrice/F. +photorésistance/S. +photorésistante/F. +photorespiration/S. +photo-robot +photosculpture/S. +photosensibilisant/S. +photosensibilisante/F. +photosensibilisation/S. +photosensibilité/S. +photosensible/S. +photos-finish +photosphère/S. +photosphérique/S. +photos-robots +photostat/S. +photostéréosynthèse/S. +photostyle/S. +photosynthèse/S. +photosynthétique/S. +photosynthétiquement +photosynthétiser/a0p+ +photosystème/S. +phototactisme/S. +phototaxie/S. +photothèque/S. +photothérapie/S. +phototransistor/S. +phototrophe/S. +phototrophie/S. +phototropie/S. +phototropique/S. +phototropisme/S. +phototype/S. +phototypie/S. +photovoltaïque/S. +phragmite/S. +phrase/S. +phrasé/S. +phraséologie/S. +phraséologique/S. +phraser/a0p+ +phraseuse/F. +phrasicoter +phrastique/S. +phratrie/S. +phréatique/S. +phrénique/S. +phrénologie/S. +phrénologique/S. +phrénologiste/S. +phrénologue/S. +phrygane/S. +phrygienne/F. +phtalate/S. +phtaléine/S. +phtalimide/S. +phtalique/S. +phtanite/S. +phtiriase/S. +phtiriasis +phtisie/S. +phtisiologie/S. +phtisiologue/S. +phtisique/S. +phycocyanine/S. +phycoérythrine/S. +phycologie/S. +phycomycète/S. +phylactère/S. +phylarque/S. +phylétique/S. +phyllade/S. +phyllie/S. +phyllite/S. +phyllopode/S. +phyllosilicate/S. +phyllosilicate/S. +phyllotaxie/S. +phylloxera/S. +phylloxéra/S. +phylloxérée/F. +phylloxérienne/F. +phylloxérique/S. +phylogenèse/S. +phylogénéticienne/F. +phylogénétique/S. +phylogénétique/S. +phylogénétiquement +phylogénie/S. +phylogénique/S. +phylogéniste/S. +phylogéographie/S. +phylogéographique/S. +phylum/I. +physalie/S. +physalis +physe/S. +physiatre/S. +physiatrie/S. +physicalisme/S. +physicaliste/S. +physicienne/F. +physico-chimie/S. +physico-chimique/S. +physico-chimiste/S. +physico-mathématique/S. +physico-théologique/S. +physiocrate/S. +physiocratie/S. +physiocratique/S. +physiognomonie/S. +physiognomonique/S. +physiognomonique/S. +physiognomoniste/S. +physiographe/S. +physiographie/S. +physiographique/S. +physiologie/S. +physiologique/S. +physiologiquement +physiologiste/S. +physionomie/S. +physionomique/S. +physionomiste/S. +physiopathologie/S. +physiopathologique/S. +physiothérapeute/S. +physiothérapie/S. +physique/S. +physiquement +physisorption/S. +physostigma/S. +physostigmine/S. +physostome/S. +phytéléphas +phytiatrie/S. +phytoalexine/S. +phytobiologie/S. +phytocénose/S. +phytochimie/S. +phytochrome/S. +phytocide/S. +phytocide/S. +phytoécologie/S. +phytoépuration/S. +phytogéographie/S. +phytohormone/S. +phytohormone/S. +phyto-hormone/S. +phytol/S. +phytolithe/S. +phytoœstrogène/S. +phyto-œstrogène/S. +phytopathogène/S. +phytopathologie/S. +phytopathologique/S. +phytophage/S. +phytophage/S. +phytopharmaceutique/S. +phytopharmacie/S. +phytophthora/S. +phytoplancton/S. +phytopte/S. +phytoremédiation/S. +phytorestauration/S. +phytosanitaire/S. +phytosociologie/S. +phytosociologue/S. +phytotechnie/S. +phytothérapeute/S. +phytothérapie/S. +phytotoxicité/S. +phytotoxicité/S. +phyto-toxicité/S. +phytotoxique/S. +phytotoxique/S. +phyto-toxique/S. +phytotron/S. +phytotronique/S. +phytozoaire/S. +pi +pi/||-- +piaculaire/S. +piaf/S. +piaffante/F. +piaffement/S. +piaffer/a0p. +piaffeuse/F. +piaillarde/F. +piaillement/S. +piailler/a0p. +piaillerie/S. +piailleuse/F. +pian/S. +piane-piane +pianino/S. +pianissimo +pianissimo/I. +pianiste/S. +pianistique/S. +piano +piano/S. +piano-bar +pianoforte +pianos-bars +pianotage/S. +pianoter/a0p+ +piassava/S. +piastre/S. +piaule/S. +piaulement/S. +piauler/a0p. +piaute/S. +piazza/S. +pibale/S. +pible +pibrock/S. +pic/S. +pica/S. +picador/S. +picage/S. +picaillon/S. +picardan/S. +picarde/F. +picarel/S. +picaresque/S. +picaro/S. +pic-bois +piccalilli/S. +piccolo/S. +pichenette/S. +pichet/S. +picholine/S. +picklage/S. +pickles +pickpocket/S. +pick-up +picodon/S. +picoler/a0p+ +picoleuse/F. +picorage/S. +picorée/S. +picorer/a0p+ +picoreuse/F. +picot/S. +picotage/S. +picotement/S. +picoter/a0p+ +picotin/S. +picpoul/S. +picrate/S. +picridium/S. +picrique/S. +picris +picrite/S. +picrocholine/S. +picrocholine/S. +pics-bois +pics-verts +picte/S. +picter/a0p+ +pictogramme/S. +pictographie/S. +pictographique/S. +pictorialisme/S. +picturale/W. +picturalement +pic-vert +pidgin/S. +pie +pie/S. +pièce/S. +piécette/S. +pied/S. +pied-à-terre +pied-bot +pied-d'alouette +pied-de-biche +pied-de-cheval +pied-de-chèvre +pied-de-loup +pied-de-mouton +pied-de-poule +pied-de-veau +pied-d'oiseau +pied-droit +piédestal/X. +pied-fort +piedmont/S. +pied-noir +piédouche/S. +pied-plat +piédroit/S. +pieds-bots +pieds-d'alouette +pieds-de-biche +pieds-de-cheval +pieds-de-chèvre +pieds-de-loup +pieds-de-mouton +pieds-de-poule +pieds-de-veau +pieds-d'oiseau +pieds-droits +pieds-forts +pieds-noirs +pieds-plats +piéfort/S. +piège/S. +piégeable/S. +piégeage/S. +piéger/c0p+ +piégeuse/F. +piégeuse/W. +pie-grièche +piémont/S. +piémontaise/F. +pier/S. +piercing/S. +piéride/S. +pierrade/S. +pierrage/S. +pierraille/S. +pierre/S. +pierrer/a0p+ +pierreries +pierrette/S. +pierreuse/W. +pierrier/S. +pierrière/S. +pierrot/S. +pies-grièches +pietà +piétaille/S. +piété/S. +piétement/S. +piéter/c0p+ +piétin/S. +piétinante/F. +piétinement/S. +piétiner/a0p+ +piétisme/S. +piétiste/S. +piétonisation/S. +piétonne/F. +piétonnière/F. +piètre/S. +piètrement +piètrerie/S. +pieu/X. +pieuse/W. +pieusement +pieuter/a0p+ +pieuvre/S. +pièze/S. +piézoélectricité/S. +piézo-électricité/S. +piézoélectrique/S. +piézo-électrique/S. +piézographe/S. +piézographie/S. +piézomètre/S. +piézométrie/S. +piézométrique/S. +piézorésistive/F. +pif/S. +piffer/a0p+ +pifferaro/I. +pifomètre/S. +pifométrie/S. +pifométrique/S. +pige/S. +pigeonnante/F. +pigeonne/F. +pigeonneau/X. +pigeonner/a0p+ +pigeonnier/S. +piger/a0p+ +pigiste/S. +pigment/S. +pigmentaire/S. +pigmentation/S. +pigmenter/a0p+ +pignada/S. +pignade/S. +pignatelle/S. +pigne/S. +pigner/a0p. +pignocher/a0p+ +pignoler/a0p+ +pignon/S. +pignorative/F. +pignoufe/F. +pilaf/S. +pilage/S. +pilaire/S. +pilastre/S. +pilchard/S. +pile/S. +piler/a0p+ +pilet/S. +pileuse/F. +pileuse/W. +pilier/S. +pilifère/S. +pili-pili +pilipili/S. +pillage/S. +pillarde/F. +piller/a0p+ +pilleuse/F. +pilocarpe/S. +pilocarpine/S. +pilon/S. +pilonnage/S. +pilonner/a0p+ +pilori/S. +pilo-sébacée/F. +piloselle/S. +pilosisme/S. +pilosité/S. +pilot/S. +pilotable/S. +pilotage/S. +pilote/S. +piloter/a0p+ +pilotin/S. +pilotis +pilou/S. +pilpoul/S. +pils +pilulaire/S. +pilule/S. +piluler/a0p. +pilulier/S. +pilum/S. +pimbêche/S. +piment/S. +pimenter/a0p+ +pimer/a0p+ +pimpante/F. +pimpesouée/S. +pimprenelle/S. +pin/S. +pinacée/S. +pinacle/S. +pinacothèque/S. +pinaillage/S. +pinailler/a0p. +pinailleuse/F. +pinard/S. +pinardier/S. +pinasse/S. +pinastre/S. +pinçage/S. +pinçarde/F. +pince/S. +pinceau/X. +pincée/S. +pince-fesses +pincelier/S. +pince-maille +pince-maille/S. +pincement/S. +pince-monseigneur +pince-nez +pince-notes +pince-oreille/S. +pince-oreilles +pincer/a0p+ +pince-sans-rire +pinces-monseigneur +pincette/S. +pinceuse/F. +pincharde/F. +pinçon/S. +pinçure/S. +pindarique/S. +pindariser/a0p. +pindarisme/S. +pindouler/a0p. +pine/S. +pinéale/W. +pineau/X. +pinède/S. +piner/a0p+ +pineraie/S. +pingler +pingouin/S. +ping-pong +ping-pong/S. +pingre/S. +pingrerie/S. +pinière/S. +pinne/S. +pinnipède/S. +pinnothère/S. +pinnule/S. +pinocytose/S. +pinot/S. +pin's +pinson/S. +pintade/S. +pintadeau/X. +pintadine/S. +pinte/S. +pinter/a0p+ +pin-up +pinyin +piochage/S. +pioche/S. +piochement/S. +piocher/a0p+ +piocheuse/F. +pioger/a0p. +piolet/S. +pioncer/a0p. +pionne/F. +pionner/a0p. +pionnière/F. +piorne/S. +pioupiou/S. +pipe/S. +pipeau/X. +pipeauter/a0p+ +pipée/S. +pipelette/F. +pipeline/S. +pipe-line/S. +piper/a0p+ +pipéracée/S. +piperade/S. +piper-cub/S. +pipéridine/S. +piperie/S. +pipérine/S. +pipéronal/S. +pipeter/d0p+ +pipette/S. +pipeuse/F. +pipi/S. +pipière/F. +pipi-room/S. +pipistrelle/S. +pipit/S. +piquage/S. +piquant/S. +piquante/F. +pique/S. +pique-assiette +pique-assiette/S. +pique-bœuf +pique-bœuf/S. +pique-bois +piquée/F. +pique-feu +pique-fleurs +pique-fruits +pique-nique/S. +pique-niquer/a0p. +pique-niqueuse/F. +pique-notes +piquer/a0p+ +piquerie/S. +piquet/S. +piquetage/S. +piqueter/d0p+ +piquette/S. +piqueur/S. +piqueuse/W. +piquier/S. +piquoir/S. +piquouse/S. +piquouser/a0p+ +piqûre/S. +piranha/S. +piratage/S. +pirate/S. +pirater/a0p+ +piraterie/S. +piraya/S. +pire/S. +pire/S. +piriforme/S. +pirogue/S. +piroguière/F. +pirojki +pirole/S. +piroplasmose/S. +pirouette/S. +pirouettement/S. +pirouetter/a0p. +pis +pis +pis +pis-aller +piscicole/S. +piscicultrice/F. +pisciculture/S. +pisciforme/S. +piscine/S. +piscivore/S. +pisé/S. +pisiforme/S. +pisolite/S. +pisolithe/S. +pisolithique/S. +pisolitique/S. +pissaladière/S. +pissat/S. +pisse/S. +pisse-copie/S. +pisse-froid +pissement/S. +pissenlit/S. +pisser/a0p+ +pissette/S. +pisseuse/F. +pisseuse/W. +pisse-vinaigre +pissodrome/S. +pissoir/S. +pissoter/a0p. +pissotière/S. +pistache +pistache/S. +pistacher/a0p+ +pistachier/S. +pistage/S. +pistarde/F. +piste/S. +pister/a0p+ +pisteuse/F. +pistil/S. +pistillée/F. +pistolage/S. +pistole/S. +pistolero/S. +pistolet/S. +pistolet-mitrailleur +pistolets-mitrailleurs +pistoleuse/F. +piston/S. +pistonnée/F. +pistonner/a0p+ +pistou/S. +pita/S. +pitance/S. +pitancher/a0p+ +pitaude/F. +pitaya/S. +pitbull/S. +pit-bull/S. +pitch/A. +pitchoune/F. +pitchounette/F. +pitchpin/S. +pite/S. +piter/a0p. +piteuse/W. +piteusement +pithécanthrope/S. +pithiatique/S. +pithiatisme/S. +pithiviers +pitié/S. +piton/S. +pitonnage/S. +pitonner/a0p. +pitoyable/S. +pitoyablement +pitre/S. +pitrerie/S. +pittoresque/S. +pittoresquement +pittosporum/S. +pituitaire/S. +pituite/S. +pityriasis +pive/S. +pivert/S. +pivoine/S. +pivot/S. +pivotable/S. +pivotage/S. +pivotante/F. +pivotement/S. +pivoter/a0p+ +pixel/S. +pixeliser/a0p+ +pixellisation/S. +pizza/S. +pizzaiolo/I. +pizzaïolo/S. +pizzeria/S. +pizzicato/I. +placage/S. +placard/S. +placardage/S. +placarder/a0p+ +placardisation/S. +placardiser/a0p+ +place/S. +placebo/S. +placement/S. +placenta/S. +placentaire/S. +placentation/S. +placer/S. +placer/a0p+ +placette/F. +placeuse/F. +placide/S. +placidement +placidité/S. +placière/F. +placoderme/S. +placoter/a0p. +plafond/S. +plafonnage/S. +plafonnement/S. +plafonner/a0p+ +plafonneur/S. +plafonnier/S. +plagale/W. +plage/S. +plagiaire/S. +plagiat/S. +plagier/a0p+ +plagiocéphalie/S. +plagioclase/S. +plagiostome/S. +plagiotrope/S. +plagiotropie/S. +plagiotropisme/S. +plagiste/S. +plaid/S. +plaidable/S. +plaidante/F. +plaider/a0p+ +plaider-coupable +plaideuse/F. +plaidoirie/S. +plaidoyer/S. +plaie/S. +plaignante/F. +plaignarde/F. +plain/S. +plain-chant +plaindre/wO +plaine/F. +plainer/a0p+ +plain-pied +plains-chants +plainte/S. +plaintive/F. +plaintivement +plaire/wNq. +plaisamment +plaisance/S. +plaisancière/F. +plaisante/F. +plaisanter/a0p+ +plaisanterie/S. +plaisantin/S. +plaisir/S. +plan/S. +planage/S. +planaire/S. +planante/F. +planar/S. +planarisation/S. +planche/S. +planchéiage/S. +planchéier/a0p+ +plancher/S. +plancher/a0p. +plancher-dalle +planchers-dalles +planchers-terrasses +plancher-terrasse +planchette/S. +planchiste/S. +plançon/S. +plan-concave/S. +plan-convexe/S. +plancton/S. +planctonique/S. +planctophage/S. +plane/F. +planéité/S. +planement/S. +planer/a0p+ +planétaire/S. +planétaire/S. +planétairement +planétarisation/S. +planétarium/S. +planète/S. +planétésimale/W. +planétoïde/S. +planétologie/S. +planétologique/S. +planétologue/S. +planeuse/F. +planèze/S. +planifiable/S. +planification/S. +planificatrice/F. +planifier/a0p+ +planigramme/S. +planimétrage/S. +planimètre/S. +planimétrie/S. +planimétrique/S. +planipenne/S. +planisme/S. +planisphère/S. +planisphérique/S. +planiste/S. +planitude/S. +planning/S. +planoir/S. +planorbe/S. +planque/S. +planquée/F. +planquer/a0p+ +plan-relief +plan-séquence +plansichter/S. +plans-reliefs +plans-séquences +plantage/S. +plantaginacée/S. +plantain/S. +plantaire/S. +plantard/S. +plantation/S. +plante/F. +planter/a0p+ +planteuse/F. +plantigrade/S. +plantoir/S. +planton/S. +plantule/S. +plantureuse/W. +plantureusement +planure/S. +plaquage/S. +plaque/S. +plaquemine/S. +plaqueminier/S. +plaquer/a0p+ +plaquettaire/S. +plaquette/S. +plaqueuse/F. +plaquiste/S. +plasma/S. +plasmagène/S. +plasmaphérèse/S. +plasmatique/S. +plasmide/S. +plasmidique/S. +plasmifier/a0p+ +plasmine/S. +plasmique/S. +plasmocyte/S. +plasmocytome/S. +plasmode/S. +plasmodesme/S. +plasmodium/S. +plasmoïde/S. +plasmolyse/S. +plasmolysée/F. +plaste/S. +plastic/S. +plasticage/S. +plasticienne/F. +plasticine/S. +plasticité/S. +plastie/S. +plastifiante/F. +plastificateur/S. +plastification/S. +plastifier/a0p+ +plastifieuse/S. +plastigel/S. +plastination/S. +plastiquage/S. +plastique/S. +plastiquement +plastiquer/a0p+ +plastiqueuse/F. +plastisol/S. +plastron/S. +plastronner/a0p+ +plasturgie/S. +plasturgique/S. +plasturgiste/S. +platane/S. +plataniste/S. +plat-bord +plate/F. +plateau/X. +plateau-repas +plateaux-repas +plate-bande +platebande/S. +platée/S. +plate-forme +plateforme/S. +platelage/S. +platement +plateresque/S. +plates-bandes +plates-formes +plateure/S. +plathelminthe/S. +platier/S. +platière/S. +platinage/S. +platine/S. +platiner/a0p+ +platinifère/S. +platiniser/a0p+ +platinite/S. +platinocyanure/S. +platinoïde/S. +platinotypie/S. +platitude/S. +platonicienne/F. +platonique/S. +platoniquement +platonisme/S. +plâtrage/S. +plâtras +plâtre/S. +plâtrée/S. +plâtrer/a0p+ +plâtrerie/S. +plâtreuse/W. +plâtrière/F. +plats-bords +plausibilité/S. +plausible/S. +plausiblement +playback/S. +play-back/S. +playboy/S. +play-boy/S. +playlist/S. +play-list/S. +playon/S. +pléban/S. +plèbe/S. +plébéienne/F. +plébiscitaire/S. +plébiscite/S. +plébisciter/a0p+ +plécoptère/S. +plecquer/a0p. +plectre/S. +pléiade/S. +plein/S. +pleine/F. +pleinement +plein-emploi +pleins-temps +pleins-vents +plein-temps +plein-vent +pléiotrope/S. +pléiotropie/S. +pléistocène/S. +pléistocène/S. +plénière/F. +plénièrement +plénipotentiaire/S. +plénitude/S. +plenum/S. +plénum/S. +pléochroïque/S. +pléochroïsme/S. +pléonasme/S. +pléonaste/S. +pléonastique/S. +pléonastiquement +plérôme/S. +plésiomorphe/S. +plésiomorphie/S. +plésiosaure/S. +pléthore/S. +pléthorique/S. +pleur/S. +pleurage/S. +pleurale/W. +pleurante/F. +pleurarde/F. +pleurectomie/S. +pleure-misère +pleurer/a0p+ +pleurésie/S. +pleurétique/S. +pleureuse/F. +pleurite/S. +pleurnicharde/F. +pleurnichement/S. +pleurnicher/a0p. +pleurnicherie/S. +pleurnicheuse/F. +pleurobranche/S. +pleurodynie/S. +pleuronecte/S. +pleuronectiforme/S. +pleuropneumonie/S. +pleuroscopie/S. +pleurote/S. +pleurotomie/S. +pleutre/S. +pleutrerie/S. +pleuvasser/a8p. +pleuviner/a8p. +pleuvioter/a8p. +pleuvoir/pZ +pleuvoter/a8p. +plèvre/S. +plexiglas +plexus +pleyon/S. +pli/S. +pliable/S. +pliage/S. +pliante/F. +plicature/S. +plie/S. +pliement/S. +plier/a0p+ +plieuse/F. +plinthe/S. +pliocène/S. +plioir/S. +pliosaure/S. +plique/S. +plissage/S. +plissement/S. +plisser/a0p+ +plisseuse/F. +plissure/S. +pliure/S. +ploc +ploïdie/S. +ploiement/S. +plomb/S. +plombage/S. +plombagine/S. +plombante/F. +plombate/S. +plombe/S. +plombémie/S. +plomber/a0p+ +plomberie/S. +plombeur/S. +plombeuse/W. +plombière/F. +plombifère/S. +plomboir/S. +plombure/S. +plommée/S. +plonge/S. +plongeable/S. +plongeante/F. +plongée/S. +plongement/S. +plongeoir/S. +plongeon/S. +plonger/a0p+ +plongeuse/F. +ploquer/a0p+ +plot/S. +plouc/S. +plouf +plouk/S. +ploutocrate/S. +ploutocratie/S. +ploutocratique/S. +ployable/S. +ployage/S. +ployante/F. +ployer/a0p+ +pluche/S. +plucher/a0p. +plucheuse/W. +plugin/S. +plug-in/S. +pluie/S. +plumage/S. +plumaison/S. +plumard/S. +plumasseau/X. +plumasserie/S. +plumassière/F. +plum-cake/S. +plume/S. +plumeau/X. +plumer/a0p+ +plumet/S. +plumetée/F. +plumetis +plumette/S. +plumeuse/F. +plumeuse/W. +plumier/S. +plumitif/S. +plum-pudding/S. +plumule/S. +plupart +plurale/W. +pluralisation/S. +pluraliser/a0p+ +pluralisme/S. +pluraliste/S. +pluralité/S. +pluriactivité/S. +pluriannuelle/F. +pluricellulaire/S. +pluriculturelle/F. +pluridimensionnalité/S. +pluridimensionnelle/F. +pluridisciplinaire/S. +pluridisciplinaire/S. +pluri-disciplinaire/S. +pluridisciplinarité/S. +plurielle/F. +pluriethnique/S. +pluri-ethnique/S. +plurilatérale/W. +plurilingue/S. +plurilinguisme/S. +plurimillénaire/S. +plurimodale/W. +plurinationale/W. +plurinominale/W. +pluripartisme/S. +pluripartite/S. +pluripotence/S. +pluripotente/F. +pluriséculaire/S. +plurisousharmonique/S. +plurispécifique/S. +plurithématique/S. +pluri-thématique/S. +plurithérapie/S. +plurivalente/F. +plurivocité/S. +plurivoque/S. +plus +plus +plusieurs +plus-que-parfait/S. +plussoyer/a0p+ +plus-value/S. +plutino/S. +plutoïde/S. +pluton/S. +plutonienne/F. +plutonigène/S. +plutonique/S. +plutonisme/S. +plutonium/S. +plutôt +pluviale/W. +pluvian/S. +pluvier/S. +pluvieuse/W. +pluviner/a8p. +pluviomètre/S. +pluviométrie/S. +pluviométrique/S. +pluvio-nivale/W. +pluviôse/S. +pluviosité/S. +pneu/S. +pneumallergène/S. +pneumatique/S. +pneumatiquement +pneumatisme/S. +pneumatologie/S. +pneumatophore/S. +pneumatothérapie/S. +pneumaturie/S. +pneumectomie/S. +pneumococcie/S. +pneumoconiose/S. +pneumocoque/S. +pneumocystose/S. +pneumogastrique/S. +pneumographie/S. +pneumologie/S. +pneumologique/S. +pneumologue/S. +pneumomédiastin/S. +pneumonectomie/S. +pneumonie/S. +pneumonique/S. +pneumopathie/S. +pneumopéritoine/S. +pneumostome/S. +pneumothorax +po/||-- +pochade/S. +pochage/S. +pocharde/F. +pocharder/a0p+ +pochardise/S. +poche/S. +pocher/a0p+ +pochetée/S. +pochetronne/F. +pochetronner/a0p+ +pochette/S. +pochettes-surprises +pochette-surprise +pocheuse/S. +pochoir/S. +pochon/S. +pochouse/S. +pochtronne/F. +podagre/S. +podagre/S. +podaire/S. +podalique/S. +podcast/S. +podcaster/a0p+ +podcasteuse/F. +podcasting/S. +podestat/S. +podiatre/S. +podiatrie/S. +podiatrique/S. +podium/S. +podologie/S. +podologique/S. +podologue/S. +podomètre/S. +podo-orthésiste/S. +podoscaphe/S. +podotactile/S. +podzol/S. +podzolique/S. +podzolisation/S. +podzoliser/a0p+ +poe/S. +pœcilandrie/S. +pœcile/S. +pœcilitique/S. +pœcilogynie/S. +pœcilotherme/S. +pœcilotherme/S. +pœcilothermie/S. +poêlage/S. +poêle/S. +poêler/a0p+ +poêlier/S. +poêlon/S. +poème/S. +poésie/S. +poète/S. +poétereau/X. +poétesse/S. +poétique/S. +poétiquement +poétisation/S. +poétiser/a0p+ +poétisme/S. +pogne/S. +pogner/a0p+ +pognon/S. +pogo/S. +pogonophore/S. +pogrom/S. +poids +poignante/F. +poignard/S. +poignarder/a0p+ +poigne/S. +poignée/S. +poignet/S. +poïkilocytose/S. +poïkilotherme/S. +poïkilotherme/S. +poïkilothermie/S. +poil/S. +poilante/F. +poiler/a0p+ +poilue/F. +poinçon/S. +poinçonnage/S. +poinçonnement/S. +poinçonner/a0p+ +poinçonneuse/F. +poindre/wB +poing/S. +point +point/S. +pointage/S. +pointal/X. +pointe/S. +pointeau/X. +pointement/S. +pointer/S. +pointer/a0p+ +pointeuse/F. +pointillage/S. +pointillé/S. +pointiller/a0p+ +pointilleuse/W. +pointillisme/S. +pointilliste/S. +points-virgules +pointue/F. +pointure/S. +point-virgule +poire/S. +poireau/X. +poireauter/a0p. +poirée/F. +poirette/S. +poirier/S. +poiroter/a0p. +pois +poiscaille/S. +poise/Um +poiseuille/S. +poison/S. +poissarde/F. +poisse/S. +poisser/a0p+ +poisseuse/W. +poisson/S. +poisson-chat +poisson-clown +poissonienne/F. +poissonnerie/S. +poissonneuse/W. +poissonnière/F. +poissons-chats +poisson-scie +poissons-clowns +poissons-scies +poitevine/F. +poitrail/S. +poitrinaire/S. +poitrine/S. +poitrinière/S. +poivrade/S. +poivre/S. +poivrer/a0p+ +poivrette/S. +poivrière/F. +poivron/S. +poivrote/F. +poivroter/a0p+ +poix +poker/S. +polack/S. +polacre/S. +polaire/S. +polaque/S. +polar/S. +polarde/F. +polarimètre/S. +polarimétrie/S. +polarimétrique/S. +polarisabilité/S. +polarisable/S. +polarisante/F. +polarisation/S. +polarisatrice/F. +polariscope/S. +polariser/a0p+ +polariseur/S. +polarité/S. +polarographe/S. +polarographie/S. +polarographique/S. +polaroid/S. +polatouche/S. +polder/S. +poldérisation/S. +poldériser/a0p+ +pole +pôle/S. +polémarque/S. +polémique/S. +polémique/S. +polémiquement +polémiquer/a0p. +polémiste/S. +polémologie/S. +polémologique/S. +polenta/S. +police/S. +policeman/A. +policer/a0p+ +polichinelle/S. +policière/F. +policlinique/S. +poliment +polio/S. +polioencéphalite/S. +poliomyélite/S. +poliomyélitique/S. +poliorcétique/S. +poliorcétique/S. +polir/f0p+ +polissable/S. +polissage/S. +polisseuse/F. +polissoir/S. +polissoire/S. +polissoire/S. +polissonne/F. +polissonner/a0p. +polissonnerie/S. +polissure/S. +poliste/S. +politburo/S. +politesse/S. +politicaillerie/S. +politicarde/F. +politicienne/F. +politico-culturelle/F. +politico-économique/S. +politico-financière/F. +politico-judiciaire/S. +politicologue/S. +politico-médiatique/S. +politico-militaire/S. +politico-religieuse/W. +politico-sociale/W. +politique/S. +politiquement +politiquer/a0p. +politisation/S. +politiser/a0p+ +politiste/S. +politologie/S. +politologique/S. +politologue/S. +poljé/S. +polka/S. +pollakiurie/S. +pollen/S. +pollicitante/F. +pollicitation/S. +pollicitation/S. +pollinie/S. +pollinifère/S. +pollinique/S. +pollinisation/S. +pollinisatrice/F. +polliniser/a0p+ +pollinose/S. +polluant/S. +polluante/F. +polluer/a0p+ +pollueuse/F. +pollupostage/S. +polluposteuse/F. +pollution/S. +polo/S. +polochon/S. +poloïste/S. +polonaise/F. +polonium/S. +poltronne/F. +poltronnerie/S. +poly/S. +polyacide/S. +polyacrylate/S. +polyacrylique/S. +polyacrylique/S. +polyaddition/S. +polyadénylation/S. +polyakène/S. +polyakène/S. +polyalcool/S. +polyamide/S. +polyamine/S. +polyamour/S. +polyamoureuse/W. +polyandre/S. +polyandrie/S. +polyandrique/S. +polyarchie/S. +polyarthrite/S. +polyatomique/S. +polybasique/S. +polybutadiène/S. +polybutène/S. +polycarbonate/S. +polycarburant/S. +polycarpique/S. +polycentrique/S. +polycentrisme/S. +polycéphale/S. +polycercle/S. +polychète/S. +polychlorobenzène/S. +polychlorure/S. +polychroïque/S. +polychroïsme/S. +polychromatique/S. +polychrome/S. +polychromie/S. +polychromique/S. +polycistronique/S. +polyclinique/S. +polycondensat/S. +polycondensation/S. +polycopie/S. +polycopier/a0p+ +polycourant +polycristal/X. +polycristalline/F. +polyculture/S. +polycycle/S. +polycyclique/S. +polydactyle/S. +polydactylie/S. +polydipsie/S. +polydisque/S. +polyédrale/W. +polyèdre/S. +polyédrique/S. +polyélectrolyte/S. +polyélectrolyte/S. +polyembryonie/S. +polyester/S. +polyéther/S. +polyéthylène/S. +polyfonctionnelle/F. +polygala/S. +polygale/S. +polygame/S. +polygamie/S. +polygamique/S. +polygénique/S. +polygénisme/S. +polygéniste/S. +polyglobulie/S. +polyglotte/S. +polygonacée/S. +polygonale/W. +polygonation/S. +polygone/S. +polygraphe/S. +polygraphie/S. +polygraphique/S. +polygynie/S. +polyhandicapée/F. +polyholoside/S. +polyimide/S. +polyimide/S. +polyinsaturée/F. +polyiodure/S. +polyisoprène/S. +polykystique/S. +polylexicale/W. +polylobe/S. +polylobée/F. +polymathe/S. +polymathie/S. +polymathique/S. +polymélodie/S. +polymérase/S. +polymérase/S. +polymère/S. +polymérie/S. +polymérique/S. +polymérisable/S. +polymérisation/S. +polymériser/a0p+ +polymétallique/S. +polyméthacrylate/S. +polyméthylpentène/S. +polymolécularité/S. +polymorphe/S. +polymorphie/S. +polymorphique/S. +polymorphisme/S. +polymyosite/S. +polymyxine/S. +polynésienne/F. +polynévrite/S. +polynie/S. +polynitration/S. +polynôme/S. +polynomiale/W. +polynucléaire/S. +polynucléose/S. +polynucléotide/S. +polyol/S. +polyoléfine/S. +polyonymie/S. +polyoside/S. +polyoxyméthylène/S. +polype/S. +polypeptide/S. +polypeptidique/S. +polypétale/S. +polypeuse/W. +polyphage/S. +polyphage/S. +polyphagie/S. +polyphasée/F. +polyphasique/S. +polyphénol/S. +polyphonie/S. +polyphonique/S. +polyphoniste/S. +polyphosphate/S. +polyphylétique/S. +polypier/S. +polyploïde/S. +polyploïdie/S. +polyploïdisation/S. +polypnée/S. +polypode/S. +polypore/S. +polypose/S. +polypropène/S. +polypropylène/S. +polyptère/S. +polyptyque/S. +polyradiculonévrite/S. +polyribosome/S. +polyrythmie/S. +polysaccharide/S. +polysarcie/S. +polysème/S. +polysémie/S. +polysémique/S. +polysoc/S. +polysoc/S. +polysome/S. +polysomnographie/S. +polyspermie/S. +polystyle/S. +polystyrène/S. +polysulfure/S. +polysyllabe/S. +polysyllabique/S. +polysynodie/S. +polysynthétique/S. +polytechnicienne/F. +polytechnique/S. +polyterpène/S. +polytétrafluoroéthylène/S. +polythéisme/S. +polythéiste/S. +polythène/S. +polytonale/W. +polytonalité/S. +polytonique/S. +polytope/S. +polytoxicomane/S. +polytoxicomanie/S. +polytransfusée/F. +polytraumatisée/F. +polytraumatisme/S. +polytric/S. +polyuréthane/S. +polyuréthanne/S. +polyurie/S. +polyurique/S. +polyvalence/S. +polyvalente/F. +polyvinylbutyral/S. +polyvinyle/S. +polyvinylique/S. +polyvitamine/S. +polyxène/S. +pomelo/S. +pomélo/S. +poméranienne/F. +pomerium/S. +pomerol/S. +pomicultrice/F. +pomiculture/S. +pommade/S. +pommader/a0p+ +pommard/S. +pomme/S. +pommeau/X. +pommée/F. +pommeler/d0p+ +pommelle/S. +pommer/a0p. +pommeraie/S. +pommetée/F. +pommette/S. +pommier/S. +pomoculture/S. +pomœrium/S. +pomologie/S. +pomologique/S. +pomologiste/S. +pomologue/S. +pompage/S. +pompe/S. +pompéienne/F. +pomper/a0p+ +pompette/S. +pompeuse/F. +pompeuse/W. +pompeusement +pompière/F. +pompiérisme/S. +pompile/S. +pompiste/S. +pompon/S. +pomponner/a0p+ +ponant/S. +ponantaise/F. +ponçage/S. +ponce/S. +ponce/S. +ponceau/X. +poncelet/S. +poncer/a0p+ +ponceuse/F. +ponceuse/W. +poncho/S. +poncif/S. +ponction/S. +ponctionner/a0p+ +ponctualisme/S. +ponctualité/S. +ponctuation/S. +ponctuelle/F. +ponctuellement +ponctuer/a0p+ +pondaison/S. +pondérable/S. +pondérale/W. +pondération/S. +pondératrice/F. +pondérément +pondérer/c0p+ +pondéreuse/W. +pondeuse/F. +pondoir/S. +pondre/tA +ponette/S. +poney/S. +pongé/S. +pongée/S. +pongidé/S. +pongiste/S. +pont/S. +pontage/S. +ponte/S. +ponte/S. +pontée/S. +ponter/a0p+ +pontet/S. +pontier/S. +pontife/S. +pontifiante/F. +pontificale/W. +pontificalement +pontificat/S. +pontifier/a0p. +pontil/S. +pontiller/a0p+ +pont-l'évêque +pont-levis +ponton/S. +pontonnier/S. +pont-promenade +ponts-levis +ponts-promenades +pontuseau/X. +pool/S. +pop +pop/S. +pop-corn +pope/S. +popeline/S. +popinée/S. +poplitée/F. +popote/S. +popotin/S. +popstar/S. +populace/S. +populacière/F. +populage/S. +populaire/S. +populairement +popularisation/S. +populariser/a0p+ +popularité/S. +population/S. +populationnelle/F. +populationnisme/S. +populationniste/S. +populéum/S. +populeuse/W. +populi +populicultrice/F. +populiculture/S. +populisme/S. +populiste/S. +populo/S. +pop-up +popup/S. +poquer/a0p. +poquet/S. +porc/S. +porcelaine/S. +porcelainière/F. +porcelet/S. +porc-épic +porchaison/S. +porche/S. +porchère/F. +porcherie/S. +porcin/S. +porcine/F. +porcs-épics +pore/S. +poreuse/W. +porion/S. +porno/S. +porno/S. +pornographe/S. +pornographie/S. +pornographique/S. +porosité/S. +porphyra/S. +porphyre/S. +porphyrie/S. +porphyrine/S. +porphyrique/S. +porphyriser/a0p+ +porphyrogénète/S. +porphyroïde/S. +porpite/S. +porque/S. +porracée/F. +porreau/X. +porrection/S. +porridge/S. +port/S. +portabilité/S. +portable/S. +portage/S. +portail/S. +portale/W. +portance/S. +portante/F. +portative/F. +porte/S. +porte/S. +porte-aéronefs +porte-à-faux +porte-affiche/S. +porte-affiches +porte-aigle +porte-aigle/S. +porte-aiguille +porte-aiguille/S. +porte-allumettes +porte-amarre +porte-amarre/S. +porte-à-porte +porte-avions +porte-bagages +porte-baïonnette +porte-baïonnette/S. +porte-balais +porte-bannière +porte-bannière/S. +porte-barges +porte-bébé +porte-bébé/S. +porte-billets +porte-bois +porte-bonheur +porte-bouquet +porte-bouquet/S. +porte-bouteilles +porte-brancard +porte-brancard/S. +porte-cartes +porte-chapeau/X. +porte-chapeaux +porte-cigares +porte-cigarettes +porte-clefs +porte-clés +porte-conteneurs +porte-copie +porte-copie/S. +porte-couteau +porte-couteau/X. +porte-crayon +porte-crayon/S. +porte-croix +porte-crosse +porte-crosse/S. +porte-documents +porte-drapeau +porte-drapeau/X. +portée/S. +porte-enseigne +porte-enseigne/S. +porte-épée +porte-épée/S. +porte-étendard +porte-étendard/S. +porte-étriers +porte-étrivière +porte-étrivière/S. +portefaix +porte-faix +porte-fanion +porte-fanion/S. +porte-fenêtre +portefeuille/S. +porte-flingue/S. +porte-fort +porte-glaive +porte-glaive/S. +porte-greffe +porte-greffe/S. +porte-hauban/S. +porte-haubans +porte-hélicoptères +porte-jarretelles +porte-jupe +porte-jupe/S. +porte-lame +porte-lame/S. +porte-malheur +portemanteau/X. +porte-manteau/X. +portement/S. +porte-menu +porte-menu/S. +porte-mine +portemine/S. +porte-monnaie +porte-montre +porte-montre/S. +porte-mors +porte-musique +porte-objet +porte-objet/S. +porte-outil +porte-outil/S. +porte-papier +porte-parapluie/S. +porte-parapluies +porte-parole +porte-plume +porte-plume/S. +porte-queue +porte-queue/S. +porter/a0p+ +porte-revues +porterie/S. +porte-savon +porte-savon/S. +porte-serviette +porte-serviette/S. +porte-serviettes +portes-fenêtres +porte-trait +porte-trait/S. +porteuse/F. +porte-vent +porte-voix +portfolio/S. +portière/F. +portillon/S. +portion/S. +portionnable/S. +portionnaire/S. +portique/S. +portland/S. +portlandien/S. +porto/S. +portoir/S. +portor/S. +portoricaine/F. +portrait/S. +portraitiste/S. +portrait-robot +portraits-robots +portraiturer/a0p+ +portuaire/S. +portugaise/F. +portulan/S. +portune/S. +posada/S. +pose/S. +posément +posemètre/S. +poser/a0p+ +poseuse/F. +posidonie/S. +position/S. +positionnelle/F. +positionnellement +positionnement/S. +positionner/a0p+ +positionneur/S. +positive/F. +positivement +positiver/a0p+ +positivisme/S. +positiviste/S. +positivité/S. +positon/S. +positonium/S. +positron/S. +positronium/S. +posologie/S. +posologique/S. +possédante/F. +possédée/F. +posséder/c0p+ +possesseur/S. +possession/S. +possessionnée/F. +possessionnelle/F. +possessive/F. +possessivité/S. +possessoire/S. +possibilité/S. +possible/S. +possiblement +post +post/S. +post-abortum +postage/S. +postale/W. +postclassique/S. +post-coïtale/W. +postcoloniale/W. +post-coloniale/W. +postcombustion/S. +post-combustion/S. +postcommunion/S. +postcommunisme/S. +post-communisme/S. +postcommuniste/S. +postcondition/S. +postcure/S. +postdater/a0p+ +postdoctorale/W. +post-doctorale/W. +postdoctorante/F. +post-doctorante/F. +postdoctorat/S. +post-doctorat/S. +poste/S. +poste-à-poste +poster/S. +poster/a0p+ +postérieure/F. +postérieurement +posteriori +postériorité/S. +postérité/S. +postface/S. +postfacer/a0p+ +postformée/F. +postglaciaire/S. +posthite/S. +posthume/S. +posthumement +posthumément +posthypophyse/S. +postiche/S. +posticher/a0p. +posticheur/S. +postière/F. +postillon/S. +postillonner/a0p. +postimpressionnisme/S. +post-impressionnisme/S. +postimpressionniste/S. +post-impressionniste/S. +postindustrielle/F. +post-industrielle/F. +post-it +postlude/S. +post-marché/S. +postmoderne/S. +post-moderne/S. +postmodernisme/S. +post-modernisme/S. +postmoderniste/S. +post-moderniste/S. +postmodernité/S. +post-modernité/S. +postnatale/F. +post-natale/F. +postopératoire/S. +postpalatale/W. +post-partum +postposer/a0p+ +postposition/S. +postprandiale/W. +post-prandiale/W. +postproduction/S. +post-production/S. +postromantique/S. +postscolaire/S. +post-scriptum +post-séance/S. +postsérielle/F. +post-soixante-huitarde/F. +postsonorisation/S. +postsynaptique/S. +postsynchronisation/S. +postsynchroniser/a0p+ +post-tonique/S. +post-tonique/S. +post-traumatique/S. +postulante/F. +postulat/S. +postulation/S. +postulatrice/F. +postuler/a0p+ +posturale/W. +posture/S. +pot/S. +potabilisation/S. +potabilité/S. +potable/S. +potache/S. +potage/S. +potager/S. +potagère/F. +potamochère/S. +potamodrome/S. +potamologie/S. +potamot/S. +potard/S. +potasse/S. +potasser/a0p+ +potasseur/S. +potassique/S. +potassium/S. +pot-au-feu +pot-bouille +pot-de-vin +pote/S. +poteau/X. +potée/S. +potelée/F. +potelet/S. +potence/S. +potencée/F. +potentat/S. +potentialisation/S. +potentialiser/a0p+ +potentialiste/S. +potentialité/S. +potentiation/S. +potentiel/S. +potentielle/F. +potentiellement +potentille/S. +potentiomètre/S. +potentiométrique/S. +poter/a0p. +poterie/S. +poterne/S. +potestative/F. +poteur/S. +potiche/S. +potière/F. +potimarron/S. +potin/S. +potiner/a0p. +potinière/F. +potion/S. +potiron/S. +potlatch/S. +potomane/S. +potomanie/S. +potomètre/S. +potorou/S. +pot-pourri +potron-minet +pots-bouilles +pots-de-vin +pots-pourris +potto/S. +pou/X. +pouacre/S. +pouah +poubelle/S. +pouce/S. +pouce-pied +pouces-pieds +poucettes +poucier/S. +poud/S. +pou-de-soie +poudingue/S. +poudrage/S. +poudre/S. +poudrer/a0p+ +poudrerie/S. +poudrette/S. +poudreuse/W. +poudrier/S. +poudrière/S. +poudrin/S. +poudroiement/S. +poudroyante/F. +poudroyer/a0p+ +pouf/S. +pouffer/a0p. +pouffiasse/S. +pouillard/S. +pouille/S. +pouillé/S. +pouiller/a0p+ +pouillerie/S. +pouilleuse/W. +pouillot/S. +pouilly/S. +poujadisme/S. +poujadiste/S. +poulaille/S. +poulailler/S. +poulaine/F. +poulamon/S. +poularde/S. +poulbot/S. +poule/S. +poulette/F. +pouliage/S. +pouliche/S. +poulie/S. +pouliner/a0p. +poulinière/S. +poulinière/S. +pouliot/S. +poulotte/F. +poulpe/S. +pouls +poult-de-soie +poults-de-soie +poumon/S. +poupard/S. +pouparde/F. +poupe/S. +poupée/S. +poupette/S. +poupine/F. +poupon/S. +pouponnage/S. +pouponnée/F. +pouponner/a0p. +pouponnière/S. +poupoule/S. +pour +pourboire/S. +pourceau/X. +pour-cent +pourcent/S. +pourcentage/S. +pourchassée/F. +pourchasser/a0p+ +pourchasseuse/F. +pour-compte +pourcompte/S. +pourfendeuse/F. +pourfendre/tA +pourlécher/c0p+ +pourliche/S. +pourparler/S. +pourpenser/a0p+ +pourpier/S. +pourpoint/S. +pourpre/S. +pourprer/a0p+ +pourprine/F. +pourquoi +pourrave/S. +pourridié/S. +pourriel/S. +pourrir/f0p+ +pourrissage/S. +pourrissante/F. +pourrissement/S. +pourrisseuse/F. +pourrissoir/S. +pourriture/S. +pour-soi +poursuite/S. +poursuiteuse/F. +poursuivante/F. +poursuiveuse/F. +poursuivre/xQ +pourtant +pourtour/S. +pourvoi/S. +pourvoir/pJ +pourvoirie/S. +pourvoyeuse/F. +pourvu +poussage/S. +poussah/S. +pousse/S. +pousse-au-crime +pousse-café +pousse-cailloux +pousse-cul +poussée/S. +pousse-pied +pousse-pousse +pousser/a0p+ +pousse-toc +poussette/S. +pousseuse/F. +pousse-wagon +poussier/S. +poussière/S. +poussiéreuse/W. +poussine/F. +poussinière/S. +poussive/F. +poussivement +poussoir/S. +poutargue/S. +pout-de-soie +poutine/S. +poutou/S. +poutrage/S. +poutraison/S. +poutre/S. +poutrelle/S. +pouts-de-soie +poutser/a0p+ +pouture/S. +pouvoir/S. +pouvoir/pA +poux-de-soie +pouzzolane/S. +powellite/S. +poya/S. +pp/||-- +ppb/||-- +ppm/||-- +ppp/||-- +ppq/||-- +ppt/||-- +praesidium +præsidium/S. +pragmatique/S. +pragmatique/S. +pragmatiquement +pragmatisme/S. +pragmatiste/S. +pragoise/F. +praguoise/F. +praire/S. +prairial/S. +prairiale/W. +prairie/S. +prakrit/S. +prâkrit/S. +pralin/S. +pralinage/S. +praline/S. +praliné/S. +praliner/a0p+ +prame/S. +prao/S. +praséodyme/S. +prasine/S. +praticabilité/S. +praticable/S. +praticable/S. +praticienne/F. +praticité/S. +pratiquante/F. +pratique/S. +pratique/S. +pratiquement +pratiquer/a0p+ +praxématique/S. +praxème/S. +praxéologie/S. +praxéologique/S. +praxie/S. +praxinoscope/S. +praxis +pré/S. +pré-ARNm +préaccentuation/S. +préaccord/S. +préachat/S. +préachetable/S. +préacheter/b0p+ +préactionneur/S. +préadamisme/S. +préadamite/S. +préadaptation/S. +préadolescence/S. +pré-adolescence/S. +préadolescente/F. +préaffranchir/f0p+ +préalable/S. +préalable/S. +préalablement +préalpine/F. +préambulaire/S. +préambule/S. +préamplificateur/S. +préapprentissage/S. +préardennaise/F. +préau/X. +préavis +préaviser/a0p+ +prébende/S. +prébendée/F. +prébendier/S. +prébiotique/S. +prébiotique/S. +précaire/S. +précairement +précambrien/S. +précambrienne/F. +précampagne/S. +précancéreuse/W. +précapitaliste/S. +précariat/S. +précarisation/S. +précariser/a0p+ +précarité/S. +précaution/S. +précautionner/a0p+ +précautionneuse/W. +précautionneusement +précédemment +précédence/S. +précédente/F. +précéder/c0p+ +préceinte/S. +précellence/S. +précepte/S. +préceptorale/W. +préceptorat/S. +préceptrice/F. +précéramique/S. +précession/S. +préchambre/S. +préchargement/S. +précharger/a0p+ +préchauffage/S. +préchauffe/S. +préchauffer/a0p+ +préchauffeur/S. +prêche/S. +prêcher/a0p+ +prêcheuse/F. +prêchi-prêcha +précieuse/W. +précieusement +préciosité/S. +précipice/S. +précipitable/S. +précipitamment +précipitation/S. +précipité/S. +précipiter/a0p+ +préciput/S. +préciputaire/S. +précis +précisable/S. +précise/F. +précisément +préciser/a0p+ +précision/S. +précisionnisme/S. +précisionniste/S. +précitée/F. +préclassique/S. +préclinique/S. +précoce/S. +précocement +précocité/S. +précognition/S. +précolombienne/F. +précoloniale/F. +précombustion/S. +précommande/S. +précommander/a0p+ +précompilation/S. +précomposer/a0p+ +précompte/S. +précompter/a0p+ +préconception/S. +préconciliaire/S. +préconçue/F. +précondition/S. +préconisation/S. +préconisatrice/F. +préconiser/a0p+ +préconiseur/S. +préconscient/S. +préconsciente/F. +précontrainte/F. +précordiale/W. +précordialgie/S. +précoupure/S. +précuire/yL +précuisson/S. +précuite/F. +précurseure/F. +prédalle/S. +prédatée/F. +prédation/S. +prédatrice/F. +prédécédée/F. +prédécéder/c0p+ +prédécès +prédécesseure/F. +prédécoupage/S. +prédécoupée/F. +prédéfinir/f0p+ +prédelle/S. +prédestinateur/S. +prédestination/S. +prédestiner/a0p+ +prédétermination/S. +prédéterminer/a0p+ +prédéterminisme/S. +prédicable/S. +prédicable/S. +prédicant/S. +prédicat/S. +prédication/S. +prédicative/F. +prédicatrice/F. +prédictibilité/S. +prédictible/S. +prédiction/S. +prédictive/F. +prédictrice/F. +prédiffusée/F. +prédigérée/F. +prédilection/S. +prédimensionnement/S. +pré-dimensionnement/S. +prédiquer/a0p+ +prédire/yD +prédisposer/a0p+ +prédisposition/S. +prédistribution/S. +prédiviseur/S. +prédominance/S. +prédominante/F. +prédominer/a0p. +préélectorale/W. +préemballage/S. +préemballée/F. +prééminence/S. +prééminente/F. +préempter/a0p+ +préemption/S. +préencollée/F. +préenregistrée/F. +préenregistrement/S. +préétablir/f0p+ +préexcellence/S. +préexistante/F. +préexistence/S. +préexister/a0p. +préfabrication/S. +préfabriqué/S. +préfabriquer/a0p+ +préface/S. +préfacer/a0p+ +préfacière/F. +préfanage/S. +préfectorale/W. +préfecture/S. +préférable/S. +préférablement +préférence/S. +préférentielle/F. +préférentiellement +préférer/c0p+ +préfète/F. +préfiguration/S. +préfiguratrice/F. +préfigurer/a0p+ +préfiltration/S. +préfiltre/S. +préfinancement/S. +préfinancer/a0p+ +préfixale/W. +préfixation/S. +préfixe/S. +préfixer/a0p+ +préfixion/S. +préfloraison/S. +préfoliaison/S. +préfoliation/S. +préformage/S. +préformatage/S. +préformatée/F. +préformation/S. +préforme/S. +préformer/a0p+ +préfourrière/S. +préfrontale/W. +prégénérateur/S. +prégénitale/W. +prégéodésique/S. +prégermination/S. +préglaciaire/S. +prégnance/S. +prégnante/F. +préhellénique/S. +préhenseur/S. +préhensible/S. +préhensile/S. +préhension/S. +préhilbertienne/F. +préhispanique/S. +préhistoire/S. +préhistorienne/F. +préhistorique/S. +prehnite/S. +préhominien/S. +préhomogène/S. +préhospitalière/F. +préhumaine/F. +préimplantation/S. +préimplantatoire/S. +préimprimée/F. +préindustrielle/F. +préinscription/S. +préinstaller/a0p+ +préislamique/S. +préjudice/S. +préjudiciable/S. +préjudiciaux +préjudicielle/F. +préjudicier/a0p. +préjugé/S. +préjuger/a0p+ +prélart/S. +prélasser/a0p+ +prélat/S. +prélatine/F. +prélature/S. +prélavage/S. +prélaver/a0p+ +prêle/S. +prélegs +prélèvement/S. +prélever/b0p+ +préliminaire/S. +préliminaire/S. +préliminairement +prélinteau/X. +prélogique/S. +prélude/S. +préluder/a0p. +prémâcher/a0p+ +prématurée/F. +prématurément +prématurité/S. +prémaxillaire/S. +prémédication/S. +préméditation/S. +préméditer/a0p+ +prémenstruelle/F. +prémessager/S. +prémices +première/F. +premièrement +première-née +premières-nées +premier-maître +premier-né +premiers-maîtres +premiers-nés +prémilitaire/S. +prémisse/S. +premium +premium +prémoderne/S. +prémolaire/S. +prémonition/S. +prémonitoire/S. +prémontage/S. +prémontrée/F. +prémotion/S. +prémunir/f0p+ +prémunition/S. +prenable/S. +prenante/F. +prénasalisée/F. +prénatale/F. +prendre/tF +preneuse/F. +prénom/S. +prénommer/a0p+ +prénormale/W. +prénotion/S. +prénuptiale/W. +préoccupante/F. +préoccupation/S. +préoccuper/a0p+ +préœdipienne/F. +préolympique/S. +préopératoire/S. +préopinant/S. +préorale/W. +préouverture/S. +prépa/S. +prépaiement/S. +prépalatale/W. +préparatif/S. +préparation/S. +préparatoire/S. +préparatrice/F. +préparer/a0p+ +prépayer/a0p+ +prépension/S. +prépensionnée/F. +prépensionner/a0p+ +préplacement/S. +préplainte/S. +prépolymère/S. +prépondérance/S. +prépondérante/F. +préposée/F. +préposer/a0p+ +préposition/S. +prépositionnelle/F. +prépositionner/a0p+ +prépositive/F. +prépositivement +prépotence/S. +prépotente/F. +prépresse/S. +pré-presse/S. +préprocesseur/S. +préproduction/S. +préprogrammée/F. +prépsychotique/S. +prépubère/S. +prépubertaire/S. +prépuberté/S. +prépublication/S. +prépuce/S. +préputiale/F. +préqualification/S. +préquantification/S. +préquelle/F. +préraphaélisme/S. +préraphaélite/S. +préréglable/S. +préréglage/S. +prérégler/c0p+ +prérégulateur/S. +préremplir/f0p+ +prérentrée/S. +prérequis +préretraite/S. +préretraitée/F. +prérévolutionnaire/S. +prérogative/S. +préromane/F. +préromantique/S. +préromantisme/S. +près +présage/S. +présager/a0p+ +présalaire/S. +pré-salé +présanctifiée/F. +presbyacousie/S. +presbyopie/S. +presbyte/S. +presbytérale/W. +presbytérat/S. +presbytère/S. +presbytérianisme/S. +presbytérienne/F. +presbytie/S. +presbytisme/S. +préschéma/S. +prescience/S. +presciente/F. +préscientifique/S. +préscolaire/S. +préscolarisation/S. +prescriptible/S. +prescription/S. +prescriptive/F. +prescriptrice/F. +prescrire/y1 +préséance/S. +présélecteur/S. +présélection/S. +présélectionner/a0p+ +présence/S. +présénile/S. +présentable/S. +présentatif/S. +présentation/S. +présentatrice/F. +présente/F. +présentéisme/S. +présentement +présenter/a0p+ +présentielle/F. +présentisme/S. +présentoir/S. +présérie/S. +préservatif/S. +préservation/S. +préservative/F. +préservatrice/F. +préserver/a0p+ +présidence/S. +président-directeur +présidente/F. +présidente-directrice +présidentes-directrices +présidentiable/S. +présidentialisation/S. +présidentialisme/S. +présidentialiste/S. +présidentielle/F. +présidents-directeurs +présider/a0p+ +présidial/X. +présidiale/W. +présidialité/S. +présidium/S. +présignalisation/S. +présocratique/S. +présomption/S. +présomptive/F. +présomptueuse/W. +présomptueusement +présonorisation/S. +présonoriser/a0p+ +presque +presqu'île/S. +pressabilité/S. +pressage/S. +prés-salés +pressante/F. +press-book/S. +presse/S. +presse-agrumes +presse-bouton +presse-citron +presse-citron/S. +pressée/S. +presse-étoupe +presse-étoupe/S. +presse-fruits +pressement/S. +pressentiment/S. +pressentir/i5q+ +presse-papiers +presse-purée +presser/a0p+ +presse-raquette +presse-raquette/S. +presseuse/F. +presse-viande +pressier/S. +pressing/S. +pression/S. +pressoir/S. +pressostat/S. +pressurage/S. +pressurer/a0p+ +pressureuse/F. +pressurisation/S. +pressuriser/a0p+ +pressuriseur/S. +prestance/S. +prestant/S. +prestataire/S. +prestation/S. +preste/S. +prestement +prester/a0p+ +prestesse/S. +prestidigitation/S. +prestidigitatrice/F. +prestige/S. +prestigieuse/W. +prestigieusement +prestissimo +prestissimo +prestissimo/S. +presto +préstratégique/S. +présumable/S. +présumer/a0p+ +présupposer/a0p+ +présupposition/S. +présure/S. +présurer/a0p+ +présynaptique/S. +prêt/S. +prêtable/S. +prétantaine/S. +prêt-à-penser +prêt-à-porter +prêt-bail +prête/F. +prétendante/F. +prétendeur/S. +prétendre/tA +prétendument +prête-nom/S. +prétensionneur/S. +prétentaine/S. +prétentiarde/F. +prétentieuse/W. +prétentieusement +prétention/S. +prêter/a0p+ +prétérit/S. +prétériter/a0p+ +prétérition/S. +préteuse/F. +prêteuse/F. +prétexte/S. +prétexter/a0p+ +pretintaille/S. +prétoire/S. +prétoriale/W. +prétorienne/F. +prêtraille/S. +prétraitement/S. +prétranchée/F. +prêt-relais +prêtre-ouvrier +prêtres-ouvriers +prêtresse/F. +prêtrise/S. +prêts-à-porter +prêts-bails +prêts-relais +préture/S. +preuve/S. +preux +prévalence/S. +prévalente/F. +prévaloir/pNq+ +prévarication/S. +prévaricatrice/F. +prévariquer/a0p. +prévenance/S. +prévenante/F. +prévenir/i0q+ +prévente/S. +prévention/S. +préventive/F. +préventivement +préventorium/S. +préventrice/F. +prévenue/F. +préverbe/S. +préversion/S. +prévisibilité/S. +prévisible/S. +prévisiblement +prévision/S. +prévisionnelle/F. +prévisionniste/S. +prévisualisation/S. +prévisualiser/a0p+ +prévoir/pF +prévôt/S. +prévôtale/W. +prévôté/S. +prévoyance/S. +prévoyante/F. +prévu/S. +priante/F. +priapée/S. +priapisme/S. +prie-Dieu +prier/a0p+ +prière/S. +prieure/F. +prieuré/S. +prieuse/S. +prim'Holstein +prima-donna/I. +primage/S. +primaire/S. +primairement +primale/W. +primalité/S. +primarisation/S. +primariser/a0p+ +primarité/S. +primat/S. +primate/S. +primatiale/W. +primatie/S. +primatologie/S. +primatologue/S. +primature/S. +primauté/S. +prime/S. +prime/S. +primer/a0p+ +primerose/S. +primesautière/F. +primeur/S. +primeuriste/S. +primevère/S. +primidi/S. +primipare/S. +primipare/S. +primipilaire/S. +primipile/S. +primitive/F. +primitivement +primitivisme/S. +primitiviste/S. +primitivité/S. +primo +primo-accédante/F. +primo-délinquance/S. +primo-délinquante/F. +primogéniture/S. +primo-infection/S. +primordiale/W. +primordialement +primordialité/S. +primulacée/S. +prince-de-galles +prince-de-galles +princeps +princeps +princesse/F. +princière/F. +princièrement +principalat/S. +principale/W. +principalement +principat/S. +principautaire/S. +principauté/S. +principe/S. +principicule/S. +principielle/F. +principiellement +printanière/F. +printanisation/S. +printemps +priodonte/S. +prion/S. +priorat/S. +priori +priori +priorisation/S. +prioriser/a0p+ +prioritaire/S. +prioritairement +priorité/S. +prise/S. +prisée/S. +priser/a0p+ +priseuse/F. +prismatique/S. +prismatiquement +prisme/S. +prison/S. +prisonnière/F. +privat-docent/S. +privat-dozent/S. +privation/S. +privatique/S. +privatisable/S. +privatisation/S. +privatiser/a0p+ +privative/F. +privativement +privatrice/F. +privauté/S. +privée/F. +priver/a0p+ +privilège/S. +privilégiée/F. +privilégier/a0p+ +prix +pro/S. +proactive/F. +pro-active/F. +proactivité/S. +pro-activité/S. +proaméricaine/F. +pro-américaine/F. +proarthropode/S. +probabilisable/S. +probabilisée/F. +probabilisme/S. +probabiliste/S. +probabilité/S. +probable/S. +probablement +probante/F. +probation/S. +probatique/S. +probatoire/S. +probe/S. +probénécide/S. +prober/a0p+ +probiotique/S. +probiotique/S. +probité/S. +problématique/S. +problématique/S. +problématiquement +problématisation/S. +problématiser/a0p+ +problème/S. +proboscide/S. +proboscidien/S. +procaïne/S. +procalcitonine/S. +procaryote/S. +procaryote/S. +procédé/S. +procéder/c0p. +procédurale/W. +procéduralement +procédure/S. +procédurière/F. +procès +process +processeur/S. +procession/S. +processionnaire/S. +processionnal/X. +processionnelle/F. +processionnellement +processionner/a0p. +processive/F. +processuelle/F. +processus +procès-verbal/X. +prochaine/F. +prochainement +proche/S. +proche-orientale/W. +prochinoise/F. +procidence/S. +proclamation/S. +proclamatoire/S. +proclamatrice/F. +proclamer/a0p+ +proclitique/S. +proconsul/S. +proconsulaire/S. +proconsulat/S. +procordé/S. +procrastination/S. +procrastinatrice/F. +procrastiner/a0p+ +procréation/S. +procréatique/S. +procréative/F. +procréatrice/F. +procréer/a0p+ +proctalgie/S. +proctite/S. +proctologie/S. +proctologue/S. +proctorrhée/S. +procuratie/S. +procuration/S. +procuratrice/F. +procure/S. +procurer/a0p+ +procureure/S. +procureuse/F. +procyclique/S. +procyonidé/S. +prod/S. +prodigalement +prodigalité/S. +prodige/S. +prodigieuse/W. +prodigieusement +prodigue/S. +prodiguer/a0p+ +prodrome/S. +prodromique/S. +productibilité/S. +productible/S. +production/S. +productique/S. +productive/F. +productivement +productivisme/S. +productiviste/S. +productivité/S. +productrice/F. +produire/yM +produit/S. +proèdre/S. +proéminence/S. +proéminente/F. +proenzyme/S. +proeuropéenne/F. +pro-européenne/F. +prof/S. +profanation/S. +profanatrice/F. +profane/S. +profaner/a0p+ +profanité/S. +profective/F. +profération/S. +proférer/c0p+ +professante/F. +professe/F. +professer/a0p+ +professeure/F. +profession/S. +professionnalisante/F. +professionnalisation/S. +professionnaliser/a0p+ +professionnalisme/S. +professionnelle/F. +professionnellement +professo +professorale/W. +professorat/S. +profil/S. +profilage/S. +profilé/S. +profiler/a0p+ +profileuse/F. +profilographe/S. +profit/S. +profitabilité/S. +profitable/S. +profitablement +profitante/F. +profiter/a0p. +profiterole/S. +profiteuse/F. +profonde/F. +profondément +profondeur/S. +profundis +profuse/F. +profusément +profusion/S. +progénitrice/F. +progéniture/S. +progénote/S. +progéria/S. +progestative/F. +progestérone/S. +progiciel/S. +proglottis +prognathe/S. +prognathie/S. +prognathisme/S. +prognose/S. +prognostique/S. +progouvernementale/W. +programmabilité/S. +programmable/S. +programmathèque/S. +programmation/S. +programmatique/S. +programmatiquement +programmatrice/F. +programme/S. +programmer/a0p+ +programmeuse/F. +programmiste/S. +progrès +progresser/a0p. +progression/S. +progressisme/S. +progressiste/S. +progressive/F. +progressivement +progressivité/S. +prohiber/a0p+ +prohibition/S. +prohibitionnisme/S. +prohibitionniste/S. +prohibitive/F. +proie/S. +projecteur/S. +projectile/S. +projection/S. +projectionniste/S. +projective/F. +projectivement +projectivisée/F. +projecture/S. +projet/S. +projetable/S. +projeter/d0p+ +projeteur/S. +prolactine/S. +prolamine/S. +prolan/S. +prolapsus +prolatif/S. +prolégomènes +prolepse/S. +prolétaire/S. +prolétairement +prolétariat/S. +prolétarienne/F. +prolétarisation/S. +prolétariser/a0p+ +proliférante/F. +prolifération/S. +proliférative/F. +proliférer/c0p. +prolificité/S. +prolifique/S. +proligère/S. +proline/S. +prolixe/S. +prolixement +prolixité/S. +prolo/S. +prologue/S. +prolongateur/S. +prolongation/S. +prolongeable/S. +prolongement/S. +prolonger/a0p+ +promenade/S. +promener/b0p+ +promeneuse/F. +promenoir/S. +promesse/S. +prométhéenne/F. +prométhéum/S. +prometteuse/F. +promettre/vA +promiscue/S. +promiscuité/S. +promise/F. +promission/S. +promissoire/S. +promo/S. +promontoire/S. +promotion/S. +promotionnaire/S. +promotionnelle/F. +promotionner/a0p+ +promotrice/F. +promouvable/S. +promouvoir/pH +prompte/F. +promptement +prompteur/S. +promptitude/S. +promulgation/S. +promulguer/a0p+ +pronaos +pronation/S. +pronatrice/F. +prône/S. +pronéphros +prôner/a0p+ +prôneuse/F. +pronom/S. +pronominale/W. +pronominalement +pronominalisation/S. +prononçable/S. +prononcé/S. +prononcer/a0p+ +prononciation/S. +pronostic/S. +pronostication/S. +pronostique/S. +pronostiquer/a0p+ +pronostiqueuse/F. +pronucléaire/S. +pronucleus +pronucléus +pronunciamiento/S. +pro-occidentale/W. +propagande/S. +propagandiste/S. +propagation/S. +propagatrice/F. +propager/a0p+ +propagule/S. +propanal/S. +propane/S. +propanier/S. +propanoïque/S. +propanol/S. +propanone/S. +proparoxyton/S. +propective/S. +propédeute/S. +propédeutique/S. +propène/S. +propension/S. +propergol/S. +propérispomène/S. +propérispomène/S. +propfan/S. +propharmacienne/F. +prophase/S. +prophète/S. +prophétesse/S. +prophétie/S. +prophétique/S. +prophétiquement +prophétiser/a0p+ +prophétisme/S. +prophylactique/S. +prophylaxie/S. +propice/S. +propionique/S. +propipette/S. +propithèque/S. +propitiation/S. +propitiatoire/S. +proplaste/S. +propolis +proportion/S. +proportionnaliste/S. +proportionnalité/S. +proportionnelle/F. +proportionnellement +proportionnément +proportionner/a0p+ +propos +proposable/S. +proposer/a0p+ +proposition/S. +propositionnelle/F. +propranolol/S. +propre/S. +propre/S. +propre-à-rien +proprement +propres-à-rien +propreté/S. +propréteur/S. +proprette/F. +propréture/S. +propriétaire/S. +propriété/S. +proprio/S. +proprioception/S. +proprioceptive/F. +proprioceptivité/S. +propulser/a0p+ +propulseur/S. +propulsion/S. +propulsive/F. +propyle/S. +propylée/S. +propylène/S. +propyne/S. +propyzamide/S. +prorata +prorogation/S. +prorogative/F. +proroger/a0p+ +prosaïque/S. +prosaïquement +prosaïsme/S. +prosatrice/F. +proscenium/S. +proscripteur/S. +proscription/S. +proscrire/y1 +proscrite/F. +prose/S. +prosecteur/S. +prosectorat/S. +prosélyte/S. +prosélytique/S. +prosélytisme/S. +prosencéphale/S. +prosimien/S. +proskynèse/S. +prosobranche/S. +prosociale/W. +prosodie/S. +prosodier/a0p+ +prosodique/S. +prosopagnosie/S. +prosopagnosique/S. +prosopographie/S. +prosopopée/S. +prospect/S. +prospectable/S. +prospecter/a0p+ +prospection/S. +prospective/F. +prospectiviste/S. +prospectrice/F. +prospectus +prospère/S. +prospérer/c0p. +prospérité/S. +prostaglandine/S. +prostate/S. +prostatectomie/S. +prostatique/S. +prostatisme/S. +prostatite/S. +prosternation/S. +prosternée/F. +prosternement/S. +prosterner/a0p+ +prosthèse/S. +prosthétique/S. +prostituée/F. +prostituer/a0p+ +prostitution/S. +prostitutionnelle/F. +prostration/S. +prostrée/F. +prostyle/S. +prostyle/S. +protactinium/S. +protagoniste/S. +protamine/S. +protandre/S. +protandrie/S. +protase/S. +prote/S. +protéagineuse/W. +protéagineux +protéase/S. +protection/S. +protectionnelle/F. +protectionnisme/S. +protectionniste/S. +protectorat/S. +protectrice/F. +protée/S. +protège-cahier +protège-cahier/S. +protège-dents +protégée/F. +protège-genou/X. +protéger/c0p+ +protège-slip/S. +protège-tibia +protège-tibia/S. +protéide/S. +protéiforme/S. +protéine/S. +protéinée/F. +protéinémie/S. +protéinique/S. +protéinogène/S. +protéinogramme/S. +protéinurie/S. +protéique/S. +protéisme/S. +protèle/S. +protension/S. +protéoglycane/S. +protéolyse/S. +protéolytique/S. +protéome/S. +protéomique/S. +protéomique/S. +protérandrie/S. +protéroglyphe/S. +protérozoïque/S. +protérozoïque/S. +protestable/S. +protestante/F. +protestantisme/S. +protestataire/S. +protestation/S. +protester/a0p+ +protêt/S. +prothalle/S. +prothèse/S. +prothésiste/S. +prothétique/S. +prothioconazole/S. +prothorax +prothrombine/S. +protide/S. +protidique/S. +protique/S. +protiste/S. +protistologie/S. +protistologue/S. +protium/S. +proto +proto/S. +protocarbure/S. +protocellule/S. +protochlorure/S. +protochrétienne/F. +proto-chrétienne/F. +protococcus +protocolaire/S. +protocolairement +protocole/S. +protoconque/S. +protoétoile/S. +proto-étoile/S. +protogalactique/S. +protogalaxie/S. +protogine/S. +protogyne/S. +protogynie/S. +protohistoire/S. +protohistorienne/F. +protohistorique/S. +proto-industrialisation/S. +protolyse/S. +protomé/S. +protomère/S. +protométrie/S. +proton/S. +protonée/F. +protonéma/S. +protonique/S. +protonotaire/S. +protonthérapie/S. +protophyte/S. +protoplanétaire/S. +protoplanète/S. +protoplasma/S. +protoplasme/S. +protoplasmique/S. +protoplaste/S. +protoptère/S. +protosulfure/S. +prototypage/S. +prototype/S. +prototyper/a0p+ +prototypique/S. +prototypiste/S. +protoure/S. +protoxyde/S. +protozoaire/S. +protozoologie/S. +protractile/S. +protrusion/S. +protubérance/S. +protubérante/F. +protutrice/F. +prou +proudhonienne/F. +proue/S. +prouesse/S. +proustienne/F. +prout/S. +prouter/a0p. +prouvable/S. +prouver/a0p+ +provection/S. +provéditeur/S. +provenance/S. +provençale/W. +provençalisme/S. +provende/S. +provenir/i0q+ +proverbe/S. +proverbiale/W. +proverbialement +proverbialiser/a0p+ +providence/S. +providente/F. +providentialisme/S. +providentielle/F. +providentiellement +provignage/S. +provignement/S. +provigner/a0p+ +provin/S. +province/S. +provincialat/S. +provinciale/W. +provincialement +provincialisation/S. +provincialisme/S. +provirale/W. +provirus +proviseure/F. +provision/S. +provisionnelle/F. +provisionnellement +provisionnement/S. +provisionner/a0p+ +provisoire/S. +provisoire/S. +provisoirement +provisorat/S. +provitamine/S. +provo/S. +provoc/S. +provocante/F. +provocation/S. +provocatrice/F. +provolone/S. +provoquer/a0p+ +proxémique/S. +proxène/S. +proxénète/S. +proxénétisme/S. +proximale/W. +proximité/S. +proxy/A. +proyer/S. +pruche/S. +prude/S. +prudemment +prudence/S. +prudente/F. +prudentielle/F. +pruderie/S. +prud'homale/W. +prud'homie/S. +prudhommale/W. +prudhomme/S. +prud'homme/S. +prudhommerie/S. +prudhommesque/S. +prudhommie/S. +pruine/S. +prune +prune/S. +pruneau/X. +prunelaie/S. +prunelée/S. +prunelle/S. +prunellidé/S. +prunellier/S. +pruner +prunier/S. +prunus +prurigineuse/W. +prurigo/S. +prurit/S. +prussiate/S. +prussienne/F. +prussik/S. +prussique/S. +prytane/S. +prytanée/S. +psallette/S. +psalliote/S. +psalmiste/S. +psalmodie/S. +psalmodier/a0p+ +psalmodique/S. +psaltérion/S. +psammite/S. +psammophyte/S. +psaume/S. +psautier/S. +pschent/S. +pschitt +pseudarthrose/S. +pseudépigraphe/S. +pseudo/S. +pseudobulbaire/S. +pseudo-bulbaire/S. +pseudoconvexe/S. +pseudoconvexité/S. +pseudocycle/S. +pseudodifférentielle/F. +pseudodistance/S. +pseudoéphédrine/S. +pseudofécondation/S. +pseudo-fécondation/S. +pseudogroupe/S. +pseudo-groupe/S. +pseudohermaphrodisme/S. +pseudolangrayen/S. +pseudomembrane/S. +pseudo-membrane/S. +pseudomembraneuse/W. +pseudo-membraneuse/W. +pseudomorphose/S. +pseudonévroptère/S. +pseudo-névroptère/S. +pseudonymat/S. +pseudonyme/S. +pseudopériodique/S. +pseudopode/S. +pseudoriemannienne/F. +pseudo-riemannienne/F. +pseudoscience/S. +pseudo-science/S. +pseudoscientifique/S. +pseudo-scientifique/S. +pseudosection/S. +pseudotumeur/S. +psi +psilocybine/S. +psilophyte/S. +psilotum/S. +psionique/S. +psitt +psittacidé/S. +psittaciforme/S. +psittacisme/S. +psittacose/S. +psoas +psophomètre/S. +psoque/S. +psoralène/S. +psoriasique/S. +psoriasis +pst +psy/S. +psychanalyse/S. +psychanalyser/a0p+ +psychanalyste/S. +psychanalytique/S. +psychanalytiquement +psychasthénie/S. +psychasthénique/S. +psyché/S. +psychédélique/S. +psychédélisme/S. +psychiatre/S. +psychiatrie/S. +psychiatrique/S. +psychiatrisation/S. +psychiatriser/a0p+ +psychique/S. +psychiquement +psychisme/S. +psycho/S. +psychoacoustique/S. +psychoacoustique/S. +psychoactive/F. +psychoaffective/F. +psycho-affective/F. +psychoanaleptique/S. +psycho-analeptique/S. +psychoanaleptique/S. +psycho-analeptique/S. +psychobiologie/S. +psychobiologique/S. +psychochirurgie/S. +psychochirurgienne/F. +psychocriminologie/S. +psychocritique/S. +psychodramatique/S. +psychodrame/S. +psychodynamique/S. +psychodynamique/S. +psychodysleptique/S. +psychoéducation/S. +psycho-éducation/S. +psychoéducative/F. +psycho-éducative/F. +psychoéducatrice/F. +psycho-éducatrice/F. +psychogène/S. +psychogénéalogie/S. +psychogénéalogiste/S. +psychogenèse/S. +psychogénétique/S. +psychokinésie/S. +psychokinétique/S. +psycholeptique/S. +psycholinguiste/S. +psycholinguistique/S. +psychologie/S. +psychologique/S. +psychologiquement +psychologisante/F. +psychologisation/S. +psychologiser/a0p+ +psychologisme/S. +psychologiste/S. +psychologue/S. +psychomécanique/S. +psychométricienne/F. +psychométrie/S. +psychométrique/S. +psychomotrice/F. +psychomotricienne/F. +psychomotricité/S. +psychonévrose/S. +psychonévrotique/S. +psychopathe/S. +psychopathie/S. +psychopathique/S. +psychopathologie/S. +psychopathologique/S. +psychopédagogie/S. +psychopédagogique/S. +psychopédagogue/S. +psychopharmacologie/S. +psychopharmacologique/S. +psychopharmacologue/S. +psychophysicienne/F. +psychophysiologie/S. +psychophysiologique/S. +psychophysiologiste/S. +psychophysique/S. +psychophysique/S. +psychopolémologie/S. +psychopompe/S. +psychorigide/S. +psychorigidité/S. +psychose/S. +psychosensorielle/F. +psycho-sensori-motrice/F. +psychosexuelle/F. +psychosociale/W. +psychosociologie/S. +psychosociologique/S. +psychosociologue/S. +psychosomaticienne/F. +psychosomatique/S. +psychostimulant/S. +psychostimulante/F. +psychotechnicienne/F. +psychotechnique/S. +psychoter/a0 +psychothérapeute/S. +psychothérapeutique/S. +psychothérapie/S. +psychothérapique/S. +psychotique/S. +psychotonique/S. +psychotonique/S. +psychotraumatique/S. +psychotraumatisme/S. +psychotraumatologie/S. +psychotraumatologue/S. +psychotrope/S. +psychotrope/S. +psychromètre/S. +psychrométrie/S. +psychrophile/S. +psylle/S. +psyllium/S. +pt/S. +pt/||-- +ptéranodon/S. +ptéridophyte/S. +ptérobranche/S. +ptérodactyle/S. +ptéropode/S. +ptérosaure/S. +ptérosaurien/S. +ptérygion/S. +ptérygoïde/S. +ptérygoïdienne/F. +ptérygote/S. +ptérygotus +p'tite/F. +ptolémaïque/S. +ptoléméenne/F. +ptomaïne/S. +ptôse/S. +ptosis +ptôsis +ptyaline/S. +ptyalisme/S. +puante/F. +puanteur/S. +pub/S. +pubalgie/S. +pubère/S. +pubertaire/S. +puberté/S. +pubescence/S. +pubescente/F. +pubienne/F. +pubis +publiable/S. +public/S. +publicain/S. +publication/S. +publicatrice/F. +publiciel/S. +publicisation/S. +publiciser/a0p+ +publicisme/S. +publiciste/S. +publicitaire/S. +publicitairement +publicité/S. +publier/a0p+ +publi-information/S. +publiphone/S. +publipostage/S. +publique/F. +publiquement +publi-rédactionnel/S. +publireportage/S. +puçage/S. +puccinia/S. +puccinie/S. +puce/S. +pucelage/S. +pucelle/W. +pucer/a0p+ +puceron/S. +puche/S. +pucheux +pucier/S. +pudding/S. +puddlage/S. +puddler/a0p+ +puddleur/S. +pudendale/W. +pudeur/S. +pudibonde/F. +pudibonderie/S. +pudicité/S. +pudique/S. +pudiquement +puer/a0p+ +puéricultrice/F. +puériculture/S. +puérile/F. +puérilement +puérilisme/S. +puérilité/S. +puerpérale/W. +puerpéralité/S. +puffin/S. +puffiste/S. +pugilat/S. +pugiliste/S. +pugilistique/S. +pugnace/S. +pugnacité/S. +puînée/F. +puis +puisage/S. +puisard/S. +puisatier/S. +puisement/S. +puiser/a0p+ +puisette/S. +puisqu/-- +puisque +puissamment +puissance/S. +puissante/F. +puits +pulicaire/S. +pulicaire/S. +pull/S. +pullman/S. +pullorose/S. +pullover/S. +pull-over/S. +pullulante/F. +pullulation/S. +pullulement/S. +pulluler/a0p. +pulmonaire/S. +pulmonaire/S. +pulmoné/S. +pulmonie/S. +pulmonique/S. +pulpaire/S. +pulpe/S. +pulpectomie/S. +pulperie/S. +pulpeuse/W. +pulpite/S. +pulque/S. +pulsante/F. +pulsar/S. +pulsatile/S. +pulsation/S. +pulsative/F. +pulser/a0p+ +pulsion/S. +pulsionnelle/F. +pulsomètre/S. +pulsoréacteur/S. +pultacée/F. +pulvérin/S. +pulvérisable/S. +pulvérisateur/S. +pulvérisation/S. +pulvériser/a0p+ +pulvériseur/S. +pulvérulence/S. +pulvérulente/F. +puma/S. +puna/S. +punaise/S. +punaiser/a0p+ +punch/S. +puncheuse/F. +punching-ball/S. +puncture/S. +punique/S. +punir/f0p+ +punissable/S. +punisseuse/F. +punition/S. +punitive/F. +punk +punk/S. +punkette/S. +puntarelle/S. +puntillero/S. +pupaison/S. +pupazzo/I. +pupe/S. +pupillaire/S. +pupillarité/S. +pupille/S. +pupinisation/S. +pupipare/S. +pupitre/S. +pupitreuse/F. +pupulement/S. +pure/F. +pureau/X. +purée/S. +purement +pureté/S. +purgatif/S. +purgation/S. +purgative/F. +purgatoire/S. +purge/S. +purgeoir/S. +purger/a0p+ +purgeur/S. +purifiante/F. +purification/S. +purificatoire/S. +purificatoire/S. +purificatrice/F. +purifier/a0p+ +purin/S. +purine/S. +purique/S. +purisme/S. +puriste/S. +puritaine/F. +puritanisme/S. +purot/S. +purotin/S. +purpura/S. +purpurine/F. +purpurique/S. +pur-sang +purulence/S. +purulente/F. +pus +puseyisme/S. +push-pull +push-pull +pusillanime/S. +pusillanimement +pusillanimité/S. +pustule/S. +pustuler/a0p+ +pustuleuse/W. +putain/S. +putasserie/S. +putassière/F. +putative/F. +pute/S. +putier/S. +putiet/S. +putois +putréfaction/S. +putréfiable/S. +putréfier/a0p+ +putrescence/S. +putrescente/F. +putrescibilité/S. +putrescible/S. +putride/S. +putridité/S. +putsch/S. +putschiste/S. +putt/S. +putter/S. +putter/a0p. +putting/S. +putto/I. +puvathérapie/S. +puy/S. +puzzle/S. +px/||-- +pycnogonide/S. +pycnomètre/S. +pycnose/S. +pycnotique/S. +pyélite/S. +pyélonéphrite/S. +pygargue/S. +pygmalionisme/S. +pygmée/S. +pygméenne/F. +pyjama/S. +pylône/S. +pylore/S. +pylorique/S. +pyocyanique/S. +pyodermite/S. +pyogène/S. +pyogène/S. +pyorrhée/S. +pyothorax +pyracantha/S. +pyracanthe/S. +pyrale/S. +pyralène/S. +pyramidale/W. +pyramidalement +pyramide/S. +pyramidée/F. +pyramider/a0p. +pyramidion/S. +pyramidon/S. +pyrargyrite/S. +pyrazine/S. +pyrazole/S. +pyrène/S. +pyrénéenne/F. +pyrénéiste/S. +pyrénéite/S. +pyrénomycète/S. +pyrèthre/S. +pyréthrine/S. +pyréthrinoïde/S. +pyrétothérapie/S. +pyrex +pyrexie/S. +pyridine/S. +pyridoxal/S. +pyridoxine/S. +pyriméthanil/S. +pyrimicarbe/S. +pyrimidine/S. +pyrimidique/S. +pyrique/S. +pyrite/S. +pyriteuse/W. +pyrocatéchine/S. +pyroclastique/S. +pyrocorise/S. +pyroélectricité/S. +pyro-électricité/S. +pyroélectrique/S. +pyro-électrique/S. +pyrogallique/S. +pyrogallol/S. +pyrogénation/S. +pyrogène/S. +pyrogène/S. +pyrographe/S. +pyrograver/a0p+ +pyrograveuse/F. +pyrogravure/S. +pyrokinésie/S. +pyroligneuse/W. +pyrolusite/S. +pyrolyse/S. +pyrolyser/a0p+ +pyromane/S. +pyromanie/S. +pyrométallurgie/S. +pyromètre/S. +pyrométrie/S. +pyrométrique/S. +pyromorphite/S. +pyrope/S. +pyrophile/S. +pyrophore/S. +pyrophorique/S. +pyrophosphate/S. +pyrophosphorique/S. +pyrophyllite/S. +pyrophyte/S. +pyrophyte/S. +pyroscaphe/S. +pyrosis +pyrosome/S. +pyrosphère/S. +pyrosulfurique/S. +pyrotechnicienne/F. +pyrotechnie/S. +pyrotechnique/S. +pyroxène/S. +pyroxénite/S. +pyroxyle/S. +pyroxylée/F. +pyrrhique/S. +pyrrhonienne/F. +pyrrhonisme/S. +pyrrhotite/S. +pyrrole/S. +pyrrolidine/S. +pyrrolique/S. +pyruvate/S. +pyruvique/S. +pythagoricienne/F. +pythagorique/S. +pythagorisme/S. +pythie/S. +pythienne/F. +pythique/S. +pythique/S. +python/S. +pythonisse/S. +pyurie/S. +pyxide/S. +pz/||-- +q +qPCR +qanat/S. +qat/S. +qatarie/F. +qatarienne/F. +qbit/S. +qi +qu/-- +qua +quad/S. +quadra +quadra/S. +quadragénaire/S. +quadragésimale/W. +quadragésime/S. +quadrangle/S. +quadrangulaire/S. +quadrant/S. +quadratin/S. +quadratique/S. +quadrature/S. +quadrette/S. +quadribande/S. +quadribande/S. +quadricentenaire/S. +quadricentenaire/S. +quadriceps +quadrichromie/S. +quadricœur/S. +quadricœur/S. +quadricycle/S. +quadridimensionnelle/F. +quadriennale/W. +quadrifide/S. +quadrifoliée/F. +quadrige/S. +quadrijumeaux +quadrilatérale/W. +quadrilatère/S. +quadrilingue/S. +quadrilinguisme/S. +quadrillage/S. +quadrille/S. +quadriller/a0p+ +quadrillion/S. +quadrilobe/S. +quadrilobée/F. +quadrilogie/S. +quadrimestre/S. +quadrimestrielle/F. +quadrimoteur/S. +quadripartie/F. +quadripartite/S. +quadriphonie/S. +quadriplace/S. +quadriplace/S. +quadriplégie/S. +quadripolaire/S. +quadripôle/S. +quadrique/S. +quadrique/S. +quadriréacteur/S. +quadrirème/S. +quadrisaïeule/F. +quadrisaïeux +quadrisyllabe/S. +quadrisyllabique/S. +quadrivalence/S. +quadrivalente/F. +quadrivecteur/S. +quadrivium/S. +quadrumane/S. +quadrumane/S. +quadrupède/S. +quadrupède/S. +quadrupédie/S. +quadruple/S. +quadruple/S. +quadruplement/S. +quadrupler/a0p+ +quadruplet/S. +quadruplex +quadruplex +quadrupôle/S. +quahog/S. +quai/S. +quaiche/S. +quaker/S. +quakeresse/S. +quakerisme/S. +qualif/S. +qualifiable/S. +qualifiante/F. +qualificateur/S. +qualification/S. +qualificative/F. +qualifiée/F. +qualifier/a0p+ +qualitatif +qualitative/F. +qualitativement +qualité/S. +qualiticienne/F. +quand +quant +quant-à-soi +quanti +quantième/S. +quantifiable/S. +quantificateur/S. +quantification/S. +quantifier/a0p+ +quantile/S. +quantique/S. +quantique/S. +quantiquement +quantitatif/S. +quantitative/F. +quantitativement +quantité/S. +quanton/S. +quantum/I. +quarantaine/S. +quarante +quarante-cinq +quarante-cinquième/S. +quarante-deux +quarante-deuxième/S. +quarante-et-un +quarante-huit +quarante-huitarde/F. +quarante-huitième/S. +quarantenaire/S. +quarante-neuf +quarante-neuvième/S. +quarante-quatre +quarante-quatrième/S. +quarante-sept +quarante-septième/S. +quarante-six +quarante-sixième/S. +quarante-trois +quarante-troisième/S. +quarantième/S. +quarderonner/a0p+ +quark/S. +quarrer/a0p+ +quartager/a0p+ +quartanier/S. +quartation/S. +quartaut/S. +quarte/F. +quarté/S. +quartefeuille/S. +quartelette/S. +quartenier/S. +quarter/a0p+ +quarteronne/F. +quartet/S. +quartette/S. +quartidi/S. +quartier/S. +quartier-maître +quartiers-maîtres +quartile/S. +quartile/S. +quartique/S. +quart-monde +quarto +quartolet/S. +quarts-mondes +quartz +quartzeuse/W. +quartzifère/S. +quartzique/S. +quartzite/S. +quasar/S. +quasi +quasi/S. +quasi-contrat/S. +quasi-cristal/X. +quasi-délit/S. +quasiment +quasimodo/S. +quasi-monnaie/S. +quasi-particule/S. +quasi-totalité/S. +quassia/S. +quassier/S. +quassine/S. +quater +quaternaire/S. +quaterne/S. +quaternion/S. +quatorze +quatorzième/S. +quatorzièmement +quatrain/S. +quatre +quatre-de-chiffre +quatre-épices +quatre-feuilles +quatre-heures +quatre-mâts +quatre-quarts +quatre-quatre +quatre-saisons +quatre-temps +quatre-vingt/S= +quatre-vingt-cinq +quatre-vingt-cinquième/S. +quatre-vingt-deux +quatre-vingt-deuxième/S. +quatre-vingt-dix +quatre-vingt-dix-huit +quatre-vingt-dix-huitième/S. +quatre-vingt-dixième/S. +quatre-vingt-dixième/S. +quatre-vingt-dix-neuf +quatre-vingt-dix-neuvième/S. +quatre-vingt-dix-sept +quatre-vingt-dix-septième/S. +quatre-vingt-douze +quatre-vingt-douzième/S. +quatre-vingt-huit +quatre-vingt-huitième/S. +quatre-vingtième/S. +quatre-vingt-neuf +quatre-vingt-neuvième/S. +quatre-vingt-onze +quatre-vingt-onzième/S. +quatre-vingt-quatorze +quatre-vingt-quatorzième/S. +quatre-vingt-quatre +quatre-vingt-quatrième/S. +quatre-vingt-quinze +quatre-vingt-quinzième/S. +quatre-vingt-seize +quatre-vingt-seizième/S. +quatre-vingt-sept +quatre-vingt-septième/S. +quatre-vingt-six +quatre-vingt-sixième/S. +quatre-vingt-treize +quatre-vingt-treizième/S. +quatre-vingt-trois +quatre-vingt-troisième/S. +quatre-vingt-un +quatre-vingt-unième/S. +quatrième/S. +quatrièmement +quatrillion/S. +quattrocentiste/S. +quattrocento +quatuor/S. +qubit/S. +que +qué +québéciser/a0p+ +québécisme/S. +québécitude/S. +québecoise/F. +québécoise/F. +quebracho/S. +quechua/S. +queen/S. +queer/S. +quelconque/S. +quelle/F. +quelqu/-- +quelque +quelque/S. +quelque/S. +quelquefois +quelques-unes +quelques-uns +quelqu'un +quelqu'une +quémande/S. +quémander/a0p+ +quémandeuse/F. +qu'en-dira-t-on +quenelle/S. +quenotte/S. +quenouille/S. +quenouillée/S. +quenouillette/S. +quéquette/S. +quérable/S. +quercitrine/F. +quercitron/S. +querelle/S. +quereller/a0p+ +querelleuse/F. +querelleux +quérir +quérulence/S. +quérulente/F. +quesadilla/S. +questeur/S. +question/S. +questionnaire/S. +questionnement/S. +questionner/a0p+ +questionneuse/F. +questure/S. +quétaine/S. +quétainerie/S. +quête/S. +quêter/a0p+ +quêteuse/F. +quetsche/S. +quetschier/S. +quetter/a0p+ +quetzal/S. +quetzales +queue/S. +queue-d'aronde +queue-de-cheval +queue-de-cochon +queue-de-morue +queue-de-pie +queue-de-rat +queue-de-renard +queues-d'aronde +queues-de-cheval +queues-de-cochon +queues-de-morue +queues-de-pie +queues-de-rat +queues-de-renard +queuillère/S. +queursage/S. +queusot/S. +queutarde/F. +queuter/a0p+ +queux +qui +quia +quiche/S. +quichenotte/S. +quichua/S. +quiconque +quid +quidam/S. +quiddité/S. +quiescence/S. +quiescente/F. +quiète/F. +quiètement +quiétisme/S. +quiétiste/S. +quiétude/S. +quignon/S. +quillard/S. +quille/S. +quiller/a0p+ +quillette/S. +quilleuse/F. +quillier/S. +quillon/S. +quimper/a0p. +quinaire/S. +quinaire/S. +quinaude/F. +quincaille/S. +quincaillerie/S. +quincaillière/F. +quinconce/S. +quindécemvir/S. +quine/S. +quinée/F. +quinidine/S. +quinine/S. +quinoa/S. +quinoléine/S. +quinolone/S. +quinone/S. +quinqua +quinqua/S. +quinquagénaire/S. +quinquagésime/S. +quinquennale/W. +quinquennat/S. +quinquet/S. +quinquina/S. +quintaine/S. +quintal/X. +quinte/F. +quinté/S. +quintefeuille/S. +quintessence/S. +quintessencier/a0p+ +quintet/S. +quintette/S. +quinteuse/W. +quintidi/S. +quintillion/S. +quinto +quintolet/S. +quintologie/S. +quintuple/S. +quintuple/S. +quintuplées +quintupler/a0p+ +quintuplés +quintuplet/S. +quinzaine/S. +quinze +quinzième/S. +quinzièmement +quinziste/S. +quinzomadaire/S. +quipo/S. +quiproquo/S. +quipu/S. +quirite/S. +quiscale/S. +quittance/S. +quittancer/a0p+ +quitte/S. +quitter/a0p+ +quitus +qui-vive +quiz +quizalofop/S. +quo +quoailler +quoc-ngu +quôc-ngu +quoi +quoiqu/-- +quoique +quolibet/S. +quorum/S. +quota/S. +quote-part +quotes-parts +quotidienne/F. +quotidiennement +quotidienneté/S. +quotient/S. +quotité/S. +quotter/a0p. +qwerty +r +ra +rab/S. +rabâchage/S. +rabâchement/S. +rabâcher/a0p+ +rabâcherie/S. +rabâcheuse/F. +rabais +rabaissement/S. +rabaisser/a0p+ +raban/S. +rabane/S. +rabanter/a0p+ +rabat/S. +rabat-eau +rabat-joie +rabattable/S. +rabattage/S. +rabattant/S. +rabattante/F. +rabattement/S. +rabatteuse/F. +rabattoir/S. +rabattre/uA +rabattue/F. +rabat-vent +rabbi/S. +rabbin/S. +rabbinat/S. +rabbinique/S. +rabbinisme/S. +rabbiniste/S. +rabdomancie/S. +rabelaisienne/F. +rabiauter +rabibochage/S. +rabibocher/a0p+ +rabiot/S. +rabioter/a0p+ +rabique/S. +rabistoquer/a0p+ +râble/S. +râbler/a0p+ +râblure/S. +rabonnir/f0p+ +rabot/S. +rabotage/S. +rabotement/S. +raboter/a0p+ +raboteuse/F. +raboteuse/W. +rabotin/S. +raboudinage/S. +rabougrir/f0p+ +rabougrissement/S. +rabouillère/S. +rabouilleuse/F. +raboutage/S. +rabouter/a0p+ +rabrouement/S. +rabrouer/a0p+ +rabroueuse/F. +racabouillir +racage/S. +racagnac/S. +racahout/S. +racaille/S. +raccard/S. +raccommodable/S. +raccommodage/S. +raccommodement/S. +raccommoder/a0p+ +raccommodeuse/F. +raccompagnatrice/F. +raccompagnement/S. +raccompagner/a0p+ +raccord/S. +raccordable/S. +raccordement/S. +raccorder/a0p+ +raccourci/S. +raccourcir/f0p+ +raccourcissement/S. +raccourcisseur/S. +raccoutrer/a0p+ +raccoutumer/a0p+ +raccroc/S. +raccrochage/S. +raccrochement/S. +raccrocher/a0p+ +raccrocheuse/F. +raccuser/a0p. +raccuspoter/a0p. +race/S. +racée/F. +racème/S. +racémique/S. +racer/S. +rachat/S. +rachetable/S. +racheter/b0p+ +racheteuse/F. +rachialgie/S. +rachianesthésie/S. +rachidienne/F. +rachis +rachitique/S. +rachitisme/S. +raciale/W. +racialement +racialisation/S. +racialiser/a0p+ +racialisme/S. +racialiste/S. +racinage/S. +racinaire/S. +racinal/X. +racine/S. +raciner/a0p+ +racinienne/F. +raciologie/S. +racisée/F. +racisme/S. +raciste/S. +rack/S. +racket/S. +racketiciel/S. +racketter/a0p+ +racketteuse/F. +raclage/S. +racle/S. +raclée/S. +raclement/S. +racler/a0p+ +raclette/S. +racleuse/F. +racloir/S. +raclure/S. +racolage/S. +racoler/a0p+ +racoleuse/F. +racontable/S. +racontar/S. +raconter/a0p+ +raconteuse/F. +racornir/f0p+ +racornissement/S. +racrapoter/a0p+ +rad/U.||-- +radar/S. +radariste/S. +rade/S. +radeau/X. +rader/a0p+ +radeuse/S. +radiaire/S. +radiale/W. +radialement +radian/Um +radiance/S. +radiant/S. +radiante/F. +radiateur/S. +radiation/S. +radiative/F. +radicalaire/S. +radicale/W. +radicalement +radicale-socialiste +radicales-socialistes +radicalisation/S. +radicaliser/a0p+ +radicalisme/S. +radicalité/S. +radical-socialisme +radical-socialiste +radicande/S. +radicante/F. +radicaux-socialistes +radicelle/S. +radiculaire/S. +radiculalgie/S. +radicule/S. +radiculite/S. +radier/S. +radier/a0p+ +radiesthésie/S. +radiesthésiste/S. +radieuse/W. +radieusement +radifère/S. +radine/F. +radiner/a0p+ +radinerie/S. +radio/S. +radioactive/F. +radio-active/F. +radioactivité/S. +radio-activité/S. +radioalignement/S. +radio-alignement/S. +radioaltimètre/S. +radio-altimètre/S. +radioaltimétrique/S. +radioamatrice/F. +radio-amatrice/F. +radioastronome/S. +radio-astronome/S. +radioastronomie/S. +radio-astronomie/S. +radiobalisage/S. +radiobalise/S. +radiobaliser/a0p+ +radiobiologie/S. +radiobiologique/S. +radiobiologiste/S. +radioborne/S. +radiocarbone/S. +radiocassette/S. +radiochimie/S. +radiochimique/S. +radiochimiste/S. +radiochirurgie/S. +radiochronologie/S. +radiocobalt/S. +radiocommande/S. +radiocommandée/F. +radiocommunication/S. +radiocompas +radioconducteur/S. +radiocristallographie/S. +radiodermite/S. +radiodétection/S. +radiodiagnostic/S. +radiodiffuser/a0p+ +radiodiffuseur/S. +radiodiffusion/S. +radioélectricienne/F. +radio-électricienne/F. +radioélectricité/S. +radio-électricité/S. +radioélectrique/S. +radio-électrique/S. +radioélément/S. +radio-élément/S. +radiofréquence/S. +radiogalaxie/S. +radiogénique/S. +radiogoniomètre/S. +radiogoniométrie/S. +radiogoniométrique/S. +radiogramme/S. +radiographe/S. +radiographie/S. +radiographier/a0p+ +radiographique/S. +radioguidage/S. +radioguider/a0p+ +radiohéliographe/S. +radio-immunologie/S. +radio-isotope/S. +radiolaire/S. +radiolarite/S. +radiolésion/S. +radiolocalisation/S. +radiologie/S. +radiologique/S. +radiologiquement +radiologiste/S. +radiologue/S. +radiolyse/S. +radiomessagerie/S. +radiométallographie/S. +radiomètre/S. +radiométrie/S. +radiométrique/S. +radionavigante/F. +radionavigation/S. +radionécrose/S. +radionucléide/S. +radiophare/S. +radiophonie/S. +radiophonique/S. +radiophotographie/S. +radioprotection/S. +radioralliement/S. +radiorécepteur/S. +radiorepérage/S. +radioreportage/S. +radioreporter/S. +radio-réveil +radioscope/S. +radioscoper/a0p+ +radioscopie/S. +radioscopique/S. +radiosensibilité/S. +radiosensible/S. +radiosondage/S. +radiosonde/S. +radios-réveils +radio-taxi/S. +radiotechnique/S. +radiotechnique/S. +radiotélégraphie/S. +radiotélégraphier/a0p+ +radiotélégraphique/S. +radiotélégraphiste/S. +radiotéléphone/S. +radiotéléphonie/S. +radiotéléphonique/S. +radiotéléphoniste/S. +radiotélescope/S. +radiotélévisée/F. +radiotélévision/S. +radiothérapeute/S. +radiothérapie/S. +radiothérapique/S. +radiotoxicité/S. +radiotoxique/S. +radique/S. +radis +radium/S. +radiumthérapie/S. +radius +radja/S. +radjah/S. +radôme/S. +radon/S. +radotage/S. +radoter/a0p. +radoterie/S. +radoteuse/F. +radoub/S. +radouber/a0p+ +radoucir/f0p+ +radoucissement/S. +rafale/S. +raffermir/f0p+ +raffermissement/S. +raffinage/S. +raffinat/S. +raffinement/S. +raffiner/a0p+ +raffinerie/S. +raffineuse/F. +raffinose/S. +rafflesia/S. +rafflésie/S. +raffoler/a0p. +raffut/S. +raffûter/a0p+ +rafiot/S. +rafistolage/S. +rafistoler/a0p+ +rafle/S. +rafler/a0p+ +rafraîchie/F. +rafraîchir/f0p+ +rafraîchissante/F. +rafraîchissement/S. +rafraîchisseur/S. +rafraîchissoir/S. +raft/S. +rafting/S. +ragaillardir/f0p+ +rage/S. +rageante/F. +rager/a0p. +rageuse/F. +rageusement +raggamuffin/S. +raglan/S. +ragondin/S. +ragot/S. +ragoter/a0p. +ragougnasse/S. +ragoût/S. +ragoutante/F. +ragoûtante/F. +ragoûter/a0p+ +ragrafer/a0p+ +ragrandir/f0p+ +ragréage/S. +ragréer/a0p+ +ragréeuse/F. +ragtime/S. +rag-time/S. +rague/S. +raguer/a0p. +rahat-lokoum/S. +rahat-loukoum/S. +raï +rai/S. +raïa/S. +raid/S. +raide/S. +rai-de-cœur +raidement +raider/S. +raideur/S. +raidillon/S. +raidir/f0p+ +raidissement/S. +raidisseur/S. +raie/S. +raifort/S. +rail/S. +raille/S. +railler/a0p+ +raillère/S. +raillerie/S. +railleuse/F. +railleusement +rail-route +rainage/S. +raine/S. +rainer/a0p+ +raineter/d0p+ +rainette/S. +rainurage/S. +rainure/S. +rainurer/a0p+ +raiponce/S. +raire/wM +raïs +rais-de-cœur +raisin/S. +raisiné/S. +raison/S. +raisonnable/S. +raisonnablement +raisonnante/F. +raisonnement/S. +raisonner/a0p+ +raisonneuse/F. +raja/S. +rajah/S. +rajasthani/S. +rajeunir/f0p+ +rajeunissante/F. +rajeunissement/S. +rajeunisseuse/F. +rajout/S. +rajouter/a0p+ +rajustement/S. +rajuster/a0p+ +raki/S. +râlante/F. +râle/S. +râlement/S. +ralenti/S. +ralentir/f0p+ +ralentissement/S. +ralentisseur/S. +râler/a0p. +râlerie/S. +râleuse/F. +ralingue/S. +ralinguer/a0p+ +ralléger/c0p. +rallidé/S. +ralliée/F. +ralliement/S. +rallier/a0p+ +rallonge/S. +rallongement/S. +rallonger/a0p+ +rallumage/S. +rallumer/a0p+ +rallye/S. +ramadan/S. +ramadanesque/S. +ramage/S. +ramager/a0p+ +ramailler/a0p+ +ramander/a0p+ +ramapithèque/S. +ramarrer/a0p+ +ramassage/S. +ramasse/S. +ramasse-couverts +ramasse-feuilles +ramassement/S. +ramasse-miettes +ramasse-monnaie +ramasse-pâtes +ramasse-poussière +ramasser/a0p+ +ramassette/S. +ramasseuse/F. +ramassis +ramassoire/S. +ramastiquer/a0p+ +rambarde/S. +rambiner/a0p. +rambour/S. +ramboutan/S. +ramdam/S. +rame/S. +raméale/W. +rameau/X. +ramée/S. +ramenarde/F. +ramender/a0p+ +ramendeuse/F. +ramener/b0p+ +ramequin/S. +ramer/a0p+ +ramereau/X. +ramerot/S. +ramescence/S. +rameter/d0p. +ramette/S. +rameuse/F. +rameuse/W. +rameuter/a0p+ +rami/S. +ramie/S. +ramier/S. +ramification/S. +ramifier/a0p+ +ramille/S. +ramingue/S. +ramollir/f0p+ +ramollissante/F. +ramollissement/S. +ramollo/S. +ramon/S. +ramonage/S. +ramoner/a0p+ +ramoneuse/F. +rampante/F. +rampe/S. +rampeau/X. +rampement/S. +ramper/a0p. +ramponeau/X. +ramponneau/X. +ramure/S. +ramus +ranatre/S. +rancard/S. +rancarder/a0p+ +rancart/S. +rance/S. +rancescible/S. +ranch/A. +ranche/S. +rancher/S. +rancidité/S. +rancio/S. +rancir/f0p+ +rancissement/S. +rancissure/S. +rancœur/S. +rançon/S. +rançongiciel/S. +rançonnement/S. +rançonner/a0p+ +rançonneuse/F. +rancune/S. +rancuneuse/W. +rancunière/F. +rand/S. +rando/S. +randomisation/S. +randomiser/a0p+ +randonnée/S. +randonner/a0p. +randonneuse/F. +rang/S. +rangée/S. +rangement/S. +ranger/S. +ranger/a0p+ +rangeuse/F. +rani/S. +ranidé/S. +ranimable/S. +ranimation/S. +ranimer/a0p+ +ranz +raouster +raout/S. +rap/S. +rapace/S. +rapacité/S. +râpage/S. +rapapilloter/a0p+ +rapatriement/S. +rapatrier/a0p+ +rapatronnage/S. +rapatronner/a0p+ +râpe/S. +râper/a0p+ +râperie/S. +rapetassage/S. +rapetasser/a0p+ +rapetissement/S. +rapetisser/a0p+ +râpeuse/W. +raphia/S. +raphide/S. +rapiate/F. +rapide/S. +rapidement +rapidité/S. +rapiéçage/S. +rapiècement/S. +rapiécer/c0p+ +rapiéceter/d0p+ +rapière/S. +rapin/S. +rapine/S. +rapiner/a0p. +rapinerie/S. +rapipoter/a0p. +raplapla +raplatir/f0p+ +rapointir/f0p+ +rappareiller/a0p+ +rappariement/S. +rapparier/a0p+ +rappel/S. +rappelable/S. +rappelée/F. +rappeler/d0p+ +rapper/a0p+ +rappeuse/F. +rappliquer/a0p. +rappointir/f0p+ +rappointis +rapport/S. +rapportable/S. +rapportage/S. +rapporter/a0p+ +rapporteuse/F. +rapprendre +rapprochement/S. +rapprocher/a0p+ +rapproprier/a0p+ +rapprovisionner/a0p+ +rappuyer/a0p+ +rapt/S. +râpure/S. +raquer/a0p+ +raquetière/F. +raquette/S. +raquetteuse/F. +rare/S. +raréfaction/S. +raréfiable/S. +raréfier/a0p+ +rarement +rarescente/F. +rareté/S. +rarissime/S. +rarissimement +ras +rasade/S. +rasage/S. +rasance/S. +rasante/F. +rasbora/S. +rascasse/S. +ras-du-cou +rase/F. +ras-el-hanout +rase-mottes +rase-pet +raser/a0p+ +rasette/S. +raseuse/F. +rash/A. +rasibus +ras-le-bol +rasoir +rasoir/S. +raspoutitsa/S. +rassasiante/F. +rassasiement/S. +rassasier/a0p+ +rassemblement/S. +rassembler/a0p+ +rassembleuse/F. +rasseoir/pS +rasséréner/c0p+ +rassir/f0p+ +rassise/F. +rassissement/S. +rassortiment/S. +rassortir +rassoul/S. +rassurante/F. +rassurement/S. +rassurer/a0p+ +rasta/S. +rastafari/S. +rastafarienne/F. +rastafarisme/S. +rastaquouère/S. +raster/S. +ratafia/S. +ratage/S. +rataplan +ratatinage/S. +ratatinement/S. +ratatiner/a0p+ +ratatouille/S. +ratatouiller/a0p. +rate/F. +râteau/X. +ratée/F. +ratel/S. +râtelage/S. +râteler/d0p+ +râteleuse/F. +râtelier/S. +râtelures +rater/a0p+ +ratiboiser/a0p+ +ratiche/S. +ratichon/S. +raticide/S. +raticide/S. +ratière/F. +ratification/S. +ratifier/a0p+ +ratinage/S. +ratiner/a0p+ +rating/S. +ratio/S. +ratiocinante/F. +ratiocination/S. +ratiociner/a0p. +ratiocineuse/F. +ration/S. +rational/X. +rationalisante/F. +rationalisation/S. +rationaliser/a0p+ +rationalisme/S. +rationaliste/S. +rationalité/S. +rationnaire/S. +rationnel/S. +rationnelle/F. +rationnellement +rationnement/S. +rationner/a0p+ +ratissage/S. +ratisser/a0p+ +ratissoire/S. +ratite/S. +raton/S. +ratonnade/S. +ratonner/a0p+ +ratonneur/S. +rattachable/S. +rattachement/S. +rattacher/a0p+ +rattachisme/S. +rattachiste/S. +ratte/S. +rattrapable/S. +rattrapage/S. +rattraper/a0p+ +raturage/S. +rature/S. +raturer/a0p+ +rauchage/S. +raucheur/S. +raucité/S. +raugmenter/a0p+ +rauque/S. +rauquement/S. +rauquer/a0p. +rauwolfia/S. +ravage/S. +ravager/a0p+ +ravageuse/F. +ravalement/S. +ravaler/a0p+ +ravaleur/S. +ravaudage/S. +ravauder/a0p+ +ravaudeuse/F. +rave/S. +ravelin/S. +ravenala/S. +ravenelle/S. +rave-party/A. +raveuse/F. +ravier/S. +ravière/S. +ravigotante/F. +ravigote/S. +ravigoter/a0p+ +ravilir/f0p+ +ravine/F. +ravinement/S. +raviner/a0p+ +ravineuse/W. +raviole/S. +ravioli +ravioli/S. +ravir/f0p+ +ravisement/S. +raviser/a0p+ +ravissante/F. +ravissement/S. +ravisseuse/F. +ravitaillement/S. +ravitailler/a0p+ +ravitailleur/S. +ravivage/S. +ravivement/S. +raviver/a0p+ +ravoir +ravoirage/S. +rawette/S. +raya/S. +rayable/S. +rayage/S. +rayement/S. +rayer/a0p+ +rayère/S. +ray-grass +rayon/S. +rayonnage/S. +rayonnante/F. +rayonne/S. +rayonnement/S. +rayonner/a0p+ +rayonnisme/S. +rayure/S. +raz +raz-de-marée +razzia/S. +razzier/a0p+ +ré +réa/S. +réabonnement/S. +réabonner/a0p+ +réabsorber/a0p+ +réabsorption/S. +réac/S. +réacclimatation/S. +réacclimater/a0p+ +réaccoutumance/S. +réaccoutumer/a0p+ +réacheminement/S. +réacheminer/a0p+ +réacquérir/iK +réacquise/F. +réactance/S. +réactant/S. +réacteur/S. +réaction/S. +réactionnaire/S. +réactionnelle/F. +réactivation/S. +réactive/F. +réactiver/a0p+ +réactivité/S. +réactrice/F. +réactualisation/S. +réactualiser/a0p+ +réadaptation/S. +réadapter/a0p+ +réadjudication/S. +réadmettre/vA +réadmission/S. +réadressage/S. +ready-made +ready-made/S. +réaffectation/S. +réaffecter/a0p+ +réaffirmation/S. +réaffirmer/a0p+ +réaffûter/a0p+ +réagencement/S. +réagencer/a0p+ +réagir/f0p. +réajustement/S. +réajuster/a0p+ +réal/X. +réale/W. +réalésage/S. +réaléser/c0p+ +réalgar/S. +réalignement/S. +réaligner/a0p+ +réalimentation/S. +réalimenter/a0p+ +réalisabilité/S. +réalisable/S. +réalisation/S. +réalisatrice/F. +réaliser/a0p+ +réalisme/S. +réaliste/S. +réalistement +réalité/S. +reality-show/S. +réallocation/S. +realpolitik/S. +réalpolitik/S. +réaménagement/S. +réaménager/a0p+ +réamorçage/S. +réamorcer/a0p+ +réanalyser/a0p+ +réanimation/S. +réanimatrice/F. +réanimer/a0p+ +réapparaître/wQq+ +réapparition/S. +réappliquer/a0p+ +réappréciation/S. +réapprendre/tF +réapprentissage/S. +réappropriation/S. +réapproprier/a0p+ +réapprovisionnement/S. +réapprovisionner/a0p+ +réargenter/a0p+ +réarmable/S. +réarmement/S. +réarmer/a0p+ +réarrangement/S. +réarranger/a0p+ +réassembler/a0p+ +réassignation/S. +réassigner/a0p+ +réassort/S. +réassortiment/S. +réassortir/f0p+ +réassumer/a0p+ +réassurance/S. +réassurer/a0p+ +réassureur/S. +réatterrir/f0p+ +réattribuer/a0p+ +réattribution/S. +réaxer/a0p+ +rebab/S. +rebaisser/a0p. +rebander/a0p+ +rebaptiser/a0p+ +rébarbative/F. +rebasculer/a0p+ +rebâtir/f0p+ +rebattement/S. +rebattre/uA +rebec/S. +rebecter/a0p+ +rebelle/S. +rebeller/a0p+ +rébellion/S. +rébellionner +rebelote +rebeue/F. +rebibe/S. +rebiffer/a0p+ +rebiquer/a0p. +reblanchir/f0p+ +reblochon/S. +rebmane/F. +rebobinage/S. +rebobiner/a0p+ +reboire/xC +reboisement/S. +reboiser/a0p+ +reboiseuse/F. +rebond/S. +rebondir/f0p+ +rebondissante/F. +rebondissement/S. +rebonjour +rebonneter +rebord/S. +reborder/a0p+ +rebot/S. +rebouchage/S. +reboucher/a0p+ +rebouclage/S. +reboucler/a0p+ +rebouillage/S. +rebouiser +rebours +reboutage/S. +reboutement/S. +rebouter/a0p+ +rebouteuse/F. +rebouteux +reboutonner/a0p+ +rebraguetter/a0p+ +rebrancher/a0p+ +rebras +rebroder/a0p+ +rebroussement/S. +rebrousse-poil +rebrousser/a0p+ +rebrûler/a0p. +rebuffade/S. +rébus +rebuse/S. +rebut/S. +rebutante/F. +rebuter/a0p+ +recâblage/S. +recâbler/a0p+ +recacher/a0p+ +recacheter/d0p+ +recadrage/S. +recadrement/S. +recadrer/a0p+ +recalage/S. +recalcification/S. +recalcifier/a0p+ +récalcitrante/F. +récalcitrer/a0p. +recalculer/a0p+ +recaler/a0p+ +recalibrage/S. +recalibrer/a0p+ +recapitalisation/S. +recapitaliser/a0p+ +récapitulation/S. +récapitulative/F. +récapituler/a0p+ +recapturer/a0p+ +recarburation/S. +recarburée/F. +recarder/a0p+ +recarrelage/S. +recarreler/d0p+ +recaser/a0p+ +recasquante/F. +recauser/a0p. +recéder/c0p+ +recel/S. +recèlement/S. +receler/b0p+ +receleuse/F. +récemment +récence/S. +recensable/S. +recensement/S. +recenser/a0p+ +recenseuse/F. +recension/S. +récente/F. +recentrage/S. +recentrement/S. +recentrer/a0p+ +recepage/S. +recépage/S. +recepée/S. +recépée/S. +receper/b0p+ +recéper/c0p+ +récépissé/S. +réceptacle/S. +réception/S. +réceptionnaire/S. +réceptionner/a0p+ +réceptionniste/S. +réceptive/F. +réceptivité/S. +réceptrice/F. +recercelée/F. +recerclage/S. +recercler/a0p+ +recès +récession/S. +récessive/F. +récessivité/S. +récessus +recette/S. +recevabilité/S. +recevable/S. +receveuse/F. +recevoir/pK +recez +rechampir/f0p+ +réchampir/f0p+ +rechampissage/S. +réchampissage/S. +rechange/S. +rechanger/a0p+ +rechanter/a0p+ +rechapage/S. +rechaper/a0p+ +réchapper/a0p. +recharge/S. +rechargeable/S. +rechargement/S. +recharger/a0p+ +rechargeur/S. +rechasser/a0p+ +réchaud/S. +réchauffage/S. +réchauffante/F. +réchauffement/S. +réchauffer/a0p+ +réchauffeur/S. +réchauffisme/S. +réchauffiste/S. +réchauffoir/S. +rechaussement/S. +rechausser/a0p+ +rêche/S. +recherche/S. +rechercher/a0p+ +recherchiste/S. +rechignée/F. +rechignement/S. +rechigner/a0p. +rechigneuse/W. +rechristianisation/S. +rechristianiser/a0p+ +rechute/S. +rechuter/a0p. +récidivante/F. +récidive/S. +récidiver/a0p. +récidivisme/S. +récidiviste/S. +récidivité/S. +récif/S. +récifale/W. +recingle/S. +récipiendaire/S. +récipient/S. +réciprocité/S. +réciproque/S. +réciproquement +réciproquer/a0p+ +recirculation/S. +récit/S. +récital/S. +récitante/F. +récitatif/S. +récitation/S. +récitatrice/F. +réciter/a0p+ +réciteuse/F. +réclamante/F. +réclamation/S. +réclame/S. +réclamer/a0p+ +reclaper/a0p+ +reclassement/S. +reclasser/a0p+ +reclassification/S. +récliner/a0p. +reclouer/a0p+ +reclure/xJ +recluse/F. +recluserie/S. +réclusion/S. +reclusionnaire/S. +réclusionnaire/S. +recodage/S. +recoder/a0p+ +recognition/S. +récognition/S. +récognitive/F. +recoiffer/a0p+ +recoin/S. +récolement/S. +récoler/a0p+ +recollage/S. +récollection/S. +recollement/S. +recoller/a0p+ +récollette/F. +recolleuse/F. +recolonisation/S. +recoloniser/a0p+ +recoloration/S. +recolorer/a0p+ +récoltable/S. +récoltante/F. +récolte/S. +récolter/a0p+ +récolteuse/F. +recombinaison/S. +recombinante/F. +recombiner/a0p+ +recommandable/S. +recommandation/S. +recommandé/S. +recommander/a0p+ +recommencement/S. +recommencer/a0p+ +recomparaître/wQq. +récompense/S. +récompenser/a0p+ +recompiler/a0p+ +recompléter/c0p+ +recomposable/S. +recomposer/a0p+ +recomposition/S. +recompresser/a0p+ +recompression/S. +recomptage/S. +recompter/a0p+ +réconciliable/S. +réconciliation/S. +réconciliatrice/F. +réconcilier/a0p+ +recondamner/a0p+ +reconditionnement/S. +reconditionner/a0p+ +reconductible/S. +reconduction/S. +reconduire/yL +reconduite/S. +reconfigurable/S. +reconfiguration/S. +reconfigurer/a0p+ +reconfirmer/a0p+ +réconfort/S. +réconfortante/F. +réconforter/a0p+ +recongélation/S. +recongeler/b0p+ +reconnaissable/S. +reconnaissance/S. +reconnaissante/F. +reconnaître/wQq+ +reconnecter/a0p+ +reconnexion/S. +reconquérante/F. +reconquérir/iK +reconquête/S. +reconsidération/S. +reconsidérer/c0p+ +reconsolidation/S. +reconsolider/a0p+ +reconstituable/S. +reconstituante/F. +reconstituer/a0p+ +reconstitution/S. +reconstruction/S. +reconstructive/F. +reconstructrice/F. +reconstruire/yM +recontacter/a0p+ +recontracter/a0p+ +recontrôler/a0p+ +reconvalescence/S. +reconvention/S. +reconventionnelle/F. +reconventionnellement +reconversion/S. +reconvertir/f0p+ +reconvoquer/a0p+ +recopiage/S. +recopier/a0p+ +recoquiller/a0p+ +record +record/S. +recordage/S. +recorder/a0p+ +recordman/A. +recordwoman/A. +recorriger/a0p+ +recors +recoucher/a0p+ +recoudre/xO +recoupage/S. +recoupe/S. +recoupement/S. +recouper/a0p+ +recoupette/S. +recouponner/a0p+ +recourante/F. +recourbement/S. +recourber/a0p+ +recourbure/S. +recourir/iD +recours +recouvrable/S. +recouvrage/S. +recouvrance/S. +recouvrante/F. +recouvrement/S. +recouvrer/a0p+ +recouvreuse/F. +recouvrir/iC +recracher/a0p+ +récré/S. +récréance/S. +recréation/S. +récréation/S. +récréationnelle/F. +récréative/F. +recréatrice/F. +recréer/a0p+ +récréer/a0p+ +récrément/S. +recrépir/f0p+ +recrépissage/S. +recreuser/a0p+ +récrier/a0p+ +récrimination/S. +récriminatoire/S. +récriminatrice/F. +récriminée/F. +récriminer/a0p. +récrire/y1 +recristallisation/S. +recristalliser/a0p+ +recroiser/a0p+ +recroître/wT +recroller/a0p. +recroquevillement/S. +recroqueviller/a0p+ +recrû/S. +recrudescence/S. +recrudescente/F. +recrue/F. +recrue/S. +recrutable/S. +recrutement/S. +recruter/a0p+ +recruteuse/F. +recta +rectale/W. +rectangle/S. +rectangulaire/S. +rectifiable/S. +rectification/S. +rectificative/F. +rectificatrice/F. +rectifier/a0p+ +rectifieuse/F. +rectiligne/S. +rectilignement +rectilinéaire/S. +rection/S. +rectite/S. +rectitude/S. +recto/S. +rectocolite/S. +recto-colite/S. +rectorale/W. +rectorat/S. +rectorragie/S. +rectoscope/S. +rectoscopie/S. +rectosigmoïde/S. +recto-sigmoïde/S. +rectosigmoïdienne/F. +recto-sigmoïdienne/F. +rectosigmoïdoscopie/S. +rectrice/F. +rectum/S. +reçue/F. +recueil/S. +recueillement/S. +recueillir/iR +recuire/yL +recuisson/S. +recul/S. +reculade/S. +reculement/S. +reculer/a0p+ +reculons +reculotter/a0p+ +récup +récupérable/S. +récupération/S. +récupératrice/F. +récupérer/c0p+ +récurage/S. +récurer/a0p+ +récurrence/S. +récurrente/F. +récursion/S. +récursive/F. +récursivement +récursivité/S. +récursoire/S. +récusable/S. +récusation/S. +récuser/a0p+ +recyclabilité/S. +recyclable/S. +recyclage/S. +recycler/a0p+ +recyclerie/S. +recycleuse/F. +rédac-chef/S. +rédaction/S. +rédactionnel/S. +rédactionnelle/F. +rédactrice/F. +redan/S. +reddition/S. +redéclarer/a0p+ +redécoller/a0p+ +redécorer/a0p+ +redécoupage/S. +redécouper/a0p+ +redécouverte/S. +redécouvrir/iC +redéfaire/wD +redéfinir/f0p+ +redéfinition/S. +redemander/a0p+ +redémarrage/S. +redémarrer/a0p+ +redémolir/f0p+ +redémontrer/a0p+ +rédemption/S. +rédemptoriste/S. +rédemptoriste/S. +rédemptrice/F. +redénomination/S. +redent/S. +redentée/F. +redéploiement/S. +redéployer/a0p+ +redéposer/a0p+ +redescendre/tA +redescente/S. +redessiner/a0p+ +redevabilité/S. +redevable/S. +redevance/S. +redévelopper/a0p+ +redevenir/i0q+ +redevoir/pC +rédhibition/S. +rédhibitoire/S. +rédie/S. +rediffuser/a0p+ +rediffusion/S. +rédiger/a0p+ +redimensionnable/S. +redimensionnement/S. +redimensionner/a0p+ +rédimer/a0p+ +redingote/S. +rédintégration/S. +redire/yC +redirection/S. +rediriger/a0p+ +rediscutable/S. +rediscuter/a0p+ +redisposer/a0p+ +redissoudre/xN +redistribuer/a0p+ +redistribution/S. +redistributive/F. +redistributrice/F. +redite/S. +rediviser/a0p+ +redneck/S. +redondance/S. +redondante/F. +redondée/F. +redonder/a0p. +redonner/a0p+ +redorer/a0p+ +redorte/S. +redoublante/F. +redoublement/S. +redoubler/a0p+ +redoutable/S. +redoutablement +redoute/S. +redouter/a0p+ +redoux +redox +redressage/S. +redressement/S. +redresser/a0p+ +redresseuse/F. +réductase/S. +réductibilité/S. +réductible/S. +réduction/S. +réductionnisme/S. +réductionniste/S. +réductive/F. +réductrice/F. +réduire/yM +réduit/S. +réduplication/S. +réduplicative/F. +réduve/S. +redynamisation/S. +redynamiser/a0p+ +rééchelonnement/S. +rééchelonner/a0p+ +réécouter/a0p+ +réécrire/y1 +réécriture/S. +réédification/S. +réédifier/a0p+ +rééditer/a0p+ +réédition/S. +rééducation/S. +rééducatrice/F. +rééduquer/a0p+ +réélection/S. +rééligibilité/S. +rééligible/S. +réélire/yB +réelle/F. +réellement +réembauche/S. +réembaucher/a0p+ +réémergence/S. +réémergente/F. +réémerger/a0p. +réémetteur/S. +réémettre/vA +réémission/S. +réemménager/a0p+ +réemploi/S. +réemployable/S. +réemployer/a0p+ +réemprunter/a0p+ +réencastrement/S. +réenchantement/S. +réenchanter/a0p+ +réenclencher/a0p+ +réendettement/S. +réenfourcher/a0p+ +réengagement/S. +réengager/a0p+ +réengendrer/a0p+ +réenregistrable/S. +réenregistrement/S. +réenregistrer/a0p+ +réensemencement/S. +réensemencer/a0p+ +réentendre/tA +réentrance/S. +réépouser/a0p+ +rééquilibrage/S. +rééquilibre/S. +rééquilibrer/a0p+ +rééquipement/S. +rééquiper/a0p+ +réer/a0p. +réescomptable/S. +réescompte/S. +réescompter/a0p+ +réescompteur/S. +réessayage/S. +réessayer/a0p+ +réétudier/a0p+ +réévaluation/S. +réévaluer/a0p+ +réexamen/S. +réexaminer/a0p+ +réexpédier/a0p+ +réexpédition/S. +réexpliquer/a0p+ +réexportation/S. +réexporter/a0p+ +réexposition/S. +réf +refabriquer/a0p+ +refaçonner/a0p+ +réfaction/S. +refacturation/S. +refacturer/a0p+ +refaire/wD +réfection/S. +réfectoire/S. +refend/S. +refendeuse/F. +refendre/tA +refente/S. +référé/S. +référé-liberté +référence/S. +référencement/S. +référencer/a0p+ +référenciation/S. +référendaire/S. +referendum/S. +référendum/S. +référent/S. +référente/F. +référentialité/S. +référentielle/F. +référentiellement +référer/c0p+ +référés-libertés +refermable/S. +refermement/S. +refermentation/S. +refermer/a0p+ +reficeler/d0p+ +refiler/a0p+ +refinancement/S. +refinancer/a0p+ +refixer/a0p+ +réfléchir/f0p+ +réfléchissante/F. +réfléchissement/S. +réflectance/S. +réflecteur/S. +réflective/F. +réflectivité/S. +réflectomètre/S. +réflectrice/F. +reflet/S. +refléter/c0p+ +refleurir/f0p+ +refleurissement/S. +reflex +reflex +réflexe/S. +réflexibilité/S. +réflexible/S. +réflexion/S. +réflexive/F. +réflexivement +réflexivité/S. +réflexogène/S. +réflexogramme/S. +réflexologie/S. +réflexologique/S. +réflexothérapie/S. +refluer/a0p. +reflux +refonctionner/a0p. +refondation/S. +refondatrice/F. +refonder/a0p+ +refondre/tA +refonte/S. +reforestation/S. +reforger/a0p+ +réformable/S. +reformage/S. +reformatage/S. +reformater/a0p+ +reformation/S. +réformation/S. +réformatrice/F. +réforme/S. +reformer/a0p+ +réformer/a0p+ +réformette/S. +réformisme/S. +réformiste/S. +reformulation/S. +reformuler/a0p+ +refouillement/S. +refouiller/a0p+ +refoulée/F. +refoulement/S. +refouler/a0p+ +refouloir/S. +refourguer/a0p+ +refourrer/a0p+ +refoutre/tM +réfractaire/S. +réfracter/a0p+ +réfraction/S. +réfractionniste/S. +réfractomètre/S. +réfractométrie/S. +réfractométrique/S. +réfractrice/F. +réfragable/S. +refrain/S. +réfrangibilité/S. +réfrangible/S. +refrapper/a0p+ +refrènement/S. +refréner/c0p+ +réfréner/c0p+ +réfrigérante/F. +réfrigérateur/S. +réfrigération/S. +réfrigérer/c0p+ +réfringence/S. +réfringente/F. +refriser/a0p+ +refroidir/f0p+ +refroidissement/S. +refroidisseur/S. +refuge/S. +réfugiée/F. +réfugier/a0p+ +refus +refusable/S. +refuser/a0p+ +refusion/S. +réfutabilité/S. +réfutable/S. +réfutation/S. +réfuter/a0p+ +refuznik/S. +reg/S. +regagner/a0p+ +regain/S. +régal/S. +régalade/S. +régalage/S. +régale/F. +régalec/S. +régalement/S. +régaler/a0p+ +régalienne/F. +regard/S. +regardable/S. +regardante/F. +regarder/a0p+ +regardeuse/F. +regarnir/f0p+ +régate/S. +régater/a0p. +régatière/F. +regayoir/S. +regazonner/a0p+ +regel/S. +regeler/b0p+ +régence/S. +régendat/S. +régénérante/F. +régénération/S. +régénérative/F. +régénératrice/F. +régénérer/c0p+ +régénérescence/S. +régente/F. +régenter/a0p+ +reggae +reggae/S. +régicide/S. +régie/S. +regimbement/S. +regimber/a0p+ +regimbeuse/F. +régime/S. +régiment/S. +régimentaire/S. +reginglard/S. +région/S. +régionale/W. +régionalement +régionalisation/S. +régionaliser/a0p+ +régionalisme/S. +régionaliste/S. +régir/f0p+ +régissante/F. +régisseuse/F. +registraire/S. +registre/S. +réglable/S. +réglage/S. +réglante/F. +règle/S. +règlement/S. +réglementaire/S. +réglementairement +réglementarisme/S. +réglementariste/S. +réglementation/S. +réglementer/a0p+ +régler/c0p+ +réglet/S. +réglette/S. +régleuse/F. +réglisse/S. +réglo +réglo/S. +régloir/S. +réglure/S. +régnante/F. +règne/S. +régner/c0p. +régolite/S. +régolithe/S. +regonflage/S. +regonflement/S. +regonfler/a0p+ +regorgement/S. +regorger/a0p. +regrat/S. +regrattage/S. +regratter/a0p+ +regrattière/F. +regréer/a0p+ +regreffer/a0p+ +régressée/F. +régresser/a0p. +régression/S. +régressive/F. +régressivement +regret/S. +regrettable/S. +regrettablement +regretter/a0p+ +regrèvement/S. +regrimper/a0p+ +regrossir/f0p. +regroupement/S. +regrouper/a0p+ +régularisable/S. +régularisante/F. +régularisation/S. +régularisatrice/F. +régulariser/a0p+ +régularité/S. +régulation/S. +régulatrice/F. +régule/S. +réguler/a0p+ +régulière/F. +régulièrement +régurgitation/S. +régurgiter/a0p+ +réhabilitable/S. +réhabilitation/S. +réhabilitatrice/F. +réhabiliter/a0p+ +réhabituer/a0p+ +rehaussage/S. +rehausse/S. +rehaussement/S. +rehausser/a0p+ +rehausseur/S. +rehaut/S. +réhoboam/S. +réhumaniser/a0p+ +réhydratant/S. +réhydratante/F. +réhydratation/S. +réhydrater/a0p+ +reichsmark/S. +réification/S. +réifier/a0p+ +réimperméabilisation/S. +réimperméabiliser/a0p+ +réimplantation/S. +réimplanter/a0p+ +réimplémenter/a0p+ +réimportation/S. +réimporter/a0p+ +réimposer/a0p+ +réimposition/S. +réimpression/S. +réimprimer/a0p+ +réimputation/S. +réimputer/a0p+ +rein/S. +réincarcération/S. +réincarcérer/c0p+ +réincarnation/S. +réincarnationniste/S. +réincarner/a0p+ +réincorporation/S. +réincorporer/a0p+ +réincrudation/S. +réincruder/a0p+ +réindexation/S. +réindustrialisation/S. +réindustrialiser/a0p+ +reine/S. +reine-claude +reine-des-prés +reine-marguerite +reines-claudes +reines-des-prés +reines-marguerites +reinette/S. +réinfecter/a0p+ +réinfection/S. +réinformation/S. +réinitialisation/S. +réinitialiser/a0p+ +réinjecter/a0p+ +réinjection/S. +réinscriptible/S. +réinscription/S. +réinscrire/y1 +réinsérer/c0p+ +réinsertion/S. +réinstallation/S. +réinstaller/a0p+ +réinstauration/S. +réinstaurer/a0p+ +réinstituer/a0p+ +réintégrable/S. +réintégrande/S. +réintégration/S. +réintégrer/c0p+ +réinterprétation/S. +réinterpréter/c0p+ +réinterrogation/S. +réinterroger/a0p+ +réintroduction/S. +réintroduire/yM +réinventer/a0p+ +réinvention/S. +réinvestir/f0p+ +réinvestissement/S. +réinviter/a0p+ +réionisation/S. +reis +réislamisation/S. +réislamiser/a0p+ +réitérable/S. +réitérante/F. +réitération/S. +réitérative/F. +réitérer/c0p+ +reître/S. +rejaillir/f0p. +rejaillissement/S. +réjecteur/S. +réjection/S. +rejet/S. +rejetable/S. +rejeter/d0p+ +rejetonne/F. +rejeu/X. +rejoindre/wB +rejointoiement/S. +rejointoyer/a0p+ +rejointoyeuse/F. +rejouer/a0p+ +réjouir/f0p+ +réjouissance/S. +réjouissante/F. +rejuger/a0p+ +réjuvénation/S. +rel +relacer/a0p+ +relâche/S. +relâchement/S. +relâcher/a0p+ +relai/S. +relais +relaisser/a0p+ +relampage/S. +relance/S. +relancer/a0p+ +relanceuse/F. +relapse/F. +relargage/S. +rélargir/f0p+ +relarguer/a0p+ +relater/a0p+ +relation/S. +relationnelle/F. +relationner/a0p+ +relationniste/S. +relative/F. +relativement +relativisation/S. +relativiser/a0p+ +relativisme/S. +relativiste/S. +relativité/S. +relaver/a0p+ +relax +relaxante/F. +relaxation/S. +relaxe/S. +relaxée/F. +relaxer/a0p+ +relaxologie/S. +relayage/S. +relayer/a0p+ +relayeuse/F. +relectrice/F. +relecture/S. +relégable/S. +relégation/S. +relégiférer/c0p+ +relégitimer/a0p+ +reléguer/c0p+ +relent/S. +relevable/S. +relevage/S. +relevailles +relevance/S. +relevante/F. +relève/S. +relevé/S. +relèvement/S. +relever/b0p+ +releveuse/F. +reliage/S. +relictuelle/F. +relief/S. +relier/a0p+ +relieuse/F. +religieuse/W. +religieusement +religion/S. +religionnaire/S. +religiosité/S. +reliquaire/S. +reliquat/S. +relique/S. +relire/yA +relish/A. +reliure/S. +relocalisation/S. +relocaliser/a0p+ +relocation/S. +relogement/S. +reloger/a0p+ +relookage/S. +relooker/a0p+ +relooking/S. +reloue/F. +relouer/a0p+ +réluctance/S. +reluire/yU +reluisante/F. +reluquer/a0p+ +relution/S. +relutive/F. +rem/S. +remâchement/S. +remâcher/a0p+ +remaillage/S. +remailler/a0p+ +remake/S. +rémanence/S. +rémanente/F. +remanger/a0p+ +remaniable/S. +remaniement/S. +remanier/a0p+ +remaquiller/a0p+ +remarcher/a0p. +remariage/S. +remarier/a0p+ +remarquable/S. +remarquablement +remarque/S. +remarquer/a0p+ +remarteler/b0p+ +remastériser/a0p+ +remasticage/S. +remastiquer/a0p+ +remballage/S. +remballer/a0p+ +rembarquement/S. +rembarquer/a0p+ +rembarrer/a0p+ +rembaucher/a0p+ +rembiner/a0p+ +remblai/S. +remblaiement/S. +remblaver/a0p+ +remblayage/S. +remblayer/a0p+ +remblayeuse/F. +rembobinage/S. +rembobiner/a0p+ +remboîtage/S. +remboîtement/S. +remboîter/a0p+ +rembouger/a0p+ +rembourrage/S. +rembourrer/a0p+ +rembourrure/S. +remboursable/S. +remboursement/S. +rembourser/a0p+ +rembroquer +rembrunir/f0p+ +rembrunissement/S. +rembuchement/S. +rembucher/a0p+ +remède/S. +remédiable/S. +remédiation/S. +remédier/a0p. +remélanger/a0p+ +remembrance/S. +remembrement/S. +remembrer/a0p+ +remémoration/S. +remémorative/F. +remémorer/a0p+ +remerciement/S. +remercier/a0p+ +réméré/S. +remesurer/a0p+ +remétrer +remettage/S. +remettante/F. +remettre/vA +remeubler/a0p+ +rémige/S. +remilitarisation/S. +remilitariser/a0p+ +reminéralisante/F. +reminéralisation/S. +réminiscence/S. +remisage/S. +remise/S. +remiser/a0p+ +remisier/S. +rémissible/S. +rémission/S. +rémittence/S. +rémittente/F. +remix/A. +remixer/a0p+ +rémiz +remmaillage/S. +remmailler/a0p+ +remmailleuse/S. +remmailloter/a0p+ +remmancher/a0p+ +remmener/b0p+ +remmoulage/S. +remmouleur/S. +remnographie/S. +remobilisation/S. +remobiliser/a0p+ +remodelage/S. +remodeler/b0p+ +rémoise/F. +remontage/S. +remontant/S. +remontante/F. +remonte/S. +remontée/S. +remonte-pente +remonte-pente/S. +remonter/a0p+ +remonteuse/F. +remontoir/S. +remontrance/S. +remontrant/S. +remontrer/a0p+ +rémora/S. +remordre/tA +remords +remorquage/S. +remorque/S. +remorquer/a0p+ +remorqueuse/F. +remotivation/S. +remotiver/a0p+ +remoucher/a0p+ +remoudre/xP +remouillage/S. +remouiller/a0p+ +rémoulade/S. +remoulage/S. +rémouleuse/F. +remous +rempaillage/S. +rempailler/a0p+ +rempailleuse/F. +rempaqueter/d0p+ +remparder +remparer/a0p+ +rempart/S. +rempiétement/S. +rempiéter/c0p+ +rempiler/a0p+ +remplaçable/S. +remplaçante/F. +remplacement/S. +remplacer/a0p+ +remplage/S. +remplier/a0p+ +remplir/f0p+ +remplissable/S. +remplissage/S. +remplissement/S. +remplisseuse/F. +remploi/S. +remployer/a0p+ +remplumer/a0p+ +rempocher/a0p+ +rempoissonnement/S. +rempoissonner/a0p+ +remporter/a0p+ +rempotage/S. +rempoter/a0p+ +remprunter/a0p+ +remuable/S. +remuage/S. +remuante/F. +remue-ménage +remue-méninges +remuement/S. +remuer/a0p+ +remueuse/F. +remugle/S. +rémunération/S. +rémunératoire/S. +rémunératrice/F. +rémunérer/c0p+ +remuscler/a0p+ +remutualisation/S. +renâclement/S. +renâcler/a0p. +renaissance/S. +renaissante/F. +renaître/wR +rénale/W. +renarde/F. +renardeau/X. +renardée/F. +renarder/a0p. +renardière/S. +renationalisation/S. +renationaliser/a0p+ +renaturation/S. +renauder/a0p. +rencaissage/S. +rencaissement/S. +rencaisser/a0p+ +rencard/S. +rencarder/a0p+ +rencart/S. +renchaîner/a0p+ +renchérir/f0p+ +renchérissement/S. +renchérisseuse/F. +rencogner/a0p+ +rencontre/S. +rencontrer/a0p+ +rendaku +rendement/S. +rendez-vous +rendormir/iJ +rendosser/a0p+ +rendre/tA +rendu/S. +rendzine/S. +rêne/S. +renégate/F. +renégociation/S. +renégocier/a0p+ +reneiger/a8p. +rénette/S. +renfaîtage/S. +renfaîter/a0p+ +renfermé/S. +renfermement/S. +renfermer/a0p+ +renfiler/a0p+ +renflammer/a0p+ +renflement/S. +renfler/a0p+ +renflouage/S. +renflouement/S. +renflouer/a0p+ +renflure/S. +renfoncement/S. +renfoncer/a0p+ +renforçage/S. +renforçante/F. +renforçateur/S. +renforçatrice/F. +renforcement/S. +renforcer/a0p+ +renformir/f0p+ +renformis +renfort/S. +renfourcher/a0p+ +renfrognement/S. +renfrogner/a0p+ +rengagée/F. +rengagement/S. +rengager/a0p+ +rengaine/S. +rengainer/a0p+ +rengorgement/S. +rengorger/a0p+ +rengracier/a0p. +rengraisser/a0p+ +rengrènement/S. +rengrener/b0p+ +rengréner/c0p+ +reniement/S. +renier/a0p+ +reniflage/S. +reniflard/S. +reniflement/S. +renifler/a0p+ +renifleuse/F. +réniforme/S. +rénine/S. +rénitence/S. +rénitente/F. +rennaise/F. +renne/S. +renom/S. +renommage/S. +renommée/S. +renommer/a0p+ +renoncement/S. +renoncer/a0p+ +renonciataire/S. +renonciation/S. +renonciatrice/F. +renonculacée/S. +renoncule/S. +renormalisable/S. +renormalisation/S. +renouement/S. +renouer/a0p+ +renouveau/X. +renouvelable/S. +renouvelante/F. +renouveler/d0p+ +renouvellement/S. +rénovasculaire/S. +rénovation/S. +rénovatrice/F. +rénover/a0p+ +renquiller/a0p+ +renseignement/S. +renseigner/a0p+ +rentabilisable/S. +rentabilisation/S. +rentabiliser/a0p+ +rentabilité/S. +rentable/S. +rentamer/a0p+ +rente/S. +renter/a0p+ +rentière/F. +rentoilage/S. +rentoiler/a0p+ +rentoileuse/F. +rentrage/S. +rentraire +rentraiture/S. +rentrante/F. +rentrayer/a0p+ +rentre-dedans +rentrée/S. +rentrer/a0p+ +rentrouvrir/iC +renumérotation/S. +renuméroter/a0p+ +renvelopper/a0p+ +renvenimer/a0p+ +renverger/a0p+ +renversable/S. +renversante/F. +renverse/S. +renversement/S. +renverser/a0p+ +renvidage/S. +renvider/a0p+ +renvideur/S. +renvier/a0p+ +renvoi/S. +renvoyée/F. +renvoyer/aD +réoccupation/S. +réoccuper/a0p+ +réopérer/c0p+ +réorbitation/S. +réorchestration/S. +réorchestrer/a0p+ +réordonnancer/a0p+ +réordonner/a0p+ +réorganisation/S. +réorganisatrice/F. +réorganiser/a0p+ +réorientation/S. +réorienter/a0p+ +réouverture/S. +réoxydation/S. +réoxygéner/c0p+ +repaire/S. +repairer/a0p. +repaître/wS +répandre/tA +réparabilité/S. +réparable/S. +reparaître/wQq+ +reparamétrable/S. +reparamétrage/S. +reparamétrer/c0p+ +reparamétrisation/S. +réparation/S. +réparatrice/F. +reparcourir/f0p+ +réparer/a0p+ +reparler/a0p+ +repartager/a0p+ +répartement/S. +repartie/S. +repartir/f0p+ +répartir/f0p+ +repartir/i5q+ +répartissable/S. +répartition/S. +répartitrice/F. +reparution/S. +repas +repassage/S. +repasser/a0p+ +repasseuse/F. +repatiner/a0p+ +repavage/S. +repavement/S. +repaver/a0p+ +repayer/a0p+ +repêchage/S. +repêcher/a0p+ +repeigner/a0p+ +repeindre/wB +rependre/tA +repenser/a0p+ +repentance/S. +repentante/F. +repentie/F. +repentir/S. +repentir/i5q+ +repérable/S. +repérage/S. +reperçage/S. +repercer/a0p+ +répercussion/S. +répercuter/a0p+ +reperdre/tA +repère/S. +repérer/c0p+ +répertoire/S. +répertorier/a0p+ +répertorisation/S. +repeser/b0p+ +répétabilité/S. +répétable/S. +répéter/c0p+ +répéteur/S. +répétibilité/S. +répétible/S. +répétition/S. +répétitive/F. +répétitivement +répétitivité/S. +répétitorat/S. +répétitrice/F. +repétrir/f0p+ +repeuplement/S. +repeupler/a0p+ +repic/S. +repincer/a0p+ +repiquage/S. +repique/S. +repiquer/a0p+ +répit/S. +replacement/S. +replacer/a0p+ +replanissage/S. +replantage/S. +replantation/S. +replanter/a0p+ +replat/S. +replâtrage/S. +replâtrer/a0p+ +replète/F. +réplétion/S. +réplétive/F. +repleuvoir/pZ +repli/S. +repliable/S. +repliage/S. +réplicabilité/S. +réplicable/S. +réplication/S. +réplicative/F. +réplicatrice/F. +repliement/S. +replier/a0p+ +réplique/S. +répliquer/a0p+ +replisser/a0p+ +reploiement/S. +replonger/a0p+ +reployer/a0p+ +repointer/a0p+ +repolarisation/S. +repolir/f0p+ +repolissage/S. +repolitisation/S. +repolymériser/a0p+ +répondante/F. +répondeur/S. +répondeuse/F. +répondre/tA +répons +réponse/S. +repopulation/S. +report/S. +reportage/S. +reporter/S. +reporter/a0p+ +reporter-cameraman +reporters-cameramans +reporters-cameramen +reporting/S. +reportrice/F. +repos +reposante/F. +repose-pied/S. +repose-pieds +reposer/a0p+ +repose-tête +repositionnable/S. +repositionnement/S. +repositionner/a0p+ +reposoir/S. +reposter/a0p+ +repoudrer/a0p+ +repoussage/S. +repoussante/F. +repousse/S. +repoussement/S. +repousser/a0p+ +repoussoir/S. +repréciser/a0p+ +répréhensible/S. +répréhension/S. +reprendre/tF +repreneuse/F. +représailles +représentable/S. +représentante/F. +représentation/S. +représentative/F. +représentativité/S. +représenter/a0p+ +répresseur/S. +répressible/S. +répression/S. +répressive/F. +réprimande/S. +réprimander/a0p+ +réprimer/a0p+ +reprint/S. +reprisage/S. +reprise/F. +repriser/a0p+ +repriseuse/S. +réprobation/S. +réprobatrice/F. +reprochable/S. +reproche/S. +reprocher/a0p+ +reproductibilité/S. +reproductible/S. +reproduction/S. +reproductive/F. +reproductrice/F. +reproduire/yM +reproduisible/S. +reprogrammable/S. +reprogrammation/S. +reprogrammer/a0p+ +reprographie/S. +reprographier/a0p+ +reprographique/S. +reprojection/S. +reproposer/a0p+ +reprotoxique/S. +réprouvée/F. +reprouver/a0p+ +réprouver/a0p+ +reps +reptation/S. +reptile/S. +reptilienne/F. +républicaine/F. +républicaniser/a0p+ +républicanisme/S. +republication/S. +republier/a0p+ +république/S. +répudiation/S. +répudier/a0p+ +répugnance/S. +répugnante/F. +répugner/a0p+ +répulsif/S. +répulsion/S. +répulsive/F. +répurgation/S. +répurgatrice/F. +réputation/S. +réputationnelle/F. +réputer/a0p+ +requalification/S. +requalifier/a0p+ +requérable/S. +requérante/F. +requérir/iK +requestionner/a0p+ +requête/S. +requiem +requin/S. +requin-marteau +requin-pèlerin +requinquer/a0p+ +requins-marteaux +requins-pèlerins +requins-taupes +requins-tigres +requin-taupe +requin-tigre +requis +requisit/S. +réquisit/S. +réquisition/S. +réquisitionnable/S. +réquisitionnaire/S. +réquisitionner/a0p+ +réquisitoire/S. +réquisitoriale/W. +requitter/a0p+ +resaler/a0p+ +resalir/f0p+ +resaluer/a0p+ +resarcelée/F. +rescapée/F. +rescindable/S. +rescindante/F. +rescinder/a0p+ +rescision/S. +rescisoire/S. +rescisoire/S. +rescolariser/a0p+ +rescousse/S. +rescription/S. +rescrit/S. +réseau/X. +réseautage/S. +réseauter/a0p. +réseautique/S. +résécable/S. +résection/S. +réséda +réséda/S. +resemer/b0p+ +reséquencer/a0p+ +réséquer/c0p+ +réserpine/S. +réservataire/S. +réservation/S. +réserve/S. +réserver/a0p+ +réserviste/S. +réservoir/S. +résidanat/S. +résidence/S. +résidente/F. +résidentialisation/S. +résidentielle/F. +résider/a0p. +résidu/S. +résiduaire/S. +résiduelle/F. +résignataire/S. +résignation/S. +résignée/F. +résigner/a0p+ +résiliable/S. +résiliation/S. +résilience/S. +résiliente/F. +résilier/a0p+ +résille/S. +résine/S. +résiner/a0p+ +résineuse/W. +résinière/F. +résinifère/S. +résinifier/a0p+ +résipiscence/S. +résistance/S. +résistante/F. +résister/a0p. +résistible/S. +résistive/F. +résistivité/S. +résistor/S. +resituer/a0p+ +resocialisation/S. +resocialiser/a0p+ +resolidifier/a0p+ +résolubilité/S. +résoluble/S. +résolument +résolution/S. +résolutive/F. +résolutoire/S. +résolvance/S. +résolvante/F. +résolveur/S. +résomptive/F. +résonance/S. +résonateur/S. +résonatrice/F. +résonnante/F. +résonnement/S. +résonner/a0p. +résorbable/S. +résorber/a0p+ +résorcine/S. +résorption/S. +résoudre/xN +respect/S. +respectabiliser/a0p+ +respectabilité/S. +respectable/S. +respectablement +respecter/a0p+ +respective/F. +respectivement +respectueuse/W. +respectueusement +respirable/S. +respirante/F. +respirateur/S. +respiration/S. +respiratoire/S. +respirer/a0p+ +respiritualisation/S. +respiritualiser/a0p+ +resplendir/f0p. +resplendissante/F. +resplendissement/S. +responsabilisation/S. +responsabiliser/a0p+ +responsabilité/S. +responsable/S. +responsoriale/W. +resquillage/S. +resquille/S. +resquiller/a0p+ +resquilleuse/F. +ressac/S. +ressaigner/a0p+ +ressaisir/f0p+ +ressaisissement/S. +ressassage/S. +ressassement/S. +ressasser/a0p+ +ressasseuse/F. +ressat/S. +ressaut/S. +ressauter/a0p+ +ressayage/S. +ressayer/a0p+ +ressemblance/S. +ressemblante/F. +ressembler/a0p. +ressemelage/S. +ressemeler/d0p+ +ressemeleuse/F. +ressemer/b0p+ +ressenti/S. +ressentiment/S. +ressentir/i5q+ +resserrage/S. +resserre/S. +resserrement/S. +resserrer/a0p+ +resservir/iF +ressort/S. +ressortir/f0p. +ressortir/i5q+ +ressortissante/F. +ressouder/a0p+ +ressoudure/S. +ressource/S. +ressourcement/S. +ressourcer/a0p+ +ressourcerie/S. +ressouvenance/S. +ressouvenir/i0q+ +ressuage/S. +ressuer/a0p+ +ressui/S. +ressurgir/f0p. +ressuscitée/F. +ressusciter/a0p+ +ressuyage/S. +ressuyer/a0p+ +restabiliser/a0p+ +restanque/S. +restant/S. +restante/F. +restaurable/S. +restaurant/S. +restauration/S. +restauratoire/S. +restauratrice/F. +restaurer/a0p+ +reste/S. +rester/a0p+ +restituable/S. +restituer/a0p+ +restitution/S. +restitutoire/S. +restitutrice/F. +resto/S. +restoroute/S. +restreindre/wB +restriction/S. +restrictive/F. +restrictivement +restringente/F. +restructuration/S. +restructurer/a0p+ +restyler +resucée/S. +resuffixation/S. +résultante/F. +résultat/S. +résultative/F. +résulter/aG +résumé/S. +résumer/a0p+ +resurchauffe/S. +résurgence/S. +résurgente/F. +resurgir/f0p. +resurgissement/S. +résurrection/S. +résurrectionnelle/F. +resynchronisation/S. +resynchroniser/a0p+ +retable/S. +rétablir/f0p+ +rétablissement/S. +retaille/S. +retailler/a0p+ +rétaise/F. +rétamage/S. +rétamer/a0p+ +rétameur/S. +retapage/S. +retape/S. +retaper/a0p+ +retapisser/a0p+ +retard/S. +retardataire/S. +retardateur/S. +retardatrice/F. +retardée/F. +retardement/S. +retarder/a0p+ +retassure/S. +retâter/a0p+ +reteindre/wB +retéléphoner/a0p. +retendoir/S. +retendre/tA +retenir/i0q+ +retenter/a0p+ +rétention/S. +retentir/f0p. +retentissante/F. +retentissement/S. +rétentrice/F. +retenue/S. +reterçage/S. +retercer/a0p+ +reterser/a0p+ +retia/S. +rétiaire/S. +réticence/S. +réticente/F. +réticulaire/S. +réticulation/S. +réticule/S. +réticuler/a0p+ +réticulocyte/S. +réticulo-endothéliale/W. +réticulose/S. +réticulum/S. +rétinal/S. +rétine/S. +rétinienne/F. +rétinite/S. +rétinoblastome/S. +rétinoïde/S. +rétinoïque/S. +rétinol/S. +rétinopathie/S. +retirage/S. +retiration/S. +retirement/S. +retirer/a0p+ +retissage/S. +retisser/a0p+ +rétive/F. +rétivité/S. +retombante/F. +retombée/S. +retombement/S. +retomber/a0p+ +retondre/tA +retoquer/a0p+ +retordage/S. +retordement/S. +retordeuse/F. +retordoir/S. +retordre/tA +rétorquable/S. +rétorquer/a0p+ +retorse/F. +rétorsion/S. +retouchable/S. +retouchage/S. +retouche/S. +retoucher/a0p+ +retoucheuse/F. +retour/S. +retournable/S. +retournage/S. +retournement/S. +retourner/a0p+ +retourneuse/F. +retracer/a0p+ +rétractabilité/S. +rétractable/S. +rétractation/S. +rétracter/a0p+ +rétracteur/S. +rétractibilité/S. +rétractile/S. +rétractilité/S. +rétraction/S. +rétractive/F. +rétractrice/F. +retraduction/S. +retraduire/yL +retraire/wL +retraitante/F. +retraite/F. +retraitée/F. +retraitement/S. +retraiter/a0p+ +retranchement/S. +retrancher/a0p+ +retranscription/S. +retranscrire/y1 +retransformer/a0p+ +retransmetteur/S. +retransmettre/vA +retransmission/S. +retravailler/a0p+ +retraverser/a0p+ +retrayante/F. +rétrécir/f0p+ +rétrécissable/S. +rétrécissante/F. +rétrécissement/S. +retreindre +rétreindre +retreinte/F. +rétreinte/F. +retrempe/S. +retremper/a0p+ +rétribuer/a0p+ +rétribution/S. +retricoter/a0p+ +retriever/S. +retro +rétro/S. +rétro/S. +rétroactes +rétroaction/S. +rétroactivation/S. +rétroactive/F. +rétroactivement +rétroactivité/S. +rétroagir/f0p. +rétrobulbaire/S. +rétrocéder/c0p+ +rétrocession/S. +rétrocessionnaire/S. +rétrochargeuse/S. +rétrocommission/S. +rétrocompatibilité/S. +rétrocompatible/S. +rétrocontrôle/S. +rétrodiffusion/S. +rétroéclairage/S. +rétro-éclairage/S. +rétroéclairée/F. +rétro-éclairée/F. +rétrofit/S. +rétroflexe/S. +rétroflexion/S. +rétrofusée/S. +rétrofuturisme/S. +rétrofuturiste/S. +rétrogradation/S. +rétrograde/S. +rétrograder/a0p+ +rétrogression/S. +rétro-ingénierie/S. +rétro-inhibition/S. +rétrolien/S. +rétromorphose/S. +rétronyme/S. +rétronymie/S. +rétropédalage/S. +rétropédaler/a0p. +rétropéritonéale/W. +rétroplacentaire/S. +rétroplanning/S. +rétroposition/S. +rétroprojecteur/S. +rétroprojection/S. +rétropropulsion/S. +rétrorégulation/S. +rétrospection/S. +rétrospective/F. +rétrospectivement +rétrospectivité/S. +rétrosternale/W. +rétrosynthèse/S. +rétrosynthétique/S. +rétrotranscription/S. +rétrotransposon/S. +retroussage/S. +retroussement/S. +retrousser/a0p+ +retroussis +retrouvable/S. +retrouvaille/S. +retrouver/a0p+ +rétroversion/S. +rétrovirale/W. +rétrovirus +rétroviseur/S. +rets +retuber/a0p+ +retweet/S. +retweeter/a0p+ +réunification/S. +réunifier/a0p+ +réunion/S. +réunionite/S. +réunionnaise/F. +réunionnite/S. +réunir/f0p+ +réunissage/S. +réusinage/S. +réusiner/a0p+ +réussir/f0p+ +réussite/S. +réutilisable/S. +réutilisation/S. +réutiliser/a0p+ +revaccination/S. +revacciner/a0p+ +revalidation/S. +revalider/a0p+ +revaloir/pO +revalorisation/S. +revaloriser/a0p+ +revancharde/F. +revanche/S. +revancher/a0p+ +revanchisme/S. +revascularisation/S. +revasculariser/a0p+ +rêvasser/a0p. +rêvasserie/S. +rêvasseuse/F. +rêve/S. +revêche/S. +réveil/S. +réveille-matin +réveiller/a0p+ +réveilleuse/F. +réveillon/S. +réveillonner/a0p. +réveillonneur/S. +révélation/S. +révélatrice/F. +révéler/c0p+ +revenant-bon +revenante/F. +revendable/S. +revendeuse/F. +revendication/S. +revendicative/F. +revendicatrice/F. +revendiquer/a0p+ +revendre/tA +revenez-y +revenir/i0q+ +revente/S. +revenu/S. +revenue/S. +rêver/a0p+ +réverbérante/F. +réverbération/S. +réverbère/S. +réverbérer/c0p+ +reverdir/f0p+ +reverdissage/S. +reverdissement/S. +reverdoir/S. +révérence/S. +révérencielle/F. +révérencieuse/W. +révérencieusement +révérende/F. +révérendissime/S. +révérer/c0p+ +rêverie/S. +revérification/S. +revérifier/a0p+ +revernir/f0p+ +revernissage/S. +reverrouiller/a0p+ +revers +réversale/W. +reversement/S. +reverser/a0p+ +reversi/S. +réversibilité/S. +réversible/S. +réversiblement +réversion/S. +reversoir/S. +revêtement/S. +revêtir/iG +revêtissement/S. +rêveuse/F. +rêveusement +revient +revif/S. +revigorante/F. +revigoration/S. +revigorer/a0p+ +revirement/S. +revirer/a0p. +révisable/S. +réviser/a0p+ +réviseure/S. +réviseuse/F. +révision/S. +révisionnelle/F. +revisionner/a0p+ +révisionnisme/S. +révisionniste/S. +revisitation/S. +revisiter/a0p+ +revisser/a0p+ +revitalisante/F. +revitalisation/S. +revitaliser/a0p+ +revival/S. +revivalisme/S. +revive/F. +revivifiante/F. +revivification/S. +revivifier/a0p+ +reviviscence/S. +reviviscente/F. +revivre/xSq+ +révocabilité/S. +révocable/S. +révocation/S. +révocatoire/S. +revoici +revoilà +revoir +revoir/pF +revoler/a0p+ +révoltante/F. +révolte/S. +révoltée/F. +révolter/a0p+ +révolue/F. +révolutée/F. +révolution/S. +révolutionnaire/S. +révolutionnairement +révolutionnarisme/S. +révolutionnariste/S. +révolutionner/a0p+ +révolutive/F. +revolver/S. +revolvériser/a0p+ +revolving +revomir/f0p+ +révoquée/F. +révoquer/a0p+ +revoter/a0p+ +revouloir +revoyure/S. +revue/S. +revuiste/S. +révulser/a0p+ +révulsion/S. +révulsive/F. +rewriter/S. +rewriter/a0p+ +rewriting/S. +rexisme/S. +rexiste/S. +rez +rez-de-chaussée +rez-de-jardin +rezzou/S. +rhabdomancie/S. +rhabdomancienne/F. +rhabdomyolyse/S. +rhabdomyosarcome/S. +rhabillage/S. +rhabillement/S. +rhabiller/a0p+ +rhabilleuse/F. +rhamnacée/S. +rhamnolipide/S. +rhamnose/S. +rhapsode/S. +rhapsodie/S. +rhapsodique/S. +rhapsodiste/S. +rhassoul/S. +rhé/S. +rhématisation/S. +rhème/S. +rhénane/F. +rhénium/S. +rhéobase/S. +rhéogramme/S. +rhéologie/S. +rhéologique/S. +rhéologue/S. +rhéomètre/S. +rhéophile/S. +rhéostat/S. +rhéostatique/S. +rhéotaxie/S. +rhéotrope/S. +rhéotropisme/S. +rhésus +rhéteur/S. +rhétienne/F. +rhétique/S. +rhétique/S. +rhéto/S. +rhétoricienne/F. +rhétorique/S. +rhétorique/S. +rhétoriquement +rhétoriqueur/S. +rhéto-romane/F. +rhinanthe/S. +rhinencéphale/S. +rhinencéphale/S. +rhingrave/S. +rhingraviat/S. +rhinite/S. +rhinocéros +rhinolalie/S. +rhinolaryngite/S. +rhino-laryngite/S. +rhinologie/S. +rhinolophe/S. +rhinopharyngée/F. +rhino-pharyngée/F. +rhinopharyngienne/F. +rhino-pharyngienne/F. +rhinopharyngite/S. +rhino-pharyngite/S. +rhinopharynx +rhino-pharynx +rhinoplastie/S. +rhinorrhée/S. +rhinoscopie/S. +rhinovirus +rhizarthrose/S. +rhizobium/S. +rhizocarpée/F. +rhizoctone/S. +rhizoctonie/S. +rhizoflagellé/S. +rhizogenèse/S. +rhizoïde/S. +rhizomateuse/W. +rhizome/S. +rhizomélique/S. +rhizophage/S. +rhizophore/S. +rhizopode/S. +rhizopus +rhizosphère/S. +rhizostome/S. +rhizotome/S. +rhizotomie/S. +rhô +rhodamine/S. +rhodanienne/F. +rhodésienne/F. +rhodiage/S. +rhodiée/F. +rhodienne/F. +rhodinol/S. +rhodite/S. +rhodium/S. +rhodochrosite/S. +rhododendron/S. +rhodoïd/S. +rhodonite/S. +rhodophycée/S. +rhodophyte/S. +rhodopsine/S. +rhombe/S. +rhombencéphale/S. +rhombicosidodécaèdre/S. +rhombicuboctaèdre/S. +rhombique/S. +rhomboèdre/S. +rhomboédrique/S. +rhomboïdale/W. +rhomboïde/S. +rhotacisme/S. +rhubarbe/S. +rhum/S. +rhumatisante/F. +rhumatismale/W. +rhumatisme/S. +rhumatoïde/S. +rhumatologie/S. +rhumatologique/S. +rhumatologiste/S. +rhumatologue/S. +rhumb/S. +rhume/S. +rhumer/a0p+ +rhumerie/S. +rhynchite/S. +rhynchocéphale/S. +rhynchonelle/S. +rhynchote/S. +rhyolite/S. +rhyolithe/S. +rhytidome/S. +rhyton/S. +ria/S. +rial/S. +riante/F. +ribambelle/S. +ribaude/F. +ribaudequin/S. +riblage/S. +ribler/a0p+ +riblon/S. +riboflavine/S. +ribonucléase/S. +ribonucléique/S. +ribose/S. +ribosomale/W. +ribosome/S. +ribosomique/S. +ribote/S. +riboteuse/F. +ribouis +ribouldingue/S. +ribouler/a0p. +ribozyme/S. +ricaine/F. +ricanante/F. +ricanement/S. +ricaner/a0p. +ricaneuse/F. +riccie/S. +ricercare/I. +richarde/F. +riche/S. +richelieu/S. +richement +richesse/S. +richissime/S. +ricin +ricine/S. +ricinée/F. +ricinoléique/S. +rickettsie/S. +rickettsiose/S. +rickshaw/S. +ricoche/S. +ricocher/a0p. +ricochet/S. +ricotta/S. +ric-rac +rictus +ridage/S. +ride/S. +rideau/X. +ridelle/S. +ridement/S. +rider/a0p+ +ridicule/S. +ridiculement +ridiculisation/S. +ridiculiser/a0p+ +ridiculité/S. +ridoir/S. +ridule/S. +rie/S. +riel/S. +riemannienne/F. +rien +rien/S. +riesling/S. +rieuse/F. +rifampicine/S. +riff/S. +riffauder/a0p+ +rififi/S. +riflard/S. +rifle/S. +rifle/S. +rifler/a0p+ +riflette/S. +rifloir/S. +rift/S. +rigaudon/S. +rigide/S. +rigidement +rigidification/S. +rigidifier/a0p+ +rigidité/S. +rigodon/S. +rigoise/F. +rigolade/S. +rigolage/S. +rigolarde/F. +rigole/S. +rigoler/a0p. +rigoleuse/F. +rigollot/S. +rigolo/S. +rigolo/S. +rigolote/S. +rigolote/S. +rigorisme/S. +rigoriste/S. +rigotte/S. +rigoureuse/W. +rigoureusement +rigueur/S. +rikiki +rillettes +rillons +rilsan/S. +rimaille/S. +rimailler/a0p. +rimailleuse/F. +rimaye/S. +rimbaldienne/F. +rime/S. +rimer/a0p+ +rimeuse/F. +rimmel/S. +rinçage/S. +rinceau/X. +rince-bouche +rince-bouteille/S. +rince-bouteilles +rince-doigts +rincer/a0p+ +rincette/S. +rinceuse/F. +rinçure/S. +rinforzando +rinforzando/S. +ring/S. +ringardage/S. +ringarde/F. +ringarder/a0p+ +ringardisation/S. +ringardise/S. +ringardiser/a0p+ +rink-hockey/S. +ripage/S. +ripaille/S. +ripailler/a0p. +ripailleuse/F. +ripaton/S. +ripatonner +ripe/S. +ripement/S. +riper/a0p+ +ripicole/S. +ripieno +ripieno/S. +ripolin/S. +ripoliner/a0p+ +riposte/S. +riposter/a0p+ +ripou/X. +ripous +ripper/S. +ripple-mark/S. +ripuaire/S. +riquiqui +rire/S. +rire/yW +ris +risban/S. +risberme/S. +risée/S. +risette/S. +risible/S. +risiblement +risorius +risorius +risotto/S. +risque/S. +risquer/a0p+ +risque-tout +rissole/S. +rissoler/a0p+ +rissolette/S. +ristourne/S. +ristourner/a0p+ +ritale/F. +rite/S. +ritournelle/S. +ritualisation/S. +ritualiser/a0p+ +ritualisme/S. +ritualiste/S. +rituelle/F. +rituellement +rivage/S. +rivale/W. +rivaliser/a0p. +rivalité/S. +rive/S. +rivelaine/S. +rivelet/S. +river/a0p+ +riveraine/F. +riveraineté/S. +rivesaltes +rivet/S. +rivetage/S. +riveter/d0p+ +riveteuse/S. +riveuse/F. +rivière/S. +rivoir/S. +rivulaire/S. +rivulaire/S. +rivure/S. +rixdale/S. +rixe/S. +riz +rizerie/S. +rizicole/S. +rizicultrice/F. +riziculture/S. +rizière/S. +riz-pain-sel +road-movie/S. +roadster/S. +roast-beef/S. +rob/S. +robage/S. +robe/S. +robelage/S. +rober/a0p+ +robert/S. +robespierrisme/S. +robespierriste/S. +robin/S. +robine/S. +robinet/S. +robinetier/S. +robinétier/S. +robinetière/F. +robinetterie/S. +robineuse/W. +robinier/S. +robinsonnade/S. +roborative/F. +robot/S. +roboticienne/F. +robotique/S. +robotisation/S. +robotiser/a0p+ +robre/S. +roburite/S. +robusta/S. +robuste/S. +robustement +robustesse/S. +roc/S. +rocade/S. +rocaillage/S. +rocaille/S. +rocailleur/S. +rocailleuse/W. +rocambole/S. +rocambolesque/S. +rocelle/S. +rochage/S. +rochassière/F. +roche/S. +rochefortaise/F. +rochelaise/F. +rocher +rocher/S. +rochet/S. +rocheuse/W. +rochier/S. +rock/S. +rockabilly/S. +rocker/S. +rocket/S. +rockeuse/F. +rocking-chair/S. +rock'n'roll +rococo/S. +rococo/S. +rocou/S. +rocouyer/S. +rocquer/a0p. +rodage/S. +rôdailler/a0p. +rôde/S. +rodenticide/S. +rodéo/S. +roder/a0p+ +rôder/a0p. +rôdeuse/F. +rodoir/S. +rodomont/S. +rodomontade/S. +roentgen/Um +roentgenium/S. +roentgenthérapie/S. +rogation/S. +rogatoire/S. +rogatoirement +rogaton/S. +rognage/S. +rogne/S. +rogne-pied +rogner/a0p+ +rogneuse/F. +rognon/S. +rognonnade/S. +rognonner/a0p. +rognure/S. +rogomme/S. +rogue/S. +rogue/S. +roguée/F. +rohart/S. +rohingya/S. +roi/S. +roide/S. +roidement +roideur/S. +roidir/f0p+ +roitelet/S. +rolandique/S. +rôle/S. +rôliste/S. +roller/S. +rolleuse/F. +rollier/S. +rollmops +rom/S. +romaine/F. +romaïque/S. +romaji +romaji/S. +roman/S. +romance/S. +romancer/a0p+ +romancero/S. +romanche/S. +romancière/F. +romande/F. +romane/F. +romanesque/S. +romanesquement +roman-feuilleton +roman-fleuve +romani/S. +romanichelle/F. +romanisante/F. +romanisation/S. +romaniser/a0p+ +romanisme/S. +romaniste/S. +romanité/S. +romano/S. +roman-photo +romans-feuilletons +romans-fleuves +romans-photos +romanticisme/S. +romantique/S. +romantiquement +romantiser/a0p+ +romantisme/S. +romarin/S. +rombière/F. +rompre/tA +rompu/S. +ronce/S. +ronceraie/S. +ronceuse/W. +ronchonne/F. +ronchonneau/X. +ronchonnement/S. +ronchonner/a0p. +ronchonneuse/F. +ronchopathie/S. +roncière/F. +rondache/S. +rondade/S. +rond-de-cuir +ronde/F. +rondeau/X. +ronde-bosse +rondel/S. +rondelette/F. +rondelle/S. +rondement +rondes-bosses +rondeur/S. +rondier/S. +rondin/S. +rondir/f0p+ +rondo/S. +rondouillarde/F. +rond-point +ronds-de-cuir +ronds-points +ronéo/S. +ronéoter/a0p+ +ronéotyper/a0p+ +ronéotypie/S. +ronflaguer/a0p+ +ronflante/F. +ronflement/S. +ronfler/a0p. +ronflerie/S. +ronflette/S. +ronfleuse/F. +rongement/S. +ronger/a0p+ +rongeure/S. +rongeuse/F. +rônier/S. +rônin/S. +ronron/S. +ronronnante/F. +ronronnement/S. +ronronner/a0p. +ronsardiser/a0p. +röntgen/Um +röntgenium/S. +röntgenthérapie/S. +roof/S. +roofing/S. +rookerie/S. +roque/S. +roquefort/S. +roquelaure/S. +roquentin/S. +roquer/a0p. +roquerie/S. +roquet/S. +roquetin/S. +roquette/S. +roquille/S. +rorqual/S. +rosace/S. +rosacée/F. +rosage/S. +rosaire/S. +rosalbin/S. +rosalie/S. +rosaniline/S. +rosat +rosâtre/S. +rosbif/S. +rosé/S. +rose/S. +roseau/X. +roseau-massue +roseaux-massues +rose-croix +rosée/S. +roselet/S. +roselière/F. +roselin/S. +roséole/S. +roser/a0p+ +roseraie/S. +rosette/S. +roseur/S. +roseval/S. +rosicrucienne/F. +rosière/F. +rosiériste/S. +rosir/f0p+ +rosissante/F. +rosissement/S. +rossarde/F. +rosse/S. +rosse/S. +rosser/a0p+ +rosserie/S. +rossignol/S. +rossignolet/S. +rossinante/S. +rossolis +rösti/S. +rostrale/W. +rostre/S. +rot/S. +rôt/S. +rotacée/F. +rotamère/S. +rotang/S. +rotarien/S. +rotary/S. +rotateur/S. +rotation/S. +rotationnelle/F. +rotative/F. +rotativiste/S. +rotatoire/S. +rotatrice/F. +rotavirus +rotengle/S. +roténone/S. +roter/a0p. +rôtie/F. +rotifère/S. +rotin/S. +rôtir/f0p+ +rôtissage/S. +rôtisserie/S. +rôtisseuse/F. +rôtissoire/S. +rotogravure/S. +rotomoulage/S. +rotonde/S. +rotondité/S. +rotoplots +rotor/S. +rotorique/S. +rotoscopie/S. +rototo/S. +rotring/S. +rotrouenge/S. +rotruenge/S. +rottweiler/S. +rottweiller/S. +rotulage/S. +rotule/S. +rotulée/F. +rotulienne/F. +roture/S. +roturière/F. +rouable/S. +rouage/S. +rouanne/F. +rouannette/S. +roubaisienne/F. +roubignoles +roublarde/F. +roublardise/S. +rouble/S. +rouchi/S. +roucoulade/S. +roucoulante/F. +roucoulement/S. +roucouler/a0p+ +roucouleuse/F. +roudoudou/S. +roue/S. +rouée/F. +rouelle/S. +rouennaise/F. +rouennerie/S. +rouennière/F. +rouer/a0p+ +rouergate/F. +rouerie/S. +rouette/F. +rouf/S. +rouflaquette/S. +roufle/S. +roufler/a0p+ +rougail/S. +rougaille/S. +rouge/S. +rougeâtre/S. +rougeaude/F. +rouge-gorge +rougeoiement/S. +rougeole/S. +rougeoleuse/W. +rouge-orange +rougeoyante/F. +rougeoyer/a0p. +rouge-queue +rouges-gorges +rouges-queues +rouget/S. +rougeur/S. +rough/S. +rougir/f0p+ +rougissante/F. +rougissement/S. +rougnotter/a0p. +rouille +rouille/S. +rouiller/a0p+ +rouilleuse/W. +rouillure/S. +rouir/f0p+ +rouissage/S. +rouissoir/S. +roulade/S. +roulage/S. +roulante/F. +roule/S. +rouleau/X. +rouleautée/F. +roulé-boulé +roulement/S. +rouler/a0p+ +roulés-boulés +roulette/S. +rouleuse/F. +roulier/S. +roulis +rouloir/S. +roulotte/S. +roulotter/a0p+ +roulottière/F. +roulure/S. +roumaine/F. +roumi/S. +roumie/F. +round/S. +roupettes +roupie/S. +roupiller/a0p. +roupillon/S. +rouquine/F. +rouscailler/a0p. +rouspétance/S. +rouspéter/c0p. +rouspéteuse/F. +rousquille/S. +roussâtre/S. +rousse/W. +rousseau/X. +rousseauisme/S. +rousseauiste/S. +rousselet/S. +rousserolle/S. +roussette/S. +rousseur/S. +roussillonnaise/F. +roussin/S. +roussir/f0p+ +roussissement/S. +roussissure/S. +rouste/S. +roustir/f0p+ +roustissure/S. +roustons +routage/S. +routarde/F. +route/S. +router/a0p+ +routeur/S. +routeuse/F. +routière/F. +routine/S. +routinière/F. +routinièrement +routinisation/S. +rouverain/S. +rouverin/S. +rouvieux +rouvraie/S. +rouvre/S. +rouvrir/iC +rowing/S. +royale/W. +royalement +royalisme/S. +royaliste/S. +royalty/A. +royaume/S. +royauté/S. +rromani +ru/S. +ruade/S. +ruban/S. +rubaner/a0p+ +rubanerie/S. +rubanière/F. +rubato +rubato/S. +rubéfaction/S. +rubéfiante/F. +rubéfier/a0p+ +rubellite/S. +rubéole/S. +rubéoleuse/W. +rubéolique/S. +rubescente/F. +rubiacée/S. +rubican/S. +rubicelle/S. +rubiconde/F. +rubidium/S. +rubiette/S. +rubigineuse/W. +rubis +rubrique/S. +ruche/S. +ruché/S. +ruchée/S. +rucher/S. +rucher/a0p+ +ruchette/S. +rudbeckia/S. +rudbeckie/S. +rude/S. +rudement +rudenter/a0p+ +rudenture/S. +rudérale/W. +rudération/S. +rudesse/S. +rudiment/S. +rudimentaire/S. +rudimentairement +rudiste/S. +rudoiement/S. +rudologie/S. +rudoyer/a0p+ +rue/S. +ruée/S. +ruelle/S. +ruer/a0p+ +ruffian/S. +rufflette/S. +ruflette/S. +rugby/S. +rugbyman/A. +rugination/S. +rugine/S. +rugir/f0p+ +rugissante/F. +rugissement/S. +rugosité/S. +rugueuse/W. +ruiler/a0p+ +ruine/S. +ruine-babines +ruiner/a0p+ +ruineuse/W. +ruineusement +ruiniforme/S. +ruiniste/S. +ruinure/S. +ruisseau/X. +ruisselante/F. +ruisseler/d0p. +ruisselet/S. +ruissellement/S. +rumba/S. +rumen/S. +rumeur/S. +rumex +ruminante/F. +rumination/S. +ruminement/S. +ruminer/a0p+ +rumsteak/S. +rumsteck/S. +runabout/S. +rune/S. +runiforme/S. +runique/S. +runologue/S. +ruolz +rupestre/S. +rupicole/S. +rupicole/S. +rupine/F. +rupiner/a0p. +rupteur/S. +rupture/S. +rurale/W. +ruraliser/a0p+ +ruralité/S. +rurbaine/F. +rurbanisation/S. +ruse/S. +rusée/F. +ruser/a0p. +rush/A. +russe/S. +russienne/F. +russification/S. +russifier/a0p+ +russiser/a0p+ +russité/S. +russo-allemande/F. +russo-américaine/F. +russo-belge/S. +russo-britannique/S. +russo-chinoise/F. +russo-iranienne/F. +russo-israélienne/F. +russo-italienne/F. +russo-japonaise/F. +russologue/S. +russo-mongole/F. +russophile/S. +russophobe/S. +russophobie/S. +russophone/S. +russo-suédoise/F. +russo-turque/F. +russo-ukrainienne/F. +russule/S. +rustaude/F. +rustauderie/S. +rusticage/S. +rusticité/S. +rustine/S. +rustique/S. +rustiquement +rustiquer/a0p+ +rustre/S. +rustre/S. +rut/S. +rutabaga/S. +rutacée/S. +rûter/a0 +ruthène/S. +ruthénium/S. +rutherfordium/S. +rutilance/S. +rutilante/F. +rutilation/S. +rutile/S. +rutilement/S. +rutiler/a0p. +rwandaise/F. +rye/S. +rythme/S. +rythmer/a0p+ +rythmicienne/F. +rythmicité/S. +rythmique/S. +rythmiquement +s +s/U.||-- +sa +saanen/S. +s'abader +sabayon/S. +sabbat/S. +sabbathienne/F. +sabbatique/S. +sabéenne/F. +sabéisme/S. +sabelle/S. +sabellianisme/S. +sabine/F. +sabir/S. +sablage/S. +sable +sable/S. +sabler/a0p+ +sablerie/S. +sableuse/F. +sableuse/W. +sablière/F. +sablo-argileuse/F. +sablon/S. +sablonner/a0p+ +sablonneuse/W. +sablonnière/S. +sabord/S. +sabordage/S. +sabordement/S. +saborder/a0p+ +sabordeuse/F. +sabot/S. +sabotage/S. +saboter/a0p+ +saboterie/S. +saboteuse/F. +sabotière/F. +sabouler/a0p+ +sabra/S. +sabrage/S. +sabre/S. +sabrer/a0p+ +sabretache/S. +sabreuse/F. +s'abriller +saburrale/W. +saburre/S. +sac/S. +sacagner/a0p+ +saccade/S. +saccader/a0p+ +saccage/S. +saccagement/S. +saccager/a0p+ +saccageuse/F. +saccharase/S. +saccharate/S. +sacchareuse/W. +saccharide/S. +saccharidé/S. +saccharifère/S. +saccharifiable/S. +saccharification/S. +saccharifier/a0p+ +saccharimètre/S. +saccharimétrie/S. +saccharimétrique/S. +saccharine/F. +saccharine/S. +saccharinée/F. +saccharique/S. +saccharoïde/S. +saccharolé/S. +saccharomyces +saccharose/S. +saccharure/S. +sacciforme/S. +saccule/S. +sacculiforme/S. +sacculine/S. +sacerdoce/S. +sacerdotale/W. +sacerdote/S. +sachem/S. +sachet/S. +sacoche/S. +sacoléva/S. +sacolève/S. +sacome/S. +sac-poubelle +sacquer/a0p+ +sacrale/W. +sacralisation/S. +sacraliser/a0p+ +sacralité/S. +sacramentaire/S. +sacramental/X. +sacramentalité/S. +sacramentelle/F. +sacramentellement +sacré +sacre/S. +sacrebleu +sacré-cœur/S. +sacredieu +sacrément +sacrement/S. +sacrer/a0p+ +sacret/S. +sacrifiable/S. +sacrificatoire/S. +sacrificatrice/F. +sacrifice/S. +sacrificielle/F. +sacrifiée/F. +sacrifier/a0p+ +sacrilège/S. +sacrilège/S. +sacripant/S. +sacristain/S. +sacristi +sacristie/S. +sacristine/S. +sacro-sainte/F. +sacrum/S. +sacs-poubelle +sadd/S. +sadducéenne/F. +sadico-anale/W. +sadique/S. +sadiquement +sadisme/S. +sado-maso/S. +sadomasochisme/S. +sado-masochisme/S. +sadomasochiste/S. +sado-masochiste/S. +safari/S. +safari-photo +safaris-photos +safran +safran/S. +safraner/a0p+ +safranière/S. +safre/S. +saga/S. +sagace/S. +sagacité/S. +sagaie/S. +sagard/S. +sage/S. +sage-femme +sagement +sages-femmes +sagesse/S. +sagette/S. +s'agir/fZ +sagittaire/S. +sagittale/W. +sagittée/F. +sagou/S. +sagouin/S. +sagoutier/S. +sagum/S. +saharienne/F. +sahel/S. +sahélienne/F. +sahib/S. +sahraouie/F. +saï/S. +saie/S. +saietter/a0p+ +saïga/S. +saignante/F. +saignée/S. +saignement/S. +saigner/a0p+ +saigneuse/F. +saigneuse/W. +saignoir/S. +saillante/F. +saillie/S. +saillir/iS +saïmiri/S. +sainbois +saindoux +saine/F. +sainement +sainfoin/S. +saint-bernard +saint-crépin +saint-cyrienne/F. +sainte/F. +saintement +saint-émilion/S. +sainte-nitouche +saintes-nitouches +sainteté/S. +saint-frusquin +saint-glinglin +saint-honoré +saintier/S. +saint-marcellin/S. +saint-nectaire +saintongeaise/F. +saint-paulin +saint-père +saint-pierre +saint-simonienne/F. +saint-simonisme +saints-pères +saisie/S. +saisie-arrêt +saisie-brandon +saisie-exécution +saisie-gagerie +saisies-arrêts +saisies-brandons +saisies-exécutions +saisies-gageries +saisine/S. +saisir/f0p+ +saisissable/S. +saisissante/F. +saisissement/S. +saisisseur/S. +saison/S. +saisonnale/W. +saisonnalité/S. +saisonner/a0p. +saisonnière/F. +saisonnièrement +saïte/S. +sajou/S. +saké/S. +saki/S. +sakieh/S. +salace/S. +salacité/S. +salade/S. +saladerie/S. +saladero/S. +saladier/S. +salafisme/S. +salafiste/S. +salage/S. +salaire/S. +salaison/S. +salamalec/S. +salamandre/S. +salami/S. +salangane/S. +salant/S. +salante/F. +salariale/W. +salariat/S. +salariée/F. +salarier/a0p+ +salarisation/S. +salaud/S. +salauderie/S. +salchow/S. +salé +sale/S. +sale/S. +salègre/S. +salement +salep/S. +saler/a0p+ +saleron/S. +salésienne/F. +saleté/S. +saleuse/F. +salicacée/S. +salicaire/S. +salicine/S. +salicional/S. +salicole/S. +salicoque/S. +salicorne/S. +salicoside/S. +saliculture/S. +salicylate/S. +salicylique/S. +salienne/F. +salière/S. +salifère/S. +salifiable/S. +salification/S. +salifier/a0p+ +saligaude/F. +salignon/S. +saligote/F. +saligoter/a0p+ +salinage/S. +saline/F. +salinière/F. +salinisation/S. +saliniser/a0p+ +salinité/S. +salinomètre/S. +salique/S. +salir/f0p+ +salissante/F. +salissement/S. +salisson/S. +salissure/S. +salivaire/S. +salivante/F. +salivation/S. +salive/S. +saliver/a0p. +saliveuse/W. +salle/S. +salmanazar/S. +salmigondis +salmis +salmonelle/S. +salmonellose/S. +salmonicultrice/F. +salmoniculture/S. +salmonidé/S. +salmoniforme/S. +saloir/S. +salol/S. +salomé/S. +salon/S. +salonguer/a0p. +salonnarde/F. +salonnarde/F. +salonnière/F. +saloon/S. +salop/S. +salopard/S. +salope/S. +saloper/a0p+ +saloperie/S. +salopette/S. +salopiaud/S. +salopiot/S. +salpe/S. +salpêtrage/S. +salpêtre/S. +salpêtrer/a0p+ +salpêtreuse/W. +salpêtrière/S. +salpêtrisation/S. +salpicon/S. +salpingienne/F. +salpingite/S. +salpingographie/S. +salsa/S. +salse/S. +salsepareille/S. +salsifis +salsolacée/S. +saltarelle/S. +saltation/S. +saltationnisme/S. +saltatoire/S. +salticidé/S. +saltimbanque/S. +salto/S. +salubre/S. +salubrité/S. +saluer/a0p+ +salure/S. +salut/S. +salutaire/S. +salutairement +salutation/S. +salutiste/S. +salvadorienne/F. +salvatrice/F. +salve/S. +salvifique/S. +samare/S. +samarienne/F. +samaritaine/F. +samarium/S. +samba/S. +sambo/S. +samboïste/S. +same/S. +samedi +samedi/S. +samit/S. +samizdat/S. +samnite/S. +samole/S. +samosa/S. +samouraï/S. +samoussa/S. +samovar/S. +samoyède/S. +sampan/S. +sampang/S. +sampi +sample/S. +sampler/S. +sampling/S. +sampot/S. +samsâra +samsara/S. +samurai +sana/S. +sanatorium/I. +san-benito/S. +sancerre/S. +sanctifiante/F. +sanctification/S. +sanctificatrice/F. +sanctifiée/F. +sanctifier/a0p+ +sanction/S. +sanctionnée/F. +sanctionner/a0p+ +sanctoral/X. +sanctuaire/S. +sanctuarisation/S. +sanctuariser/a0p+ +sanctus +sandale/S. +sandalette/S. +sandalière/F. +sandaraque/S. +sanderling/S. +sandhi/S. +sandjak/S. +sandow/S. +sandre/S. +sandwich/A. +sandwicherie/S. +sang/S. +sang-froid +sanglage/S. +sanglante/F. +sangle/S. +sangler/a0p+ +sanglier/S. +sanglot/S. +sanglotante/F. +sanglotement/S. +sangloter/a0p. +sang-mêlé +sangria/S. +sangs-mêlés +sangsue/S. +sanguinaire/S. +sanguine/F. +sanguinolente/F. +sanguisorbe/S. +sanhédrin/S. +sanicle/S. +sanidine/S. +sanie/S. +sanieuse/W. +sanisette/S. +sanitaire/S. +sanitairement +sanité/S. +sans +sans-abri +sans-allure +sans-cœur +sans-culotte +sans-culotte/S. +sans-emploi +sansevière/S. +sans-façon +sans-faute +sans-fil +sans-filiste +sans-filiste/S. +sans-gêne +sans-grade +sanskrit/S. +sanskrite/F. +sanskritisme/S. +sanskritiste/S. +sans-le-sou +sans-logis +sansonnet/S. +sans-papiers +sans-parti +sans-patrie +sans-plomb +sans-soin +sans-souci +santal/S. +santaline/S. +santé/S. +santeria/S. +santiag/S. +santoline/S. +santoméenne/F. +santon/S. +santonine/S. +santonner/a0p+ +santonnière/F. +sanve/S. +sanza/S. +saola/S. +saônoise/F. +saoudienne/F. +saoudite/S. +saoule/F. +saouler/a0p+ +saoulerie/S. +sapajou/S. +sape/S. +sapement/S. +sapèque/S. +saper/a0p+ +saperde/S. +saperlipopette +saperlotte +sapeur/S. +sapeur-pompier +sapeurs-pompiers +saphène/S. +saphique/S. +saphir +saphir/S. +saphisme/S. +sapide/S. +sapidité/S. +sapience/S. +sapiens +sapientiale/W. +sapin/S. +sapinage/S. +sapindacée/S. +sapine/S. +sapinette/S. +sapinière/S. +sapiosexualité/S. +sapiosexuelle/F. +sapiteur/S. +saponacée/F. +saponaire/S. +saponase/S. +saponifiable/S. +saponification/S. +saponifier/a0p+ +saponine/S. +sapotacée/S. +sapote/S. +sapotier/S. +sapotille/S. +sapotillier/S. +sapristi +sapropèle/S. +sapropélique/S. +saprophage/S. +saprophage/S. +saprophyte/S. +saprophyte/S. +saprophytique/S. +saprophytisme/S. +saquebute/S. +saquer/a0p+ +sar/S. +sarabande/S. +sarangi/S. +sarbacane/S. +sarcasme/S. +sarcastique/S. +sarcastiquement +sarcelle/S. +sarclage/S. +sarcler/a0p+ +sarclette/S. +sarcleuse/F. +sarcloir/S. +sarclure/S. +sarcocarpe/S. +sarcocèle/S. +sarcoïde/S. +sarcoïdose/S. +sarcologie/S. +sarcomateuse/W. +sarcome/S. +sarcophage/S. +sarcoplasme/S. +sarcoplasmique/S. +sarcopte/S. +sardanapale/S. +sardanapalesque/S. +sardane/S. +sarde/S. +sardine/S. +sardinerie/S. +sardinière/F. +sardoine/S. +sardonique/S. +sardoniquement +sardonyx +sargasse/S. +sari/S. +sarigue/S. +sarin/S. +sarisse/S. +sarmate/S. +sarment/S. +sarmenter/a0p. +sarmenteuse/W. +sarod/S. +saron/S. +sarong/S. +saros +saroual/S. +sarouel/S. +sarpejeu +sarracénie/S. +sarracénique/S. +sarrancolin/S. +sarrasine/F. +sarrau/S. +sarrette/S. +sarriette/S. +sarroise/F. +sarter/a0p+ +sarthoise/F. +sartrienne/F. +sas +sashimi/S. +sassafras +sassage/S. +sassanide/S. +sassement/S. +sassenage/S. +sasser/a0p+ +sasseuse/F. +sastrugi/S. +sataner/a0p+ +satanique/S. +sataniquement +sataniser/a0p+ +satanisme/S. +sataniste/S. +satellisable/S. +satellisation/S. +satelliser/a0p+ +satellitaire/S. +satellite/S. +satellite/S. +satî +sati/S. +satiété/S. +satin/S. +satinage/S. +satiner/a0p+ +satinette/S. +satineuse/F. +satire/S. +satirique/S. +satiriquement +satiriser/a0p+ +satiriste/S. +satisfaction/S. +satisfactoire/S. +satisfaire/wD +satisfaisante/F. +satisfecit +sativum +satonner/a0p+ +satrape/S. +satrapie/S. +satrapique/S. +saturabilité/S. +saturable/S. +saturante/F. +saturateur/S. +saturation/S. +saturer/a0p+ +saturnales +saturne/S. +saturnie/S. +saturnienne/F. +saturnine/F. +saturnisme/S. +satyre/S. +satyriasique/S. +satyriasis +satyrique/S. +satyrisme/S. +sauce/S. +saucée/S. +saucer/a0p+ +saucette/S. +saucière/F. +sauciflard/S. +saucisse/S. +saucisson/S. +saucissonnage/S. +saucissonner/a0p+ +saucissonneuse/F. +saudade/S. +sauf +sauf-conduit/S. +sauge/S. +saugrenue/F. +saulaie/S. +saule/S. +saulée/S. +saumâtre/S. +saumon +saumon/S. +saumoneau/X. +saumonée/F. +saumonette/S. +saumurage/S. +saumure/S. +saumurer/a0p+ +sauna/S. +saunage/S. +saunaison/S. +saunante/F. +sauner/a0p. +saunerie/S. +saunière/F. +saupe/S. +saupiquet/S. +saupoudrage/S. +saupoudrer/a0p+ +saupoudreuse/F. +saupoudroir/S. +saurage/S. +saure/F. +saurer/a0p+ +saurien/S. +saurin/S. +saurir/f0p+ +saurischien/S. +saurissage/S. +saurisserie/S. +saurisseuse/F. +sauropode/S. +saussaie/S. +saut/S. +saut-de-lit +saut-de-loup +saut-de-mouton +saute/S. +sautelle/S. +saute-mines +saute-mouton +sauter/a0p+ +sautereau/X. +sauterelle/S. +sauterie/S. +sauternes +saute-ruisseau +sauteuse/F. +sautillante/F. +sautillement/S. +sautiller/a0p. +sautoir/S. +sauts-de-lit +sauts-de-loup +sauts-de-mouton +sauvable/S. +sauvage/S. +sauvagement +sauvageonne/F. +sauvagerie/S. +sauvagesse/S. +sauvagine/F. +sauve/F. +sauvée/F. +sauvegarde/S. +sauvegarder/a0p+ +sauve-qui-peut +sauver/a0p+ +sauvetage/S. +sauveté/S. +sauveteuse/F. +sauvette +sauveur/S. +sauveuse/F. +sauvignon/S. +savagnin/S. +savamment +savane/S. +savante/F. +savarin/S. +savart/S. +savate/S. +savater/a0p+ +saveter +savetier/S. +saveur/S. +savoir/S. +savoir/pE +savoir-faire +savoir-vivre +savoisienne/F. +savon/S. +savonnage/S. +savonner/a0p+ +savonnerie/S. +savonnette/S. +savonneuse/W. +savonnière/F. +savourer/a0p+ +savoureuse/W. +savoureusement +savoyarde/F. +saxatile/S. +saxe/S. +saxhorn/S. +saxicole/S. +saxifragacée/S. +saxifrage/S. +saxifrage/S. +saxitoxine/S. +saxo/S. +saxonne/F. +saxophone/S. +saxophoniste/S. +saynète/S. +sayon/S. +sb/||-- +sbire/S. +scabieuse/W. +scabreuse/W. +scaferlati/S. +scalabilité/S. +scalaire/S. +scalairement +scalde/S. +scaldique/S. +scalène/S. +scalène/S. +scalp/S. +scalpel/S. +scalper/a0p+ +scampi/S. +scampis +scandale/S. +scandaleuse/W. +scandaleusement +scandalisée/F. +scandaliser/a0p+ +scander/a0p+ +scandinave/S. +scandinavisme/S. +scandium/S. +scannage/S. +scanner/S. +scanner/a0p+ +scannériser/a0p+ +scanographe/S. +scanographie/S. +scanographique/S. +scansion/S. +scaphandre/S. +scaphandrière/F. +scaphite/S. +scaphoïde/S. +scaphoïde/S. +scapolite/S. +scapula/S. +scapulaire/S. +scapulaire/S. +scapulalgie/S. +scapulo-humérale/W. +scarabée/S. +scarabéidé/S. +scare/S. +scarieuse/W. +scarifiage/S. +scarificateur/S. +scarification/S. +scarifier/a0p+ +scarlatine/S. +scarlatineuse/W. +scarlatiniforme/S. +scarole/S. +scat/S. +scatol/S. +scatologie/S. +scatologique/S. +scatophage/S. +scatophage/S. +scatophile/S. +sceau/X. +sceau-de-Salomon +sceaux-de-Salomon +scélérate/F. +scélératement +scélératesse/S. +scellage/S. +scellé/S. +scellement/S. +sceller/a0p+ +scénarimage/S. +scenario/I. +scénario/S. +scénarisation/S. +scénariser/a0p+ +scénariste/S. +scénaristique/S. +scénaristiquement +scène/S. +scénette/S. +scénique/S. +scéniquement +scénographe/S. +scénographie/S. +scénographique/S. +scénologie/S. +scepticisme/S. +sceptique/S. +sceptiquement +sceptre/S. +schah/S. +schako/S. +schappe/S. +schapska/S. +scheelite/S. +scheidage/S. +scheik/S. +schelem/S. +schéma/S. +schématèque/S. +schématique/S. +schématiquement +schématisation/S. +schématiser/a0p+ +schématisme/S. +schème/S. +schéol/S. +scherzando +scherzo +scherzo/S. +schibboleth/S. +schiedam/S. +schilling/S. +schipperke/S. +schismatique/S. +schisme/S. +schiste/S. +schisteuse/W. +schistoïde/S. +schistosité/S. +schistosome/S. +schizo/S. +schizogamie/S. +schizogenèse/S. +schizogonie/S. +schizoïde/S. +schizoïdie/S. +schizomanie/S. +schizométamérie/S. +schizonévrose/S. +schizoparaphasie/S. +schizophrène/S. +schizophrénie/S. +schizophrénique/S. +schizose/S. +schizothymie/S. +schlague/S. +schlamm/S. +schlass +schleichera/S. +schleue/F. +schlich/S. +schlinguer/a0p. +schlittage/S. +schlitte/S. +schlitter/a0p+ +schlitteur/S. +schmecter/a0p. +schmilblick/S. +schnaps +schnauzer/S. +schnock/S. +schnoque/S. +schnorchel/S. +schnorkel/S. +schnouf/S. +schnouff/S. +schofar/S. +scholiaste/S. +scholie/S. +schooner/S. +schorre/S. +schproum/S. +schtroumpfer/a0p+ +schupo/S. +schuss +schwarzienne/F. +sciable/S. +sciage/S. +scialytique/S. +sciaphile/S. +sciapode/S. +sciatalgie/S. +sciatique/S. +sciatique/S. +scie/S. +sciemment +science/S. +science-fiction +sciences-fictions +sciène/S. +sciénidé/S. +scientificité/S. +scientifique/S. +scientifiquement +scientisme/S. +scientiste/S. +scientologie/S. +scientologue/S. +scientométrie/S. +scientométrique/S. +scier/a0p+ +scierie/S. +scieuse/F. +scille/S. +scindable/S. +scindage/S. +scinder/a0p+ +scinque/S. +scintigramme/S. +scintigraphie/S. +scintillante/F. +scintillateur/S. +scintillation/S. +scintillement/S. +scintiller/a0p. +scintillogramme/S. +scintillographie/S. +scintillomètre/S. +scion/S. +sciotte/S. +sciotter/a0p+ +scirpe/S. +scissile/S. +scission/S. +scissionner/a0p. +scissionnisme/S. +scissionniste/S. +scissipare/S. +scissiparité/S. +scissure/S. +sciure/S. +sciuridé/S. +sclérale/W. +scléranthe/S. +sclère/S. +sclérenchyme/S. +scléreuse/W. +sclérifiante/F. +sclérifier/a0p+ +sclérite/S. +scléro-choroïdite/S. +sclérochronologie/S. +scléro-conjonctivite/S. +scléroderme/S. +sclérodermie/S. +sclérokératite/S. +sclérophylle/S. +scléroprotéine/S. +sclérosante/F. +sclérose/S. +scléroser/a0p+ +sclérote/S. +sclérothérapie/S. +sclérotinia/S. +sclérotique/S. +sclérotique/S. +sclérotome/S. +scléterectasie/S. +scléterectomie/S. +scolaire/S. +scolairement +scolarisable/S. +scolarisation/S. +scolariser/a0p+ +scolarité/S. +scolasticat/S. +scolastique/S. +scolastiquement +scolex +scolie/S. +scoliose/S. +scoliotique/S. +scolopacidé/S. +scolopendre/S. +scolyte/S. +sconse/S. +scoop/S. +scooter/S. +scootériste/S. +scopie/S. +scopolamine/S. +scorbut/S. +scorbutique/S. +score/S. +scoriacée/F. +scorie/S. +scorifier/a0p+ +scorpène/S. +scorpioïde/S. +scorpion/S. +scorsonère/S. +scotch/A. +scotcher/a0p+ +scotie/S. +scotisme/S. +scotiste/S. +scotome/S. +scotomisation/S. +scotomiser/a0p+ +scotopie/S. +scotopique/S. +scots +scottish/S. +scoubidou/S. +scoumoune/S. +scoured/S. +scoute/F. +scoutisme/S. +scrabble/S. +scrabbleuse/F. +scramasaxe/S. +scrapbooking/S. +scraper/S. +scratch +scratch/A. +scratcher/a0p+ +scratching/S. +screening/S. +scriban/S. +scribe/S. +scribouillage/S. +scribouillarde/F. +scribouiller/a0p+ +scribouilleuse/F. +scriptable/S. +scripte/F. +scripter/a0p+ +script-girl/S. +scriptorium/I. +scriptrice/F. +scripturaire/S. +scripturale/W. +scripturalisme/S. +scrofulaire/S. +scrofulariacée/S. +scrofule/S. +scrofuleuse/W. +scrogneugneu/X. +scroller/a0p. +scrolling/S. +scrotale/W. +scrotum/S. +scrub/S. +scrubber/S. +scrupule/S. +scrupuleuse/W. +scrupuleusement +scrutation/S. +scrutatrice/F. +scruter/a0p+ +scrutin/S. +scull/S. +sculpter/a0p+ +sculpteure/S. +sculptrice/F. +sculpturale/W. +sculpture/S. +scutellaire/S. +scutigère/S. +scutum/I. +scyphoméduse/S. +scyphozoaire/S. +scytale/S. +scythe/S. +scythique/S. +sdcard/S. +se +seaborgium/S. +sea-line/S. +séance/S. +séant/S. +séante/F. +seau/X. +sébacée/F. +sébacique/S. +sébaste/S. +sébile/S. +sebkha/S. +séborrhée/S. +séborrhéide/S. +séborrhéique/S. +sébum/S. +sécable/S. +secam/S. +sécante/F. +sécateur/S. +sécession/S. +sécessionnisme/S. +sécessionniste/S. +séchage/S. +sèche/F. +sèche-cheveux +sèche-linge +sèche-mains +sèchement +sécher/c0p+ +sécheresse/S. +sécherie/S. +sécheuse/F. +séchoir/S. +secondaire/S. +secondairement +secondarité/S. +seconde/F. +seconde/Um +secondement +seconder/a0p+ +secondine/S. +secouage/S. +secouante/F. +secouement/S. +secouer/a0p+ +secoueur/S. +secourable/S. +secoureuse/F. +secourir/iE +secourisme/S. +secouriste/S. +secours +secousse/S. +secrétage/S. +secrétaire/S. +secrétairerie/S. +secrétariat/S. +secrète/F. +secrètement +secréter/c0p+ +sécréter/c0p+ +sécréteuse/S. +sécrétine/S. +sécrétion/S. +sécrétoire/S. +sécrétrice/F. +sectaire/S. +sectarisme/S. +sectatrice/F. +secte/S. +secteur/S. +section/S. +sectionnable/S. +sectionnaire/S. +sectionnelle/F. +sectionnement/S. +sectionner/a0p+ +sectionneur/S. +sectorielle/F. +sectoriellement +sectorisation/S. +sectoriser/a0p+ +sécu +séculaire/S. +séculairement +sécularisation/S. +séculariser/a0p+ +sécularisme/S. +séculariste/S. +sécularité/S. +séculière/F. +séculièrement +secundo +sécure/S. +sécurisante/F. +sécurisation/S. +sécuriser/a0p+ +sécuritaire/S. +sécuritarisme/S. +sécurité/S. +sédation/S. +sédative/F. +sédénion/S. +sédentaire/S. +sédentairement +sédentarisation/S. +sédentariser/a0p+ +sédentarisme/S. +sédentarité/S. +sédévacantisme/S. +sédévacantiste/S. +sédiment/S. +sédimentaire/S. +sédimentation/S. +sédimenter/a0p+ +sédimentologie/S. +sédimentologique/S. +sédimentologue/S. +séditieuse/W. +séditieusement +sédition/S. +séduction/S. +séductrice/F. +séduire/yL +séduisante/F. +sedum/S. +séfarade/S. +séga/S. +ségala/S. +seghia/S. +segment/S. +segmentaire/S. +segmentale/W. +segmentarité/S. +segmentation/S. +segmenter/a0p+ +ségrairie/S. +ségrais +ségrégabilité/S. +ségrégation/S. +ségrégationnisme/S. +ségrégationniste/S. +ségrégative/F. +ségréger/c0p+ +ségréguer/c0p+ +séguedille/S. +seguia/S. +seguidilla/S. +seiche/S. +séide/S. +seigle/S. +seigneur/S. +seigneuresse/S. +seigneuriage/S. +seigneuriale/W. +seigneurie/S. +seille/S. +seillon/S. +seime/S. +sein/S. +seine/S. +seinen/S. +seing/S. +séisme/S. +séismicité/S. +séismique/S. +séismographe/S. +séismologie/S. +seizain/S. +seize +seizième/S. +seizièmement +seiziémisme/S. +séjour/S. +séjournement/S. +séjourner/a0p. +sel/S. +sélacien/S. +sélacienne/F. +sélaginelle/S. +seldjoukide/S. +select/S. +sélecte/F. +sélecter/a0p+ +sélection/S. +sélectionnable/S. +sélectionner/a0p+ +sélectionneuse/F. +sélectionnisme/S. +sélective/F. +sélectivement +sélectivité/S. +sélectrice/F. +séléniate/S. +sélénienne/F. +sélénieux +sélénique/S. +sélénite/S. +séléniteuse/W. +sélénium/S. +séléniure/S. +sélénodésie/S. +sélénographie/S. +sélénographique/S. +sélénologie/S. +sélénologue/S. +séleucide/S. +self/S. +self-control/S. +self-government/S. +selfie/S. +self-inductance/S. +self-induction/S. +self-made-man/A. +self-made-woman/A. +self-service/S. +selle/S. +seller/a0p+ +sellerie/S. +sellette/S. +sellier/S. +selon +selon +selve/S. +semailles +semaine/S. +semainière/F. +sémantème/S. +sémanticienne/F. +sémantique/S. +sémantiquement +sémantisme/S. +sémaphore/S. +sémaphorique/S. +sémasiologie/S. +semblable/S. +semblablement +semblance/S. +semblant/S. +sembler/a0p. +séméiologie/S. +séméiologique/S. +séméiotique/S. +séméiotique/S. +semelle/S. +sémème/S. +semence/S. +semencière/F. +semen-contra +semer/b0p+ +semestre/S. +semestrialisation/S. +semestrielle/F. +semestriellement +semeuse/F. +semi +semi-aride/S. +semi-automatique/S. +semi-auxiliaire/S. +semi-auxiliaire/S. +semi-chenillée/F. +semi-circulaire/S. +semi-coke/S. +semi-conducteur/S. +semi-conductrice/F. +semi-consonne/S. +semi-développée/F. +semi-distillation/S. +semi-dominance/S. +semi-finie/F. +semi-liberté/S. +sémillante/F. +sémillon/S. +semi-lunaire/S. +semi-manufacturée/F. +semi-marathon/S. +semi-marathonienne/F. +séminaire/S. +séminale/W. +séminariste/S. +séminifère/S. +semi-nomade/S. +semi-nomadisme/S. +séminome/S. +sémiologie/S. +sémiologique/S. +sémiologiquement +sémiologue/S. +sémiométrie/S. +sémioticienne/F. +sémiotique/S. +sémiotique/S. +sémiotiquement +semi-ouvrée/F. +semi-perméable/S. +semi-polaire/S. +semi-précieuse/W. +semi-produit/S. +semi-publique/F. +sémique/S. +semi-remorque/S. +semi-rigide/S. +semis +semi-submersible/S. +sémite/S. +sémitique/S. +sémitique/S. +sémitisme/S. +semi-tubulaire/S. +semi-voyelle/S. +semnopithèque/S. +semoir/S. +semonce/S. +semoncer/a0p+ +semoule/S. +semoulerie/S. +semoulière/F. +sempervirente/F. +sempervivum +sempiternelle/F. +sempiternellement +semple/S. +semtex +sen/S. +sénaire/S. +sénaire/S. +sénat/S. +sénatorerie/S. +sénatoriale/W. +sénatorienne/F. +sénatrice/F. +sénatus-consulte/S. +senau/S. +séné/S. +sénéchal/X. +sénéchaussée/S. +séneçon/S. +sénégalaise/F. +sénégaliser/a0p+ +sénégalisme/S. +sénégambienne/F. +senescence/S. +sénescence/S. +sénescente/F. +senestre/S. +senestre/S. +senestrée/F. +senestrochère/S. +senestrorsum +senestrorsum +sénevé/S. +sénile/S. +sénilement +sénilisme/S. +sénilité/S. +senior/S. +séniorie/S. +séniorisation/S. +séniorité/S. +senne/S. +sénologie/S. +señor/S. +señora/S. +señorita/S. +sens +sensass +sensation/S. +sensationnalisme/S. +sensationnaliste/S. +sensationnel +sensationnelle/F. +sensationnellement +sensationnisme/S. +sensationniste/S. +sensée/F. +senseï/S. +sensément +senseur/S. +sensibilisante/F. +sensibilisation/S. +sensibilisatrice/F. +sensibiliser/a0p+ +sensibilité/S. +sensible/S. +sensiblement +sensiblerie/S. +sensille/S. +sensitive/F. +sensitivité/S. +sensitogramme/S. +sensitographe/S. +sensitomètre/S. +sensitométrie/S. +sensitométrique/S. +sensorialité/S. +sensorielle/F. +sensorimétrie/S. +sensorimétrique/S. +sensorimotrice/F. +sensu +sensualisme/S. +sensualiste/S. +sensualité/S. +sensuelle/F. +sensuellement +sente/S. +sentence/S. +sentencieuse/W. +sentencieusement +senteur/S. +sentience/S. +sentier/S. +sentiment/S. +sentimentale/W. +sentimentalement +sentimentalisme/S. +sentimentaliste/S. +sentimentalité/S. +sentine/S. +sentinelle/S. +sentir/i5q+ +seoir/pU +seoir/pV +sep/S. +sépale/S. +sépaloïde/S. +séparabilité/S. +séparable/S. +séparation/S. +séparatisme/S. +séparatiste/S. +séparative/F. +séparatrice/F. +séparément +séparer/a0p+ +sépia +sépia/S. +sépiole/S. +sépiolite/S. +seppuku/S. +sepsis +sept +sept +septain/S. +septale/W. +septantaine/S. +septante +septante-cinq +septante-deux +septante-et-un +septante-huit +septante-neuf +septante-quatre +septante-sept +septante-six +septante-trois +septantième/S. +septembrale/W. +septembre/S. +septembrisades +septembriseur/S. +septemvir/S. +septénaire/S. +septénaire/S. +septennale/W. +septennalité/S. +septennat/S. +septentrion/S. +septentrionale/W. +septicémie/S. +septicémique/S. +septicité/S. +septidi/S. +septième/S. +septièmement +septillion/S. +septime/S. +septimo +septique/S. +septmoncel/S. +septolet/S. +septomycète/S. +septoriose/S. +septuagénaire/S. +septuagésime/S. +septum +septuor/S. +septuple/S. +septuple/S. +septupler/a0p+ +sépulcrale/W. +sépulcre/S. +sépulture/S. +séquanaise/F. +séquelle/S. +séquençage/S. +séquence/S. +séquencement/S. +séquencer/a0p+ +séquenceur/S. +séquentialité/S. +séquentielle/F. +séquentiellement +séquestrant/S. +séquestrante/F. +séquestration/S. +séquestre/S. +séquestrée/F. +séquestrer/a0p+ +sequin/S. +sequoia/S. +séquoia/S. +sérac/S. +sérail/S. +sérançage/S. +sérancer/a0p+ +séranceur/S. +sérançoir/S. +serapeum/S. +sérapéum/S. +séraphin/S. +séraphine/F. +séraphique/S. +serbe/S. +serbo-croate/S. +serbo-croate/S. +serbo-monténégrine/F. +serdab/S. +serdeau/X. +sereine/F. +sereinement +sérénade/S. +sérendipité/S. +sérénissime/S. +sérénité/S. +séreuse/W. +serf/S. +serfouette/S. +serfouir/f0p+ +serfouissage/S. +serge/S. +sergé/S. +sergent-chef +sergente/F. +sergente-chef +sergentes-chefs +sergent-major +sergents-chefs +sergents-majors +sergette/S. +sérialisation/S. +sérialiser/a0p+ +sérialisme/S. +sérialité/S. +sériation/S. +séricicole/S. +séricicultrice/F. +sériciculture/S. +séricigène/S. +séricigraphie/S. +séricole/S. +série/S. +sérielle/F. +sérier/a0p+ +sérieuse/W. +sérieusement +serif/S. +sérigraphie/S. +sérigraphier/a0p+ +sérigraphique/S. +sérigraphiste/S. +serine/F. +sérine/S. +seriner/a0p+ +serinette/S. +seringa/S. +seringat/S. +seringue/S. +seringuer/a0p+ +seringuero/S. +sérique/S. +serlienne/S. +serment/S. +sermon/S. +sermonnaire/S. +sermonner/a0p+ +sermonneuse/F. +séroconversion/S. +sérodiagnostic/S. +sérologie/S. +sérologique/S. +sérologiquement +sérologiste/S. +séronégative/F. +séronégativité/S. +séropositive/F. +séropositivité/S. +séroprophylaxie/S. +séroprotection/S. +sérosité/S. +sérothérapie/S. +sérothérapique/S. +sérotine/S. +sérotonine/S. +sérotoninergique/S. +sérovaccination/S. +serpe/S. +serpent/S. +serpentaire/S. +serpentante/F. +serpenteau/X. +serpentement/S. +serpenter/a0p. +serpentiforme/S. +serpentine/F. +serpentinisation/S. +serpette/S. +serpigineuse/W. +serpillière/S. +serpolet/S. +serpule/S. +serrage/S. +serran/S. +serranidé/S. +serrate/S. +serratule/S. +serre/S. +serre-bosse +serre-câble +serre-écrou +serre-file +serre-file/S. +serre-fils +serre-frein/S. +serre-freins +serre-joint/S. +serre-joints +serre-livres +serrement/S. +serre-nez +serre-papiers +serrer/a0p+ +serre-tête +serre-tube +serre-tube/S. +serricultrice/F. +serriculture/S. +serriste/S. +serrure/S. +serrurerie/S. +serrurière/F. +serte/S. +sertir/f0p+ +sertissage/S. +sertisseuse/F. +sertissure/S. +sertraline/S. +sérum/S. +sérumalbumine/S. +servage/S. +serval/S. +servante/F. +serveuse/F. +serviabilité/S. +serviable/S. +serviablement +service/S. +serviette/S. +serviette-éponge +serviettes-éponges +servile/S. +servilement +servilisme/S. +servilité/S. +servir/iF +serviteur/S. +servitude/S. +servocommande/S. +servodirection/S. +servofrein/S. +servomécanisme/S. +servomoteur/S. +ses +sésame/S. +sésamoïde/S. +sesbania/S. +sesbanie/S. +sesquialtère/S. +sesquilinéaire/S. +sesquioxyde/S. +sesquiterpène/S. +sessile/S. +session/S. +sesterce/S. +set/S. +sétacée/F. +sétaire/S. +sétaire/S. +setar/S. +setier/S. +sétifère/S. +séton/S. +setter/S. +seuil/S. +seuillage/S. +seuillée/F. +seule/F. +seulement +seulette/F. +sève/S. +seventies +sévère/S. +sévèrement +sévérité/S. +sévices +sévir/f0p. +sevrage/S. +sevrer/b0p+ +sévrienne/F. +sexage/S. +sexagénaire/S. +sexagésimale/W. +sexagésime/S. +sex-appeal/S. +sexe/S. +sexisme/S. +sexiste/S. +sexologie/S. +sexologique/S. +sexologue/S. +sexonomie/S. +sexothérapeute/S. +sexothérapie/S. +sex-shop/S. +sexsomnie/S. +sextant/S. +sextape/S. +sexte/S. +sextet/S. +sextidi/S. +sextillion/S. +sextine/S. +sexto +sexto/S. +sextolet/S. +sextoy/S. +sex-toy/S. +sextuor/S. +sextuple/S. +sextuple/S. +sextupler/a0p+ +sexualisation/S. +sexualiser/a0p+ +sexualisme/S. +sexualité/S. +sexuation/S. +sexuée/F. +sexuelle/F. +sexuellement +sexy +seyante/F. +seychelloise/F. +sézigue +sforzando +sfumato/S. +sgraffite/S. +shabbat/S. +shafiisme/S. +shah/S. +shaker/S. +shakespearienne/F. +shako/S. +shamane/F. +shamanique/S. +shamanisme/S. +shamaniste/S. +shamanistique/S. +shamisen/S. +shampoing/S. +shampooiner/a0p+ +shampooineuse/F. +shampooing/S. +shampouiner/a0p+ +shampouineuse/F. +shantoung/S. +shantung/S. +shawarma/S. +shekel/S. +shell/S. +shéol/S. +shérif/S. +shériff/S. +sherpa/S. +sherry/A. +shetland/S. +shiatsu/S. +shibari/S. +shiitaké/S. +shilling/S. +shilom/S. +shimmy/S. +shinto/S. +shintoïsme/S. +shintoïste/S. +shipchandler/S. +shirt/S. +shit/S. +shivaïsme/S. +shivaïte/S. +shocking +shogun/S. +shogunale/W. +shogunat/S. +shōjo/S. +shōnen/S. +shoot/S. +shooter/a0p+ +shopping/S. +short/S. +shot/S. +show/S. +show-biz +show-business +showroom/S. +show-room/S. +shrapnel/S. +shrapnell/S. +shui +shunt/S. +shuntage/S. +shunter/a0p+ +shuriken/S. +si +si +si +sial/S. +sialagogue/S. +sialique/S. +sialis +sialorrhée/S. +siamang/S. +siamoise/F. +sibérienne/F. +sibilance/S. +sibilante/F. +sibylle/S. +sibylline/F. +sic +sicaire/S. +sicav +siccative/F. +siccativité/S. +siccité/S. +sicilienne/F. +sicle/S. +sida +sidaïque/S. +sidatique/S. +side-car/S. +sidéenne/F. +sidérable/S. +sidérale/W. +sidérante/F. +sidération/S. +sidérémie/S. +sidérer/c0p+ +sidérite/S. +sidérocyte/S. +sidérographie/S. +sidérolite/S. +sidérolithe/S. +sidérolithique/S. +sidérolithique/S. +sidérolitique/S. +sidérolitique/S. +sidéropénie/S. +sidérophile/S. +sidérophiline/S. +sidérose/S. +sidérostat/S. +sidéroxylon/S. +sidérurgie/S. +sidérurgique/S. +sidérurgiste/S. +sidologie/S. +siècle/S. +siège/S. +siéger/c0p. +siemens/Ui +sienne/F. +siennoise/F. +sierra/S. +sieste/S. +siester/a0p. +sieur/S. +sievert/Um +sifflage/S. +sifflante/F. +sifflement/S. +siffler/a0p+ +sifflet/S. +siffleuse/F. +sifflotante/F. +sifflotement/S. +siffloter/a0p+ +sifilet/S. +sigillaire/S. +sigillaire/S. +sigillée/F. +sigillographie/S. +sigillographique/S. +sigisbée/S. +siglaison/S. +sigle/S. +sigler/a0p+ +sigma +sigmatropique/S. +sigmoïde/S. +sigmoïdite/S. +signal/X. +signalement/S. +signaler/a0p+ +signalétique/S. +signalétique/S. +signaleur/S. +signalisation/S. +signalisatrice/F. +signaliser/a0p+ +signataire/S. +signature/S. +signe/S. +signer/a0p+ +signet/S. +signifiance/S. +signifiante/F. +signification/S. +significative/F. +significativement +significativité/S. +significatrice/F. +signifier/a0p+ +sikhe/F. +sikhisme/S. +sil/S. +silane/S. +silence/S. +silencieuse/W. +silencieusement +silène/S. +silentbloc/S. +silentiaire/S. +silésienne/F. +silex +silhouette/S. +silhouetter/a0p+ +silicagel/S. +silicate/S. +silicatée/F. +silicatisation/S. +silicatiser/a0p+ +silice/S. +siliceuse/W. +silicicole/S. +silicification/S. +silicique/S. +silicium/S. +siliciure/S. +silicomanganèse/S. +silicone/S. +siliconer/a0p+ +silicose/S. +silicotique/S. +silicule/S. +silionne/S. +silique/S. +siliqueuse/W. +sill/S. +sillage/S. +sillet/S. +sillimanite/S. +sillon/S. +sillonner/a0p+ +silo/S. +silotage/S. +silphe/S. +silure/S. +silurienne/F. +siluriforme/S. +siluroïde/S. +sima/S. +simagrée/S. +simarre/S. +simaruba/S. +simbleau/X. +simienne/F. +simiesque/S. +similaire/S. +similairement +similarité/S. +simili/S. +similicuir/S. +similigravure/S. +similisage/S. +similiser/a0p+ +similiste/S. +similitude/S. +similor/S. +simoniaque/S. +simonie/S. +simonienne/F. +simonisme/S. +simoun/S. +simple/S. +simplement +simplette/F. +simplex +simplexe/S. +simpliciale/W. +simplicialement +simplicité/S. +simplifiable/S. +simplification/S. +simplificatrice/F. +simplifier/a0p+ +simplisme/S. +simplissime/S. +simpliste/S. +simulacre/S. +simulation/S. +simulatrice/F. +simuler/a0p+ +simulie/S. +simultanée/F. +simultanéisme/S. +simultanéité/S. +simultanément +sin +sinanthrope/S. +sinapisée/F. +sinapisme/S. +sincère/S. +sincèrement +sincérité/S. +sincipitale/W. +sinciput/S. +sine +sinécure/S. +singalette/S. +singapourienne/F. +singe/S. +singer/a0p+ +singerie/S. +single/S. +singlet/S. +singleton/S. +singularisation/S. +singulariser/a0p+ +singularité/S. +singulatif/S. +singulative/F. +singulet/S. +singulière/F. +singulièrement +sinh +sinisante/F. +sinisation/S. +siniser/a0p+ +sinistralité/S. +sinistre/S. +sinistre/S. +sinistrée/F. +sinistrement +sinistrose/S. +sinité/S. +sino-américaine/F. +sino-australienne/F. +sinogramme/S. +sino-indonésienne/F. +sino-japonaise/F. +sinologie/S. +sinologue/S. +sinon +sinophile/S. +sinophone/S. +sinople/S. +sinoque/S. +sino-russe/S. +sino-soviétique/S. +sino-tibétain/S. +sino-tibétaine/F. +sino-vietnamienne/F. +sinuée/F. +sinuer/a0p. +sinueuse/W. +sinueusement +sinuosité/S. +sinus +sinusale/W. +sinusite/S. +sinusoïdale/W. +sinusoïdalement +sinusoïde/S. +sionisme/S. +sioniste/S. +sioux +siphoïde/S. +siphomycète/S. +siphon/S. +siphonaptère/S. +siphonnage/S. +siphonner/a0p+ +siphonophore/S. +sipo/S. +sir/S. +sirdar/S. +sire/S. +sirène/S. +sirénien/S. +sirex +sirli/S. +sirocco/S. +sirop/S. +siroter/a0p+ +sirtaki/S. +sirupeuse/W. +sirvente/S. +sirventès +sisal/S. +sismale/W. +sismicité/S. +sismique/S. +sismogenèse/S. +sismogramme/S. +sismographe/S. +sismographie/S. +sismographique/S. +sismologie/S. +sismologique/S. +sismologue/S. +sismomètre/S. +sismothérapie/S. +sistership/S. +sister-ship/S. +sistre/S. +sisymbre/S. +sitar/S. +sitariste/S. +sitcom/S. +site/S. +sit-in +sitogoniomètre/S. +sitologie/S. +sitone/S. +sitôt +sittelle/S. +situ +situable/S. +situation/S. +situationnelle/F. +situationnisme/S. +situationniste/S. +situer/a0p+ +situle/S. +sium/S. +sivaïsme/S. +sivaïte/S. +sivapithèque/S. +six +sixain/S. +sixième/S. +sixièmement +sixte/S. +sixties +sizain/S. +sizerin/S. +skaï/S. +skarn/S. +skate/S. +skateboard/S. +skate-board/S. +skater/S. +skateuse/F. +skating/S. +skeleton/S. +sketch/A. +skeuomorphisme/S. +ski/S. +skiable/S. +skiascopie/S. +skier/a0p. +skieuse/F. +skiff/S. +skiffeuse/F. +skin/S. +skinhead/S. +skipper/S. +skons +skunks +skuns +skye-terrier/S. +sky-surf/S. +sky-surfing/S. +slache/S. +slalom/S. +slalomer/a0p. +slalomeuse/F. +slam/S. +slamer/a0p. +slameuse/F. +slang/S. +slash/A. +slave/S. +slavisante/F. +slaviser/a0p+ +slavisme/S. +slaviste/S. +slavistique/S. +slavonne/F. +slavophile/S. +sleeping/S. +slice/S. +slicer/a0p+ +slikke/S. +slim/S. +slip/S. +slogan/S. +sloop/S. +sloughi/S. +slovaque/S. +slovène/S. +slow/S. +smala/S. +smalah/S. +small +smalt/S. +smaltine/S. +smaltite/S. +smaragdine/F. +smaragdite/S. +smart +smartphone/S. +smash/A. +smasher/a0p+ +smectique/S. +smegma/S. +smicarde/F. +smilax +smiley/S. +smillage/S. +smille/S. +smiller/a0p+ +smilodon/S. +smithsonite/S. +smocks +smog/S. +smoking/S. +smolt/S. +smoothie/S. +smorrebrod/S. +smorzando +smorzando/S. +smurf/S. +smurfeuse/F. +snack/S. +snack-bar/S. +sniff +sniffer/a0p+ +sniffeuse/F. +sniper/S. +snob/S. +snober/a0p+ +snobinarde/F. +snobisme/S. +snooker/S. +snoreau/X. +snowboard/S. +snowboardeuse/F. +snow-boot/S. +snowkite/S. +snowpark/S. +soap/S. +soap-opera/S. +sobre/S. +sobrement +sobriété/S. +sobriquet/S. +soc/S. +soccer/S. +sociabilisation/S. +sociabiliser/a0p+ +sociabilité/S. +sociable/S. +social +social-chrétien +social-démocrate +social-démocratie/S. +sociale/W. +sociale-chrétienne +sociale-démocrate +socialement +sociale-révolutionnaire +sociales-chrétiennes +sociales-démocrates +sociales-révolutionnaires +socialisante/F. +socialisation/S. +socialisatrice/F. +socialiser/a0p+ +socialisme/S. +socialiste/S. +socialité/S. +socialo/S. +social-révolutionnaire +sociation/S. +sociatrie/S. +sociaux-chrétiens +sociaux-démocrates +sociaux-révolutionnaires +sociétaire/S. +sociétale/W. +sociétalement +sociétariat/S. +société/S. +société-écran +sociétés-écrans +socinianisme/S. +socinienne/F. +socio-affective/F. +socio-anthropologie/S. +sociobiologie/S. +sociobiologique/S. +sociobiologiste/S. +sociocratie/S. +sociocratique/S. +socioculturelle/F. +socio-culturelle/F. +sociodrame/S. +socio-économique/S. +socio-éducative/F. +socio-esthéticienne/F. +sociofinancement/S. +sociogenèse/S. +sociogéographique/S. +socio-géographique/S. +sociogramme/S. +sociographie/S. +socio-historique/S. +socio-judiciaire/S. +sociolecte/S. +sociolinguiste/S. +sociolinguistique/S. +socio-linguistique/S. +sociolinguistique/S. +socio-linguistique/S. +sociologie/S. +sociologique/S. +sociologiquement +sociologisme/S. +sociologue/S. +sociomédicale/F. +socio-médicale/F. +sociométrie/S. +sociométrique/S. +sociopathe/S. +sociopathie/S. +sociopathique/S. +sociopolitique/S. +socio-politique/S. +socioprofessionnelle/F. +socio-professionnelle/F. +sociotechnique/S. +socio-technique/S. +sociothérapie/S. +socket/S. +soclage/S. +socle/S. +socque/S. +socquette/S. +socratique/S. +socratiser/a0p. +soda/S. +sodalite/S. +sodalité/S. +sodar/S. +sodée/F. +sodique/S. +sodium/S. +sodoku/S. +sodomie/S. +sodomisation/S. +sodomiser/a0p+ +sodomite/S. +sœur/S. +sœurette/S. +sofa/S. +soffite/S. +soft +soft/S. +softball/S. +software/S. +soi +soi-disant +soi-disant +soie/S. +soierie/S. +soif/S. +soiffarde/F. +soignable/S. +soignante/F. +soigner/a0p+ +soigneuse/F. +soigneuse/W. +soigneusement +soi-même +soin/S. +soir/S. +soirée/S. +soirer/a0p. +soit +soit-communiqué/S. +soixantaine/S. +soixante +soixante-cinq +soixante-cinquième/S. +soixante-deux +soixante-deuxième/S. +soixante-dix +soixante-dix-huit +soixante-dix-huitième/S. +soixante-dixième/S. +soixante-dix-neuf +soixante-dix-neuvième/S. +soixante-dix-sept +soixante-dix-septième/S. +soixante-douze +soixante-douzième/S. +soixante-et-onze +soixante-et-un +soixante-huit +soixante-huitarde/F. +soixante-huitième/S. +soixantenaire/S. +soixante-neuf +soixante-neuvième/S. +soixante-quatorze +soixante-quatorzième/S. +soixante-quatre +soixante-quatrième/S. +soixante-quinze +soixante-quinzième/S. +soixante-seize +soixante-seizième/S. +soixante-sept +soixante-septième/S. +soixante-six +soixante-sixième/S. +soixante-treize +soixante-treizième/S. +soixante-trois +soixante-troisième/S. +soixantième/S. +soja/S. +sol +sol/S. +solage/S. +solaire/S. +solanacée/S. +solanée/S. +solanine/S. +solarigraphe/S. +solarisation/S. +solariser/a0p+ +solarium/S. +soldanelle/S. +soldate/F. +soldatesque/S. +soldatesque/S. +soldatesquement +solde/S. +solder/a0p+ +solderie/S. +soldeuse/F. +sole/S. +soléaire/S. +soléaire/S. +solécisme/S. +soleil/S. +soleilleuse/W. +solen/S. +solennelle/F. +solennellement +solenniser/a0p+ +solennité/S. +solénoglyphe/S. +solénoïdale/W. +solénoïde/S. +soleret/S. +solex +solfatare/S. +solfatarienne/F. +solfège/S. +solfier/a0p+ +solidage/S. +solidaire/S. +solidairement +solidariser/a0p+ +solidarisme/S. +solidariste/S. +solidarité/S. +solide/S. +solide/S. +solidement +solidienne/F. +solidification/S. +solidifier/a0p+ +solidité/S. +solière/F. +solière-moquettiste +solières-moquettistes +solier-moquettiste +soliers-moquettistes +soliflore/S. +solifluer/a0p. +solifluxion/S. +solifuge/S. +soliloque/S. +soliloquer/a0p. +soliloquie/S. +solin/S. +solipède/S. +solipsisme/S. +solipsiste/S. +soliste/S. +solitaire/S. +solitairement +soliton/S. +solitude/S. +solivage/S. +solive/S. +soliveau/X. +sollicitation/S. +solliciter/a0p+ +solliciteuse/F. +sollicitude/S. +solmisation/S. +solmiser/a0p+ +solo/I. +solstice/S. +solsticiale/W. +solubilisation/S. +solubiliser/a0p+ +solubilité/S. +soluble/S. +soluté/S. +solution/S. +solutionnaire/S. +solutionner/a0p+ +solutionnisme/S. +solutréenne/F. +solvabilisation/S. +solvabilité/S. +solvable/S. +solvant/S. +solvatation/S. +solvater/a0p+ +solveur/S. +solvolyse/S. +soma/S. +somalie/F. +somalienne/F. +soman/S. +somation/S. +somatique/S. +somatiquement +somatisation/S. +somatiser/a0p+ +somato-dendritique/S. +somatologie/S. +somatopleure/S. +somato-psychique/S. +somatostatine/S. +somatotopie/S. +somatotrope/S. +somatotrophine/S. +sombre/S. +sombrement +sombrer/a0p. +sombrero/S. +somesthésie/S. +somesthésique/S. +somite/S. +sommabilité/S. +sommable/S. +sommaire/S. +sommaire/S. +sommairement +sommants +sommation/S. +sommative/F. +sommatoire/S. +sommatrice/F. +somme/S. +sommeil/S. +sommeillante/F. +sommeiller/a0p. +sommeilleuse/W. +sommelière/F. +sommellerie/S. +sommer/a0p+ +sommet/S. +sommier/S. +sommière/S. +sommitale/W. +sommité/S. +somnambule/S. +somnambulesque/S. +somnambulique/S. +somnambuliquement +somnambulisme/S. +somnifère/S. +somnifère/S. +somnolence/S. +somnolente/F. +somnoler/a0p. +somnologie/S. +somnologue/S. +somoni/S. +somptuaire/S. +somptueuse/W. +somptueusement +somptuosité/S. +son +son/S. +sonagramme/S. +sonagraphe/S. +sonal/S. +sonar/S. +sonate/S. +sonatine/S. +sondage/S. +sondagière/F. +sonde/S. +sondée/F. +sonder/a0p+ +sondeuse/F. +sondologie/S. +songe/S. +songe-creux +songer/a0p. +songerie/S. +songeuse/F. +songeusement +sonie/S. +sonique/S. +sonnaille/S. +sonnailler/a0p. +sonnante/F. +sonner/a0p+ +sonnerie/S. +sonnet/S. +sonnette/S. +sonneuse/F. +sono/S. +sonochimie/S. +sonomètre/S. +sonore/S. +sonorement +sonorisation/S. +sonoriser/a0p+ +sonorité/S. +sonothèque/S. +sonotone/S. +sonotrode/S. +sonrer/a0p. +sophisme/S. +sophiste/S. +sophistication/S. +sophistique/S. +sophistique/S. +sophistiquer/a0p+ +sophora/S. +sophorose/S. +sophrologie/S. +sophrologique/S. +sophrologue/S. +sophronique/S. +sophroniste/S. +soporifique/S. +soporifique/S. +sopraniste/S. +soprano/I. +soprano/S. +soquet/S. +soqueter/d0p. +sorabe/S. +sorbe/S. +sorbet/S. +sorbetière/S. +sorbier/S. +sorbique/S. +sorbitol/S. +sorbonnarde/F. +sorbonne/S. +sorcellerie/S. +sorcière/F. +sordide/S. +sordidement +sordidité/S. +sore/S. +sorgho/S. +sorite/S. +sornette/S. +sororale/W. +sororalement +sororat/S. +sororité/S. +sorption/S. +sort/S. +sortable/S. +sortance/S. +sortante/F. +sorte/S. +sorteuse/F. +sortie/S. +sortie-de-bain +sorties-de-bain +sortilège/S. +sortir/fD +sortir/i5q+ +sosie/S. +sostenuto +sotch/S. +sotériologie/S. +sotériologique/S. +sotie/S. +sot-l'y-laisse +sotte/F. +sottement +sottie/S. +sottise/S. +sottisier/S. +sou/S. +souabe/S. +souahélie/F. +soubassement/S. +soubattre/uA +soubresaut/S. +soubresauter/a0p. +soubrette/S. +soubreveste/S. +souche/S. +souchet/S. +soucheter/d0p+ +souchette/S. +souchever/b0p+ +sou-chong +souci/S. +soucier/a0p+ +soucieuse/W. +soucieusement +soucoupe/S. +soudabilité/S. +soudable/S. +soudage/S. +soudain +soudaine/F. +soudainement +soudaineté/S. +soudan/S. +soudanaise/F. +soudanienne/F. +soudante/F. +soudard/S. +soude/S. +souder/a0p+ +soudeuse/F. +soudière/F. +soudoyer/a0p+ +soudure/S. +soue/S. +soufflage/S. +soufflante/F. +soufflard/S. +souffle/S. +soufflée/F. +soufflement/S. +souffler/a0p+ +soufflerie/S. +soufflet/S. +souffleter/d0p+ +souffletier/S. +souffleuse/F. +soufflure/S. +souffrance/S. +souffrante/F. +souffre-douleur +souffreteuse/W. +souffrir/iC +soufie/F. +soufisme/S. +soufrage/S. +soufre/S. +soufrer/a0p+ +soufreuse/F. +soufrière/S. +soufroir/S. +souhait/S. +souhaitable/S. +souhaiter/a0p+ +soui/S. +souillarde/F. +souille/S. +souiller/a0p+ +souillon/S. +souillure/S. +souimanga/S. +soui-manga/S. +souï-manga/S. +souk/S. +soul +soulagement/S. +soulager/a0p+ +soulane/S. +soûlante/F. +soûlarde/F. +soûlaude/F. +soûle/F. +soûler/a0p+ +soûlerie/S. +soulèvement/S. +soulever/b0p+ +soulier/S. +soulignage/S. +soulignement/S. +souligner/a0p+ +soûlographe/S. +soûlographie/S. +souloir +soûlonne/F. +soûlote/F. +soulte/S. +soumettre/vA +soumise/F. +soumission/S. +soumissionnaire/S. +soumissionner/a0p+ +soupape/S. +soupçon/S. +soupçonnable/S. +soupçonner/a0p+ +soupçonneuse/W. +soupçonneusement +soupe/S. +soupente/S. +souper/S. +souper/a0p. +soupeser/b0p+ +soupeuse/F. +soupière/F. +soupir/S. +soupirail/X. +soupirante/F. +soupirer/a0p+ +souple/S. +souplement +souplesse/S. +souquenille/S. +souquer/a0p+ +sourate/S. +sourçage/S. +source/S. +sourcer/a0p+ +sourceuse/F. +sourcière/F. +sourcil/S. +sourcilière/F. +sourciller/a0p. +sourcilleuse/W. +sourcing/S. +sourde/F. +sourdement +sourde-muette +sourdes-muettes +sourdine/S. +sourdiner/a0p+ +sourdingue/S. +sourd-muet +sourdre/xM +sourds-muets +souriante/F. +souriceau/X. +souricière/F. +sourire/S. +sourire/yW +souris +souris +sournoise/F. +sournoisement +sournoiserie/S. +sous +sous-acquéreur/S. +sous-activité/S. +sous-admissible/S. +sous-aide/S. +sous-alimentation/S. +sous-alimenter/a0p+ +sous-amendement/S. +sous-arbrisseau/X. +sous-arrondissement/S. +sous-bailleur/S. +sous-barbe/S. +sous-bas +sous-bibliothécaire/S. +sous-bois +sous-brigadier/S. +sous-calibrée/F. +sous-catégorie/S. +sous-cavage/S. +sous-chef/S. +sous-cheffe/S. +sous-chemise/S. +sous-classe/S. +sous-clavière/F. +sous-comite/S. +sous-commission/S. +sous-compte/S. +sous-comptoir/S. +sous-consommation/S. +sous-continent/S. +sous-couche/S. +souscription/S. +souscriptrice/F. +souscrire/y1 +sous-critique/S. +sous-culture/S. +sous-cutanée/F. +sous-développée/F. +sous-développement/S. +sous-diaconat/S. +sous-diacre/S. +sous-diagonale/S. +sous-directrice/F. +sous-division/S. +sous-dominante/F. +sous-durale/W. +sous-économe/S. +sous-effectif/S. +sous-embranchement/S. +sous-emploi/S. +sous-employer/a0p+ +sous-ensemble/S. +sous-entendre/tA +sous-entendu/S. +sous-épidermique/S. +sous-équipée/F. +sous-équipement/S. +sous-espèce/S. +sous-estimation/S. +sous-estimer/a0p+ +sous-étage/S. +sous-évaluation/S. +sous-évaluer/a0p+ +sous-exploitation/S. +sous-exploiter/a0p+ +sous-exposer/a0p+ +sous-exposition/S. +sous-expression/S. +sous-faîtage/S. +sous-faîte/S. +sous-famille/S. +sous-fifre/S. +sous-filiale/S. +sous-forme/S. +sous-frutescente/F. +sous-garde/S. +sous-genre/S. +sous-gorge +sous-gouverneur/S. +sousharmonique/S. +sous-homme/S. +sous-humanité/S. +sous-imposition/S. +sous-information/S. +sous-informer/a0p+ +sous-ingénieur/S. +sous-intendante/F. +sous-investir/f0p+ +sous-jacente/F. +sous-lieutenante/F. +souslik/S. +sous-liste/S. +sous-locataire/S. +sous-location/S. +sous-louer/a0p+ +sous-main +sous-maîtresse/F. +sous-marin/S. +sous-marine/F. +sous-marinier/S. +sous-maxillaire/S. +sous-merde/S. +sous-ministre/S. +sous-multiple/S. +sous-munition/S. +sous-nappe/S. +sous-normale/S. +sous-occipitale/W. +sous-œuvre/S. +sous-off/S. +sous-officière/F. +sous-orbitaire/S. +sous-ordre/S. +sous-palan +sous-palan +sous-paragraphe/S. +sous-payer/a0p+ +sous-peuplée/F. +sous-peuplement/S. +sous-pied/S. +sous-plat/S. +sous-poil/S. +sous-population/S. +sous-préfectorale/W. +sous-préfecture/S. +sous-préfète/F. +sous-production/S. +sous-produit/S. +sous-programme/S. +sous-prolétaire/S. +sous-prolétariat/S. +sous-pubienne/F. +sous-pull/S. +sous-qualification/S. +sous-qualifiée/F. +sous-race/S. +sous-règne/S. +sous-rémunérer/c0p+ +sous-répertoire/S. +sous-réseau/X. +sous-routine/S. +sous-scapulaire/S. +sous-secrétaire/S. +sous-secrétariat/S. +sous-section/S. +sous-seing +soussignée/F. +sous-sol/S. +sous-solage/S. +sous-station/S. +sous-système/S. +sous-tangente/S. +sous-tasse/S. +sous-tendre/tA +sous-tension/S. +sous-titrage/S. +sous-titre/S. +sous-titrer/a0p+ +soustracteur/S. +soustraction/S. +soustractive/F. +soustraire/wL +sous-traitance/S. +sous-traitante/F. +sous-traiter/a0p+ +sous-tribu/S. +sous-utiliser/a0p+ +sous-variété/S. +sous-ventrière/S. +sous-verge +sous-verre +sous-vêtement/S. +sous-virer/a0p. +sous-vireuse/F. +soutache/S. +soutacher/a0p+ +soutage/S. +soutane/S. +soutanelle/S. +soute/S. +soutenabilité/S. +soutenable/S. +soutenance/S. +soutènement/S. +souteneur/S. +soutenir/i0q+ +souterrain/S. +souterraine/F. +souterrainement +soutien/S. +soutien-gorge +soutiens-gorge +soutier/S. +soutif/S. +soutirage/S. +soutirer/a0p+ +soutireuse/F. +soûtra/S. +soutrage/S. +souvenance/S. +souvenir/S. +souvenir/i0q+ +souvent +souventefois +souveraine/F. +souverainement +souveraineté/S. +souverainisme/S. +souverainiste/S. +souvlaki/S. +soviet/S. +soviétique/S. +soviétisation/S. +soviétiser/a0p+ +soviétisme/S. +soviétologue/S. +sovkhoze/S. +soya/S. +soyer/S. +soyeuse/W. +spa/S. +spacieuse/W. +spacieusement +spadassin/S. +spadice/S. +spadille/S. +spaetzle/S. +spaghetti +spaghetti/S. +spagyrie/S. +spagyrique/S. +spagyriste/S. +spahi/S. +spalax +spallation/S. +spalter/S. +spam/S. +spammer/a0p+ +spammeuse/F. +spanglish/S. +spanioménorrhée/S. +sparadrap/S. +sparage/S. +spardeck/S. +sparganier/S. +sparganose/S. +spargoute/S. +sparring-partner/S. +spart/S. +spartakisme/S. +spartakiste/S. +sparte/S. +spartéine/S. +sparterie/S. +spartiate/S. +spasme/S. +spasmodicité/S. +spasmodique/S. +spasmodiquement +spasmolytique/S. +spasmophile/S. +spasmophilie/S. +spasticité/S. +spastique/S. +spatangue/S. +spath/S. +spathe/S. +spathifier/a0p+ +spathique/S. +spatiale/W. +spatialement +spatialisation/S. +spatialiser/a0p+ +spatialité/S. +spatiologie/S. +spationaute/S. +spationef/S. +spatioport/S. +spatio-temporelle/F. +spatule/S. +spatulée/F. +speakeasy/A. +speaker/S. +speakerine/S. +spéciale/W. +spécialement +spécialisation/S. +spécialiser/a0p+ +spécialiste/S. +spécialité/S. +spéciation/S. +spécieuse/W. +spécieusement +spécificateur/S. +spécificatif/S. +spécification/S. +spécificative/F. +spécificatrice/F. +spécificité/S. +spécifier/a0p+ +spécifique/S. +spécifiquement +spécimen/S. +spéciosité/S. +spécisme/S. +spéciste/S. +spectacle/S. +spectaculaire/S. +spectaculairement +spectacularisation/S. +spectatrice/F. +spectométrie/S. +spectrale/W. +spectralement +spectre/S. +spectrogramme/S. +spectrographe/S. +spectrographie/S. +spectrographique/S. +spectrohéliographe/S. +spectromètre/S. +spectrométrie/S. +spectrométrique/S. +spectrophotomètre/S. +spectrophotométrie/S. +spectroscope/S. +spectroscopie/S. +spectroscopique/S. +spéculaire/S. +spéculaire/S. +spéculation/S. +spéculative/F. +spéculativement +spéculatrice/F. +spéculaus +spéculer/a0p. +spéculoos +spéculum/S. +speech/A. +speed +speed/S. +speeder/a0p+ +speiss +spéléo/S. +spéléologie/S. +spéléologique/S. +spéléologue/S. +spéléonaute/S. +spencer/S. +spéos +spergulaire/S. +spergule/S. +spermaceti/S. +spermaphyte/S. +spermathèque/S. +spermatide/S. +spermatie/S. +spermatique/S. +spermatocyte/S. +spermatogenèse/S. +spermatogonie/S. +spermatophore/S. +spermatophyte/S. +spermatozoïde/S. +sperme/S. +spermicide/S. +spermiducte/S. +spermogonie/S. +spermogramme/S. +spermophile/S. +spessartine/S. +spessartite/S. +spet/S. +spetsnaz +sphacèle/S. +sphacéler/c0p+ +sphaigne/S. +sphalérite/S. +sphène/S. +sphénodon/S. +sphénoïdale/W. +sphénoïde/S. +sphénoïde/S. +sphère/S. +sphéricité/S. +sphérique/S. +sphérocytose/S. +sphéroïdale/W. +sphéroïde/S. +sphéroïdique/S. +sphéromètre/S. +sphérule/S. +sphex +sphincter/S. +sphinctérienne/F. +sphinge/S. +sphingolipide/S. +sphingosine/S. +sphinx +sphygmogramme/S. +sphygmographe/S. +sphygmomanomètre/S. +sphyrène/S. +spi/S. +spiciforme/S. +spicilège/S. +spicule/S. +spider/S. +spin/S. +spina-bifida +spinale/W. +spinalienne/F. +spina-ventosa +spinelle/S. +spineur/S. +spinnaker/S. +spinocellulaire/S. +spino-cellulaire/S. +spinorielle/F. +spinosaure/S. +spinozisme/S. +spinoziste/S. +spintronique/S. +spioncelle/S. +spiracle/S. +spirale/W. +spiralée/F. +spiralement +spiraler/a0p. +spiralisation/S. +spiraloïde/S. +spiramycine/S. +spirante/F. +spirantisation/S. +spiration/S. +spire/S. +spirée/S. +spirifer/S. +spirille/S. +spirillose/S. +spiritain/S. +spirite/S. +spiritisme/S. +spiritiste/S. +spiritual/S. +spiritualisation/S. +spiritualiser/a0p+ +spiritualisme/S. +spiritualiste/S. +spiritualité/S. +spirituelle/F. +spirituellement +spiritueuse/W. +spirlin/S. +spirochète/S. +spirochétose/S. +spirographe/S. +spiroïdale/W. +spiroïde/S. +spiromètre/S. +spirométrie/S. +spirométrique/S. +spironolactone/S. +spirorbe/S. +spirule/S. +spiruline/S. +spitante/F. +spitter/a0p+ +spitz +splanchnique/S. +splanchnologie/S. +splanchnopleure/S. +spleen/S. +spleenétique/S. +splendeur/S. +splendide/S. +splendidement +splénectomie/S. +splénétique/S. +splénique/S. +splénite/S. +splénomégalie/S. +spline/S. +splitter/a0p+ +spodumène/S. +spoiler/S. +spoliation/S. +spoliatrice/F. +spolier/a0p+ +spondaïque/S. +spondée/S. +spondias +spondylarthrite/S. +spondylarthrose/S. +spondyle/S. +spondylite/S. +spondylolisthésis +spondylose/S. +spongiaire/S. +spongiaire/S. +spongiculture/S. +spongieuse/W. +spongiforme/S. +spongille/S. +spongiosité/S. +sponsor/S. +sponsoring/S. +sponsorisation/S. +sponsoriser/a0p+ +spontanée/F. +spontanéisme/S. +spontanéiste/S. +spontanéité/S. +spontanément +spontanisme/S. +sporadicité/S. +sporadique/S. +sporadiquement +sporange/S. +spore/S. +sporicide/S. +sporifère/S. +sporogone/S. +sporophore/S. +sporophyte/S. +sporotriche/S. +sporotrichose/S. +sporozoaire/S. +sporozoïte/S. +sport/S. +sportive/F. +sportivement +sportivité/S. +sportsman/A. +sportswoman/A. +sportule/S. +sporulation/S. +sporulée/F. +sporuler/a0p. +spot/S. +spotmètre/S. +spoutnik/S. +sprat/S. +spray/S. +sprechgesang/S. +springbok/S. +sprint/S. +sprinter/S. +sprinter/a0p. +sprinteuse/F. +sprue/S. +spumescente/F. +spumeuse/W. +spumosité/S. +squale/S. +squalène/S. +squalide/S. +squamate/S. +squame/S. +squameuse/W. +squamifère/S. +squamiforme/S. +squamule/S. +square/S. +squash/S. +squat/S. +squatine/S. +squattage/S. +squatter/S. +squatter/a0p+ +squattériser/a0p+ +squatteuse/F. +squaw/S. +squeezer/a0p+ +squelette/S. +squelettique/S. +squille/S. +squirrhe/S. +squirrheuse/W. +sr/U.||-- +sri-lankaise/F. +st/||-- +stabile/S. +stabilimètre/S. +stabilisant/S. +stabilisante/F. +stabilisation/S. +stabilisatrice/F. +stabiliser/a0p+ +stabilité/S. +stable/S. +stablement +stabulation/S. +staccato +staccato +staccato/S. +stade/S. +stadhouder/S. +stadia/S. +stadiaire/S. +stadière/F. +staff/S. +staffer/a0p+ +staffeuse/F. +stage/S. +stagflation/S. +stagiaire/S. +stagnance/S. +stagnante/F. +stagnation/S. +stagnationniste/S. +stagner/a0p. +stakhanovisme/S. +stakhanoviste/S. +stakning/S. +stalactite/S. +stalag/S. +stalagmite/S. +stalagmitique/S. +stalagmomètre/S. +stalagmométrie/S. +stalinienne/F. +staliniser/a0p+ +stalinisme/S. +stalle/S. +staminale/W. +staminée/F. +staminifère/S. +staminode/S. +stance/S. +stand/S. +standard +standard/S. +standard/S. +standard/S. +standardisation/S. +standardiser/a0p+ +standardiste/S. +stand-by +standing/S. +stand-up +stanneuse/W. +stannique/S. +staphisaigre/S. +staphylier/S. +staphylin/S. +staphyline/F. +staphylococcie/S. +staphylococcique/S. +staphylocoque/S. +staphylome/S. +star/S. +starets +starie/S. +stariets +starification/S. +starifier/a0p+ +starisation/S. +stariser/a0p+ +starlette/S. +staroste/S. +star-system/S. +starter/S. +starting-block/S. +starting-gate/S. +startup/S. +start-up/S. +stase/S. +stater/a0p+ +statère/S. +stathouder/S. +stathoudérat/S. +statice/S. +statif/S. +statine/S. +station/S. +stationnaire/S. +stationnale/S. +stationnarité/S. +stationnée/F. +stationnement/S. +stationner/a0p. +station-service +stations-service +statique/S. +statique/S. +statiquement +statisme/S. +statisticienne/F. +statistique/S. +statistique/S. +statistiquement +stative/F. +statocyste/S. +statokinésimètre/S. +statolithe/S. +stator/S. +statoréacteur/S. +statorique/S. +statthalter/S. +statu +statuaire/S. +statue/S. +statuer/a0p+ +statuette/S. +statufier/a0p+ +stature/S. +staturo-pondérale/W. +statut/S. +statutaire/S. +statutairement +staurolite/S. +staurotide/S. +stawug/S. +stayer/S. +steak/S. +steamer/S. +stéarate/S. +stéarine/S. +stéarinerie/S. +stéarinier/S. +stéarique/S. +stéatite/S. +stéatome/S. +stéatopyge/S. +stéatorrhée/S. +stéatose/S. +steeple/S. +steeple-chase/S. +stéganographie/S. +stéganographique/S. +stéganopode/S. +stégocéphale/S. +stégomyie/S. +stégosaure/S. +steinbock/S. +stèle/S. +stellage/S. +stellaire/S. +stellaire/S. +stelléride/S. +stellionat/S. +stellionataire/S. +stem/S. +stemm/S. +stemmate/S. +stencil/S. +stenciliste/S. +stendhalienne/F. +sténo/S. +sténodactylo/S. +sténodactylographe/S. +sténodactylographie/S. +sténogramme/S. +sténographe/S. +sténographie/S. +sténographier/a0p+ +sténographique/S. +sténographiquement +sténopé/S. +sténosage/S. +sténose/S. +sténotherme/S. +sténothermie/S. +sténotype/S. +sténotyper/a0p+ +sténotypie/S. +sténotypiste/S. +stentor/S. +step/S. +stéphanoise/F. +stéphanophore/S. +steppage/S. +steppe/S. +stepper/S. +steppique/S. +stéradian/Um +stercoraire/S. +stercoraire/S. +stercorale/W. +sterculiacée/S. +stère/S. +stéréo/S. +stéréobate/S. +stéréochimie/S. +stéréochimique/S. +stéréochromie/S. +stéréocomparateur/S. +stéréoduc/S. +stéréogénique/S. +stéréognosie/S. +stéréogramme/S. +stéréographie/S. +stéréographique/S. +stéréo-isomère/S. +stéréoisomère/S. +stéréo-isomère/S. +stéréo-isomérie/S. +stéréo-isomérique/S. +stéréolithographie/S. +stéréométrie/S. +stéréométrique/S. +stéréophonie/S. +stéréophonique/S. +stéréophotographie/S. +stéréoradiographie/S. +stéréorégularité/S. +stéréorégulière/F. +stéréorépétition/S. +stéréoscope/S. +stéréoscopie/S. +stéréoscopique/S. +stéréosélective/F. +stéréosélectivité/S. +stéréospécificité/S. +stéréospécifique/S. +stéréospondyle/S. +stéréotaxie/S. +stéréotaxique/S. +stéréotomie/S. +stéréotomique/S. +stéréotype/S. +stéréotyper/a0p+ +stéréotypie/S. +stérer/c0p+ +stéride/S. +stérile/S. +stérilement +stérilet/S. +stérilisante/F. +stérilisateur/S. +stérilisation/S. +stérilisatrice/F. +stériliser/a0p+ +stérilité/S. +stérique/S. +sterlet/S. +sterling +sternale/W. +sterne/S. +sternite/S. +sterno-cléido-mastoïdienne/F. +sternotomie/S. +sternum/S. +sternutation/S. +sternutatoire/S. +stéroïde/S. +stéroïde/S. +stéroïdienne/F. +stérol/S. +stérolique/S. +stertor/S. +stertoreuse/W. +stéthoscope/S. +stévia/S. +steward/S. +sthène/S. +sthénique/S. +stibiée/F. +stibine/S. +stichomythie/S. +stick/S. +sticker/S. +stigma/S. +stigmate/S. +stigmatique/S. +stigmatisante/F. +stigmatisation/S. +stigmatiser/a0p+ +stigmatisme/S. +stilb/S. +stillation/S. +stillatoire/S. +stilligoutte/S. +stimugène/S. +stimulant/S. +stimulante/F. +stimulation/S. +stimulatrice/F. +stimuler/a0p+ +stimuline/S. +stimulus/I. +stipe/S. +stipendiaire/S. +stipendier/a0p+ +stipitée/F. +stipulaire/S. +stipulation/S. +stipule/S. +stipuler/a0p+ +stique/S. +stochastique/S. +stochocratie/S. +stock/S. +stockable/S. +stockage/S. +stock-car/S. +stocker/a0p+ +stockeuse/F. +stockfisch/S. +stockiste/S. +stock-option/S. +stœchiométrie/S. +stœchiométrique/S. +stoïcienne/F. +stoïcisme/S. +stoïque/S. +stoïquement +stoker/S. +stokes +stolon/S. +stoloniale/W. +stolonifère/S. +stolzite/S. +stomacale/W. +stomachique/S. +stomate/S. +stomatique/S. +stomatite/S. +stomatologie/S. +stomatologique/S. +stomatologiste/S. +stomatologue/S. +stomatoplastie/S. +stomatorragie/S. +stomatoscope/S. +stomie/S. +stomisée/F. +stomoxe/S. +stop +stop/S. +stoppage/S. +stopper/a0p+ +stoppeuse/F. +storax +store/S. +storiste/S. +story-board/S. +storytelling/S. +stot/S. +stoûpa/S. +stout/S. +strabique/S. +strabisme/S. +stradiot/S. +stradivarius +stramoine/S. +stramonium/S. +strangulation/S. +stranguler/a0p+ +strapontin/S. +strasbourgeoise/F. +strass +strasse/S. +stratagème/S. +strate/S. +stratège/S. +stratégie/S. +stratégique/S. +stratégiquement +stratégiste/S. +stratification/S. +stratificationnelle/F. +stratifier/a0p+ +stratiforme/S. +stratigraphie/S. +stratigraphique/S. +stratigraphiquement +stratiome/S. +stratocratie/S. +stratocumulus +strato-cumulus +stratopause/S. +stratosphère/S. +stratosphérique/S. +stratotype/S. +stratovision/S. +stratovolcan/S. +strato-volcan/S. +stratum/S. +stratus +streaming/S. +street/S. +strepsiptère/S. +streptobacille/S. +streptococcie/S. +streptococcique/S. +streptocoque/S. +streptomycète/S. +streptomycine/S. +stress +stressante/F. +stresser/a0p+ +stretch/S. +stretching/S. +strette/S. +striage/S. +striation/S. +striatum/S. +stricte/F. +strictement +striction/S. +stricto +stridence/S. +stridente/F. +stridor/S. +stridulante/F. +stridulation/S. +stridulatoire/S. +stridulement/S. +striduler/a0p+ +striduleuse/W. +strie/S. +strier/a0p+ +strige/S. +strigidé/S. +strigiforme/S. +strigile/S. +strike/S. +string/S. +strioscopie/S. +strioscopique/S. +stripage/S. +stripper/a0p+ +stripping/S. +strip-poker/S. +strip-tease/S. +strip-teaseuse/F. +striquer/a0p+ +striure/S. +strix +strobile/S. +strobilurine/S. +strobophotographie/S. +stroborama/S. +stroboscope/S. +stroboscopie/S. +stroboscopique/S. +stroma/S. +stromatolite/S. +stromatolithe/S. +strombe/S. +strombolienne/F. +strongle/S. +strongyle/S. +strongylose/S. +strontiane/S. +strontianite/S. +strontium/S. +strophante/S. +strophantine/S. +strophantus +strophe/S. +structurable/S. +structurale/W. +structuralement +structuralisme/S. +structuraliste/S. +structurante/F. +structuration/S. +structure/S. +structurelle/F. +structurellement +structurer/a0p+ +structurologie/S. +strudel/S. +strume/S. +struthioniforme/S. +strychnine/S. +strychnos +stryge/S. +stuc/S. +stucage/S. +stucateur/S. +stud-book/S. +studette/S. +studieuse/W. +studieusement +studio/S. +stupa/S. +stûpa/S. +stupéfaction/S. +stupéfaire/wG +stupéfiant/S. +stupéfiante/F. +stupéfier/a0p+ +stupeur/S. +stupide/S. +stupidement +stupidité/S. +stuporeuse/W. +stupre/S. +stups +stuquer/a0p+ +style/S. +styler/a0p+ +stylet/S. +stylisation/S. +styliser/a0p+ +stylisme/S. +styliste/S. +stylisticienne/F. +stylistique/S. +stylistique/S. +stylistiquement +stylite/S. +stylo/S. +stylobate/S. +stylographe/S. +stylographique/S. +styloïde/S. +stylomine/S. +stylopode/S. +stypticité/S. +styptique/S. +styrax +styrène/S. +styrolène/S. +styromousse/S. +su +suage/S. +suaire/S. +suante/F. +suave/S. +suavement +suavité/S. +subadulte/S. +subaérienne/F. +subaiguë/F. +subalpine/F. +subalterne/S. +subantarctique/S. +subaquatique/S. +subarctique/S. +subatomique/S. +subcarence/S. +subcarpatique/S. +subcellulaire/S. +subclinique/S. +subconsciemment +subconscience/S. +subconscient/S. +subconsciente/F. +subculture/S. +subdélégation/S. +subdéléguer/c0p+ +subdésertique/S. +subdiviser/a0p+ +subdivision/S. +subdivisionnaire/S. +subduction/S. +subduire/yK +subéquatoriale/W. +suber/S. +subéreuse/W. +subérine/S. +subexponentielle/F. +subfébrile/S. +subintrante/F. +subir/f0p+ +subite/F. +subitement +subito +subjacente/F. +subjectile/S. +subjectivation/S. +subjective/F. +subjectivement +subjectiver/a0p+ +subjectivisation/S. +subjectiviser/a0p+ +subjectivisme/S. +subjectiviste/S. +subjectivité/S. +subjonctif/S. +subjonctive/F. +subjuguante/F. +subjuguer/a0p+ +sublétale/W. +sublimable/S. +sublimation/S. +sublimatoire/S. +sublime/S. +sublime/S. +sublimement +sublimer/a0p+ +subliminaire/S. +subliminale/W. +subliminalement +sublimité/S. +sublinguale/W. +subluminique/S. +sublunaire/S. +subluxation/S. +submergement/S. +submerger/a0p+ +submersible/S. +submersible/S. +submersion/S. +submillimétrique/S. +subnarcose/S. +subnormale/W. +subnucléaire/S. +subodorer/a0p+ +suboptimale/W. +suboptimalité/S. +suborbitale/W. +subordination/S. +subordonnante/F. +subordonnée/F. +subordonner/a0p+ +subornation/S. +suborner/a0p+ +suborneuse/F. +subprime/S. +subrécargue/S. +subreptice/S. +subrepticement +subreption/S. +subrogateur/S. +subrogation/S. +subrogative/F. +subrogatoire/S. +subrogée/F. +subroger/a0p+ +subsaharienne/F. +sub-saharienne/F. +subséquemment +subséquente/F. +subside/S. +subsidence/S. +subsidiaire/S. +subsidiairement +subsidiante/F. +subsidiarité/S. +subsidiation/S. +subsidier/a0p+ +subsistance/S. +subsistante/F. +subsister/a0p. +subsomption/S. +subsonique/S. +subspontanée/F. +substance/S. +substantialisme/S. +substantialiste/S. +substantialité/S. +substantielle/F. +substantiellement +substantif/S. +substantifique/S. +substantivation/S. +substantive/F. +substantivement +substantiver/a0p+ +substituabilité/S. +substituable/S. +substituant/S. +substituer/a0p+ +substitut/S. +substitution/S. +substitutive/F. +substrat/S. +substratum/S. +substruction/S. +substructure/S. +subsumer/a0p+ +subsurface/S. +subterfuge/S. +subtile/F. +subtilement +subtilisation/S. +subtiliser/a0p+ +subtilité/S. +subtropicale/W. +subulée/F. +suburbaine/F. +suburbicaire/S. +subvenir/i0q. +subvention/S. +subventionnable/S. +subventionnelle/F. +subventionnement/S. +subventionner/a0p+ +subventionneuse/F. +subversion/S. +subversive/F. +subversivement +subvertir/f0p+ +suc/S. +suçage/S. +succédanée/F. +succéder/c0p. +succenturiée/F. +succès +successeur/S. +successibilité/S. +successible/S. +succession/S. +successive/F. +successivement +successivité/S. +successorale/W. +succin/S. +succinate/S. +succincte/F. +succinctement +succinique/S. +succion/S. +succombante/F. +succomber/a0p. +succube/S. +succulence/S. +succulente/F. +succursale/S. +succursalisme/S. +succursaliste/S. +succussion/S. +sucement/S. +sucer/a0p+ +sucette/S. +suceuse/F. +suçoir/S. +suçon/S. +suçotement/S. +suçoter/a0p+ +sucrage/S. +sucrante/F. +sucrase/S. +sucrate/S. +sucre/S. +sucrer/a0p+ +sucrerie/S. +sucrette/S. +sucrière/F. +sucrin/S. +sud +sud-africaine/F. +sud-américaine/F. +sudarabique/S. +sudation/S. +sudatoire/S. +sud-coréenne/F. +sud-est +sudète/S. +sudiste/S. +sudoku/S. +sudorale/W. +sudorifère/S. +sudorifique/S. +sudoripare/S. +sud-ouest +sud-vietnamienne/F. +suède/S. +suédée/F. +suédine/S. +suédoise/F. +suée/S. +suer/a0p+ +suette/S. +sueur/S. +suffète/S. +suffire/yV +suffisamment +suffisance/S. +suffisante/F. +suffixale/W. +suffixation/S. +suffixe/S. +suffixer/a0p+ +suffocante/F. +suffocation/S. +suffoquer/a0p+ +suffragante/F. +suffrage/S. +suffragette/S. +suffusion/S. +suggérer/c0p+ +suggestibilité/S. +suggestible/S. +suggestion/S. +suggestionner/a0p+ +suggestive/F. +suggestivement +suggestivité/S. +sui +suicidaire/S. +suicide/S. +suicidée/F. +suicider/a0p+ +suidé/S. +suie/S. +suif/S. +suifer/a0p+ +suiffer/a0p+ +suiffeuse/W. +suint/S. +suintante/F. +suintement/S. +suinter/a0p+ +suintine/S. +suisse/S. +suissesse/S. +suite/S. +suitée/S. +suivant +suivante/F. +suiveuse/F. +suivi/S. +suivisme/S. +suiviste/S. +suivre/xQ +sujétion/S. +sujette/F. +sukkeler/d0p. +sulcature/S. +sulciforme/S. +sulfadiazine/S. +sulfamide/S. +sulfanilamide/S. +sulfanilique/S. +sulfatage/S. +sulfatation/S. +sulfate/S. +sulfater/a0p+ +sulfateuse/F. +sulfhémoglobine/S. +sulfhydrate/S. +sulfhydrique/S. +sulfhydrisme/S. +sulfinisation/S. +sulfitage/S. +sulfite/S. +sulfiter/a0p+ +sulfocarbonate/S. +sulfocarbonique/S. +sulfonation/S. +sulfone/S. +sulfoner/a0p+ +sulfonique/S. +sulfonitrique/S. +sulfonylurée/S. +sulfosel/S. +sulfovinique/S. +sulfoxyde/S. +sulfurage/S. +sulfuration/S. +sulfure/S. +sulfurer/a0p+ +sulfureuse/W. +sulfurique/S. +sulfurisée/F. +sulky/A. +sulpicienne/F. +sultanat/S. +sultane/F. +sumac/S. +sumérienne/F. +summum/S. +sumo/S. +sumotori/S. +sunlight/S. +sunna/S. +sunnisme/S. +sunnite/S. +super +super/S. +super/S. +superacide/S. +superalliage/S. +superamas +superattractive/F. +superattractivité/S. +superbe/S. +superbement +superbénéfice/S. +superbombe/S. +supercalculateur/S. +supercarburant/S. +supercarré/S. +supercavitante/F. +supercentenaire/S. +superchampionne/F. +supercherie/S. +superciment/S. +superclasse/S. +super-classe/S. +superconnexion/S. +supercontinent/S. +supercorde/S. +supercritique/S. +superdécrochage/S. +superdensité/S. +superdividende/S. +supère/S. +super-embranchement/S. +superessif/S. +supérette/S. +superfamille/S. +super-famille/S. +superfécondation/S. +superfétation/S. +superfétatoire/S. +superficialité/S. +superficie/S. +superficielle/F. +superficiellement +superfine/F. +superfinir/f0p+ +superfinition/S. +superflue/F. +superfluide/S. +superfluide/S. +superfluidité/S. +superfluité/S. +superforme/S. +superforteresse/S. +superfractionnement/S. +super-géant/S. +supergéante/S. +supergrand/S. +supergravité/S. +super-héros +superhétérodyne/S. +super-huit +super-huit +supérieure/F. +supérieurement +superintendante/F. +supériorat/S. +supériorité/S. +superlatif/S. +superlative/F. +superlativement +super-légère/F. +super-lourde/F. +superluminique/S. +supermalloy/S. +superman/A. +supermarché/S. +supermassive/F. +supermolécule/S. +supernova +supernova/S. +supernovæ +superordinateur/S. +superordonnée/F. +superordre/S. +super-ordre/S. +superovariée/F. +superovulation/S. +superoxyde/S. +superparamagnétisme/S. +superpétrolier/S. +superphosphate/S. +superplasticité/S. +superplastique/S. +superpolyamide/S. +superposable/S. +superposer/a0p+ +superposition/S. +superprédatrice/F. +superpréfet/S. +superprivilège/S. +superproduction/S. +superprofit/S. +superpuissance/S. +superpurgation/S. +superréaction/S. +superscalaire/S. +supersonique/S. +superstar/S. +superstatoréacteur/S. +superstitieuse/W. +superstitieusement +superstition/S. +superstrat/S. +superstructure/S. +supersymétrie/S. +supersymétrique/S. +supersynthèse/S. +supertanker/S. +supervariété/S. +superviser/a0p+ +superviseure/S. +superviseuse/F. +supervision/S. +super-welter/S. +superwoman/A. +supin/S. +supinateur/S. +supination/S. +suppl +supplantation/S. +supplanter/a0p+ +suppléance/S. +suppléante/F. +suppléer/a0p+ +supplément/S. +supplémentaire/S. +supplémentairement +supplémentation/S. +supplémenter/a0p+ +supplétisme/S. +supplétive/F. +supplétoire/S. +suppliante/F. +supplication/S. +supplice/S. +suppliciante/F. +suppliciée/F. +supplicier/a0p+ +supplier/a0p+ +supplique/S. +support/S. +supportable/S. +supporter/S. +supporter/a0p+ +supportrice/F. +supposable/S. +supposément +supposer/a0p+ +supposition/S. +suppositoire/S. +suppôt/S. +suppresseur/S. +suppresseuse/F. +suppression/S. +suppressive/F. +supprimable/S. +supprimer/a0p+ +suppurante/F. +suppuration/S. +suppurative/F. +suppurée/F. +suppurer/a0p. +supputation/S. +supputative/F. +supputer/a0p+ +supra +supraconduction/S. +supraconductivité/S. +supraconductrice/F. +suprahumaine/F. +supra-humaine/F. +supralapsaire/S. +supraliminaire/S. +supraluminique/S. +supralunaire/S. +supramoléculaire/S. +supramolécule/S. +supranationale/W. +supranationalisation/S. +supranationalisme/S. +supranationaliste/S. +supranationalité/S. +supranormale/W. +suprasegmentale/W. +suprasensible/S. +suprastructure/S. +supratemporale/F. +supraterrestre/S. +supraventriculaire/S. +suprémacisme/S. +suprémaciste/S. +suprématie/S. +suprématisme/S. +suprématiste/S. +suprême/S. +suprêmement +sur +surabondamment +surabondance/S. +surabondante/F. +surabonder/a0p. +suraccélération/S. +suraccumulation/S. +suractive/F. +suractivée/F. +suractiver/a0p+ +suractivité/S. +surah/S. +suraiguë/F. +surajouter/a0p+ +surale/W. +suralimentation/S. +suralimenter/a0p+ +suraller/a0p. +suramplificateur/S. +surannée/F. +surarbitre/S. +surarmement/S. +surarmer/a0p+ +surate/S. +surbaissement/S. +surbaisser/a0p+ +surbookée/F. +surbooking/S. +surboucher/a0p+ +surboum/S. +surbrillance/S. +surbroder/a0p+ +surcadencement/S. +surcadencer/a0p+ +surcapacité/S. +surcapitalisante/F. +surcapitalisation/S. +surcharge/S. +surcharger/a0p+ +surchauffage/S. +surchauffe/S. +surchauffer/a0p+ +surchauffeur/S. +surchemise/S. +surchoix +surclassement/S. +surclasser/a0p+ +surcoller/a0p. +surcompensation/S. +surcompensatoire/S. +surcompensatrice/F. +surcompenser/a0p+ +surcomposée/F. +surcompression/S. +surcomprimer/a0p+ +surconscience/S. +surconsommation/S. +surconsommer/a0p+ +surcontrer/a0p+ +surcostale/W. +surcot/S. +surcoter/a0p+ +surcouche/S. +surcoupe/S. +surcouper/a0p. +surcouple/S. +surcoût/S. +surcreusement/S. +surcreuser/a0p+ +surcritique/S. +surcroît/S. +surcuisson/S. +surdensité/S. +surdent/S. +surdéterminante/F. +surdétermination/S. +surdéterminée/F. +surdéveloppement/S. +surdiagnostic/S. +surdiagonale/S. +surdimensionnement/S. +surdimensionner/a0p+ +surdi-mutité/S. +surdiplômée/F. +surdité/S. +surdorer/a0p+ +surdos +surdosage/S. +surdose/S. +surdoser/a0p+ +surdouée/F. +sure/F. +sûre/F. +sureau/X. +surédifier/a0p+ +sureffectif/S. +surélévation/S. +surélever/b0p+ +surelle/S. +suremballage/S. +sûrement +suréminente/F. +surémission/S. +suremploi/S. +surenchère/S. +surenchérir/f0p. +surenchérissement/S. +surenchérisseuse/F. +surencombrée/F. +surencombrement/S. +surendettement/S. +surendetter/a0p+ +surentraînement/S. +surentraîner/a0p+ +surépaisseur/S. +suréquipement/S. +suréquiper/a0p+ +surérogation/S. +surérogatoire/S. +surestarie/S. +surestimation/S. +surestimer/a0p+ +sûreté/S. +surette/F. +surévaluation/S. +surévaluer/a0p+ +surexcitable/S. +surexcitante/F. +surexcitation/S. +surexciter/a0p+ +surexploitation/S. +surexploiter/a0p+ +surexposer/a0p+ +surexposition/S. +surexpression/S. +surexprimer/a0p+ +surexprimer/a0p+ +surf/S. +surfaçage/S. +surface/S. +surfacer/a0p+ +surfaceuse/F. +surfacique/S. +surfactant/S. +surfacturation/S. +surfacturer/a0p+ +surfaire/wD +surfait/S. +surfaix +surfer/S. +surfer/a0p. +surfeuse/F. +surfil/S. +surfilage/S. +surfiler/a0p+ +surfine/F. +surfleurir +surfondue/F. +surfrapper/a0p+ +surfréquentation/S. +surfusion/S. +surgélateur/S. +surgélation/S. +surgelé/S. +surgeler/b0p+ +surgénération/S. +surgénératrice/F. +surgeon/S. +surgeonner/a0p. +surgie/F. +surgir/f0p. +surgissement/S. +surglacer/a0p+ +surgreffer/a0p+ +surharmonique/S. +surhaussement/S. +surhausser/a0p+ +surhomme/S. +surhumaine/F. +surhumainement +surhumanité/S. +surhydratation/S. +suricate/S. +surie/F. +surikate/S. +surimi/S. +surimposer/a0p+ +surimposition/S. +surimpression/S. +surimpressionner/a0p+ +surin/S. +surinamaise/F. +surincident/S. +suriner/a0p+ +surinfection/S. +surinformation/S. +surinformée/F. +surintendance/S. +surintendante/F. +surintensité/S. +surinterprétation/S. +surinterpréter/c0p+ +surinterpréter/c0p+ +surinvestir/f0p+ +surinvestissement/S. +surir/f0p. +surirradiée/F. +surjacente/F. +surjaler/a0p+ +surjection/S. +surjective/F. +surjectivement +surjectivité/S. +surjet/S. +surjeter/d0p+ +surjeteuse/S. +surjeu/X. +surjouer/a0p+ +surjupe/S. +surlargeur/S. +sur-le-champ +surlendemain/S. +surlier/a0p+ +surlignage/S. +surlignante/F. +surlignement/S. +surligner/a0p+ +surligneur/S. +surliure/S. +surlonge/S. +surlouer/a0p+ +surloyer/S. +surmédiatisation/S. +surmédiatiser/a0p+ +surmédicalisation/S. +surmédicaliser/a0p+ +surmenage/S. +surmener/b0p+ +sur-mesure +surmodulation/S. +surmoi +sur-moi +surmoïque/S. +surmontable/S. +surmonter/a0p+ +surmontoir/S. +surmortalité/S. +surmoulage/S. +surmouler/a0p+ +surmulet/S. +surmulot/S. +surmultiplication/S. +surmultipliée/F. +surnageante/F. +surnager/a0p. +surnatalité/S. +surnaturalisme/S. +surnaturaliste/S. +surnaturalité/S. +surnature/S. +surnaturelle/F. +surnaturellement +surnom/S. +surnombre/S. +surnommer/a0p+ +surnoter/a0p+ +surnuméraire/S. +surnumérariat/S. +suroffre/S. +suroît/S. +suros +suroxydation/S. +suroxyder/a0p+ +suroxygénée/F. +surpassable/S. +surpassement/S. +surpasser/a0p+ +surpâturage/S. +surpaye/S. +surpayer/a0p+ +surpêche/S. +surpeuplée/F. +surpeuplement/S. +surpiquer/a0p+ +surpiqûre/S. +surplace/S. +surplis +surplomb/S. +surplombante/F. +surplombement/S. +surplomber/a0p+ +surplus +surpoids +surpopulation/S. +surprenamment +surprenante/F. +surprendre/tF +surprescription/S. +surpresseur/S. +surpression/S. +surprime/S. +surprise/S. +surprise-partie +surprises-parties +surproduction/S. +surproductive/F. +surproductivité/S. +surproductrice/F. +surproduire/yL +surprofit/S. +surprotection/S. +surprotectrice/F. +surprotéger/c0p+ +surpuissance/S. +surpuissante/F. +surqualification/S. +surqualifiée/F. +surqualité/S. +surréaction/S. +surréagir/f0p. +surréalisme/S. +surréaliste/S. +surréalité/S. +surrection/S. +surréelle/F. +surrégénérateur/S. +surrégime/S. +surrénale/W. +surrénalienne/F. +surreprésentation/S. +surreprésentée/F. +surréservation/S. +surréservée/F. +surround/S. +sursalaire/S. +sursalée/F. +sursaturante/F. +sursaturation/S. +sursaturer/a0p+ +sursaut/S. +sursauter/a0p. +surséance/S. +sursemer/b0p+ +sursemis +surseoir/pT +sursis +sursitaire/S. +sursollicitation/S. +sursolliciter/a0p+ +sursoufflage/S. +sursouffler/a0p+ +surstock/S. +surstockage/S. +surstocker/a0p+ +surtailler/a0p+ +surtaux +surtaxation/S. +surtaxe/S. +surtaxer/a0p+ +surtempérature/S. +surtendre +surtension/S. +surtitrage/S. +surtitre/S. +surtitrer/a0p+ +surtonte/S. +surtout +surtransposition/S. +surtravail/X. +surutilisation/S. +survaleur/S. +survalorisation/S. +survaloriser/a0p+ +surveillance/S. +surveillante/F. +surveiller/a0p+ +survenance/S. +survendre/tA +survenir/i0q+ +survente/S. +survenue/S. +survêtement/S. +survêtir/iG +survie/S. +survirage/S. +survirante/F. +survirer/a0p+ +survireuse/F. +survitaminée/F. +survitesse/S. +survitrage/S. +survivalisme/S. +survivaliste/S. +survivance/S. +survivante/F. +survive/F. +survivre/xSq. +survol/S. +survolante/F. +survoler/a0p+ +survoltage/S. +survolter/a0p+ +survolteur/S. +survolteur-dévolteur +survolteurs-dévolteurs +sus +susceptance/S. +susceptibilité/S. +susceptible/S. +suscitation/S. +susciter/a0p+ +suscription/S. +suscrire/y1 +susdénommée/F. +susdite/F. +sus-dominante/S. +sus-hépatique/S. +sushi/S. +sus-jacente/F. +sus-maxillaire/S. +susmentionnée/F. +susnommée/F. +suspecte/F. +suspecter/a0p+ +suspendre/tA +suspens +suspense/S. +suspenseur/S. +suspension/S. +suspensive/F. +suspensoïde/S. +suspensoir/S. +suspente/S. +suspicieuse/W. +suspicieusement +suspicion/S. +sustentation/S. +sustentatrice/F. +sustenter/a0p+ +sus-tonique/S. +susucre/S. +susurrante/F. +susurration/S. +susurrement/S. +susurrer/a0p+ +susvisée/F. +sutra/S. +sûtra/S. +suturale/W. +suture/S. +suturer/a0p+ +suzeraine/F. +suzeraineté/S. +svastika/S. +svelte/S. +sveltesse/S. +swahilie/F. +swap/S. +swastika/S. +sweater/S. +sweating-system/S. +sweat-shirt/S. +sweepstake/S. +swing/S. +swinguer/a0p. +sybarite/S. +sybaritique/S. +sybaritisme/S. +sycomore/S. +sycone/S. +sycophante/S. +sycosis +syénite/S. +syllabaire/S. +syllabation/S. +syllabe/S. +syllaber/a0p+ +syllabi +syllabique/S. +syllabisme/S. +syllabus +syllepse/S. +sylleptique/S. +syllogisme/S. +syllogistique/S. +syllogomanie/S. +sylphe/S. +sylphide/S. +sylvain/S. +sylvaner/S. +sylvanite/S. +sylve/S. +sylvestre/S. +sylvicole/S. +sylvicultrice/F. +sylviculture/S. +sylvienne/F. +sylvine/S. +sylvinite/S. +sylvite/S. +sylvopastoralisme/S. +symbiose/S. +symbiote/S. +symbiotique/S. +symbole/S. +symbolique/S. +symboliquement +symbolisation/S. +symboliser/a0p+ +symbolisme/S. +symboliste/S. +symbologie/S. +symétrie/S. +symétrique/S. +symétriquement +symétrisation/S. +symétriser/a0p+ +sympa +sympa/S. +sympathectomie/S. +sympathicomimétique/S. +sympathicotonie/S. +sympathie/S. +sympathique/S. +sympathiquement +sympathisante/F. +sympathiser/a0p. +sympatholytique/S. +sympathomimétique/S. +sympatrie/S. +sympatrique/S. +symphonie/S. +symphonique/S. +symphoniquement +symphoniste/S. +symphorine/S. +symphysaire/S. +symphyse/S. +symplectique/S. +symplésiomorphie/S. +sympode/S. +sympodiale/W. +symposion/S. +symposium/I. +symptomatique/S. +symptomatiquement +symptomatologie/S. +symptomatologique/S. +symptôme/S. +synagogale/W. +synagogue/S. +synalèphe/S. +synallagmatique/S. +synancée/S. +synanthérée/F. +synapomorphie/S. +synapse/S. +synapside/S. +synapsie/S. +synaptase/S. +synaptique/S. +synarchie/S. +synarchique/S. +synarthrose/S. +synchondrose/S. +synchro/S. +synchrocyclotron/S. +synchrone/S. +synchronicité/S. +synchronie/S. +synchronique/S. +synchroniquement +synchronisable/S. +synchronisation/S. +synchroniser/a0p+ +synchroniseuse/F. +synchronisme/S. +synchrotron/S. +synchrotronique/S. +syncinésie/S. +synclinale/W. +syncopale/W. +syncope/S. +syncoper/a0p+ +syncrétique/S. +syncrétisme/S. +syncrétiste/S. +syncristallisation/S. +syncristalliser/a0p. +syncytiale/W. +syncytium/S. +syndactyle/S. +syndactylie/S. +synderme/S. +syndic/S. +syndicale/W. +syndicalement +syndicalisable/S. +syndicalisation/S. +syndicaliser/a0p+ +syndicalisme/S. +syndicaliste/S. +syndicat/S. +syndicataire/S. +syndication/S. +syndiotactique/S. +syndique/S. +syndiquée/F. +syndiquer/a0p+ +syndrome/S. +synecdoque/S. +synéchie/S. +synécologie/S. +synérèse/S. +synergie/S. +synergique/S. +synergiquement +synergisme/S. +synergiste/S. +synesthésie/S. +synesthésique/S. +syngamie/S. +syngnathe/S. +synodale/W. +synode/S. +synodique/S. +synœcisme/S. +synonyme/S. +synonymie/S. +synonymique/S. +synopse/S. +synopsie/S. +synopsis +synoptique/S. +synostose/S. +synoviale/W. +synovie/S. +synovite/S. +synpériplanaire/S. +syntacticienne/F. +syntactique/S. +syntagmatique/S. +syntagme/S. +syntaxe/S. +syntaxique/S. +syntaxiquement +synthase/S. +synthé/S. +synthème/S. +synthèse/S. +synthétase/S. +synthétique/S. +synthétiquement +synthétisable/S. +synthétisation/S. +synthétiser/a0p+ +synthétiseur/S. +synthétisme/S. +synthétiste/S. +syntone/S. +syntonie/S. +syntonique/S. +syntonisateur/S. +syntonisation/S. +syntoniser/a0p+ +syntoniseur/S. +syntype/S. +syphilide/S. +syphiligraphe/S. +syphiligraphie/S. +syphilis +syphilitique/S. +syphilographe/S. +syphilographie/S. +syrah/S. +syriaque/S. +syriaque/S. +syrienne/F. +syringe/S. +syringomyélie/S. +syrinx +syro-libanaise/F. +syrphe/S. +syrrhapte/S. +sysadmin/S. +systématicienne/F. +systématicité/S. +systématique/S. +systématique/S. +systématiquement +systématisation/S. +systématiser/a0p+ +systématisme/S. +système/S. +systèmes-experts +systémicienne/F. +systémique/S. +systole/S. +systolique/S. +systyle/S. +systyle/S. +syzygie/S. +t +t/||-- +ta +tabac +tabac/S. +tabacologie/S. +tabacologue/S. +tabacomanie/S. +tabacultrice/F. +tabagie/S. +tabagique/S. +tabagisme/S. +tabar/S. +tabard/S. +tabasco/S. +tabassage/S. +tabasser/a0p+ +tabatière/F. +tabellaire/S. +tabellion/S. +tabernacle/S. +tabès +tabétique/S. +tablar/S. +tablature/S. +table/S. +tableau/X. +tableautage/S. +tableautier/S. +tableautin/S. +tablée/S. +tabler/a0p. +tabletière/F. +tablette/S. +tabletterie/S. +tableur/S. +tablier/S. +tabloïd/S. +tabloïd/S. +tabor/S. +tabou/S. +taboue/F. +tabouiser/a0p+ +taboulé/S. +tabouret/S. +tabulaire/S. +tabulation/S. +tabulatrice/F. +tabuler/a0p+ +tabun/S. +tac/S. +tacaud/S. +tacca/S. +tacet/S. +tachante/F. +tache/S. +tâche/S. +tachéographe/S. +tachéomètre/S. +tachéométrie/S. +tachéométrique/S. +tâcher/a0p+ +tacher/a0p+ +tâcheronne/F. +tacheter/d0p+ +tacheture/S. +tachine/S. +tachisme/S. +tachiste/S. +tachistoscope/S. +tachistoscopique/S. +tachyarythmie/S. +tachycardie/S. +tachygenèse/S. +tachygénétique/S. +tachygraphe/S. +tachygraphie/S. +tachymètre/S. +tachymétrie/S. +tachymétrique/S. +tachyon/S. +tachyphagie/S. +tachyphémie/S. +tachyphylaxie/S. +tachypnée/S. +tachypsychie/S. +tacite/S. +tacitement +taciturne/S. +taciturnité/S. +tacle/S. +tacler/a0p+ +taco/S. +tacon/S. +taconeos +tacot/S. +tacrine/S. +tact/S. +tacticienne/F. +tacticité/S. +tactile/S. +tactilement +tactique/S. +tactique/S. +tactiquement +tactisme/S. +tadelakt/S. +tadjike/F. +tadorne/S. +taekwondo/S. +taekwondoïste/S. +taël/S. +tænia/S. +taf/S. +taff/S. +taffe/S. +taffetas +tafia/S. +tafiole/S. +tag/S. +tagal/S. +tagalog/S. +tagète/S. +tagine/S. +tagliatelle +tagliatelle/S. +tagme/S. +taguer/a0p+ +tagueuse/F. +tahitienne/F. +taïaut +taï-chi +taïchi/S. +taï-chi-chuan +taïchichuan/S. +taie/S. +taïga/S. +taiji/S. +taijiquan/S. +taïkonaute/S. +taillable/S. +taillade/S. +taillader/a0p+ +taillage/S. +taillanderie/S. +taillandier/S. +taille/S. +taille-crayon +taille-crayon/S. +taille-douce +taille-haie/S. +taille-mer +taille-ongles +tailler/a0p+ +taille-racines +taillerie/S. +tailles-douces +tailleuse/F. +taille-vent +taillis +tailloir/S. +taillole/S. +tain/S. +taire/wNq+ +taiseuse/W. +taïwanaise/F. +tajine/S. +take-off +talaire/S. +talalgie/S. +talapoin/S. +talc/S. +taleb/S. +talent/S. +talentueuse/W. +talentueusement +taler/a0p+ +taleth/S. +talibane/F. +talibée/F. +talion/S. +talisman/S. +talismanique/S. +talith/S. +talitre/S. +talkies-walkies +talkie-walkie +talk-show/S. +tallage/S. +talle/S. +tallée/F. +taller/a0p. +talleth/S. +tallipot/S. +tallith/S. +talmouse/S. +talmud/S. +talmudique/S. +talmudiste/S. +talochage/S. +taloche/S. +talocher/a0p+ +talon/S. +talonnade/S. +talonnage/S. +talonnement/S. +talonner/a0p+ +talonnette/S. +talonneur/S. +talonnière/S. +talpack/S. +talpidé/S. +talquer/a0p+ +talqueuse/W. +talure/S. +talus +talweg/S. +tamandua/S. +tamanoir/S. +tamarin/S. +tamarinier/S. +tamaris +tambouille/S. +tambouler/a0p. +tambour/S. +tambourin/S. +tambourinade/S. +tambourinage/S. +tambourinaire/S. +tambourinante/F. +tambourinement/S. +tambouriner/a0p+ +tambourineuse/F. +tambour-major +tambours-majors +tamia/S. +tamier/S. +tamile/F. +tamis +tamisage/S. +tamiser/a0p+ +tamiserie/S. +tamiseuse/F. +tamisière/F. +tamoule/F. +tamoxifène/S. +tampico/S. +tampon/S. +tamponnade/S. +tamponnage/S. +tamponnement/S. +tamponner/a0p+ +tamponneuse/F. +tamponnoir/S. +tam-tam +tam-tam/S. +tan +tan/S. +tanagra/S. +tanaisie/S. +tancer/a0p+ +tanche/S. +tandem/S. +tandis +tandoori/S. +tangage/S. +tangara/S. +tangelo/S. +tangence/S. +tangente/F. +tangenter/a8p. +tangentielle/F. +tangentiellement +tangerine/S. +tangibilité/S. +tangible/S. +tangiblement +tango +tango/S. +tangon/S. +tanguer/a0p. +tanguière/S. +tanh +tanière/S. +tanin/S. +tanisage/S. +taniser/a0p+ +tank/S. +tanker/S. +tankiste/S. +tannage/S. +tannante/F. +tanne/S. +tanner/a0p+ +tannerie/S. +tanneuse/F. +tannin/S. +tannique/S. +tannisage/S. +tanniser/a0p+ +tanrec/S. +tansad/S. +tant +tantalate/S. +tantale/S. +tante/S. +tantième/S. +tantine/S. +tantinet/S. +tantôt +tantôt/S. +tantouze/S. +tantra/S. +tantrique/S. +tantrisme/S. +tanzanienne/F. +tao/S. +taôisme/S. +taoïsme/S. +taôiste/S. +taoïste/S. +taon/S. +taota/S. +tapage/S. +tapager/a0p. +tapageuse/F. +tapageusement +tapante/F. +tapas +tape/S. +tape-à-l'œil +tapecul/S. +tape-cul/S. +tapement/S. +tapenade/S. +taper/a0p+ +tapette/S. +tapeuse/F. +taphophilie/S. +tapin/S. +tapiner/a0p. +tapineuse/F. +tapinois +tapioca/S. +tapir/S. +tapir/f0p+ +tapis +tapis-brosse/S. +tapissage/S. +tapisser/a0p+ +tapisserie/S. +tapissière/F. +tapon/S. +taponnage/S. +taponner/a0p+ +tapotage/S. +tapotement/S. +tapoter/a0p+ +tapuscrit/S. +taqiya/S. +taquage/S. +taque/S. +taquer/a0p+ +taquet/S. +taquine/F. +taquiner/a0p+ +taquinerie/S. +taquoir/S. +tarabiscot/S. +tarabiscotage/S. +tarabiscoter/a0p+ +tarabuster/a0p+ +tarage/S. +tarama/S. +tarantass +tararage/S. +tarare/S. +tarasque/S. +taratata +taraud/S. +taraudage/S. +tarauder/a0p+ +taraudeuse/F. +taravelle/S. +tarbaise/F. +tarbouch/S. +tarbouche/S. +tard +tarder/a0p. +tardigrade/S. +tardillonne/F. +tardive/F. +tardivement +tardiveté/S. +tare/S. +tarée/F. +tarente/S. +tarentelle/S. +tarentule/S. +tarer/a0p+ +taret/S. +targe/S. +targette/S. +targuer/a0p+ +targui +targuie +targum/S. +taricheute/S. +tarière/S. +tarif/S. +tarifaire/S. +tarifer/a0p+ +tarification/S. +tarifier/a0p+ +tarin/S. +tarir/f0p+ +tarissable/S. +tarissement/S. +tarlatane/S. +tarlouze/S. +tarmac/S. +tarmacadam/S. +tarnaise/F. +taro/S. +tarologie/S. +tarot/S. +tarotée/F. +tarpan/S. +tarpéienne/F. +tarpon/S. +tarsale/W. +tarse/S. +tarsectomie/S. +tarsienne/F. +tarsier/S. +tartan/S. +tartane/S. +tartare/S. +tartarin/S. +tartarinade/S. +tarte/S. +tarte/S. +tartelette/S. +tartiflette/S. +tartignole/S. +tartignolle/S. +tartinable/S. +tartinade/S. +tartine/S. +tartiner/a0p+ +tartir/f0p. +tartrate/S. +tartre/S. +tartreuse/W. +tartrique/S. +tartufe/S. +tartuferie/S. +tartuffe/S. +tartufferie/S. +tarzan/S. +tas +taser/S. +tassage/S. +tasse/S. +tasseau/X. +tassement/S. +tasser/a0p+ +tassette/S. +tassili/S. +taste-vin +tata/S. +tatami/S. +tatane/S. +tataouinage/S. +tatare/F. +tâter/a0p+ +tâteur/S. +tâte-vin +tatie/S. +tatillonnage/S. +tatillonne/F. +tatillonner/a0p. +tatin/S. +tâtonnante/F. +tâtonnement/S. +tâtonner/a0p. +tâtons +tatou/S. +tatouage/S. +tatouer/a0p+ +tatoueuse/F. +tau +taud/S. +taudis +taularde/F. +taule/S. +taulière/F. +tauon/S. +taupe +taupe/S. +taupe-grillon +tauper/a0p+ +taupes-grillons +taupière/F. +taupin/S. +taupinière/S. +taure/S. +taureau/X. +taurillon/S. +taurine/F. +taurobole/S. +taurocholique/S. +tauromachie/S. +tauromachique/S. +tautochrone/S. +tautologie/S. +tautologique/S. +tautologiquement +tautologue/S. +tautomère/S. +tautomère/S. +tautomérie/S. +taux +tauzin/S. +tavaillon/S. +tavaïolle/S. +taveler/d0p+ +tavelure/S. +taverne/S. +tavernière/F. +tavillon/S. +taxable/S. +taxacée/S. +taxage/S. +taxation/S. +taxative/F. +taxatrice/F. +taxe/S. +taxer/a0p+ +taxi/S. +taxiarque/S. +taxi-clando +taxidermie/S. +taxidermiste/S. +taxie/S. +taximan/A. +taximètre/S. +taxinomie/S. +taxinomique/S. +taxinomiste/S. +taxiphone/S. +taxis-clandos +taxiste/S. +taxiway/S. +taxodium/S. +taxon/S. +taxonomie/S. +taxonomique/S. +taxonomiste/S. +taxum/I. +taylorienne/F. +taylorisation/S. +tayloriser/a0p+ +taylorisme/S. +tayloriste/S. +tchadanthrope/S. +tchadienne/F. +tchadiser/a0p+ +tchador/S. +tchadri/S. +tchao +tchapalo/S. +tcharchaf/S. +tchatche/S. +tchatcher/a0p. +tchatcheuse/F. +tchatter/a0p. +tchatteuse/F. +tchécoslovaque/S. +tchèque/S. +tchérémisse/S. +tchernoziom/S. +tchervonets +tchervontsy +tchétchène/S. +tchin-tchin +tchiper/a0p+ +tchitola/S. +te +té/S. +teaser/S. +teasing/S. +tébibit/S. +tébioctet/S. +tec/||-- +tech/S. +technétium/S. +technétronique/S. +technicienne/F. +technicisation/S. +techniciser/a0p+ +technicisme/S. +techniciste/S. +technicité/S. +technico-commerciale/W. +technico-économique/S. +technico-légale/W. +technicolor/S. +technico-scientifique/S. +technique/S. +technique/S. +techniquement +techniser/a0p+ +techniverrière/F. +techno/S. +techno/S. +technobureaucratique/S. +techno-bureaucratique/S. +technocrate/S. +technocratie/S. +technocratique/S. +technocratiquement +technocratisation/S. +technocratiser/a0p+ +technocratisme/S. +technoculturelle/F. +techno-culturelle/F. +technoéconomique/S. +techno-économique/S. +technologie/S. +technologique/S. +technologiquement +technologisme/S. +technologiste/S. +technologue/S. +technopathe/S. +technophile/S. +technophobe/S. +technopole/S. +technopôle/S. +technoprophète/S. +technoscience/S. +technoscientifique/S. +technostructure/S. +teck/S. +teckel/S. +tecker/a0p. +tecktonik/S. +tectiforme/S. +tectonique/S. +tectonique/S. +tectoniquement +tectrice/S. +tectrice/S. +tee/S. +teen-ager/S. +tee-shirt/S. +teflon/S. +téflon/S. +tégénaire/S. +tegmentale/F. +tégument/S. +tégumentaire/S. +teigne/S. +teigneuse/W. +teillage/S. +teille/S. +teiller/a0p+ +teilleuse/F. +teindre/wB +teinte/F. +teinter/a0p+ +teinture/S. +teinturerie/S. +teinturière/F. +téju/S. +tél +télamon/S. +télangiectasie/S. +télé/S. +téléachat/S. +télé-achat/S. +téléactrice/F. +télé-actrice/F. +téléaffichage/S. +téléalarme/S. +téléassistance/S. +télé-assistance/S. +téléassistante/F. +téléavertisseur/S. +télé-avertisseur/S. +télébenne/S. +téléboutique/S. +télécabine/S. +télécarte/S. +télécentre/S. +téléchargeable/S. +téléchargement/S. +télécharger/a0p+ +téléchélique/S. +téléchirurgie/S. +télécinéma/S. +télécommandable/S. +télécommande/S. +télécommander/a0p+ +télécommunication/S. +télécoms +téléconduite/F. +téléconduite/S. +téléconférence/S. +téléconseil/S. +téléconseillère/F. +téléconsultation/S. +télécontrôle/S. +télécopie/S. +télécopier/a0p+ +télécopieur/S. +télécran/S. +télédéclarante/F. +télédéclaration/S. +télédéclarer/a0p+ +télédémarchage/S. +télédétection/S. +télédiagnostic/S. +télédiffuser/a0p+ +télédiffusion/S. +télédistribution/S. +télédynamie/S. +télédynamique/S. +téléécriture/S. +télé-enseignement/S. +télé-évangélisme/S. +télé-évangéliste/S. +téléfax +téléfilm/S. +télé-film/S. +téléformation/S. +téléga/S. +télégénie/S. +télégénique/S. +télégestion/S. +télégramme/S. +télégraphe/S. +télégraphie/S. +télégraphier/a0p+ +télégraphique/S. +télégraphiquement +télégraphiste/S. +télègue/S. +téléguidage/S. +téléguider/a0p+ +téléimpression/S. +téléimprimeur/S. +téléinformatique/S. +téléinformatique/S. +téléjournal/X. +télékinésie/S. +télékinétique/S. +télémaintenance/S. +télémanipulateur/S. +télémanipulation/S. +télémark/S. +télémarketing/S. +télématique/S. +télémécanicienne/F. +télémécanique/S. +télémédecine/S. +télémercatique/S. +télémessage/S. +télémessagerie/S. +télémesure/S. +télémètre/S. +télémétrer/c0p+ +télémétreuse/F. +télémétrie/S. +télémétrique/S. +télencéphale/S. +télénovela/S. +téléobjectif/S. +téléologie/S. +téléologique/S. +téléologiquement +téléonomie/S. +téléonomique/S. +téléopération/S. +téléopératrice/F. +téléopérer/a0p+ +téléosaure/S. +téléostéen/S. +télépaiement/S. +télépathe/S. +télépathie/S. +télépathique/S. +télépathiquement +télépéage/S. +téléphage/S. +téléphérage/S. +téléphérique/S. +téléphérique/S. +téléphonage/S. +téléphone/S. +téléphoner/a0p+ +téléphonie/S. +téléphonique/S. +téléphoniquement +téléphoniste/S. +téléphotographie/S. +télépointage/S. +téléportation/S. +téléporter/a0p+ +téléprocédure/S. +téléprompteur/S. +téléprospection/S. +téléprospectrice/F. +téléradio/S. +téléradiographie/S. +téléradiologie/S. +télé-réalité/S. +télérèglement/S. +téléreportage/S. +télérobotique/S. +téléroman/S. +télérupteur/S. +téléscaphe/S. +télescopage/S. +télescope/S. +télescoper/a0p+ +télescopique/S. +téléscripteur/S. +télésecours +télésecrétariat/S. +télésécurité/S. +téléservice/S. +télésiège/S. +télésignalisation/S. +téléski/S. +télésnober/a0p+ +télésouffleur/S. +téléspectatrice/F. +télesthésie/S. +télésurveillance/S. +télétexte/S. +téléthèque/S. +télétoxie/S. +télétoxique/S. +télétraitement/S. +télétransmettre/vA +télétransmission/S. +télétravail/X. +télétravailler/a0p+ +télétravailleuse/F. +télétype/S. +télé-université/S. +télévangélisme/S. +télévangéliste/S. +télévariateur/S. +télévendeuse/F. +télévente/S. +télévérité/S. +télé-vérité/S. +téléversement/S. +téléverser/a0p+ +téléviser/a0p+ +téléviseur/S. +télévision/S. +télévisuelle/F. +télex +télexer/a0p+ +télexiste/S. +télicité/S. +tell/S. +telle/F. +telle/F. +t'elle/S= +tellement +tellière/S. +tellière/S. +telline/S. +tellurate/S. +tellure/S. +tellureuse/W. +tellurhydrique/S. +tellurienne/F. +tellurique/S. +tellurisme/S. +telluromètre/S. +tellurure/S. +télocentrique/S. +téloche/S. +télolécithe/S. +télomérase/S. +télomère/S. +télomérisation/S. +télophase/S. +telson/S. +tembotrione/S. +téméraire/S. +témérairement +témérité/S. +témoignage/S. +témoigner/a0p+ +témoin/S. +tempe/S. +tempera +tempera +tempérament/S. +tempéramentale/W. +tempérance/S. +tempérante/F. +température/S. +tempérer/c0p+ +tempête/S. +tempêter/a0p. +tempétueuse/W. +tempétueusement +temple/S. +templier/S. +tempo/I. +temporaire/S. +temporairement +temporal/X. +temporale/W. +temporaliser/a0p+ +temporalité/S. +temporelle/F. +temporellement +temporisation/S. +temporisatrice/F. +temporiser/a0p+ +temporo-pariétale/F. +temps +temps-réel +t'en +tenable/S. +tenace/S. +tenacement +ténacité/S. +tenaille/S. +tenaillement/S. +tenailler/a0p+ +tenancière/F. +tenante/F. +tendance/S. +tendancielle/F. +tendanciellement +tendancieuse/W. +tendancieusement +tendelle/S. +tender/S. +tenderie/S. +tendeuse/F. +tendineuse/W. +tendinite/S. +tendoir/S. +tendon/S. +tendre/S. +tendre/tA +tendrement +tendresse/S. +tendreté/S. +tendron/S. +ténèbre/S. +ténébreuse/W. +ténébreusement +ténébrion/S. +ténébrionidé/S. +tènement/S. +ténesme/S. +teneur/S. +teneurmètre/S. +teneuse/F. +tengrisme/S. +ténia/S. +ténifuge/S. +tenir/i0q+ +tennessine/S. +tennis +tennis-ballon/S. +tennis-elbow/S. +tennisman/A. +tennistique/S. +tenniswoman/A. +tenon/S. +tenonner/a0p+ +tenonneuse/S. +ténor/S. +ténorino/S. +ténorisante/F. +ténoriser/a0p. +ténorite/S. +ténosynovite/S. +ténotomie/S. +tenrec/S. +tenrecidé/S. +tenségrité/S. +tenseur/S. +tensioactive/F. +tensio-active/F. +tensioactivité/S. +tensio-activité/S. +tensiomètre/S. +tension/S. +tensionneur/S. +tenson/S. +tensorielle/F. +tentaculaire/S. +tentacule/S. +tentante/F. +tentation/S. +tentative/S. +tentatrice/F. +tente/S. +tente-abri +tenter/a0p+ +tente-roulotte +tentes-abris +tentes-roulottes +tenthrède/S. +tenture/S. +tenu/S. +ténue/F. +tenue/S. +ténuité/S. +tenure/S. +tenuto +teocali/S. +teocalli/S. +téocalli/S. +tep/||-- +tépale/S. +téphra/S. +téphrite/S. +téphrochronologie/S. +téphroïte/S. +téphrosie/S. +tepidarium +tepidarium/S. +tépographie/S. +teppanyaki/S. +tequila/S. +ter +térabit/S. +téragone/S. +téraoctet/S. +téraspic/S. +teratogène/S. +tératogène/S. +tératogenèse/S. +tératogénie/S. +tératologie/S. +tératologique/S. +tératologiste/S. +tératologue/S. +tératospermie/S. +terbine/S. +terbium/S. +tercer/a0p+ +tercet/S. +térébelle/S. +terebellum/S. +térébenthine/S. +térébinthacée/S. +térébinthe/S. +térébique/S. +térébrante/F. +térébration/S. +térébratule/S. +téréphtalate/S. +téréphtalique/S. +tergal/S. +tergite/S. +tergiversation/S. +tergiverser/a0p. +termaillage/S. +terme/S. +terminaison/S. +terminale/W. +terminateur/S. +terminer/a0p+ +terminographie/S. +terminologie/S. +terminologique/S. +terminologue/S. +terminus +termite/S. +termitière/S. +ternaire/S. +ternaire/S. +terne/S. +ternir/f0p+ +ternissement/S. +ternissure/S. +terpène/S. +terpénique/S. +terpénoïde/S. +terpine/S. +terpinéol/S. +terpinol/S. +terraformation/S. +terraformer/a0p+ +terrafungine/S. +terrage/S. +terrain/S. +terramare/S. +terraplane/S. +terraquée/F. +terrarium/S. +terrasse/S. +terrassement/S. +terrasser/a0p+ +terrassier/S. +terre/S. +terre-à-terre +terreau/X. +terreautage/S. +terreauter/a0p+ +terre-neuvas +terre-neuve +terre-neuvienne/F. +terre-neuvier/S. +terre-plein/S. +terrer/a0p+ +terrestre/S. +terrestréité/S. +terreur/S. +terreuse/W. +terrible/S. +terriblement +terricole/S. +terrienne/F. +terrière/F. +terrifiante/F. +terrifier/a0p+ +terrifique/S. +terrigène/S. +terril/S. +terrine/S. +terrinée/S. +terrir/f0p. +territoire/S. +territoriale/W. +territorialement +territorialisation/S. +territorialiser/a0p+ +territorialisme/S. +territorialité/S. +terroir/S. +terrorisante/F. +terroriser/a0p+ +terrorisme/S. +terroriste/S. +terser/a0p+ +tertiaire/S. +tertiairisation/S. +tertiarisation/S. +tertiariser/a0p+ +tertio +tertre/S. +tervueren/S. +terzetto/S. +tes +teseter/d0p+ +tesla/Um +tesselation/S. +tesselle/S. +tessellée/F. +tesseract/S. +tessère/S. +tessiture/S. +tesson/S. +test/S. +testabilité/S. +testable/S. +testacée/F. +testacelle/S. +testage/S. +testament/S. +testamentaire/S. +testatrice/F. +tester/a0p+ +testeuse/F. +testiculaire/S. +testicule/S. +testimoniale/W. +testologie/S. +teston/S. +testostérone/S. +têt/S. +tétanie/S. +tétaniforme/S. +tétanique/S. +tétanisante/F. +tétanisation/S. +tétaniser/a0p+ +tétanisme/S. +tétanos +tétanotoxine/S. +têtard/S. +tête/S. +tête-à-queue +tête-à-tête +têteau/X. +tête-bêche +tête-de-Maure +tête-de-clou +tête-de-loup +tête-de-moineau +tête-de-mort +tête-de-nègre +tête-de-nègre +tétée/S. +téter/c0p+ +téterelle/S. +têtes-de-Maure +têtes-de-clou +têtes-de-loup +têtes-de-moineau +têtes-de-mort +têtes-de-nègre +têtière/S. +tétin/S. +tétine/S. +téton/S. +tétonnière/S. +tétonnière/S. +tétra/S. +tétraborate/S. +tétrachlorure/S. +tétracorde/S. +tétracycline/S. +tétradactyle/S. +tétrade/S. +tétradrachme/S. +tétradyname/S. +tétraèdre/S. +tétraédrique/S. +tétragonale/W. +tétragone/S. +tétragramme/S. +tétrahydrocannabinol/S. +tétrahydronaphtalène/S. +tétrahydronaphtaline/S. +tétrakène/S. +tétrakihexaèdre/S. +tétraline/S. +tétralogie/S. +tétralogique/S. +tétramère/S. +tétraméthylsilane/S. +tétramètre/S. +tétramorphe/S. +tétramorphe/S. +tétranyque/S. +tétraphonie/S. +tétraplégie/S. +tétraplégique/S. +tétraploïde/S. +tétraploïdie/S. +tétrapode/S. +tétrapode/S. +tétrapolaire/S. +tétraptère/S. +tétraptère/S. +tétrarchat/S. +tétrarchie/S. +tétrarchique/S. +tétrarque/S. +tétras +tétrasodique/S. +tétrasomie/S. +tétrastyle/S. +tétrasyllabe/S. +tétrasyllabique/S. +tétraterpène/S. +tétratomicité/S. +tétratomique/S. +tétravalence/S. +tétravalente/F. +tétrode/S. +tétrodon/S. +tétrodotoxine/S. +tétrose/S. +tette/S. +têtue/F. +têtuer/a0p+ +teuf/S. +teufeuse/F. +teufs-teufs +teuf-teuf +teutonique/S. +teutonne/F. +tex +tex/||-- +texane/F. +tex-mex +texte/S. +textile/S. +textile/S. +texto +texto/S. +textualiser/a0p+ +textuelle/F. +textuellement +texturale/W. +texturation/S. +texture/S. +texturer/a0p+ +texturisation/S. +texturiser/a0p+ +tézigue +th/||-- +thaï +thaïe/F. +thaïlandaise/F. +thalamique/S. +thalamus +thalassémie/S. +thalassémique/S. +thalassocratie/S. +thalassothérapeute/S. +thalassothérapie/S. +thalassotoque/S. +thaler/S. +thaliana +thalidomide/S. +thalle/S. +thallium/S. +thallophyte/S. +thalweg/S. +thanatologie/S. +thanatologue/S. +thanatopractrice/F. +thanatopraxie/S. +thanatos +thari/S.-- +thaumaturge/S. +thaumaturgie/S. +thaumaturgique/S. +thé/S. +théatin/S. +théâtrale/W. +théâtralement +théâtralisation/S. +théâtraliser/a0p+ +théatralisme/S. +théâtralisme/S. +théâtralité/S. +théâtre/S. +théâtreuse/W. +théâtrothérapie/S. +thébaïde/S. +thébaine/F. +thébaïne/S. +thébaïque/S. +thébaïsme/S. +théière/F. +théine/S. +théisme/S. +théiste/S. +thématique/S. +thématique/S. +thématiquement +thématisation/S. +thématiser/a0p+ +thématisme/S. +thème/S. +thénar/S. +théobromine/S. +théocentrique/S. +théocentrisme/S. +théocrate/S. +théocratie/S. +théocratique/S. +théocratiquement +théodicée/S. +théodolite/S. +théodosienne/F. +théogonie/S. +théogonique/S. +théologale/W. +théologico-politique/S. +théologie/S. +théologienne/F. +théologique/S. +théologiquement +théologisme/S. +théologue/S. +théonyme/S. +théophanie/S. +théophilanthrope/S. +théophilanthropie/S. +théophore/S. +théophylline/S. +théorbe/S. +théorématique/S. +théorème/S. +théorétique/S. +théoricienne/F. +théorie/S. +théorique/S. +théoriquement +théorisation/S. +théoriser/a0p+ +théosophe/S. +théosophie/S. +théosophique/S. +thèque/S. +théralite/S. +thérapeute/S. +thérapeutique/S. +thérapeutique/S. +thérapeutiquement +thérapie/S. +thérapside/S. +thérianthrope/S. +thérianthropie/S. +thériaque/S. +théridion/S. +thérien/S. +thériodonte/S. +thermale/W. +thermalisation/S. +thermaliser/a0p+ +thermalisme/S. +thermaliste/S. +thermalité/S. +thermes +thermicienne/F. +thermicité/S. +thermidor/S. +thermidorienne/F. +thermie/S. +thermique/S. +thermiquement +thermisation/S. +thermisée/F. +thermistance/S. +thermisteur/S. +thermistor/S. +thermite/S. +thermoacidophile/S. +thermoacidophile/S. +thermoacoustique/S. +thermocautère/S. +thermochimie/S. +thermochimique/S. +thermocinétique/S. +thermocline/S. +thermocollage/S. +thermocollante/F. +thermocollée/F. +thermocolorimètre/S. +thermocouple/S. +thermodurcissable/S. +thermodynamicienne/F. +thermodynamique/S. +thermodynamique/S. +thermodynamiquement +thermoélastique/S. +thermoélectricité/S. +thermo-électricité/S. +thermoélectrique/S. +thermo-électrique/S. +thermoélectronique/S. +thermofixation/S. +thermofluide/S. +thermoformage/S. +thermoformer/a0p+ +thermogène/S. +thermogenèse/S. +thermogénie/S. +thermogénique/S. +thermogramme/S. +thermogramme/S. +thermographe/S. +thermographie/S. +thermographique/S. +thermogravimétrie/S. +thermogravimétrique/S. +thermohaline/F. +thermohydraulique/S. +thermohydraulique/S. +thermo-ionique/S. +thermoïonique/S. +thermolabile/S. +thermoludique/S. +thermoludisme/S. +thermoluminescence/S. +thermoluminescente/F. +thermolyse/S. +thermomagnétique/S. +thermomagnétisme/S. +thermomécanique/S. +thermomètre/S. +thermométrie/S. +thermométrique/S. +thermonastie/S. +thermonucléaire/S. +thermophile/S. +thermophobie/S. +thermophysique/S. +thermophysique/S. +thermopile/S. +thermoplaste/S. +thermoplastique/S. +thermoplongeur/S. +thermopompe/S. +thermopropulsée/F. +thermopropulsion/S. +thermopropulsive/F. +thermorécepteur/S. +thermorégulation/S. +thermorégulatrice/F. +thermorésistante/F. +thermorétractable/S. +thermos +thermoscope/S. +thermosensible/S. +thermosiphon/S. +thermosoudable/S. +thermosoudage/S. +thermosphère/S. +thermosphérique/S. +thermostabilité/S. +thermostable/S. +thermostat/S. +thermostatique/S. +thermothérapie/S. +thermotropisme/S. +théropode/S. +théropsidé/S. +thésarde/F. +thésaurisable/S. +thésaurisation/S. +thésauriser/a0p+ +thésauriseuse/F. +thesaurus +thésaurus +thèse/S. +thesmophories +thesmothète/S. +thessalonicienne/F. +thêta +thétique/S. +théurge/S. +théurgie/S. +théurgique/S. +théurgiste/S. +thiaclopride/S. +thiamine/S. +thiase/S. +thiazine/S. +thiazole/S. +thibaude/S. +thigmonastie/S. +thioalcool/S. +thiocarbonate/S. +thiocyanate/S. +thioestérase/S. +thioéther/S. +thiol/S. +thionine/S. +thionique/S. +thiophène/S. +thiosulfate/S. +thiosulfurique/S. +thio-urée/S. +thirame/S. +thixotrope/S. +thixotropie/S. +thlaspi/S. +tholoi +tholos +thomise/S. +thomisme/S. +thomiste/S. +thon/S. +thonaire/S. +thonier/S. +thonine/S. +thora/S. +thoracentèse/S. +thoracique/S. +thoraco-abdominale/W. +thoracocentèse/S. +thoracoplastie/S. +thoracotomie/S. +thorax +thorine/S. +thorite/S. +thorium/S. +thorn/S. +thoron/S. +thrace/S. +thread/S. +thrène/S. +thréonine/S. +thridace/S. +thriller/S. +thrips +thrombectomie/S. +thrombine/S. +thrombocyte/S. +thrombocytopénie/S. +thrombocytopénique/S. +thrombocytose/S. +thromboembolie/S. +thrombo-embolie/S. +thrombo-embolique/S. +thrombokinase/S. +thrombolyse/S. +thrombolytique/S. +thrombopathie/S. +thrombopénie/S. +thrombopénique/S. +thrombophlébite/S. +thromboplastine/S. +thrombopoïèse/S. +thrombose/S. +thrombotique/S. +thrombus +thulium/S. +thune/S. +thuriféraire/S. +thuringiensis +thuya/S. +thuyone/S. +thyade/S. +thylacine/S. +thylakoïde/S. +thylle/S. +thyllose/S. +thym/S. +thymie/S. +thymine/S. +thymique/S. +thymoanaleptique/S. +thymo-analeptique/S. +thymoanaleptique/S. +thymo-analeptique/S. +thymocyte/S. +thymol/S. +thymus +thyratron/S. +thyréostimuline/S. +thyréotoxicose/S. +thyréotoxique/S. +thyréotrope/S. +thyristor/S. +thyristorisée/F. +thyroglobuline/S. +thyroïde/S. +thyroïdectomie/S. +thyroïdienne/F. +thyroïdisme/S. +thyroïdite/S. +thyrotoxique/S. +thyrotrophine/S. +thyroxine/S. +thyrse/S. +thysanoptère/S. +thysanoptère/S. +thysanoure/S. +tian/S. +tiare/S. +tiaré/S. +tibétaine/F. +tibéto-birmane/F. +tibétologie/S. +tibétologue/S. +tibia/S. +tibiale/W. +tibiotarsienne/F. +tibio-tarsienne/F. +tibio-tarsienne/F. +tic/S. +tichodrome/S. +ticket/S. +tic-tac +tictaquer/a0p. +tie-break/S. +tiédasse/S. +tiède/S. +tièdement +tiédeur/S. +tiédir/f0p+ +tiédissement/S. +tienne/F. +tierçage/S. +tierce/S. +tiercée/F. +tiercefeuille/S. +tiercéiste/S. +tiercéité/S. +tiercelet/S. +tiercer/a0p+ +tierceron/S. +tiers +tiers-monde/S. +tiers-mondisation/S. +tiers-mondisme/S. +tiers-mondiste/S. +tiers-point/S. +tif/S. +tiffe/S. +tifosi +tige/S. +tigelle/S. +tigette/S. +tiglon/S. +tignasse/S. +tigrer/a0p+ +tigresse/F. +tigridie/S. +tigron/S. +tiguidou/S. +tiki/S. +t'il/S= +tilapia/S. +tilbury/S. +tilde/S. +tiliacée/S. +tillac/S. +tillage/S. +tillandsie/S. +tille/S. +tiller/a0p+ +tilleul/S. +tilling/S. +tilt/S. +tilter/a0p+ +timbale/S. +timbalier/S. +timbrage/S. +timbre/S. +timbre-amende +timbrée/F. +timbre-poste +timbre-quittance +timbrer/a0p+ +timbres-amendes +timbres-poste +timbres-quittances +timide/S. +timidement +timidité/S. +timing/S. +timocratie/S. +timocratique/S. +timon/S. +timonerie/S. +timonière/F. +timoraise/F. +timorée/F. +tin/S. +tinamou/S. +tincal/S. +tinctoriale/W. +tine/S. +tinette/S. +tintamarre/S. +tintamarresque/S. +tintement/S. +tinter/a0p+ +tintin +tintinnabulante/F. +tintinnabulement/S. +tintinnabuler/a0p. +tintouin/S. +tipi/S. +tipule/S. +ti-punch/S. +tique/S. +tiquer/a0p. +tiquetée/F. +tiqueture/S. +tiqueuse/F. +tir/S. +tirade/S. +tirage/S. +tiraillante/F. +tiraillement/S. +tirailler/a0p+ +tiraillerie/S. +tirailleur/S. +tiramisu/S. +tirant/S. +tire/S. +tire-au-cul +tire-au-flanc +tire-balle +tire-balle/S. +tire-balles +tire-bonde +tire-bonde/S. +tire-bondes +tire-botte +tire-botte/S. +tire-bottes +tire-bouchon/S. +tire-bouchonner/a0p+ +tire-bourre +tire-bouton +tire-bouton/S. +tire-boutons +tire-braise +tire-clou +tire-clou/S. +tire-clous +tire-crins +tire-d'aile +tire-fesses +tire-feu +tire-filet +tire-filet/S. +tire-filets +tire-fond +tirefonneuse/S. +tire-jus +tire-laine +tire-lait +tire-larigot +tire-ligne/S. +tire-lignes +tirelire/S. +tire-lisse +tire-l'œil +tire-pied +tire-pied/S. +tire-pieds +tirer/a0p+ +tire-sac +tire-sac/S. +tire-sacs +tire-sou +tire-sou/S. +tire-sous +tiret/S. +tiretaine/S. +tireté/S. +tire-terre +tirette/S. +tireuse/F. +tire-veille +tire-veine +tire-veine/S. +tiroir/S. +tiroir-caisse +tiroirs-caisses +tisane/S. +tisaner/a0p+ +tisanerie/S. +tisanière/S. +tiser/a0p+ +tison/S. +tisonner/a0p+ +tisonnier/S. +tissage/S. +tisser/a0p+ +tisserande/F. +tisseranderie/S. +tisserin/S. +tisseuse/F. +tissu/S. +tissu-éponge +tissulaire/S. +tissure/S. +tissus-éponges +tistre/tU +titan/S. +titanate/S. +titane/S. +titanesque/S. +titanide/S. +titanique/S. +titanisme/S. +titanite/S. +titanosaure/S. +titi/S. +titillation/S. +titiller/a0p+ +titisme/S. +titiste/S. +titrage/S. +titraille/S. +titre/S. +titrer/a0p+ +titre-restaurant +titres-restaurant +titrisable/S. +titrisation/S. +titriser/a0p+ +titubante/F. +titubation/S. +titubement/S. +tituber/a0p. +titulaire/S. +titulariat/S. +titularisation/S. +titularisée/F. +titulariser/a0p+ +titularité/S. +titulature/S. +tmèse/S. +toarcien/S. +toarcienne/F. +toast/S. +toaster/S. +toaster/a0p+ +toasteur/S. +toboggan/S. +toc/S. +tocante/S. +tocarde/F. +toccata/I. +tocophérol/S. +tocsin/S. +tof +toffee/S. +tofu/S. +toge/S. +togolaise/F. +togoliser/a0p+ +tohu-bohu +toi +toilage/S. +toile/S. +toiler/a0p+ +toilerie/S. +toilettage/S. +toilette/S. +toiletter/a0p+ +toiletteuse/F. +toilière/F. +toi-même +toise/S. +toisement/S. +toiser/a0p+ +toison/S. +toit/S. +toits-terrasses +toit-terrasse +toiture/S. +tokai/S. +tokamak/S. +tokay/S. +token/S. +tokenisation/S. +tokeniser/a0p+ +tokeniseur/S. +tokharienne/F. +tokyoïte/S. +tôle/S. +tôlée/S. +tolérable/S. +tolérablement +tolérance/S. +tolérante/F. +tolérantisme/S. +tolérer/c0p+ +tôlerie/S. +tolet/S. +toletière/S. +tôlière/F. +tolite/S. +tollé/S. +toltèque/S. +tolu/S. +toluène/S. +toluidine/S. +toluol/S. +tomahawk/S. +tomaison/S. +tomate/S. +tomawak/S. +tombac/S. +tombale/W. +tombante/F. +tombe/S. +tombeau/X. +tombée/F. +tombelle/S. +tomber/a0p+ +tombereau/X. +tombeuse/F. +tombola/S. +tombolo/S. +tome/S. +tomenteuse/W. +tomer/a0p+ +tomette/S. +tomme/S. +tommette/S. +tommy/A. +tomodensitomètre/S. +tomodensitométrie/S. +tomodensitométrique/S. +tomographe/S. +tomographie/S. +tomographique/S. +tom-pouce +t'on +ton +ton/S. +tonale/F. +tonalité/S. +tondage/S. +tondaille/S. +tondaison/S. +tondeuse/F. +tondre/tA +tondue/F. +tonème/S. +toner/S. +tonétique/S. +tonfa/S. +tong/S. +tonicardiaque/S. +tonicardiaque/S. +tonicité/S. +tonie/S. +tonifiante/F. +tonification/S. +tonifier/a0p+ +tonique/S. +tonitruance/S. +tonitruante/F. +tonitruer/a0p. +tonka/S. +tonkinoise/F. +tonlieu/X. +tonnage/S. +tonnante/F. +tonne/S. +tonneau/X. +tonnelage/S. +tonnelet/S. +tonnelier/S. +tonnelle/S. +tonnellerie/S. +tonner/a0p. +tonnerre/S. +tonofibrille/S. +tonologie/S. +tonomètre/S. +tonométrie/S. +tonoplaste/S. +tonsillite/S. +tonsure/S. +tonsuré/S. +tonsurer/a0p+ +tonte/S. +tontine/S. +tontiner/a0p+ +tontinière/F. +tontisse/S. +tonton/S. +tonture/S. +tonus +top/S. +top/S. +topaze/S. +top-down +tope +toper/a0p. +topette/S. +tophet/S. +tophus +topiaire/S. +topiaire/S. +topicalisation/S. +topicaliser/a0p+ +topinambour/S. +topique/S. +topiquement +topless +topless +top-modèle/S. +topo/S. +topographe/S. +topographie/S. +topographique/S. +topographiquement +topologie/S. +topologique/S. +topologiquement +topomère/S. +topomérisation/S. +topométrie/S. +topométrique/S. +toponyme/S. +toponymie/S. +toponymique/S. +toponymiste/S. +toquade/S. +toquante/S. +toquarde/F. +toque/S. +toquer/a0p+ +toquet/S. +torah/S. +torball/S. +torbernite/S. +torche/S. +torche-cul/S. +torcher/a0p+ +torchère/S. +torchette/S. +torchis +torchon/S. +torchonner/a0p+ +torcol/S. +tordage/S. +tordante/F. +tord-boyaux +tordeuse/F. +tordoir/S. +tordre/tA +tordue/F. +tore/S. +toréador/S. +toréer/a0p. +torero/S. +toreutique/S. +torgnole/S. +torii +toril/S. +torique/S. +tormentille/S. +tornade/S. +toroïdale/W. +toroïde/S. +toron/S. +toronnage/S. +toronner/a0p+ +toronneuse/S. +torpédo/S. +torpeur/S. +torpide/S. +torpillage/S. +torpille/S. +torpiller/a0p+ +torpillerie/S. +torpilleur/S. +torque/S. +torr/S. +torréfacteur/S. +torréfaction/S. +torréfier/a0p+ +torrent/S. +torrentielle/F. +torrentiellement +torrentueuse/W. +torrentueusement +torride/S. +tors +torsade/S. +torsader/a0p+ +torse/F. +torse/S. +torseur/S. +torsion/S. +torsorielle/F. +tort/S. +tortellini/S. +torticolis +tortil/S. +tortilla/S. +tortillage/S. +tortillard/S. +tortille/S. +tortillement/S. +tortiller/a0p+ +tortillon/S. +tortionnaire/S. +tortis +tortore/S. +tortorer/a0p+ +tortricidé/S. +tortue/F. +tortue/S. +tortueuse/W. +tortueusement +tortuosité/S. +torturante/F. +torture/S. +torturée/F. +torturer/a0p+ +tortureuse/F. +torve/S. +tory/A. +torysme/S. +toscane/F. +tosser/a0p. +tôt +totale/W. +totalement +totalisante/F. +totalisation/S. +totalisatrice/F. +totaliser/a0p+ +totaliseur/S. +totalitaire/S. +totalitairement +totalitarisme/S. +totalitariste/S. +totalité/S. +totem/S. +totémique/S. +totémisme/S. +tôt-fait/S. +totipotence/S. +totipotente/F. +toto/S. +toton/S. +touage/S. +touaille/S. +touareg/S. +touarègue/S. +toubabiser/a0p+ +toubib/S. +toucan/S. +touchable/S. +touchante/F. +touchau/X. +touche/S. +touche-à-tout +toucher/S. +toucher/a0p+ +touchette/S. +toucheur/S. +touer/a0p+ +toueur/S. +touffe/S. +touffeur/S. +touffue/F. +touillage/S. +touille/S. +touiller/a0p+ +touillette/S. +toujours +toulonnaise/F. +touloupe/S. +toulousaine/F. +toundra/S. +toungouse/S. +toungouze/S. +toupet/S. +toupie/S. +toupiller/a0p+ +toupilleuse/F. +toupillon/S. +toupiner/a0p. +touque/S. +tour/S. +touraillage/S. +touraille/S. +tourangelle/W. +touranienne/F. +tourbage/S. +tourbe/S. +tourber/a0p. +tourbeuse/W. +tourbière/F. +tourbillon/S. +tourbillonnaire/S. +tourbillonnante/F. +tourbillonnement/S. +tourbillonner/a0p. +tourd/S. +tourdille/S. +tourelle/S. +touret/S. +tourie/S. +tourière/F. +tourillon/S. +tourillonner/a0p. +tourillonneuse/S. +tourisme/S. +tourista/S. +touriste/S. +touristique/S. +tourmaline/S. +tourment/S. +tourmente/S. +tourmenter/a0p+ +tourmenteuse/F. +tourmentin/S. +tournage/S. +tournailler/a0p. +tournante/F. +tournasser/a0p+ +tournebouler/a0p+ +tournebride/S. +tournebroche/S. +tourne-disque +tourne-disque +tournedos +tournée/S. +tourne-feuille +tournelle/S. +tournemain/S. +tourne-oreille +tourne-pierre +tourne-pierre/S. +tourne-pierres +tourner/a0p+ +tournerie/S. +tourne-soc +tournesol/S. +tournette/S. +tourneuse/F. +tourne-vent +tournevis +tournicoter/a0p. +tourniller/a0p. +tourniole/S. +tourniquer/a0p. +tourniquet/S. +tournis +tournisse/S. +tournoi/S. +tournoiement/S. +tournoyante/F. +tournoyer/a0p. +tournure/S. +touron/S. +tour-opératrice/F. +tourte/S. +tourteau/X. +tourtelée/F. +tourtelette/S. +tourterelle/W. +tourtière/S. +tous +touselle/S. +toussailler/a0p. +tousser/a0p. +tousserie/S. +tousseuse/F. +toussotement/S. +toussoter/a0p. +toussoteuse/W. +tout +tout +tout/S. +tout-à-l'égout +toute +toute-bonne +toute-épice +toutefois +toute-puissance +toute-puissante +toutes +toutes-boîtes +toutes-bonnes +toutes-épices +toutes-puissantes +tout-fou/S. +toutim +toutou/S. +tout-petit/S. +tout-puissant/S. +tout-terrain +tout-va +tout-venant +touvaine/F. +toux +township/S. +toxémie/S. +toxémique/S. +toxicité/S. +toxico/S. +toxicodépendance/S. +toxicodépendante/F. +toxicodermie/S. +toxicologie/S. +toxicologique/S. +toxicologue/S. +toxicomane/S. +toxicomaniaque/S. +toxicomanie/S. +toxicose/S. +toxicovigilance/S. +toxidermie/S. +toxi-infectieuse/W. +toxi-infection/S. +toxine/S. +toxinique/S. +toxinogène/S. +toxique/S. +toxocarose/S. +toxoplasme/S. +toxoplasmose/S. +toyotisme/S. +tr/||-- +trabe/S. +trabéculum/S. +trabée/S. +traboule/S. +trabouler/a0p. +trac/S. +traçabilité/S. +traçable/S. +traçage/S. +tracaner/a0p+ +traçante/F. +tracas +tracassante/F. +tracasser/a0p+ +tracasserie/S. +tracassière/F. +tracassin/S. +trace/S. +tracé/S. +tracement/S. +tracéologie/S. +tracer/a0p+ +traceret/S. +traceuse/F. +trachéale/W. +trachée/S. +trachée-artère +trachéenne/F. +trachées-artères +trachéide/S. +trachéite/S. +trachéo-bronchite/S. +trachéole/S. +trachéomalacie/S. +trachéophyte/S. +trachéostomie/S. +trachéotomie/S. +trachéotomisée/F. +trachéotomiser/a0p+ +trachome/S. +trachyte/S. +trachytique/S. +traçoir/S. +tract/S. +tractable/S. +tractage/S. +tractation/S. +tracter/a0p+ +traction/S. +tractionnaire/S. +tractive/F. +tractopelle/S. +tractoriste/S. +tractrice/F. +tractus +trad +trader/S. +tradescantia/S. +trade-union/S. +trade-unionisme/S. +trade-unioniste/S. +tradi/S. +tradipraticienne/F. +traditeur/S. +tradition/S. +traditionalisme/S. +traditionaliste/S. +traditionnaire/S. +traditionnelle/F. +traditionnellement +traductible/S. +traduction/S. +traductionnelle/F. +traductologie/S. +traductologue/S. +traductrice/F. +traduire/yM +traduisible/S. +trafic/S. +traficotage/S. +traficoter/a0p. +traficoteuse/F. +trafiquante/F. +trafiquer/a0p+ +trafiqueuse/F. +tragédie/S. +tragédienne/F. +tragi-comédie/S. +tragi-comique/S. +tragique/S. +tragiquement +trahir/f0p+ +trahison/S. +trail/S. +traille/S. +train/S. +traînage/S. +traînailler/a0p. +traînante/F. +traînarde/F. +traînasser/a0p+ +traîne/S. +traîneau/X. +traîne-bûche +traîne-buisson +traînée/S. +traîne-malheur +traînement/S. +traîne-misère +traîner/a0p+ +traînerie/S. +traîne-savates +traîne-semelles +traîneuse/F. +trainglot/S. +training/S. +train-train +traire/wL +trait/S. +traitable/S. +traitance/S. +traitante/F. +traite/S. +traité/S. +traitement/S. +traiter/a0p+ +traiteur/S. +traître/S. +traîtresse/S. +traîtreuse/W. +traîtreusement +traîtrise/S. +trajectographie/S. +trajectographique/S. +trajectoire/S. +trajet/S. +tralala +tralala/S. +tram/S. +tramadol/S. +tramage/S. +tramail/S. +trame/S. +tramer/a0p+ +tramète/S. +trameuse/F. +traminot/S. +tramontane/S. +tramp/S. +tramping/S. +trampoline/S. +tramway/S. +tranchage/S. +tranchante/F. +tranche/S. +tranchée/S. +tranchée-abri +tranchées-abris +tranchefiler/a0p+ +tranchelard/S. +trancher/a0p+ +tranchet/S. +trancheuse/F. +tranchoir/S. +tranquille/S. +tranquillement +tranquillisante/F. +tranquillisation/S. +tranquilliser/a0p+ +tranquillité/S. +tranquillou +trans +transaction/S. +transactionnelle/F. +transafricaine/F. +transalpine/F. +transamazonienne +transamazonienne/F. +transaméricaine/F. +transaminase/S. +transandine/F. +transat/S. +transatlantique/S. +transatmosphérique/S. +transbahutement/S. +transbahuter/a0p+ +transbordement/S. +transborder/a0p+ +transbordeur/S. +transcanadienne +transcanadienne/F. +transcaspienne/F. +transcaucasienne/F. +transcendance/S. +transcendantale/W. +transcendantalement +transcendantalisme/S. +transcendantaliste/S. +transcendante/F. +transcender/a0p+ +transclasse/S. +transcodage/S. +transcoder/a0p+ +transcodeur/S. +transconductance/S. +transcontinentale/W. +transcriptase/S. +transcription/S. +transcriptionnelle/F. +transcriptome/S. +transcriptrice/F. +transcrire/y1 +transculturalité/S. +transculturation/S. +transculturelle/F. +transcutanée/F. +transdermique/S. +transdisciplinaire/S. +transdisciplinarité/S. +transducteur/S. +transduction/S. +transe/S. +transect/S. +transenne/S. +transept/S. +transestérification/S. +transfection/S. +transférable/S. +transférase/S. +transfèrement/S. +transférentielle/F. +transférer/c0p+ +transferrine/S. +transfert/S. +transfiguration/S. +transfiguratrice/F. +transfigurer/a0p+ +transfiler/a0p+ +transfinie/F. +transfixion/S. +transfo/S. +transformable/S. +transformante/F. +transformation/S. +transformationnelle/F. +transformatrice/F. +transformée/S. +transformer/a0p+ +transformisme/S. +transformiste/S. +transfrontalière/F. +transfrontière/S. +transfuge/S. +transfuser/a0p+ +transfuseuse/F. +transfusion/S. +transfusionnelle/F. +transgène/S. +transgénérationnelle/F. +transgenèse/S. +transgénique/S. +transgénose/S. +transgenre/S. +transgresser/a0p+ +transgresseur/S. +transgression/S. +transgressive/F. +transhumance/S. +transhumanisme/S. +transhumaniste/S. +transhumante/F. +transhumer/a0p+ +transidentitaire/S. +transidentité/S. +transigeance/S. +transiger/a0p. +transilienne/F. +transillumination/S. +transir/f0p+ +transistor/S. +transistorisation/S. +transistoriser/a0p+ +transit/S. +transitaire/S. +transiter/a0p+ +transition/S. +transitionnelle/F. +transitionner/a0p+ +transitive/F. +transitivement +transitivité/S. +transitoire/S. +transitoirement +translater/a0p+ +translatif/S. +translation/S. +translationnelle/F. +translative/F. +translittération/S. +translittérer/c0p+ +translocation/S. +translucide/S. +translucidité/S. +transméditerranéenne/F. +transmembranaire/S. +transmetteuse/F. +transmettre/vA +transmigration/S. +transmigrer/a0p. +transmissibilité/S. +transmissible/S. +transmissiomètre/S. +transmission/S. +transmissivité/S. +transmittance/S. +transmodulation/S. +transmuable/S. +transmuer/a0p+ +transmutabilité/S. +transmutable/S. +transmutation/S. +transmutatoire/S. +transmutatrice/F. +transmuter/a0p+ +transnationale/W. +transnationalisation/S. +transneptunienne/F. +transocéanienne/F. +transocéanique/S. +transpacifique/S. +transpadane/F. +transpalette/S. +transparaître/wQq. +transparence/S. +transparente/F. +transpartisane/F. +transpercement/S. +transpercer/a0p+ +transphobe/S. +transphobie/S. +transphrastique/S. +transpileur/S. +transpirante/F. +transpiration/S. +transpirer/a0p+ +transplacentaire/S. +transplant/S. +transplantable/S. +transplantation/S. +transplantement/S. +transplanter/a0p+ +transplantoir/S. +transpolaire/S. +transpondeur/S. +transport/S. +transportabilité/S. +transportable/S. +transportation/S. +transporter/a0p+ +transporteuse/F. +transposable/S. +transposée/S. +transposer/a0p+ +transposition/S. +transpositrice/F. +transposon/S. +transpyrénéenne/F. +transrhénane/F. +transsaharienne/F. +transsexualisme/S. +transsexualité/S. +transsexuelle/F. +transsibérienne/F. +transsonique/S. +transsubstantiation/S. +transsubstantier/a0p+ +transsudat/S. +transsudation/S. +transsuder/a0p+ +transtibiale/W. +transtympanique/S. +transuranien/S. +transuranienne/F. +transvasement/S. +transvaser/a0p+ +transvection/S. +transverbération/S. +transverbérer/c0p+ +transversale/W. +transversalement +transversalité/S. +transverse/S. +transvestisme/S. +transvider/a0p+ +transylvaine/F. +trantran/S. +trapèze/S. +trapéziste/S. +trapézoèdre/S. +trapézoïdale/W. +trapézoïde/S. +trappe/S. +trapper/a0p+ +trappeuse/F. +trappillon/S. +trappiste/S. +trappistine/S. +trapue/F. +traque/S. +traquée/F. +traquenard/S. +traquer/a0p+ +traquet/S. +traqueuse/F. +trash +trash/S. +trattoria/S. +trauma/S. +traumatique/S. +traumatisante/F. +traumatisée/F. +traumatiser/a0p+ +traumatisme/S. +traumatologie/S. +traumatologique/S. +traumatologiste/S. +traumatologue/S. +travail/X. +travailler/a0p+ +travailleuse/F. +travaillisme/S. +travailliste/S. +travailloter/a0p. +travée/S. +travelage/S. +traveller's +travelling/S. +travelo/S. +traversable/S. +traversante/F. +traverse/F. +traversée/S. +traverser/a0p+ +traversière/F. +traversin/S. +travertin/S. +travestie/F. +travestir/f0p+ +travestisme/S. +travestissement/S. +traviole +travois +travure/S. +trayeuse/F. +trayon/S. +trébuchante/F. +trébuchement/S. +trébucher/a0p+ +trébuchet/S. +trécheur/S. +tréfilage/S. +tréfiler/a0p+ +tréfilerie/S. +tréfileuse/F. +trèfle/S. +tréflée/F. +tréflière/S. +tréfondre +tréfonds +tréhalase/S. +tréhalose/S. +treillage/S. +treillager/a0p+ +treillageur/S. +treillagiste/S. +treille/S. +treillis +treillisser/a0p+ +treize +treizième/S. +treizièmement +treiziste/S. +trek/S. +trekker/S. +trekkeuse/F. +trekking/S. +trélingage/S. +tréma/S. +trémail/S. +trématage/S. +trémater/a0p+ +trématode/S. +tremblaie/S. +tremblante/F. +tremble/S. +tremblée/F. +tremblement/S. +trembler/a0p. +trembleuse/F. +tremblotante/F. +tremblote/S. +tremblotement/S. +trembloter/a0p. +tremblotte/S. +trémelle/S. +tremens +trémie/S. +trémière/S. +trémolite/S. +tremolo/S. +trémolo/S. +trémoussement/S. +trémousser/a0p+ +trempabilité/S. +trempage/S. +trempe/S. +tremper/a0p+ +trempette/S. +trempeuse/F. +tremplin/S. +trémulante/F. +trémulation/S. +trémuler/a0p+ +trenail/S. +trench/S. +trench-coat/S. +trentain/S. +trentaine/S. +trente +trente-cinq +trente-cinquième/S. +trente-deux +trente-deuxième/S. +trente-et-quarante +trente-et-un +trente-huit +trente-huitième/S. +trentenaire/S. +trente-neuf +trente-neuvième/S. +trente-quatre +trente-quatrième/S. +trente-sept +trente-septième/S. +trente-six +trente-sixième/S. +trente-trois +trente-troisième/S. +trentième/S. +trépan/S. +trépanation/S. +trépaner/a0p+ +trépang/S. +trépas +trépassée/F. +trépasser/a0p. +tréphocyte/S. +tréphone/S. +trépidante/F. +trépidation/S. +trépider/a0p. +trépied/S. +trépignante/F. +trépignement/S. +trépigner/a0p+ +trépigneuse/S. +trépointe/S. +tréponématose/S. +tréponème/S. +très +trésaille/S. +trescheur/S. +trésor/S. +trésorerie/S. +trésorière/F. +tressage/S. +tressaillante/F. +tressaillement/S. +tressaillir/iS +tressaut/S. +tressautement/S. +tressauter/a0p. +tresse/S. +tresser/a0p+ +tresseuse/F. +tréteau/X. +treuil/S. +treuillage/S. +treuiller/a0p+ +trêve/S. +trévirer/a0p+ +trévise/S. +tri/S. +triable/S. +triac/S. +triacide/S. +triacontaèdre/S. +triade/S. +triadique/S. +triage/S. +triaire/S. +triakioctaèdre/S. +triakitétraèdre/S. +trial/S. +trialcool/S. +triallate/S. +triamcinolone/S. +triandine/S. +triandre/S. +triandrie/S. +triangle/S. +triangulabilité/S. +triangulable/S. +triangulaire/S. +triangulairement +triangularisation/S. +triangularité/S. +triangulation/S. +trianguler/a0p+ +trias +triasique/S. +triathlète/S. +triathlon/S. +triathlonienne/F. +triatomique/S. +tribade/S. +tribadisme/S. +tribale/W. +tribalisme/S. +triballer/a0p+ +tribande/S. +tribande/S. +tribart/S. +tribasique/S. +triboélectricité/S. +tribo-électricité/S. +triboélectrique/S. +tribo-électrique/S. +tribologie/S. +triboluminescence/S. +triboluminescente/F. +tribomètre/S. +tribométrie/S. +tribord/S. +tribordais +triboulet/S. +tribu/S. +tribulation/S. +tribun/S. +tribunal/X. +tribunat/S. +tribune/S. +tribunitienne/F. +tribut/S. +tributaire/S. +tributylphosphate/S. +tributyrine/S. +tric/S. +tricalcique/S. +tricamérale/W. +tricarboxylique/S. +tricarde/F. +tricennale/W. +tricentenaire/S. +tricentenaire/S. +tricéphale/S. +triceps +tricératops +triche/S. +tricher/a0p. +tricherie/S. +tricheuse/F. +trichiasis +trichine/S. +trichinée/F. +trichineuse/W. +trichinose/S. +trichite/S. +trichloracétique/S. +trichloréthylène/S. +trichlorure/S. +trichobézoard/S. +trichocéphale/S. +trichocéphalose/S. +trichogramme/S. +trichologie/S. +tricholome/S. +trichoma/S. +trichomanie/S. +trichome/S. +trichomonas +trichomonase/S. +trichophagie/S. +trichophytie/S. +trichophyton/S. +trichoptère/S. +trichotillomanie/S. +trichroïque/S. +trichroïsme/S. +trichromatique/S. +trichrome/S. +trichromie/S. +trick/S. +triclinique/S. +triclinium/I. +tricoise/S. +tricolore/S. +tricône/S. +tricorne/S. +tricorps +tricot/S. +tricotage/S. +tricoter/a0p+ +tricotets +tricoteuse/F. +tricotin/S. +tricouni/S. +tricourant +trictrac/S. +tricuspide/S. +tricycle/S. +tricyclique/S. +tridacne/S. +tridactyle/S. +tridactyle/S. +trident/S. +tridentée/F. +tridentine/F. +tridermique/S. +tridi/S. +tridiagonale/S. +tridimensionnalité/S. +tridimensionnelle/F. +tridimensionnellement +triduum/S. +tridymite/S. +trièdre/S. +triennale/W. +triennium/S. +trier/a0p+ +triérarque/S. +trière/S. +triester/S. +trieuse/F. +trifaciale/W. +trifide/S. +trifoliée/F. +trifoliolée/F. +triforium/S. +trifouillage/S. +trifouiller/a0p+ +trifouilleuse/F. +trigémellaire/S. +trigéminée/F. +trigle/S. +triglycéride/S. +triglyphe/S. +triglyphe/S. +trigonale/W. +trigonalisation/S. +trigone/S. +trigone/S. +trigonelle/S. +trigonocéphale/S. +trigonocéphale/S. +trigonométrie/S. +trigonométrique/S. +trigonométriquement +trigramme/S. +triholoside/S. +trijumelle/W. +trikini/S. +trilatérale/W. +trilatération/S. +trilinéaire/S. +trilingue/S. +trilinguisme/S. +trilitère/S. +trilithe/S. +trille/S. +triller/a0p+ +trilliard/S. +trillion/S. +trilobée/F. +trilobite/S. +triloculaire/S. +trilogie/S. +trimaran/S. +trimard/S. +trimarder/a0p+ +trimardeur/S. +trimbalage/S. +trimbalement/S. +trimbaler/a0p+ +trimballage/S. +trimballement/S. +trimballer/a0p+ +trimer/a0p. +trimère/S. +trimestre/S. +trimestrielle/F. +trimestriellement +triméthylamine/S. +trimètre/S. +trimmer/S. +trimoteur/S. +trimurti/S. +trine/F. +trinervée/F. +tringle/S. +tringler/a0p+ +tringlerie/S. +tringlot/S. +trinidadienne/F. +trinitaire/S. +trinité/S. +trinitration/S. +trinitrobenzène/S. +trinitrotoluène/S. +trinôme/S. +trinquart/S. +trinqueballer/a0p+ +trinquer/a0p. +trinquet/S. +trinquette/S. +trinqueur/S. +trio/S. +triode/S. +triol/S. +trioléine/S. +triolet/S. +triolisme/S. +triomphale/W. +triomphalement +triomphalisme/S. +triomphaliste/S. +triomphante/F. +triomphatrice/F. +triomphe/S. +triompher/a0p. +triongulin/S. +trionyx +triose/S. +trioxane/S. +trioxyde/S. +trip/S. +tripaille/S. +tripale/S. +tripale/S. +tripang/S. +tripartie/F. +tripartisme/S. +tripartite/S. +tripartition/S. +tripatouillage/S. +tripatouiller/a0p+ +tripatouilleuse/F. +tripe/S. +triperie/S. +tripette/S. +triphasée/F. +triphasique/S. +triphénylméthane/S. +triphosphate/S. +triphtongue/S. +tripière/F. +triplace/S. +triplan/S. +triple/S. +triple/S. +triplé/S. +triplement +triplement/S. +tripler/a0p+ +triplet/S. +triplette/S. +triplex +triplex +triplicata +triplicata/S. +triploblastique/S. +triploïde/S. +triploïdie/S. +triplure/S. +tripode/S. +tripode/S. +tripodie/S. +tripolaire/S. +tripoli/S. +tripolitaine/F. +triporteur/S. +tripot/S. +tripotage/S. +tripoter/a0p+ +tripoteuse/F. +tripoux +triptyque/S. +trique/S. +triqueballe/S. +triquer/a0p+ +triquet/S. +trirectangle/S. +trirègne/S. +trirème/S. +trisaïeule/F. +trisaïeux +trisannuelle/F. +trisection/S. +trisectrice/F. +triséquer/c0p+ +trisme/S. +trismégiste/S. +trismus +trisoc/S. +trisodique/S. +trisomie/S. +trisomique/S. +trisser/a0p+ +triste/S. +tristement +tristesse/S. +tristounette/F. +trisyllabe/S. +trisyllabe/S. +trisyllabique/S. +triterpène/S. +triterpénique/S. +trithérapie/S. +triticale/S. +tritiée/F. +tritium/S. +triton/S. +triturable/S. +triturage/S. +triturateur/S. +trituration/S. +triturer/a0p+ +triumvir/S. +triumvirale/W. +triumvirat/S. +trivalence/S. +trivalente/F. +trivalve/S. +triviale/W. +trivialement +trivialisable/S. +trivialisation/S. +trivialité/S. +trivium/S. +troc/S. +trocart/S. +trochaïque/S. +trochanter/S. +trochantérienne/F. +troche/S. +trochée/S. +trochet/S. +trochile/S. +trochilidé/S. +trochin/S. +trochiter/S. +trochléaire/S. +trochlée/S. +trochléenne/F. +trochophore/S. +trochophore/S. +trochure/S. +troène/S. +troglobie/S. +troglobie/S. +troglodyte/S. +troglodytique/S. +trogne/S. +trognon/S. +trognon/S. +trogocytose/S. +trogonidé/S. +troïka/S. +trois +trois-deux +trois-étoiles +trois-étoiles +trois-huit +troisième/S. +troisièmement +trois-mâts +trois-points +trois-quarts +trois-quatre +trois-six +trôler/a0p. +troll/S. +trolle/S. +troller/a0p. +trollesque/S. +trolley/S. +trolleybus +trombe/S. +trombidion/S. +trombidiose/S. +trombine/S. +trombinoscope/S. +tromblon/S. +trombone/S. +tromboniste/S. +trommel/S. +trompable/S. +trompe/S. +trompe-la-mort +trompe-l'œil +tromper/a0p+ +tromperie/S. +trompeter/d0p+ +trompette/S. +trompette-des-morts +trompettes-des-morts +trompettiste/S. +trompeuse/F. +trompeusement +trompillon/S. +tronc/S. +troncation/S. +troncature/S. +tronche/S. +troncher/a0p+ +tronchet/S. +tronçon/S. +tronconique/S. +tronçonnage/S. +tronçonnement/S. +tronçonner/a0p+ +tronçonneuse/F. +tronculaire/S. +trône/S. +trôner/a0p. +tronquer/a0p+ +trop +trope/S. +tropézienne/F. +trophallaxie/S. +trophée/S. +trophique/S. +trophoblaste/S. +trophoblastique/S. +trophomicrobienne/F. +tropho-microbienne/F. +trophonévrose/S. +tropicale/W. +tropicalisation/S. +tropicaliser/a0p+ +tropique/S. +tropique/S. +tropisme/S. +tropopause/S. +troposphère/S. +troposphérique/S. +trop-perçu/S. +trop-plein/S. +troquer/a0p+ +troquet/S. +troqueuse/F. +trot/S. +trotskisme/S. +trotskiste/S. +trotskysme/S. +trotskyste/S. +trottante/F. +trotte/S. +trotter/a0p+ +trotteuse/F. +trottin/S. +trottinante/F. +trottinement/S. +trottiner/a0p. +trottinette/S. +trottoir/S. +trou/S. +troubade/S. +troubadour/S. +troublante/F. +trouble/S. +trouble/S. +troubleau/X. +trouble-fête +trouble-fête/S. +troubler/a0p+ +trouée/S. +trouer/a0p+ +troufignon/S. +troufion/S. +trouillarde/F. +trouille/S. +trouillomètre/S. +trouilloter/a0p. +trou-madame +troupe/S. +troupeau/X. +troupiale/S. +troupier/S. +trous-madame +troussage/S. +trousse/S. +trousseau/X. +trousse-galant +trousse-pet +trousse-pète +trousse-pied +trousse-queue +troussequin/S. +troussequiner/a0p+ +trousser/a0p+ +trousseur/S. +troussis +trou-trou/S. +trouvable/S. +trouvaille/S. +trouver/a0p+ +trouvère/S. +trouveuse/F. +troyenne/F. +truandage/S. +truandaille/S. +truande/F. +truander/a0p+ +truanderie/S. +truble/S. +trublion/S. +truc/S. +trucage/S. +truchement/S. +trucider/a0p+ +truck/S. +trucmuche/S. +truculence/S. +truculente/F. +trudgeon/S. +truelle/S. +truellée/S. +truffe/S. +truffer/a0p+ +trufficultrice/F. +trufficulture/S. +truffière/F. +truie/S. +truisme/S. +truisse/S. +truite/S. +truitée/F. +truiticulture/S. +trullo/I. +trumeau/X. +truquage/S. +truquer/a0p+ +truqueuse/F. +truquiste/S. +trusquin/S. +trusquiner/a0p+ +trust/S. +truster/a0p+ +trusteur/S. +trutticulture/S. +trypanosome/S. +trypanosomiase/S. +trypsine/S. +trypsinogène/S. +tryptamine/S. +tryptophane/S. +tsar/S. +tsarévitch/S. +tsarine/S. +tsarisme/S. +tsariste/S. +tsé-tsé +t-shirt/S. +tsoin-tsoin +tsoin-tsoin +tss +tss-tss +tsunami/S. +tu +tuable/S. +tuage/S. +tuante/F. +tub/S. +tuba/S. +tubage/S. +tubaire/S. +tubarde/F. +tube/S. +tuber/a0p+ +tubéracée/F. +tubercule/S. +tuberculée/F. +tuberculeuse/W. +tuberculide/S. +tuberculination/S. +tuberculine/S. +tuberculiner/a0p+ +tuberculinique/S. +tuberculinisation/S. +tuberculiniser/a0p+ +tuberculisation/S. +tuberculiser/a0p+ +tuberculoïde/S. +tuberculose/S. +tubéreuse/S. +tubéreuse/W. +tubériforme/S. +tubérisation/S. +tubérisée/F. +tubérosité/S. +tubicole/S. +tubifex +tubipore/S. +tubiste/S. +tubulaire/S. +tubule/S. +tubulée/F. +tubuleuse/W. +tubuliflore/S. +tubuliflore/S. +tubuline/S. +tubulopathie/S. +tubulure/S. +tudesque/S. +tudieu +tue-chien +tue-diable +tue-l'amour +tue-loup +tue-mouche +tue-mouches +tuer/a0p+ +tuerie/S. +tue-tête +tueuse/F. +tuf/S. +tuffeau/X. +tufière/F. +tuilage/S. +tuile/S. +tuileau/X. +tuiler/a0p+ +tuilerie/S. +tuilette/S. +tuilière/F. +tularémie/S. +tulipe/S. +tulipier/S. +tulipomanie/S. +tulle/S. +tullerie/S. +tullière/F. +tulliste/S. +tumbling/S. +tumefaciens +tuméfaction/S. +tuméfier/a0p+ +tumescence/S. +tumescente/F. +tumeur/S. +tumorale/W. +tumorectomie/S. +tumorothèque/S. +tumulaire/S. +tumulte/S. +tumultuaire/S. +tumultueuse/W. +tumultueusement +tumulus/I. +tune/S. +tuner/S. +tungar/S. +tungstate/S. +tungstène/S. +tungstique/S. +tunicelle/S. +tunicier/S. +tuning/S. +tunique/S. +tuniquée/F. +tunisienne/F. +tunisoise/F. +tunnel/S. +tunnelier/S. +tupaïa/S. +tupie/F. +tupinambis +tuple/S. +tupperware/S. +tuque/S. +turban/S. +turbe/S. +turbé/S. +turbeh/S. +turbellarié/S. +turbide/S. +turbidimètre/S. +turbidimétrie/S. +turbidité/S. +turbiditique/S. +turbin/S. +turbinage/S. +turbine/S. +turbinelle/S. +turbiner/a0p+ +turbith/S. +turbo +turbo +turbo/S. +turboagitateur/S. +turbo-agitateur/S. +turboalternateur/S. +turbo-alternateur/S. +turbocode/S. +turbocombustible/S. +turbocompressée/F. +turbocompresseur/S. +turbofiltre/S. +turboforage/S. +turbomachine/S. +turbomoteur/S. +turbopompe/S. +turbopropulseur/S. +turboréacteur/S. +turbosoufflante/F. +turbostatoréacteur/S. +turbot/S. +turbotière/S. +turbotin/S. +turbotrain/S. +turbulence/S. +turbulente/F. +turbulette/S. +turcique/S. +turco/S. +turco-mongole/F. +turcophobie/S. +turcophone/S. +turdidé/S. +turf/S. +turfiste/S. +turgescence/S. +turgescente/F. +turgide/S. +turgotine/S. +turinoise/F. +turion/S. +turista/S. +turkmène/S. +turlupinade/S. +turlupiner/a0p+ +turlurette/S. +turlutaine/S. +turlute/S. +turluter/a0p+ +turlutte/S. +turlututu +turlututu/S. +turne/S. +turnep/S. +turn-over +turnover/S. +turonienne/F. +turpide/S. +turpidement +turpitude/S. +turque/F. +turquerie/S. +turquette/S. +turquin/S. +turquoise +turquoise/S. +turricule/S. +turriculée/F. +turritelle/S. +tussah/S. +tussah/S. +tussilage/S. +tussor/S. +tussore/S. +tutélaire/S. +tûteler/d0p+ +tutelle/S. +tûter/a0p+ +tuteurage/S. +tuteurer/a0p+ +tuthie/S. +tuto/S. +tutoiement/S. +tutorale/F. +tutorat/S. +tutorer/a0p+ +tutoriel/S. +tutorielle/F. +tutoyer/a0p+ +tutoyeuse/F. +tutrice/F. +tutsie/F. +tutti +tutu/S. +tuvaluane/F. +tuyau/X. +tuyautage/S. +tuyauter/a0p+ +tuyauterie/S. +tuyauteuse/F. +tuyère/S. +tweed/S. +tweet/S. +tweeter/S. +tweeter/a0p+ +twin-set/S. +twirling/S. +twist/S. +twister/a0p. +tylenchus +tympan/S. +tympanale/W. +tympanique/S. +tympaniser/a0p+ +tympanisme/S. +tympanite/S. +tympanon/S. +tympanoplastie/S. +tympanosclérose/S. +tyndallisation/S. +typage/S. +type/S. +typer/a0p+ +typesse/S. +typha/S. +typhacée/S. +typhique/S. +typhlite/S. +typhobacillose/S. +typho-bacillose/S. +typhoïde/S. +typhoïde/S. +typhoïdique/S. +typhomycine/S. +typhon/S. +typhose/S. +typhus +typicité/S. +typification/S. +typique/S. +typiquement +typiser/a0p+ +typo/S. +typochromie/S. +typographe/S. +typographie/S. +typographier/a0p+ +typographique/S. +typographiquement +typolithographie/S. +typologie/S. +typologique/S. +typologiquement +typomètre/S. +typon/S. +typote/S. +typothèque/S. +typtologie/S. +tyran/S. +tyranneau/X. +tyrannicide/S. +tyrannie/S. +tyrannique/S. +tyranniquement +tyranniser/a0p+ +tyrannosaure/S. +tyrolienne/F. +tyrosinase/S. +tyrosine/S. +tyrosinémie/S. +tyrothricine/S. +tyrrhénienne/F. +tzar/S. +tzarine/S. +tzatziki/S. +tzigane/S. +u +u/||-- +ua/||-- +ubac/S* +ubérale/S* +uberisation/S* +ubique/S* +ubiquinone/S* +ubiquisme/S* +ubiquiste/S* +ubiquitaire/S* +ubiquité/S* +ubiquitine/S* +ubuesque/S* +uchronie/S* +uchronique/S* +ud/L'D'Q' +ufologie/S* +ufologique/S* +ufologue/S* +uhlan/S* +ukase/S* +ukrainienne/F* +ukulélé/S* +ulcération/S* +ulcérative/F* +ulcère/S* +ulcérer/c4p+ +ulcéreuse/W* +ulcérogène/S* +ulcéroïde/S* +ulcus/L'D'Q' +uléma/S* +uliginaire/S* +uligineuse/W* +ulluque/S* +ulmacée/S* +ulmaire/S* +ulmiste/S* +ulna/S* +ulnaire/S* +ultérieure/F* +ultérieurement/D'Q' +ultimatum/S* +ultime/S* +ultimement/D'Q' +ultimité/S* +ultimo +ultra/S* +ultrabasique/S* +ultracentrifugation/S* +ultracentrifugeuse/S* +ultrachic/S* +ultra-chic/S* +ultracolonialisme/S* +ultra-colonialisme/S* +ultracolonialiste/S* +ultra-colonialiste/S* +ultraconcurrentielle/F* +ultraconfidentielle/F* +ultra-confidentielle/F* +ultraconservatrice/F* +ultracourte/F* +ultra-courte/F* +ultradienne/F* +ultradroite/S* +ultrafiltrat/S* +ultrafiltration/S* +ultrafiltre/S* +ultrafiltrer/a2p+ +ultrafine/F* +ultragauche/S* +ultra-gauche/S* +ultralégère/F* +ultra-légère/F* +ultralibérale/W* +ultra-libérale/W* +ultralibéralisme/S* +ultra-libéralisme/S* +ultramarine/F* +ultra-marine/F* +ultramétrique/S* +ultramicroscope/S* +ultramicroscopie/S* +ultramicroscopique/S* +ultramoderne/S* +ultra-moderne/S* +ultramontaine/F* +ultramontanisme/S* +ultranationalisme/S* +ultra-nationalisme/S* +ultranationaliste/S* +ultra-nationaliste/S* +ultraorthodoxe/S* +ultra-orthodoxe/S* +ultrapériphérique/S* +ultra-petita/D'Q' +ultra-petita/L'D'Q' +ultraplate/F* +ultra-plate/F* +ultraponie/S* +ultraponique/S* +ultraportable/S* +ultra-portable/S* +ultrapression/S* +ultra-pression/S* +ultraproduit/S* +ultrapropre/S* +ultra-propre/S* +ultrapropreté/S* +ultra-propreté/S* +ultrarapide/S* +ultra-rapide/S* +ultrarésistante/F* +ultra-résistante/F* +ultrarévolutionnaire/S* +ultra-révolutionnaire/S* +ultrariche/S* +ultra-riche/S* +ultraroyaliste/S* +ultra-royaliste/S* +ultrasensible/S* +ultra-sensible/S* +ultrason/S* +ultra-son/S* +ultrasonique/S* +ultra-sonique/S* +ultrasonore/S* +ultra-sonore/S* +ultrastructure/S* +ultravide/S* +ultraviolence/S* +ultraviolet/S* +ultra-violet/S* +ultraviolette/F* +ultra-violette/F* +ultravirus/L'D'Q' +ulve/S* +umami/S* +umbanda/S* +umbo/S* +umlaut/S* +ummite/S* +un/D'Q'Q* +unaire/S* +unanime/S* +unanimement/D'Q' +unanimisme/S* +unanimiste/S* +unanimitaire/S* +unanimité/S* +unau/S* +unciforme/S* +uncinée/F* +underground/L'D'Q' +underground/S* +une/D'Q'Q* +une/F* +unetelle/S* +unguéale/W* +unguifère/S* +unguis/L'D'Q' +uniate/S* +uniaxe/S* +unicaule/S* +unicellulaire/S* +unicité/S* +unicolore/S* +unicorne/S* +unidimensionnalité/S* +unidimensionnelle/F* +unidirectionnalité/S* +unidirectionnelle/F* +unidose/S* +unième/S* +unièmement/D'Q' +unif/S* +unifamiliale/S* +unifamiliale/W* +unifère/S* +unifiable/S* +unification/S* +unificatrice/F* +unifier/a4p+ +unifilaire/S* +uniflore/S* +unifoliée/F* +uniforme/S* +uniforme/S* +uniformément/D'Q' +uniformisante/F* +uniformisation/S* +uniformiser/a2p+ +uniformitarisme/S* +uniformité/S* +unijambiste/S* +unijonction/S* +unilatérale/W* +unilatéralement/D'Q' +unilatéralisme/S* +unilatéralité/S* +unilatère/S* +unilinéaire/S* +unilingue/S* +unilinguisme/S* +unilobée/F* +uniloculaire/S* +uniment/D'Q' +unimodulaire/S* +uninominale/W* +union/S* +unionisme/S* +unioniste/S* +uniovulée/F* +unipare/S* +uniparentale/W* +unipersonnelle/F* +unipolaire/S* +unipotente/F* +unique/S* +uniquement/D'Q' +unir/f4p+ +uniramée/F* +unisériée/F* +unisexe/S* +unisexualité/S* +unisexuée/F* +unisexuelle/F* +unisson/S* +unitaire/S* +unitairement/D'Q' +unitarienne/F* +unitarisme/S* +unitarité/S* +unité/S* +unitive/F* +univ/S* +univalence/S* +univalente/F* +univalve/S* +univariante/F* +univerbation/S* +univers/L'D'Q' +universalisation/S* +universaliser/a4p+ +universalisme/S* +universaliste/S* +universalité/S* +universaux/D'Q' +universelle/F* +universellement/D'Q' +universiade/S* +universitaire/S* +université/S* +univibrateur/S* +univitelline/F* +univocité/S* +univoque/S* +univoquement/D'Q' +untel/S* +ununhexium/S* +ununoctium/S* +ununpentium/S* +ununquadium/S* +ununseptium/S* +ununtrium/S* +upas/L'D'Q' +upérisation/S* +upériser/a2p+ +uppercut/S* +upsilon/L'D'Q' +upwelling/S* +uracile/S* +uraète/S* +uræus/L'D'Q' +uranate/S* +urane/S* +uranie/S* +uranifère/S* +uraninite/S* +uranique/S* +uranisme/S* +uranite/S* +uranium/S* +uranographie/S* +uranométrie/S* +uranoplastie/S* +uranoscope/S* +uranyle/S* +uranyle/S* +urate/S* +urbaine/F* +urbanisation/S* +urbaniser/a4p+ +urbanisme/S* +urbaniste/S* +urbanistique/S* +urbanité/S* +urbanologie/S* +urbi +urcéolée/F* +ure/S* +urédinale/S* +urédospore/S* +urée/S* +uréide/S* +uréique/S* +urémie/S* +urémique/S* +uréogenèse/S* +uréotélie/S* +uréotélique/S* +urétérale/W* +uretère/S* +urétérite/S* +uréthane/S* +uréthanne/S* +urétrale/W* +urètre/S* +urétrite/S* +urgemment/D'Q' +urgence/S* +urgente/F* +urgentissime/S* +urgentiste/S* +urgentologue/S* +urger/a8p. +urgonienne/F* +uricémie/S* +uricosurique/S* +uricotélie/S* +uricotélique/S* +uridine/S* +urinaire/S* +urinal/X* +urine/S* +uriner/a2p+ +urineuse/W* +urinifère/S* +urinoir/S* +urique/S* +urne/S* +urobiline/S* +urobilinogène/S* +urobilinurie/S* +urochrome/S* +urodèle/S* +urodynamique/S* +urogénitale/W* +uro-génitale/W* +urographie/S* +urokinase/S* +urolagnie/S* +urologie/S* +urologique/S* +urologue/S* +uromètre/S* +uronique/S* +uropode/S* +uropygiale/W* +uropygienne/F* +uroscopie/S* +uroscopique/S* +ursidé/S* +ursuline/S* +urticacée/S* +urticaire/S* +urticante/F* +urticarienne/F* +urtication/S* +urticée/S* +urubu/S* +uruguayenne/F* +urus/L'D'Q' +us/D'Q' +usage/S* +usagée/F* +usagère/F* +usance/S* +usante/F* +user/a4p+ +usinabilité/S* +usinable/S* +usinage/S* +usine/S* +usiner/a2p+ +usinière/F* +usitatissimum +usitée/F* +usnée/S* +ustensile/S* +ustensilité/S* +ustilaginale/S* +usucapion/S* +usuelle/F* +usuellement/D'Q' +usufructuaire/S* +usufruit/S* +usufruitière/F* +usuraire/S* +usurairement/D'Q' +usure/S* +usurière/F* +usurpation/S* +usurpatoire/S* +usurpatrice/F* +usurper/a2p+ +ut/L'D'Q' +utérine/F* +utero +utérus/L'D'Q' +utile/S* +utilement/D'Q' +utilisabilité/S* +utilisable/S* +utilisation/S* +utilisatrice/F* +utiliser/a2p+ +utilitaire/S* +utilitaire/S* +utilitarisme/S* +utilitariste/S* +utilité/S* +uto-aztèque/S* +utopie/S* +utopique/S* +utopisme/S* +utopiste/S* +utriculaire/S* +utricule/S* +utriculeuse/W* +uvale/W* +uva-ursi/L'D'Q' +uvée/S* +uvéite/S* +uvula/S* +uvulaire/S* +uvulaire/S* +uvule/S* +uxoricide/S* +uxorilocale/W* +uzbek/S* +v +vacance/S. +vacancière/F. +vacante/F. +vacarme/S. +vacataire/S. +vacation/S. +vaccaire/S. +vaccin/S. +vaccinable/S. +vaccinale/W. +vaccination/S. +vaccinatrice/F. +vaccine/S. +vaccinée/F. +vaccinelle/S. +vacciner/a0p+ +vaccinide/S. +vaccinier/S. +vaccinifère/S. +vaccinogène/S. +vaccinoïde/S. +vaccinostyle/S. +vaccinothérapie/S. +vacharde/F. +vache/S. +vache/S. +vachement +vachère/F. +vacherie/S. +vacherin/S. +vachette/S. +vacillante/F. +vacillation/S. +vacillement/S. +vaciller/a0p. +vacive/S. +va-comme-je-te-pousse +vacuité/S. +vacuolaire/S. +vacuole/S. +vacuolisation/S. +vacuoliser/a0p+ +vacuome/S. +vacuomètre/S. +vacuum +vad/U.||-- +vade +vade-mecum +vadrouille/S. +vadrouiller/a0p. +vadrouilleuse/F. +va-et-vient +vagabondage/S. +vagabonde/F. +vagabonder/a0p. +vagale/W. +vagile/S. +vagin/S. +vaginale/W. +vaginisme/S. +vaginite/S. +vaginoplastie/S. +vagir/f0p. +vagissante/F. +vagissement/S. +vagolytique/S. +vagolytique/S. +vagotonie/S. +vagotonique/S. +vague/S. +vaguelette/S. +vaguement +vaguemestre/S. +vaguer/a0p+ +vahiné/S. +vaigrage/S. +vaigre/S. +vaillamment +vaillance/S. +vaillante/F. +vaillantie/S. +vaillantise/S. +vaincre/wP +vaincue/F. +vaine/F. +vainement +vainqueur/S. +vair/S. +vairée/F. +vairon/S. +vaironner/a0p. +vaisseau/X. +vaisselier/S. +vaisselle/S. +vajrayana +val/S. +valable/S. +valablement +valaisanne/F. +valaque/S. +valdinguer/a0p. +valdoisienne/F. +valençay/S. +valence/S. +valences-grammes +valencienne/F. +valenciennoise/F. +valentine/F. +valentinite/S. +valentinoise/F. +valérianacée/S. +valériane/S. +valérianelle/S. +valérianique/S. +valérique/S. +valet/S. +valetaille/S. +valeter/d0p. +valétudinaire/S. +valeur/S. +valeureuse/W. +valeureusement +valgus +validation/S. +validatrice/F. +valide/S. +validement +valider/a0p+ +validisme/S. +validiste/S. +validité/S. +valine/S. +valise/S. +valiser/a0p+ +valisette/S. +valkyrie/S. +vallée/S. +valleuse/S. +vallisnérie/S. +vallon/S. +vallonnement/S. +vallonner/a0p+ +valoche/S. +valoir/pM +valorem +valorisable/S. +valorisante/F. +valorisation/S. +valoriser/a0p+ +valouser/a0p+ +valpolicella/S. +valse/S. +valse-hésitation +valser/a0p+ +valses-hésitations +valseuse/F. +valuation/S. +valvaire/S. +valve/S. +valvée/F. +valvulaire/S. +valvule/S. +valvulopathie/S. +valvuloplastie/S. +vamp/S. +vamper/a0p+ +vampire/S. +vampirique/S. +vampirisation/S. +vampiriser/a0p+ +vampirisme/S. +van/S. +vanadate/S. +vanadinite/S. +vanadique/S. +vanadium/S. +vancomycine/S. +vanda/S. +vandale/S. +vandaliser/a0p+ +vandalisme/S. +vandoise/S. +vanesse/S. +vanille/S. +vanillée/F. +vanillier/S. +vanilline/S. +vanillisme/S. +vanillon/S. +vanisage/S. +vanisée/F. +vanité/S. +vaniteuse/W. +vaniteusement +vanity-case/S. +vannage/S. +vanne/S. +vanneau/X. +vannelle/S. +vanner/a0p+ +vannerie/S. +vannet/S. +vannette/S. +vanneuse/F. +vannière/F. +vannure/S. +vantail/X. +vantarde/F. +vantardise/S. +vanter/a0p+ +vanterie/S. +vanuatuane/F. +va-nu-pieds +vape/S. +vapeur/S. +vapocraquage/S. +vapocraqueur/S. +vaporeuse/W. +vaporeusement +vaporisage/S. +vaporisateur/S. +vaporisation/S. +vaporiser/a0p+ +vapotage/S. +vapoter/a0p+ +vapoteuse/F. +vaquer/a0p. +var/S. +var/U.||-- +varaigne/S. +varan/S. +varangue/S. +varappe/S. +varapper/a0p. +varappeuse/F. +varech/S. +vareuse/S. +varheure/S. +varia +variabilité/S. +variable/S. +variablement +variadique/S. +variance/S. +variante/F. +variante/S. +variateur/S. +variation/S. +variationnelle/F. +varice/S. +varicelle/S. +varicelliforme/S. +varicocèle/S. +varicosité/S. +varier/a0p+ +variétale/W. +variété/S. +variole/S. +variolée/F. +varioleuse/W. +variolique/S. +variolisation/S. +variolite/S. +varioloïde/S. +variorum +variqueuse/W. +variscite/S. +varistance/S. +variure/S. +varlet/S. +varlope/S. +varloper/a0p+ +varoise/F. +varroa/S. +varron/S. +varsovienne/F. +varus +varve/S. +vasarde/F. +vasculaire/S. +vascularisation/S. +vascularisée/F. +vascularite/S. +vascularité/S. +vasculeuse/W. +vase/S. +vasectomie/S. +vaseline/S. +vaseliner/a0p+ +vaser/a8p. +vaseuse/W. +vasière/S. +vasistas +vasoconstriction/S. +vasoconstrictrice/F. +vasodilatation/S. +vasodilatatrice/F. +vasogénique/S. +vasomotrice/F. +vasomotricité/S. +vasopresseur/S. +vasopressine/S. +vasotomie/S. +vasouillarde/F. +vasouiller/a0p. +vasque/S. +vassale/W. +vassalique/S. +vassalisation/S. +vassaliser/a0p+ +vassalité/S. +vasselage/S. +vassiveau/X. +vaste/S. +vastement +vastité/S. +vastitude/S. +va-t-en-guerre +vaticane/S. +vaticanesque/S. +vaticaniste/S. +vaticination/S. +vaticinatrice/F. +vaticiner/a0p. +va-tout +vau/X. +vauchérie/S. +vauclusienne/F. +vaudeville/S. +vaudevillesque/S. +vaudevilliste/S. +vaudoise/F. +vaudou/S. +vaudoue/F. +vaudouisme/S. +vau-l'eau +vaurienne/F. +vautour/S. +vautrer/a0p+ +vauvert +vaux +vavasseur/S. +va-vite +vé/S. +veau/X. +vécés +vectorielle/F. +vectorisation/S. +vectoriser/a0p+ +vectrice/F. +vécu/S. +vedettariat/S. +vedette/S. +vedettisation/S. +vedika/S. +védique/S. +védisme/S. +végane/F. +véganisme/S. +végétabilité/S. +végétal/X. +végétale/W. +végétalienne/F. +végétalisation/S. +végétaliser/a0p+ +végétalisme/S. +végétaliste/S. +végétarienne/F. +végétarisme/S. +végétation/S. +végétative/F. +végétativement +végéter/c0p. +véhémence/S. +véhémente/F. +véhémentement +véhiculaire/S. +véhicule/S. +véhiculer/a0p+ +vehme/S. +vehmique/S. +veille/S. +veillée/S. +veiller/a0p+ +veilleuse/F. +veinarde/F. +veine/S. +veiner/a0p+ +veinette/S. +veineuse/W. +veinotonique/S. +veinotonique/S. +veinule/S. +veinure/S. +vêlage/S. +vélaire/S. +vélar/S. +vélarisation/S. +vélariser/a0p+ +velarium +vélarium/S. +velcro/S. +veld/S. +vélelle/S. +vêlement/S. +vêler/a0p+ +vélie/S. +véligère/S. +vélin/S. +véliplanchiste/S. +vélique/S. +vélite/S. +vélivole/S. +velléitaire/S. +velléité/S. +vélo/S. +véloce/S. +vélocement +vélocimètre/S. +vélocimétrie/S. +vélocimétrique/S. +vélocipède/S. +vélocipédique/S. +vélociraptor/S. +vélociste/S. +vélocité/S. +vélodrome/S. +vélomoteur/S. +vélo-pousse +véloroute/S. +vélo-ski +véloski/S. +vélos-skis +vélos-taxis +velot/S. +vélo-taxi +velours +velouté/S. +veloutement/S. +velouter/a0p+ +velouteuse/W. +veloutier/S. +veloutine/S. +velte/S. +velue/F. +velum +vélum/S. +velux +velvote/S. +venaison/S. +vénale/W. +vénalement +vénalité/S. +venante/F. +vendable/S. +vendange/S. +vendangeoir/S. +vendangeon/S. +vendanger/a0p+ +vendangerot/S. +vendangette/S. +vendangeuse/F. +vendéenne/F. +vendémiaire/S. +venderesse/S. +vendetta/S. +vendeuse/F. +vendre/tA +vendredi +vendredi/S. +vendue/F. +vénéfice/S. +venelle/S. +vénéneuse/W. +vénérable/S. +vénérablement +vénération/S. +vénéréologie/S. +vénéréologue/S. +vénérer/c0p+ +vénéricarde/S. +vénériculture/S. +vénerie/S. +vénérienne/F. +vénérologie/S. +vénérologue/S. +venet/S. +vénète/S. +vénète/S. +venette/S. +veneur/S. +vénézuélienne/F. +vengeance/S. +venger/a0p+ +vengeresse/F. +vengeron/S. +vénielle/F. +véniellement +venimeuse/W. +venimeusement +venimosité/S. +venin/S. +venir/i0q+ +vénitienne/F. +vent/S. +ventage/S. +ventail/X. +vente/S. +ventée/F. +venter/a8p. +venteuse/W. +ventilateur/S. +ventilation/S. +ventilatoire/S. +ventiler/a0p+ +ventileuse/S. +ventilo/S. +ventis +ventôse/S. +ventosité/S. +ventouse/S. +ventouser/a0p+ +ventrale/W. +ventralement +ventre/S. +ventrebleu +ventrèche/S. +ventrée/S. +ventriculaire/S. +ventricule/S. +ventrière/S. +ventriloque/S. +ventriloquie/S. +ventripotente/F. +ventrue/F. +venturi/S. +venue/S. +vénus +vénusienne/F. +vénusté/S. +vépéciste/S. +vêpres +ver/S. +véracité/S. +véraison/S. +véranda/S. +vératre/S. +vératrine/S. +verbale/W. +verbalement +verbalisable/S. +verbalisation/S. +verbaliser/a0p+ +verbalisme/S. +verbatim/S. +verbe/S. +verbénacée/S. +verbeuse/W. +verbeusement +verbiage/S. +verbiager/a0p. +verbicruciste/S. +verbigération/S. +verbomanie/S. +verboquet/S. +verbosité/S. +verdage/S. +verdâtre/S. +verdelette/F. +verdet/S. +verdeur/S. +verdict/S. +verdier/S. +verdir/f0p+ +verdissage/S. +verdissante/F. +verdissement/S. +verdoiement/S. +verdoyante/F. +verdoyer/a0p. +verdunisation/S. +verduniser/a0p+ +verdure/S. +verdurière/F. +vérétille/S. +véreuse/W. +verge/S. +vergée/F. +vergence/S. +vergeoise/S. +verger/S. +verger/a0p. +vergerette/S. +vergetée/F. +vergetière/F. +vergette/S. +vergeture/S. +vergeure/S. +verglaçante/F. +verglacée/F. +verglacer/a8p. +verglas +vergne/S. +vergobret/S. +vergogne/S. +vergogneuse/W. +vergue/S. +véridicité/S. +véridique/S. +véridiquement +vérifiabilité/S. +vérifiable/S. +vérification/S. +vérificative/F. +vérificatrice/F. +vérifier/a0p+ +vérifieuse/F. +vérin/S. +vérine/S. +vérisimilitude/S. +vérisme/S. +vériste/S. +véritable/S. +véritablement +vérité/S. +verjus +verjuter/a0p+ +verlan/S. +vermée/S. +vermeille/F. +vermet/S. +vermicelle/S. +vermicellerie/S. +vermicide/S. +vermicide/S. +vermiculaire/S. +vermicule/S. +vermiculée/F. +vermiculer/a0p. +vermiculite/S. +vermiculure/S. +vermiforme/S. +vermifuge/S. +vermifuge/S. +vermifuger/a0p+ +vermille/S. +vermiller/a0p. +vermillon +vermillon/S. +vermillonner/a0p+ +vermine/S. +vermineuse/W. +vermis +vermisseau/X. +vermivore/S. +vermouler/a0p+ +vermoulue/F. +vermoulure/S. +vermouth/S. +vernaculaire/S. +vernale/W. +vernalisation/S. +vernaliser/a0p+ +vernation/S. +vernier/S. +vernir/f0p+ +vernis +vernissage/S. +vernisser/a0p+ +vernisseuse/F. +vernissure/S. +vérole/S. +vérolée/F. +véroler/a0p+ +véronaise/F. +véronal/S. +véronique/S. +verranne/S. +verrat/S. +verre/S. +verrée/F. +verrée/S. +verrerie/S. +verrière/F. +verrine/S. +verroterie/S. +verrou/S. +verrouillable/S. +verrouillage/S. +verrouiller/a0p+ +verrouilleur/S. +verrucaire/S. +verrucosité/S. +verrue/S. +verruqueuse/W. +vers +vers +versaillaise/F. +versant/S. +versante/F. +versatile/S. +versatilité/S. +verse/S. +verseau/X. +versement/S. +verser/a0p+ +verset/S. +verseuse/F. +versicolore/S. +versicule/S. +versification/S. +versificatrice/F. +versifier/a0p+ +version/S. +versionnage/S. +versionner/a0p+ +vers-librisme/S. +vers-libriste/S. +verso/S. +versoir/S. +verste/S. +versus +vert-de-gris +vert-de-gris +vert-de-grisée/F. +verte/F. +vertébrale/W. +vertèbre/S. +vertébrée/F. +vertébrothérapie/S. +vertement +vertex +verticale/W. +verticalement +verticalisateur/S. +verticalisation/S. +verticaliser/a0p+ +verticalité/S. +verticille/S. +verticillée/F. +verticilliose/S. +verticillium/S. +vertige/S. +vertigineuse/W. +vertigineusement +vertigo/S. +vertisol/S. +vert-jaune +vertu/S. +vertubleu +vertuchou +vertudieu +vertueuse/W. +vertueusement +vertugadin/S. +verve/S. +verveine/S. +vervelle/S. +vervet/S. +verveuse/W. +verviétoise/F. +vésanie/S. +vésanique/S. +vesce/S. +vesceron/S. +vésicale/W. +vésicante/F. +vésication/S. +vésicatoire/S. +vésico-utérine/F. +vésiculaire/S. +vésicule/S. +vésiculeuse/W. +vesou/S. +vespa/S. +vespasienne/S. +vespérale/W. +vespertilion/S. +vespiste/S. +vesprée/S. +vesse/S. +vesse-de-loup +vesser/a0p. +vesses-de-loup +vessie/S. +vessigon/S. +vestale/S. +vestalies +veste/S. +vestiaire/S. +vestibulaire/S. +vestibule/S. +vestige/S. +vestigiale/W. +vestimentaire/S. +vestimentairement +veston/S. +vêtage/S. +vêtement/S. +vétérance/S. +vétérane/F. +vétérinaire/S. +vétérotestamentaire/S. +vétéro-testamentaire/S. +vététiste/S. +vétillarde/F. +vétille/S. +vétiller/a0p. +vétilleuse/W. +vêtir/iG +vétiver/S. +veto +vêture/S. +vétuste/S. +vétusté/S. +veuglaire/S. +veule/S. +veulerie/S. +veuvage/S. +veuve/F. +vévé/S. +veveysanne/F. +vexante/F. +vexation/S. +vexatoire/S. +vexatrice/F. +vexer/a0p+ +vexillaire/S. +vexillaire/S. +vexille/S. +vexillologie/S. +vexillologue/S. +vg/||-- +via +viabilisation/S. +viabiliser/a0p+ +viabilité/S. +viable/S. +viaduc/S. +viagère/F. +viagra/S. +viande/S. +viander/a0p+ +viatique/S. +vibice/S. +vibord/S. +vibrage/S. +vibrance/S. +vibrante/F. +vibraphone/S. +vibraphoniste/S. +vibrateur/S. +vibratile/S. +vibration/S. +vibrationnelle/F. +vibrato/S. +vibratoire/S. +vibrer/a0p+ +vibreur/S. +vibrion/S. +vibrionner/a0p. +vibrisse/S. +vibro/S. +vibromasseur/S. +vicaire/S. +vicariale/W. +vicariance/S. +vicariante/F. +vicariat/S. +vice/S. +vice-amiral/X. +vice-championne/F. +vice-chancelière/F. +vice-consul/S. +vice-consulat/S. +vicelarde/F. +vice-légat/S. +vice-légation/S. +vicennale/W. +vice-première/F. +vice-présidence/S. +vice-présidente/F. +vice-procureuse/F. +vice-rectrice/F. +vice-reine/S. +vice-roi/S. +vice-royauté/S. +vicésimale/W. +vice-versa +vichy/S. +vichyssoise/F. +vichyste/S. +viciable/S. +viciation/S. +viciatrice/F. +vicier/a0p+ +vicieuse/W. +vicieusement +vicinale/W. +vicinalité/S. +vicissitude/S. +vicomtale/W. +vicomté/S. +vicomtesse/F. +victimaire/S. +victimaire/S. +victime/S. +victime/S. +victimisante/F. +victimisation/S. +victimiser/a0p+ +victimisme/S. +victimologie/S. +victimologue/S. +victoire/S. +victoria/S. +victorienne/F. +victorieuse/W. +victorieusement +victuaille/S. +vidage/S. +vidame/S. +vidamie/S. +vidange/S. +vidanger/a0p+ +vidangeur/S. +vide/S. +vide/S. +vidéaste/S. +vide-bouteille/S. +vide-bouteilles +vide-cave +vide-cave/S. +vide-grenier/S. +videlle/S. +vidéo +vidéo/S. +vidéoagression/S. +vidéocassette/S. +vidéoclip/S. +vidéoclub/S. +vidéocommunication/S. +vidéoconférence/S. +vidéodescription/S. +vidéodisque/S. +vidéofréquence/S. +vidéogramme/S. +vidéographie/S. +vidéographique/S. +vidéoludique/S. +vidéophone/S. +vidéophonie/S. +vidéoprojecteur/S. +vidéoprojection/S. +vidéoprotection/S. +vidéo-protection/S. +vide-ordures +vidéosphère/S. +vidéosurveillance/S. +vidéotex +vidéothécaire/S. +vidéothèque/S. +vidéotransmission/S. +vide-poche/S. +vide-poches +vide-pomme +vide-pomme/S. +vider/a0p+ +vide-tourie +vide-tourie/S. +videuse/F. +vide-vite +vidienne/F. +vidimer/a0p+ +vidimus +vidoir/S. +vidrecome/S. +viduité/S. +vidure/S. +vie/S. +vieillarde/F. +vieille/W. +vieillerie/S. +vieillesse/S. +vieillir/f0p+ +vieillissante/F. +vieillissement/S. +vieillotte/F. +vièle/S. +vielle/S. +vieller/a0p. +vielleur/S. +vielleuse/W. +vielliste/S. +viennoise/F. +viennoiserie/S. +vierge/S. +vierge/S. +viétique/S. +vietnamienne/F. +vieux-lille +vif-argent +vif-argent +vigésimale/W. +vigie/S. +vigilamment +vigilance/S. +vigilante/F. +vigilantisme/S. +vigile/S. +vigiler/a0p+ +vigne/S. +vigneau/X. +vigneronne/F. +vignetage/S. +vignettage/S. +vignette/S. +vignettiste/S. +vigneture/S. +vignoble/S. +vignot/S. +vigogne/S. +vigoureuse/W. +vigoureusement +vigousse/S. +viguerie/S. +vigueur/S. +viguier/S. +viking/S. +vilaine/F. +vilainement +vilayet/S. +vile/F. +vilebrequin/S. +vilement +vilené/S. +vilenie/S. +vilipendage/S. +vilipender/a0p+ +vilipendeuse/F. +villa/S. +villafranchien/S. +villafranchienne/F. +village/S. +villageoise/F. +villagisation/S. +villanelle/S. +ville/S. +ville-champignon +ville-dortoir +villégiateur/S. +villégiature/S. +villégiaturer/a0p. +villes-champignons +villes-dortoirs +villeuse/W. +villosité/S. +vimaire/S. +vin/S. +vinage/S. +vinaigre/S. +vinaigrer/a0p+ +vinaigrerie/S. +vinaigrette/S. +vinaigrier/S. +vinaire/S. +vinasse/S. +vinblastine/S. +vindas +vindicative/F. +vindicativement +vindicte/S. +vinée/S. +viner/a0p+ +vinette/S. +vineuse/W. +vingt/S= +vingtaine/S. +vingt-cinq +vingt-cinquième/S. +vingt-deux +vingt-deuxième/S. +vingtenaire/S. +vingt-et-un +vingt-huit +vingt-huitième/S. +vingtième/S. +vingtièmement +vingt-neuf +vingt-neuvième/S. +vingt-quatre +vingt-quatrième/S. +vingt-sept +vingt-septième/S. +vingt-six +vingt-sixième/S. +vingt-trois +vingt-troisième/S. +vinicole/S. +viniculture/S. +vinifère/S. +vinification/S. +vinificatrice/F. +vinifier/a0p+ +vinique/S. +vinosité/S. +vintage +vintage/S. +vinyle/S. +vinylidénique/S. +vinylique/S. +vinylite/S. +vioc/S. +viol/S. +violable/S. +violacer/a0p+ +violat/S. +violation/S. +violâtre/S. +violatrice/F. +viole/S. +violemment +violence/S. +violente/F. +violenter/a0p+ +violer/a0p+ +violette/F. +violeuse/F. +violier/S. +violine/S. +violiste/S. +violon/S. +violoncelle/S. +violoncelliste/S. +violoner/a0p+ +violoneuse/W. +violoniste/S. +vioque/S. +vioquir/f0p. +viorne/S. +vipère/S. +vipereau/X. +vipéreau/X. +vipéridé/S. +vipérine/F. +vipérine/S. +virage/S. +virago/S. +virale/W. +viralité/S. +vire/S. +virée/S. +virelai/S. +virement/S. +virémie/S. +virer/a0p+ +virescence/S. +vireton/S. +vireuse/F. +vireuse/W. +virevoltante/F. +virevolte/S. +virevolter/a0p. +virginal/S. +virginale/W. +virginalement +virginie/S. +virginité/S. +virgule/S. +virguler/a0p+ +viride/S. +viridité/S. +virile/F. +virilement +virilisante/F. +virilisation/S. +viriliser/a0p+ +virilisme/S. +viriliste/S. +virilité/S. +virilocale/W. +virion/S. +virocide/S. +virocide/S. +viroïde/S. +virolage/S. +virole/S. +viroler/a0p+ +virolier/S. +virologie/S. +virologique/S. +virologiste/S. +virologue/S. +virophage/S. +virose/S. +virostatique/S. +virtualisation/S. +virtualiser/a0p+ +virtualisme/S. +virtualiste/S. +virtualité/S. +virtuelle/F. +virtuellement +virtuose/S. +virtuosisme/S. +virtuosité/S. +virucide/S. +virulence/S. +virulente/F. +virure/S. +virus +vis +visa/S. +visage/S. +visagisme/S. +visagiste/S. +vis-à-vis +vis-à-vis +viscache/S. +viscérale/W. +viscéralement +viscéralgie/S. +viscère/S. +viscoélasticité/S. +viscoélastique/S. +visco-élastique/S. +viscoréduction/S. +viscose/S. +viscosimètre/S. +viscosité/S. +visée/S. +viser/a0p+ +viseur/S. +viseuse/W. +visibilité/S. +visible/S. +visiblement +visière/S. +visiocasque/S. +visioconférence/S. +vision/S. +visionique/S. +visionnage/S. +visionnaire/S. +visionnement/S. +visionner/a0p+ +visionneuse/F. +visiophone/S. +visiophonie/S. +visiophonique/S. +visitable/S. +visitandine/S. +visitation/S. +visitatrice/F. +visite/S. +visiter/a0p+ +visiteuse/F. +visitorat/S. +visnage/S. +vison/S. +visonnière/S. +visqueuse/W. +vissage/S. +visser/a0p+ +visserie/S. +visseuse/S. +visu +visualisable/S. +visualisation/S. +visualiser/a0p+ +visualiseur/S. +visuelle/F. +visuellement +vit/S. +vitae +vitæ +vitale/W. +vitalement +vitalisation/S. +vitaliser/a0p+ +vitalisme/S. +vitaliste/S. +vitalité/S. +vitam +vitamine/S. +vitaminer/a0p+ +vitaminique/S. +vitaminisation/S. +vitaminologie/S. +vite +vite/S. +vitelline/F. +vitellus +vitelotte/S. +vitement +vitesse/S. +viticole/S. +viticultrice/F. +viticulture/S. +vitiligo/S. +vitivinicole/S. +vitrage/S. +vitrail/X. +vitre/S. +vitrectomie/S. +vitrer/a0p+ +vitrerie/S. +vitreuse/W. +vitrière/F. +vitrifiabilité/S. +vitrifiable/S. +vitrification/S. +vitrificative/F. +vitrificatrice/F. +vitrifier/a0p+ +vitrine/S. +vitriol/S. +vitriolage/S. +vitrioler/a0p+ +vitriolerie/S. +vitrioleuse/F. +vitriolique/S. +vitro +vitrocéramique/S. +vitrophanie/S. +vitroplant/S. +vitropression/S. +vitruvienne/F. +vitulaire/S. +vitupération/S. +vitupératrice/F. +vitupérer/c0p+ +vivable/S. +vivace/S. +vivacité/S. +vivandière/F. +vivante/F. +vivarium/S. +vivat/S. +vive/F. +vive/S. +vive-arête +vive-eau +vivement +vivendi +viverridé/S. +viverrine/F. +vives-arêtes +vives-eaux +viveuse/F. +vivianite/S. +vividité/S. +vivier/S. +vivifiante/F. +vivification/S. +vivificatrice/F. +vivifier/a0p+ +vivipare/S. +viviparité/S. +vivisection/S. +vivo +vivoir/S. +vivoter/a0p. +vivre/S. +vivre/xSq+ +vivrée/F. +vivre-ensemble +vivrière/F. +vizir/S. +vizirat/S. +vlan +vobulateur/S. +vocable/S. +vocabulaire/S. +vocale/W. +vocalement +vocalique/S. +vocalisation/S. +vocalisatrice/F. +vocalise/S. +vocaliser/a0p+ +vocalisme/S. +vocaliste/S. +vocalité/S. +vocatif/S. +vocation/S. +vocationnelle/F. +voceratrice/S. +vocero/I. +vociférante/F. +vocifération/S. +vocifératrice/F. +vociférer/c0p+ +vocodeur/S. +vodka/S. +vœu/X. +vogelpik/S. +vogoule/F. +vogoule/S. +vogue/S. +voguer/a0p. +voici +voie/S. +voïévodie/S. +voilà +voilage/S. +voile/S. +voilement/S. +voiler/a0p+ +voilerie/S. +voilette/S. +voilier/S. +voilure/S. +voir/pFpG +voire +voirie/S. +voisée/F. +voisement/S. +voisinage/S. +voisine/F. +voisiner/a0p. +voiturage/S. +voiture/S. +voiturée/S. +voiturer +voiture-restaurant +voitures-restaurants +voiturette/S. +voiturière/F. +voiturin/S. +voïvodat/S. +voïvode/S. +voïvodie/S. +voix +vol/S. +volable/S. +volage/S. +volaille/S. +volailler/S. +volailleuse/F. +volant/S. +volante/F. +volapük/S. +volatile/F. +volatile/S. +volatilisable/S. +volatilisation/S. +volatiliser/a0p+ +volatilité/S. +vol-au-vent +volcan/S. +volcanique/S. +volcaniser/a0p+ +volcanisme/S. +volcanologie/S. +volcanologique/S. +volcanologue/S. +vole/S. +volée/S. +volémie/S. +voler/a0p+ +volerie/S. +volet/S. +voleter/d0p. +volettement/S. +voleuse/F. +volière/S. +volige/S. +voligeage/S. +voliger/a0p+ +volis +volition/S. +volitionnelle/F. +volitive/F. +volley/S. +volleyball/S. +volley-ball/S. +volleyer/a0p. +volleyeuse/F. +volontaire/S. +volontairement +volontariat/S. +volontarisme/S. +volontariste/S. +volonté/S. +volontiers +volontourisme/S. +volorécepteur/S. +volt/Um +voltage/S. +voltaïque/S. +voltaire/S. +voltairianisme/S. +voltairienne/F. +voltaïsation/S. +voltamètre/S. +voltampère/Um +voltampérométrie/S. +volte/S. +volte-face +volter/a0p. +voltige/S. +voltigeante/F. +voltigement/S. +voltiger/a0p. +voltigeuse/F. +voltmètre/S. +volubile/S. +volubilement +volubilis +volubilité/S. +volucelle/S. +volucompteur/S. +volumatrice/F. +volume/S. +volumétrie/S. +volumétrique/S. +volumineuse/W. +volumique/S. +volupté/S. +voluptuaire/S. +voluptueuse/W. +voluptueusement +volute/S. +volvaire/S. +volvation/S. +volve/S. +volvox +volvulus +vomer/S. +vomérienne/F. +vomique/S. +vomique/S. +vomiquier/S. +vomir/f0p+ +vomissement/S. +vomissure/S. +vomitive/F. +vomito/S. +vomitoire/S. +vomito-negro +vorace/S. +voracement +voracité/S. +vortex +vorticelle/S. +vos +vosgienne/F. +voszigues +votante/F. +votation/S. +vote/S. +voter/a0p+ +voteuse/F. +votive/F. +votre +vôtre/S. +vouer/a0p+ +vouge/S. +vouivre/S. +vouloir/S. +vouloir/pB +vous +vous +vous-même +vous-mêmes +vousseau/X. +voussoiement/S. +voussoir/S. +voussoyer/a0p+ +voussure/S. +voûtain/S. +voûte/S. +voûter/a0p+ +vouvoiement/S. +vouvoyer/a0p+ +vouvray/S. +vox +voxographie/S. +voyage/S. +voyager/a0p. +voyageuse/F. +voyagiste/S. +voyance/S. +voyante/F. +voyelle/S. +voyer/S. +voyeurisme/S. +voyeuriste/S. +voyeuse/F. +voyou/S. +voyou/S. +voyoucratie/S. +voyouterie/S. +vrac +vrai +vraie/F. +vraiment +vraisemblable/S. +vraisemblablement +vraisemblance/S. +vraquier/S. +vreneli/S. +vrillage/S. +vrillante/F. +vrille/S. +vrillement/S. +vriller/a0p+ +vrillette/S. +vrombir/f0p. +vrombissante/F. +vrombissement/S. +vroum +vs +vu +vue/F. +vulcain/S. +vulcanales +vulcanienne/F. +vulcanisable/S. +vulcanisation/S. +vulcaniser/a0p+ +vulcanoïde/S. +vulcanologie/S. +vulcanologue/S. +vulgaire/S. +vulgaire/S. +vulgairement +vulganiser/a0p+ +vulgarisation/S. +vulgarisatrice/F. +vulgariser/a0p+ +vulgarisme/S. +vulgarité/S. +vulgate/S. +vulgo +vulnérabiliser/a0p+ +vulnérabilité/S. +vulnérable/S. +vulnéraire/S. +vulnérante/F. +vulpin/S. +vultueuse/W. +vultuosité/S. +vulvaire/S. +vulvaire/S. +vulve/S. +vulvite/S. +vulvovaginite/S. +vulvo-vaginite/S. +vumètre/S. +vuvuzela/S. +w +wading/S. +wagage/S. +wagnérienne/F. +wagnérisme/S. +wagon/S. +wagon-bar +wagon-citerne +wagon-foudre +wagon-lit +wagonnée/S. +wagonnet/S. +wagonnette/S. +wagonnière/F. +wagon-poste +wagon-réservoir +wagon-restaurant +wagon-salon +wagons-bars +wagons-citernes +wagons-foudres +wagons-lits +wagons-poste +wagons-réservoirs +wagons-restaurants +wagons-salons +wagons-tombereaux +wagons-trémies +wagons-vannes +wagon-tombereau +wagon-trémie +wagon-vanne +wahhabisme/S. +wahhabite/S. +wah-wah +wai/S. +wakizashi/S. +walkies-talkies +walkie-talkie +walkman/S. +walk-over +walkyrie/S. +wall/S. +wallaby/A. +wallingante/F. +wallonisme/S. +wallonne/F. +waouh +wapiti/S. +wargame/S. +warning/S. +warrant/S. +warrantage/S. +warranter/a0p+ +wasabi/S. +washingtonia/S. +washingtonienne/F. +wassingue/S. +water-ballast/S. +water-closet/S. +watergang/S. +wateringue/S. +water-polo/S. +waterproof +waters +waterzoï/S. +waterzooi/S. +watt/Um +wattheure/Um +wattman/A. +wattmètre/S. +wax +wayang/S. +web +web +webcam/S. +webcaméra/S. +webdesign/S. +weber/Um +weblog/S. +webmestre/S. +webmestrie/S. +webographie/S. +webradio/S. +websérie/S. +web-série/S. +webtélé/S. +webzine/S. +weed/S. +week-end/S. +welche/S. +wellingtonia/S. +welsche/S. +weltanschauung/S. +welter/S. +welwitschia/S. +wergeld/S. +wesleyenne/F. +western/S. +westphalienne/F. +weyr/S. +wharf/S. +whig/S. +whipcord/S. +whippet/S. +whisky/A. +whist/S. +white-spirit/S. +wicca/S. +wiccane/F. +widget/S. +wienerli/S. +wifi/S. +wifi/S. +wigwam/S. +wiki/S. +wilaya/S. +willémite/S. +williamine/S. +williams +winch/A. +winchester/S. +windsurf/S. +winstub/S. +wintergreen/S. +wishbone/S. +wisigothe/F. +wisigothique/S. +witloof/S. +wok/S. +wolfram/S. +wollastonite/S. +wolofe/F. +wolophiser/a0p+ +wombat/S. +won/S. +woofer/S. +wormien/S. +wu/S. +wulfénite/S. +würmienne/F. +wurtembergeoise/F. +wurtzite/S. +wushu/S. +www/||-- +wyandotte/S. +wyandotte/S. +x +xanthate/S. +xanthélasma/S. +xanthie/S. +xanthine/S. +xanthique/S. +xanthium/S. +xanthoderme/S. +xanthogénate/S. +xanthogénique/S. +xanthome/S. +xanthophycée/S. +xanthophylle/S. +xanthopsie/S. +xénarthre/S. +xénélasie/S. +xénisme/S. +xénobiotique/S. +xénocristal/X. +xénodevise/S. +xénogreffe/S. +xénolite/S. +xénolithe/S. +xénomorphe/S. +xénon/S. +xénophile/S. +xénophilie/S. +xénophobe/S. +xénophobie/S. +xénoplastique/S. +xénotime/S. +xénotransplantation/S. +xéranthème/S. +xérès +xérocopie/S. +xérodermie/S. +xérographie/S. +xérographique/S. +xérophile/S. +xérophtalmie/S. +xérophyte/S. +xérophytique/S. +xérostomie/S. +xérus +xhosa/S. +xi +xiang/S. +x-ième/S. +xiloïdine/S. +ximenia/S. +ximénie/S. +xingyiquan/S. +xinyiliuhequan/S. +xiphias +xipho/S. +xiphoïde/S. +xiphoïdienne/F. +xiphophore/S. +xiphosure/S. +xylème/S. +xylène/S. +xylidine/S. +xylitol/S. +xylocope/S. +xyloglossie/S. +xyloglotte/S. +xyloglotte/S. +xyloglotter/a0p. +xyloglucane/S. +xylographe/S. +xylographie/S. +xylographique/S. +xylol/S. +xylologie/S. +xylophage/S. +xylophagie/S. +xylophène/S. +xylophone/S. +xylophoniste/S. +xylopia/S. +xylose/S. +xylostome/S. +xyste/S. +y +y/Q'Q*n'd'j'l'm't's' +yacht/S. +yacht-club/S. +yachting/S. +yachtman/A. +yachtsman/A. +yachtswoman/A. +yachtwoman/A. +yack/S. +yak/S. +yakitori/S. +yakuza/S. +yang +yankee/S. +yaoi/S* +yaourt/S. +yaourtière/S. +yapock/S. +yard/S. +yatagan/S. +yawl/S. +yd/||-- +yearling/S. +yèble/S. +yéménite/S. +yen/S. +yeoman/A. +yeomanry/A. +yersinia/S. +yersiniose/S. +yeti/S. +yéti/S. +yeuse/S* +yeux/D'Q' +yé-yé +yézidie/F. +yézidisme/S. +yiddish +yiddish +yin +ylangs-ylangs/D'Q' +ylang-ylang/L'D'Q' +yobibit/S. +yobioctet/S. +yod/S. +yodisation/S. +yodiser/a0p+ +yodler/a0p. +yoga/S. +yoghi/S. +yoghourt/S. +yogi/S. +yogourt/S. +yohimbehe/S. +yohimbine/S. +yole/S. +yorkshire/S. +yorkshire-terrier/S. +yottabit/S. +yottaoctet/S. +yougoslave/S. +youpi +youpie +youpine/F. +yourte/S. +youtubeuse/F. +youyou/S. +youyouter/a0p. +yo-yo +yoyoter/a0p. +yoyotter/a0p. +ypérite/S* +ypréau/X* +ysopet/S* +ytterbine/S* +ytterbium/S* +yttria/S* +yttrialite/S* +yttrifère/S* +yttrique/S* +yttrium/S* +yuan/S. +yucca/S. +yuppie/S. +yuzu/S. +yvelinoise/F* +z +zabre/S. +zadiste/S. +zaibatsu/S. +zain/S. +zaïroise/F. +zakât/S. +zakouski +zakouski/S. +zamak/S. +zambienne/F. +zamia/S. +zancle/S. +zani/S. +zanni/S. +zanzi/S. +zanzibar/S. +zaouïa/S. +zapateado/S. +zapatiste/S. +zapotèque/S. +zapper/a0p+ +zappette/S. +zappeuse/F. +zapping/S. +zarabe/S. +zarbi/S. +zarzuela/S. +zawiya/S. +zaydite/S. +zazoue/F. +zébibit/S. +zébioctet/S. +zèbre/S. +zébrer/c0p+ +zébrure/S. +zébu/S. +zée/S. +zéine/S. +zeitgeist/S. +zeitnot/S. +zélandaise/F. +zélatrice/F. +zèle/S. +zélée/F. +zellige/S. +zélote/S. +zemstvo/S. +zen +zen/S. +zenana/S. +zénana/S. +zende/F. +zénith/S. +zénithale/W. +zénitude/S. +zéolite/S. +zéolithe/S. +zéphyr/S. +zéphyrienne/F. +zéphyrine/S. +zeppelin/S. +zéro +zéro/S. +zéroième/S. +zérotage/S. +zérumbet/S. +zerver/a0p+ +zeste/S. +zester/a0p+ +zêta +zétète/S. +zététicienne/F. +zététique/S. +zététique/S. +zettabit/S. +zettaoctet/S. +zeugma/S. +zeugme/S. +zeuzère/S. +zézaiement/S. +zézayer/a0p. +zibeline/S. +ziber/a0p+ +zidovudine/S. +zieuter/a0p+ +zig/S. +ziggourat/S. +zigomar/S. +zigonner/a0p. +zigoteau/X. +zigoto/S. +zigouigoui/S. +zigouillage/S. +zigouiller/a0p+ +zigounette/S. +zigue/S. +ziguer/a0p+ +zigzag/S. +zigzagante/F. +zigzaguer/a0p. +zimbabwéenne/F. +zinc/S. +zincage/S. +zincate/S. +zincifère/S. +zincique/S. +zincographie/S. +zincogravure/S. +zingage/S. +zingara/S. +zingaro/I. +zingibéracée/S. +zingibérale/S. +zingue/S. +zinguer/a0p+ +zinguerie/S. +zingueuse/F. +zinjanthrope/S. +zinneke/S. +zinnia/S. +zinzin/S. +zinzin/S. +zinzinuler/a0p. +zinzoline/F. +zip/S. +zipper/a0p+ +zircaloy/S. +zircon/S. +zircone/S. +zirconite/S. +zirconium/S. +zizanie/S. +zizi/S. +zloty/S. +zoanthaire/S. +zoanthropie/S. +zob/S. +zodiac/S. +zodiacale/W. +zodiaque/S. +zoé/S. +zoécie/S. +zoïde/S. +zoïle/S. +zoïsite/S. +zombi/S. +zombie/S. +zombiesque/S. +zombifier/a0p+ +zona/S. +zonage/S. +zonale/W. +zonalité/S. +zonarde/F. +zonation/S. +zone/S. +zoner/a0p+ +zonière/F. +zoning/S. +zonoèdre/S. +zonule/S. +zonure/S. +zonzonner/a0p. +zoo/S. +zooanthroponose/S. +zoochorie/S. +zoogamète/S. +zoogéographie/S. +zooglée/S. +zooïde/S. +zooïde/S. +zoolâtre/S. +zoolâtrie/S. +zoolâtrique/S. +zoolite/S. +zoolithe/S. +zoologie/S. +zoologique/S. +zoologiquement +zoologiste/S. +zoologue/S. +zoom/S. +zoomable/S. +zoomer/a0p+ +zoomorphe/S. +zoomorphisme/S. +zoonomie/S. +zoonose/S. +zoonotique/S. +zoopathie/S. +zoopathique/S. +zoophage/S. +zoophagie/S. +zoopharmacognosie/S. +zoophile/S. +zoophilie/S. +zoophobie/S. +zoophore/S. +zoophyte/S. +zooplancton/S. +zoopsie/S. +zoosémiotique/S. +zoosporange/S. +zoospore/S. +zootaxie/S. +zootechnicienne/F. +zootechnie/S. +zootechnique/S. +zoothérapeute/S. +zoothérapeutique/S. +zoothérapie/S. +zooxanthelle/S. +zoreille/S. +zorille/S. +zoroastrienne/F. +zoroastrisme/S. +zostère/S. +zostérienne/F. +zou +zouave/S. +zouaver/a0p+ +zouglou/S. +zouk/S. +zouker/a0p. +zouloue/F. +zozo/S. +zozotement/S. +zozoter/a0p. +zozoteuse/F. +zucchette/S. +zuchette/S. +zugzwang/S. +zûner/a0p. +zurichoise/F. +zut +zutique/S. +zutiste/S. +zwanze/S. +zwanzer/a0p. +zwanzeuse/F. +zwieback/S. +zwinglianisme/S. +zyeuter/a0p+ +zygène/S. +zygnéma/S. +zygnémale/S. +zygodactyle/S. +zygoma/S. +zygomatique/S. +zygomorphe/S. +zygomycète/S. +zygopétale/S. +zygopetalum/S. +zygoptère/S. +zygospore/S. +zygote/S. +zygotique/S. +zyklon/S. +zymase/S. +zymogène/S. +zymotechnie/S. +zymotique/S. +zython/S. +zythum/S. +zzzz +µR/||-- +µas/||-- +ásatrú/S* +Δt +Ω/U.||-- +α +β +γ +δ +ε +ζ +η +θ +ι +κ +λ +μ +ν +ξ +ο +π +ρ +σ +τ +υ +φ +χ +ψ +ω +ℓ/U.||-- +Ω/U.||-- diff --git a/config/Typora/typora-old.log b/config/Typora/typora-old.log new file mode 100644 index 0000000..7e1152f --- /dev/null +++ b/config/Typora/typora-old.log @@ -0,0 +1,8799 @@ +INFO 3/6/2026, 9:56:23 AM 184 launch with argv [/usr/share/typora/Typora] +INFO 3/6/2026, 9:56:24 AM 1076 ------------------start------------------ +DEBUG 3/6/2026, 9:56:25 AM 1227 before setting +DEBUG 3/6/2026, 9:56:25 AM 1281 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/6/2026, 9:56:25 AM 1287 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/6/2026, 9:56:25 AM 1291 OS is linux 6.18.13-arch1-1 +INFO 3/6/2026, 9:56:25 AM 1291 start LM in devVersion=false +DEBUG 3/6/2026, 9:56:25 AM 1306 after setting +INFO 3/6/2026, 9:56:25 AM 1306 typora version: 1.12.4 +INFO 3/6/2026, 9:56:25 AM 1396 [watch L] +DEBUG 3/6/2026, 9:56:25 AM 1396 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/6/2026, 9:56:25 AM 1425 pure = undefined +INFO 3/6/2026, 9:56:25 AM 1425 renew +DEBUG 3/6/2026, 9:56:25 AM 1425 [renewLicense] license renewed in 12h +DEBUG 3/6/2026, 9:56:25 AM 1425 [L] pass +DEBUG 3/6/2026, 9:56:25 AM 1426 trailRemains is 0 +INFO 3/6/2026, 9:56:25 AM 1426 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/6/2026, 9:56:25 AM 1426 [watch L] hasL: true +DEBUG 3/6/2026, 9:56:25 AM 1441 app.openFile +DEBUG 3/6/2026, 9:56:25 AM 1531 added recovery 1 null (0) +DEBUG 3/6/2026, 9:56:25 AM 1542 putAccelerator File -> &Fichier +DEBUG 3/6/2026, 9:56:25 AM 1542 putAccelerator Edit -> Édit&er +DEBUG 3/6/2026, 9:56:25 AM 1543 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/6/2026, 9:56:25 AM 1543 putAccelerator Format -> F&ormat +DEBUG 3/6/2026, 9:56:25 AM 1543 putAccelerator View -> Présentation(&V) +DEBUG 3/6/2026, 9:56:25 AM 1544 putAccelerator Themes -> &Thèmes +DEBUG 3/6/2026, 9:56:25 AM 1544 putAccelerator Help -> Aide(&H) +INFO 3/6/2026, 9:56:25 AM 1647 synced recovery +INFO 3/6/2026, 9:56:26 AM 2584 [focus] 1 +ERROR 3/6/2026, 9:56:26 AM 2854 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/6/2026, 9:56:26 AM 2859 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/6/2026, 9:56:26 AM 2865 handle document.loadData +DEBUG 3/6/2026, 9:56:26 AM 2865 document.loadData 0 +INFO 3/6/2026, 9:56:26 AM 2949 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 9:56:26 AM 2950 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/6/2026, 9:56:26 AM 2972 added recovery 1 (0) +INFO 3/6/2026, 9:56:26 AM 2976 synced recovery +INFO 3/6/2026, 9:56:27 AM 3239 [RenderProcess 1][Log] onBecomeActive +INFO 3/6/2026, 9:56:27 AM 3239 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/6/2026, 9:56:33 AM 9305 app.openFile +INFO 3/6/2026, 9:56:33 AM 9317 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md] +INFO 3/6/2026, 9:56:33 AM 9317 addRecentDocument +DEBUG 3/6/2026, 9:56:33 AM 9325 added recovery 1 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 9:56:33 AM 9327 synced recovery +INFO 3/6/2026, 9:56:33 AM 9332 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 9:56:33 AM 9336 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 9:56:33 AM 9336 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 9:56:33 AM 9339 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md +DEBUG 3/6/2026, 9:56:33 AM 9526 added recovery 1 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 9:56:33 AM 9528 synced recovery +INFO 3/6/2026, 9:57:08 AM 44825 [blur] 1 +INFO 3/6/2026, 9:57:08 AM 44825 [win] blur +INFO 3/6/2026, 9:59:38 AM 194294 [RenderProcess 1][Log] presentedItemChanged, path is 750171600 +INFO 3/6/2026, 9:59:38 AM 194296 [RenderProcess 1][Log] getDataFromFile +INFO 3/6/2026, 9:59:38 AM 194296 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md +INFO 3/6/2026, 9:59:38 AM 194434 [RenderProcess 1][Log] presentedItemChanged did happen +INFO 3/6/2026, 9:59:38 AM 194435 [RenderProcess 1][Log] doHandlerPresentedItemChange +INFO 3/6/2026, 9:59:38 AM 194565 [RenderProcess 1][Log] getDataFromFile +INFO 3/6/2026, 9:59:38 AM 194566 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md +INFO 3/6/2026, 9:59:38 AM 194575 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true} +INFO 3/6/2026, 9:59:38 AM 194618 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/6/2026, 9:59:48 AM 204810 added recovery 1 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 9:59:48 AM 204830 synced recovery +INFO 3/6/2026, 10:01:10 AM 286917 [RenderProcess 1][Log] presentedItemChanged, path is 750171600 +INFO 3/6/2026, 10:01:10 AM 286918 [RenderProcess 1][Log] getDataFromFile +INFO 3/6/2026, 10:01:10 AM 286918 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md +INFO 3/6/2026, 10:01:10 AM 286921 [RenderProcess 1][Log] presentedItemChanged did happen +INFO 3/6/2026, 10:01:10 AM 286921 [RenderProcess 1][Log] doHandlerPresentedItemChange +INFO 3/6/2026, 10:01:10 AM 286922 [RenderProcess 1][Log] getDataFromFile +INFO 3/6/2026, 10:01:10 AM 286922 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md +INFO 3/6/2026, 10:01:10 AM 286924 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true} +INFO 3/6/2026, 10:01:10 AM 286930 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 10:01:16 AM 292904 [focus] 1 +DEBUG 3/6/2026, 10:01:17 AM 293508 added recovery 1 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 10:01:17 AM 293517 synced recovery +INFO 3/6/2026, 10:01:18 AM 294120 synced recovery +INFO 3/6/2026, 10:01:18 AM 294120 ----------------before-quit----------------- +INFO 3/6/2026, 10:01:18 AM 294120 ------------------will-quit------------------ +INFO 3/6/2026, 10:01:18 AM 294141 -----------------quit------------------ +INFO 3/6/2026, 10:01:18 AM 294141 closeLogging +INFO 3/6/2026, 10:11:36 AM 153 launch with argv [/usr/share/typora/Typora] +INFO 3/6/2026, 10:11:37 AM 581 ------------------start------------------ +DEBUG 3/6/2026, 10:11:37 AM 726 before setting +DEBUG 3/6/2026, 10:11:37 AM 791 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/6/2026, 10:11:37 AM 844 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/6/2026, 10:11:37 AM 1069 OS is linux 6.18.13-arch1-1 +INFO 3/6/2026, 10:11:37 AM 1069 start LM in devVersion=false +DEBUG 3/6/2026, 10:11:37 AM 1223 after setting +INFO 3/6/2026, 10:11:37 AM 1223 typora version: 1.12.4 +user-dict.json not found +INFO 3/6/2026, 10:11:37 AM 1323 [watch L] +DEBUG 3/6/2026, 10:11:37 AM 1323 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/6/2026, 10:11:37 AM 1334 pure = undefined +INFO 3/6/2026, 10:11:37 AM 1335 renew +DEBUG 3/6/2026, 10:11:37 AM 1335 [renewLicense] license renewed in 12h +DEBUG 3/6/2026, 10:11:37 AM 1335 [L] pass +DEBUG 3/6/2026, 10:11:37 AM 1335 trailRemains is 0 +INFO 3/6/2026, 10:11:37 AM 1335 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/6/2026, 10:11:37 AM 1335 [watch L] hasL: true +DEBUG 3/6/2026, 10:11:37 AM 1349 app.openFile +DEBUG 3/6/2026, 10:11:38 AM 1646 added recovery 1 null (0) +DEBUG 3/6/2026, 10:11:38 AM 1658 putAccelerator File -> &Fichier +DEBUG 3/6/2026, 10:11:38 AM 1659 putAccelerator Edit -> Édit&er +DEBUG 3/6/2026, 10:11:38 AM 1660 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/6/2026, 10:11:38 AM 1661 putAccelerator Format -> F&ormat +DEBUG 3/6/2026, 10:11:38 AM 1661 putAccelerator View -> Présentation(&V) +DEBUG 3/6/2026, 10:11:38 AM 1662 putAccelerator Themes -> &Thèmes +DEBUG 3/6/2026, 10:11:38 AM 1662 putAccelerator Help -> Aide(&H) +INFO 3/6/2026, 10:11:38 AM 1744 synced recovery +INFO 3/6/2026, 10:11:39 AM 2709 [focus] 1 +ERROR 3/6/2026, 10:11:39 AM 3338 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/6/2026, 10:11:39 AM 3342 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/6/2026, 10:11:39 AM 3343 handle document.loadData +DEBUG 3/6/2026, 10:11:39 AM 3343 document.loadData 0 +INFO 3/6/2026, 10:11:39 AM 3443 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 10:11:39 AM 3443 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/6/2026, 10:11:39 AM 3467 added recovery 1 (0) +INFO 3/6/2026, 10:11:39 AM 3470 synced recovery +INFO 3/6/2026, 10:11:40 AM 3832 [RenderProcess 1][Log] onBecomeActive +INFO 3/6/2026, 10:11:40 AM 3833 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 10:11:40 AM 4343 [blur] 1 +INFO 3/6/2026, 10:11:40 AM 4343 [win] blur +INFO 3/6/2026, 10:11:50 AM 13798 [focus] 1 +DEBUG 3/6/2026, 10:11:57 AM 20540 app.openFile +INFO 3/6/2026, 10:11:57 AM 20573 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md] +INFO 3/6/2026, 10:11:57 AM 20574 addRecentDocument +DEBUG 3/6/2026, 10:11:57 AM 20602 added recovery 1 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 10:11:57 AM 20620 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 10:11:57 AM 20636 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 10:11:57 AM 20638 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 10:11:57 AM 20647 synced recovery +INFO 3/6/2026, 10:11:57 AM 20655 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md +DEBUG 3/6/2026, 10:11:57 AM 20944 added recovery 1 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 10:11:57 AM 20950 synced recovery +ERROR 3/6/2026, 10:11:59 AM 23485 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/6/2026, 10:11:59 AM 23486 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/6/2026, 10:12:40 AM 64534 [blur] 1 +INFO 3/6/2026, 10:12:40 AM 64534 [win] blur +INFO 3/6/2026, 10:13:03 AM 86633 [focus] 1 +INFO 3/6/2026, 10:13:06 AM 90185 [blur] 1 +INFO 3/6/2026, 10:13:06 AM 90185 [win] blur +INFO 3/6/2026, 10:14:14 AM 157671 [focus] 1 +INFO 3/6/2026, 10:14:17 AM 160622 [blur] 1 +INFO 3/6/2026, 10:14:17 AM 160622 [win] blur +DEBUG 3/6/2026, 10:14:17 AM 160816 added recovery 1 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 10:14:17 AM 160817 synced recovery +INFO 3/6/2026, 10:14:17 AM 161353 [focus] 1 +INFO 3/6/2026, 10:14:22 AM 166281 [blur] 1 +INFO 3/6/2026, 10:14:22 AM 166281 [win] blur +INFO 3/6/2026, 10:14:23 AM 167001 [focus] 1 +DEBUG 3/6/2026, 10:14:32 AM 176211 added recovery 1 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 10:14:32 AM 176211 synced recovery +DEBUG 3/6/2026, 10:14:36 AM 180513 added recovery 1 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 10:14:36 AM 180514 synced recovery +DEBUG 3/6/2026, 10:14:38 AM 182076 added recovery 1 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 10:14:38 AM 182077 synced recovery +DEBUG 3/6/2026, 10:14:40 AM 184201 added recovery 1 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 10:14:40 AM 184202 synced recovery +DEBUG 3/6/2026, 10:14:42 AM 185697 added recovery 1 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 10:14:42 AM 185698 synced recovery +DEBUG 3/6/2026, 10:14:46 AM 190251 added recovery 1 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 10:14:46 AM 190252 synced recovery +INFO 3/6/2026, 10:14:47 AM 190792 [blur] 1 +INFO 3/6/2026, 10:14:47 AM 190792 [win] blur +INFO 3/6/2026, 10:16:22 AM 286027 [focus] 1 +INFO 3/6/2026, 10:16:28 AM 292008 load file [/tmp/Typora/1772788588318-0.6019080288664935.html] for PDF export +INFO 3/6/2026, 10:16:28 AM 292167 [blur] 1 +INFO 3/6/2026, 10:16:28 AM 292168 [win] blur +INFO 3/6/2026, 10:16:28 AM 292490 generate print window with id [2] for [content] +INFO 3/6/2026, 10:16:29 AM 293142 got PDF data +INFO 3/6/2026, 10:16:29 AM 293146 get background color +INFO 3/6/2026, 10:16:29 AM 293305 load file [/tmp/Typora/1772788589744-1.html] for PDF export +INFO 3/6/2026, 10:16:29 AM 293390 generate print window with id [3] for [header] +INFO 3/6/2026, 10:16:30 AM 293648 got PDF data +INFO 3/6/2026, 10:16:30 AM 293651 get background color +INFO 3/6/2026, 10:16:30 AM 293710 load file [/tmp/Typora/1772788590142-2.html] for PDF export +INFO 3/6/2026, 10:16:30 AM 293803 generate print window with id [4] for [footer] +INFO 3/6/2026, 10:16:30 AM 294062 got PDF data +INFO 3/6/2026, 10:16:30 AM 294066 get background color +INFO 3/6/2026, 10:16:33 AM 297104 [RenderProcess 1][Log] export PDF to /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.pdf +INFO 3/6/2026, 10:16:33 AM 297192 [focus] 1 +INFO 3/6/2026, 10:16:36 AM 300046 synced recovery +INFO 3/6/2026, 10:16:36 AM 300046 ----------------before-quit----------------- +INFO 3/6/2026, 10:16:36 AM 300046 ------------------will-quit------------------ +INFO 3/6/2026, 10:16:36 AM 300051 -----------------quit------------------ +INFO 3/6/2026, 10:16:36 AM 300051 closeLogging +INFO 3/6/2026, 10:18:06 AM 53 launch with argv [/usr/share/typora/Typora] +INFO 3/6/2026, 10:18:06 AM 599 ------------------start------------------ +DEBUG 3/6/2026, 10:18:06 AM 610 before setting +DEBUG 3/6/2026, 10:18:06 AM 648 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/6/2026, 10:18:06 AM 655 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/6/2026, 10:18:06 AM 662 OS is linux 6.18.13-arch1-1 +INFO 3/6/2026, 10:18:06 AM 662 start LM in devVersion=false +DEBUG 3/6/2026, 10:18:06 AM 683 after setting +INFO 3/6/2026, 10:18:06 AM 683 typora version: 1.12.4 +INFO 3/6/2026, 10:18:06 AM 777 [watch L] +DEBUG 3/6/2026, 10:18:06 AM 777 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/6/2026, 10:18:06 AM 781 pure = undefined +INFO 3/6/2026, 10:18:06 AM 781 renew +DEBUG 3/6/2026, 10:18:06 AM 781 [renewLicense] license renewed in 12h +DEBUG 3/6/2026, 10:18:06 AM 781 [L] pass +DEBUG 3/6/2026, 10:18:06 AM 781 trailRemains is 0 +INFO 3/6/2026, 10:18:06 AM 781 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/6/2026, 10:18:06 AM 781 [watch L] hasL: true +user-dict.json not found +DEBUG 3/6/2026, 10:18:06 AM 799 app.openFile +DEBUG 3/6/2026, 10:18:06 AM 801 putAccelerator File -> &Fichier +DEBUG 3/6/2026, 10:18:06 AM 801 putAccelerator Edit -> Édit&er +DEBUG 3/6/2026, 10:18:06 AM 802 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/6/2026, 10:18:06 AM 802 putAccelerator Format -> F&ormat +DEBUG 3/6/2026, 10:18:06 AM 803 putAccelerator View -> Présentation(&V) +DEBUG 3/6/2026, 10:18:06 AM 803 putAccelerator Themes -> &Thèmes +DEBUG 3/6/2026, 10:18:06 AM 804 putAccelerator Help -> Aide(&H) +DEBUG 3/6/2026, 10:18:06 AM 873 added recovery 1 null (0) +INFO 3/6/2026, 10:18:06 AM 957 synced recovery +INFO 3/6/2026, 10:18:07 AM 1072 [focus] 1 +ERROR 3/6/2026, 10:18:07 AM 1737 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/6/2026, 10:18:07 AM 1744 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/6/2026, 10:18:07 AM 1745 handle document.loadData +DEBUG 3/6/2026, 10:18:07 AM 1745 document.loadData 0 +INFO 3/6/2026, 10:18:07 AM 1825 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 10:18:07 AM 1825 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/6/2026, 10:18:07 AM 1846 added recovery 1 (0) +INFO 3/6/2026, 10:18:07 AM 1849 synced recovery +INFO 3/6/2026, 10:18:08 AM 2170 [RenderProcess 1][Log] onBecomeActive +INFO 3/6/2026, 10:18:08 AM 2170 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/6/2026, 10:18:16 AM 10299 app.openFile +INFO 3/6/2026, 10:18:16 AM 10328 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md] +INFO 3/6/2026, 10:18:16 AM 10329 addRecentDocument +DEBUG 3/6/2026, 10:18:16 AM 10352 added recovery 1 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 10:18:16 AM 10359 synced recovery +INFO 3/6/2026, 10:18:16 AM 10370 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 10:18:16 AM 10383 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 10:18:16 AM 10384 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 10:18:16 AM 10393 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md +DEBUG 3/6/2026, 10:18:16 AM 10600 added recovery 1 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 10:18:16 AM 10603 synced recovery +DEBUG 3/6/2026, 10:18:16 AM 10609 app.openFile +ERROR 3/6/2026, 10:18:20 AM 14874 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/6/2026, 10:18:20 AM 14878 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/6/2026, 10:18:23 AM 17510 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/6/2026, 10:18:23 AM 17514 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/6/2026, 10:18:31 AM 25657 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/6/2026, 10:18:31 AM 25660 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/6/2026, 10:18:37 AM 31744 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/6/2026, 10:18:37 AM 31749 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/6/2026, 10:18:51 AM 45881 load file [/tmp/Typora/1772788731737-0.20182547051815525.html] for PDF export +INFO 3/6/2026, 10:18:52 AM 46099 [blur] 1 +INFO 3/6/2026, 10:18:52 AM 46099 [win] blur +INFO 3/6/2026, 10:18:52 AM 46438 generate print window with id [2] for [content] +INFO 3/6/2026, 10:18:53 AM 47006 got PDF data +INFO 3/6/2026, 10:18:53 AM 47015 get background color +INFO 3/6/2026, 10:18:53 AM 47303 load file [/tmp/Typora/1772788733294-1.html] for PDF export +INFO 3/6/2026, 10:18:53 AM 47380 generate print window with id [3] for [header] +INFO 3/6/2026, 10:18:53 AM 47642 got PDF data +INFO 3/6/2026, 10:18:53 AM 47650 get background color +INFO 3/6/2026, 10:18:53 AM 47698 load file [/tmp/Typora/1772788733706-2.html] for PDF export +INFO 3/6/2026, 10:18:53 AM 47768 generate print window with id [4] for [footer] +INFO 3/6/2026, 10:18:54 AM 48029 got PDF data +INFO 3/6/2026, 10:18:54 AM 48031 get background color +INFO 3/6/2026, 10:18:55 AM 49279 [RenderProcess 1][Log] export PDF to /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.pdf +INFO 3/6/2026, 10:18:55 AM 49376 [focus] 1 +INFO 3/6/2026, 10:18:57 AM 51719 [blur] 1 +INFO 3/6/2026, 10:18:57 AM 51720 [win] blur +INFO 3/6/2026, 10:20:36 AM 150523 [focus] 1 +INFO 3/6/2026, 10:20:41 AM 155064 [blur] 1 +INFO 3/6/2026, 10:20:41 AM 155064 [win] blur +INFO 3/6/2026, 10:21:00 AM 174233 [focus] 1 +INFO 3/6/2026, 10:21:01 AM 175713 synced recovery +INFO 3/6/2026, 10:21:01 AM 175713 ----------------before-quit----------------- +INFO 3/6/2026, 10:21:01 AM 175713 ------------------will-quit------------------ +INFO 3/6/2026, 10:21:01 AM 175715 -----------------quit------------------ +INFO 3/6/2026, 10:21:01 AM 175716 closeLogging +INFO 3/6/2026, 10:35:35 AM 80 launch with argv [/usr/share/typora/Typora] +INFO 3/6/2026, 10:35:35 AM 922 ------------------start------------------ +DEBUG 3/6/2026, 10:35:36 AM 1076 before setting +DEBUG 3/6/2026, 10:35:36 AM 1238 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/6/2026, 10:35:36 AM 1284 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/6/2026, 10:35:36 AM 1291 OS is linux 6.18.13-arch1-1 +INFO 3/6/2026, 10:35:36 AM 1291 start LM in devVersion=false +DEBUG 3/6/2026, 10:35:36 AM 1308 after setting +INFO 3/6/2026, 10:35:36 AM 1308 typora version: 1.12.4 +user-dict.json not found +INFO 3/6/2026, 10:35:36 AM 1423 [watch L] +DEBUG 3/6/2026, 10:35:36 AM 1423 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/6/2026, 10:35:36 AM 1469 pure = undefined +INFO 3/6/2026, 10:35:36 AM 1470 renew +DEBUG 3/6/2026, 10:35:36 AM 1470 [renewLicense] license renewed in 12h +DEBUG 3/6/2026, 10:35:36 AM 1470 [L] pass +DEBUG 3/6/2026, 10:35:36 AM 1470 trailRemains is 0 +INFO 3/6/2026, 10:35:36 AM 1470 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/6/2026, 10:35:36 AM 1470 [watch L] hasL: true +DEBUG 3/6/2026, 10:35:36 AM 1471 app.openFile +DEBUG 3/6/2026, 10:35:36 AM 1784 added recovery 1 null (0) +DEBUG 3/6/2026, 10:35:36 AM 1872 putAccelerator File -> &Fichier +DEBUG 3/6/2026, 10:35:36 AM 1873 putAccelerator Edit -> Édit&er +DEBUG 3/6/2026, 10:35:36 AM 1873 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/6/2026, 10:35:36 AM 1873 putAccelerator Format -> F&ormat +DEBUG 3/6/2026, 10:35:36 AM 1873 putAccelerator View -> Présentation(&V) +DEBUG 3/6/2026, 10:35:36 AM 1873 putAccelerator Themes -> &Thèmes +DEBUG 3/6/2026, 10:35:36 AM 1873 putAccelerator Help -> Aide(&H) +INFO 3/6/2026, 10:35:36 AM 1893 synced recovery +INFO 3/6/2026, 10:35:37 AM 2215 [focus] 1 +ERROR 3/6/2026, 10:35:38 AM 3191 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/6/2026, 10:35:38 AM 3194 handle document.loadData +DEBUG 3/6/2026, 10:35:38 AM 3194 document.loadData 0 +ERROR 3/6/2026, 10:35:38 AM 3195 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/6/2026, 10:35:38 AM 3280 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 10:35:38 AM 3281 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/6/2026, 10:35:38 AM 3303 added recovery 1 (0) +INFO 3/6/2026, 10:35:38 AM 3308 synced recovery +INFO 3/6/2026, 10:35:38 AM 3590 [RenderProcess 1][Log] onBecomeActive +INFO 3/6/2026, 10:35:38 AM 3591 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/6/2026, 10:35:44 AM 9346 app.openFile +INFO 3/6/2026, 10:35:44 AM 9377 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md] +INFO 3/6/2026, 10:35:44 AM 9377 addRecentDocument +DEBUG 3/6/2026, 10:35:44 AM 9402 added recovery 1 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 10:35:44 AM 9409 synced recovery +INFO 3/6/2026, 10:35:44 AM 9418 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 10:35:44 AM 9425 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 10:35:44 AM 9427 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 10:35:44 AM 9440 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md +DEBUG 3/6/2026, 10:35:44 AM 9642 added recovery 1 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 10:35:44 AM 9646 synced recovery +INFO 3/6/2026, 10:35:49 AM 14292 load file [/tmp/Typora/1772789749248-0.40761978291693723.html] for PDF export +INFO 3/6/2026, 10:35:49 AM 14601 [blur] 1 +INFO 3/6/2026, 10:35:49 AM 14601 [win] blur +INFO 3/6/2026, 10:35:49 AM 14758 generate print window with id [2] for [content] +INFO 3/6/2026, 10:35:50 AM 15301 got PDF data +INFO 3/6/2026, 10:35:50 AM 15306 get background color +INFO 3/6/2026, 10:35:50 AM 15520 load file [/tmp/Typora/1772789750574-1.html] for PDF export +INFO 3/6/2026, 10:35:50 AM 15615 generate print window with id [3] for [header] +INFO 3/6/2026, 10:35:50 AM 15873 got PDF data +INFO 3/6/2026, 10:35:50 AM 15875 get background color +INFO 3/6/2026, 10:35:50 AM 15902 load file [/tmp/Typora/1772789750965-2.html] for PDF export +INFO 3/6/2026, 10:35:51 AM 15976 generate print window with id [4] for [footer] +INFO 3/6/2026, 10:35:51 AM 16239 got PDF data +INFO 3/6/2026, 10:35:51 AM 16242 get background color +INFO 3/6/2026, 10:35:53 AM 18766 [focus] 1 +INFO 3/6/2026, 10:35:53 AM 18922 [RenderProcess 1][Log] export PDF to /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.pdf +INFO 3/6/2026, 10:36:11 AM 36148 synced recovery +INFO 3/6/2026, 10:36:11 AM 36148 ----------------before-quit----------------- +INFO 3/6/2026, 10:36:11 AM 36148 ------------------will-quit------------------ +INFO 3/6/2026, 10:36:11 AM 36152 -----------------quit------------------ +INFO 3/6/2026, 10:36:11 AM 36152 closeLogging +INFO 3/6/2026, 11:55:53 AM 81 launch with argv [/usr/share/typora/Typora] +INFO 3/6/2026, 11:55:53 AM 268 ------------------start------------------ +DEBUG 3/6/2026, 11:55:53 AM 391 before setting +DEBUG 3/6/2026, 11:55:53 AM 488 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/6/2026, 11:55:53 AM 519 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/6/2026, 11:55:53 AM 524 OS is linux 6.18.13-arch1-1 +INFO 3/6/2026, 11:55:53 AM 524 start LM in devVersion=false +DEBUG 3/6/2026, 11:55:53 AM 542 after setting +INFO 3/6/2026, 11:55:53 AM 542 typora version: 1.12.4 +INFO 3/6/2026, 11:55:54 AM 635 [watch L] +DEBUG 3/6/2026, 11:55:54 AM 635 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/6/2026, 11:55:54 AM 674 pure = undefined +INFO 3/6/2026, 11:55:54 AM 674 renew +DEBUG 3/6/2026, 11:55:54 AM 674 [renewLicense] license renewed in 12h +DEBUG 3/6/2026, 11:55:54 AM 674 [L] pass +DEBUG 3/6/2026, 11:55:54 AM 675 trailRemains is 0 +INFO 3/6/2026, 11:55:54 AM 675 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/6/2026, 11:55:54 AM 675 [watch L] hasL: true +user-dict.json not found +DEBUG 3/6/2026, 11:55:54 AM 689 app.openFile +DEBUG 3/6/2026, 11:55:54 AM 942 added recovery 1 null (0) +DEBUG 3/6/2026, 11:55:54 AM 961 putAccelerator File -> &Fichier +DEBUG 3/6/2026, 11:55:54 AM 962 putAccelerator Edit -> Édit&er +DEBUG 3/6/2026, 11:55:54 AM 962 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/6/2026, 11:55:54 AM 963 putAccelerator Format -> F&ormat +DEBUG 3/6/2026, 11:55:54 AM 963 putAccelerator View -> Présentation(&V) +DEBUG 3/6/2026, 11:55:54 AM 963 putAccelerator Themes -> &Thèmes +DEBUG 3/6/2026, 11:55:54 AM 963 putAccelerator Help -> Aide(&H) +INFO 3/6/2026, 11:55:54 AM 1062 synced recovery +INFO 3/6/2026, 11:55:55 AM 1800 [focus] 1 +INFO 3/6/2026, 11:55:56 AM 2694 handle document.loadData +DEBUG 3/6/2026, 11:55:56 AM 2694 document.loadData 0 +ERROR 3/6/2026, 11:55:56 AM 2695 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/6/2026, 11:55:56 AM 2699 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/6/2026, 11:55:56 AM 2784 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 11:55:56 AM 2785 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/6/2026, 11:55:56 AM 2812 added recovery 1 (0) +INFO 3/6/2026, 11:55:56 AM 2818 synced recovery +INFO 3/6/2026, 11:55:56 AM 3148 [RenderProcess 1][Log] onBecomeActive +INFO 3/6/2026, 11:55:56 AM 3148 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/6/2026, 11:56:02 AM 8854 app.openFile +INFO 3/6/2026, 11:56:02 AM 8876 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md] +INFO 3/6/2026, 11:56:02 AM 8876 addRecentDocument +DEBUG 3/6/2026, 11:56:02 AM 8888 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md (0) +INFO 3/6/2026, 11:56:02 AM 8895 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 11:56:02 AM 8896 synced recovery +INFO 3/6/2026, 11:56:02 AM 8899 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 11:56:02 AM 8901 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 11:56:02 AM 8904 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md +DEBUG 3/6/2026, 11:56:02 AM 8974 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md (0) +INFO 3/6/2026, 11:56:02 AM 8975 synced recovery +INFO 3/6/2026, 11:56:06 AM 13022 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md] +INFO 3/6/2026, 11:56:06 AM 13022 addRecentDocument +DEBUG 3/6/2026, 11:56:06 AM 13030 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/6/2026, 11:56:06 AM 13034 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 11:56:06 AM 13035 synced recovery +INFO 3/6/2026, 11:56:06 AM 13036 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 11:56:06 AM 13037 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 11:56:06 AM 13041 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md +DEBUG 3/6/2026, 11:56:06 AM 13089 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/6/2026, 11:56:06 AM 13090 synced recovery +INFO 3/6/2026, 11:56:06 AM 13503 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/6/2026, 11:56:06 AM 13503 addRecentDocument +DEBUG 3/6/2026, 11:56:06 AM 13510 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 11:56:06 AM 13518 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 11:56:06 AM 13523 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 11:56:06 AM 13523 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 11:56:06 AM 13523 synced recovery +INFO 3/6/2026, 11:56:06 AM 13525 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +DEBUG 3/6/2026, 11:56:06 AM 13552 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 11:56:06 AM 13553 synced recovery +INFO 3/6/2026, 11:56:09 AM 16470 [blur] 1 +INFO 3/6/2026, 11:56:09 AM 16470 [win] blur +INFO 3/6/2026, 11:56:10 AM 17593 [RenderProcess 1][Log] presentedItemChanged, path is 606115451 +INFO 3/6/2026, 11:56:10 AM 17593 [RenderProcess 1][Log] getDataFromFile +INFO 3/6/2026, 11:56:10 AM 17593 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/6/2026, 11:56:10 AM 17596 [RenderProcess 1][Log] presentedItemChanged did happen +INFO 3/6/2026, 11:56:10 AM 17596 [RenderProcess 1][Log] doHandlerPresentedItemChange +INFO 3/6/2026, 11:56:10 AM 17597 [RenderProcess 1][Log] getDataFromFile +INFO 3/6/2026, 11:56:10 AM 17597 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/6/2026, 11:56:10 AM 17601 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true} +INFO 3/6/2026, 11:56:10 AM 17602 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 11:56:11 AM 18052 [focus] 1 +DEBUG 3/6/2026, 11:56:12 AM 18614 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 11:56:12 AM 18617 synced recovery +INFO 3/6/2026, 11:56:18 AM 25319 [blur] 1 +INFO 3/6/2026, 11:56:18 AM 25319 [win] blur +DEBUG 3/6/2026, 11:56:18 AM 25461 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 11:56:18 AM 25462 synced recovery +DEBUG 3/6/2026, 11:57:07 AM 74020 added recovery 1 "--- +gtoday: 06/...\\ +y = l_n +$$ + +" (1575) +INFO 3/6/2026, 11:57:07 AM 74022 synced recovery +INFO 3/6/2026, 11:57:49 AM 116596 [focus] 1 +INFO 3/6/2026, 11:57:50 AM 116882 [blur] 1 +INFO 3/6/2026, 11:57:50 AM 116882 [win] blur +INFO 3/6/2026, 12:01:59 PM 366532 [focus] 1 +INFO 3/6/2026, 12:02:01 PM 368580 [blur] 1 +INFO 3/6/2026, 12:02:01 PM 368580 [win] blur +INFO 3/6/2026, 12:02:07 PM 374357 [focus] 1 +INFO 3/6/2026, 12:02:08 PM 375155 [blur] 1 +INFO 3/6/2026, 12:02:08 PM 375155 [win] blur +INFO 3/6/2026, 12:04:28 PM 515126 [focus] 1 +INFO 3/6/2026, 12:04:30 PM 517405 [blur] 1 +INFO 3/6/2026, 12:04:30 PM 517406 [win] blur +INFO 3/6/2026, 12:04:35 PM 521815 [focus] 1 +INFO 3/6/2026, 12:04:35 PM 522405 [blur] 1 +INFO 3/6/2026, 12:04:35 PM 522405 [win] blur +DEBUG 3/6/2026, 12:04:44 PM 531152 2nd 0.7720547300990666 +DEBUG 3/6/2026, 12:04:44 PM 531153 pure = false +INFO 3/6/2026, 12:04:44 PM 531154 renew +DEBUG 3/6/2026, 12:04:44 PM 531155 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 3/6/2026, 12:04:44 PM 531155 [L] pass +DEBUG 3/6/2026, 12:04:45 PM 531977 [renewLicense]: license renewed +INFO 3/6/2026, 12:04:45 PM 531978 ls put SLicense +INFO 3/6/2026, 12:05:04 PM 550933 [focus] 1 +INFO 3/6/2026, 12:05:04 PM 551542 [blur] 1 +INFO 3/6/2026, 12:05:04 PM 551542 [win] blur +INFO 3/6/2026, 12:05:10 PM 556680 [focus] 1 +INFO 3/6/2026, 12:05:10 PM 557030 [blur] 1 +INFO 3/6/2026, 12:05:10 PM 557030 [win] blur +INFO 3/6/2026, 12:06:27 PM 633610 [focus] 1 +INFO 3/6/2026, 12:06:27 PM 634421 [blur] 1 +INFO 3/6/2026, 12:06:27 PM 634422 [win] blur +INFO 3/6/2026, 12:06:29 PM 636517 [focus] 1 +INFO 3/6/2026, 12:06:30 PM 636674 [blur] 1 +INFO 3/6/2026, 12:06:30 PM 636674 [win] blur +INFO 3/6/2026, 12:12:05 PM 972345 [focus] 1 +INFO 3/6/2026, 12:12:06 PM 972807 [blur] 1 +INFO 3/6/2026, 12:12:06 PM 972807 [win] blur +INFO 3/6/2026, 12:13:33 PM 1060554 [focus] 1 +INFO 3/6/2026, 12:13:34 PM 1061129 [blur] 1 +INFO 3/6/2026, 12:13:34 PM 1061129 [win] blur +INFO 3/6/2026, 12:20:28 PM 1474896 [focus] 1 +INFO 3/6/2026, 12:20:28 PM 1475502 [blur] 1 +INFO 3/6/2026, 12:20:28 PM 1475503 [win] blur +INFO 3/6/2026, 12:20:38 PM 1485039 [focus] 1 +INFO 3/6/2026, 12:20:38 PM 1485499 [blur] 1 +INFO 3/6/2026, 12:20:38 PM 1485500 [win] blur +INFO 3/6/2026, 12:20:40 PM 1486832 [focus] 1 +INFO 3/6/2026, 12:20:40 PM 1486988 [blur] 1 +INFO 3/6/2026, 12:20:40 PM 1486988 [win] blur +INFO 3/6/2026, 12:20:42 PM 1489391 [focus] 1 +INFO 3/6/2026, 12:20:43 PM 1489630 [blur] 1 +INFO 3/6/2026, 12:20:43 PM 1489630 [win] blur +INFO 3/6/2026, 12:20:49 PM 1496143 [focus] 1 +INFO 3/6/2026, 12:20:49 PM 1496495 [blur] 1 +INFO 3/6/2026, 12:20:49 PM 1496495 [win] blur +INFO 3/6/2026, 12:20:53 PM 1499661 [focus] 1 +INFO 3/6/2026, 12:20:53 PM 1499950 [blur] 1 +INFO 3/6/2026, 12:20:53 PM 1499951 [win] blur +INFO 3/6/2026, 12:21:18 PM 1524910 [focus] 1 +INFO 3/6/2026, 12:21:18 PM 1525311 [blur] 1 +INFO 3/6/2026, 12:21:18 PM 1525311 [win] blur +INFO 3/6/2026, 12:21:21 PM 1527765 [focus] 1 +INFO 3/6/2026, 12:21:21 PM 1528288 [blur] 1 +INFO 3/6/2026, 12:21:21 PM 1528289 [win] blur +INFO 3/6/2026, 12:21:30 PM 1537488 [focus] 1 +INFO 3/6/2026, 12:21:31 PM 1537662 [blur] 1 +INFO 3/6/2026, 12:21:31 PM 1537662 [win] blur +INFO 3/6/2026, 12:22:59 PM 1625698 [focus] 1 +INFO 3/6/2026, 12:22:59 PM 1626080 [blur] 1 +INFO 3/6/2026, 12:22:59 PM 1626080 [win] blur +DEBUG 3/6/2026, 12:22:59 PM 1626529 added recovery 1 "--- +gktoday: 06...\\ +y = l_n +$$ + +" (1576) +INFO 3/6/2026, 12:23:00 PM 1626879 synced recovery +INFO 3/6/2026, 12:23:51 PM 1678451 [focus] 1 +INFO 3/6/2026, 12:23:51 PM 1678455 [blur] 1 +INFO 3/6/2026, 12:23:51 PM 1678455 [win] blur +INFO 3/6/2026, 12:44:17 PM 2904207 [focus] 1 +INFO 3/6/2026, 12:44:18 PM 2904796 [blur] 1 +INFO 3/6/2026, 12:44:18 PM 2904797 [win] blur +INFO 3/6/2026, 12:44:22 PM 2908638 [focus] 1 +INFO 3/6/2026, 12:44:22 PM 2909342 [blur] 1 +INFO 3/6/2026, 12:44:22 PM 2909345 [win] blur +INFO 3/6/2026, 12:44:34 PM 2921486 [focus] 1 +INFO 3/6/2026, 12:44:35 PM 2921931 [blur] 1 +INFO 3/6/2026, 12:44:35 PM 2921931 [win] blur +INFO 3/6/2026, 12:47:16 PM 3082897 [focus] 1 +INFO 3/6/2026, 12:47:17 PM 3083703 [blur] 1 +INFO 3/6/2026, 12:47:17 PM 3083704 [win] blur +INFO 3/6/2026, 12:51:12 PM 3318996 [focus] 1 +INFO 3/6/2026, 12:51:13 PM 3319666 [blur] 1 +INFO 3/6/2026, 12:51:13 PM 3319666 [win] blur +INFO 3/6/2026, 12:55:00 PM 3547193 [focus] 1 +INFO 3/6/2026, 12:55:00 PM 3547591 [blur] 1 +INFO 3/6/2026, 12:55:00 PM 3547591 [win] blur +INFO 3/6/2026, 12:55:27 PM 3574039 [focus] 1 +INFO 3/6/2026, 12:55:33 PM 3580393 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md] +INFO 3/6/2026, 12:55:33 PM 3580393 addRecentDocument +DEBUG 3/6/2026, 12:55:33 PM 3580415 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md (0) +INFO 3/6/2026, 12:55:33 PM 3580424 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 12:55:33 PM 3580426 synced recovery +INFO 3/6/2026, 12:55:33 PM 3580432 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 12:55:33 PM 3580432 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 12:55:33 PM 3580447 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md +DEBUG 3/6/2026, 12:55:33 PM 3580594 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md (0) +INFO 3/6/2026, 12:55:33 PM 3580596 synced recovery +INFO 3/6/2026, 12:55:35 PM 3582526 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md] +INFO 3/6/2026, 12:55:35 PM 3582526 addRecentDocument +DEBUG 3/6/2026, 12:55:35 PM 3582532 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md (0) +INFO 3/6/2026, 12:55:35 PM 3582536 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 12:55:35 PM 3582536 synced recovery +INFO 3/6/2026, 12:55:35 PM 3582538 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 12:55:35 PM 3582538 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 12:55:35 PM 3582542 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md +DEBUG 3/6/2026, 12:55:36 PM 3582604 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md (0) +INFO 3/6/2026, 12:55:36 PM 3582605 synced recovery +INFO 3/6/2026, 12:55:36 PM 3583105 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md] +INFO 3/6/2026, 12:55:36 PM 3583106 addRecentDocument +DEBUG 3/6/2026, 12:55:36 PM 3583120 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/6/2026, 12:55:36 PM 3583127 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 12:55:36 PM 3583129 synced recovery +INFO 3/6/2026, 12:55:36 PM 3583133 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 12:55:36 PM 3583133 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 12:55:36 PM 3583136 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md +DEBUG 3/6/2026, 12:55:36 PM 3583201 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/6/2026, 12:55:36 PM 3583202 synced recovery +INFO 3/6/2026, 12:55:37 PM 3583791 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/6/2026, 12:55:37 PM 3583792 addRecentDocument +DEBUG 3/6/2026, 12:55:37 PM 3583818 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 12:55:37 PM 3583834 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 12:55:37 PM 3583835 synced recovery +INFO 3/6/2026, 12:55:37 PM 3583840 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 12:55:37 PM 3583840 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 12:55:37 PM 3583846 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +DEBUG 3/6/2026, 12:55:37 PM 3584015 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 12:55:37 PM 3584016 synced recovery +DEBUG 3/6/2026, 12:55:41 PM 3588558 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 12:55:41 PM 3588559 synced recovery +DEBUG 3/6/2026, 12:55:43 PM 3589901 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 12:55:43 PM 3589902 synced recovery +DEBUG 3/6/2026, 12:55:47 PM 3593844 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 12:55:47 PM 3593845 synced recovery +INFO 3/6/2026, 12:55:47 PM 3594407 [blur] 1 +INFO 3/6/2026, 12:55:47 PM 3594409 [win] blur +INFO 3/6/2026, 1:13:49 PM 4675618 [focus] 1 +DEBUG 3/6/2026, 1:13:49 PM 4676194 added recovery 1 "--- +gtoday: 06/...)p(\theta) +$$ + +" (3129) +INFO 3/6/2026, 1:13:49 PM 4676198 synced recovery +INFO 3/6/2026, 1:13:53 PM 4679643 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md] +INFO 3/6/2026, 1:13:53 PM 4679643 addRecentDocument +DEBUG 3/6/2026, 1:13:53 PM 4679648 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/6/2026, 1:13:53 PM 4679650 synced recovery +INFO 3/6/2026, 1:13:53 PM 4679652 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/6/2026, 1:13:53 PM 4679653 lastSync 2026-03-06T11:55:36.558Z, timestamp 1772798136582, mtime 1772781112394.1914 +INFO 3/6/2026, 1:13:53 PM 4679657 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 1:13:53 PM 4679657 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:13:53 PM 4679660 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md +INFO 3/6/2026, 1:13:53 PM 4679673 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/6/2026, 1:13:53 PM 4679674 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:13:53 PM 4679684 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 0 at: -1 +DEBUG 3/6/2026, 1:13:53 PM 4679684 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/6/2026, 1:13:53 PM 4679685 synced recovery +INFO 3/6/2026, 1:13:53 PM 4679739 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/6/2026, 1:13:53 PM 4679741 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:13:53 PM 4680285 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/6/2026, 1:13:53 PM 4680285 addRecentDocument +DEBUG 3/6/2026, 1:13:53 PM 4680295 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 1:13:53 PM 4680303 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 1:13:53 PM 4680304 synced recovery +INFO 3/6/2026, 1:13:53 PM 4680305 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 1:13:53 PM 4680305 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:13:53 PM 4680311 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/6/2026, 1:13:53 PM 4680320 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/6/2026, 1:13:53 PM 4680320 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:13:53 PM 4680323 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 6 at: 5 +DEBUG 3/6/2026, 1:13:53 PM 4680323 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 1:13:53 PM 4680324 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/6/2026, 1:13:53 PM 4680325 synced recovery +INFO 3/6/2026, 1:13:53 PM 4680325 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/6/2026, 1:13:54 PM 4681374 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 1:13:54 PM 4681377 synced recovery +INFO 3/6/2026, 1:13:56 PM 4682837 [blur] 1 +INFO 3/6/2026, 1:13:56 PM 4682838 [win] blur +INFO 3/6/2026, 1:14:22 PM 4709368 [focus] 1 +DEBUG 3/6/2026, 1:14:23 PM 4709837 added recovery 1 "--- +gtoday: 06/...\hat{y})^T +$$ + +" (3758) +INFO 3/6/2026, 1:14:23 PM 4709840 synced recovery +INFO 3/6/2026, 1:14:25 PM 4712035 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md] +INFO 3/6/2026, 1:14:25 PM 4712035 addRecentDocument +DEBUG 3/6/2026, 1:14:25 PM 4712043 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/6/2026, 1:14:25 PM 4712044 synced recovery +INFO 3/6/2026, 1:14:25 PM 4712049 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/6/2026, 1:14:25 PM 4712049 lastSync 2026-03-06T12:13:53.135Z, timestamp 1772799233195, mtime 1772781112394.1914 +INFO 3/6/2026, 1:14:25 PM 4712057 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 1:14:25 PM 4712058 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:14:25 PM 4712060 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md +INFO 3/6/2026, 1:14:25 PM 4712068 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/6/2026, 1:14:25 PM 4712069 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:14:25 PM 4712077 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 1 at: 0 +DEBUG 3/6/2026, 1:14:25 PM 4712077 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/6/2026, 1:14:25 PM 4712078 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/6/2026, 1:14:25 PM 4712078 synced recovery +INFO 3/6/2026, 1:14:25 PM 4712080 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:14:26 PM 4712627 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/6/2026, 1:14:26 PM 4712627 addRecentDocument +DEBUG 3/6/2026, 1:14:26 PM 4712631 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 1:14:26 PM 4712634 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 1:14:26 PM 4712638 synced recovery +INFO 3/6/2026, 1:14:26 PM 4712639 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 1:14:26 PM 4712639 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:14:26 PM 4712640 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/6/2026, 1:14:26 PM 4712645 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/6/2026, 1:14:26 PM 4712646 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:14:26 PM 4712647 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 7 at: 6 +DEBUG 3/6/2026, 1:14:26 PM 4712647 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 1:14:26 PM 4712648 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/6/2026, 1:14:26 PM 4712648 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:14:26 PM 4712649 synced recovery +DEBUG 3/6/2026, 1:14:27 PM 4713674 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 1:14:27 PM 4713675 synced recovery +INFO 3/6/2026, 1:14:32 PM 4718836 [blur] 1 +INFO 3/6/2026, 1:14:32 PM 4718837 [win] blur +INFO 3/6/2026, 1:14:33 PM 4719973 [focus] 1 +INFO 3/6/2026, 1:14:35 PM 4721603 [blur] 1 +INFO 3/6/2026, 1:14:35 PM 4721603 [win] blur +INFO 3/6/2026, 1:20:33 PM 5079834 [focus] 1 +INFO 3/6/2026, 1:20:33 PM 5080361 [blur] 1 +INFO 3/6/2026, 1:20:33 PM 5080361 [win] blur +INFO 3/6/2026, 1:21:23 PM 5130514 [focus] 1 +INFO 3/6/2026, 1:21:24 PM 5130812 [blur] 1 +INFO 3/6/2026, 1:21:24 PM 5130812 [win] blur +INFO 3/6/2026, 1:21:26 PM 5133371 [focus] 1 +INFO 3/6/2026, 1:21:28 PM 5134785 [blur] 1 +INFO 3/6/2026, 1:21:28 PM 5134785 [win] blur +INFO 3/6/2026, 1:21:28 PM 5134944 [focus] 1 +INFO 3/6/2026, 1:21:29 PM 5135618 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md] +INFO 3/6/2026, 1:21:29 PM 5135618 addRecentDocument +DEBUG 3/6/2026, 1:21:29 PM 5135682 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/6/2026, 1:21:29 PM 5135689 synced recovery +INFO 3/6/2026, 1:21:29 PM 5135706 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/6/2026, 1:21:29 PM 5135707 lastSync 2026-03-06T12:14:25.474Z, timestamp 1772799265528, mtime 1772781112394.1914 +INFO 3/6/2026, 1:21:29 PM 5135736 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 1:21:29 PM 5135736 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:21:29 PM 5135743 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md +INFO 3/6/2026, 1:21:29 PM 5136062 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/6/2026, 1:21:29 PM 5136063 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:21:29 PM 5136080 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 2 at: 1 +DEBUG 3/6/2026, 1:21:29 PM 5136081 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/6/2026, 1:21:29 PM 5136081 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/6/2026, 1:21:29 PM 5136082 synced recovery +INFO 3/6/2026, 1:21:29 PM 5136084 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:21:30 PM 5136720 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/6/2026, 1:21:30 PM 5136720 addRecentDocument +DEBUG 3/6/2026, 1:21:30 PM 5136724 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 1:21:30 PM 5136727 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/6/2026, 1:21:30 PM 5136727 lastSync 2026-03-06T12:14:26.044Z, timestamp 1772799266080, mtime 1772799262267.1848 +INFO 3/6/2026, 1:21:30 PM 5136728 synced recovery +INFO 3/6/2026, 1:21:30 PM 5136729 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 1:21:30 PM 5136729 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:21:30 PM 5136733 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/6/2026, 1:21:30 PM 5136761 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/6/2026, 1:21:30 PM 5136761 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:21:30 PM 5136764 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 8 at: 7 +DEBUG 3/6/2026, 1:21:30 PM 5136764 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 1:21:30 PM 5136765 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/6/2026, 1:21:30 PM 5136765 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:21:30 PM 5136766 synced recovery +DEBUG 3/6/2026, 1:21:31 PM 5137842 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 1:21:31 PM 5137843 synced recovery +INFO 3/6/2026, 1:21:32 PM 5139230 [blur] 1 +INFO 3/6/2026, 1:21:32 PM 5139232 [win] blur +INFO 3/6/2026, 1:21:38 PM 5144908 [focus] 1 +DEBUG 3/6/2026, 1:21:38 PM 5144943 added recovery 1 "--- +gtoday: 06/...\hat{y})^T +$$ + +" (3759) +INFO 3/6/2026, 1:21:38 PM 5144947 synced recovery +INFO 3/6/2026, 1:21:41 PM 5147905 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md] +INFO 3/6/2026, 1:21:41 PM 5147905 addRecentDocument +DEBUG 3/6/2026, 1:21:41 PM 5147916 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/6/2026, 1:21:41 PM 5147920 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/6/2026, 1:21:41 PM 5147921 lastSync 2026-03-06T12:21:29.478Z, timestamp 1772799689557, mtime 1772781112394.1914 +INFO 3/6/2026, 1:21:41 PM 5147931 synced recovery +INFO 3/6/2026, 1:21:41 PM 5147935 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 1:21:41 PM 5147936 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:21:41 PM 5147945 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md +INFO 3/6/2026, 1:21:41 PM 5147952 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/6/2026, 1:21:41 PM 5147953 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:21:41 PM 5147961 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 3 at: 2 +DEBUG 3/6/2026, 1:21:41 PM 5147961 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/6/2026, 1:21:41 PM 5147961 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/6/2026, 1:21:41 PM 5147962 synced recovery +INFO 3/6/2026, 1:21:41 PM 5147963 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:21:41 PM 5148423 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/6/2026, 1:21:41 PM 5148423 addRecentDocument +DEBUG 3/6/2026, 1:21:41 PM 5148430 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 1:21:41 PM 5148431 synced recovery +INFO 3/6/2026, 1:21:41 PM 5148433 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 1:21:41 PM 5148435 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 1:21:41 PM 5148436 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:21:41 PM 5148438 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/6/2026, 1:21:41 PM 5148442 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/6/2026, 1:21:41 PM 5148442 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:21:41 PM 5148445 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 9 at: 8 +DEBUG 3/6/2026, 1:21:41 PM 5148445 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 1:21:41 PM 5148445 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/6/2026, 1:21:41 PM 5148446 synced recovery +INFO 3/6/2026, 1:21:41 PM 5148446 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/6/2026, 1:21:42 PM 5149464 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 1:21:42 PM 5149467 synced recovery +INFO 3/6/2026, 1:22:18 PM 5184717 [blur] 1 +INFO 3/6/2026, 1:22:18 PM 5184717 [win] blur +INFO 3/6/2026, 1:22:25 PM 5192414 [focus] 1 +INFO 3/6/2026, 1:22:27 PM 5194062 [blur] 1 +INFO 3/6/2026, 1:22:27 PM 5194062 [win] blur +INFO 3/6/2026, 1:22:28 PM 5195546 [focus] 1 +INFO 3/6/2026, 1:22:29 PM 5196318 [blur] 1 +INFO 3/6/2026, 1:22:29 PM 5196318 [win] blur +INFO 3/6/2026, 1:22:30 PM 5196829 [focus] 1 +INFO 3/6/2026, 1:22:30 PM 5197554 [blur] 1 +INFO 3/6/2026, 1:22:30 PM 5197554 [win] blur +INFO 3/6/2026, 1:22:37 PM 5203678 [focus] 1 +INFO 3/6/2026, 1:22:38 PM 5204957 [blur] 1 +INFO 3/6/2026, 1:22:38 PM 5204957 [win] blur +INFO 3/6/2026, 1:22:40 PM 5206605 [focus] 1 +INFO 3/6/2026, 1:22:40 PM 5207276 [blur] 1 +INFO 3/6/2026, 1:22:40 PM 5207276 [win] blur +INFO 3/6/2026, 1:22:48 PM 5215004 [focus] 1 +INFO 3/6/2026, 1:22:50 PM 5217067 [blur] 1 +INFO 3/6/2026, 1:22:50 PM 5217068 [win] blur +INFO 3/6/2026, 1:23:06 PM 5233515 [focus] 1 +INFO 3/6/2026, 1:23:08 PM 5234942 [blur] 1 +INFO 3/6/2026, 1:23:08 PM 5234942 [win] blur +INFO 3/6/2026, 1:23:12 PM 5239196 [focus] 1 +INFO 3/6/2026, 1:23:14 PM 5240672 [blur] 1 +INFO 3/6/2026, 1:23:14 PM 5240672 [win] blur +INFO 3/6/2026, 1:23:15 PM 5241804 [focus] 1 +DEBUG 3/6/2026, 1:23:15 PM 5242438 added recovery 1 "--- +gtoday: 06/...fy uncertainty +" (4038) +INFO 3/6/2026, 1:23:15 PM 5242440 synced recovery +INFO 3/6/2026, 1:23:17 PM 5243903 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md] +INFO 3/6/2026, 1:23:17 PM 5243903 addRecentDocument +DEBUG 3/6/2026, 1:23:17 PM 5243912 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/6/2026, 1:23:17 PM 5243919 synced recovery +INFO 3/6/2026, 1:23:17 PM 5243926 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/6/2026, 1:23:17 PM 5243942 lastSync 2026-03-06T12:21:41.358Z, timestamp 1772799701404, mtime 1772781112394.1914 +INFO 3/6/2026, 1:23:17 PM 5243977 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 1:23:17 PM 5243978 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:23:17 PM 5243988 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md +INFO 3/6/2026, 1:23:17 PM 5244006 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/6/2026, 1:23:17 PM 5244007 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:23:17 PM 5244012 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 4 at: 3 +DEBUG 3/6/2026, 1:23:17 PM 5244013 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/6/2026, 1:23:17 PM 5244013 synced recovery +INFO 3/6/2026, 1:23:17 PM 5244014 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/6/2026, 1:23:17 PM 5244017 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:23:17 PM 5244346 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/6/2026, 1:23:17 PM 5244346 addRecentDocument +DEBUG 3/6/2026, 1:23:17 PM 5244352 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 1:23:17 PM 5244355 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 1:23:17 PM 5244357 synced recovery +INFO 3/6/2026, 1:23:17 PM 5244357 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 1:23:17 PM 5244358 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:23:17 PM 5244360 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/6/2026, 1:23:17 PM 5244364 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/6/2026, 1:23:17 PM 5244365 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 1:23:17 PM 5244368 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 10 at: 9 +DEBUG 3/6/2026, 1:23:17 PM 5244368 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 1:23:17 PM 5244368 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/6/2026, 1:23:17 PM 5244369 synced recovery +INFO 3/6/2026, 1:23:17 PM 5244369 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/6/2026, 1:23:18 PM 5245404 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 1:23:18 PM 5245407 synced recovery +INFO 3/6/2026, 1:23:36 PM 5263020 [blur] 1 +INFO 3/6/2026, 1:23:36 PM 5263020 [win] blur +INFO 3/6/2026, 1:24:03 PM 5290448 [focus] 1 +INFO 3/6/2026, 1:24:04 PM 5290878 [blur] 1 +INFO 3/6/2026, 1:24:04 PM 5290878 [win] blur +INFO 3/6/2026, 1:24:04 PM 5291230 [focus] 1 +INFO 3/6/2026, 1:24:11 PM 5298236 [blur] 1 +INFO 3/6/2026, 1:24:11 PM 5298237 [win] blur +INFO 3/6/2026, 1:24:20 PM 5307246 [focus] 1 +INFO 3/6/2026, 1:24:25 PM 5312237 [blur] 1 +INFO 3/6/2026, 1:24:25 PM 5312237 [win] blur +INFO 3/6/2026, 1:24:27 PM 5313968 [focus] 1 +INFO 3/6/2026, 1:24:35 PM 5322092 [blur] 1 +INFO 3/6/2026, 1:24:35 PM 5322094 [win] blur +INFO 3/6/2026, 1:24:40 PM 5327486 [focus] 1 +INFO 3/6/2026, 1:24:41 PM 5328190 [blur] 1 +INFO 3/6/2026, 1:24:41 PM 5328193 [win] blur +INFO 3/6/2026, 1:24:49 PM 5336044 [focus] 1 +INFO 3/6/2026, 1:24:50 PM 5337211 [blur] 1 +INFO 3/6/2026, 1:24:50 PM 5337211 [win] blur +INFO 3/6/2026, 1:24:58 PM 5345566 [focus] 1 +INFO 3/6/2026, 1:25:00 PM 5347422 [blur] 1 +INFO 3/6/2026, 1:25:00 PM 5347422 [win] blur +INFO 3/6/2026, 1:25:01 PM 5347695 [focus] 1 +INFO 3/6/2026, 1:25:12 PM 5359403 [blur] 1 +INFO 3/6/2026, 1:25:12 PM 5359403 [win] blur +INFO 3/6/2026, 1:32:01 PM 5767906 [focus] 1 +INFO 3/6/2026, 1:32:01 PM 5768424 [blur] 1 +INFO 3/6/2026, 1:32:01 PM 5768424 [win] blur +INFO 3/6/2026, 1:32:56 PM 5823241 [focus] 1 +INFO 3/6/2026, 1:32:57 PM 5823826 [blur] 1 +INFO 3/6/2026, 1:32:57 PM 5823826 [win] blur +INFO 3/6/2026, 1:39:19 PM 6206144 [focus] 1 +INFO 3/6/2026, 1:39:19 PM 6206591 [blur] 1 +INFO 3/6/2026, 1:39:19 PM 6206591 [win] blur +INFO 3/6/2026, 1:39:21 PM 6208385 [focus] 1 +INFO 3/6/2026, 1:39:22 PM 6208693 [blur] 1 +INFO 3/6/2026, 1:39:22 PM 6208693 [win] blur +INFO 3/6/2026, 1:39:24 PM 6211140 [focus] 1 +INFO 3/6/2026, 1:39:24 PM 6211277 [blur] 1 +INFO 3/6/2026, 1:39:24 PM 6211277 [win] blur +INFO 3/6/2026, 1:44:42 PM 6528961 [focus] 1 +INFO 3/6/2026, 1:44:42 PM 6529289 [blur] 1 +INFO 3/6/2026, 1:44:42 PM 6529289 [win] blur +INFO 3/6/2026, 1:46:09 PM 6616556 [RenderProcess 1][Log] presentedItemChanged, path is 606115451 +INFO 3/6/2026, 1:46:09 PM 6616558 [RenderProcess 1][Log] getDataFromFile +INFO 3/6/2026, 1:46:09 PM 6616559 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/6/2026, 1:46:09 PM 6616563 [RenderProcess 1][Log] presentedItemChanged did happen +INFO 3/6/2026, 1:46:09 PM 6616564 [RenderProcess 1][Log] doHandlerPresentedItemChange +INFO 3/6/2026, 1:46:09 PM 6616565 [RenderProcess 1][Log] getDataFromFile +INFO 3/6/2026, 1:46:09 PM 6616566 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/6/2026, 1:46:09 PM 6616571 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true} +INFO 3/6/2026, 1:46:09 PM 6616573 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/6/2026, 1:46:19 PM 6626596 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 1:46:19 PM 6626598 synced recovery +INFO 3/6/2026, 1:47:27 PM 6694179 [focus] 1 +INFO 3/6/2026, 1:47:28 PM 6694896 [blur] 1 +INFO 3/6/2026, 1:47:28 PM 6694897 [win] blur +INFO 3/6/2026, 1:47:29 PM 6695921 [focus] 1 +INFO 3/6/2026, 1:47:29 PM 6696288 [blur] 1 +INFO 3/6/2026, 1:47:29 PM 6696288 [win] blur +INFO 3/6/2026, 1:51:14 PM 6920889 [focus] 1 +INFO 3/6/2026, 1:51:14 PM 6921247 [blur] 1 +INFO 3/6/2026, 1:51:14 PM 6921247 [win] blur +DEBUG 3/6/2026, 1:53:23 PM 7049852 added recovery 1 "--- +gtoday: 06/...fy uncertainty +" (4045) +INFO 3/6/2026, 1:53:23 PM 7049854 synced recovery +INFO 3/6/2026, 2:10:01 PM 8048312 [focus] 1 +INFO 3/6/2026, 2:10:02 PM 8048884 [blur] 1 +INFO 3/6/2026, 2:10:02 PM 8048884 [win] blur +INFO 3/6/2026, 2:13:01 PM 8228083 [focus] 1 +INFO 3/6/2026, 2:13:01 PM 8228148 [blur] 1 +INFO 3/6/2026, 2:13:01 PM 8228148 [win] blur +INFO 3/6/2026, 2:18:27 PM 8553857 [focus] 1 +INFO 3/6/2026, 2:18:27 PM 8554592 [blur] 1 +INFO 3/6/2026, 2:18:27 PM 8554592 [win] blur +INFO 3/6/2026, 2:18:28 PM 8554960 [focus] 1 +INFO 3/6/2026, 2:18:28 PM 8555280 [blur] 1 +INFO 3/6/2026, 2:18:28 PM 8555280 [win] blur +INFO 3/6/2026, 2:18:29 PM 8555697 [focus] 1 +INFO 3/6/2026, 2:18:29 PM 8555858 [blur] 1 +INFO 3/6/2026, 2:18:29 PM 8555858 [win] blur +INFO 3/6/2026, 2:18:30 PM 8556629 [focus] 1 +INFO 3/6/2026, 2:18:30 PM 8556801 [blur] 1 +INFO 3/6/2026, 2:18:30 PM 8556802 [win] blur +INFO 3/6/2026, 2:18:36 PM 8562787 [focus] 1 +INFO 3/6/2026, 2:18:38 PM 8564933 [blur] 1 +INFO 3/6/2026, 2:18:38 PM 8564933 [win] blur +DEBUG 3/6/2026, 2:18:38 PM 8564981 added recovery 1 "--- +Lgtoday: 06...fy uncertainty +" (4046) +INFO 3/6/2026, 2:18:38 PM 8564983 synced recovery +INFO 3/6/2026, 2:18:39 PM 8566465 [focus] 1 +INFO 3/6/2026, 2:18:40 PM 8566960 [blur] 1 +INFO 3/6/2026, 2:18:40 PM 8566960 [win] blur +INFO 3/6/2026, 2:18:40 PM 8567377 [focus] 1 +INFO 3/6/2026, 2:18:41 PM 8568256 [blur] 1 +INFO 3/6/2026, 2:18:41 PM 8568256 [win] blur +INFO 3/6/2026, 2:18:41 PM 8568259 [focus] 1 +INFO 3/6/2026, 2:18:42 PM 8569537 [blur] 1 +INFO 3/6/2026, 2:18:42 PM 8569537 [win] blur +INFO 3/6/2026, 2:18:43 PM 8570527 [focus] 1 +INFO 3/6/2026, 2:18:45 PM 8571648 [blur] 1 +INFO 3/6/2026, 2:18:45 PM 8571650 [win] blur +INFO 3/6/2026, 2:18:46 PM 8573231 [focus] 1 +INFO 3/6/2026, 2:18:47 PM 8573858 [blur] 1 +INFO 3/6/2026, 2:18:47 PM 8573859 [win] blur +INFO 3/6/2026, 2:19:56 PM 8643345 [focus] 1 +INFO 3/6/2026, 2:19:57 PM 8644036 [blur] 1 +INFO 3/6/2026, 2:19:57 PM 8644036 [win] blur +INFO 3/6/2026, 2:21:32 PM 8739039 [focus] 1 +INFO 3/6/2026, 2:21:32 PM 8739295 [blur] 1 +INFO 3/6/2026, 2:21:32 PM 8739296 [win] blur +INFO 3/6/2026, 2:21:43 PM 8750012 [focus] 1 +INFO 3/6/2026, 2:21:43 PM 8750013 [blur] 1 +INFO 3/6/2026, 2:21:43 PM 8750013 [win] blur +INFO 3/6/2026, 2:21:51 PM 8758294 [focus] 1 +INFO 3/6/2026, 2:21:52 PM 8758883 [blur] 1 +INFO 3/6/2026, 2:21:52 PM 8758884 [win] blur +INFO 3/6/2026, 2:21:52 PM 8759524 [focus] 1 +INFO 3/6/2026, 2:21:53 PM 8759954 [blur] 1 +INFO 3/6/2026, 2:21:53 PM 8759954 [win] blur +INFO 3/6/2026, 2:23:03 PM 8829701 [focus] 1 +INFO 3/6/2026, 2:23:06 PM 8832649 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md] +INFO 3/6/2026, 2:23:06 PM 8832650 addRecentDocument +DEBUG 3/6/2026, 2:23:06 PM 8832696 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md (0) +INFO 3/6/2026, 2:23:06 PM 8832705 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 2:23:06 PM 8832710 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:06 PM 8832711 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 2:23:06 PM 8832711 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md +INFO 3/6/2026, 2:23:06 PM 8832727 synced recovery +DEBUG 3/6/2026, 2:23:06 PM 8832808 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md (0) +INFO 3/6/2026, 2:23:06 PM 8832809 synced recovery +INFO 3/6/2026, 2:23:06 PM 8833287 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md] +INFO 3/6/2026, 2:23:06 PM 8833287 addRecentDocument +DEBUG 3/6/2026, 2:23:06 PM 8833313 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/6/2026, 2:23:06 PM 8833332 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 2:23:06 PM 8833334 synced recovery +INFO 3/6/2026, 2:23:06 PM 8833339 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:06 PM 8833341 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 2:23:06 PM 8833351 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md +DEBUG 3/6/2026, 2:23:06 PM 8833445 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/6/2026, 2:23:06 PM 8833447 synced recovery +INFO 3/6/2026, 2:23:07 PM 8834010 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/6/2026, 2:23:07 PM 8834010 addRecentDocument +DEBUG 3/6/2026, 2:23:07 PM 8834032 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:23:07 PM 8834053 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 2:23:07 PM 8834057 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:07 PM 8834058 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 2:23:07 PM 8834059 synced recovery +INFO 3/6/2026, 2:23:07 PM 8834068 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +DEBUG 3/6/2026, 2:23:07 PM 8834107 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:23:07 PM 8834108 synced recovery +INFO 3/6/2026, 2:23:10 PM 8836694 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md] +INFO 3/6/2026, 2:23:10 PM 8836694 addRecentDocument +DEBUG 3/6/2026, 2:23:10 PM 8836703 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md (0) +INFO 3/6/2026, 2:23:10 PM 8836707 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/6/2026, 2:23:10 PM 8836708 synced recovery +INFO 3/6/2026, 2:23:10 PM 8836708 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:10 PM 8836709 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 2:23:10 PM 8836713 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md +DEBUG 3/6/2026, 2:23:10 PM 8836748 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md (0) +INFO 3/6/2026, 2:23:10 PM 8836749 synced recovery +INFO 3/6/2026, 2:23:10 PM 8837496 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/6/2026, 2:23:10 PM 8837496 addRecentDocument +DEBUG 3/6/2026, 2:23:10 PM 8837505 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:23:10 PM 8837510 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/6/2026, 2:23:10 PM 8837511 lastSync 2026-03-06T13:23:07.465Z, timestamp 1772803387491, mtime 1772803318004.7021 +INFO 3/6/2026, 2:23:10 PM 8837514 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:10 PM 8837514 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 2:23:10 PM 8837516 synced recovery +INFO 3/6/2026, 2:23:10 PM 8837517 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/6/2026, 2:23:10 PM 8837536 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/6/2026, 2:23:10 PM 8837536 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 2:23:10 PM 8837547 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 0 at: -1 +DEBUG 3/6/2026, 2:23:10 PM 8837548 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:23:10 PM 8837553 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/6/2026, 2:23:10 PM 8837553 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 2:23:10 PM 8837555 synced recovery +DEBUG 3/6/2026, 2:23:11 PM 8838567 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:23:11 PM 8838569 synced recovery +INFO 3/6/2026, 2:23:17 PM 8844046 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md] +INFO 3/6/2026, 2:23:17 PM 8844047 addRecentDocument +DEBUG 3/6/2026, 2:23:17 PM 8844064 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md (0) +INFO 3/6/2026, 2:23:17 PM 8844068 synced recovery +INFO 3/6/2026, 2:23:17 PM 8844074 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/6/2026, 2:23:17 PM 8844076 lastSync 2026-03-06T13:23:10.128Z, timestamp 1772803390141, mtime 1772791874963.129 +INFO 3/6/2026, 2:23:17 PM 8844087 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:17 PM 8844089 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 2:23:17 PM 8844096 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md +INFO 3/6/2026, 2:23:17 PM 8844108 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/6/2026, 2:23:17 PM 8844108 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 2:23:17 PM 8844109 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 0 at: -1 +DEBUG 3/6/2026, 2:23:17 PM 8844111 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md (0) +INFO 3/6/2026, 2:23:17 PM 8844112 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/6/2026, 2:23:17 PM 8844113 [RenderProcess 1][Log] reset NodeMap +INFO 3/6/2026, 2:23:17 PM 8844114 synced recovery +DEBUG 3/6/2026, 2:23:18 PM 8845167 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md (0) +INFO 3/6/2026, 2:23:18 PM 8845168 synced recovery +INFO 3/6/2026, 2:23:29 PM 8855912 [blur] 1 +INFO 3/6/2026, 2:23:29 PM 8855912 [win] blur +INFO 3/6/2026, 2:23:29 PM 8856245 [focus] 1 +INFO 3/6/2026, 2:23:29 PM 8856525 [blur] 1 +INFO 3/6/2026, 2:23:29 PM 8856525 [win] blur +INFO 3/6/2026, 2:23:33 PM 8859702 [focus] 1 +INFO 3/6/2026, 2:23:33 PM 8859863 [blur] 1 +INFO 3/6/2026, 2:23:33 PM 8859864 [win] blur +DEBUG 3/6/2026, 2:23:33 PM 8860131 app.openFile +DEBUG 3/6/2026, 2:23:33 PM 8860238 added recovery 2 null (0) +INFO 3/6/2026, 2:23:33 PM 8860248 [focus] 1 +INFO 3/6/2026, 2:23:33 PM 8860261 synced recovery +INFO 3/6/2026, 2:23:33 PM 8860290 [blur] 1 +INFO 3/6/2026, 2:23:33 PM 8860291 [win] blur +INFO 3/6/2026, 2:23:33 PM 8860295 [focus] 2 +INFO 3/6/2026, 2:23:33 PM 8860381 [blur] 2 +INFO 3/6/2026, 2:23:33 PM 8860381 [win] blur +INFO 3/6/2026, 2:23:33 PM 8860382 [focus] 1 +INFO 3/6/2026, 2:23:33 PM 8860556 [blur] 1 +INFO 3/6/2026, 2:23:33 PM 8860556 [win] blur +INFO 3/6/2026, 2:23:33 PM 8860556 [focus] 2 +INFO 3/6/2026, 2:23:34 PM 8860900 [blur] 2 +INFO 3/6/2026, 2:23:34 PM 8860900 [win] blur +INFO 3/6/2026, 2:23:34 PM 8860901 [focus] 1 +INFO 3/6/2026, 2:23:34 PM 8861136 [blur] 1 +INFO 3/6/2026, 2:23:34 PM 8861136 [win] blur +INFO 3/6/2026, 2:23:34 PM 8861136 [focus] 2 +INFO 3/6/2026, 2:23:34 PM 8861580 [blur] 2 +INFO 3/6/2026, 2:23:34 PM 8861580 [win] blur +INFO 3/6/2026, 2:23:34 PM 8861581 [focus] 1 +ERROR 3/6/2026, 2:23:35 PM 8862233 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/6/2026, 2:23:35 PM 8862236 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/6/2026, 2:23:35 PM 8862237 handle document.loadData +DEBUG 3/6/2026, 2:23:35 PM 8862237 document.loadData 0 +INFO 3/6/2026, 2:23:35 PM 8862343 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:35 PM 8862343 [RenderProcess 2][Log] reset NodeMap +DEBUG 3/6/2026, 2:23:35 PM 8862364 added recovery 2 (0) +INFO 3/6/2026, 2:23:35 PM 8862366 synced recovery +INFO 3/6/2026, 2:23:36 PM 8862752 [RenderProcess 2][Log] onBecomeActive +INFO 3/6/2026, 2:23:36 PM 8862752 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:23:36 PM 8863337 [focus] 2 +INFO 3/6/2026, 2:23:37 PM 8864601 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/02-03-2026.md] +INFO 3/6/2026, 2:23:37 PM 8864602 addRecentDocument +DEBUG 3/6/2026, 2:23:38 PM 8864624 added recovery 2 /home/afoucaultc/workspace/cesi/notes/02-03-2026.md (0) +INFO 3/6/2026, 2:23:38 PM 8864637 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:23:38 PM 8864638 synced recovery +INFO 3/6/2026, 2:23:38 PM 8864642 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:38 PM 8864643 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:23:38 PM 8864667 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/02-03-2026.md +DEBUG 3/6/2026, 2:23:38 PM 8864758 added recovery 2 /home/afoucaultc/workspace/cesi/notes/02-03-2026.md (0) +INFO 3/6/2026, 2:23:38 PM 8864759 synced recovery +INFO 3/6/2026, 2:23:42 PM 8868791 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/03-03-2026.md] +INFO 3/6/2026, 2:23:42 PM 8868791 addRecentDocument +DEBUG 3/6/2026, 2:23:42 PM 8868797 added recovery 2 /home/afoucaultc/workspace/cesi/notes/03-03-2026.md (0) +INFO 3/6/2026, 2:23:42 PM 8868798 synced recovery +INFO 3/6/2026, 2:23:42 PM 8868801 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:23:42 PM 8868805 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:42 PM 8868805 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:23:42 PM 8868807 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/03-03-2026.md +DEBUG 3/6/2026, 2:23:42 PM 8868816 added recovery 2 /home/afoucaultc/workspace/cesi/notes/03-03-2026.md (0) +INFO 3/6/2026, 2:23:42 PM 8868817 synced recovery +INFO 3/6/2026, 2:23:43 PM 8870544 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/06-03-2026.md] +INFO 3/6/2026, 2:23:43 PM 8870544 addRecentDocument +DEBUG 3/6/2026, 2:23:43 PM 8870550 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:23:43 PM 8870553 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:23:43 PM 8870554 synced recovery +INFO 3/6/2026, 2:23:43 PM 8870555 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:43 PM 8870555 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:23:43 PM 8870561 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/06-03-2026.md +DEBUG 3/6/2026, 2:23:43 PM 8870585 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:23:43 PM 8870587 synced recovery +INFO 3/6/2026, 2:23:53 PM 8879963 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/05-03-2026.md] +INFO 3/6/2026, 2:23:53 PM 8879963 addRecentDocument +DEBUG 3/6/2026, 2:23:53 PM 8879975 added recovery 2 /home/afoucaultc/workspace/cesi/notes/05-03-2026.md (0) +INFO 3/6/2026, 2:23:53 PM 8879979 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:23:53 PM 8879979 synced recovery +INFO 3/6/2026, 2:23:53 PM 8879983 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:53 PM 8879983 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:23:53 PM 8879985 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/05-03-2026.md +DEBUG 3/6/2026, 2:23:53 PM 8879999 added recovery 2 /home/afoucaultc/workspace/cesi/notes/05-03-2026.md (0) +INFO 3/6/2026, 2:23:53 PM 8879999 synced recovery +INFO 3/6/2026, 2:23:53 PM 8880351 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/04-03-2026.md] +INFO 3/6/2026, 2:23:53 PM 8880351 addRecentDocument +DEBUG 3/6/2026, 2:23:53 PM 8880370 added recovery 2 /home/afoucaultc/workspace/cesi/notes/04-03-2026.md (0) +INFO 3/6/2026, 2:23:53 PM 8880380 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:23:53 PM 8880382 synced recovery +INFO 3/6/2026, 2:23:53 PM 8880384 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:53 PM 8880385 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:23:53 PM 8880393 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/04-03-2026.md +DEBUG 3/6/2026, 2:23:53 PM 8880414 added recovery 2 /home/afoucaultc/workspace/cesi/notes/04-03-2026.md (0) +INFO 3/6/2026, 2:23:53 PM 8880416 synced recovery +INFO 3/6/2026, 2:23:54 PM 8880831 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/03-03-2026.md] +INFO 3/6/2026, 2:23:54 PM 8880831 addRecentDocument +DEBUG 3/6/2026, 2:23:54 PM 8880837 added recovery 2 /home/afoucaultc/workspace/cesi/notes/03-03-2026.md (0) +INFO 3/6/2026, 2:23:54 PM 8880843 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:23:54 PM 8880843 synced recovery +INFO 3/6/2026, 2:23:54 PM 8880844 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:54 PM 8880844 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:23:54 PM 8880847 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/03-03-2026.md +DEBUG 3/6/2026, 2:23:54 PM 8880858 added recovery 2 /home/afoucaultc/workspace/cesi/notes/03-03-2026.md (0) +INFO 3/6/2026, 2:23:54 PM 8880859 synced recovery +INFO 3/6/2026, 2:23:54 PM 8881376 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/02-03-2026.md] +INFO 3/6/2026, 2:23:54 PM 8881376 addRecentDocument +DEBUG 3/6/2026, 2:23:54 PM 8881384 added recovery 2 /home/afoucaultc/workspace/cesi/notes/02-03-2026.md (0) +INFO 3/6/2026, 2:23:54 PM 8881388 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:23:54 PM 8881390 synced recovery +INFO 3/6/2026, 2:23:54 PM 8881391 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:54 PM 8881392 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:23:54 PM 8881394 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/02-03-2026.md +DEBUG 3/6/2026, 2:23:54 PM 8881426 added recovery 2 /home/afoucaultc/workspace/cesi/notes/02-03-2026.md (0) +INFO 3/6/2026, 2:23:54 PM 8881427 synced recovery +INFO 3/6/2026, 2:23:57 PM 8884278 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiSupervisedMachineLearning2025.md] +INFO 3/6/2026, 2:23:57 PM 8884278 addRecentDocument +DEBUG 3/6/2026, 2:23:57 PM 8884286 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiSupervisedMachineLearning2025.md (0) +INFO 3/6/2026, 2:23:57 PM 8884291 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:23:57 PM 8884292 synced recovery +INFO 3/6/2026, 2:23:57 PM 8884293 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:57 PM 8884294 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:23:57 PM 8884296 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiSupervisedMachineLearning2025.md +DEBUG 3/6/2026, 2:23:57 PM 8884328 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiSupervisedMachineLearning2025.md (0) +INFO 3/6/2026, 2:23:57 PM 8884328 synced recovery +INFO 3/6/2026, 2:23:58 PM 8884721 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md] +INFO 3/6/2026, 2:23:58 PM 8884722 addRecentDocument +DEBUG 3/6/2026, 2:23:58 PM 8884728 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md (0) +INFO 3/6/2026, 2:23:58 PM 8884731 synced recovery +INFO 3/6/2026, 2:23:58 PM 8884733 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:23:58 PM 8884738 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:58 PM 8884739 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:23:58 PM 8884743 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md +DEBUG 3/6/2026, 2:23:58 PM 8884759 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md (0) +INFO 3/6/2026, 2:23:58 PM 8884760 synced recovery +INFO 3/6/2026, 2:23:58 PM 8885061 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md] +INFO 3/6/2026, 2:23:58 PM 8885061 addRecentDocument +DEBUG 3/6/2026, 2:23:58 PM 8885076 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md (0) +INFO 3/6/2026, 2:23:58 PM 8885085 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:23:58 PM 8885090 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:58 PM 8885091 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:23:58 PM 8885091 synced recovery +INFO 3/6/2026, 2:23:58 PM 8885094 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md +DEBUG 3/6/2026, 2:23:58 PM 8885122 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md (0) +INFO 3/6/2026, 2:23:58 PM 8885124 synced recovery +INFO 3/6/2026, 2:23:59 PM 8885617 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/6/2026, 2:23:59 PM 8885617 addRecentDocument +DEBUG 3/6/2026, 2:23:59 PM 8885638 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:23:59 PM 8885648 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:23:59 PM 8885651 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:23:59 PM 8885651 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:23:59 PM 8885652 synced recovery +INFO 3/6/2026, 2:23:59 PM 8885661 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +DEBUG 3/6/2026, 2:23:59 PM 8885715 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:23:59 PM 8885716 synced recovery +DEBUG 3/6/2026, 2:24:04 PM 8891513 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:24:04 PM 8891514 synced recovery +DEBUG 3/6/2026, 2:24:06 PM 8893077 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:24:06 PM 8893077 synced recovery +DEBUG 3/6/2026, 2:24:11 PM 8898230 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:24:11 PM 8898231 synced recovery +DEBUG 3/6/2026, 2:24:17 PM 8903665 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:24:17 PM 8903665 synced recovery +DEBUG 3/6/2026, 2:24:18 PM 8905288 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:24:18 PM 8905289 synced recovery +DEBUG 3/6/2026, 2:24:20 PM 8906748 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:24:20 PM 8906749 synced recovery +DEBUG 3/6/2026, 2:24:22 PM 8908639 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:24:22 PM 8908639 synced recovery +DEBUG 3/6/2026, 2:24:23 PM 8909737 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:24:23 PM 8909738 synced recovery +DEBUG 3/6/2026, 2:24:26 PM 8912924 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:24:26 PM 8912925 synced recovery +DEBUG 3/6/2026, 2:24:27 PM 8914198 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:24:27 PM 8914198 synced recovery +DEBUG 3/6/2026, 2:24:28 PM 8915288 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:24:28 PM 8915289 synced recovery +DEBUG 3/6/2026, 2:24:30 PM 8916702 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:24:30 PM 8916703 synced recovery +DEBUG 3/6/2026, 2:24:31 PM 8918178 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:24:31 PM 8918179 synced recovery +DEBUG 3/6/2026, 2:24:32 PM 8919492 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:24:32 PM 8919493 synced recovery +DEBUG 3/6/2026, 2:24:34 PM 8921307 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:24:34 PM 8921308 synced recovery +INFO 3/6/2026, 2:24:37 PM 8924505 [blur] 2 +INFO 3/6/2026, 2:24:37 PM 8924505 [win] blur +INFO 3/6/2026, 2:24:38 PM 8925540 [focus] 2 +INFO 3/6/2026, 2:26:31 PM 9038324 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md] +INFO 3/6/2026, 2:26:31 PM 9038324 addRecentDocument +DEBUG 3/6/2026, 2:26:31 PM 9038332 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md (0) +INFO 3/6/2026, 2:26:31 PM 9038334 synced recovery +INFO 3/6/2026, 2:26:31 PM 9038338 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:26:31 PM 9038339 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:26:31 PM 9038339 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:26:31 PM 9038351 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md +DEBUG 3/6/2026, 2:26:31 PM 9038368 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md (0) +INFO 3/6/2026, 2:26:31 PM 9038369 synced recovery +INFO 3/6/2026, 2:26:37 PM 9044111 [blur] 2 +INFO 3/6/2026, 2:26:37 PM 9044111 [win] blur +INFO 3/6/2026, 2:26:37 PM 9044236 [focus] 2 +INFO 3/6/2026, 2:26:39 PM 9045652 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md] +INFO 3/6/2026, 2:26:39 PM 9045652 addRecentDocument +DEBUG 3/6/2026, 2:26:39 PM 9045687 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 2:26:39 PM 9045698 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:26:39 PM 9045699 synced recovery +INFO 3/6/2026, 2:26:39 PM 9045703 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:26:39 PM 9045703 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:26:39 PM 9045707 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md +DEBUG 3/6/2026, 2:26:39 PM 9045851 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 2:26:39 PM 9045855 synced recovery +INFO 3/6/2026, 2:26:46 PM 9053041 [blur] 2 +INFO 3/6/2026, 2:26:46 PM 9053041 [win] blur +INFO 3/6/2026, 2:26:46 PM 9053280 [focus] 2 +INFO 3/6/2026, 2:26:51 PM 9058409 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/06-03-2026.md] +INFO 3/6/2026, 2:26:51 PM 9058409 addRecentDocument +DEBUG 3/6/2026, 2:26:51 PM 9058414 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:26:51 PM 9058416 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:26:51 PM 9058417 synced recovery +INFO 3/6/2026, 2:26:51 PM 9058418 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:26:51 PM 9058419 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:26:51 PM 9058427 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/06-03-2026.md +DEBUG 3/6/2026, 2:26:51 PM 9058448 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:26:51 PM 9058449 synced recovery +INFO 3/6/2026, 2:26:59 PM 9066200 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/05-03-2026.md] +INFO 3/6/2026, 2:26:59 PM 9066200 addRecentDocument +DEBUG 3/6/2026, 2:26:59 PM 9066222 added recovery 2 /home/afoucaultc/workspace/cesi/notes/05-03-2026.md (0) +INFO 3/6/2026, 2:26:59 PM 9066231 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:26:59 PM 9066236 synced recovery +INFO 3/6/2026, 2:26:59 PM 9066237 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:26:59 PM 9066237 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:26:59 PM 9066239 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/05-03-2026.md +DEBUG 3/6/2026, 2:26:59 PM 9066264 added recovery 2 /home/afoucaultc/workspace/cesi/notes/05-03-2026.md (0) +INFO 3/6/2026, 2:26:59 PM 9066265 synced recovery +INFO 3/6/2026, 2:27:00 PM 9066982 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/04-03-2026.md] +INFO 3/6/2026, 2:27:00 PM 9066982 addRecentDocument +DEBUG 3/6/2026, 2:27:00 PM 9066995 added recovery 2 /home/afoucaultc/workspace/cesi/notes/04-03-2026.md (0) +INFO 3/6/2026, 2:27:00 PM 9067000 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:27:00 PM 9067002 synced recovery +INFO 3/6/2026, 2:27:00 PM 9067003 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:27:00 PM 9067003 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:27:00 PM 9067005 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/04-03-2026.md +DEBUG 3/6/2026, 2:27:00 PM 9067015 added recovery 2 /home/afoucaultc/workspace/cesi/notes/04-03-2026.md (0) +INFO 3/6/2026, 2:27:00 PM 9067017 synced recovery +INFO 3/6/2026, 2:27:01 PM 9067756 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/03-03-2026.md] +INFO 3/6/2026, 2:27:01 PM 9067756 addRecentDocument +DEBUG 3/6/2026, 2:27:01 PM 9067768 added recovery 2 /home/afoucaultc/workspace/cesi/notes/03-03-2026.md (0) +INFO 3/6/2026, 2:27:01 PM 9067774 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:27:01 PM 9067776 synced recovery +INFO 3/6/2026, 2:27:01 PM 9067776 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:27:01 PM 9067777 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:27:01 PM 9067778 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/03-03-2026.md +DEBUG 3/6/2026, 2:27:01 PM 9067790 added recovery 2 /home/afoucaultc/workspace/cesi/notes/03-03-2026.md (0) +INFO 3/6/2026, 2:27:01 PM 9067791 synced recovery +INFO 3/6/2026, 2:27:01 PM 9068291 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiSupervisedMachineLearning2025.md] +INFO 3/6/2026, 2:27:01 PM 9068291 addRecentDocument +DEBUG 3/6/2026, 2:27:01 PM 9068298 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiSupervisedMachineLearning2025.md (0) +INFO 3/6/2026, 2:27:01 PM 9068305 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:27:01 PM 9068308 synced recovery +INFO 3/6/2026, 2:27:01 PM 9068309 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:27:01 PM 9068309 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:27:01 PM 9068310 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiSupervisedMachineLearning2025.md +DEBUG 3/6/2026, 2:27:01 PM 9068343 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiSupervisedMachineLearning2025.md (0) +INFO 3/6/2026, 2:27:01 PM 9068344 synced recovery +INFO 3/6/2026, 2:27:02 PM 9069149 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md] +INFO 3/6/2026, 2:27:02 PM 9069149 addRecentDocument +DEBUG 3/6/2026, 2:27:02 PM 9069159 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md (0) +INFO 3/6/2026, 2:27:02 PM 9069167 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:27:02 PM 9069169 synced recovery +INFO 3/6/2026, 2:27:02 PM 9069169 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:27:02 PM 9069170 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:27:02 PM 9069174 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md +DEBUG 3/6/2026, 2:27:02 PM 9069193 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md (0) +INFO 3/6/2026, 2:27:02 PM 9069194 synced recovery +INFO 3/6/2026, 2:27:02 PM 9069593 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md] +INFO 3/6/2026, 2:27:02 PM 9069593 addRecentDocument +DEBUG 3/6/2026, 2:27:03 PM 9069606 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md (0) +INFO 3/6/2026, 2:27:03 PM 9069614 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:27:03 PM 9069621 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:27:03 PM 9069621 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:27:03 PM 9069622 synced recovery +INFO 3/6/2026, 2:27:03 PM 9069622 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md +DEBUG 3/6/2026, 2:27:03 PM 9069641 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md (0) +INFO 3/6/2026, 2:27:03 PM 9069642 synced recovery +INFO 3/6/2026, 2:27:03 PM 9070409 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/6/2026, 2:27:03 PM 9070409 addRecentDocument +DEBUG 3/6/2026, 2:27:03 PM 9070429 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:27:03 PM 9070439 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:27:03 PM 9070441 synced recovery +INFO 3/6/2026, 2:27:03 PM 9070442 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:27:03 PM 9070443 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:27:03 PM 9070446 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +DEBUG 3/6/2026, 2:27:03 PM 9070473 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/6/2026, 2:27:03 PM 9070474 synced recovery +INFO 3/6/2026, 2:27:04 PM 9071146 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md] +INFO 3/6/2026, 2:27:04 PM 9071147 addRecentDocument +DEBUG 3/6/2026, 2:27:04 PM 9071167 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/6/2026, 2:27:04 PM 9071182 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:27:04 PM 9071186 synced recovery +INFO 3/6/2026, 2:27:04 PM 9071188 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:27:04 PM 9071188 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:27:04 PM 9071196 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md +DEBUG 3/6/2026, 2:27:04 PM 9071274 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/6/2026, 2:27:04 PM 9071275 synced recovery +INFO 3/6/2026, 2:27:08 PM 9075364 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md] +INFO 3/6/2026, 2:27:08 PM 9075364 addRecentDocument +DEBUG 3/6/2026, 2:27:08 PM 9075375 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md (0) +INFO 3/6/2026, 2:27:08 PM 9075381 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:27:08 PM 9075382 synced recovery +INFO 3/6/2026, 2:27:08 PM 9075383 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:27:08 PM 9075383 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:27:08 PM 9075388 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md +DEBUG 3/6/2026, 2:27:08 PM 9075411 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md (0) +INFO 3/6/2026, 2:27:08 PM 9075412 synced recovery +INFO 3/6/2026, 2:27:12 PM 9078660 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md] +INFO 3/6/2026, 2:27:12 PM 9078660 addRecentDocument +DEBUG 3/6/2026, 2:27:12 PM 9078677 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md (0) +INFO 3/6/2026, 2:27:12 PM 9078685 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:27:12 PM 9078687 synced recovery +INFO 3/6/2026, 2:27:12 PM 9078688 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:27:12 PM 9078689 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:27:12 PM 9078695 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md +DEBUG 3/6/2026, 2:27:12 PM 9078718 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md (0) +INFO 3/6/2026, 2:27:12 PM 9078719 synced recovery +INFO 3/6/2026, 2:27:15 PM 9082084 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md] +INFO 3/6/2026, 2:27:15 PM 9082084 addRecentDocument +DEBUG 3/6/2026, 2:27:15 PM 9082097 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/6/2026, 2:27:15 PM 9082102 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:27:15 PM 9082103 synced recovery +INFO 3/6/2026, 2:27:15 PM 9082105 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:27:15 PM 9082106 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:27:15 PM 9082113 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md +DEBUG 3/6/2026, 2:27:15 PM 9082136 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/6/2026, 2:27:15 PM 9082136 synced recovery +INFO 3/6/2026, 2:27:19 PM 9086550 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md] +INFO 3/6/2026, 2:27:19 PM 9086550 addRecentDocument +DEBUG 3/6/2026, 2:27:19 PM 9086563 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 2:27:19 PM 9086574 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:27:19 PM 9086577 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:27:19 PM 9086577 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:27:19 PM 9086577 synced recovery +INFO 3/6/2026, 2:27:19 PM 9086581 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md +DEBUG 3/6/2026, 2:27:20 PM 9086651 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/6/2026, 2:27:20 PM 9086652 synced recovery +INFO 3/6/2026, 2:27:24 PM 9091389 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md] +INFO 3/6/2026, 2:27:24 PM 9091390 addRecentDocument +DEBUG 3/6/2026, 2:27:24 PM 9091397 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/6/2026, 2:27:24 PM 9091404 [RenderProcess 2][Log] File.activeWindow = true +DEBUG 3/6/2026, 2:27:24 PM 9091405 lastSync 2026-03-06T13:27:15.509Z, timestamp 1772803635526, mtime 1772710061724.1348 +INFO 3/6/2026, 2:27:24 PM 9091406 synced recovery +INFO 3/6/2026, 2:27:24 PM 9091407 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:27:24 PM 9091407 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:27:24 PM 9091415 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md +INFO 3/6/2026, 2:27:24 PM 9091424 [RenderProcess 2][Log] do restoreEditStateFromData true true +INFO 3/6/2026, 2:27:24 PM 9091424 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:27:24 PM 9091426 [RenderProcess 2][Log] [UndoManager] restoreFromJson all: 0 at: -1 +DEBUG 3/6/2026, 2:27:24 PM 9091427 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/6/2026, 2:27:24 PM 9091427 [RenderProcess 2][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/6/2026, 2:27:24 PM 9091428 synced recovery +INFO 3/6/2026, 2:27:24 PM 9091428 [RenderProcess 2][Log] reset NodeMap +DEBUG 3/6/2026, 2:27:25 PM 9092453 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/6/2026, 2:27:25 PM 9092456 synced recovery +INFO 3/6/2026, 2:27:26 PM 9092784 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/06-03-2026.md] +INFO 3/6/2026, 2:27:26 PM 9092785 addRecentDocument +DEBUG 3/6/2026, 2:27:26 PM 9092809 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:27:26 PM 9092820 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/6/2026, 2:27:26 PM 9092836 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/6/2026, 2:27:26 PM 9092837 [RenderProcess 2][Log] reset NodeMap +INFO 3/6/2026, 2:27:26 PM 9092845 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/06-03-2026.md +INFO 3/6/2026, 2:27:26 PM 9092846 synced recovery +DEBUG 3/6/2026, 2:27:26 PM 9092875 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:27:26 PM 9092876 synced recovery +DEBUG 3/6/2026, 2:27:38 PM 9104838 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:27:38 PM 9104839 synced recovery +DEBUG 3/6/2026, 2:27:39 PM 9106343 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:27:39 PM 9106344 synced recovery +DEBUG 3/6/2026, 2:27:40 PM 9107535 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:27:40 PM 9107536 synced recovery +DEBUG 3/6/2026, 2:27:42 PM 9108624 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:27:42 PM 9108625 synced recovery +DEBUG 3/6/2026, 2:27:43 PM 9109720 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:27:43 PM 9109721 synced recovery +DEBUG 3/6/2026, 2:27:48 PM 9115184 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:27:48 PM 9115185 synced recovery +DEBUG 3/6/2026, 2:27:50 PM 9117061 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:27:50 PM 9117062 synced recovery +DEBUG 3/6/2026, 2:27:52 PM 9118662 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:27:52 PM 9118663 synced recovery +DEBUG 3/6/2026, 2:27:53 PM 9119704 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:27:53 PM 9119705 synced recovery +DEBUG 3/6/2026, 2:27:54 PM 9120780 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:27:54 PM 9120781 synced recovery +DEBUG 3/6/2026, 2:27:56 PM 9123353 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:27:56 PM 9123354 synced recovery +DEBUG 3/6/2026, 2:27:59 PM 9125852 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:27:59 PM 9125853 synced recovery +DEBUG 3/6/2026, 2:28:00 PM 9126989 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:28:00 PM 9126990 synced recovery +DEBUG 3/6/2026, 2:28:01 PM 9128137 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:28:01 PM 9128138 synced recovery +DEBUG 3/6/2026, 2:28:06 PM 9132907 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:28:06 PM 9132907 synced recovery +DEBUG 3/6/2026, 2:28:07 PM 9133931 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:28:07 PM 9133932 synced recovery +DEBUG 3/6/2026, 2:28:17 PM 9143679 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:28:17 PM 9143680 synced recovery +DEBUG 3/6/2026, 2:28:22 PM 9148898 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:28:22 PM 9148899 synced recovery +DEBUG 3/6/2026, 2:28:23 PM 9150087 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:28:23 PM 9150088 synced recovery +DEBUG 3/6/2026, 2:28:30 PM 9157244 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:28:30 PM 9157245 synced recovery +DEBUG 3/6/2026, 2:28:31 PM 9158445 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:28:31 PM 9158446 synced recovery +DEBUG 3/6/2026, 2:28:34 PM 9160903 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:28:34 PM 9160904 synced recovery +DEBUG 3/6/2026, 2:28:36 PM 9163305 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:28:36 PM 9163306 synced recovery +DEBUG 3/6/2026, 2:28:38 PM 9165581 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:28:38 PM 9165582 synced recovery +DEBUG 3/6/2026, 2:28:41 PM 9168299 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:28:41 PM 9168299 synced recovery +DEBUG 3/6/2026, 2:28:45 PM 9171923 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:28:45 PM 9171926 synced recovery +DEBUG 3/6/2026, 2:28:46 PM 9173167 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:28:46 PM 9173168 synced recovery +DEBUG 3/6/2026, 2:28:51 PM 9177984 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:28:51 PM 9177986 synced recovery +DEBUG 3/6/2026, 2:28:54 PM 9181381 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:28:54 PM 9181384 synced recovery +DEBUG 3/6/2026, 2:29:09 PM 9196013 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:29:09 PM 9196014 synced recovery +DEBUG 3/6/2026, 2:29:14 PM 9201351 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:29:14 PM 9201352 synced recovery +DEBUG 3/6/2026, 2:29:22 PM 9209413 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:29:22 PM 9209414 synced recovery +DEBUG 3/6/2026, 2:29:25 PM 9211950 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:29:25 PM 9211951 synced recovery +DEBUG 3/6/2026, 2:29:27 PM 9213943 added recovery 2 /home/afoucaultc/workspace/cesi/notes/06-03-2026.md (0) +INFO 3/6/2026, 2:29:27 PM 9213943 synced recovery +INFO 3/6/2026, 2:29:30 PM 9217066 [blur] 2 +INFO 3/6/2026, 2:29:30 PM 9217067 [win] blur +INFO 3/6/2026, 2:29:31 PM 9218139 [focus] 2 +INFO 3/6/2026, 2:29:34 PM 9220673 synced recovery +INFO 3/6/2026, 2:29:34 PM 9220674 ----------------before-quit----------------- +INFO 3/6/2026, 2:29:34 PM 9220674 ------------------will-quit------------------ +INFO 3/6/2026, 2:29:34 PM 9220679 -----------------quit------------------ +INFO 3/6/2026, 2:29:34 PM 9220679 closeLogging +INFO 3/9/2026, 9:35:14 AM 78 launch with argv [/usr/share/typora/Typora] +INFO 3/9/2026, 9:35:15 AM 939 ------------------start------------------ +DEBUG 3/9/2026, 9:35:15 AM 1059 before setting +DEBUG 3/9/2026, 9:35:15 AM 1174 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/9/2026, 9:35:15 AM 1184 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/9/2026, 9:35:15 AM 1189 OS is linux 6.18.13-arch1-1 +INFO 3/9/2026, 9:35:15 AM 1189 start LM in devVersion=false +DEBUG 3/9/2026, 9:35:15 AM 1204 after setting +INFO 3/9/2026, 9:35:15 AM 1205 typora version: 1.12.4 +INFO 3/9/2026, 9:35:15 AM 1323 [watch L] +DEBUG 3/9/2026, 9:35:15 AM 1323 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/9/2026, 9:35:16 AM 1351 pure = undefined +INFO 3/9/2026, 9:35:16 AM 1352 renew +DEBUG 3/9/2026, 9:35:16 AM 1352 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 3/9/2026, 9:35:16 AM 1352 [L] pass +DEBUG 3/9/2026, 9:35:16 AM 1352 trailRemains is 0 +INFO 3/9/2026, 9:35:16 AM 1352 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/9/2026, 9:35:16 AM 1355 [watch L] hasL: true +user-dict.json not found +DEBUG 3/9/2026, 9:35:16 AM 1420 putAccelerator File -> &Fichier +DEBUG 3/9/2026, 9:35:16 AM 1422 putAccelerator Edit -> Édit&er +DEBUG 3/9/2026, 9:35:16 AM 1422 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/9/2026, 9:35:16 AM 1422 putAccelerator Format -> F&ormat +DEBUG 3/9/2026, 9:35:16 AM 1423 putAccelerator View -> Présentation(&V) +DEBUG 3/9/2026, 9:35:16 AM 1423 putAccelerator Themes -> &Thèmes +DEBUG 3/9/2026, 9:35:16 AM 1423 putAccelerator Help -> Aide(&H) +DEBUG 3/9/2026, 9:35:16 AM 1534 app.openFile +DEBUG 3/9/2026, 9:35:16 AM 1818 added recovery 1 null (0) +INFO 3/9/2026, 9:35:16 AM 1884 synced recovery +INFO 3/9/2026, 9:35:17 AM 2898 [focus] 1 +DEBUG 3/9/2026, 9:35:17 AM 3071 [renewLicense]: license renewed +INFO 3/9/2026, 9:35:17 AM 3072 ls put SLicense +ERROR 3/9/2026, 9:35:18 AM 3555 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/9/2026, 9:35:18 AM 3561 handle document.loadData +DEBUG 3/9/2026, 9:35:18 AM 3561 document.loadData 0 +ERROR 3/9/2026, 9:35:18 AM 3562 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/9/2026, 9:35:18 AM 3650 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 9:35:18 AM 3650 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/9/2026, 9:35:18 AM 3678 added recovery 1 (0) +INFO 3/9/2026, 9:35:18 AM 3683 synced recovery +INFO 3/9/2026, 9:35:18 AM 3949 [RenderProcess 1][Log] onBecomeActive +INFO 3/9/2026, 9:35:18 AM 3949 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 9:35:23 AM 9062 [blur] 1 +INFO 3/9/2026, 9:35:23 AM 9062 [win] blur +INFO 3/9/2026, 9:35:28 AM 13555 addRecentDocument +INFO 3/9/2026, 9:35:28 AM 13594 [focus] 1 +INFO 3/9/2026, 9:35:28 AM 13626 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 9:35:28 AM 13627 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:35:28 AM 13634 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +DEBUG 3/9/2026, 9:35:28 AM 13776 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 9:35:28 AM 13777 synced recovery +INFO 3/9/2026, 9:35:33 AM 19327 [blur] 1 +INFO 3/9/2026, 9:35:33 AM 19327 [win] blur +INFO 3/9/2026, 9:35:36 AM 22257 [focus] 1 +DEBUG 3/9/2026, 9:35:37 AM 22747 added recovery 1 "--- +gtoday: 06/...chastic model + +" (4426) +INFO 3/9/2026, 9:35:37 AM 22748 synced recovery +INFO 3/9/2026, 9:35:41 AM 26709 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md] +INFO 3/9/2026, 9:35:41 AM 26709 addRecentDocument +DEBUG 3/9/2026, 9:35:41 AM 26721 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/9/2026, 9:35:41 AM 26728 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 9:35:41 AM 26734 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 9:35:41 AM 26737 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:35:41 AM 26737 synced recovery +INFO 3/9/2026, 9:35:41 AM 26739 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md +DEBUG 3/9/2026, 9:35:41 AM 26821 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/9/2026, 9:35:41 AM 26823 synced recovery +INFO 3/9/2026, 9:35:42 AM 27426 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/9/2026, 9:35:42 AM 27426 addRecentDocument +DEBUG 3/9/2026, 9:35:42 AM 27432 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 9:35:42 AM 27437 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 9:35:42 AM 27439 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 9:35:42 AM 27440 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:35:42 AM 27440 synced recovery +INFO 3/9/2026, 9:35:42 AM 27444 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/9/2026, 9:35:42 AM 27451 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 9:35:42 AM 27452 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:35:42 AM 27455 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 0 at: -1 +DEBUG 3/9/2026, 9:35:42 AM 27455 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 9:35:42 AM 27456 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 9:35:42 AM 27457 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:35:42 AM 27457 synced recovery +DEBUG 3/9/2026, 9:35:43 AM 28475 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 9:35:43 AM 28479 synced recovery +INFO 3/9/2026, 9:35:44 AM 30210 [blur] 1 +INFO 3/9/2026, 9:35:44 AM 30211 [win] blur +INFO 3/9/2026, 9:35:45 AM 31228 cleanUpExpiredDrafts +DEBUG 3/9/2026, 9:35:45 AM 31228 cleanUpExpiredDrafts +INFO 3/9/2026, 9:35:48 AM 34261 [focus] 1 +INFO 3/9/2026, 9:35:49 AM 34884 [blur] 1 +INFO 3/9/2026, 9:35:49 AM 34884 [win] blur +INFO 3/9/2026, 9:37:41 AM 146972 [focus] 1 +INFO 3/9/2026, 9:37:45 AM 150397 [blur] 1 +INFO 3/9/2026, 9:37:45 AM 150397 [win] blur +INFO 3/9/2026, 9:38:00 AM 166063 [focus] 1 +INFO 3/9/2026, 9:38:01 AM 167105 [blur] 1 +INFO 3/9/2026, 9:38:01 AM 167107 [win] blur +INFO 3/9/2026, 9:38:05 AM 171218 [focus] 1 +INFO 3/9/2026, 9:38:06 AM 172002 [blur] 1 +INFO 3/9/2026, 9:38:06 AM 172002 [win] blur +INFO 3/9/2026, 9:38:09 AM 175202 [focus] 1 +DEBUG 3/9/2026, 9:38:10 AM 175716 added recovery 1 "--- +gtoday: 06/...obabilité + + + + + +" (4954) +INFO 3/9/2026, 9:38:10 AM 175719 synced recovery +INFO 3/9/2026, 9:38:11 AM 176929 [blur] 1 +INFO 3/9/2026, 9:38:11 AM 176929 [win] blur +INFO 3/9/2026, 9:38:13 AM 178918 [focus] 1 +INFO 3/9/2026, 9:38:13 AM 179072 [blur] 1 +INFO 3/9/2026, 9:38:13 AM 179072 [win] blur +INFO 3/9/2026, 9:38:14 AM 179651 [focus] 1 +INFO 3/9/2026, 9:38:15 AM 181316 [blur] 1 +INFO 3/9/2026, 9:38:15 AM 181316 [win] blur +DEBUG 3/9/2026, 9:38:16 AM 181383 added recovery 1 "--- +:gtoday: 06...obabilité + + + + + +" (4955) +INFO 3/9/2026, 9:38:16 AM 181386 synced recovery +INFO 3/9/2026, 9:38:17 AM 182821 [focus] 1 +INFO 3/9/2026, 9:38:20 AM 185781 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md] +INFO 3/9/2026, 9:38:20 AM 185781 addRecentDocument +DEBUG 3/9/2026, 9:38:20 AM 185790 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/9/2026, 9:38:20 AM 185794 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/9/2026, 9:38:20 AM 185795 lastSync 2026-03-09T08:35:41.437Z, timestamp 1773045341471, mtime 1772781112394.1914 +INFO 3/9/2026, 9:38:20 AM 185796 synced recovery +INFO 3/9/2026, 9:38:20 AM 185799 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 9:38:20 AM 185800 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:38:20 AM 185808 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md +INFO 3/9/2026, 9:38:20 AM 185826 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 9:38:20 AM 185826 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:38:20 AM 185831 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 0 at: -1 +DEBUG 3/9/2026, 9:38:20 AM 185831 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/9/2026, 9:38:20 AM 185832 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 9:38:20 AM 185832 synced recovery +INFO 3/9/2026, 9:38:20 AM 185833 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:38:21 AM 186704 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/9/2026, 9:38:21 AM 186704 addRecentDocument +DEBUG 3/9/2026, 9:38:21 AM 186715 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 9:38:21 AM 186721 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 9:38:21 AM 186726 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 9:38:21 AM 186726 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:38:21 AM 186727 synced recovery +INFO 3/9/2026, 9:38:21 AM 186730 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/9/2026, 9:38:21 AM 186736 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 9:38:21 AM 186736 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:38:21 AM 186738 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 2 at: 1 +DEBUG 3/9/2026, 9:38:21 AM 186739 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 9:38:21 AM 186740 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 9:38:21 AM 186741 synced recovery +INFO 3/9/2026, 9:38:21 AM 186741 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/9/2026, 9:38:22 AM 187778 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 9:38:22 AM 187783 synced recovery +INFO 3/9/2026, 9:38:24 AM 189349 [blur] 1 +INFO 3/9/2026, 9:38:24 AM 189349 [win] blur +INFO 3/9/2026, 9:38:30 AM 195510 [focus] 1 +INFO 3/9/2026, 9:38:31 AM 196439 [blur] 1 +INFO 3/9/2026, 9:38:31 AM 196440 [win] blur +INFO 3/9/2026, 9:38:42 AM 207373 [focus] 1 +INFO 3/9/2026, 9:38:43 AM 208471 [blur] 1 +INFO 3/9/2026, 9:38:43 AM 208471 [win] blur +INFO 3/9/2026, 9:39:25 AM 250914 [focus] 1 +INFO 3/9/2026, 9:39:26 AM 251462 [blur] 1 +INFO 3/9/2026, 9:39:26 AM 251462 [win] blur +INFO 3/9/2026, 9:39:31 AM 257054 [focus] 1 +INFO 3/9/2026, 9:39:32 AM 257697 [blur] 1 +INFO 3/9/2026, 9:39:32 AM 257697 [win] blur +INFO 3/9/2026, 9:39:32 AM 258013 [focus] 1 +INFO 3/9/2026, 9:39:33 AM 258449 [blur] 1 +INFO 3/9/2026, 9:39:33 AM 258450 [win] blur +INFO 3/9/2026, 9:39:34 AM 259794 [focus] 1 +DEBUG 3/9/2026, 9:39:34 AM 260330 added recovery 1 "--- +gtoday: 06/...obabilité + + + + + +" (4952) +INFO 3/9/2026, 9:39:34 AM 260333 synced recovery +INFO 3/9/2026, 9:39:40 AM 265600 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md] +INFO 3/9/2026, 9:39:40 AM 265601 addRecentDocument +DEBUG 3/9/2026, 9:39:40 AM 265608 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/9/2026, 9:39:40 AM 265609 synced recovery +INFO 3/9/2026, 9:39:40 AM 265613 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/9/2026, 9:39:40 AM 265614 lastSync 2026-03-09T08:38:20.497Z, timestamp 1773045500584, mtime 1772781112394.1914 +INFO 3/9/2026, 9:39:40 AM 265619 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 9:39:40 AM 265620 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:39:40 AM 265626 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md +INFO 3/9/2026, 9:39:40 AM 265638 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 9:39:40 AM 265639 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:39:40 AM 265647 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 1 at: 0 +DEBUG 3/9/2026, 9:39:40 AM 265648 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/9/2026, 9:39:40 AM 265648 synced recovery +INFO 3/9/2026, 9:39:40 AM 265649 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 9:39:40 AM 265650 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:39:41 AM 266489 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/9/2026, 9:39:41 AM 266489 addRecentDocument +DEBUG 3/9/2026, 9:39:41 AM 266495 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 9:39:41 AM 266499 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 9:39:41 AM 266501 synced recovery +INFO 3/9/2026, 9:39:41 AM 266502 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 9:39:41 AM 266503 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:39:41 AM 266506 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/9/2026, 9:39:41 AM 266514 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 9:39:41 AM 266515 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:39:41 AM 266518 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 3 at: 2 +DEBUG 3/9/2026, 9:39:41 AM 266519 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 9:39:41 AM 266519 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 9:39:41 AM 266520 synced recovery +INFO 3/9/2026, 9:39:41 AM 266520 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/9/2026, 9:39:42 AM 267554 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 9:39:42 AM 267555 synced recovery +INFO 3/9/2026, 9:39:43 AM 269040 [blur] 1 +INFO 3/9/2026, 9:39:43 AM 269040 [win] blur +DEBUG 3/9/2026, 9:40:30 AM 315619 added recovery 1 "--- +gtoday: 06/...obabilité + + + + + +" (4977) +INFO 3/9/2026, 9:40:30 AM 315620 synced recovery +INFO 3/9/2026, 9:41:46 AM 391845 [focus] 1 +INFO 3/9/2026, 9:41:47 AM 392722 [blur] 1 +INFO 3/9/2026, 9:41:47 AM 392722 [win] blur +INFO 3/9/2026, 9:42:36 AM 442063 [focus] 1 +INFO 3/9/2026, 9:42:37 AM 442827 [blur] 1 +INFO 3/9/2026, 9:42:37 AM 442827 [win] blur +INFO 3/9/2026, 9:42:38 AM 443483 [focus] 1 +INFO 3/9/2026, 9:42:38 AM 444107 [blur] 1 +INFO 3/9/2026, 9:42:38 AM 444107 [win] blur +INFO 3/9/2026, 9:42:51 AM 457052 [focus] 1 +INFO 3/9/2026, 9:42:52 AM 457883 [blur] 1 +INFO 3/9/2026, 9:42:52 AM 457884 [win] blur +INFO 3/9/2026, 9:43:19 AM 484988 [focus] 1 +INFO 3/9/2026, 9:43:20 AM 485568 [blur] 1 +INFO 3/9/2026, 9:43:20 AM 485568 [win] blur +DEBUG 3/9/2026, 9:44:06 AM 531871 2nd 0.15677180592924578 +DEBUG 3/9/2026, 9:44:06 AM 531874 pure = true +INFO 3/9/2026, 9:44:06 AM 531874 renew +DEBUG 3/9/2026, 9:44:06 AM 531874 [renewLicense] license renewed in 12h +DEBUG 3/9/2026, 9:44:06 AM 531874 [L] pass +INFO 3/9/2026, 9:44:16 AM 541415 [focus] 1 +INFO 3/9/2026, 9:44:16 AM 541892 [blur] 1 +INFO 3/9/2026, 9:44:16 AM 541892 [win] blur +INFO 3/9/2026, 9:44:31 AM 556695 [focus] 1 +INFO 3/9/2026, 9:44:31 AM 557284 [blur] 1 +INFO 3/9/2026, 9:44:31 AM 557284 [win] blur +INFO 3/9/2026, 9:45:19 AM 604861 [focus] 1 +INFO 3/9/2026, 9:45:20 AM 605496 [blur] 1 +INFO 3/9/2026, 9:45:20 AM 605497 [win] blur +INFO 3/9/2026, 9:54:56 AM 1181389 [focus] 1 +INFO 3/9/2026, 9:55:00 AM 1185494 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md] +INFO 3/9/2026, 9:55:00 AM 1185494 addRecentDocument +DEBUG 3/9/2026, 9:55:00 AM 1185499 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/9/2026, 9:55:00 AM 1185504 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 9:55:00 AM 1185506 synced recovery +DEBUG 3/9/2026, 9:55:00 AM 1185507 lastSync 2026-03-09T08:39:40.314Z, timestamp 1773045580358, mtime 1772781112394.1914 +INFO 3/9/2026, 9:55:00 AM 1185528 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 9:55:00 AM 1185528 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:55:00 AM 1185537 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md +INFO 3/9/2026, 9:55:00 AM 1185561 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 9:55:00 AM 1185562 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:55:00 AM 1185573 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 2 at: 1 +DEBUG 3/9/2026, 9:55:00 AM 1185574 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/9/2026, 9:55:00 AM 1185575 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 9:55:00 AM 1185576 synced recovery +INFO 3/9/2026, 9:55:00 AM 1185576 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:55:00 AM 1186313 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md] +INFO 3/9/2026, 9:55:00 AM 1186313 addRecentDocument +DEBUG 3/9/2026, 9:55:00 AM 1186320 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md (0) +INFO 3/9/2026, 9:55:00 AM 1186323 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 9:55:00 AM 1186324 synced recovery +INFO 3/9/2026, 9:55:00 AM 1186325 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 9:55:00 AM 1186326 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:55:00 AM 1186328 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md +DEBUG 3/9/2026, 9:55:01 AM 1186360 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md (0) +INFO 3/9/2026, 9:55:01 AM 1186361 synced recovery +INFO 3/9/2026, 9:55:01 AM 1186826 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/9/2026, 9:55:01 AM 1186828 addRecentDocument +DEBUG 3/9/2026, 9:55:01 AM 1186845 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 9:55:01 AM 1186850 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 9:55:01 AM 1186853 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 9:55:01 AM 1186853 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:55:01 AM 1186853 synced recovery +INFO 3/9/2026, 9:55:01 AM 1186856 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +DEBUG 3/9/2026, 9:55:01 AM 1186879 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 9:55:01 AM 1186880 synced recovery +INFO 3/9/2026, 9:55:09 AM 1194732 [blur] 1 +INFO 3/9/2026, 9:55:09 AM 1194732 [win] blur +INFO 3/9/2026, 9:55:29 AM 1214860 [focus] 1 +DEBUG 3/9/2026, 9:55:30 AM 1215365 added recovery 1 "--- +gtoday: 06/...obabilité + + + + + +" (5376) +INFO 3/9/2026, 9:55:30 AM 1215365 synced recovery +INFO 3/9/2026, 9:55:32 AM 1217467 [blur] 1 +INFO 3/9/2026, 9:55:32 AM 1217467 [win] blur +INFO 3/9/2026, 9:55:40 AM 1225406 [focus] 1 +INFO 3/9/2026, 9:55:42 AM 1228255 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md] +INFO 3/9/2026, 9:55:42 AM 1228256 addRecentDocument +DEBUG 3/9/2026, 9:55:42 AM 1228261 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/9/2026, 9:55:42 AM 1228264 synced recovery +INFO 3/9/2026, 9:55:42 AM 1228275 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 9:55:42 AM 1228279 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 9:55:42 AM 1228283 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:55:42 AM 1228283 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md +DEBUG 3/9/2026, 9:55:43 AM 1228359 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/9/2026, 9:55:43 AM 1228363 synced recovery +INFO 3/9/2026, 9:55:44 AM 1229492 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/9/2026, 9:55:44 AM 1229493 addRecentDocument +DEBUG 3/9/2026, 9:55:44 AM 1229511 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 9:55:44 AM 1229516 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 9:55:44 AM 1229517 synced recovery +INFO 3/9/2026, 9:55:44 AM 1229518 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 9:55:44 AM 1229519 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:55:44 AM 1229523 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/9/2026, 9:55:44 AM 1229530 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 9:55:44 AM 1229530 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 9:55:44 AM 1229531 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 0 at: -1 +DEBUG 3/9/2026, 9:55:44 AM 1229532 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 9:55:44 AM 1229532 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 9:55:44 AM 1229532 synced recovery +INFO 3/9/2026, 9:55:44 AM 1229533 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/9/2026, 9:55:45 AM 1230556 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 9:55:45 AM 1230559 synced recovery +INFO 3/9/2026, 9:55:56 AM 1241867 [blur] 1 +INFO 3/9/2026, 9:55:56 AM 1241868 [win] blur +INFO 3/9/2026, 10:06:29 AM 1874715 [focus] 1 +INFO 3/9/2026, 10:06:30 AM 1875945 [blur] 1 +INFO 3/9/2026, 10:06:30 AM 1875945 [win] blur +INFO 3/9/2026, 10:06:41 AM 1887098 [focus] 1 +INFO 3/9/2026, 10:06:42 AM 1887778 [blur] 1 +INFO 3/9/2026, 10:06:42 AM 1887782 [win] blur +INFO 3/9/2026, 10:09:24 AM 2050155 [focus] 1 +INFO 3/9/2026, 10:09:25 AM 2050693 [blur] 1 +INFO 3/9/2026, 10:09:25 AM 2050693 [win] blur +INFO 3/9/2026, 10:11:39 AM 2185203 [focus] 1 +INFO 3/9/2026, 10:11:40 AM 2185633 [blur] 1 +INFO 3/9/2026, 10:11:40 AM 2185633 [win] blur +INFO 3/9/2026, 10:12:49 AM 2255185 [focus] 1 +INFO 3/9/2026, 10:12:50 AM 2255905 [blur] 1 +INFO 3/9/2026, 10:12:50 AM 2255905 [win] blur +INFO 3/9/2026, 10:13:11 AM 2276432 [focus] 1 +INFO 3/9/2026, 10:13:11 AM 2277203 [blur] 1 +INFO 3/9/2026, 10:13:11 AM 2277204 [win] blur +INFO 3/9/2026, 10:13:14 AM 2279536 [focus] 1 +INFO 3/9/2026, 10:13:14 AM 2280210 [blur] 1 +INFO 3/9/2026, 10:13:14 AM 2280211 [win] blur +INFO 3/9/2026, 10:13:17 AM 2282740 [focus] 1 +INFO 3/9/2026, 10:13:17 AM 2283315 [blur] 1 +INFO 3/9/2026, 10:13:17 AM 2283315 [win] blur +INFO 3/9/2026, 10:13:19 AM 2285144 [RenderProcess 1][Log] presentedItemChanged, path is 606115451 +INFO 3/9/2026, 10:13:19 AM 2285145 [RenderProcess 1][Log] getDataFromFile +INFO 3/9/2026, 10:13:19 AM 2285215 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/9/2026, 10:13:19 AM 2285221 [RenderProcess 1][Log] presentedItemChanged did happen +INFO 3/9/2026, 10:13:19 AM 2285222 [RenderProcess 1][Log] doHandlerPresentedItemChange +INFO 3/9/2026, 10:13:19 AM 2285223 [RenderProcess 1][Log] getDataFromFile +INFO 3/9/2026, 10:13:19 AM 2285224 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/9/2026, 10:13:19 AM 2285226 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true} +INFO 3/9/2026, 10:13:19 AM 2285231 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 10:13:21 AM 2286448 [focus] 1 +DEBUG 3/9/2026, 10:13:21 AM 2286542 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 10:13:21 AM 2286544 synced recovery +INFO 3/9/2026, 10:13:23 AM 2288521 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md] +INFO 3/9/2026, 10:13:23 AM 2288522 addRecentDocument +DEBUG 3/9/2026, 10:13:23 AM 2288529 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/9/2026, 10:13:23 AM 2288533 synced recovery +INFO 3/9/2026, 10:13:23 AM 2288535 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/9/2026, 10:13:23 AM 2288536 lastSync 2026-03-09T08:55:42.950Z, timestamp 1773046543003, mtime 1772781112394.1914 +INFO 3/9/2026, 10:13:23 AM 2288539 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 10:13:23 AM 2288539 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 10:13:23 AM 2288542 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md +INFO 3/9/2026, 10:13:23 AM 2288612 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 10:13:23 AM 2288612 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 10:13:23 AM 2288619 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 0 at: -1 +DEBUG 3/9/2026, 10:13:23 AM 2288619 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/9/2026, 10:13:23 AM 2288621 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 10:13:23 AM 2288622 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 10:13:23 AM 2288622 synced recovery +DEBUG 3/9/2026, 10:13:24 AM 2289671 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/9/2026, 10:13:24 AM 2289674 synced recovery +INFO 3/9/2026, 10:13:24 AM 2290083 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md] +INFO 3/9/2026, 10:13:24 AM 2290084 addRecentDocument +DEBUG 3/9/2026, 10:13:24 AM 2290090 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md (0) +INFO 3/9/2026, 10:13:24 AM 2290095 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 10:13:24 AM 2290096 synced recovery +INFO 3/9/2026, 10:13:24 AM 2290096 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 10:13:24 AM 2290096 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 10:13:24 AM 2290099 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md +DEBUG 3/9/2026, 10:13:24 AM 2290143 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md (0) +INFO 3/9/2026, 10:13:24 AM 2290144 synced recovery +INFO 3/9/2026, 10:13:25 AM 2290821 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md] +INFO 3/9/2026, 10:13:25 AM 2290821 addRecentDocument +DEBUG 3/9/2026, 10:13:25 AM 2290838 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md (0) +INFO 3/9/2026, 10:13:25 AM 2290844 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 10:13:25 AM 2290845 synced recovery +INFO 3/9/2026, 10:13:25 AM 2290847 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 10:13:25 AM 2290848 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 10:13:25 AM 2290850 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md +DEBUG 3/9/2026, 10:13:25 AM 2290868 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md (0) +INFO 3/9/2026, 10:13:25 AM 2290869 synced recovery +INFO 3/9/2026, 10:13:25 AM 2291267 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/9/2026, 10:13:25 AM 2291268 addRecentDocument +DEBUG 3/9/2026, 10:13:25 AM 2291289 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 10:13:25 AM 2291296 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 10:13:25 AM 2291296 synced recovery +INFO 3/9/2026, 10:13:25 AM 2291298 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 10:13:25 AM 2291299 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 10:13:25 AM 2291301 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +DEBUG 3/9/2026, 10:13:25 AM 2291330 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 10:13:25 AM 2291331 synced recovery +INFO 3/9/2026, 10:14:18 AM 2344144 [blur] 1 +INFO 3/9/2026, 10:14:18 AM 2344144 [win] blur +INFO 3/9/2026, 10:14:20 AM 2345888 [focus] 1 +INFO 3/9/2026, 10:14:24 AM 2350032 [blur] 1 +INFO 3/9/2026, 10:14:24 AM 2350032 [win] blur +INFO 3/9/2026, 10:20:59 AM 2744571 [focus] 1 +INFO 3/9/2026, 10:20:59 AM 2745096 [blur] 1 +INFO 3/9/2026, 10:20:59 AM 2745100 [win] blur +INFO 3/9/2026, 10:21:05 AM 2750474 [focus] 1 +INFO 3/9/2026, 10:21:05 AM 2751019 [blur] 1 +INFO 3/9/2026, 10:21:05 AM 2751019 [win] blur +INFO 3/9/2026, 10:22:03 AM 2809224 [focus] 1 +INFO 3/9/2026, 10:22:04 AM 2809675 [blur] 1 +INFO 3/9/2026, 10:22:04 AM 2809675 [win] blur +INFO 3/9/2026, 10:22:19 AM 2824571 [focus] 1 +INFO 3/9/2026, 10:22:19 AM 2824763 [blur] 1 +INFO 3/9/2026, 10:22:19 AM 2824763 [win] blur +INFO 3/9/2026, 10:22:21 AM 2826843 [focus] 1 +INFO 3/9/2026, 10:22:21 AM 2827001 [blur] 1 +INFO 3/9/2026, 10:22:21 AM 2827001 [win] blur +INFO 3/9/2026, 10:22:25 AM 2831191 [focus] 1 +INFO 3/9/2026, 10:22:26 AM 2831351 [blur] 1 +INFO 3/9/2026, 10:22:26 AM 2831351 [win] blur +INFO 3/9/2026, 10:22:27 AM 2832698 [focus] 1 +INFO 3/9/2026, 10:22:27 AM 2832856 [blur] 1 +INFO 3/9/2026, 10:22:27 AM 2832856 [win] blur +INFO 3/9/2026, 10:24:31 AM 2957287 [focus] 1 +INFO 3/9/2026, 10:24:32 AM 2957513 [blur] 1 +INFO 3/9/2026, 10:24:32 AM 2957513 [win] blur +INFO 3/9/2026, 10:25:08 AM 2993944 [focus] 1 +INFO 3/9/2026, 10:25:09 AM 2994519 [blur] 1 +INFO 3/9/2026, 10:25:09 AM 2994520 [win] blur +INFO 3/9/2026, 10:25:22 AM 3008264 [focus] 1 +INFO 3/9/2026, 10:25:23 AM 3008843 [blur] 1 +INFO 3/9/2026, 10:25:23 AM 3008843 [win] blur +INFO 3/9/2026, 10:29:19 AM 3245241 [focus] 1 +INFO 3/9/2026, 10:29:21 AM 3246534 [blur] 1 +INFO 3/9/2026, 10:29:21 AM 3246535 [win] blur +INFO 3/9/2026, 10:30:13 AM 3298901 [focus] 1 +INFO 3/9/2026, 10:30:14 AM 3299446 [blur] 1 +INFO 3/9/2026, 10:30:14 AM 3299446 [win] blur +INFO 3/9/2026, 10:45:56 AM 4241981 [focus] 1 +INFO 3/9/2026, 10:45:57 AM 4242590 [blur] 1 +INFO 3/9/2026, 10:45:57 AM 4242591 [win] blur +INFO 3/9/2026, 10:46:29 AM 4275212 [focus] 1 +INFO 3/9/2026, 10:46:30 AM 4275739 [blur] 1 +INFO 3/9/2026, 10:46:30 AM 4275739 [win] blur +DEBUG 3/9/2026, 10:48:21 AM 4386833 added recovery 1 "--- +gtoday: 06/...d or learned. + +" (5891) +INFO 3/9/2026, 10:48:21 AM 4386835 synced recovery +INFO 3/9/2026, 10:49:08 AM 4433874 [focus] 1 +DEBUG 3/9/2026, 10:49:14 AM 4440168 added recovery 1 "--- +gtoday: 06/...d or learned. + +" (5891) +INFO 3/9/2026, 10:49:14 AM 4440172 synced recovery +INFO 3/9/2026, 10:49:18 AM 4443761 [blur] 1 +INFO 3/9/2026, 10:49:18 AM 4443761 [win] blur +DEBUG 3/9/2026, 10:49:18 AM 4443818 added recovery 1 "--- +gtoday: 06/...d or learned. + +" (5891) +INFO 3/9/2026, 10:49:18 AM 4443820 synced recovery +INFO 3/9/2026, 10:50:09 AM 4494754 [focus] 1 +INFO 3/9/2026, 10:50:14 AM 4500299 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md] +INFO 3/9/2026, 10:50:14 AM 4500299 addRecentDocument +DEBUG 3/9/2026, 10:50:14 AM 4500326 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/9/2026, 10:50:14 AM 4500331 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 10:50:14 AM 4500332 synced recovery +INFO 3/9/2026, 10:50:14 AM 4500335 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 10:50:15 AM 4500335 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 10:50:15 AM 4500337 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md +DEBUG 3/9/2026, 10:50:15 AM 4500423 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/9/2026, 10:50:15 AM 4500441 synced recovery +INFO 3/9/2026, 10:50:15 AM 4501012 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/9/2026, 10:50:15 AM 4501013 addRecentDocument +DEBUG 3/9/2026, 10:50:15 AM 4501021 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 10:50:15 AM 4501026 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 10:50:15 AM 4501029 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 10:50:15 AM 4501029 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 10:50:15 AM 4501031 synced recovery +INFO 3/9/2026, 10:50:15 AM 4501032 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/9/2026, 10:50:15 AM 4501040 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 10:50:15 AM 4501041 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 10:50:15 AM 4501043 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 2 at: 1 +DEBUG 3/9/2026, 10:50:15 AM 4501044 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 10:50:15 AM 4501045 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 10:50:15 AM 4501045 synced recovery +INFO 3/9/2026, 10:50:15 AM 4501046 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/9/2026, 10:50:16 AM 4502085 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 10:50:16 AM 4502086 synced recovery +INFO 3/9/2026, 10:50:21 AM 4507203 [blur] 1 +INFO 3/9/2026, 10:50:21 AM 4507203 [win] blur +INFO 3/9/2026, 10:52:50 AM 4655940 [focus] 1 +INFO 3/9/2026, 10:52:51 AM 4656917 [blur] 1 +INFO 3/9/2026, 10:52:51 AM 4656917 [win] blur +INFO 3/9/2026, 10:52:57 AM 4662676 [focus] 1 +INFO 3/9/2026, 10:52:58 AM 4663731 [blur] 1 +INFO 3/9/2026, 10:52:58 AM 4663731 [win] blur +INFO 3/9/2026, 10:53:35 AM 4701223 [focus] 1 +INFO 3/9/2026, 10:53:36 AM 4701924 [blur] 1 +INFO 3/9/2026, 10:53:36 AM 4701924 [win] blur +INFO 3/9/2026, 10:53:48 AM 4714166 [focus] 1 +INFO 3/9/2026, 10:53:49 AM 4714772 [blur] 1 +INFO 3/9/2026, 10:53:49 AM 4714773 [win] blur +INFO 3/9/2026, 10:54:14 AM 4739782 [focus] 1 +INFO 3/9/2026, 10:54:14 AM 4740214 [blur] 1 +INFO 3/9/2026, 10:54:14 AM 4740214 [win] blur +INFO 3/9/2026, 10:56:31 AM 4877308 [focus] 1 +INFO 3/9/2026, 10:56:32 AM 4877796 [blur] 1 +INFO 3/9/2026, 10:56:32 AM 4877796 [win] blur +INFO 3/9/2026, 11:03:42 AM 5307518 [RenderProcess 1][Log] presentedItemChanged, path is 606115451 +INFO 3/9/2026, 11:03:42 AM 5307519 [RenderProcess 1][Log] getDataFromFile +INFO 3/9/2026, 11:03:42 AM 5307519 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/9/2026, 11:03:42 AM 5307520 [RenderProcess 1][Log] presentedItemChanged did happen +INFO 3/9/2026, 11:03:42 AM 5307520 [RenderProcess 1][Log] doHandlerPresentedItemChange +INFO 3/9/2026, 11:03:42 AM 5307521 [RenderProcess 1][Log] getDataFromFile +INFO 3/9/2026, 11:03:42 AM 5307521 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +INFO 3/9/2026, 11:03:42 AM 5307522 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true} +INFO 3/9/2026, 11:03:42 AM 5307523 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/9/2026, 11:03:52 AM 5317548 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/9/2026, 11:03:52 AM 5317565 synced recovery +DEBUG 3/9/2026, 11:06:15 AM 5460475 added recovery 1 "--- +gtoday: 06/...as and weight) +" (7127) +INFO 3/9/2026, 11:06:15 AM 5460476 synced recovery +INFO 3/9/2026, 11:11:30 AM 5775567 [focus] 1 +INFO 3/9/2026, 11:11:30 AM 5776174 [blur] 1 +INFO 3/9/2026, 11:11:30 AM 5776174 [win] blur +INFO 3/9/2026, 11:11:31 AM 5776814 [focus] 1 +INFO 3/9/2026, 11:11:36 AM 5782108 [blur] 1 +INFO 3/9/2026, 11:11:36 AM 5782108 [win] blur +INFO 3/9/2026, 11:11:38 AM 5783471 [focus] 1 +INFO 3/9/2026, 11:11:38 AM 5783663 [blur] 1 +INFO 3/9/2026, 11:11:38 AM 5783663 [win] blur +INFO 3/9/2026, 11:11:43 AM 5788487 [focus] 1 +INFO 3/9/2026, 11:11:43 AM 5788670 [blur] 1 +INFO 3/9/2026, 11:11:43 AM 5788670 [win] blur +INFO 3/9/2026, 11:12:37 AM 5842925 [focus] 1 +INFO 3/9/2026, 11:12:38 AM 5843503 [blur] 1 +INFO 3/9/2026, 11:12:38 AM 5843503 [win] blur +INFO 3/9/2026, 11:19:20 AM 6246174 [focus] 1 +INFO 3/9/2026, 11:19:21 AM 6246720 [blur] 1 +INFO 3/9/2026, 11:19:21 AM 6246720 [win] blur +INFO 3/9/2026, 11:20:04 AM 6289536 [focus] 1 +INFO 3/9/2026, 11:20:04 AM 6290156 [blur] 1 +INFO 3/9/2026, 11:20:04 AM 6290156 [win] blur +INFO 3/9/2026, 11:20:07 AM 6292498 [focus] 1 +INFO 3/9/2026, 11:20:07 AM 6292864 [blur] 1 +INFO 3/9/2026, 11:20:07 AM 6292865 [win] blur +INFO 3/9/2026, 11:20:36 AM 6322256 [focus] 1 +INFO 3/9/2026, 11:20:37 AM 6322703 [blur] 1 +INFO 3/9/2026, 11:20:37 AM 6322703 [win] blur +INFO 3/9/2026, 11:20:38 AM 6324189 [focus] 1 +INFO 3/9/2026, 11:20:39 AM 6324559 [blur] 1 +INFO 3/9/2026, 11:20:39 AM 6324559 [win] blur +INFO 3/9/2026, 11:20:42 AM 6327410 [focus] 1 +INFO 3/9/2026, 11:20:42 AM 6327727 [blur] 1 +INFO 3/9/2026, 11:20:42 AM 6327727 [win] blur +INFO 3/9/2026, 11:20:52 AM 6337982 [focus] 1 +INFO 3/9/2026, 11:20:53 AM 6338718 [blur] 1 +INFO 3/9/2026, 11:20:53 AM 6338719 [win] blur +INFO 3/9/2026, 11:21:29 AM 6374751 [focus] 1 +INFO 3/9/2026, 11:21:29 AM 6375153 [blur] 1 +INFO 3/9/2026, 11:21:29 AM 6375157 [win] blur +INFO 3/9/2026, 11:21:30 AM 6375840 [focus] 1 +INFO 3/9/2026, 11:21:31 AM 6376432 [blur] 1 +INFO 3/9/2026, 11:21:31 AM 6376432 [win] blur +INFO 3/9/2026, 11:22:09 AM 6414881 [focus] 1 +INFO 3/9/2026, 11:22:09 AM 6415276 [blur] 1 +INFO 3/9/2026, 11:22:09 AM 6415277 [win] blur +INFO 3/9/2026, 11:22:23 AM 6428830 [focus] 1 +INFO 3/9/2026, 11:22:23 AM 6429169 [blur] 1 +INFO 3/9/2026, 11:22:23 AM 6429172 [win] blur +INFO 3/9/2026, 11:31:30 AM 6975378 [focus] 1 +INFO 3/9/2026, 11:31:30 AM 6975886 [blur] 1 +INFO 3/9/2026, 11:31:30 AM 6975887 [win] blur +INFO 3/9/2026, 11:37:06 AM 7311861 [focus] 1 +INFO 3/9/2026, 11:37:06 AM 7311967 [blur] 1 +INFO 3/9/2026, 11:37:06 AM 7311967 [win] blur +INFO 3/9/2026, 11:37:09 AM 7314755 [focus] 1 +INFO 3/9/2026, 11:37:09 AM 7314992 [blur] 1 +INFO 3/9/2026, 11:37:09 AM 7314992 [win] blur +INFO 3/9/2026, 11:37:10 AM 7315551 [focus] 1 +INFO 3/9/2026, 11:37:10 AM 7315998 [blur] 1 +INFO 3/9/2026, 11:37:10 AM 7315998 [win] blur +INFO 3/9/2026, 11:42:34 AM 7639823 [focus] 1 +INFO 3/9/2026, 11:42:34 AM 7639824 [blur] 1 +INFO 3/9/2026, 11:42:34 AM 7639824 [win] blur +INFO 3/9/2026, 11:54:21 AM 8346657 [focus] 1 +INFO 3/9/2026, 11:54:22 AM 8348046 [blur] 1 +INFO 3/9/2026, 11:54:22 AM 8348048 [win] blur +INFO 3/9/2026, 11:54:23 AM 8349007 [focus] 1 +INFO 3/9/2026, 11:54:23 AM 8349247 [blur] 1 +INFO 3/9/2026, 11:54:23 AM 8349247 [win] blur +INFO 3/9/2026, 12:15:22 PM 9607925 [focus] 1 +INFO 3/9/2026, 12:15:22 PM 9608043 [blur] 1 +INFO 3/9/2026, 12:15:22 PM 9608043 [win] blur +INFO 3/9/2026, 12:15:23 PM 9608749 [focus] 1 +INFO 3/9/2026, 12:15:23 PM 9608974 [blur] 1 +INFO 3/9/2026, 12:15:23 PM 9608974 [win] blur +INFO 3/9/2026, 1:36:36 PM 115 launch with argv [/usr/share/typora/Typora] +INFO 3/9/2026, 1:36:38 PM 1395 ------------------start------------------ +DEBUG 3/9/2026, 1:36:38 PM 1580 before setting +DEBUG 3/9/2026, 1:36:38 PM 1807 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/9/2026, 1:36:38 PM 1831 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/9/2026, 1:36:38 PM 1841 OS is linux 6.19.6-arch1-1 +INFO 3/9/2026, 1:36:38 PM 1841 start LM in devVersion=false +DEBUG 3/9/2026, 1:36:38 PM 1855 after setting +INFO 3/9/2026, 1:36:38 PM 1856 typora version: 1.12.4 +INFO 3/9/2026, 1:36:38 PM 1950 [watch L] +DEBUG 3/9/2026, 1:36:38 PM 1950 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/9/2026, 1:36:38 PM 1954 pure = undefined +INFO 3/9/2026, 1:36:38 PM 1954 renew +DEBUG 3/9/2026, 1:36:38 PM 1954 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 3/9/2026, 1:36:38 PM 1954 [L] pass +DEBUG 3/9/2026, 1:36:38 PM 1955 trailRemains is 0 +INFO 3/9/2026, 1:36:38 PM 1955 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/9/2026, 1:36:38 PM 1958 [watch L] hasL: true +user-dict.json not found +INFO 3/9/2026, 1:36:38 PM 1986 launch from abnormal quit +INFO 3/9/2026, 1:36:38 PM 1986 cleanupOlderCache +DEBUG 3/9/2026, 1:36:39 PM 2287 putAccelerator File -> &Fichier +DEBUG 3/9/2026, 1:36:39 PM 2287 putAccelerator Edit -> Édit&er +DEBUG 3/9/2026, 1:36:39 PM 2288 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/9/2026, 1:36:39 PM 2288 putAccelerator Format -> F&ormat +DEBUG 3/9/2026, 1:36:39 PM 2288 putAccelerator View -> Présentation(&V) +DEBUG 3/9/2026, 1:36:39 PM 2288 putAccelerator Themes -> &Thèmes +DEBUG 3/9/2026, 1:36:39 PM 2288 putAccelerator Help -> Aide(&H) +INFO 3/9/2026, 1:36:39 PM 2328 recoverWindow {"id":1,"path":"","untitledId":1773049815677,"type":"","useCRLF":false,"hasUnsaved":true,"scrollPos":3366,"syncDate":1773050775140,"mountFolder":"/home/afoucaultc/workspace/cesi/notes/zoteronotes","bound":{"fullscreen":false,"maximized":true}} +INFO 3/9/2026, 1:36:39 PM 2355 [1] recover from content 7127 "--- +gtoday: 06/...as and weight) +" +DEBUG 3/9/2026, 1:36:39 PM 2355 app.openFile +DEBUG 3/9/2026, 1:36:39 PM 2756 added recovery 1 null (0) +INFO 3/9/2026, 1:36:39 PM 2858 synced recovery +INFO 3/9/2026, 1:36:41 PM 4462 [focus] 1 +DEBUG 3/9/2026, 1:36:41 PM 4664 [renewLicense]: license renewed +INFO 3/9/2026, 1:36:41 PM 4665 ls put SLicense +ERROR 3/9/2026, 1:36:42 PM 6043 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/9/2026, 1:36:42 PM 6048 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/9/2026, 1:36:42 PM 6051 handle document.loadData +INFO 3/9/2026, 1:36:42 PM 6051 load from recover content length: 7127 +DEBUG 3/9/2026, 1:36:42 PM 6051 document.loadData 0 +INFO 3/9/2026, 1:36:43 PM 6373 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 1:36:43 PM 6373 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:36:43 PM 6374 [RenderProcess 1][Log] recoverFromBackup +INFO 3/9/2026, 1:36:44 PM 7833 [RenderProcess 1][Log] onBecomeActive +INFO 3/9/2026, 1:36:44 PM 7834 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/9/2026, 1:36:45 PM 8520 added recovery 1 "--- +gtoday: 06/...ias and weight)" (7126) +INFO 3/9/2026, 1:36:45 PM 8527 synced recovery +INFO 3/9/2026, 1:36:47 PM 10642 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/smoldersReliabilityAnalysisPrediction2010.md] +INFO 3/9/2026, 1:36:47 PM 10643 addRecentDocument +DEBUG 3/9/2026, 1:36:47 PM 10658 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/smoldersReliabilityAnalysisPrediction2010.md (0) +INFO 3/9/2026, 1:36:47 PM 10660 synced recovery +INFO 3/9/2026, 1:36:47 PM 10668 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 1:36:47 PM 10671 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 1:36:47 PM 10672 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:36:47 PM 10676 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/smoldersReliabilityAnalysisPrediction2010.md +DEBUG 3/9/2026, 1:36:47 PM 10757 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/smoldersReliabilityAnalysisPrediction2010.md (0) +INFO 3/9/2026, 1:36:47 PM 10759 synced recovery +INFO 3/9/2026, 1:36:49 PM 12854 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md] +INFO 3/9/2026, 1:36:49 PM 12854 addRecentDocument +DEBUG 3/9/2026, 1:36:49 PM 12881 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 1:36:49 PM 12891 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 1:36:49 PM 12892 synced recovery +INFO 3/9/2026, 1:36:49 PM 12895 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 1:36:49 PM 12895 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:36:49 PM 12899 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md +DEBUG 3/9/2026, 1:36:49 PM 13032 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 1:36:49 PM 13037 synced recovery +INFO 3/9/2026, 1:36:53 PM 16745 [blur] 1 +INFO 3/9/2026, 1:36:53 PM 16745 [win] blur +INFO 3/9/2026, 1:37:03 PM 26397 [focus] 1 +DEBUG 3/9/2026, 1:37:03 PM 26478 added recovery 1 "--- +source: bai....8V_{50}(z) +$$ +" (837) +INFO 3/9/2026, 1:37:03 PM 26486 synced recovery +INFO 3/9/2026, 1:37:06 PM 29244 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md] +INFO 3/9/2026, 1:37:06 PM 29244 addRecentDocument +DEBUG 3/9/2026, 1:37:06 PM 29252 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md (0) +INFO 3/9/2026, 1:37:06 PM 29256 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 1:37:06 PM 29259 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 1:37:06 PM 29260 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:37:06 PM 29260 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md +INFO 3/9/2026, 1:37:06 PM 29261 synced recovery +DEBUG 3/9/2026, 1:37:06 PM 29325 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md (0) +INFO 3/9/2026, 1:37:06 PM 29326 synced recovery +INFO 3/9/2026, 1:37:06 PM 29935 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md] +INFO 3/9/2026, 1:37:06 PM 29936 addRecentDocument +DEBUG 3/9/2026, 1:37:06 PM 29956 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 1:37:06 PM 29971 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 1:37:06 PM 29979 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 1:37:06 PM 29981 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:37:06 PM 29983 synced recovery +INFO 3/9/2026, 1:37:06 PM 29993 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md +INFO 3/9/2026, 1:37:06 PM 30008 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 1:37:06 PM 30009 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:37:06 PM 30012 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 0 at: -1 +DEBUG 3/9/2026, 1:37:06 PM 30013 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 1:37:06 PM 30014 synced recovery +INFO 3/9/2026, 1:37:06 PM 30016 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 1:37:06 PM 30018 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/9/2026, 1:37:07 PM 31030 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 1:37:07 PM 31033 synced recovery +INFO 3/9/2026, 1:37:10 PM 33899 [blur] 1 +INFO 3/9/2026, 1:37:10 PM 33899 [win] blur +INFO 3/9/2026, 1:37:11 PM 34593 [focus] 1 +INFO 3/9/2026, 1:37:12 PM 35388 [blur] 1 +INFO 3/9/2026, 1:37:12 PM 35388 [win] blur +INFO 3/9/2026, 1:38:04 PM 87363 [focus] 1 +DEBUG 3/9/2026, 1:38:04 PM 87471 added recovery 1 "--- +source: bai....8V_{50}(z) +$$ +" (838) +INFO 3/9/2026, 1:38:04 PM 87476 synced recovery +INFO 3/9/2026, 1:38:05 PM 88256 [blur] 1 +INFO 3/9/2026, 1:38:05 PM 88257 [win] blur +INFO 3/9/2026, 1:38:05 PM 88626 [focus] 1 +INFO 3/9/2026, 1:38:08 PM 92185 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md] +INFO 3/9/2026, 1:38:08 PM 92185 addRecentDocument +DEBUG 3/9/2026, 1:38:09 PM 92329 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/9/2026, 1:38:09 PM 92359 synced recovery +INFO 3/9/2026, 1:38:09 PM 92366 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 1:38:09 PM 92398 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 1:38:09 PM 92401 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:38:09 PM 92429 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md +DEBUG 3/9/2026, 1:38:09 PM 92840 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/9/2026, 1:38:09 PM 92842 synced recovery +INFO 3/9/2026, 1:38:10 PM 93413 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md] +INFO 3/9/2026, 1:38:10 PM 93413 addRecentDocument +DEBUG 3/9/2026, 1:38:10 PM 93423 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 1:38:10 PM 93426 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 1:38:10 PM 93433 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 1:38:10 PM 93435 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:38:10 PM 93435 synced recovery +INFO 3/9/2026, 1:38:10 PM 93436 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md +INFO 3/9/2026, 1:38:10 PM 93454 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 1:38:10 PM 93454 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:38:10 PM 93455 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 1 at: 0 +DEBUG 3/9/2026, 1:38:10 PM 93455 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 1:38:10 PM 93456 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 1:38:10 PM 93456 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:38:10 PM 93457 synced recovery +DEBUG 3/9/2026, 1:38:11 PM 94462 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 1:38:11 PM 94464 synced recovery +INFO 3/9/2026, 1:38:22 PM 105438 [blur] 1 +INFO 3/9/2026, 1:38:22 PM 105438 [win] blur +INFO 3/9/2026, 1:40:23 PM 226517 [focus] 1 +DEBUG 3/9/2026, 1:40:23 PM 226622 added recovery 1 "--- +source: bai....8V_{50}(z) +$$ +" (873) +INFO 3/9/2026, 1:40:23 PM 226623 synced recovery +INFO 3/9/2026, 1:40:28 PM 231805 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md] +INFO 3/9/2026, 1:40:28 PM 231805 addRecentDocument +DEBUG 3/9/2026, 1:40:28 PM 231838 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/9/2026, 1:40:28 PM 231840 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/9/2026, 1:40:28 PM 231845 lastSync 2026-03-09T12:38:09.370Z, timestamp 1773059889528, mtime 1772710061724.1348 +INFO 3/9/2026, 1:40:28 PM 231846 synced recovery +INFO 3/9/2026, 1:40:28 PM 231849 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 1:40:28 PM 231849 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:40:28 PM 231853 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md +INFO 3/9/2026, 1:40:28 PM 231871 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 1:40:28 PM 231873 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:40:28 PM 231874 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 0 at: -1 +DEBUG 3/9/2026, 1:40:28 PM 231877 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/9/2026, 1:40:28 PM 231878 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 1:40:28 PM 231879 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:40:28 PM 231880 synced recovery +INFO 3/9/2026, 1:40:29 PM 232427 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md] +INFO 3/9/2026, 1:40:29 PM 232428 addRecentDocument +DEBUG 3/9/2026, 1:40:29 PM 232435 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 1:40:29 PM 232441 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 1:40:29 PM 232442 synced recovery +INFO 3/9/2026, 1:40:29 PM 232445 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 1:40:29 PM 232445 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:40:29 PM 232447 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md +INFO 3/9/2026, 1:40:29 PM 232468 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 1:40:29 PM 232469 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:40:29 PM 232470 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 2 at: 1 +DEBUG 3/9/2026, 1:40:29 PM 232470 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 1:40:29 PM 232470 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 1:40:29 PM 232471 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:40:29 PM 232471 synced recovery +DEBUG 3/9/2026, 1:40:30 PM 233481 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 1:40:30 PM 233484 synced recovery +INFO 3/9/2026, 1:40:32 PM 235618 [blur] 1 +INFO 3/9/2026, 1:40:32 PM 235619 [win] blur +INFO 3/9/2026, 1:40:57 PM 260421 [focus] 1 +DEBUG 3/9/2026, 1:40:57 PM 260524 added recovery 1 "--- +source: bai...)}\right)\} +$$ +" (1024) +INFO 3/9/2026, 1:40:57 PM 260525 synced recovery +INFO 3/9/2026, 1:40:59 PM 263158 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md] +INFO 3/9/2026, 1:40:59 PM 263158 addRecentDocument +DEBUG 3/9/2026, 1:40:59 PM 263171 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/9/2026, 1:40:59 PM 263175 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/9/2026, 1:40:59 PM 263179 lastSync 2026-03-09T12:40:28.685Z, timestamp 1773060028705, mtime 1772710061724.1348 +INFO 3/9/2026, 1:40:59 PM 263182 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 1:40:59 PM 263182 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:40:59 PM 263183 synced recovery +INFO 3/9/2026, 1:40:59 PM 263185 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md +INFO 3/9/2026, 1:41:00 PM 263206 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 1:41:00 PM 263206 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:41:00 PM 263208 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 1 at: 0 +DEBUG 3/9/2026, 1:41:00 PM 263208 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/9/2026, 1:41:00 PM 263209 synced recovery +INFO 3/9/2026, 1:41:00 PM 263210 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 1:41:00 PM 263210 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:41:00 PM 263836 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md] +INFO 3/9/2026, 1:41:00 PM 263837 addRecentDocument +DEBUG 3/9/2026, 1:41:00 PM 263841 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 1:41:00 PM 263845 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 1:41:00 PM 263846 synced recovery +INFO 3/9/2026, 1:41:00 PM 263848 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 1:41:00 PM 263851 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:41:00 PM 263854 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md +INFO 3/9/2026, 1:41:00 PM 263860 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 1:41:00 PM 263860 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:41:00 PM 263861 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 3 at: 2 +DEBUG 3/9/2026, 1:41:00 PM 263861 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 1:41:00 PM 263862 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 1:41:00 PM 263862 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:41:00 PM 263862 synced recovery +DEBUG 3/9/2026, 1:41:01 PM 264870 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 1:41:01 PM 264871 synced recovery +INFO 3/9/2026, 1:41:03 PM 266243 [blur] 1 +INFO 3/9/2026, 1:41:03 PM 266244 [win] blur +INFO 3/9/2026, 1:41:05 PM 269124 [focus] 1 +INFO 3/9/2026, 1:41:06 PM 269717 [blur] 1 +INFO 3/9/2026, 1:41:06 PM 269717 [win] blur +INFO 3/9/2026, 1:43:11 PM 395098 [focus] 1 +INFO 3/9/2026, 1:43:13 PM 396648 [blur] 1 +INFO 3/9/2026, 1:43:13 PM 396652 [win] blur +DEBUG 3/9/2026, 1:43:38 PM 421347 added recovery 1 "--- +source: bai...ght)\right} +$$ +" (1033) +INFO 3/9/2026, 1:43:38 PM 421349 synced recovery +INFO 3/9/2026, 1:43:38 PM 421799 [focus] 1 +INFO 3/9/2026, 1:43:39 PM 423090 [blur] 1 +INFO 3/9/2026, 1:43:39 PM 423090 [win] blur +INFO 3/9/2026, 1:43:40 PM 423585 [focus] 1 +INFO 3/9/2026, 1:43:42 PM 425692 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md] +INFO 3/9/2026, 1:43:42 PM 425692 addRecentDocument +DEBUG 3/9/2026, 1:43:42 PM 425831 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/9/2026, 1:43:42 PM 425834 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/9/2026, 1:43:42 PM 425834 lastSync 1773060060622.7295, timestamp 1773060060104, mtime 1773060060622.7295 +INFO 3/9/2026, 1:43:42 PM 425837 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 1:43:42 PM 425837 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:43:42 PM 425838 synced recovery +INFO 3/9/2026, 1:43:42 PM 425842 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md +INFO 3/9/2026, 1:43:42 PM 425880 [RenderProcess 1][Log] do restoreEditStateFromData true false +INFO 3/9/2026, 1:43:42 PM 425881 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:43:42 PM 425883 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 3 at: 2 +DEBUG 3/9/2026, 1:43:42 PM 425909 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/9/2026, 1:43:42 PM 425910 synced recovery +INFO 3/9/2026, 1:43:43 PM 426362 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md] +INFO 3/9/2026, 1:43:43 PM 426362 addRecentDocument +DEBUG 3/9/2026, 1:43:43 PM 426384 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 1:43:43 PM 426391 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 1:43:43 PM 426393 synced recovery +INFO 3/9/2026, 1:43:43 PM 426395 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 1:43:43 PM 426395 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:43:43 PM 426399 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md +INFO 3/9/2026, 1:43:43 PM 426419 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 1:43:43 PM 426420 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:43:43 PM 426421 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 4 at: 3 +DEBUG 3/9/2026, 1:43:43 PM 426421 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 1:43:43 PM 426422 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 1:43:43 PM 426422 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 1:43:43 PM 426423 synced recovery +DEBUG 3/9/2026, 1:43:44 PM 427439 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 1:43:44 PM 427439 synced recovery +INFO 3/9/2026, 1:43:52 PM 435993 [blur] 1 +INFO 3/9/2026, 1:43:52 PM 435993 [win] blur +INFO 3/9/2026, 1:43:53 PM 436875 [focus] 1 +INFO 3/9/2026, 1:43:54 PM 437529 [blur] 1 +INFO 3/9/2026, 1:43:54 PM 437529 [win] blur +DEBUG 3/9/2026, 1:45:29 PM 532522 2nd 0.899767317236225 +INFO 3/9/2026, 1:48:16 PM 700071 [focus] 1 +INFO 3/9/2026, 1:48:17 PM 700787 [blur] 1 +INFO 3/9/2026, 1:48:17 PM 700787 [win] blur +INFO 3/9/2026, 1:48:36 PM 719732 [focus] 1 +INFO 3/9/2026, 1:48:36 PM 720083 [blur] 1 +INFO 3/9/2026, 1:48:36 PM 720084 [win] blur +INFO 3/9/2026, 1:48:37 PM 720922 [focus] 1 +INFO 3/9/2026, 1:48:38 PM 721779 [blur] 1 +INFO 3/9/2026, 1:48:38 PM 721784 [win] blur +INFO 3/9/2026, 1:48:39 PM 722983 [focus] 1 +INFO 3/9/2026, 1:48:56 PM 739892 [blur] 1 +INFO 3/9/2026, 1:48:56 PM 739892 [win] blur +INFO 3/9/2026, 1:48:57 PM 740452 [focus] 1 +INFO 3/9/2026, 1:48:57 PM 740836 [blur] 1 +INFO 3/9/2026, 1:48:57 PM 740836 [win] blur +INFO 3/9/2026, 1:48:58 PM 741365 [focus] 1 +INFO 3/9/2026, 1:48:58 PM 741636 [blur] 1 +INFO 3/9/2026, 1:48:58 PM 741636 [win] blur +DEBUG 3/9/2026, 2:06:43 PM 1806587 added recovery 1 "--- +source: bai...ht)\right\} +$$ +" (1035) +INFO 3/9/2026, 2:06:43 PM 1806620 synced recovery +INFO 3/9/2026, 2:20:17 PM 2620986 [focus] 1 +DEBUG 3/9/2026, 2:20:21 PM 2624476 added recovery 1 "--- +:source: ba...ht)\right\} +$$ +" (1036) +INFO 3/9/2026, 2:20:21 PM 2624498 synced recovery +INFO 3/9/2026, 2:20:26 PM 2629566 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 2:20:26 PM 2629574 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 2:20:26 PM 2629574 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md +INFO 3/9/2026, 2:20:26 PM 2629580 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 2:20:26 PM 2629582 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 2:20:26 PM 2629587 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 7 at: 6 +DEBUG 3/9/2026, 2:20:26 PM 2629588 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:20:26 PM 2629589 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 2:20:26 PM 2629589 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 2:20:26 PM 2629601 synced recovery +DEBUG 3/9/2026, 2:20:27 PM 2630608 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:20:27 PM 2630612 synced recovery +INFO 3/9/2026, 2:20:27 PM 2630649 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md] +INFO 3/9/2026, 2:20:27 PM 2630649 addRecentDocument +DEBUG 3/9/2026, 2:20:27 PM 2630681 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md (0) +INFO 3/9/2026, 2:20:27 PM 2630697 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/9/2026, 2:20:27 PM 2630704 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 2:20:27 PM 2630705 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 2:20:27 PM 2630706 synced recovery +INFO 3/9/2026, 2:20:27 PM 2630710 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md +DEBUG 3/9/2026, 2:20:27 PM 2630756 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md (0) +INFO 3/9/2026, 2:20:27 PM 2630756 synced recovery +INFO 3/9/2026, 2:20:28 PM 2631233 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md] +INFO 3/9/2026, 2:20:28 PM 2631233 addRecentDocument +DEBUG 3/9/2026, 2:20:28 PM 2631254 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:20:28 PM 2631265 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/9/2026, 2:20:28 PM 2631266 lastSync 2026-03-09T13:20:26.395Z, timestamp 1773062426462, mtime 1773062403126.8076 +INFO 3/9/2026, 2:20:28 PM 2631272 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 2:20:28 PM 2631273 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 2:20:28 PM 2631273 synced recovery +INFO 3/9/2026, 2:20:28 PM 2631279 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md +INFO 3/9/2026, 2:20:28 PM 2631288 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 2:20:28 PM 2631288 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 2:20:28 PM 2631290 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 8 at: 7 +DEBUG 3/9/2026, 2:20:28 PM 2631291 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:20:28 PM 2631291 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 2:20:28 PM 2631291 [RenderProcess 1][Log] reset NodeMap +INFO 3/9/2026, 2:20:28 PM 2631293 synced recovery +INFO 3/9/2026, 2:20:28 PM 2631996 [blur] 1 +INFO 3/9/2026, 2:20:28 PM 2631997 [win] blur +DEBUG 3/9/2026, 2:20:29 PM 2632241 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:20:29 PM 2632244 synced recovery +INFO 3/9/2026, 2:20:29 PM 2632624 [focus] 1 +INFO 3/9/2026, 2:20:29 PM 2633004 [blur] 1 +INFO 3/9/2026, 2:20:29 PM 2633004 [win] blur +INFO 3/9/2026, 2:20:30 PM 2634048 [focus] 1 +INFO 3/9/2026, 2:20:39 PM 2642491 [blur] 1 +INFO 3/9/2026, 2:20:39 PM 2642491 [win] blur +DEBUG 3/9/2026, 2:20:42 PM 2645353 app.openFile +DEBUG 3/9/2026, 2:20:42 PM 2645474 added recovery 2 null (0) +INFO 3/9/2026, 2:20:42 PM 2645483 [focus] 1 +INFO 3/9/2026, 2:20:42 PM 2645493 synced recovery +INFO 3/9/2026, 2:20:42 PM 2645530 [blur] 1 +INFO 3/9/2026, 2:20:42 PM 2645530 [win] blur +INFO 3/9/2026, 2:20:42 PM 2645532 [focus] 2 +INFO 3/9/2026, 2:20:43 PM 2646255 [blur] 2 +INFO 3/9/2026, 2:20:43 PM 2646255 [win] blur +INFO 3/9/2026, 2:20:43 PM 2646255 [focus] 1 +ERROR 3/9/2026, 2:20:44 PM 2647440 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/9/2026, 2:20:44 PM 2647445 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/9/2026, 2:20:44 PM 2647447 handle document.loadData +DEBUG 3/9/2026, 2:20:44 PM 2647448 document.loadData 0 +INFO 3/9/2026, 2:20:44 PM 2647608 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 2:20:44 PM 2647611 [RenderProcess 2][Log] reset NodeMap +DEBUG 3/9/2026, 2:20:44 PM 2647633 added recovery 2 (0) +INFO 3/9/2026, 2:20:44 PM 2647635 synced recovery +INFO 3/9/2026, 2:20:44 PM 2647926 [focus] 2 +INFO 3/9/2026, 2:20:44 PM 2648070 [RenderProcess 2][Log] onBecomeActive +INFO 3/9/2026, 2:20:44 PM 2648070 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/9/2026, 2:20:48 PM 2651792 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md] +INFO 3/9/2026, 2:20:48 PM 2651792 addRecentDocument +DEBUG 3/9/2026, 2:20:48 PM 2651807 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:20:48 PM 2651809 synced recovery +INFO 3/9/2026, 2:20:48 PM 2651813 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/9/2026, 2:20:48 PM 2651816 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 2:20:48 PM 2651816 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:20:48 PM 2651824 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md +DEBUG 3/9/2026, 2:20:48 PM 2651977 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:20:48 PM 2651985 synced recovery +INFO 3/9/2026, 2:20:56 PM 2659657 [blur] 2 +INFO 3/9/2026, 2:20:56 PM 2659657 [win] blur +INFO 3/9/2026, 2:21:26 PM 2689190 [focus] 2 +INFO 3/9/2026, 2:21:26 PM 2689411 [blur] 2 +INFO 3/9/2026, 2:21:26 PM 2689411 [win] blur +INFO 3/9/2026, 2:21:26 PM 2689424 [focus] 2 +INFO 3/9/2026, 2:21:26 PM 2689612 [blur] 2 +INFO 3/9/2026, 2:21:26 PM 2689612 [win] blur +INFO 3/9/2026, 2:21:29 PM 2692992 [focus] 2 +INFO 3/9/2026, 2:21:31 PM 2695025 [blur] 2 +INFO 3/9/2026, 2:21:31 PM 2695025 [win] blur +INFO 3/9/2026, 2:21:32 PM 2695337 [focus] 2 +INFO 3/9/2026, 2:21:35 PM 2698318 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/09-03-2026.md] +INFO 3/9/2026, 2:21:35 PM 2698318 addRecentDocument +DEBUG 3/9/2026, 2:21:35 PM 2698351 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:21:35 PM 2698355 synced recovery +INFO 3/9/2026, 2:21:35 PM 2698357 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/9/2026, 2:21:35 PM 2698372 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 2:21:35 PM 2698375 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:21:35 PM 2698385 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/09-03-2026.md +DEBUG 3/9/2026, 2:21:35 PM 2698492 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:21:35 PM 2698493 synced recovery +DEBUG 3/9/2026, 2:21:38 PM 2701528 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:21:38 PM 2701529 synced recovery +DEBUG 3/9/2026, 2:21:42 PM 2705544 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:21:42 PM 2705544 synced recovery +DEBUG 3/9/2026, 2:21:44 PM 2707221 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:21:44 PM 2707222 synced recovery +DEBUG 3/9/2026, 2:21:45 PM 2708504 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:21:45 PM 2708519 synced recovery +DEBUG 3/9/2026, 2:21:49 PM 2712287 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:21:49 PM 2712288 synced recovery +DEBUG 3/9/2026, 2:21:52 PM 2715897 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:21:52 PM 2715898 synced recovery +DEBUG 3/9/2026, 2:21:54 PM 2717726 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:21:54 PM 2717727 synced recovery +DEBUG 3/9/2026, 2:21:58 PM 2721594 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:21:58 PM 2721594 synced recovery +DEBUG 3/9/2026, 2:22:00 PM 2723925 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:22:00 PM 2723927 synced recovery +DEBUG 3/9/2026, 2:22:04 PM 2728084 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:22:04 PM 2728085 synced recovery +DEBUG 3/9/2026, 2:22:07 PM 2730246 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:22:07 PM 2730247 synced recovery +INFO 3/9/2026, 2:22:09 PM 2732830 [blur] 2 +INFO 3/9/2026, 2:22:09 PM 2732831 [win] blur +INFO 3/9/2026, 2:22:09 PM 2733014 [focus] 2 +INFO 3/9/2026, 2:22:12 PM 2736024 [blur] 2 +INFO 3/9/2026, 2:22:12 PM 2736025 [win] blur +INFO 3/9/2026, 2:22:12 PM 2736031 [focus] 2 +INFO 3/9/2026, 2:22:13 PM 2736487 [blur] 2 +INFO 3/9/2026, 2:22:13 PM 2736487 [win] blur +INFO 3/9/2026, 2:22:13 PM 2736488 [focus] 2 +INFO 3/9/2026, 2:22:17 PM 2740792 [blur] 2 +INFO 3/9/2026, 2:22:17 PM 2740797 [win] blur +INFO 3/9/2026, 2:22:18 PM 2741415 [focus] 2 +INFO 3/9/2026, 2:22:19 PM 2743127 [blur] 2 +INFO 3/9/2026, 2:22:19 PM 2743127 [win] blur +INFO 3/9/2026, 2:22:23 PM 2746224 [focus] 2 +INFO 3/9/2026, 2:22:27 PM 2750512 [blur] 2 +INFO 3/9/2026, 2:22:27 PM 2750512 [win] blur +INFO 3/9/2026, 2:22:29 PM 2752718 [focus] 2 +INFO 3/9/2026, 2:22:30 PM 2753560 [blur] 2 +INFO 3/9/2026, 2:22:30 PM 2753560 [win] blur +INFO 3/9/2026, 2:22:34 PM 2758101 [focus] 2 +INFO 3/9/2026, 2:22:35 PM 2758551 [blur] 2 +INFO 3/9/2026, 2:22:35 PM 2758554 [win] blur +INFO 3/9/2026, 2:22:36 PM 2760133 [focus] 2 +INFO 3/9/2026, 2:22:38 PM 2761403 [blur] 2 +INFO 3/9/2026, 2:22:38 PM 2761403 [win] blur +INFO 3/9/2026, 2:22:38 PM 2761404 [focus] 2 +DEBUG 3/9/2026, 2:22:40 PM 2763413 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:22:40 PM 2763413 synced recovery +INFO 3/9/2026, 2:22:40 PM 2763462 [blur] 2 +INFO 3/9/2026, 2:22:40 PM 2763463 [win] blur +INFO 3/9/2026, 2:22:43 PM 2766230 [focus] 2 +INFO 3/9/2026, 2:22:43 PM 2766231 [blur] 2 +INFO 3/9/2026, 2:22:43 PM 2766231 [win] blur +INFO 3/9/2026, 2:22:52 PM 2775590 [focus] 2 +DEBUG 3/9/2026, 2:22:55 PM 2778571 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:22:55 PM 2778572 synced recovery +INFO 3/9/2026, 2:22:57 PM 2780648 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md] +INFO 3/9/2026, 2:22:57 PM 2780648 addRecentDocument +DEBUG 3/9/2026, 2:22:57 PM 2780655 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:22:57 PM 2780661 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/9/2026, 2:22:57 PM 2780661 synced recovery +DEBUG 3/9/2026, 2:22:57 PM 2780662 lastSync 2026-03-09T13:20:48.650Z, timestamp 1773062448700, mtime 1772790935299.568 +INFO 3/9/2026, 2:22:57 PM 2780666 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 2:22:57 PM 2780666 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:22:57 PM 2780670 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md +INFO 3/9/2026, 2:22:57 PM 2780710 [RenderProcess 2][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 2:22:57 PM 2780711 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:22:57 PM 2780721 [RenderProcess 2][Log] [UndoManager] restoreFromJson all: 0 at: -1 +DEBUG 3/9/2026, 2:22:57 PM 2780722 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:22:57 PM 2780722 synced recovery +INFO 3/9/2026, 2:22:57 PM 2780723 [RenderProcess 2][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 2:22:57 PM 2780727 [RenderProcess 2][Log] reset NodeMap +DEBUG 3/9/2026, 2:22:58 PM 2781984 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:22:58 PM 2781987 synced recovery +INFO 3/9/2026, 2:23:00 PM 2783744 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/09-03-2026.md] +INFO 3/9/2026, 2:23:00 PM 2783744 addRecentDocument +DEBUG 3/9/2026, 2:23:00 PM 2783752 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:23:00 PM 2783753 synced recovery +INFO 3/9/2026, 2:23:00 PM 2783756 [RenderProcess 2][Log] File.activeWindow = true +DEBUG 3/9/2026, 2:23:00 PM 2783757 lastSync 1773062575368.8157, timestamp 1773062574346, mtime 1773062575368.8157 +INFO 3/9/2026, 2:23:00 PM 2783761 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 2:23:00 PM 2783762 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:23:00 PM 2783773 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/09-03-2026.md +INFO 3/9/2026, 2:23:00 PM 2783783 [RenderProcess 2][Log] do restoreEditStateFromData true false +INFO 3/9/2026, 2:23:00 PM 2783784 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:23:00 PM 2783786 [RenderProcess 2][Log] [UndoManager] restoreFromJson all: 26 at: 25 +DEBUG 3/9/2026, 2:23:00 PM 2783804 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:23:00 PM 2783805 synced recovery +DEBUG 3/9/2026, 2:23:09 PM 2792781 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:23:09 PM 2792782 synced recovery +DEBUG 3/9/2026, 2:23:10 PM 2793948 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:23:10 PM 2793949 synced recovery +DEBUG 3/9/2026, 2:23:12 PM 2795851 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:23:12 PM 2795852 synced recovery +DEBUG 3/9/2026, 2:23:13 PM 2796933 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:23:13 PM 2796935 synced recovery +INFO 3/9/2026, 2:23:17 PM 2800937 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md] +INFO 3/9/2026, 2:23:17 PM 2800937 addRecentDocument +DEBUG 3/9/2026, 2:23:17 PM 2800945 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:23:17 PM 2800952 [RenderProcess 2][Log] File.activeWindow = true +DEBUG 3/9/2026, 2:23:17 PM 2800953 lastSync 2026-03-09T13:22:57.532Z, timestamp 1773062577852, mtime 1772790935299.568 +INFO 3/9/2026, 2:23:17 PM 2800962 synced recovery +INFO 3/9/2026, 2:23:17 PM 2800966 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 2:23:17 PM 2800967 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:23:17 PM 2800973 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md +INFO 3/9/2026, 2:23:17 PM 2800981 [RenderProcess 2][Log] do restoreEditStateFromData true true +INFO 3/9/2026, 2:23:17 PM 2800982 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:23:17 PM 2800992 [RenderProcess 2][Log] [UndoManager] restoreFromJson all: 1 at: 0 +DEBUG 3/9/2026, 2:23:17 PM 2800993 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:23:17 PM 2800993 [RenderProcess 2][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/9/2026, 2:23:17 PM 2800994 synced recovery +INFO 3/9/2026, 2:23:17 PM 2800995 [RenderProcess 2][Log] reset NodeMap +DEBUG 3/9/2026, 2:23:18 PM 2802028 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:23:18 PM 2802030 synced recovery +INFO 3/9/2026, 2:23:27 PM 2810849 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md] +INFO 3/9/2026, 2:23:27 PM 2810850 addRecentDocument +DEBUG 3/9/2026, 2:23:27 PM 2810854 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/9/2026, 2:23:27 PM 2810855 synced recovery +INFO 3/9/2026, 2:23:27 PM 2810859 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/9/2026, 2:23:27 PM 2810861 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 2:23:27 PM 2810861 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:23:27 PM 2810869 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md +DEBUG 3/9/2026, 2:23:27 PM 2810914 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/9/2026, 2:23:27 PM 2810914 synced recovery +INFO 3/9/2026, 2:23:28 PM 2811379 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md] +INFO 3/9/2026, 2:23:28 PM 2811379 addRecentDocument +DEBUG 3/9/2026, 2:23:28 PM 2811390 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:23:28 PM 2811396 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/9/2026, 2:23:28 PM 2811398 synced recovery +INFO 3/9/2026, 2:23:28 PM 2811399 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 2:23:28 PM 2811399 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:23:28 PM 2811403 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md +DEBUG 3/9/2026, 2:23:28 PM 2811469 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:23:28 PM 2811470 synced recovery +DEBUG 3/9/2026, 2:23:31 PM 2815186 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:23:31 PM 2815187 synced recovery +DEBUG 3/9/2026, 2:23:33 PM 2817152 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:23:33 PM 2817153 synced recovery +DEBUG 3/9/2026, 2:23:35 PM 2818323 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:23:35 PM 2818324 synced recovery +DEBUG 3/9/2026, 2:23:37 PM 2820766 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:23:37 PM 2820767 synced recovery +DEBUG 3/9/2026, 2:23:38 PM 2821824 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:23:38 PM 2821825 synced recovery +DEBUG 3/9/2026, 2:23:40 PM 2823547 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:23:40 PM 2823550 synced recovery +DEBUG 3/9/2026, 2:23:41 PM 2824662 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:23:41 PM 2824662 synced recovery +DEBUG 3/9/2026, 2:23:42 PM 2826056 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:23:42 PM 2826057 synced recovery +DEBUG 3/9/2026, 2:23:44 PM 2827572 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:23:44 PM 2827573 synced recovery +DEBUG 3/9/2026, 2:23:48 PM 2831718 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:23:48 PM 2831719 synced recovery +DEBUG 3/9/2026, 2:23:51 PM 2834817 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:23:51 PM 2834817 synced recovery +DEBUG 3/9/2026, 2:23:53 PM 2836271 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:23:53 PM 2836273 synced recovery +DEBUG 3/9/2026, 2:23:55 PM 2838331 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:23:55 PM 2838331 synced recovery +INFO 3/9/2026, 2:24:09 PM 2852628 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md] +INFO 3/9/2026, 2:24:09 PM 2852629 addRecentDocument +DEBUG 3/9/2026, 2:24:09 PM 2852637 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:24:09 PM 2852641 synced recovery +INFO 3/9/2026, 2:24:09 PM 2852644 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/9/2026, 2:24:09 PM 2852646 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 2:24:09 PM 2852647 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:24:09 PM 2852650 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md +DEBUG 3/9/2026, 2:24:09 PM 2852711 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:24:09 PM 2852714 synced recovery +INFO 3/9/2026, 2:28:44 PM 3127855 [blur] 2 +INFO 3/9/2026, 2:28:44 PM 3127855 [win] blur +INFO 3/9/2026, 2:28:48 PM 3131291 [focus] 2 +INFO 3/9/2026, 2:28:48 PM 3132009 [blur] 2 +INFO 3/9/2026, 2:28:48 PM 3132009 [win] blur +INFO 3/9/2026, 2:28:49 PM 3132641 [focus] 2 +DEBUG 3/9/2026, 2:29:06 PM 3149972 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:29:06 PM 3149976 synced recovery +DEBUG 3/9/2026, 2:29:10 PM 3153703 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:29:10 PM 3153705 synced recovery +DEBUG 3/9/2026, 2:29:13 PM 3157016 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:29:13 PM 3157019 synced recovery +ERROR 3/9/2026, 2:29:18 PM 3161843 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/9/2026, 2:29:18 PM 3161846 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/9/2026, 2:29:26 PM 3169235 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/9/2026, 2:29:26 PM 3169250 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +DEBUG 3/9/2026, 2:29:34 PM 3177586 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:29:34 PM 3177589 synced recovery +DEBUG 3/9/2026, 2:29:39 PM 3182680 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:29:39 PM 3182682 synced recovery +DEBUG 3/9/2026, 2:29:41 PM 3185173 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:29:41 PM 3185175 synced recovery +INFO 3/9/2026, 2:29:51 PM 3194862 [blur] 2 +INFO 3/9/2026, 2:29:51 PM 3194862 [win] blur +INFO 3/9/2026, 2:29:58 PM 3201899 [focus] 2 +INFO 3/9/2026, 2:29:59 PM 3202761 [blur] 2 +INFO 3/9/2026, 2:29:59 PM 3202762 [win] blur +INFO 3/9/2026, 2:29:59 PM 3203179 [focus] 2 +INFO 3/9/2026, 2:30:00 PM 3203890 [blur] 2 +INFO 3/9/2026, 2:30:00 PM 3203893 [win] blur +INFO 3/9/2026, 2:30:04 PM 3207196 [focus] 2 +INFO 3/9/2026, 2:36:44 PM 3607778 [blur] 2 +INFO 3/9/2026, 2:36:44 PM 3607778 [win] blur +INFO 3/9/2026, 2:37:01 PM 3624313 [focus] 2 +INFO 3/9/2026, 2:37:06 PM 3630104 [blur] 2 +INFO 3/9/2026, 2:37:06 PM 3630104 [win] blur +INFO 3/9/2026, 2:37:09 PM 3633082 [focus] 2 +INFO 3/9/2026, 2:37:12 PM 3635334 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md] +INFO 3/9/2026, 2:37:12 PM 3635334 addRecentDocument +DEBUG 3/9/2026, 2:37:12 PM 3635350 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:37:12 PM 3635360 [RenderProcess 2][Log] File.activeWindow = true +DEBUG 3/9/2026, 2:37:12 PM 3635362 lastSync 1773062639993.3167, timestamp 1773062634086, mtime 1773062639993.3167 +INFO 3/9/2026, 2:37:12 PM 3635364 synced recovery +INFO 3/9/2026, 2:37:12 PM 3635367 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 2:37:12 PM 3635368 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:37:12 PM 3635388 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md +INFO 3/9/2026, 2:37:12 PM 3635439 [RenderProcess 2][Log] do restoreEditStateFromData true false +INFO 3/9/2026, 2:37:12 PM 3635440 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:37:12 PM 3635444 [RenderProcess 2][Log] [UndoManager] restoreFromJson all: 17 at: 16 +DEBUG 3/9/2026, 2:37:12 PM 3635602 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:37:12 PM 3635604 synced recovery +DEBUG 3/9/2026, 2:37:14 PM 3637221 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:37:14 PM 3637223 synced recovery +INFO 3/9/2026, 2:37:24 PM 3647940 [blur] 2 +INFO 3/9/2026, 2:37:24 PM 3647940 [win] blur +INFO 3/9/2026, 2:37:44 PM 3667823 [focus] 2 +INFO 3/9/2026, 2:38:44 PM 3727231 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md] +INFO 3/9/2026, 2:38:44 PM 3727231 addRecentDocument +DEBUG 3/9/2026, 2:38:45 PM 3728407 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:38:45 PM 3728459 [RenderProcess 2][Log] File.activeWindow = true +DEBUG 3/9/2026, 2:38:45 PM 3728460 lastSync 1773062981788.8489, timestamp 1773062980767, mtime 1773062981788.8489 +INFO 3/9/2026, 2:38:45 PM 3728477 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 2:38:45 PM 3728478 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:38:45 PM 3728486 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md +INFO 3/9/2026, 2:38:45 PM 3728489 synced recovery +INFO 3/9/2026, 2:38:45 PM 3728532 [RenderProcess 2][Log] do restoreEditStateFromData true false +INFO 3/9/2026, 2:38:45 PM 3728535 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:38:45 PM 3728583 [RenderProcess 2][Log] [UndoManager] restoreFromJson all: 9 at: 8 +DEBUG 3/9/2026, 2:38:45 PM 3728935 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:38:45 PM 3728947 synced recovery +INFO 3/9/2026, 2:39:02 PM 3745525 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md] +INFO 3/9/2026, 2:39:02 PM 3745526 addRecentDocument +DEBUG 3/9/2026, 2:39:02 PM 3745539 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:39:02 PM 3745548 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/9/2026, 2:39:02 PM 3745548 synced recovery +DEBUG 3/9/2026, 2:39:02 PM 3745549 lastSync 1773063433946.8447, timestamp 1773063432932, mtime 1773063433946.8447 +INFO 3/9/2026, 2:39:02 PM 3745553 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 2:39:02 PM 3745554 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:39:02 PM 3745569 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md +INFO 3/9/2026, 2:39:02 PM 3745585 [RenderProcess 2][Log] do restoreEditStateFromData true false +INFO 3/9/2026, 2:39:02 PM 3745586 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:39:02 PM 3745589 [RenderProcess 2][Log] [UndoManager] restoreFromJson all: 18 at: 17 +DEBUG 3/9/2026, 2:39:02 PM 3745739 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:39:02 PM 3745839 synced recovery +DEBUG 3/9/2026, 2:39:05 PM 3748837 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/9/2026, 2:39:05 PM 3748838 synced recovery +INFO 3/9/2026, 2:39:14 PM 3757892 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md] +INFO 3/9/2026, 2:39:14 PM 3757892 addRecentDocument +DEBUG 3/9/2026, 2:39:14 PM 3757923 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:39:14 PM 3757954 [RenderProcess 2][Log] File.activeWindow = true +DEBUG 3/9/2026, 2:39:14 PM 3757958 lastSync 1773062981788.8489, timestamp 1773062980767, mtime 1773062981788.8489 +INFO 3/9/2026, 2:39:14 PM 3757975 synced recovery +INFO 3/9/2026, 2:39:14 PM 3757981 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 2:39:14 PM 3757982 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:39:14 PM 3758002 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md +INFO 3/9/2026, 2:39:14 PM 3758032 [RenderProcess 2][Log] do restoreEditStateFromData true false +INFO 3/9/2026, 2:39:14 PM 3758034 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:39:14 PM 3758083 [RenderProcess 2][Log] [UndoManager] restoreFromJson all: 9 at: 8 +DEBUG 3/9/2026, 2:39:15 PM 3758499 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 2:39:15 PM 3758511 synced recovery +INFO 3/9/2026, 2:42:27 PM 3950420 [blur] 2 +INFO 3/9/2026, 2:42:27 PM 3950420 [win] blur +INFO 3/9/2026, 2:42:29 PM 3952482 [focus] 2 +INFO 3/9/2026, 2:42:33 PM 3956659 [blur] 2 +INFO 3/9/2026, 2:42:33 PM 3956660 [win] blur +INFO 3/9/2026, 2:44:28 PM 4071696 [focus] 2 +INFO 3/9/2026, 2:44:39 PM 4083109 [blur] 2 +INFO 3/9/2026, 2:44:39 PM 4083109 [win] blur +INFO 3/9/2026, 2:45:23 PM 4126969 [focus] 2 +INFO 3/9/2026, 2:45:26 PM 4130007 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/09-03-2026.md] +INFO 3/9/2026, 2:45:26 PM 4130008 addRecentDocument +DEBUG 3/9/2026, 2:45:26 PM 4130080 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:45:26 PM 4130120 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/9/2026, 2:45:26 PM 4130127 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 2:45:26 PM 4130136 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 2:45:26 PM 4130142 synced recovery +INFO 3/9/2026, 2:45:27 PM 4130254 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/09-03-2026.md +DEBUG 3/9/2026, 2:45:27 PM 4130549 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:45:27 PM 4130552 synced recovery +DEBUG 3/9/2026, 2:45:30 PM 4134005 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:45:30 PM 4134009 synced recovery +DEBUG 3/9/2026, 2:45:32 PM 4135466 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:45:32 PM 4135469 synced recovery +DEBUG 3/9/2026, 2:45:33 PM 4136543 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:45:33 PM 4136544 synced recovery +DEBUG 3/9/2026, 2:45:34 PM 4137745 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:45:34 PM 4137747 synced recovery +DEBUG 3/9/2026, 2:45:35 PM 4138892 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:45:35 PM 4138895 synced recovery +DEBUG 3/9/2026, 2:45:40 PM 4143286 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:45:40 PM 4143289 synced recovery +DEBUG 3/9/2026, 2:45:46 PM 4149263 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:45:46 PM 4149269 synced recovery +DEBUG 3/9/2026, 2:45:48 PM 4151736 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:45:48 PM 4151739 synced recovery +DEBUG 3/9/2026, 2:46:04 PM 4167553 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:46:04 PM 4167555 synced recovery +DEBUG 3/9/2026, 2:46:07 PM 4170963 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:46:07 PM 4170965 synced recovery +DEBUG 3/9/2026, 2:46:20 PM 4183344 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:46:20 PM 4183346 synced recovery +DEBUG 3/9/2026, 2:46:21 PM 4184667 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:46:21 PM 4184678 synced recovery +DEBUG 3/9/2026, 2:46:23 PM 4186864 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:46:23 PM 4186866 synced recovery +DEBUG 3/9/2026, 2:46:25 PM 4188674 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:46:25 PM 4188676 synced recovery +DEBUG 3/9/2026, 2:46:26 PM 4189763 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:46:26 PM 4189765 synced recovery +INFO 3/9/2026, 2:46:40 PM 4204124 [blur] 2 +INFO 3/9/2026, 2:46:40 PM 4204125 [win] blur +INFO 3/9/2026, 2:48:51 PM 4334480 [focus] 2 +INFO 3/9/2026, 2:48:51 PM 4335113 [blur] 2 +INFO 3/9/2026, 2:48:51 PM 4335113 [win] blur +INFO 3/9/2026, 2:49:01 PM 4344259 [focus] 2 +INFO 3/9/2026, 2:49:03 PM 4346905 [blur] 2 +INFO 3/9/2026, 2:49:03 PM 4346905 [win] blur +DEBUG 3/9/2026, 2:49:03 PM 4347189 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:49:04 PM 4347194 synced recovery +INFO 3/9/2026, 2:49:04 PM 4347439 [focus] 2 +DEBUG 3/9/2026, 2:49:10 PM 4353378 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:49:10 PM 4353380 synced recovery +INFO 3/9/2026, 2:49:21 PM 4364858 [blur] 2 +INFO 3/9/2026, 2:49:21 PM 4364858 [win] blur +INFO 3/9/2026, 2:49:43 PM 4386544 [focus] 2 +INFO 3/9/2026, 2:50:14 PM 4417261 [blur] 2 +INFO 3/9/2026, 2:50:14 PM 4417261 [win] blur +INFO 3/9/2026, 2:54:18 PM 4661602 [focus] 2 +INFO 3/9/2026, 2:54:19 PM 4662952 [blur] 2 +INFO 3/9/2026, 2:54:19 PM 4662953 [win] blur +INFO 3/9/2026, 2:54:20 PM 4663486 [focus] 2 +INFO 3/9/2026, 2:54:21 PM 4664895 [blur] 2 +INFO 3/9/2026, 2:54:21 PM 4664896 [win] blur +INFO 3/9/2026, 2:56:50 PM 4813283 [focus] 2 +DEBUG 3/9/2026, 2:56:55 PM 4818717 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:56:55 PM 4818719 synced recovery +DEBUG 3/9/2026, 2:56:57 PM 4820601 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:56:57 PM 4820604 synced recovery +DEBUG 3/9/2026, 2:56:58 PM 4822150 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:56:58 PM 4822154 synced recovery +DEBUG 3/9/2026, 2:57:00 PM 4823266 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:57:00 PM 4823270 synced recovery +INFO 3/9/2026, 2:57:15 PM 4838602 [blur] 2 +INFO 3/9/2026, 2:57:15 PM 4838602 [win] blur +INFO 3/9/2026, 2:57:16 PM 4839595 [focus] 2 +DEBUG 3/9/2026, 2:57:43 PM 4866731 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:57:43 PM 4866733 synced recovery +DEBUG 3/9/2026, 2:57:45 PM 4868323 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:57:45 PM 4868324 synced recovery +DEBUG 3/9/2026, 2:58:52 PM 4936049 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:58:52 PM 4936057 synced recovery +DEBUG 3/9/2026, 2:58:53 PM 4937112 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:58:53 PM 4937114 synced recovery +DEBUG 3/9/2026, 2:58:57 PM 4940655 added recovery 2 /home/afoucaultc/workspace/cesi/notes/09-03-2026.md (0) +INFO 3/9/2026, 2:58:57 PM 4940656 synced recovery +INFO 3/9/2026, 3:00:31 PM 5034574 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md] +INFO 3/9/2026, 3:00:31 PM 5034574 addRecentDocument +DEBUG 3/9/2026, 3:00:31 PM 5034592 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 3:00:31 PM 5034602 [RenderProcess 2][Log] File.activeWindow = true +DEBUG 3/9/2026, 3:00:31 PM 5034606 lastSync 1773062981788.8489, timestamp 1773062980767, mtime 1773062981788.8489 +INFO 3/9/2026, 3:00:31 PM 5034617 synced recovery +INFO 3/9/2026, 3:00:31 PM 5034620 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 3:00:31 PM 5034621 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 3:00:31 PM 5034630 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md +INFO 3/9/2026, 3:00:31 PM 5034652 [RenderProcess 2][Log] do restoreEditStateFromData true false +INFO 3/9/2026, 3:00:31 PM 5034655 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 3:00:31 PM 5034683 [RenderProcess 2][Log] [UndoManager] restoreFromJson all: 9 at: 8 +DEBUG 3/9/2026, 3:00:31 PM 5034862 added recovery 2 /home/afoucaultc/workspace/cesi/notes/weekly_report/03-2026_1.md (0) +INFO 3/9/2026, 3:00:31 PM 5034880 synced recovery +INFO 3/9/2026, 3:01:28 PM 5091500 [blur] 2 +INFO 3/9/2026, 3:01:28 PM 5091500 [win] blur +INFO 3/9/2026, 3:08:12 PM 5495318 [focus] 2 +INFO 3/9/2026, 3:10:08 PM 5611220 switchDocument 2 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md] +INFO 3/9/2026, 3:10:08 PM 5611220 addRecentDocument +DEBUG 3/9/2026, 3:10:08 PM 5611236 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md (0) +INFO 3/9/2026, 3:10:08 PM 5611244 synced recovery +INFO 3/9/2026, 3:10:08 PM 5611248 [RenderProcess 2][Log] File.activeWindow = true +INFO 3/9/2026, 3:10:08 PM 5611253 [RenderProcess 2][Log] [UndoManager] reset commandStack +INFO 3/9/2026, 3:10:08 PM 5611255 [RenderProcess 2][Log] reset NodeMap +INFO 3/9/2026, 3:10:08 PM 5611266 [RenderProcess 2][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md +DEBUG 3/9/2026, 3:10:08 PM 5611354 added recovery 2 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md (0) +INFO 3/9/2026, 3:10:08 PM 5611356 synced recovery +INFO 3/9/2026, 3:11:01 PM 5664713 synced recovery +INFO 3/9/2026, 3:11:01 PM 5664713 ----------------before-quit----------------- +INFO 3/9/2026, 3:11:01 PM 5664713 ------------------will-quit------------------ +INFO 3/9/2026, 3:11:01 PM 5664728 -----------------quit------------------ +INFO 3/9/2026, 3:11:01 PM 5664729 closeLogging +INFO 3/13/2026, 9:38:08 AM 85 launch with argv [/usr/share/typora/Typora] +INFO 3/13/2026, 9:38:08 AM 595 ------------------start------------------ +DEBUG 3/13/2026, 9:38:08 AM 733 before setting +DEBUG 3/13/2026, 9:38:09 AM 803 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/13/2026, 9:38:09 AM 879 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/13/2026, 9:38:09 AM 928 OS is linux 6.19.6-arch1-1 +INFO 3/13/2026, 9:38:09 AM 928 start LM in devVersion=false +DEBUG 3/13/2026, 9:38:09 AM 1015 after setting +INFO 3/13/2026, 9:38:09 AM 1015 typora version: 1.12.4 +INFO 3/13/2026, 9:38:09 AM 1177 [watch L] +DEBUG 3/13/2026, 9:38:09 AM 1177 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/13/2026, 9:38:09 AM 1242 pure = undefined +INFO 3/13/2026, 9:38:09 AM 1243 renew +DEBUG 3/13/2026, 9:38:09 AM 1243 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 3/13/2026, 9:38:09 AM 1243 [L] pass +DEBUG 3/13/2026, 9:38:09 AM 1243 trailRemains is 0 +INFO 3/13/2026, 9:38:09 AM 1243 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/13/2026, 9:38:09 AM 1246 [watch L] hasL: true +user-dict.json not found +DEBUG 3/13/2026, 9:38:09 AM 1262 app.openFile +DEBUG 3/13/2026, 9:38:10 AM 2045 added recovery 1 null (0) +DEBUG 3/13/2026, 9:38:10 AM 2133 putAccelerator File -> &Fichier +DEBUG 3/13/2026, 9:38:10 AM 2135 putAccelerator Edit -> Édit&er +DEBUG 3/13/2026, 9:38:10 AM 2136 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/13/2026, 9:38:10 AM 2137 putAccelerator Format -> F&ormat +DEBUG 3/13/2026, 9:38:10 AM 2137 putAccelerator View -> Présentation(&V) +DEBUG 3/13/2026, 9:38:10 AM 2138 putAccelerator Themes -> &Thèmes +DEBUG 3/13/2026, 9:38:10 AM 2138 putAccelerator Help -> Aide(&H) +INFO 3/13/2026, 9:38:10 AM 2232 synced recovery +INFO 3/13/2026, 9:38:11 AM 3604 [focus] 1 +DEBUG 3/13/2026, 9:38:13 AM 4828 [renewLicense]: license renewed +INFO 3/13/2026, 9:38:13 AM 4828 ls put SLicense +ERROR 3/13/2026, 9:38:13 AM 5164 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/13/2026, 9:38:13 AM 5167 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/13/2026, 9:38:13 AM 5175 handle document.loadData +DEBUG 3/13/2026, 9:38:13 AM 5175 document.loadData 0 +INFO 3/13/2026, 9:38:13 AM 5275 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/13/2026, 9:38:13 AM 5275 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/13/2026, 9:38:13 AM 5300 added recovery 1 (0) +INFO 3/13/2026, 9:38:13 AM 5302 synced recovery +INFO 3/13/2026, 9:38:13 AM 5558 [RenderProcess 1][Log] onBecomeActive +INFO 3/13/2026, 9:38:13 AM 5558 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/13/2026, 9:38:19 AM 11699 added recovery 1 ```m (4) +INFO 3/13/2026, 9:38:19 AM 11701 synced recovery +DEBUG 3/13/2026, 9:38:22 AM 14568 added recovery 1 ```matlab + + + +``` + + (18) +INFO 3/13/2026, 9:38:22 AM 14571 synced recovery +INFO 3/13/2026, 9:38:25 AM 17381 [blur] 1 +INFO 3/13/2026, 9:38:25 AM 17381 [win] blur +INFO 3/13/2026, 9:38:30 AM 22035 [focus] 1 +DEBUG 3/13/2026, 9:38:31 AM 23604 added recovery 1 "```matlab + +%%% ...0 0]; + +``` + +" (182) +INFO 3/13/2026, 9:38:31 AM 23606 synced recovery +DEBUG 3/13/2026, 9:38:33 AM 25219 added recovery 1 "```matlab + +%%% ... 0]; + + +``` + +" (184) +INFO 3/13/2026, 9:38:33 AM 25222 synced recovery +INFO 3/13/2026, 9:38:33 AM 25259 [blur] 1 +INFO 3/13/2026, 9:38:33 AM 25259 [win] blur +INFO 3/13/2026, 9:38:44 AM 36406 [focus] 1 +DEBUG 3/13/2026, 9:38:46 AM 38080 added recovery 1 "```matlab + +%%% ...e12)+Kg; + +``` + +" (908) +INFO 3/13/2026, 9:38:46 AM 38081 synced recovery +DEBUG 3/13/2026, 9:38:53 AM 45087 added recovery 1 "```matlab + +%%% ...e12)+Kg; + +``` + +" (909) +INFO 3/13/2026, 9:38:53 AM 45088 synced recovery +DEBUG 3/13/2026, 9:39:02 AM 54112 added recovery 1 "```matlab + +%%% ...e12)+Kg; + +``` + +" (908) +INFO 3/13/2026, 9:39:02 AM 54113 synced recovery +DEBUG 3/13/2026, 9:39:05 AM 56932 added recovery 1 "```matlab + +%%% ...e12)+Kg; + +``` + +" (906) +INFO 3/13/2026, 9:39:05 AM 56933 synced recovery +INFO 3/13/2026, 9:39:14 AM 65952 [blur] 1 +INFO 3/13/2026, 9:39:14 AM 65952 [win] blur +DEBUG 3/13/2026, 9:39:14 AM 65998 added recovery 1 "```matlab + +%%% ...+Kg; + + + +``` + +" (910) +INFO 3/13/2026, 9:39:14 AM 66000 synced recovery +INFO 3/13/2026, 9:39:28 AM 80551 [focus] 1 +DEBUG 3/13/2026, 9:39:31 AM 82775 added recovery 1 "```matlab + +%%% ...mesh(1); + +``` + +" (2656) +INFO 3/13/2026, 9:39:31 AM 82777 synced recovery +DEBUG 3/13/2026, 9:39:32 AM 84466 added recovery 1 "```matlab + +%%% ...mesh(1); + +``` + +" (2661) +INFO 3/13/2026, 9:39:32 AM 84470 synced recovery +DEBUG 3/13/2026, 9:39:36 AM 88622 added recovery 1 "```matlab + +%%% ...mesh(1); + +``` + +" (2668) +INFO 3/13/2026, 9:39:36 AM 88624 synced recovery +DEBUG 3/13/2026, 9:39:38 AM 90488 added recovery 1 "```matlab + + +%%%...mesh(1); + +``` + +" (2669) +INFO 3/13/2026, 9:39:38 AM 90490 synced recovery +DEBUG 3/13/2026, 9:39:43 AM 95695 added recovery 1 "```matlab + +%%%%...mesh(1); + +``` + +" (2675) +INFO 3/13/2026, 9:39:43 AM 95698 synced recovery +DEBUG 3/13/2026, 9:40:04 AM 116386 added recovery 1 "```matlab + +%%%%...mesh(1); + +``` + +" (2682) +INFO 3/13/2026, 9:40:04 AM 116387 synced recovery +DEBUG 3/13/2026, 9:40:08 AM 120598 added recovery 1 "````matlab + +%%%...esh(1); + +```` + +" (2691) +INFO 3/13/2026, 9:40:08 AM 120599 synced recovery +DEBUG 3/13/2026, 9:40:11 AM 123719 added recovery 1 "```matlab + +%%%%...mesh(1); + +``` + +" (2682) +INFO 3/13/2026, 9:40:11 AM 123721 synced recovery +DEBUG 3/13/2026, 9:40:15 AM 127370 added recovery 1 "```matlab + +%%%%...12)+Kg; + + +``` + +" (922) +INFO 3/13/2026, 9:40:15 AM 127372 synced recovery +DEBUG 3/13/2026, 9:40:16 AM 128511 added recovery 1 "```matlab + +%%%%...e12)+Kg; + +``` + +" (921) +INFO 3/13/2026, 9:40:16 AM 128512 synced recovery +DEBUG 3/13/2026, 9:40:22 AM 134022 added recovery 1 "```matlab + +%%%%...2)+Kg; + +``` + + + +" (923) +INFO 3/13/2026, 9:40:22 AM 134023 synced recovery +DEBUG 3/13/2026, 9:40:25 AM 136892 added recovery 1 "```matlab + +%%%%...g; + +``` + + + +```m" (927) +INFO 3/13/2026, 9:40:25 AM 136893 synced recovery +DEBUG 3/13/2026, 9:40:27 AM 139634 added recovery 1 "```matlab + +%%%%..._mesh(1); +``` + +" (2699) +INFO 3/13/2026, 9:40:27 AM 139637 synced recovery +DEBUG 3/13/2026, 9:40:38 AM 149826 added recovery 1 "```matlab + +%%%%..._mesh(1); +``` + +" (2520) +INFO 3/13/2026, 9:40:38 AM 149827 synced recovery +DEBUG 3/13/2026, 9:40:44 AM 156070 added recovery 1 "```matlab + +%%%%..._mesh(1); +``` + +" (2272) +INFO 3/13/2026, 9:40:44 AM 156074 synced recovery +DEBUG 3/13/2026, 9:40:46 AM 157850 added recovery 1 "```matlab + +%%%%..._mesh(1); +``` + +" (2275) +INFO 3/13/2026, 9:40:46 AM 157852 synced recovery +DEBUG 3/13/2026, 9:40:51 AM 163569 added recovery 1 "```matlab + +%%%%..._mesh(1); +``` + +" (1935) +INFO 3/13/2026, 9:40:51 AM 163570 synced recovery +DEBUG 3/13/2026, 9:40:58 AM 169763 added recovery 1 "```matlab + +%%%%..._mesh(1); +``` + +" (1890) +INFO 3/13/2026, 9:40:58 AM 169765 synced recovery +DEBUG 3/13/2026, 9:41:00 AM 172644 added recovery 1 "```matlab + +%%%%..._mesh(1); +``` + +" (1839) +INFO 3/13/2026, 9:41:00 AM 172646 synced recovery +DEBUG 3/13/2026, 9:41:02 AM 174281 added recovery 1 "```matlab + +%%%%..._mesh(1); +``` + +" (1890) +INFO 3/13/2026, 9:41:02 AM 174284 synced recovery +DEBUG 3/13/2026, 9:41:10 AM 182439 added recovery 1 "```matlab + +%%%%..._mesh(1); +``` + +" (1654) +INFO 3/13/2026, 9:41:10 AM 182442 synced recovery +DEBUG 3/13/2026, 9:41:17 AM 189668 added recovery 1 "```matlab + +%%%%..._mesh(1); +``` + +" (1653) +INFO 3/13/2026, 9:41:17 AM 189670 synced recovery +INFO 3/13/2026, 9:41:25 AM 197753 [blur] 1 +INFO 3/13/2026, 9:41:25 AM 197754 [win] blur +INFO 3/13/2026, 9:41:27 AM 198801 [focus] 1 +INFO 3/13/2026, 9:41:33 AM 205578 [blur] 1 +INFO 3/13/2026, 9:41:33 AM 205578 [win] blur +INFO 3/13/2026, 9:41:41 AM 213737 [focus] 1 +INFO 3/13/2026, 9:41:42 AM 214214 [blur] 1 +INFO 3/13/2026, 9:41:42 AM 214214 [win] blur +INFO 3/13/2026, 9:42:05 AM 237325 [focus] 1 +INFO 3/13/2026, 9:42:07 AM 238918 [blur] 1 +INFO 3/13/2026, 9:42:07 AM 238919 [win] blur +INFO 3/13/2026, 9:42:08 AM 240380 [focus] 1 +DEBUG 3/13/2026, 9:42:20 AM 252264 added recovery 1 "```matlab + +%%%%..._mesh(1); +``` + +" (1417) +INFO 3/13/2026, 9:42:20 AM 252268 synced recovery +DEBUG 3/13/2026, 9:42:32 AM 264194 added recovery 1 "```matlab + +%%%%..._mesh(1); +``` + +" (1228) +INFO 3/13/2026, 9:42:32 AM 264195 synced recovery +DEBUG 3/13/2026, 9:42:33 AM 265380 added recovery 1 "```matlab + +%%%%..._mesh(1); +``` + +" (1230) +INFO 3/13/2026, 9:42:33 AM 265382 synced recovery +DEBUG 3/13/2026, 9:42:47 AM 279749 added recovery 1 "```matlab + +%%%%..._mesh(1); +``` + +" (1230) +INFO 3/13/2026, 9:42:47 AM 279751 synced recovery +DEBUG 3/13/2026, 9:42:49 AM 281491 added recovery 1 "```matlab + +%%%%..._mesh(1); +``` + +" (1229) +INFO 3/13/2026, 9:42:49 AM 281493 synced recovery +DEBUG 3/13/2026, 9:42:51 AM 282821 added recovery 1 "```matlab + +%%%%..._mesh(1); +``` + +" (1228) +INFO 3/13/2026, 9:42:51 AM 282823 synced recovery +INFO 3/13/2026, 9:42:58 AM 290103 [blur] 1 +INFO 3/13/2026, 9:42:58 AM 290103 [win] blur +INFO 3/13/2026, 9:43:02 AM 294497 [focus] 1 +INFO 3/13/2026, 9:43:03 AM 294915 [blur] 1 +INFO 3/13/2026, 9:43:03 AM 294916 [win] blur +INFO 3/13/2026, 9:43:14 AM 305881 [focus] 1 +INFO 3/13/2026, 9:43:15 AM 307614 [blur] 1 +INFO 3/13/2026, 9:43:15 AM 307616 [win] blur +INFO 3/13/2026, 9:43:17 AM 309133 [focus] 1 +INFO 3/13/2026, 9:43:25 AM 317136 [blur] 1 +INFO 3/13/2026, 9:43:25 AM 317140 [win] blur +INFO 3/13/2026, 9:43:29 AM 321437 [focus] 1 +INFO 3/13/2026, 9:43:30 AM 322394 [blur] 1 +INFO 3/13/2026, 9:43:30 AM 322395 [win] blur +INFO 3/13/2026, 9:43:32 AM 324657 [focus] 1 +INFO 3/13/2026, 9:43:34 AM 325816 [blur] 1 +INFO 3/13/2026, 9:43:34 AM 325817 [win] blur +INFO 3/13/2026, 9:44:12 AM 364105 [focus] 1 +INFO 3/13/2026, 9:44:18 AM 370441 [blur] 1 +INFO 3/13/2026, 9:44:18 AM 370441 [win] blur +INFO 3/13/2026, 9:44:20 AM 372530 [focus] 1 +INFO 3/13/2026, 9:44:24 AM 375793 [blur] 1 +INFO 3/13/2026, 9:44:24 AM 375793 [win] blur +INFO 3/13/2026, 9:44:28 AM 379990 [focus] 1 +INFO 3/13/2026, 9:44:28 AM 380579 [blur] 1 +INFO 3/13/2026, 9:44:28 AM 380579 [win] blur +INFO 3/13/2026, 9:44:32 AM 384700 [focus] 1 +INFO 3/13/2026, 9:44:33 AM 385639 [blur] 1 +INFO 3/13/2026, 9:44:33 AM 385640 [win] blur +INFO 3/13/2026, 9:44:34 AM 386390 [focus] 1 +INFO 3/13/2026, 9:44:37 AM 389565 [blur] 1 +INFO 3/13/2026, 9:44:37 AM 389565 [win] blur +INFO 3/13/2026, 9:44:42 AM 394419 [focus] 1 +INFO 3/13/2026, 9:44:42 AM 394669 [blur] 1 +INFO 3/13/2026, 9:44:42 AM 394669 [win] blur +INFO 3/13/2026, 9:45:20 AM 432439 [focus] 1 +INFO 3/13/2026, 9:45:21 AM 433553 [blur] 1 +INFO 3/13/2026, 9:45:21 AM 433553 [win] blur +INFO 3/13/2026, 9:45:23 AM 435054 [focus] 1 +INFO 3/13/2026, 9:45:23 AM 435561 [blur] 1 +INFO 3/13/2026, 9:45:23 AM 435562 [win] blur +INFO 3/13/2026, 9:45:24 AM 435978 [focus] 1 +INFO 3/13/2026, 9:45:25 AM 437073 [blur] 1 +INFO 3/13/2026, 9:45:25 AM 437073 [win] blur +INFO 3/13/2026, 9:45:44 AM 456562 [focus] 1 +DEBUG 3/13/2026, 9:45:49 AM 460869 added recovery 1 "```matlab + +%%%%... +``` + +``` +``` + +" (1237) +INFO 3/13/2026, 9:45:49 AM 460871 synced recovery +DEBUG 3/13/2026, 9:45:50 AM 462421 added recovery 1 "```matlab + +%%%%...esh(1); +``` + + + +" (1230) +INFO 3/13/2026, 9:45:50 AM 462423 synced recovery +DEBUG 3/13/2026, 9:45:52 AM 464620 added recovery 1 "```matlab + +%%%%...(1); +``` + +``` + +" (1233) +INFO 3/13/2026, 9:45:52 AM 464622 synced recovery +DEBUG 3/13/2026, 9:45:55 AM 466844 added recovery 1 "```matlab + +%%%%...`matlab +``` + + + +" (1245) +INFO 3/13/2026, 9:45:55 AM 466845 synced recovery +DEBUG 3/13/2026, 9:45:56 AM 468049 added recovery 1 "```matlab + +%%%%...2*ke12; +``` + + + +" (1671) +INFO 3/13/2026, 9:45:56 AM 468050 synced recovery +DEBUG 3/13/2026, 9:46:01 AM 472864 added recovery 1 "```matlab + +%%%%...e12; +``` + + + +```" (1674) +INFO 3/13/2026, 9:46:01 AM 472866 synced recovery +DEBUG 3/13/2026, 9:46:03 AM 475054 added recovery 1 "```matlab + +%%%%...```matlab +``` + +" (1686) +INFO 3/13/2026, 9:46:03 AM 475058 synced recovery +INFO 3/13/2026, 9:46:03 AM 475146 [blur] 1 +INFO 3/13/2026, 9:46:03 AM 475146 [win] blur +INFO 3/13/2026, 9:46:21 AM 493500 [focus] 1 +DEBUG 3/13/2026, 9:46:24 AM 496132 added recovery 1 "```matlab + +%%%%...psilon)); +``` + +" (2780) +INFO 3/13/2026, 9:46:24 AM 496133 synced recovery +DEBUG 3/13/2026, 9:46:31 AM 503577 added recovery 1 "```matlab + +%%%%...psilon)); +``` + +" (2638) +INFO 3/13/2026, 9:46:31 AM 503581 synced recovery +DEBUG 3/13/2026, 9:46:47 AM 519354 added recovery 1 "```matlab + +%%%%...psilon)); +``` + +" (2544) +INFO 3/13/2026, 9:46:47 AM 519357 synced recovery +DEBUG 3/13/2026, 9:46:48 AM 520614 added recovery 1 "```matlab + +%%%%...psilon)); +``` + +" (2543) +INFO 3/13/2026, 9:46:48 AM 520616 synced recovery +DEBUG 3/13/2026, 9:46:59 AM 531718 2nd 0.7793659379715461 +DEBUG 3/13/2026, 9:46:59 AM 531718 pure = false +INFO 3/13/2026, 9:46:59 AM 531718 renew +DEBUG 3/13/2026, 9:46:59 AM 531718 [renewLicense] license renewed in 12h +DEBUG 3/13/2026, 9:46:59 AM 531718 [L] pass +DEBUG 3/13/2026, 9:47:05 AM 537057 added recovery 1 "```matlab + +%%%%...psilon)); +``` + +" (2421) +INFO 3/13/2026, 9:47:05 AM 537060 synced recovery +DEBUG 3/13/2026, 9:47:09 AM 540759 added recovery 1 "```matlab + +%%%%...psilon)); +``` + +" (2383) +INFO 3/13/2026, 9:47:09 AM 540762 synced recovery +DEBUG 3/13/2026, 9:47:14 AM 546428 added recovery 1 "```matlab + +%%%%...psilon)); +``` + +" (2291) +INFO 3/13/2026, 9:47:14 AM 546431 synced recovery +INFO 3/13/2026, 9:47:27 AM 559580 [blur] 1 +INFO 3/13/2026, 9:47:27 AM 559580 [win] blur +INFO 3/13/2026, 9:47:32 AM 564669 [focus] 1 +INFO 3/13/2026, 9:47:33 AM 564862 [blur] 1 +INFO 3/13/2026, 9:47:33 AM 564862 [win] blur +INFO 3/13/2026, 9:48:12 AM 604243 [focus] 1 +INFO 3/13/2026, 9:48:13 AM 605171 [blur] 1 +INFO 3/13/2026, 9:48:13 AM 605171 [win] blur +INFO 3/13/2026, 9:48:14 AM 606471 [focus] 1 +DEBUG 3/13/2026, 9:48:22 AM 614414 added recovery 1 "```matlab + +%%%%...psilon)); +``` + +" (2292) +INFO 3/13/2026, 9:48:22 AM 614415 synced recovery +DEBUG 3/13/2026, 9:48:23 AM 615758 added recovery 1 "```matlab + +%%%%...psilon)); +``` + +" (2295) +INFO 3/13/2026, 9:48:24 AM 615759 synced recovery +DEBUG 3/13/2026, 9:48:28 AM 620133 added recovery 1 "```matlab + +%%%%...psilon)); +``` + +" (2305) +INFO 3/13/2026, 9:48:28 AM 620134 synced recovery +INFO 3/13/2026, 9:48:34 AM 626455 [blur] 1 +INFO 3/13/2026, 9:48:34 AM 626455 [win] blur +INFO 3/13/2026, 9:48:38 AM 629915 [focus] 1 +INFO 3/13/2026, 9:48:40 AM 632365 [blur] 1 +INFO 3/13/2026, 9:48:40 AM 632365 [win] blur +INFO 3/13/2026, 9:48:45 AM 637755 [focus] 1 +INFO 3/13/2026, 9:48:46 AM 637953 [blur] 1 +INFO 3/13/2026, 9:48:46 AM 637953 [win] blur +INFO 3/13/2026, 9:49:00 AM 652353 [focus] 1 +INFO 3/13/2026, 9:49:03 AM 655516 [blur] 1 +INFO 3/13/2026, 9:49:03 AM 655516 [win] blur +INFO 3/13/2026, 9:49:09 AM 660978 [focus] 1 +INFO 3/13/2026, 9:49:09 AM 661197 [blur] 1 +INFO 3/13/2026, 9:49:09 AM 661198 [win] blur +INFO 3/13/2026, 9:50:27 AM 739537 [focus] 1 +INFO 3/13/2026, 9:50:30 AM 742482 synced recovery +INFO 3/13/2026, 9:50:30 AM 742482 ----------------before-quit----------------- +INFO 3/13/2026, 9:50:30 AM 742482 ------------------will-quit------------------ +INFO 3/13/2026, 9:50:30 AM 742484 -----------------quit------------------ +INFO 3/13/2026, 9:50:30 AM 742484 closeLogging +INFO 3/13/2026, 9:52:48 AM 67 launch with argv [/usr/share/typora/Typora] +INFO 3/13/2026, 9:52:49 AM 576 ------------------start------------------ +DEBUG 3/13/2026, 9:52:49 AM 605 before setting +DEBUG 3/13/2026, 9:52:49 AM 678 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/13/2026, 9:52:49 AM 696 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/13/2026, 9:52:49 AM 747 OS is linux 6.19.6-arch1-1 +INFO 3/13/2026, 9:52:49 AM 747 start LM in devVersion=false +DEBUG 3/13/2026, 9:52:49 AM 765 after setting +INFO 3/13/2026, 9:52:49 AM 765 typora version: 1.12.4 +INFO 3/13/2026, 9:52:49 AM 864 [watch L] +DEBUG 3/13/2026, 9:52:49 AM 864 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/13/2026, 9:52:49 AM 868 pure = undefined +INFO 3/13/2026, 9:52:49 AM 868 renew +DEBUG 3/13/2026, 9:52:49 AM 868 [renewLicense] license renewed in 12h +DEBUG 3/13/2026, 9:52:49 AM 868 [L] pass +DEBUG 3/13/2026, 9:52:49 AM 869 trailRemains is 0 +INFO 3/13/2026, 9:52:49 AM 869 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/13/2026, 9:52:49 AM 869 [watch L] hasL: true +user-dict.json not found +DEBUG 3/13/2026, 9:52:49 AM 904 app.openFile +DEBUG 3/13/2026, 9:52:49 AM 968 added recovery 1 null (0) +DEBUG 3/13/2026, 9:52:49 AM 974 putAccelerator File -> &Fichier +DEBUG 3/13/2026, 9:52:49 AM 974 putAccelerator Edit -> Édit&er +DEBUG 3/13/2026, 9:52:49 AM 974 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/13/2026, 9:52:49 AM 975 putAccelerator Format -> F&ormat +DEBUG 3/13/2026, 9:52:49 AM 975 putAccelerator View -> Présentation(&V) +DEBUG 3/13/2026, 9:52:49 AM 975 putAccelerator Themes -> &Thèmes +DEBUG 3/13/2026, 9:52:49 AM 975 putAccelerator Help -> Aide(&H) +INFO 3/13/2026, 9:52:49 AM 1060 synced recovery +INFO 3/13/2026, 9:52:49 AM 1159 [focus] 1 +ERROR 3/13/2026, 9:52:50 AM 1908 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/13/2026, 9:52:50 AM 1914 handle document.loadData +DEBUG 3/13/2026, 9:52:50 AM 1914 document.loadData 0 +ERROR 3/13/2026, 9:52:50 AM 1914 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/13/2026, 9:52:50 AM 1977 [blur] 1 +INFO 3/13/2026, 9:52:50 AM 1977 [win] blur +INFO 3/13/2026, 9:52:50 AM 2014 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/13/2026, 9:52:50 AM 2014 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/13/2026, 9:52:50 AM 2039 added recovery 1 (0) +INFO 3/13/2026, 9:52:50 AM 2041 synced recovery +INFO 3/13/2026, 9:52:50 AM 2270 [RenderProcess 1][Log] onBecomeActive +INFO 3/13/2026, 9:52:50 AM 2271 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/13/2026, 9:54:57 AM 129237 [focus] 1 +DEBUG 3/13/2026, 9:55:01 AM 132819 added recovery 1 ``` (3) +INFO 3/13/2026, 9:55:01 AM 132820 synced recovery +DEBUG 3/13/2026, 9:55:04 AM 135664 added recovery 1 "```matlab +% Rot... + brake +``` + +" (183) +INFO 3/13/2026, 9:55:04 AM 135666 synced recovery +INFO 3/13/2026, 9:55:05 AM 136721 [blur] 1 +INFO 3/13/2026, 9:55:05 AM 136721 [win] blur +INFO 3/13/2026, 9:55:36 AM 168342 [focus] 1 +INFO 3/13/2026, 9:55:40 AM 171645 [blur] 1 +INFO 3/13/2026, 9:55:40 AM 171645 [win] blur +INFO 3/13/2026, 9:55:44 AM 175529 [focus] 1 +INFO 3/13/2026, 9:55:44 AM 175749 [blur] 1 +INFO 3/13/2026, 9:55:44 AM 175749 [win] blur +INFO 3/13/2026, 9:56:08 AM 199955 [focus] 1 +DEBUG 3/13/2026, 9:56:11 AM 202836 added recovery 1 "```matlab +% Rot...=10+100; +``` + +" (166) +INFO 3/13/2026, 9:56:11 AM 202837 synced recovery +DEBUG 3/13/2026, 9:56:13 AM 204540 added recovery 1 "```matlab +% Rot...=10+100; +``` + +" (144) +INFO 3/13/2026, 9:56:13 AM 204541 synced recovery +INFO 3/13/2026, 9:56:19 AM 211347 [blur] 1 +INFO 3/13/2026, 9:56:19 AM 211347 [win] blur +INFO 3/13/2026, 9:56:22 AM 214086 [focus] 1 +INFO 3/13/2026, 9:56:22 AM 214235 [blur] 1 +INFO 3/13/2026, 9:56:22 AM 214235 [win] blur +INFO 3/13/2026, 10:01:20 AM 512012 [focus] 1 +INFO 3/13/2026, 10:01:22 AM 514040 synced recovery +INFO 3/13/2026, 10:01:22 AM 514040 ----------------before-quit----------------- +INFO 3/13/2026, 10:01:22 AM 514040 ------------------will-quit------------------ +INFO 3/13/2026, 10:01:22 AM 514043 -----------------quit------------------ +INFO 3/13/2026, 10:01:22 AM 514043 closeLogging +INFO 3/13/2026, 10:22:20 AM 185 launch with argv [/usr/share/typora/Typora] +INFO 3/13/2026, 10:22:20 AM 665 ------------------start------------------ +DEBUG 3/13/2026, 10:22:20 AM 707 before setting +DEBUG 3/13/2026, 10:22:20 AM 934 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/13/2026, 10:22:21 AM 989 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/13/2026, 10:22:21 AM 1003 OS is linux 6.19.6-arch1-1 +INFO 3/13/2026, 10:22:21 AM 1003 start LM in devVersion=false +DEBUG 3/13/2026, 10:22:21 AM 1031 after setting +INFO 3/13/2026, 10:22:21 AM 1031 typora version: 1.12.4 +INFO 3/13/2026, 10:22:21 AM 1223 [watch L] +DEBUG 3/13/2026, 10:22:21 AM 1223 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/13/2026, 10:22:21 AM 1246 pure = undefined +INFO 3/13/2026, 10:22:21 AM 1247 renew +DEBUG 3/13/2026, 10:22:21 AM 1247 [renewLicense] license renewed in 12h +DEBUG 3/13/2026, 10:22:21 AM 1247 [L] pass +DEBUG 3/13/2026, 10:22:21 AM 1248 trailRemains is 0 +INFO 3/13/2026, 10:22:21 AM 1248 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/13/2026, 10:22:21 AM 1248 [watch L] hasL: true +user-dict.json not found +DEBUG 3/13/2026, 10:22:21 AM 1282 putAccelerator File -> &Fichier +DEBUG 3/13/2026, 10:22:21 AM 1285 putAccelerator Edit -> Édit&er +DEBUG 3/13/2026, 10:22:21 AM 1286 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/13/2026, 10:22:21 AM 1287 putAccelerator Format -> F&ormat +DEBUG 3/13/2026, 10:22:21 AM 1289 putAccelerator View -> Présentation(&V) +DEBUG 3/13/2026, 10:22:21 AM 1289 putAccelerator Themes -> &Thèmes +DEBUG 3/13/2026, 10:22:21 AM 1289 putAccelerator Help -> Aide(&H) +DEBUG 3/13/2026, 10:22:21 AM 1327 app.openFile +DEBUG 3/13/2026, 10:22:21 AM 1520 added recovery 1 null (0) +INFO 3/13/2026, 10:22:21 AM 1688 synced recovery +ERROR 3/13/2026, 10:22:23 AM 3719 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/13/2026, 10:22:23 AM 3727 handle document.loadData +DEBUG 3/13/2026, 10:22:23 AM 3727 document.loadData 0 +ERROR 3/13/2026, 10:22:23 AM 3729 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/13/2026, 10:22:23 AM 3896 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/13/2026, 10:22:23 AM 3897 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/13/2026, 10:22:24 AM 3965 added recovery 1 (0) +INFO 3/13/2026, 10:22:24 AM 3971 synced recovery +INFO 3/13/2026, 10:22:24 AM 4634 [RenderProcess 1][Log] onBecomeActive +INFO 3/13/2026, 10:22:24 AM 4634 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/13/2026, 10:22:24 AM 4803 [focus] 1 +INFO 3/13/2026, 10:22:28 AM 8065 [blur] 1 +INFO 3/13/2026, 10:22:28 AM 8065 [win] blur +INFO 3/13/2026, 10:22:28 AM 8065 [focus] 1 +INFO 3/13/2026, 10:22:32 AM 12801 [blur] 1 +INFO 3/13/2026, 10:22:32 AM 12802 [win] blur +INFO 3/13/2026, 10:22:45 AM 25541 addRecentDocument +INFO 3/13/2026, 10:22:45 AM 25566 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/13/2026, 10:22:45 AM 25568 [RenderProcess 1][Log] reset NodeMap +INFO 3/13/2026, 10:22:45 AM 25576 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/code/README.md +INFO 3/13/2026, 10:22:45 AM 25601 [focus] 1 +DEBUG 3/13/2026, 10:22:45 AM 25739 added recovery 1 /home/afoucaultc/workspace/cesi/code/README.md (0) +INFO 3/13/2026, 10:22:45 AM 25740 synced recovery +INFO 3/13/2026, 10:22:53 AM 33763 load file [/tmp/Typora/1773393773771-0.980062688711437.html] for PDF export +INFO 3/13/2026, 10:22:54 AM 34206 generate print window with id [2] for [content] +INFO 3/13/2026, 10:22:54 AM 34230 [blur] 1 +INFO 3/13/2026, 10:22:54 AM 34231 [win] blur +INFO 3/13/2026, 10:22:54 AM 34564 got PDF data +INFO 3/13/2026, 10:22:54 AM 34569 get background color +INFO 3/13/2026, 10:22:54 AM 34817 load file [/tmp/Typora/1773393774808-1.html] for PDF export +INFO 3/13/2026, 10:22:55 AM 34995 generate print window with id [3] for [header] +INFO 3/13/2026, 10:22:55 AM 35217 got PDF data +INFO 3/13/2026, 10:22:55 AM 35220 get background color +INFO 3/13/2026, 10:22:55 AM 35250 load file [/tmp/Typora/1773393775279-2.html] for PDF export +INFO 3/13/2026, 10:22:55 AM 35409 generate print window with id [4] for [footer] +INFO 3/13/2026, 10:22:55 AM 35647 got PDF data +INFO 3/13/2026, 10:22:55 AM 35655 get background color +INFO 3/13/2026, 10:23:00 AM 40011 [RenderProcess 1][Log] export PDF to /home/afoucaultc/Temp/README.pdf +INFO 3/13/2026, 10:23:00 AM 40132 [focus] 1 +INFO 3/13/2026, 10:23:00 AM 40466 [blur] 1 +INFO 3/13/2026, 10:23:00 AM 40466 [win] blur +INFO 3/13/2026, 10:23:12 AM 52651 [focus] 1 +INFO 3/13/2026, 10:23:17 AM 57757 [blur] 1 +INFO 3/13/2026, 10:23:17 AM 57757 [win] blur +INFO 3/13/2026, 10:23:30 AM 70478 [focus] 1 +INFO 3/13/2026, 10:23:30 AM 70944 [blur] 1 +INFO 3/13/2026, 10:23:30 AM 70944 [win] blur +INFO 3/13/2026, 10:23:33 AM 73117 [focus] 1 +INFO 3/13/2026, 10:23:33 AM 73617 [blur] 1 +INFO 3/13/2026, 10:23:33 AM 73617 [win] blur +INFO 3/13/2026, 10:23:33 AM 73764 [focus] 1 +INFO 3/13/2026, 10:23:35 AM 75482 synced recovery +INFO 3/13/2026, 10:23:35 AM 75483 ----------------before-quit----------------- +INFO 3/13/2026, 10:23:35 AM 75483 ------------------will-quit------------------ +INFO 3/13/2026, 10:23:35 AM 75489 -----------------quit------------------ +INFO 3/13/2026, 10:23:35 AM 75490 closeLogging +INFO 3/13/2026, 10:23:45 AM 165 launch with argv [/usr/share/typora/Typora, /home/afoucaultc/workspace/cesi/code/README.md] +INFO 3/13/2026, 10:23:47 AM 2011 ------------------start------------------ +DEBUG 3/13/2026, 10:23:47 AM 2053 before setting +DEBUG 3/13/2026, 10:23:47 AM 2251 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/13/2026, 10:23:47 AM 2354 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/13/2026, 10:23:47 AM 2363 OS is linux 6.19.6-arch1-1 +INFO 3/13/2026, 10:23:47 AM 2363 start LM in devVersion=false +DEBUG 3/13/2026, 10:23:47 AM 2390 after setting +INFO 3/13/2026, 10:23:47 AM 2390 typora version: 1.12.4 +DEBUG 3/13/2026, 10:23:47 AM 2391 app.openFile +INFO 3/13/2026, 10:23:47 AM 2391 addRecentDocument +INFO 3/13/2026, 10:23:47 AM 2622 [watch L] +DEBUG 3/13/2026, 10:23:47 AM 2622 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/13/2026, 10:23:47 AM 2687 pure = undefined +INFO 3/13/2026, 10:23:47 AM 2688 renew +DEBUG 3/13/2026, 10:23:47 AM 2688 [renewLicense] license renewed in 12h +DEBUG 3/13/2026, 10:23:47 AM 2688 [L] pass +DEBUG 3/13/2026, 10:23:47 AM 2688 trailRemains is 0 +INFO 3/13/2026, 10:23:47 AM 2689 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/13/2026, 10:23:47 AM 2689 [watch L] hasL: true +DEBUG 3/13/2026, 10:23:48 AM 2964 added recovery 1 /home/afoucaultc/workspace/cesi/code/README.md (0) +user-dict.json not found +DEBUG 3/13/2026, 10:23:48 AM 3021 putAccelerator File -> &Fichier +DEBUG 3/13/2026, 10:23:48 AM 3030 putAccelerator Edit -> Édit&er +DEBUG 3/13/2026, 10:23:48 AM 3031 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/13/2026, 10:23:48 AM 3044 putAccelerator Format -> F&ormat +DEBUG 3/13/2026, 10:23:48 AM 3044 putAccelerator View -> Présentation(&V) +DEBUG 3/13/2026, 10:23:48 AM 3045 putAccelerator Themes -> &Thèmes +DEBUG 3/13/2026, 10:23:48 AM 3045 putAccelerator Help -> Aide(&H) +INFO 3/13/2026, 10:23:48 AM 3403 synced recovery +INFO 3/13/2026, 10:23:48 AM 3645 [focus] 1 +INFO 3/13/2026, 10:23:50 AM 5074 synced recovery +INFO 3/13/2026, 10:23:50 AM 5074 ----------------before-quit----------------- +INFO 3/13/2026, 10:23:50 AM 5074 ------------------will-quit------------------ +INFO 3/13/2026, 10:23:50 AM 5078 -----------------quit------------------ +INFO 3/13/2026, 10:23:50 AM 5078 closeLogging +INFO 3/16/2026, 8:00:46 AM 80 launch with argv [/usr/share/typora/Typora] +INFO 3/16/2026, 8:00:46 AM 549 ------------------start------------------ +DEBUG 3/16/2026, 8:00:46 AM 651 before setting +DEBUG 3/16/2026, 8:00:46 AM 721 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/16/2026, 8:00:46 AM 743 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/16/2026, 8:00:46 AM 747 OS is linux 6.19.6-arch1-1 +INFO 3/16/2026, 8:00:46 AM 747 start LM in devVersion=false +DEBUG 3/16/2026, 8:00:46 AM 763 after setting +INFO 3/16/2026, 8:00:46 AM 763 typora version: 1.12.4 +user-dict.json not found +INFO 3/16/2026, 8:00:46 AM 855 [watch L] +DEBUG 3/16/2026, 8:00:46 AM 855 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/16/2026, 8:00:46 AM 939 pure = undefined +INFO 3/16/2026, 8:00:46 AM 941 renew +DEBUG 3/16/2026, 8:00:46 AM 941 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 3/16/2026, 8:00:46 AM 942 [L] pass +DEBUG 3/16/2026, 8:00:46 AM 943 trailRemains is 0 +INFO 3/16/2026, 8:00:46 AM 943 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/16/2026, 8:00:46 AM 958 [watch L] hasL: true +DEBUG 3/16/2026, 8:00:46 AM 980 app.openFile +DEBUG 3/16/2026, 8:00:47 AM 1161 added recovery 1 null (0) +DEBUG 3/16/2026, 8:00:47 AM 1227 putAccelerator File -> &Fichier +DEBUG 3/16/2026, 8:00:47 AM 1227 putAccelerator Edit -> Édit&er +DEBUG 3/16/2026, 8:00:47 AM 1228 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/16/2026, 8:00:47 AM 1228 putAccelerator Format -> F&ormat +DEBUG 3/16/2026, 8:00:47 AM 1228 putAccelerator View -> Présentation(&V) +DEBUG 3/16/2026, 8:00:47 AM 1228 putAccelerator Themes -> &Thèmes +DEBUG 3/16/2026, 8:00:47 AM 1228 putAccelerator Help -> Aide(&H) +INFO 3/16/2026, 8:00:47 AM 1247 synced recovery +INFO 3/16/2026, 8:00:48 AM 2393 [focus] 1 +DEBUG 3/16/2026, 8:00:48 AM 2439 [renewLicense]: license renewed +INFO 3/16/2026, 8:00:48 AM 2439 ls put SLicense +ERROR 3/16/2026, 8:00:49 AM 3189 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/16/2026, 8:00:49 AM 3193 handle document.loadData +DEBUG 3/16/2026, 8:00:49 AM 3193 document.loadData 0 +ERROR 3/16/2026, 8:00:49 AM 3193 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/16/2026, 8:00:49 AM 3265 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:00:49 AM 3266 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/16/2026, 8:00:49 AM 3288 added recovery 1 (0) +INFO 3/16/2026, 8:00:49 AM 3291 synced recovery +INFO 3/16/2026, 8:00:49 AM 3599 [RenderProcess 1][Log] onBecomeActive +INFO 3/16/2026, 8:00:49 AM 3599 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/16/2026, 8:00:54 AM 8687 [blur] 1 +INFO 3/16/2026, 8:00:54 AM 8687 [win] blur +INFO 3/16/2026, 8:01:11 AM 25959 addRecentDocument +INFO 3/16/2026, 8:01:11 AM 25985 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:01:11 AM 25985 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:11 AM 25997 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/yangEvidenceTheoryBased2022.md +INFO 3/16/2026, 8:01:11 AM 26007 [focus] 1 +DEBUG 3/16/2026, 8:01:12 AM 26055 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/yangEvidenceTheoryBased2022.md (0) +INFO 3/16/2026, 8:01:12 AM 26057 synced recovery +INFO 3/16/2026, 8:01:14 AM 28574 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/trabelsiConsiderationUncertaintyDimensioning2020.md] +INFO 3/16/2026, 8:01:14 AM 28574 addRecentDocument +DEBUG 3/16/2026, 8:01:14 AM 28579 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/trabelsiConsiderationUncertaintyDimensioning2020.md (0) +INFO 3/16/2026, 8:01:14 AM 28583 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/16/2026, 8:01:14 AM 28583 synced recovery +INFO 3/16/2026, 8:01:14 AM 28585 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:01:14 AM 28585 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:14 AM 28587 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/trabelsiConsiderationUncertaintyDimensioning2020.md +DEBUG 3/16/2026, 8:01:14 AM 28615 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/trabelsiConsiderationUncertaintyDimensioning2020.md (0) +INFO 3/16/2026, 8:01:14 AM 28616 synced recovery +INFO 3/16/2026, 8:01:15 AM 29332 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/smoldersReliabilityAnalysisPrediction2010.md] +INFO 3/16/2026, 8:01:15 AM 29332 addRecentDocument +DEBUG 3/16/2026, 8:01:15 AM 29340 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/smoldersReliabilityAnalysisPrediction2010.md (0) +INFO 3/16/2026, 8:01:15 AM 29346 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/16/2026, 8:01:15 AM 29350 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:01:15 AM 29352 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:15 AM 29354 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/smoldersReliabilityAnalysisPrediction2010.md +INFO 3/16/2026, 8:01:15 AM 29355 synced recovery +DEBUG 3/16/2026, 8:01:15 AM 29396 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/smoldersReliabilityAnalysisPrediction2010.md (0) +INFO 3/16/2026, 8:01:15 AM 29398 synced recovery +INFO 3/16/2026, 8:01:16 AM 30239 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiSupervisedMachineLearning2025.md] +INFO 3/16/2026, 8:01:16 AM 30240 addRecentDocument +DEBUG 3/16/2026, 8:01:16 AM 30263 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiSupervisedMachineLearning2025.md (0) +INFO 3/16/2026, 8:01:16 AM 30272 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/16/2026, 8:01:16 AM 30275 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:01:16 AM 30277 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:16 AM 30277 synced recovery +INFO 3/16/2026, 8:01:16 AM 30278 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiSupervisedMachineLearning2025.md +DEBUG 3/16/2026, 8:01:16 AM 30325 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiSupervisedMachineLearning2025.md (0) +INFO 3/16/2026, 8:01:16 AM 30326 synced recovery +INFO 3/16/2026, 8:01:18 AM 32137 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/smoldersReliabilityAnalysisPrediction2010.md] +INFO 3/16/2026, 8:01:18 AM 32137 addRecentDocument +DEBUG 3/16/2026, 8:01:18 AM 32148 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/smoldersReliabilityAnalysisPrediction2010.md (0) +INFO 3/16/2026, 8:01:18 AM 32157 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/16/2026, 8:01:18 AM 32158 lastSync 2026-03-16T07:01:15.336Z, timestamp 1773644475345, mtime 1773055447993.5823 +INFO 3/16/2026, 8:01:18 AM 32159 synced recovery +INFO 3/16/2026, 8:01:18 AM 32161 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:01:18 AM 32161 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:18 AM 32171 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/smoldersReliabilityAnalysisPrediction2010.md +INFO 3/16/2026, 8:01:18 AM 32180 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/16/2026, 8:01:18 AM 32181 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:18 AM 32183 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 0 at: -1 +DEBUG 3/16/2026, 8:01:18 AM 32183 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/smoldersReliabilityAnalysisPrediction2010.md (0) +INFO 3/16/2026, 8:01:18 AM 32185 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/16/2026, 8:01:18 AM 32186 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:18 AM 32186 synced recovery +INFO 3/16/2026, 8:01:18 AM 32774 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiSupervisedMachineLearning2025.md] +INFO 3/16/2026, 8:01:18 AM 32775 addRecentDocument +DEBUG 3/16/2026, 8:01:18 AM 32793 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiSupervisedMachineLearning2025.md (0) +INFO 3/16/2026, 8:01:18 AM 32799 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/16/2026, 8:01:18 AM 32800 lastSync 2026-03-16T07:01:16.247Z, timestamp 1773644476270, mtime 1772710399226.9482 +INFO 3/16/2026, 8:01:18 AM 32800 synced recovery +INFO 3/16/2026, 8:01:18 AM 32802 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:01:18 AM 32803 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:18 AM 32806 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiSupervisedMachineLearning2025.md +INFO 3/16/2026, 8:01:18 AM 32815 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/16/2026, 8:01:18 AM 32815 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:18 AM 32819 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 0 at: -1 +DEBUG 3/16/2026, 8:01:18 AM 32819 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiSupervisedMachineLearning2025.md (0) +INFO 3/16/2026, 8:01:18 AM 32820 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/16/2026, 8:01:18 AM 32820 synced recovery +INFO 3/16/2026, 8:01:18 AM 32821 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/16/2026, 8:01:19 AM 33835 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiSupervisedMachineLearning2025.md (0) +INFO 3/16/2026, 8:01:19 AM 33837 synced recovery +INFO 3/16/2026, 8:01:20 AM 34975 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md] +INFO 3/16/2026, 8:01:20 AM 34975 addRecentDocument +DEBUG 3/16/2026, 8:01:20 AM 34982 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md (0) +INFO 3/16/2026, 8:01:20 AM 34985 synced recovery +INFO 3/16/2026, 8:01:20 AM 34989 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/16/2026, 8:01:20 AM 34992 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:01:20 AM 34992 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:20 AM 34997 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md +DEBUG 3/16/2026, 8:01:20 AM 35025 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/rebaiAdvancedReliabilityPrediction2025.md (0) +INFO 3/16/2026, 8:01:20 AM 35027 synced recovery +INFO 3/16/2026, 8:01:21 AM 35506 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md] +INFO 3/16/2026, 8:01:21 AM 35507 addRecentDocument +DEBUG 3/16/2026, 8:01:21 AM 35525 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md (0) +INFO 3/16/2026, 8:01:21 AM 35532 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/16/2026, 8:01:21 AM 35534 synced recovery +INFO 3/16/2026, 8:01:21 AM 35535 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:01:21 AM 35535 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:21 AM 35538 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md +DEBUG 3/16/2026, 8:01:21 AM 35569 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/mansouriEnhancedGaussianProcess2022.md (0) +INFO 3/16/2026, 8:01:21 AM 35570 synced recovery +INFO 3/16/2026, 8:01:22 AM 36291 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md] +INFO 3/16/2026, 8:01:22 AM 36291 addRecentDocument +DEBUG 3/16/2026, 8:01:22 AM 36300 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/16/2026, 8:01:22 AM 36304 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/16/2026, 8:01:22 AM 36306 synced recovery +INFO 3/16/2026, 8:01:22 AM 36310 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:01:22 AM 36310 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:22 AM 36311 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md +DEBUG 3/16/2026, 8:01:22 AM 36364 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/jospinHandsOnBayesianNeural2022.md (0) +INFO 3/16/2026, 8:01:22 AM 36365 synced recovery +INFO 3/16/2026, 8:01:23 AM 37192 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md] +INFO 3/16/2026, 8:01:23 AM 37192 addRecentDocument +DEBUG 3/16/2026, 8:01:23 AM 37202 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/16/2026, 8:01:23 AM 37208 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/16/2026, 8:01:23 AM 37212 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:01:23 AM 37212 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:23 AM 37213 synced recovery +INFO 3/16/2026, 8:01:23 AM 37217 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md +DEBUG 3/16/2026, 8:01:23 AM 37325 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/16/2026, 8:01:23 AM 37326 synced recovery +INFO 3/16/2026, 8:01:23 AM 37955 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md] +INFO 3/16/2026, 8:01:23 AM 37955 addRecentDocument +DEBUG 3/16/2026, 8:01:23 AM 37962 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md (0) +INFO 3/16/2026, 8:01:23 AM 37967 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/16/2026, 8:01:23 AM 37969 synced recovery +INFO 3/16/2026, 8:01:23 AM 37969 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:01:23 AM 37970 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:23 AM 37974 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md +DEBUG 3/16/2026, 8:01:23 AM 38006 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md (0) +INFO 3/16/2026, 8:01:23 AM 38007 synced recovery +INFO 3/16/2026, 8:01:24 AM 38655 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md] +INFO 3/16/2026, 8:01:24 AM 38655 addRecentDocument +DEBUG 3/16/2026, 8:01:24 AM 38674 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md (0) +INFO 3/16/2026, 8:01:24 AM 38679 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/16/2026, 8:01:24 AM 38680 synced recovery +INFO 3/16/2026, 8:01:24 AM 38681 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:01:24 AM 38682 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:24 AM 38684 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md +DEBUG 3/16/2026, 8:01:24 AM 38714 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/fuConditionMonitoringWind2019.md (0) +INFO 3/16/2026, 8:01:24 AM 38715 synced recovery +INFO 3/16/2026, 8:01:25 AM 39679 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md] +INFO 3/16/2026, 8:01:25 AM 39679 addRecentDocument +DEBUG 3/16/2026, 8:01:25 AM 39693 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/16/2026, 8:01:25 AM 39699 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/16/2026, 8:01:25 AM 39702 synced recovery +INFO 3/16/2026, 8:01:25 AM 39703 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:01:25 AM 39703 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:25 AM 39707 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md +DEBUG 3/16/2026, 8:01:25 AM 39750 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/guerineContributionLetudeComportement.md (0) +INFO 3/16/2026, 8:01:25 AM 39750 synced recovery +INFO 3/16/2026, 8:01:26 AM 40297 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md] +INFO 3/16/2026, 8:01:26 AM 40297 addRecentDocument +DEBUG 3/16/2026, 8:01:26 AM 40305 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md (0) +INFO 3/16/2026, 8:01:26 AM 40309 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/16/2026, 8:01:26 AM 40310 synced recovery +INFO 3/16/2026, 8:01:26 AM 40311 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:01:26 AM 40313 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:26 AM 40317 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md +DEBUG 3/16/2026, 8:01:26 AM 40344 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/grajaDatadrivenModelingStaged2025.md (0) +INFO 3/16/2026, 8:01:26 AM 40347 synced recovery +INFO 3/16/2026, 8:01:27 AM 41075 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md] +INFO 3/16/2026, 8:01:27 AM 41076 addRecentDocument +DEBUG 3/16/2026, 8:01:27 AM 41081 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/16/2026, 8:01:27 AM 41087 synced recovery +INFO 3/16/2026, 8:01:27 AM 41087 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/16/2026, 8:01:27 AM 41088 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:01:27 AM 41088 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:27 AM 41090 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md +DEBUG 3/16/2026, 8:01:27 AM 41182 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/16/2026, 8:01:27 AM 41182 synced recovery +INFO 3/16/2026, 8:01:28 AM 42668 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md] +INFO 3/16/2026, 8:01:28 AM 42669 addRecentDocument +DEBUG 3/16/2026, 8:01:28 AM 42680 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/16/2026, 8:01:28 AM 42687 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/16/2026, 8:01:28 AM 42688 synced recovery +INFO 3/16/2026, 8:01:28 AM 42689 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:01:28 AM 42689 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:28 AM 42691 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md +DEBUG 3/16/2026, 8:01:28 AM 42736 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/bahmaniConcreteMaterialVariability2026.md (0) +INFO 3/16/2026, 8:01:28 AM 42737 synced recovery +INFO 3/16/2026, 8:01:29 AM 43389 switchDocument 1 [/home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md] +INFO 3/16/2026, 8:01:29 AM 43389 addRecentDocument +DEBUG 3/16/2026, 8:01:29 AM 43399 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/16/2026, 8:01:29 AM 43405 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/16/2026, 8:01:29 AM 43405 lastSync 2026-03-16T07:01:27.084Z, timestamp 1773644487091, mtime 1773063545560.128 +INFO 3/16/2026, 8:01:29 AM 43406 synced recovery +INFO 3/16/2026, 8:01:29 AM 43406 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/16/2026, 8:01:29 AM 43407 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:29 AM 43409 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md +INFO 3/16/2026, 8:01:29 AM 43419 [RenderProcess 1][Log] do restoreEditStateFromData true true +INFO 3/16/2026, 8:01:29 AM 43419 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:29 AM 43420 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 0 at: -1 +DEBUG 3/16/2026, 8:01:29 AM 43421 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/16/2026, 8:01:29 AM 43421 [RenderProcess 1][Log] File.reloadContent, {"fromDiskChange":true,"onInit":true} +INFO 3/16/2026, 8:01:29 AM 43421 [RenderProcess 1][Log] reset NodeMap +INFO 3/16/2026, 8:01:29 AM 43422 synced recovery +DEBUG 3/16/2026, 8:01:30 AM 44426 added recovery 1 /home/afoucaultc/workspace/cesi/notes/zoteronotes/baiMachineLearningAssisted2021.md (0) +INFO 3/16/2026, 8:01:30 AM 44427 synced recovery +INFO 3/16/2026, 8:01:58 AM 72465 [blur] 1 +INFO 3/16/2026, 8:01:58 AM 72465 [win] blur +INFO 3/16/2026, 8:01:58 AM 72879 [focus] 1 +INFO 3/16/2026, 8:01:59 AM 73041 [blur] 1 +INFO 3/16/2026, 8:01:59 AM 73046 [win] blur +INFO 3/16/2026, 8:02:24 AM 98736 [focus] 1 +INFO 3/16/2026, 8:02:38 AM 112383 [blur] 1 +INFO 3/16/2026, 8:02:38 AM 112383 [win] blur +INFO 3/16/2026, 8:05:23 AM 277905 [focus] 1 +INFO 3/16/2026, 8:05:25 AM 279187 [blur] 1 +INFO 3/16/2026, 8:05:25 AM 279189 [win] blur +INFO 3/16/2026, 8:06:49 AM 363714 [focus] 1 +INFO 3/16/2026, 8:06:50 AM 364783 [blur] 1 +INFO 3/16/2026, 8:06:50 AM 364783 [win] blur +DEBUG 3/16/2026, 8:09:37 AM 531527 2nd 0.7542364332214955 +DEBUG 3/16/2026, 8:09:37 AM 531528 pure = false +INFO 3/16/2026, 8:09:37 AM 531529 renew +DEBUG 3/16/2026, 8:09:37 AM 531529 [renewLicense] license renewed in 12h +DEBUG 3/16/2026, 8:09:37 AM 531529 [L] pass +INFO 3/16/2026, 8:11:49 AM 663983 [focus] 1 +INFO 3/16/2026, 8:12:32 AM 706333 synced recovery +INFO 3/16/2026, 8:12:32 AM 706333 ----------------before-quit----------------- +INFO 3/16/2026, 8:12:32 AM 706333 ------------------will-quit------------------ +INFO 3/16/2026, 8:12:32 AM 706338 -----------------quit------------------ +INFO 3/16/2026, 8:12:32 AM 706338 closeLogging +INFO 3/18/2026, 2:03:38 PM 143 launch with argv [/usr/share/typora/Typora] +INFO 3/18/2026, 2:03:38 PM 528 ------------------start------------------ +DEBUG 3/18/2026, 2:03:39 PM 647 before setting +DEBUG 3/18/2026, 2:03:39 PM 874 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/18/2026, 2:03:39 PM 902 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/18/2026, 2:03:39 PM 937 OS is linux 6.19.8-arch1-1 +INFO 3/18/2026, 2:03:39 PM 937 start LM in devVersion=false +DEBUG 3/18/2026, 2:03:39 PM 965 after setting +INFO 3/18/2026, 2:03:39 PM 966 typora version: 1.12.4 +INFO 3/18/2026, 2:03:39 PM 1183 [watch L] +DEBUG 3/18/2026, 2:03:39 PM 1184 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/18/2026, 2:03:39 PM 1192 pure = undefined +INFO 3/18/2026, 2:03:39 PM 1192 renew +DEBUG 3/18/2026, 2:03:39 PM 1193 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 3/18/2026, 2:03:39 PM 1193 [L] pass +DEBUG 3/18/2026, 2:03:39 PM 1193 trailRemains is 0 +INFO 3/18/2026, 2:03:39 PM 1193 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/18/2026, 2:03:39 PM 1199 [watch L] hasL: true +user-dict.json not found +DEBUG 3/18/2026, 2:03:39 PM 1234 putAccelerator File -> &Fichier +DEBUG 3/18/2026, 2:03:39 PM 1236 putAccelerator Edit -> Édit&er +DEBUG 3/18/2026, 2:03:39 PM 1237 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/18/2026, 2:03:39 PM 1239 putAccelerator Format -> F&ormat +DEBUG 3/18/2026, 2:03:39 PM 1240 putAccelerator View -> Présentation(&V) +DEBUG 3/18/2026, 2:03:39 PM 1240 putAccelerator Themes -> &Thèmes +DEBUG 3/18/2026, 2:03:39 PM 1240 putAccelerator Help -> Aide(&H) +DEBUG 3/18/2026, 2:03:39 PM 1277 app.openFile +DEBUG 3/18/2026, 2:03:39 PM 1426 added recovery 1 null (0) +INFO 3/18/2026, 2:03:39 PM 1568 synced recovery +INFO 3/18/2026, 2:03:40 PM 2257 [focus] 1 +DEBUG 3/18/2026, 2:03:41 PM 2715 [renewLicense]: license renewed +INFO 3/18/2026, 2:03:41 PM 2715 ls put SLicense +INFO 3/18/2026, 2:03:41 PM 2759 [blur] 1 +INFO 3/18/2026, 2:03:41 PM 2759 [win] blur +INFO 3/18/2026, 2:03:41 PM 2760 [focus] 1 +INFO 3/18/2026, 2:03:41 PM 2972 [blur] 1 +INFO 3/18/2026, 2:03:41 PM 2973 [win] blur +INFO 3/18/2026, 2:03:41 PM 2973 [focus] 1 +ERROR 3/18/2026, 2:03:42 PM 4164 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/18/2026, 2:03:42 PM 4173 handle document.loadData +DEBUG 3/18/2026, 2:03:42 PM 4174 document.loadData 0 +ERROR 3/18/2026, 2:03:42 PM 4175 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/18/2026, 2:03:42 PM 4344 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/18/2026, 2:03:42 PM 4344 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/18/2026, 2:03:42 PM 4392 added recovery 1 (0) +INFO 3/18/2026, 2:03:42 PM 4398 synced recovery +INFO 3/18/2026, 2:03:43 PM 5002 [RenderProcess 1][Log] onBecomeActive +INFO 3/18/2026, 2:03:43 PM 5003 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/18/2026, 2:03:46 PM 7761 [blur] 1 +INFO 3/18/2026, 2:03:46 PM 7761 [win] blur +INFO 3/18/2026, 2:03:46 PM 8527 [focus] 1 +INFO 3/18/2026, 2:03:47 PM 8754 [blur] 1 +INFO 3/18/2026, 2:03:47 PM 8754 [win] blur +INFO 3/18/2026, 2:03:47 PM 8755 [focus] 1 +INFO 3/18/2026, 2:03:47 PM 8881 [blur] 1 +INFO 3/18/2026, 2:03:47 PM 8881 [win] blur +INFO 3/18/2026, 2:03:48 PM 10395 [focus] 1 +INFO 3/18/2026, 2:03:50 PM 11683 [blur] 1 +INFO 3/18/2026, 2:03:50 PM 11683 [win] blur +INFO 3/18/2026, 2:03:50 PM 11683 [focus] 1 +INFO 3/18/2026, 2:03:55 PM 17473 [blur] 1 +INFO 3/18/2026, 2:03:55 PM 17473 [win] blur +INFO 3/18/2026, 2:04:04 PM 26156 addRecentDocument +INFO 3/18/2026, 2:04:04 PM 26202 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/18/2026, 2:04:04 PM 26205 [RenderProcess 1][Log] reset NodeMap +INFO 3/18/2026, 2:04:04 PM 26232 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/code/versions/versions.md +INFO 3/18/2026, 2:04:04 PM 26233 [focus] 1 +DEBUG 3/18/2026, 2:04:04 PM 26469 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:04 PM 26551 synced recovery +DEBUG 3/18/2026, 2:04:12 PM 34414 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:12 PM 34417 synced recovery +DEBUG 3/18/2026, 2:04:18 PM 40303 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:18 PM 40304 synced recovery +DEBUG 3/18/2026, 2:04:21 PM 43119 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:21 PM 43121 synced recovery +DEBUG 3/18/2026, 2:04:22 PM 44154 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:22 PM 44156 synced recovery +DEBUG 3/18/2026, 2:04:24 PM 45758 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:24 PM 45759 synced recovery +DEBUG 3/18/2026, 2:04:25 PM 47123 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:25 PM 47125 synced recovery +DEBUG 3/18/2026, 2:04:32 PM 53966 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:32 PM 53970 synced recovery +DEBUG 3/18/2026, 2:04:33 PM 55076 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:33 PM 55077 synced recovery +DEBUG 3/18/2026, 2:04:36 PM 57857 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:36 PM 57859 synced recovery +DEBUG 3/18/2026, 2:04:37 PM 59552 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:37 PM 59553 synced recovery +DEBUG 3/18/2026, 2:04:39 PM 60708 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:39 PM 60710 synced recovery +DEBUG 3/18/2026, 2:04:43 PM 64875 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:43 PM 64876 synced recovery +DEBUG 3/18/2026, 2:04:44 PM 65962 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:44 PM 65963 synced recovery +DEBUG 3/18/2026, 2:04:48 PM 70295 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:48 PM 70296 synced recovery +DEBUG 3/18/2026, 2:04:49 PM 71452 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:49 PM 71454 synced recovery +DEBUG 3/18/2026, 2:04:50 PM 72593 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:50 PM 72594 synced recovery +DEBUG 3/18/2026, 2:04:52 PM 74185 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:52 PM 74186 synced recovery +DEBUG 3/18/2026, 2:04:53 PM 75337 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:53 PM 75338 synced recovery +DEBUG 3/18/2026, 2:04:54 PM 76413 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:54 PM 76415 synced recovery +DEBUG 3/18/2026, 2:04:55 PM 77559 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:55 PM 77561 synced recovery +DEBUG 3/18/2026, 2:04:57 PM 78728 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:04:57 PM 78730 synced recovery +INFO 3/18/2026, 2:04:58 PM 79762 [blur] 1 +INFO 3/18/2026, 2:04:58 PM 79762 [win] blur +INFO 3/18/2026, 2:06:12 PM 154220 [focus] 1 +INFO 3/18/2026, 2:06:15 PM 156877 switchDocument 1 [/home/afoucaultc/workspace/cesi/code/versions/3.2/README.md] +INFO 3/18/2026, 2:06:15 PM 156877 addRecentDocument +DEBUG 3/18/2026, 2:06:15 PM 156911 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/3.2/README.md (0) +INFO 3/18/2026, 2:06:15 PM 156924 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/18/2026, 2:06:15 PM 156928 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/18/2026, 2:06:15 PM 156929 [RenderProcess 1][Log] reset NodeMap +INFO 3/18/2026, 2:06:15 PM 156930 synced recovery +INFO 3/18/2026, 2:06:15 PM 156966 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/code/versions/3.2/README.md +DEBUG 3/18/2026, 2:06:15 PM 157539 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/3.2/README.md (0) +INFO 3/18/2026, 2:06:15 PM 157547 synced recovery +DEBUG 3/18/2026, 2:06:21 PM 162673 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/3.2/README.md (0) +INFO 3/18/2026, 2:06:21 PM 162675 synced recovery +INFO 3/18/2026, 2:06:37 PM 179514 switchDocument 1 [/home/afoucaultc/workspace/cesi/code/versions/versions.md] +INFO 3/18/2026, 2:06:37 PM 179514 addRecentDocument +DEBUG 3/18/2026, 2:06:37 PM 179525 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:06:37 PM 179528 synced recovery +INFO 3/18/2026, 2:06:37 PM 179535 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/18/2026, 2:06:37 PM 179536 lastSync 1773839097041.6406, timestamp 1773839096009, mtime 1773839097041.6406 +INFO 3/18/2026, 2:06:37 PM 179540 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/18/2026, 2:06:37 PM 179540 [RenderProcess 1][Log] reset NodeMap +INFO 3/18/2026, 2:06:37 PM 179547 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/code/versions/versions.md +INFO 3/18/2026, 2:06:37 PM 179562 [RenderProcess 1][Log] do restoreEditStateFromData true false +INFO 3/18/2026, 2:06:37 PM 179563 [RenderProcess 1][Log] reset NodeMap +INFO 3/18/2026, 2:06:37 PM 179571 [RenderProcess 1][Log] [UndoManager] restoreFromJson all: 32 at: 31 +DEBUG 3/18/2026, 2:06:37 PM 179588 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:06:37 PM 179589 synced recovery +DEBUG 3/18/2026, 2:06:41 PM 183529 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:06:41 PM 183530 synced recovery +DEBUG 3/18/2026, 2:06:43 PM 184610 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:06:43 PM 184612 synced recovery +DEBUG 3/18/2026, 2:06:44 PM 186299 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:06:44 PM 186300 synced recovery +DEBUG 3/18/2026, 2:06:46 PM 188166 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:06:46 PM 188167 synced recovery +DEBUG 3/18/2026, 2:06:47 PM 189233 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:06:47 PM 189235 synced recovery +DEBUG 3/18/2026, 2:06:48 PM 190339 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:06:48 PM 190340 synced recovery +DEBUG 3/18/2026, 2:06:50 PM 191620 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:06:50 PM 191621 synced recovery +DEBUG 3/18/2026, 2:06:52 PM 194572 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:06:52 PM 194573 synced recovery +DEBUG 3/18/2026, 2:06:58 PM 200027 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:06:58 PM 200028 synced recovery +DEBUG 3/18/2026, 2:06:59 PM 201122 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:06:59 PM 201123 synced recovery +DEBUG 3/18/2026, 2:07:00 PM 202422 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:07:00 PM 202424 synced recovery +DEBUG 3/18/2026, 2:07:02 PM 203627 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:07:02 PM 203629 synced recovery +DEBUG 3/18/2026, 2:07:04 PM 205726 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:07:04 PM 205728 synced recovery +DEBUG 3/18/2026, 2:07:06 PM 208137 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:07:06 PM 208138 synced recovery +DEBUG 3/18/2026, 2:07:07 PM 209292 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:07:07 PM 209295 synced recovery +DEBUG 3/18/2026, 2:07:13 PM 215259 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:07:13 PM 215261 synced recovery +DEBUG 3/18/2026, 2:07:16 PM 218010 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:07:16 PM 218012 synced recovery +DEBUG 3/18/2026, 2:07:18 PM 220264 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:07:18 PM 220266 synced recovery +DEBUG 3/18/2026, 2:07:23 PM 224722 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:07:23 PM 224725 synced recovery +DEBUG 3/18/2026, 2:07:25 PM 226812 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:07:25 PM 226813 synced recovery +DEBUG 3/18/2026, 2:07:28 PM 229919 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:07:28 PM 229921 synced recovery +DEBUG 3/18/2026, 2:07:30 PM 231912 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:07:30 PM 231913 synced recovery +DEBUG 3/18/2026, 2:07:31 PM 233265 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:07:31 PM 233267 synced recovery +DEBUG 3/18/2026, 2:07:33 PM 235229 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:07:33 PM 235230 synced recovery +DEBUG 3/18/2026, 2:07:34 PM 236416 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:07:34 PM 236422 synced recovery +DEBUG 3/18/2026, 2:07:35 PM 237461 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/versions.md (0) +INFO 3/18/2026, 2:07:35 PM 237463 synced recovery +INFO 3/18/2026, 2:07:37 PM 239156 [blur] 1 +INFO 3/18/2026, 2:07:37 PM 239156 [win] blur +INFO 3/18/2026, 2:07:37 PM 239452 [focus] 1 +INFO 3/18/2026, 2:07:40 PM 241723 switchDocument 1 [/home/afoucaultc/workspace/cesi/code/versions/4.0/README.md] +INFO 3/18/2026, 2:07:40 PM 241724 addRecentDocument +DEBUG 3/18/2026, 2:07:40 PM 241733 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:07:40 PM 241740 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/18/2026, 2:07:40 PM 241741 synced recovery +INFO 3/18/2026, 2:07:40 PM 241743 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/18/2026, 2:07:40 PM 241743 [RenderProcess 1][Log] reset NodeMap +INFO 3/18/2026, 2:07:40 PM 241764 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md +DEBUG 3/18/2026, 2:07:40 PM 241881 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:07:40 PM 241883 synced recovery +DEBUG 3/18/2026, 2:07:48 PM 250380 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:07:48 PM 250381 synced recovery +INFO 3/18/2026, 2:07:48 PM 250425 [blur] 1 +INFO 3/18/2026, 2:07:48 PM 250425 [win] blur +INFO 3/18/2026, 2:08:32 PM 294041 [focus] 1 +DEBUG 3/18/2026, 2:08:37 PM 298779 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:08:37 PM 298781 synced recovery +DEBUG 3/18/2026, 2:08:38 PM 299940 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:08:38 PM 299941 synced recovery +DEBUG 3/18/2026, 2:08:40 PM 302555 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:08:40 PM 302556 synced recovery +DEBUG 3/18/2026, 2:08:42 PM 303858 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:08:42 PM 303859 synced recovery +DEBUG 3/18/2026, 2:08:43 PM 304959 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:08:43 PM 304960 synced recovery +INFO 3/18/2026, 2:08:44 PM 305799 [blur] 1 +INFO 3/18/2026, 2:08:44 PM 305800 [win] blur +INFO 3/18/2026, 2:09:29 PM 351267 [focus] 1 +DEBUG 3/18/2026, 2:09:36 PM 357972 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:09:36 PM 357973 synced recovery +DEBUG 3/18/2026, 2:09:38 PM 359800 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:09:38 PM 359801 synced recovery +DEBUG 3/18/2026, 2:09:41 PM 363259 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:09:41 PM 363261 synced recovery +DEBUG 3/18/2026, 2:09:44 PM 366416 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:09:44 PM 366417 synced recovery +DEBUG 3/18/2026, 2:09:47 PM 369211 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:09:47 PM 369213 synced recovery +DEBUG 3/18/2026, 2:09:51 PM 372637 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:09:51 PM 372639 synced recovery +DEBUG 3/18/2026, 2:09:53 PM 375213 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:09:53 PM 375214 synced recovery +DEBUG 3/18/2026, 2:09:55 PM 377218 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:09:55 PM 377219 synced recovery +DEBUG 3/18/2026, 2:10:01 PM 382989 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:10:01 PM 382992 synced recovery +DEBUG 3/18/2026, 2:10:06 PM 388282 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:10:06 PM 388284 synced recovery +DEBUG 3/18/2026, 2:10:11 PM 392733 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:10:11 PM 392734 synced recovery +DEBUG 3/18/2026, 2:10:16 PM 397946 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:10:16 PM 397947 synced recovery +DEBUG 3/18/2026, 2:10:19 PM 400699 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:10:19 PM 400700 synced recovery +DEBUG 3/18/2026, 2:10:21 PM 402946 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:10:21 PM 402948 synced recovery +DEBUG 3/18/2026, 2:10:24 PM 406027 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:10:24 PM 406028 synced recovery +DEBUG 3/18/2026, 2:10:28 PM 410505 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:10:28 PM 410506 synced recovery +DEBUG 3/18/2026, 2:10:32 PM 413772 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:10:32 PM 413774 synced recovery +DEBUG 3/18/2026, 2:10:36 PM 417722 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:10:36 PM 417723 synced recovery +DEBUG 3/18/2026, 2:10:39 PM 421556 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:10:39 PM 421557 synced recovery +DEBUG 3/18/2026, 2:10:42 PM 423850 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:10:42 PM 423868 synced recovery +DEBUG 3/18/2026, 2:10:46 PM 428056 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:10:46 PM 428057 synced recovery +DEBUG 3/18/2026, 2:10:48 PM 430147 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:10:48 PM 430149 synced recovery +DEBUG 3/18/2026, 2:10:50 PM 431759 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:10:50 PM 431761 synced recovery +DEBUG 3/18/2026, 2:10:51 PM 433195 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:10:51 PM 433196 synced recovery +DEBUG 3/18/2026, 2:10:54 PM 436299 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:10:54 PM 436300 synced recovery +DEBUG 3/18/2026, 2:11:00 PM 441818 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:11:00 PM 441820 synced recovery +DEBUG 3/18/2026, 2:11:03 PM 445526 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:11:03 PM 445527 synced recovery +DEBUG 3/18/2026, 2:11:07 PM 449152 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:11:07 PM 449154 synced recovery +DEBUG 3/18/2026, 2:11:17 PM 458750 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:11:17 PM 458752 synced recovery +DEBUG 3/18/2026, 2:11:20 PM 461635 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:11:20 PM 461637 synced recovery +DEBUG 3/18/2026, 2:11:24 PM 466228 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:11:24 PM 466230 synced recovery +DEBUG 3/18/2026, 2:11:25 PM 467590 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:11:25 PM 467591 synced recovery +INFO 3/18/2026, 2:11:30 PM 471915 [blur] 1 +INFO 3/18/2026, 2:11:30 PM 471915 [win] blur +INFO 3/18/2026, 2:11:35 PM 476972 [focus] 1 +DEBUG 3/18/2026, 2:11:38 PM 479732 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:11:38 PM 479734 synced recovery +DEBUG 3/18/2026, 2:11:39 PM 481371 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:11:39 PM 481372 synced recovery +DEBUG 3/18/2026, 2:11:43 PM 484611 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:11:43 PM 484612 synced recovery +DEBUG 3/18/2026, 2:11:49 PM 490985 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:11:49 PM 490986 synced recovery +DEBUG 3/18/2026, 2:11:53 PM 494878 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:11:53 PM 494879 synced recovery +DEBUG 3/18/2026, 2:11:54 PM 496312 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:11:54 PM 496313 synced recovery +DEBUG 3/18/2026, 2:11:58 PM 499625 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:11:58 PM 499626 synced recovery +DEBUG 3/18/2026, 2:12:00 PM 502226 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:12:00 PM 502227 synced recovery +DEBUG 3/18/2026, 2:12:02 PM 504506 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:12:02 PM 504507 synced recovery +DEBUG 3/18/2026, 2:12:07 PM 508746 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:12:07 PM 508748 synced recovery +DEBUG 3/18/2026, 2:12:30 PM 531691 2nd 0.6289940100599924 +DEBUG 3/18/2026, 2:12:30 PM 531692 pure = false +INFO 3/18/2026, 2:12:30 PM 531692 renew +DEBUG 3/18/2026, 2:12:30 PM 531692 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 3/18/2026, 2:12:30 PM 531693 [L] pass +DEBUG 3/18/2026, 2:12:30 PM 532478 [renewLicense]: license renewed +INFO 3/18/2026, 2:12:30 PM 532478 ls put SLicense +DEBUG 3/18/2026, 2:16:05 PM 747529 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:16:05 PM 747531 synced recovery +DEBUG 3/18/2026, 2:16:13 PM 755403 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:16:13 PM 755405 synced recovery +DEBUG 3/18/2026, 2:16:17 PM 758635 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:16:17 PM 758636 synced recovery +DEBUG 3/18/2026, 2:16:19 PM 760821 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:16:19 PM 760823 synced recovery +DEBUG 3/18/2026, 2:16:21 PM 762656 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:16:21 PM 762658 synced recovery +DEBUG 3/18/2026, 2:16:28 PM 770571 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:16:28 PM 770572 synced recovery +DEBUG 3/18/2026, 2:16:35 PM 777288 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:16:35 PM 777290 synced recovery +DEBUG 3/18/2026, 2:16:39 PM 781434 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:16:39 PM 781436 synced recovery +DEBUG 3/18/2026, 2:16:44 PM 785943 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:16:44 PM 785945 synced recovery +DEBUG 3/18/2026, 2:16:51 PM 792746 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:16:51 PM 792748 synced recovery +DEBUG 3/18/2026, 2:16:52 PM 794397 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:16:52 PM 794398 synced recovery +DEBUG 3/18/2026, 2:16:55 PM 796682 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:16:55 PM 796683 synced recovery +DEBUG 3/18/2026, 2:16:56 PM 798602 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:16:56 PM 798604 synced recovery +DEBUG 3/18/2026, 2:16:58 PM 799858 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:16:58 PM 799859 synced recovery +DEBUG 3/18/2026, 2:17:23 PM 825167 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:17:23 PM 825168 synced recovery +DEBUG 3/18/2026, 2:17:25 PM 827054 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:17:25 PM 827055 synced recovery +DEBUG 3/18/2026, 2:17:27 PM 828832 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:17:27 PM 828834 synced recovery +DEBUG 3/18/2026, 2:17:31 PM 833139 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:17:31 PM 833140 synced recovery +DEBUG 3/18/2026, 2:17:33 PM 835184 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:17:33 PM 835185 synced recovery +DEBUG 3/18/2026, 2:17:37 PM 839116 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:17:37 PM 839117 synced recovery +DEBUG 3/18/2026, 2:17:39 PM 841573 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:17:39 PM 841574 synced recovery +DEBUG 3/18/2026, 2:17:45 PM 847249 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:17:45 PM 847251 synced recovery +DEBUG 3/18/2026, 2:17:46 PM 848480 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:17:46 PM 848481 synced recovery +DEBUG 3/18/2026, 2:17:48 PM 849621 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:17:48 PM 849623 synced recovery +DEBUG 3/18/2026, 2:17:53 PM 854733 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:17:53 PM 854735 synced recovery +DEBUG 3/18/2026, 2:17:56 PM 858097 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:17:56 PM 858099 synced recovery +DEBUG 3/18/2026, 2:17:59 PM 860991 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:17:59 PM 860993 synced recovery +DEBUG 3/18/2026, 2:18:02 PM 864460 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:02 PM 864462 synced recovery +DEBUG 3/18/2026, 2:18:05 PM 866769 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:05 PM 866770 synced recovery +DEBUG 3/18/2026, 2:18:08 PM 870355 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:08 PM 870357 synced recovery +DEBUG 3/18/2026, 2:18:12 PM 873623 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:12 PM 873625 synced recovery +DEBUG 3/18/2026, 2:18:13 PM 875521 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:13 PM 875523 synced recovery +DEBUG 3/18/2026, 2:18:17 PM 879118 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:17 PM 879120 synced recovery +DEBUG 3/18/2026, 2:18:19 PM 880911 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:19 PM 880913 synced recovery +DEBUG 3/18/2026, 2:18:20 PM 882055 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:20 PM 882057 synced recovery +DEBUG 3/18/2026, 2:18:23 PM 884678 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:23 PM 884680 synced recovery +DEBUG 3/18/2026, 2:18:27 PM 889545 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:27 PM 889546 synced recovery +DEBUG 3/18/2026, 2:18:30 PM 891903 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:30 PM 891905 synced recovery +DEBUG 3/18/2026, 2:18:33 PM 894714 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:33 PM 894716 synced recovery +DEBUG 3/18/2026, 2:18:37 PM 898992 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:37 PM 898993 synced recovery +DEBUG 3/18/2026, 2:18:41 PM 903398 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:41 PM 903399 synced recovery +DEBUG 3/18/2026, 2:18:45 PM 907293 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:45 PM 907294 synced recovery +DEBUG 3/18/2026, 2:18:47 PM 908813 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:47 PM 908815 synced recovery +DEBUG 3/18/2026, 2:18:54 PM 915679 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:54 PM 915681 synced recovery +DEBUG 3/18/2026, 2:18:58 PM 919823 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:18:58 PM 919824 synced recovery +DEBUG 3/18/2026, 2:19:00 PM 921774 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:00 PM 921775 synced recovery +DEBUG 3/18/2026, 2:19:02 PM 924220 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:02 PM 924221 synced recovery +DEBUG 3/18/2026, 2:19:04 PM 926269 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:04 PM 926270 synced recovery +DEBUG 3/18/2026, 2:19:06 PM 927629 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:06 PM 927630 synced recovery +DEBUG 3/18/2026, 2:19:08 PM 929922 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:08 PM 929924 synced recovery +INFO 3/18/2026, 2:19:08 PM 930150 [blur] 1 +INFO 3/18/2026, 2:19:08 PM 930151 [win] blur +INFO 3/18/2026, 2:19:11 PM 933337 [focus] 1 +DEBUG 3/18/2026, 2:19:13 PM 935421 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:13 PM 935422 synced recovery +DEBUG 3/18/2026, 2:19:15 PM 937031 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:15 PM 937032 synced recovery +DEBUG 3/18/2026, 2:19:17 PM 939545 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:17 PM 939546 synced recovery +DEBUG 3/18/2026, 2:19:21 PM 943451 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:21 PM 943452 synced recovery +DEBUG 3/18/2026, 2:19:26 PM 948054 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:26 PM 948055 synced recovery +DEBUG 3/18/2026, 2:19:29 PM 950815 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:29 PM 950816 synced recovery +DEBUG 3/18/2026, 2:19:35 PM 957086 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:35 PM 957087 synced recovery +DEBUG 3/18/2026, 2:19:41 PM 962692 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:41 PM 962693 synced recovery +DEBUG 3/18/2026, 2:19:46 PM 967990 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:46 PM 967992 synced recovery +DEBUG 3/18/2026, 2:19:49 PM 970801 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:49 PM 970803 synced recovery +DEBUG 3/18/2026, 2:19:52 PM 974219 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:52 PM 974221 synced recovery +DEBUG 3/18/2026, 2:19:54 PM 976317 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:54 PM 976319 synced recovery +DEBUG 3/18/2026, 2:19:56 PM 977780 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:56 PM 977782 synced recovery +DEBUG 3/18/2026, 2:19:59 PM 981322 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:19:59 PM 981323 synced recovery +DEBUG 3/18/2026, 2:20:01 PM 983104 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:20:01 PM 983111 synced recovery +DEBUG 3/18/2026, 2:20:05 PM 987001 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:20:05 PM 987003 synced recovery +DEBUG 3/18/2026, 2:20:09 PM 991189 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:20:09 PM 991190 synced recovery +DEBUG 3/18/2026, 2:20:10 PM 992495 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:20:10 PM 992497 synced recovery +DEBUG 3/18/2026, 2:20:13 PM 995165 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:20:13 PM 995166 synced recovery +DEBUG 3/18/2026, 2:20:16 PM 998398 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:20:16 PM 998399 synced recovery +DEBUG 3/18/2026, 2:20:18 PM 999896 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:20:18 PM 999897 synced recovery +DEBUG 3/18/2026, 2:20:24 PM 1005998 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:20:24 PM 1005999 synced recovery +DEBUG 3/18/2026, 2:20:26 PM 1008296 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:20:26 PM 1008297 synced recovery +DEBUG 3/18/2026, 2:20:33 PM 1014834 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:20:33 PM 1014835 synced recovery +DEBUG 3/18/2026, 2:20:46 PM 1028090 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:20:46 PM 1028092 synced recovery +DEBUG 3/18/2026, 2:20:49 PM 1031211 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:20:49 PM 1031212 synced recovery +DEBUG 3/18/2026, 2:20:51 PM 1033492 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:20:51 PM 1033493 synced recovery +DEBUG 3/18/2026, 2:20:55 PM 1036730 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:20:55 PM 1036731 synced recovery +DEBUG 3/18/2026, 2:21:00 PM 1042244 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:21:00 PM 1042246 synced recovery +DEBUG 3/18/2026, 2:21:05 PM 1046809 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:21:05 PM 1046810 synced recovery +DEBUG 3/18/2026, 2:21:12 PM 1054024 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:21:12 PM 1054025 synced recovery +DEBUG 3/18/2026, 2:21:16 PM 1058062 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:21:16 PM 1058063 synced recovery +DEBUG 3/18/2026, 2:21:20 PM 1062285 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:21:20 PM 1062287 synced recovery +DEBUG 3/18/2026, 2:21:24 PM 1066470 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:21:24 PM 1066474 synced recovery +DEBUG 3/18/2026, 2:21:32 PM 1074418 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:21:32 PM 1074419 synced recovery +DEBUG 3/18/2026, 2:21:41 PM 1083443 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:21:41 PM 1083445 synced recovery +DEBUG 3/18/2026, 2:21:46 PM 1087899 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:21:46 PM 1087900 synced recovery +DEBUG 3/18/2026, 2:21:49 PM 1090809 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:21:49 PM 1090811 synced recovery +DEBUG 3/18/2026, 2:23:09 PM 1171202 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:09 PM 1171203 synced recovery +DEBUG 3/18/2026, 2:23:13 PM 1175460 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:13 PM 1175461 synced recovery +DEBUG 3/18/2026, 2:23:17 PM 1179183 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:17 PM 1179185 synced recovery +DEBUG 3/18/2026, 2:23:20 PM 1182065 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:20 PM 1182067 synced recovery +DEBUG 3/18/2026, 2:23:22 PM 1184084 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:22 PM 1184086 synced recovery +DEBUG 3/18/2026, 2:23:26 PM 1188554 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:26 PM 1188555 synced recovery +DEBUG 3/18/2026, 2:23:29 PM 1190730 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:29 PM 1190732 synced recovery +DEBUG 3/18/2026, 2:23:33 PM 1194819 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:33 PM 1194822 synced recovery +DEBUG 3/18/2026, 2:23:37 PM 1198754 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:37 PM 1198756 synced recovery +DEBUG 3/18/2026, 2:23:39 PM 1201081 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:39 PM 1201082 synced recovery +DEBUG 3/18/2026, 2:23:41 PM 1202717 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:41 PM 1202718 synced recovery +DEBUG 3/18/2026, 2:23:43 PM 1204843 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:43 PM 1204845 synced recovery +DEBUG 3/18/2026, 2:23:46 PM 1208013 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:46 PM 1208014 synced recovery +DEBUG 3/18/2026, 2:23:48 PM 1209802 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:48 PM 1209803 synced recovery +DEBUG 3/18/2026, 2:23:51 PM 1212809 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:51 PM 1212810 synced recovery +DEBUG 3/18/2026, 2:23:53 PM 1215078 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:53 PM 1215080 synced recovery +DEBUG 3/18/2026, 2:23:56 PM 1217857 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:56 PM 1217858 synced recovery +DEBUG 3/18/2026, 2:23:58 PM 1220543 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:23:58 PM 1220544 synced recovery +DEBUG 3/18/2026, 2:24:01 PM 1222652 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:24:01 PM 1222654 synced recovery +DEBUG 3/18/2026, 2:24:05 PM 1227449 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:24:05 PM 1227450 synced recovery +DEBUG 3/18/2026, 2:24:20 PM 1241790 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:24:20 PM 1241792 synced recovery +INFO 3/18/2026, 2:24:25 PM 1246688 [blur] 1 +INFO 3/18/2026, 2:24:25 PM 1246688 [win] blur +INFO 3/18/2026, 2:24:32 PM 1254208 [focus] 1 +DEBUG 3/18/2026, 2:24:39 PM 1260743 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:24:39 PM 1260757 synced recovery +DEBUG 3/18/2026, 2:24:41 PM 1263039 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:24:41 PM 1263040 synced recovery +DEBUG 3/18/2026, 2:24:43 PM 1265176 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:24:43 PM 1265178 synced recovery +DEBUG 3/18/2026, 2:24:45 PM 1267180 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:24:45 PM 1267181 synced recovery +DEBUG 3/18/2026, 2:24:50 PM 1272410 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:24:50 PM 1272411 synced recovery +DEBUG 3/18/2026, 2:24:57 PM 1279378 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:24:57 PM 1279379 synced recovery +DEBUG 3/18/2026, 2:24:59 PM 1281600 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:24:59 PM 1281601 synced recovery +DEBUG 3/18/2026, 2:25:01 PM 1283309 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:01 PM 1283310 synced recovery +DEBUG 3/18/2026, 2:25:09 PM 1291597 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:09 PM 1291598 synced recovery +DEBUG 3/18/2026, 2:25:11 PM 1293491 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:11 PM 1293492 synced recovery +DEBUG 3/18/2026, 2:25:13 PM 1294659 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:13 PM 1294660 synced recovery +DEBUG 3/18/2026, 2:25:15 PM 1297113 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:15 PM 1297114 synced recovery +DEBUG 3/18/2026, 2:25:19 PM 1300774 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:19 PM 1300775 synced recovery +DEBUG 3/18/2026, 2:25:20 PM 1301863 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:20 PM 1301864 synced recovery +DEBUG 3/18/2026, 2:25:22 PM 1303735 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:22 PM 1303738 synced recovery +DEBUG 3/18/2026, 2:25:25 PM 1306757 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:25 PM 1306758 synced recovery +DEBUG 3/18/2026, 2:25:26 PM 1308409 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:26 PM 1308411 synced recovery +DEBUG 3/18/2026, 2:25:29 PM 1310748 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:29 PM 1310750 synced recovery +DEBUG 3/18/2026, 2:25:31 PM 1313324 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:31 PM 1313326 synced recovery +DEBUG 3/18/2026, 2:25:33 PM 1314852 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:33 PM 1314853 synced recovery +DEBUG 3/18/2026, 2:25:35 PM 1316782 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:35 PM 1316783 synced recovery +DEBUG 3/18/2026, 2:25:37 PM 1318915 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:37 PM 1318918 synced recovery +DEBUG 3/18/2026, 2:25:42 PM 1323669 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:42 PM 1323670 synced recovery +DEBUG 3/18/2026, 2:25:43 PM 1325278 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:43 PM 1325282 synced recovery +DEBUG 3/18/2026, 2:25:48 PM 1329667 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:25:48 PM 1329672 synced recovery +INFO 3/18/2026, 2:25:49 PM 1331052 [blur] 1 +INFO 3/18/2026, 2:25:49 PM 1331054 [win] blur +INFO 3/18/2026, 2:26:19 PM 1361017 [focus] 1 +INFO 3/18/2026, 2:26:19 PM 1361067 [blur] 1 +INFO 3/18/2026, 2:26:19 PM 1361067 [win] blur +INFO 3/18/2026, 2:26:55 PM 1396762 [focus] 1 +DEBUG 3/18/2026, 2:26:58 PM 1400527 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:26:58 PM 1400559 synced recovery +DEBUG 3/18/2026, 2:27:03 PM 1405599 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:03 PM 1405601 synced recovery +DEBUG 3/18/2026, 2:27:09 PM 1410677 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:09 PM 1410678 synced recovery +DEBUG 3/18/2026, 2:27:10 PM 1412400 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:10 PM 1412401 synced recovery +DEBUG 3/18/2026, 2:27:12 PM 1413706 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:12 PM 1413707 synced recovery +DEBUG 3/18/2026, 2:27:14 PM 1415943 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:14 PM 1415945 synced recovery +DEBUG 3/18/2026, 2:27:17 PM 1419333 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:17 PM 1419335 synced recovery +DEBUG 3/18/2026, 2:27:19 PM 1421191 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:19 PM 1421193 synced recovery +DEBUG 3/18/2026, 2:27:21 PM 1423274 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:21 PM 1423276 synced recovery +DEBUG 3/18/2026, 2:27:24 PM 1426076 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:24 PM 1426077 synced recovery +INFO 3/18/2026, 2:27:25 PM 1426795 [blur] 1 +INFO 3/18/2026, 2:27:25 PM 1426796 [win] blur +INFO 3/18/2026, 2:27:30 PM 1432216 [focus] 1 +DEBUG 3/18/2026, 2:27:35 PM 1437090 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:35 PM 1437092 synced recovery +DEBUG 3/18/2026, 2:27:36 PM 1438375 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:36 PM 1438377 synced recovery +DEBUG 3/18/2026, 2:27:41 PM 1443486 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:41 PM 1443487 synced recovery +DEBUG 3/18/2026, 2:27:43 PM 1445604 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:44 PM 1445610 synced recovery +DEBUG 3/18/2026, 2:27:46 PM 1448340 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:46 PM 1448342 synced recovery +DEBUG 3/18/2026, 2:27:48 PM 1450163 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:48 PM 1450164 synced recovery +DEBUG 3/18/2026, 2:27:50 PM 1452312 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:50 PM 1452314 synced recovery +DEBUG 3/18/2026, 2:27:54 PM 1456571 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:54 PM 1456572 synced recovery +DEBUG 3/18/2026, 2:27:58 PM 1459661 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:58 PM 1459662 synced recovery +DEBUG 3/18/2026, 2:27:59 PM 1461522 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:27:59 PM 1461524 synced recovery +DEBUG 3/18/2026, 2:28:06 PM 1468145 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:28:06 PM 1468146 synced recovery +DEBUG 3/18/2026, 2:28:09 PM 1470627 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:28:09 PM 1470629 synced recovery +DEBUG 3/18/2026, 2:28:11 PM 1473086 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:28:11 PM 1473087 synced recovery +DEBUG 3/18/2026, 2:28:16 PM 1477735 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:28:16 PM 1477743 synced recovery +DEBUG 3/18/2026, 2:28:19 PM 1480876 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:28:19 PM 1480877 synced recovery +DEBUG 3/18/2026, 2:28:29 PM 1490860 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:28:29 PM 1490861 synced recovery +DEBUG 3/18/2026, 2:28:32 PM 1494256 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:28:32 PM 1494259 synced recovery +DEBUG 3/18/2026, 2:28:33 PM 1495334 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:28:33 PM 1495338 synced recovery +DEBUG 3/18/2026, 2:28:37 PM 1498635 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:28:37 PM 1498636 synced recovery +DEBUG 3/18/2026, 2:28:39 PM 1501606 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:28:40 PM 1501610 synced recovery +DEBUG 3/18/2026, 2:28:52 PM 1514147 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:28:52 PM 1514149 synced recovery +DEBUG 3/18/2026, 2:28:56 PM 1518115 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:28:56 PM 1518116 synced recovery +DEBUG 3/18/2026, 2:29:00 PM 1521662 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:29:00 PM 1521663 synced recovery +DEBUG 3/18/2026, 2:29:02 PM 1524377 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:29:02 PM 1524378 synced recovery +DEBUG 3/18/2026, 2:29:04 PM 1525774 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:29:04 PM 1525782 synced recovery +DEBUG 3/18/2026, 2:29:06 PM 1528068 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:29:06 PM 1528069 synced recovery +DEBUG 3/18/2026, 2:29:07 PM 1529492 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:29:07 PM 1529493 synced recovery +DEBUG 3/18/2026, 2:29:10 PM 1532321 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:29:10 PM 1532322 synced recovery +DEBUG 3/18/2026, 2:29:13 PM 1534775 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:29:13 PM 1534777 synced recovery +DEBUG 3/18/2026, 2:29:15 PM 1537162 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:29:15 PM 1537163 synced recovery +DEBUG 3/18/2026, 2:29:17 PM 1539315 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:29:17 PM 1539316 synced recovery +DEBUG 3/18/2026, 2:29:20 PM 1542531 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:29:20 PM 1542533 synced recovery +INFO 3/18/2026, 2:29:29 PM 1550976 [blur] 1 +INFO 3/18/2026, 2:29:29 PM 1550976 [win] blur +INFO 3/18/2026, 2:29:38 PM 1560470 [focus] 1 +DEBUG 3/18/2026, 2:29:42 PM 1563614 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:29:42 PM 1563615 synced recovery +DEBUG 3/18/2026, 2:29:43 PM 1565107 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:29:43 PM 1565109 synced recovery +DEBUG 3/18/2026, 2:29:44 PM 1566274 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:29:44 PM 1566275 synced recovery +DEBUG 3/18/2026, 2:29:48 PM 1569928 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:29:48 PM 1569930 synced recovery +DEBUG 3/18/2026, 2:30:13 PM 1595315 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:30:13 PM 1595317 synced recovery +DEBUG 3/18/2026, 2:30:15 PM 1596695 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:30:15 PM 1596697 synced recovery +DEBUG 3/18/2026, 2:30:16 PM 1598178 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:30:16 PM 1598179 synced recovery +DEBUG 3/18/2026, 2:30:19 PM 1601442 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:30:19 PM 1601443 synced recovery +DEBUG 3/18/2026, 2:30:21 PM 1603339 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:30:21 PM 1603340 synced recovery +DEBUG 3/18/2026, 2:30:30 PM 1611673 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:30:30 PM 1611675 synced recovery +DEBUG 3/18/2026, 2:30:31 PM 1612934 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:30:31 PM 1612936 synced recovery +DEBUG 3/18/2026, 2:30:33 PM 1614753 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:30:33 PM 1614755 synced recovery +DEBUG 3/18/2026, 2:30:36 PM 1618287 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:30:36 PM 1618289 synced recovery +DEBUG 3/18/2026, 2:30:40 PM 1622027 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:30:40 PM 1622028 synced recovery +DEBUG 3/18/2026, 2:30:44 PM 1625819 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:30:44 PM 1625821 synced recovery +DEBUG 3/18/2026, 2:30:45 PM 1627460 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:30:45 PM 1627461 synced recovery +DEBUG 3/18/2026, 2:30:50 PM 1631918 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:30:50 PM 1631919 synced recovery +DEBUG 3/18/2026, 2:30:55 PM 1637236 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:30:55 PM 1637237 synced recovery +DEBUG 3/18/2026, 2:30:57 PM 1638997 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:30:57 PM 1638998 synced recovery +DEBUG 3/18/2026, 2:31:01 PM 1643553 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:31:01 PM 1643555 synced recovery +DEBUG 3/18/2026, 2:31:05 PM 1647016 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:31:05 PM 1647017 synced recovery +DEBUG 3/18/2026, 2:31:08 PM 1649639 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:31:08 PM 1649640 synced recovery +DEBUG 3/18/2026, 2:31:12 PM 1654179 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:31:12 PM 1654180 synced recovery +DEBUG 3/18/2026, 2:31:14 PM 1656405 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:31:14 PM 1656406 synced recovery +DEBUG 3/18/2026, 2:31:19 PM 1660813 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:31:19 PM 1660815 synced recovery +DEBUG 3/18/2026, 2:31:21 PM 1663130 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:31:21 PM 1663131 synced recovery +DEBUG 3/18/2026, 2:31:22 PM 1664400 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:31:22 PM 1664402 synced recovery +DEBUG 3/18/2026, 2:31:25 PM 1667513 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:31:25 PM 1667522 synced recovery +DEBUG 3/18/2026, 2:31:29 PM 1671154 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:31:29 PM 1671155 synced recovery +DEBUG 3/18/2026, 2:31:31 PM 1672769 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:31:31 PM 1672771 synced recovery +DEBUG 3/18/2026, 2:31:38 PM 1679990 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:31:38 PM 1679991 synced recovery +DEBUG 3/18/2026, 2:31:40 PM 1682222 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:31:40 PM 1682223 synced recovery +DEBUG 3/18/2026, 2:31:42 PM 1684087 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:31:42 PM 1684088 synced recovery +INFO 3/18/2026, 2:31:43 PM 1684937 [blur] 1 +INFO 3/18/2026, 2:31:43 PM 1684937 [win] blur +INFO 3/18/2026, 2:31:44 PM 1685873 [focus] 1 +DEBUG 3/18/2026, 2:31:47 PM 1689388 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:31:47 PM 1689390 synced recovery +DEBUG 3/18/2026, 2:31:51 PM 1693340 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:31:51 PM 1693341 synced recovery +INFO 3/18/2026, 2:31:52 PM 1694281 [blur] 1 +INFO 3/18/2026, 2:31:52 PM 1694281 [win] blur +INFO 3/18/2026, 2:31:55 PM 1697070 [focus] 1 +DEBUG 3/18/2026, 2:31:58 PM 1699958 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:31:58 PM 1699960 synced recovery +INFO 3/18/2026, 2:32:02 PM 1704322 [blur] 1 +INFO 3/18/2026, 2:32:02 PM 1704322 [win] blur +INFO 3/18/2026, 2:32:06 PM 1708037 [focus] 1 +DEBUG 3/18/2026, 2:32:12 PM 1713809 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:32:12 PM 1713810 synced recovery +DEBUG 3/18/2026, 2:32:16 PM 1717643 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:32:16 PM 1717645 synced recovery +DEBUG 3/18/2026, 2:32:17 PM 1718821 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:32:17 PM 1718823 synced recovery +DEBUG 3/18/2026, 2:32:24 PM 1726553 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:32:24 PM 1726554 synced recovery +DEBUG 3/18/2026, 2:32:32 PM 1734287 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:32:32 PM 1734288 synced recovery +DEBUG 3/18/2026, 2:32:44 PM 1746391 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:32:44 PM 1746392 synced recovery +DEBUG 3/18/2026, 2:32:46 PM 1748299 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:32:46 PM 1748302 synced recovery +DEBUG 3/18/2026, 2:32:49 PM 1750759 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:32:49 PM 1750761 synced recovery +DEBUG 3/18/2026, 2:32:53 PM 1754674 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:32:53 PM 1754675 synced recovery +DEBUG 3/18/2026, 2:32:58 PM 1759916 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:32:58 PM 1759917 synced recovery +DEBUG 3/18/2026, 2:33:08 PM 1769711 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:33:08 PM 1769712 synced recovery +DEBUG 3/18/2026, 2:33:15 PM 1776897 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:33:15 PM 1776898 synced recovery +DEBUG 3/18/2026, 2:33:23 PM 1784916 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:33:23 PM 1784917 synced recovery +DEBUG 3/18/2026, 2:33:24 PM 1786105 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:33:24 PM 1786106 synced recovery +DEBUG 3/18/2026, 2:33:30 PM 1792391 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:33:30 PM 1792396 synced recovery +DEBUG 3/18/2026, 2:33:33 PM 1794900 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:33:33 PM 1794901 synced recovery +DEBUG 3/18/2026, 2:33:34 PM 1796040 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:33:34 PM 1796041 synced recovery +DEBUG 3/18/2026, 2:33:45 PM 1807410 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:33:45 PM 1807411 synced recovery +DEBUG 3/18/2026, 2:33:58 PM 1819808 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:33:58 PM 1819818 synced recovery +DEBUG 3/18/2026, 2:33:59 PM 1821148 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:33:59 PM 1821149 synced recovery +DEBUG 3/18/2026, 2:34:09 PM 1831512 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:34:09 PM 1831513 synced recovery +DEBUG 3/18/2026, 2:34:14 PM 1835971 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:34:14 PM 1835972 synced recovery +DEBUG 3/18/2026, 2:34:17 PM 1838832 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:34:17 PM 1838837 synced recovery +DEBUG 3/18/2026, 2:34:19 PM 1841369 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:34:19 PM 1841370 synced recovery +DEBUG 3/18/2026, 2:34:26 PM 1847932 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:34:26 PM 1847933 synced recovery +DEBUG 3/18/2026, 2:34:29 PM 1850957 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:34:29 PM 1850959 synced recovery +DEBUG 3/18/2026, 2:34:36 PM 1858270 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:34:36 PM 1858271 synced recovery +DEBUG 3/18/2026, 2:34:40 PM 1861971 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:34:40 PM 1861973 synced recovery +DEBUG 3/18/2026, 2:34:44 PM 1866375 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:34:44 PM 1866376 synced recovery +DEBUG 3/18/2026, 2:34:48 PM 1869995 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:34:48 PM 1869996 synced recovery +DEBUG 3/18/2026, 2:35:01 PM 1882941 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:35:01 PM 1882947 synced recovery +DEBUG 3/18/2026, 2:35:06 PM 1888494 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:35:06 PM 1888496 synced recovery +DEBUG 3/18/2026, 2:35:11 PM 1892627 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:35:11 PM 1892628 synced recovery +DEBUG 3/18/2026, 2:35:15 PM 1896793 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:35:15 PM 1896794 synced recovery +DEBUG 3/18/2026, 2:35:17 PM 1898774 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:35:17 PM 1898775 synced recovery +DEBUG 3/18/2026, 2:35:20 PM 1901801 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:35:20 PM 1901804 synced recovery +DEBUG 3/18/2026, 2:35:21 PM 1903186 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:35:21 PM 1903188 synced recovery +INFO 3/18/2026, 2:35:21 PM 1903382 [blur] 1 +INFO 3/18/2026, 2:35:21 PM 1903382 [win] blur +INFO 3/18/2026, 2:35:24 PM 1905995 [focus] 1 +DEBUG 3/18/2026, 2:35:32 PM 1913845 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:35:32 PM 1913846 synced recovery +DEBUG 3/18/2026, 2:35:34 PM 1916264 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:35:34 PM 1916271 synced recovery +DEBUG 3/18/2026, 2:35:41 PM 1923400 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:35:41 PM 1923401 synced recovery +DEBUG 3/18/2026, 2:35:43 PM 1925038 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:35:43 PM 1925040 synced recovery +DEBUG 3/18/2026, 2:35:46 PM 1927823 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:35:46 PM 1927824 synced recovery +DEBUG 3/18/2026, 2:35:50 PM 1931791 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:35:50 PM 1931794 synced recovery +DEBUG 3/18/2026, 2:36:03 PM 1945323 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:03 PM 1945324 synced recovery +DEBUG 3/18/2026, 2:36:06 PM 1948428 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:06 PM 1948429 synced recovery +DEBUG 3/18/2026, 2:36:07 PM 1949540 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:07 PM 1949541 synced recovery +DEBUG 3/18/2026, 2:36:10 PM 1951695 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:10 PM 1951699 synced recovery +DEBUG 3/18/2026, 2:36:15 PM 1957110 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:15 PM 1957112 synced recovery +DEBUG 3/18/2026, 2:36:18 PM 1960385 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:18 PM 1960386 synced recovery +DEBUG 3/18/2026, 2:36:19 PM 1961479 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:19 PM 1961480 synced recovery +DEBUG 3/18/2026, 2:36:22 PM 1964329 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:22 PM 1964330 synced recovery +DEBUG 3/18/2026, 2:36:25 PM 1966830 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:25 PM 1966831 synced recovery +DEBUG 3/18/2026, 2:36:26 PM 1968484 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:26 PM 1968485 synced recovery +DEBUG 3/18/2026, 2:36:29 PM 1971005 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:29 PM 1971007 synced recovery +DEBUG 3/18/2026, 2:36:30 PM 1972104 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:30 PM 1972105 synced recovery +DEBUG 3/18/2026, 2:36:31 PM 1973423 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:31 PM 1973445 synced recovery +DEBUG 3/18/2026, 2:36:33 PM 1974616 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:33 PM 1974617 synced recovery +DEBUG 3/18/2026, 2:36:34 PM 1976082 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:34 PM 1976083 synced recovery +DEBUG 3/18/2026, 2:36:35 PM 1977221 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:35 PM 1977223 synced recovery +DEBUG 3/18/2026, 2:36:36 PM 1978329 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:36 PM 1978331 synced recovery +DEBUG 3/18/2026, 2:36:38 PM 1979938 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:38 PM 1979939 synced recovery +DEBUG 3/18/2026, 2:36:40 PM 1981693 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:40 PM 1981695 synced recovery +DEBUG 3/18/2026, 2:36:41 PM 1982934 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:41 PM 1982936 synced recovery +DEBUG 3/18/2026, 2:36:44 PM 1986578 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:44 PM 1986597 synced recovery +DEBUG 3/18/2026, 2:36:47 PM 1988943 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:47 PM 1988946 synced recovery +INFO 3/18/2026, 2:36:57 PM 1999306 [blur] 1 +INFO 3/18/2026, 2:36:57 PM 1999307 [win] blur +DEBUG 3/18/2026, 2:36:58 PM 1999662 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:36:58 PM 1999673 synced recovery +INFO 3/18/2026, 2:37:43 PM 2045201 [focus] 1 +INFO 3/18/2026, 2:37:44 PM 2046325 [blur] 1 +INFO 3/18/2026, 2:37:44 PM 2046325 [win] blur +INFO 3/18/2026, 2:37:52 PM 2054109 [focus] 1 +DEBUG 3/18/2026, 2:37:58 PM 2060022 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:37:58 PM 2060023 synced recovery +DEBUG 3/18/2026, 2:38:04 PM 2066492 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:38:04 PM 2066494 synced recovery +DEBUG 3/18/2026, 2:38:23 PM 2085418 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:38:23 PM 2085431 synced recovery +INFO 3/18/2026, 2:38:25 PM 2087475 [blur] 1 +INFO 3/18/2026, 2:38:25 PM 2087477 [win] blur +INFO 3/18/2026, 2:38:35 PM 2097085 [focus] 1 +DEBUG 3/18/2026, 2:38:38 PM 2099708 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:38:38 PM 2099710 synced recovery +DEBUG 3/18/2026, 2:38:42 PM 2104184 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:38:42 PM 2104186 synced recovery +DEBUG 3/18/2026, 2:38:44 PM 2106248 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:38:44 PM 2106253 synced recovery +DEBUG 3/18/2026, 2:38:46 PM 2108430 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:38:46 PM 2108432 synced recovery +DEBUG 3/18/2026, 2:38:51 PM 2113154 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:38:51 PM 2113155 synced recovery +DEBUG 3/18/2026, 2:39:00 PM 2121907 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:39:00 PM 2121908 synced recovery +DEBUG 3/18/2026, 2:39:03 PM 2125200 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:39:03 PM 2125201 synced recovery +DEBUG 3/18/2026, 2:39:05 PM 2127115 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:39:05 PM 2127118 synced recovery +DEBUG 3/18/2026, 2:39:10 PM 2131812 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:39:10 PM 2131815 synced recovery +DEBUG 3/18/2026, 2:39:12 PM 2134307 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:39:12 PM 2134308 synced recovery +DEBUG 3/18/2026, 2:39:15 PM 2136968 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:39:15 PM 2136970 synced recovery +DEBUG 3/18/2026, 2:39:38 PM 2159868 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:39:38 PM 2159871 synced recovery +DEBUG 3/18/2026, 2:39:44 PM 2166461 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:39:44 PM 2166462 synced recovery +DEBUG 3/18/2026, 2:39:46 PM 2167972 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:39:46 PM 2167990 synced recovery +DEBUG 3/18/2026, 2:39:53 PM 2175074 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:39:53 PM 2175076 synced recovery +DEBUG 3/18/2026, 2:39:56 PM 2178541 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:39:56 PM 2178542 synced recovery +DEBUG 3/18/2026, 2:40:02 PM 2184138 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:40:02 PM 2184139 synced recovery +DEBUG 3/18/2026, 2:40:16 PM 2197874 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:40:16 PM 2197876 synced recovery +DEBUG 3/18/2026, 2:40:17 PM 2199291 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:40:17 PM 2199316 synced recovery +DEBUG 3/18/2026, 2:40:22 PM 2204498 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:40:22 PM 2204501 synced recovery +DEBUG 3/18/2026, 2:40:24 PM 2205862 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:40:24 PM 2205867 synced recovery +DEBUG 3/18/2026, 2:40:25 PM 2207037 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:40:25 PM 2207038 synced recovery +DEBUG 3/18/2026, 2:40:35 PM 2217396 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:40:35 PM 2217409 synced recovery +DEBUG 3/18/2026, 2:40:40 PM 2221769 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:40:40 PM 2221772 synced recovery +DEBUG 3/18/2026, 2:40:43 PM 2224845 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:40:43 PM 2224847 synced recovery +DEBUG 3/18/2026, 2:40:51 PM 2232775 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:40:51 PM 2232776 synced recovery +DEBUG 3/18/2026, 2:40:54 PM 2235646 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:40:54 PM 2235654 synced recovery +DEBUG 3/18/2026, 2:40:56 PM 2237926 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:40:56 PM 2237928 synced recovery +DEBUG 3/18/2026, 2:41:02 PM 2243999 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:41:02 PM 2244003 synced recovery +DEBUG 3/18/2026, 2:41:07 PM 2248938 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:41:07 PM 2248941 synced recovery +DEBUG 3/18/2026, 2:41:11 PM 2253090 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:41:11 PM 2253095 synced recovery +DEBUG 3/18/2026, 2:41:13 PM 2254849 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:41:13 PM 2254852 synced recovery +DEBUG 3/18/2026, 2:41:16 PM 2257694 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:41:16 PM 2257698 synced recovery +DEBUG 3/18/2026, 2:41:17 PM 2259273 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:41:17 PM 2259274 synced recovery +DEBUG 3/18/2026, 2:41:19 PM 2261166 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:41:19 PM 2261167 synced recovery +DEBUG 3/18/2026, 2:41:23 PM 2264692 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:41:23 PM 2264694 synced recovery +DEBUG 3/18/2026, 2:41:42 PM 2283908 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:41:42 PM 2283910 synced recovery +DEBUG 3/18/2026, 2:41:54 PM 2296165 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:41:54 PM 2296167 synced recovery +DEBUG 3/18/2026, 2:42:00 PM 2302192 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:42:00 PM 2302194 synced recovery +DEBUG 3/18/2026, 2:42:05 PM 2307203 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:42:05 PM 2307206 synced recovery +DEBUG 3/18/2026, 2:42:09 PM 2311300 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:42:09 PM 2311301 synced recovery +DEBUG 3/18/2026, 2:42:12 PM 2314253 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:42:12 PM 2314254 synced recovery +DEBUG 3/18/2026, 2:42:13 PM 2315404 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:42:13 PM 2315405 synced recovery +DEBUG 3/18/2026, 2:42:15 PM 2317155 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:42:15 PM 2317157 synced recovery +DEBUG 3/18/2026, 2:42:17 PM 2319231 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:42:17 PM 2319233 synced recovery +DEBUG 3/18/2026, 2:42:19 PM 2320874 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:42:19 PM 2320875 synced recovery +DEBUG 3/18/2026, 2:42:21 PM 2323249 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:42:21 PM 2323252 synced recovery +DEBUG 3/18/2026, 2:42:25 PM 2327128 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:42:25 PM 2327129 synced recovery +DEBUG 3/18/2026, 2:42:33 PM 2335060 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:42:33 PM 2335062 synced recovery +DEBUG 3/18/2026, 2:42:36 PM 2337617 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:42:36 PM 2337619 synced recovery +DEBUG 3/18/2026, 2:42:40 PM 2342332 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:42:40 PM 2342334 synced recovery +DEBUG 3/18/2026, 2:42:46 PM 2348068 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:42:46 PM 2348070 synced recovery +DEBUG 3/18/2026, 2:42:52 PM 2353676 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:42:52 PM 2353678 synced recovery +INFO 3/18/2026, 2:43:01 PM 2362825 [blur] 1 +INFO 3/18/2026, 2:43:01 PM 2362826 [win] blur +INFO 3/18/2026, 2:43:05 PM 2366835 [focus] 1 +DEBUG 3/18/2026, 2:43:15 PM 2377446 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:43:15 PM 2377451 synced recovery +INFO 3/18/2026, 2:43:30 PM 2392377 [blur] 1 +INFO 3/18/2026, 2:43:30 PM 2392377 [win] blur +INFO 3/18/2026, 2:43:32 PM 2393646 [focus] 1 +DEBUG 3/18/2026, 2:43:44 PM 2405910 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:43:44 PM 2405913 synced recovery +DEBUG 3/18/2026, 2:43:46 PM 2408073 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:43:46 PM 2408075 synced recovery +DEBUG 3/18/2026, 2:43:48 PM 2410388 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:43:48 PM 2410389 synced recovery +DEBUG 3/18/2026, 2:43:50 PM 2412558 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/18/2026, 2:43:50 PM 2412559 synced recovery +INFO 3/18/2026, 2:43:52 PM 2414101 synced recovery +INFO 3/18/2026, 2:43:52 PM 2414101 ----------------before-quit----------------- +INFO 3/18/2026, 2:43:52 PM 2414102 ------------------will-quit------------------ +INFO 3/18/2026, 2:43:52 PM 2414194 -----------------quit------------------ +INFO 3/18/2026, 2:43:52 PM 2414194 closeLogging +INFO 3/19/2026, 7:43:53 AM 215 launch with argv [/usr/share/typora/Typora] +INFO 3/19/2026, 7:43:54 AM 1377 ------------------start------------------ +DEBUG 3/19/2026, 7:43:54 AM 1585 before setting +DEBUG 3/19/2026, 7:43:55 AM 1944 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/19/2026, 7:43:55 AM 1955 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/19/2026, 7:43:55 AM 1959 OS is linux 6.19.8-arch1-1 +INFO 3/19/2026, 7:43:55 AM 1959 start LM in devVersion=false +DEBUG 3/19/2026, 7:43:55 AM 1973 after setting +INFO 3/19/2026, 7:43:55 AM 1973 typora version: 1.12.4 +INFO 3/19/2026, 7:43:55 AM 2318 [watch L] +DEBUG 3/19/2026, 7:43:55 AM 2318 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/19/2026, 7:43:55 AM 2452 pure = undefined +INFO 3/19/2026, 7:43:55 AM 2459 renew +DEBUG 3/19/2026, 7:43:55 AM 2459 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 3/19/2026, 7:43:55 AM 2460 [L] pass +DEBUG 3/19/2026, 7:43:55 AM 2463 trailRemains is 0 +INFO 3/19/2026, 7:43:55 AM 2463 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/19/2026, 7:43:55 AM 2482 [watch L] hasL: true +user-dict.json not found +DEBUG 3/19/2026, 7:43:55 AM 2561 app.openFile +DEBUG 3/19/2026, 7:43:56 AM 3107 added recovery 1 null (0) +DEBUG 3/19/2026, 7:43:56 AM 3116 putAccelerator File -> &Fichier +DEBUG 3/19/2026, 7:43:56 AM 3116 putAccelerator Edit -> Édit&er +DEBUG 3/19/2026, 7:43:56 AM 3116 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/19/2026, 7:43:56 AM 3117 putAccelerator Format -> F&ormat +DEBUG 3/19/2026, 7:43:56 AM 3117 putAccelerator View -> Présentation(&V) +DEBUG 3/19/2026, 7:43:56 AM 3117 putAccelerator Themes -> &Thèmes +DEBUG 3/19/2026, 7:43:56 AM 3117 putAccelerator Help -> Aide(&H) +INFO 3/19/2026, 7:43:56 AM 3193 synced recovery +INFO 3/19/2026, 7:43:57 AM 3882 [focus] 1 +DEBUG 3/19/2026, 7:43:57 AM 4445 [renewLicense]: license renewed +INFO 3/19/2026, 7:43:57 AM 4445 ls put SLicense +INFO 3/19/2026, 7:43:57 AM 4536 [blur] 1 +INFO 3/19/2026, 7:43:57 AM 4536 [win] blur +ERROR 3/19/2026, 7:43:58 AM 5452 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/19/2026, 7:43:58 AM 5458 handle document.loadData +DEBUG 3/19/2026, 7:43:58 AM 5458 document.loadData 0 +ERROR 3/19/2026, 7:43:58 AM 5460 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/19/2026, 7:43:58 AM 5560 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/19/2026, 7:43:58 AM 5560 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/19/2026, 7:43:58 AM 5584 added recovery 1 (0) +INFO 3/19/2026, 7:43:58 AM 5586 synced recovery +INFO 3/19/2026, 7:43:59 AM 6019 [RenderProcess 1][Log] onBecomeActive +INFO 3/19/2026, 7:43:59 AM 6020 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/19/2026, 7:44:01 AM 8288 [focus] 1 +INFO 3/19/2026, 7:44:02 AM 8973 [blur] 1 +INFO 3/19/2026, 7:44:02 AM 8976 [win] blur +INFO 3/19/2026, 7:44:02 AM 9237 [focus] 1 +INFO 3/19/2026, 7:44:03 AM 10478 [blur] 1 +INFO 3/19/2026, 7:44:03 AM 10478 [win] blur +INFO 3/19/2026, 7:44:04 AM 11288 [focus] 1 +INFO 3/19/2026, 7:44:04 AM 11394 [blur] 1 +INFO 3/19/2026, 7:44:04 AM 11394 [win] blur +INFO 3/19/2026, 7:44:05 AM 11891 [focus] 1 +INFO 3/19/2026, 7:44:06 AM 12854 [blur] 1 +INFO 3/19/2026, 7:44:06 AM 12854 [win] blur +INFO 3/19/2026, 7:44:06 AM 13181 [focus] 1 +INFO 3/19/2026, 7:44:07 AM 13964 [blur] 1 +INFO 3/19/2026, 7:44:07 AM 13964 [win] blur +INFO 3/19/2026, 7:44:07 AM 14362 [focus] 1 +INFO 3/19/2026, 7:44:07 AM 14501 [blur] 1 +INFO 3/19/2026, 7:44:07 AM 14501 [win] blur +INFO 3/19/2026, 7:44:08 AM 15368 [focus] 1 +DEBUG 3/19/2026, 7:44:15 AM 21795 app.openFile +INFO 3/19/2026, 7:44:15 AM 21810 switchDocument 1 [/home/afoucaultc/workspace/cesi/code/versions/4.0/README.md] +INFO 3/19/2026, 7:44:15 AM 21810 addRecentDocument +DEBUG 3/19/2026, 7:44:15 AM 21818 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:44:15 AM 21825 synced recovery +INFO 3/19/2026, 7:44:15 AM 21825 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/19/2026, 7:44:15 AM 21828 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/19/2026, 7:44:15 AM 21828 [RenderProcess 1][Log] reset NodeMap +INFO 3/19/2026, 7:44:15 AM 21831 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md +DEBUG 3/19/2026, 7:44:15 AM 21953 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:44:15 AM 21959 synced recovery +DEBUG 3/19/2026, 7:44:19 AM 26169 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:44:19 AM 26169 synced recovery +INFO 3/19/2026, 7:44:22 AM 29280 [blur] 1 +INFO 3/19/2026, 7:44:22 AM 29280 [win] blur +INFO 3/19/2026, 7:44:22 AM 29327 [focus] 1 +DEBUG 3/19/2026, 7:44:22 AM 29415 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:44:22 AM 29416 synced recovery +INFO 3/19/2026, 7:44:25 AM 31996 cleanUpExpiredDrafts +DEBUG 3/19/2026, 7:44:25 AM 31997 cleanUpExpiredDrafts +DEBUG 3/19/2026, 7:44:26 AM 33270 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:44:26 AM 33271 synced recovery +DEBUG 3/19/2026, 7:44:29 AM 36378 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:44:29 AM 36378 synced recovery +INFO 3/19/2026, 7:44:33 AM 40247 [blur] 1 +INFO 3/19/2026, 7:44:33 AM 40247 [win] blur +INFO 3/19/2026, 7:45:07 AM 74035 [focus] 1 +INFO 3/19/2026, 7:45:08 AM 75433 [blur] 1 +INFO 3/19/2026, 7:45:08 AM 75433 [win] blur +INFO 3/19/2026, 7:45:21 AM 88322 [focus] 1 +INFO 3/19/2026, 7:45:21 AM 88492 [blur] 1 +INFO 3/19/2026, 7:45:21 AM 88492 [win] blur +INFO 3/19/2026, 7:45:32 AM 99249 [focus] 1 +INFO 3/19/2026, 7:45:32 AM 99254 [blur] 1 +INFO 3/19/2026, 7:45:32 AM 99254 [win] blur +INFO 3/19/2026, 7:45:52 AM 118822 [focus] 1 +DEBUG 3/19/2026, 7:45:53 AM 120606 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:45:53 AM 120607 synced recovery +INFO 3/19/2026, 7:45:56 AM 123666 [blur] 1 +INFO 3/19/2026, 7:45:56 AM 123667 [win] blur +INFO 3/19/2026, 7:45:58 AM 125454 [focus] 1 +INFO 3/19/2026, 7:46:02 AM 128811 [blur] 1 +INFO 3/19/2026, 7:46:02 AM 128813 [win] blur +INFO 3/19/2026, 7:46:03 AM 130295 [focus] 1 +DEBUG 3/19/2026, 7:46:21 AM 148218 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:46:21 AM 148218 synced recovery +DEBUG 3/19/2026, 7:46:23 AM 150500 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:46:23 AM 150501 synced recovery +DEBUG 3/19/2026, 7:46:32 AM 158841 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:46:32 AM 158842 synced recovery +DEBUG 3/19/2026, 7:46:48 AM 175609 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:46:48 AM 175610 synced recovery +DEBUG 3/19/2026, 7:46:53 AM 180593 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:46:53 AM 180594 synced recovery +DEBUG 3/19/2026, 7:47:04 AM 190892 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:47:04 AM 190893 synced recovery +DEBUG 3/19/2026, 7:47:07 AM 194067 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:47:07 AM 194068 synced recovery +DEBUG 3/19/2026, 7:47:11 AM 198564 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:47:11 AM 198570 synced recovery +DEBUG 3/19/2026, 7:47:19 AM 206656 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:47:19 AM 206657 synced recovery +DEBUG 3/19/2026, 7:47:21 AM 208128 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:47:21 AM 208129 synced recovery +DEBUG 3/19/2026, 7:47:23 AM 210223 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:47:23 AM 210227 synced recovery +DEBUG 3/19/2026, 7:47:24 AM 211387 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:47:24 AM 211392 synced recovery +DEBUG 3/19/2026, 7:47:26 AM 213668 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:47:26 AM 213672 synced recovery +DEBUG 3/19/2026, 7:47:33 AM 219815 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:47:33 AM 219816 synced recovery +DEBUG 3/19/2026, 7:47:39 AM 225753 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:47:39 AM 225754 synced recovery +DEBUG 3/19/2026, 7:47:40 AM 227408 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:47:40 AM 227409 synced recovery +DEBUG 3/19/2026, 7:47:44 AM 230781 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:47:44 AM 230797 synced recovery +DEBUG 3/19/2026, 7:47:46 AM 233154 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:47:46 AM 233158 synced recovery +DEBUG 3/19/2026, 7:47:49 AM 235898 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:47:49 AM 235900 synced recovery +DEBUG 3/19/2026, 7:47:55 AM 241831 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:47:55 AM 241833 synced recovery +DEBUG 3/19/2026, 7:47:57 AM 244475 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:47:57 AM 244478 synced recovery +DEBUG 3/19/2026, 7:48:01 AM 248219 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:48:01 AM 248220 synced recovery +DEBUG 3/19/2026, 7:49:58 AM 365018 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:49:58 AM 365018 synced recovery +DEBUG 3/19/2026, 7:50:03 AM 370216 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:50:03 AM 370217 synced recovery +DEBUG 3/19/2026, 7:50:06 AM 373343 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:50:06 AM 373344 synced recovery +INFO 3/19/2026, 7:50:12 AM 379554 [blur] 1 +INFO 3/19/2026, 7:50:12 AM 379554 [win] blur +INFO 3/19/2026, 7:50:16 AM 383314 [focus] 1 +DEBUG 3/19/2026, 7:50:36 AM 402785 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:50:36 AM 402786 synced recovery +DEBUG 3/19/2026, 7:50:39 AM 406193 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:50:39 AM 406194 synced recovery +DEBUG 3/19/2026, 7:50:42 AM 409634 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:50:42 AM 409635 synced recovery +DEBUG 3/19/2026, 7:51:04 AM 431505 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:51:04 AM 431506 synced recovery +DEBUG 3/19/2026, 7:51:15 AM 442374 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:51:15 AM 442375 synced recovery +DEBUG 3/19/2026, 7:51:17 AM 444657 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:51:17 AM 444658 synced recovery +DEBUG 3/19/2026, 7:51:20 AM 447329 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:51:20 AM 447330 synced recovery +DEBUG 3/19/2026, 7:51:22 AM 449581 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:51:22 AM 449587 synced recovery +DEBUG 3/19/2026, 7:51:25 AM 451881 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:51:25 AM 451882 synced recovery +DEBUG 3/19/2026, 7:51:32 AM 458743 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:51:32 AM 458745 synced recovery +DEBUG 3/19/2026, 7:51:47 AM 474590 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:51:47 AM 474591 synced recovery +DEBUG 3/19/2026, 7:52:15 AM 501902 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:52:15 AM 501903 synced recovery +DEBUG 3/19/2026, 7:52:46 AM 532982 2nd 0.37324712214190203 +DEBUG 3/19/2026, 7:52:46 AM 532983 pure = true +INFO 3/19/2026, 7:52:46 AM 532983 renew +DEBUG 3/19/2026, 7:52:46 AM 532983 [renewLicense] license renewed in 12h +DEBUG 3/19/2026, 7:52:46 AM 532983 [L] pass +DEBUG 3/19/2026, 7:52:59 AM 546529 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:52:59 AM 546539 synced recovery +DEBUG 3/19/2026, 7:53:02 AM 549195 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:53:02 AM 549196 synced recovery +DEBUG 3/19/2026, 7:53:23 AM 570381 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:53:23 AM 570381 synced recovery +DEBUG 3/19/2026, 7:53:36 AM 583066 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:53:36 AM 583068 synced recovery +DEBUG 3/19/2026, 7:53:38 AM 585689 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:53:38 AM 585690 synced recovery +DEBUG 3/19/2026, 7:53:56 AM 602765 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:53:56 AM 602766 synced recovery +DEBUG 3/19/2026, 7:53:59 AM 606384 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:53:59 AM 606385 synced recovery +DEBUG 3/19/2026, 7:54:04 AM 611203 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:54:04 AM 611204 synced recovery +DEBUG 3/19/2026, 7:54:09 AM 615942 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:54:09 AM 615943 synced recovery +DEBUG 3/19/2026, 7:54:29 AM 636334 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:54:29 AM 636334 synced recovery +DEBUG 3/19/2026, 7:54:33 AM 640718 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:54:33 AM 640720 synced recovery +DEBUG 3/19/2026, 7:54:37 AM 644240 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:54:37 AM 644241 synced recovery +DEBUG 3/19/2026, 7:54:40 AM 646830 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:54:40 AM 646830 synced recovery +DEBUG 3/19/2026, 7:54:42 AM 649505 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:54:42 AM 649506 synced recovery +DEBUG 3/19/2026, 7:54:47 AM 654184 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:54:47 AM 654184 synced recovery +DEBUG 3/19/2026, 7:54:51 AM 658069 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:54:51 AM 658070 synced recovery +DEBUG 3/19/2026, 7:54:53 AM 660346 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:54:53 AM 660347 synced recovery +DEBUG 3/19/2026, 7:55:04 AM 671342 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:55:04 AM 671343 synced recovery +DEBUG 3/19/2026, 7:55:11 AM 678173 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:55:11 AM 678174 synced recovery +DEBUG 3/19/2026, 7:55:12 AM 679705 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:55:12 AM 679708 synced recovery +DEBUG 3/19/2026, 7:55:14 AM 681483 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:55:14 AM 681488 synced recovery +INFO 3/19/2026, 7:56:47 AM 774256 [blur] 1 +INFO 3/19/2026, 7:56:47 AM 774256 [win] blur +INFO 3/19/2026, 7:57:00 AM 787002 [focus] 1 +DEBUG 3/19/2026, 7:57:06 AM 793059 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:57:06 AM 793060 synced recovery +DEBUG 3/19/2026, 7:57:39 AM 826101 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:57:39 AM 826102 synced recovery +INFO 3/19/2026, 7:57:39 AM 826531 [blur] 1 +INFO 3/19/2026, 7:57:39 AM 826531 [win] blur +INFO 3/19/2026, 7:57:46 AM 833147 [focus] 1 +DEBUG 3/19/2026, 7:57:52 AM 839088 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:57:52 AM 839090 synced recovery +INFO 3/19/2026, 7:57:57 AM 843923 [blur] 1 +INFO 3/19/2026, 7:57:57 AM 843923 [win] blur +INFO 3/19/2026, 7:57:57 AM 843998 [focus] 1 +DEBUG 3/19/2026, 7:58:00 AM 847043 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:00 AM 847044 synced recovery +DEBUG 3/19/2026, 7:58:04 AM 850825 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:04 AM 850826 synced recovery +DEBUG 3/19/2026, 7:58:07 AM 853865 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:07 AM 853866 synced recovery +DEBUG 3/19/2026, 7:58:08 AM 855186 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:08 AM 855187 synced recovery +DEBUG 3/19/2026, 7:58:11 AM 858048 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:11 AM 858049 synced recovery +DEBUG 3/19/2026, 7:58:12 AM 859677 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:12 AM 859677 synced recovery +DEBUG 3/19/2026, 7:58:15 AM 861780 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:15 AM 861783 synced recovery +DEBUG 3/19/2026, 7:58:16 AM 863177 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:16 AM 863178 synced recovery +DEBUG 3/19/2026, 7:58:18 AM 865550 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:18 AM 865551 synced recovery +DEBUG 3/19/2026, 7:58:20 AM 866829 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:20 AM 866830 synced recovery +DEBUG 3/19/2026, 7:58:22 AM 869649 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:22 AM 869650 synced recovery +DEBUG 3/19/2026, 7:58:24 AM 871690 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:24 AM 871693 synced recovery +DEBUG 3/19/2026, 7:58:26 AM 873406 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:26 AM 873407 synced recovery +DEBUG 3/19/2026, 7:58:28 AM 875577 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:28 AM 875578 synced recovery +DEBUG 3/19/2026, 7:58:31 AM 878465 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:31 AM 878466 synced recovery +DEBUG 3/19/2026, 7:58:33 AM 879825 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:33 AM 879826 synced recovery +DEBUG 3/19/2026, 7:58:36 AM 882751 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:36 AM 882751 synced recovery +DEBUG 3/19/2026, 7:58:37 AM 883914 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:37 AM 883915 synced recovery +DEBUG 3/19/2026, 7:58:38 AM 885172 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:38 AM 885173 synced recovery +DEBUG 3/19/2026, 7:58:49 AM 895930 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 7:58:49 AM 895931 synced recovery +INFO 3/19/2026, 7:58:56 AM 903100 [blur] 1 +INFO 3/19/2026, 7:58:56 AM 903100 [win] blur +INFO 3/19/2026, 7:58:56 AM 903250 [focus] 1 +INFO 3/19/2026, 7:58:57 AM 904632 [blur] 1 +INFO 3/19/2026, 7:58:57 AM 904632 [win] blur +INFO 3/19/2026, 7:58:58 AM 905105 [focus] 1 +INFO 3/19/2026, 7:58:59 AM 906038 [blur] 1 +INFO 3/19/2026, 7:58:59 AM 906038 [win] blur +INFO 3/19/2026, 7:58:59 AM 906280 [focus] 1 +INFO 3/19/2026, 7:58:59 AM 906461 [blur] 1 +INFO 3/19/2026, 7:58:59 AM 906461 [win] blur +INFO 3/19/2026, 7:59:54 AM 961073 [focus] 1 +INFO 3/19/2026, 7:59:54 AM 961360 [blur] 1 +INFO 3/19/2026, 7:59:54 AM 961363 [win] blur +INFO 3/19/2026, 7:59:55 AM 962025 [focus] 1 +INFO 3/19/2026, 7:59:56 AM 963433 [blur] 1 +INFO 3/19/2026, 7:59:56 AM 963433 [win] blur +INFO 3/19/2026, 7:59:57 AM 964617 [focus] 1 +INFO 3/19/2026, 7:59:58 AM 965705 [blur] 1 +INFO 3/19/2026, 7:59:58 AM 965705 [win] blur +INFO 3/19/2026, 7:59:59 AM 966145 [focus] 1 +INFO 3/19/2026, 7:59:59 AM 966432 [blur] 1 +INFO 3/19/2026, 7:59:59 AM 966432 [win] blur +INFO 3/19/2026, 8:00:04 AM 971481 [focus] 1 +INFO 3/19/2026, 8:00:05 AM 972481 [blur] 1 +INFO 3/19/2026, 8:00:05 AM 972482 [win] blur +INFO 3/19/2026, 8:00:09 AM 976403 [focus] 1 +INFO 3/19/2026, 8:00:11 AM 977907 [blur] 1 +INFO 3/19/2026, 8:00:11 AM 977907 [win] blur +INFO 3/19/2026, 8:01:35 AM 1062247 [focus] 1 +DEBUG 3/19/2026, 8:01:38 AM 1065702 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:01:38 AM 1065703 synced recovery +DEBUG 3/19/2026, 8:01:41 AM 1068415 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:01:41 AM 1068416 synced recovery +DEBUG 3/19/2026, 8:01:44 AM 1070986 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:01:44 AM 1070988 synced recovery +INFO 3/19/2026, 8:01:45 AM 1072075 [blur] 1 +INFO 3/19/2026, 8:01:45 AM 1072075 [win] blur +INFO 3/19/2026, 8:01:57 AM 1083866 [focus] 1 +INFO 3/19/2026, 8:01:57 AM 1084136 [blur] 1 +INFO 3/19/2026, 8:01:57 AM 1084136 [win] blur +INFO 3/19/2026, 8:01:57 AM 1084567 [focus] 1 +INFO 3/19/2026, 8:01:59 AM 1086476 [blur] 1 +INFO 3/19/2026, 8:01:59 AM 1086478 [win] blur +INFO 3/19/2026, 8:02:04 AM 1091051 [focus] 1 +INFO 3/19/2026, 8:02:05 AM 1092459 [blur] 1 +INFO 3/19/2026, 8:02:05 AM 1092459 [win] blur +INFO 3/19/2026, 8:02:25 AM 1112621 [focus] 1 +INFO 3/19/2026, 8:02:26 AM 1112952 [blur] 1 +INFO 3/19/2026, 8:02:26 AM 1112952 [win] blur +INFO 3/19/2026, 8:02:26 AM 1113466 [focus] 1 +INFO 3/19/2026, 8:02:26 AM 1113683 [blur] 1 +INFO 3/19/2026, 8:02:26 AM 1113683 [win] blur +INFO 3/19/2026, 8:02:39 AM 1126466 [focus] 1 +INFO 3/19/2026, 8:02:40 AM 1127248 [blur] 1 +INFO 3/19/2026, 8:02:40 AM 1127248 [win] blur +INFO 3/19/2026, 8:02:40 AM 1127577 [focus] 1 +INFO 3/19/2026, 8:02:42 AM 1129474 [blur] 1 +INFO 3/19/2026, 8:02:42 AM 1129474 [win] blur +INFO 3/19/2026, 8:02:48 AM 1134760 [focus] 1 +INFO 3/19/2026, 8:02:53 AM 1140567 [blur] 1 +INFO 3/19/2026, 8:02:53 AM 1140568 [win] blur +INFO 3/19/2026, 8:06:04 AM 1330808 [focus] 1 +DEBUG 3/19/2026, 8:06:07 AM 1334239 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:06:07 AM 1334240 synced recovery +DEBUG 3/19/2026, 8:06:08 AM 1335480 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:06:08 AM 1335481 synced recovery +DEBUG 3/19/2026, 8:06:13 AM 1340616 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:06:13 AM 1340617 synced recovery +INFO 3/19/2026, 8:06:17 AM 1344695 [blur] 1 +INFO 3/19/2026, 8:06:17 AM 1344695 [win] blur +INFO 3/19/2026, 8:06:18 AM 1344751 [focus] 1 +DEBUG 3/19/2026, 8:06:21 AM 1348234 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:06:21 AM 1348235 synced recovery +DEBUG 3/19/2026, 8:06:22 AM 1349608 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:06:22 AM 1349616 synced recovery +DEBUG 3/19/2026, 8:06:25 AM 1352600 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:06:25 AM 1352601 synced recovery +DEBUG 3/19/2026, 8:06:29 AM 1355975 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:06:29 AM 1355975 synced recovery +INFO 3/19/2026, 8:06:30 AM 1356890 [blur] 1 +INFO 3/19/2026, 8:06:30 AM 1356890 [win] blur +INFO 3/19/2026, 8:06:30 AM 1357449 [focus] 1 +DEBUG 3/19/2026, 8:06:34 AM 1361279 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:06:34 AM 1361281 synced recovery +DEBUG 3/19/2026, 8:06:37 AM 1363792 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:06:37 AM 1363794 synced recovery +INFO 3/19/2026, 8:06:40 AM 1367320 [blur] 1 +INFO 3/19/2026, 8:06:40 AM 1367320 [win] blur +INFO 3/19/2026, 8:07:30 AM 1417456 [focus] 1 +INFO 3/19/2026, 8:07:30 AM 1417574 [blur] 1 +INFO 3/19/2026, 8:07:30 AM 1417574 [win] blur +INFO 3/19/2026, 8:07:46 AM 1433667 [focus] 1 +DEBUG 3/19/2026, 8:07:51 AM 1438681 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:07:51 AM 1438681 synced recovery +DEBUG 3/19/2026, 8:07:53 AM 1440353 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:07:53 AM 1440354 synced recovery +DEBUG 3/19/2026, 8:07:55 AM 1442002 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:07:55 AM 1442003 synced recovery +DEBUG 3/19/2026, 8:07:57 AM 1443882 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:07:57 AM 1443883 synced recovery +DEBUG 3/19/2026, 8:08:03 AM 1450057 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:08:03 AM 1450060 synced recovery +DEBUG 3/19/2026, 8:08:05 AM 1452015 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:08:05 AM 1452016 synced recovery +DEBUG 3/19/2026, 8:08:06 AM 1453573 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:08:06 AM 1453574 synced recovery +DEBUG 3/19/2026, 8:08:09 AM 1455892 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:08:09 AM 1455893 synced recovery +INFO 3/19/2026, 8:08:10 AM 1457268 [blur] 1 +INFO 3/19/2026, 8:08:10 AM 1457268 [win] blur +INFO 3/19/2026, 8:08:10 AM 1457269 [focus] 1 +INFO 3/19/2026, 8:08:10 AM 1457661 [blur] 1 +INFO 3/19/2026, 8:08:10 AM 1457662 [win] blur +INFO 3/19/2026, 8:08:10 AM 1457673 [focus] 1 +INFO 3/19/2026, 8:08:13 AM 1460190 [blur] 1 +INFO 3/19/2026, 8:08:13 AM 1460190 [win] blur +INFO 3/19/2026, 8:08:13 AM 1460190 [focus] 1 +INFO 3/19/2026, 8:08:13 AM 1460504 [blur] 1 +INFO 3/19/2026, 8:08:13 AM 1460504 [win] blur +INFO 3/19/2026, 8:08:13 AM 1460511 [focus] 1 +INFO 3/19/2026, 8:08:14 AM 1460775 [blur] 1 +INFO 3/19/2026, 8:08:14 AM 1460775 [win] blur +INFO 3/19/2026, 8:08:56 AM 1503528 [focus] 1 +DEBUG 3/19/2026, 8:08:59 AM 1506328 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:08:59 AM 1506334 synced recovery +INFO 3/19/2026, 8:09:04 AM 1511327 [blur] 1 +INFO 3/19/2026, 8:09:04 AM 1511330 [win] blur +INFO 3/19/2026, 8:09:05 AM 1512727 [focus] 1 +DEBUG 3/19/2026, 8:09:09 AM 1516453 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:09:09 AM 1516454 synced recovery +INFO 3/19/2026, 8:09:12 AM 1519175 [blur] 1 +INFO 3/19/2026, 8:09:12 AM 1519175 [win] blur +INFO 3/19/2026, 8:09:20 AM 1526959 [focus] 1 +INFO 3/19/2026, 8:09:22 AM 1529319 [blur] 1 +INFO 3/19/2026, 8:09:22 AM 1529320 [win] blur +INFO 3/19/2026, 8:09:24 AM 1530958 [focus] 1 +INFO 3/19/2026, 8:09:25 AM 1531864 [blur] 1 +INFO 3/19/2026, 8:09:25 AM 1531864 [win] blur +INFO 3/19/2026, 8:09:25 AM 1532020 [focus] 1 +DEBUG 3/19/2026, 8:09:25 AM 1532216 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:09:25 AM 1532227 synced recovery +INFO 3/19/2026, 8:09:26 AM 1533653 [blur] 1 +INFO 3/19/2026, 8:09:26 AM 1533654 [win] blur +INFO 3/19/2026, 8:09:26 AM 1533655 [focus] 1 +INFO 3/19/2026, 8:09:27 AM 1534266 [blur] 1 +INFO 3/19/2026, 8:09:27 AM 1534267 [win] blur +INFO 3/19/2026, 8:09:27 AM 1534268 [focus] 1 +DEBUG 3/19/2026, 8:09:33 AM 1540431 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:09:33 AM 1540431 synced recovery +DEBUG 3/19/2026, 8:09:36 AM 1543470 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:09:36 AM 1543471 synced recovery +DEBUG 3/19/2026, 8:09:39 AM 1546190 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:09:39 AM 1546190 synced recovery +DEBUG 3/19/2026, 8:09:42 AM 1549201 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:09:42 AM 1549201 synced recovery +DEBUG 3/19/2026, 8:09:49 AM 1556211 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:09:49 AM 1556212 synced recovery +DEBUG 3/19/2026, 8:09:52 AM 1559665 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:09:52 AM 1559666 synced recovery +DEBUG 3/19/2026, 8:09:54 AM 1561166 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:09:54 AM 1561167 synced recovery +DEBUG 3/19/2026, 8:09:55 AM 1562568 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:09:55 AM 1562569 synced recovery +DEBUG 3/19/2026, 8:09:58 AM 1564917 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:09:58 AM 1564918 synced recovery +DEBUG 3/19/2026, 8:10:05 AM 1572249 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:10:05 AM 1572250 synced recovery +DEBUG 3/19/2026, 8:10:08 AM 1575189 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:10:08 AM 1575189 synced recovery +DEBUG 3/19/2026, 8:10:12 AM 1579294 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:10:12 AM 1579295 synced recovery +DEBUG 3/19/2026, 8:10:14 AM 1581645 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:10:14 AM 1581646 synced recovery +DEBUG 3/19/2026, 8:10:16 AM 1583234 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:10:16 AM 1583235 synced recovery +DEBUG 3/19/2026, 8:10:18 AM 1584885 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:10:18 AM 1584885 synced recovery +DEBUG 3/19/2026, 8:10:20 AM 1587173 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:10:20 AM 1587175 synced recovery +INFO 3/19/2026, 8:10:23 AM 1590469 [blur] 1 +INFO 3/19/2026, 8:10:23 AM 1590469 [win] blur +DEBUG 3/19/2026, 8:10:24 AM 1590742 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:10:24 AM 1590746 synced recovery +INFO 3/19/2026, 8:10:24 AM 1590870 [focus] 1 +INFO 3/19/2026, 8:11:33 AM 1659942 [blur] 1 +INFO 3/19/2026, 8:11:33 AM 1659942 [win] blur +INFO 3/19/2026, 8:11:51 AM 1678149 [focus] 1 +INFO 3/19/2026, 8:11:56 AM 1683424 [blur] 1 +INFO 3/19/2026, 8:11:56 AM 1683424 [win] blur +INFO 3/19/2026, 8:12:02 AM 1689073 [focus] 1 +DEBUG 3/19/2026, 8:12:05 AM 1691913 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:05 AM 1691914 synced recovery +DEBUG 3/19/2026, 8:12:06 AM 1693378 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:06 AM 1693379 synced recovery +DEBUG 3/19/2026, 8:12:09 AM 1696286 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:09 AM 1696286 synced recovery +DEBUG 3/19/2026, 8:12:11 AM 1698671 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:11 AM 1698671 synced recovery +DEBUG 3/19/2026, 8:12:14 AM 1700883 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:14 AM 1700884 synced recovery +DEBUG 3/19/2026, 8:12:22 AM 1708808 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:22 AM 1708808 synced recovery +DEBUG 3/19/2026, 8:12:25 AM 1711742 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:25 AM 1711743 synced recovery +DEBUG 3/19/2026, 8:12:27 AM 1713996 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:27 AM 1713997 synced recovery +DEBUG 3/19/2026, 8:12:28 AM 1715630 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:28 AM 1715634 synced recovery +DEBUG 3/19/2026, 8:12:32 AM 1719179 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:32 AM 1719180 synced recovery +DEBUG 3/19/2026, 8:12:37 AM 1724145 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:37 AM 1724146 synced recovery +DEBUG 3/19/2026, 8:12:40 AM 1727551 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:40 AM 1727552 synced recovery +DEBUG 3/19/2026, 8:12:44 AM 1731535 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:44 AM 1731536 synced recovery +DEBUG 3/19/2026, 8:12:46 AM 1733274 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:46 AM 1733278 synced recovery +DEBUG 3/19/2026, 8:12:48 AM 1735079 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:48 AM 1735080 synced recovery +DEBUG 3/19/2026, 8:12:49 AM 1736526 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:49 AM 1736527 synced recovery +DEBUG 3/19/2026, 8:12:54 AM 1741206 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:54 AM 1741207 synced recovery +DEBUG 3/19/2026, 8:12:56 AM 1743594 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:12:56 AM 1743595 synced recovery +DEBUG 3/19/2026, 8:13:02 AM 1748860 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:13:02 AM 1748862 synced recovery +DEBUG 3/19/2026, 8:13:05 AM 1752336 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:13:05 AM 1752342 synced recovery +DEBUG 3/19/2026, 8:13:14 AM 1761451 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:13:14 AM 1761452 synced recovery +DEBUG 3/19/2026, 8:13:17 AM 1764259 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:13:17 AM 1764260 synced recovery +DEBUG 3/19/2026, 8:13:19 AM 1766692 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:13:19 AM 1766693 synced recovery +DEBUG 3/19/2026, 8:13:25 AM 1772065 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:13:25 AM 1772066 synced recovery +DEBUG 3/19/2026, 8:13:27 AM 1773748 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:13:27 AM 1773749 synced recovery +DEBUG 3/19/2026, 8:13:29 AM 1776458 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:13:29 AM 1776459 synced recovery +DEBUG 3/19/2026, 8:13:31 AM 1778638 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:13:31 AM 1778639 synced recovery +INFO 3/19/2026, 8:13:59 AM 1806147 [blur] 1 +INFO 3/19/2026, 8:13:59 AM 1806147 [win] blur +INFO 3/19/2026, 8:14:07 AM 1814019 [focus] 1 +DEBUG 3/19/2026, 8:14:12 AM 1819050 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:14:12 AM 1819066 synced recovery +DEBUG 3/19/2026, 8:14:14 AM 1821345 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:14:14 AM 1821346 synced recovery +DEBUG 3/19/2026, 8:14:18 AM 1825509 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:14:18 AM 1825510 synced recovery +DEBUG 3/19/2026, 8:14:21 AM 1828450 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:14:21 AM 1828451 synced recovery +DEBUG 3/19/2026, 8:14:23 AM 1830089 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:14:23 AM 1830090 synced recovery +DEBUG 3/19/2026, 8:14:26 AM 1832829 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:14:26 AM 1832830 synced recovery +DEBUG 3/19/2026, 8:14:28 AM 1835088 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:14:28 AM 1835094 synced recovery +DEBUG 3/19/2026, 8:14:31 AM 1838607 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:14:31 AM 1838608 synced recovery +DEBUG 3/19/2026, 8:14:34 AM 1841558 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:14:34 AM 1841558 synced recovery +DEBUG 3/19/2026, 8:14:39 AM 1845790 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:14:39 AM 1845792 synced recovery +DEBUG 3/19/2026, 8:14:47 AM 1854395 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:14:47 AM 1854401 synced recovery +DEBUG 3/19/2026, 8:14:51 AM 1858406 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:14:51 AM 1858407 synced recovery +DEBUG 3/19/2026, 8:14:53 AM 1859793 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:14:53 AM 1859794 synced recovery +DEBUG 3/19/2026, 8:14:55 AM 1862609 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:14:55 AM 1862610 synced recovery +DEBUG 3/19/2026, 8:14:57 AM 1864598 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:14:57 AM 1864598 synced recovery +DEBUG 3/19/2026, 8:15:01 AM 1868708 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:15:01 AM 1868709 synced recovery +DEBUG 3/19/2026, 8:15:04 AM 1871078 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:15:04 AM 1871079 synced recovery +DEBUG 3/19/2026, 8:15:06 AM 1872868 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:15:06 AM 1872869 synced recovery +DEBUG 3/19/2026, 8:15:09 AM 1875959 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:15:09 AM 1875959 synced recovery +DEBUG 3/19/2026, 8:15:11 AM 1878323 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:15:11 AM 1878324 synced recovery +DEBUG 3/19/2026, 8:15:15 AM 1881954 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:15:15 AM 1881955 synced recovery +DEBUG 3/19/2026, 8:15:21 AM 1888406 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:15:21 AM 1888407 synced recovery +DEBUG 3/19/2026, 8:15:25 AM 1892203 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:15:25 AM 1892204 synced recovery +DEBUG 3/19/2026, 8:15:27 AM 1894471 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:15:27 AM 1894487 synced recovery +DEBUG 3/19/2026, 8:15:30 AM 1897129 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:15:30 AM 1897130 synced recovery +DEBUG 3/19/2026, 8:15:32 AM 1899412 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:15:32 AM 1899413 synced recovery +DEBUG 3/19/2026, 8:15:33 AM 1900615 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:15:33 AM 1900616 synced recovery +DEBUG 3/19/2026, 8:16:01 AM 1928659 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:16:01 AM 1928660 synced recovery +INFO 3/19/2026, 8:16:13 AM 1940014 [blur] 1 +INFO 3/19/2026, 8:16:13 AM 1940014 [win] blur +DEBUG 3/19/2026, 8:16:13 AM 1940248 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:16:13 AM 1940250 synced recovery +INFO 3/19/2026, 8:16:26 AM 1953694 [focus] 1 +DEBUG 3/19/2026, 8:16:30 AM 1956968 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:16:30 AM 1956969 synced recovery +DEBUG 3/19/2026, 8:16:31 AM 1958547 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:16:31 AM 1958548 synced recovery +DEBUG 3/19/2026, 8:16:49 AM 1976069 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:16:49 AM 1976071 synced recovery +DEBUG 3/19/2026, 8:16:53 AM 1980119 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:16:53 AM 1980120 synced recovery +DEBUG 3/19/2026, 8:16:58 AM 1984867 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:16:58 AM 1984869 synced recovery +DEBUG 3/19/2026, 8:16:59 AM 1986145 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:16:59 AM 1986146 synced recovery +DEBUG 3/19/2026, 8:17:01 AM 1988383 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:17:01 AM 1988384 synced recovery +DEBUG 3/19/2026, 8:17:08 AM 1995222 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:17:08 AM 1995223 synced recovery +DEBUG 3/19/2026, 8:17:10 AM 1997569 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:17:10 AM 1997570 synced recovery +DEBUG 3/19/2026, 8:17:11 AM 1998660 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:17:11 AM 1998661 synced recovery +DEBUG 3/19/2026, 8:17:13 AM 1999798 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:17:13 AM 1999799 synced recovery +DEBUG 3/19/2026, 8:17:14 AM 2001728 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:17:14 AM 2001729 synced recovery +DEBUG 3/19/2026, 8:17:17 AM 2004717 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:17:17 AM 2004721 synced recovery +DEBUG 3/19/2026, 8:17:19 AM 2005780 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:17:19 AM 2005781 synced recovery +DEBUG 3/19/2026, 8:17:23 AM 2009951 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:17:23 AM 2009951 synced recovery +INFO 3/19/2026, 8:18:48 AM 2095251 [blur] 1 +INFO 3/19/2026, 8:18:48 AM 2095251 [win] blur +INFO 3/19/2026, 8:18:58 AM 2105142 [focus] 1 +DEBUG 3/19/2026, 8:19:04 AM 2111223 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:19:04 AM 2111230 synced recovery +DEBUG 3/19/2026, 8:19:05 AM 2112556 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:19:05 AM 2112556 synced recovery +DEBUG 3/19/2026, 8:19:07 AM 2114064 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:19:07 AM 2114067 synced recovery +DEBUG 3/19/2026, 8:19:33 AM 2140410 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:19:33 AM 2140411 synced recovery +INFO 3/19/2026, 8:19:37 AM 2144001 [blur] 1 +INFO 3/19/2026, 8:19:37 AM 2144001 [win] blur +INFO 3/19/2026, 8:19:44 AM 2151684 [focus] 1 +DEBUG 3/19/2026, 8:19:47 AM 2153864 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:19:47 AM 2153864 synced recovery +DEBUG 3/19/2026, 8:19:50 AM 2156912 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:19:50 AM 2156916 synced recovery +DEBUG 3/19/2026, 8:19:53 AM 2160174 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:19:53 AM 2160175 synced recovery +DEBUG 3/19/2026, 8:19:58 AM 2165508 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:19:58 AM 2165509 synced recovery +DEBUG 3/19/2026, 8:20:02 AM 2169222 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:20:02 AM 2169223 synced recovery +DEBUG 3/19/2026, 8:20:04 AM 2171601 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:20:04 AM 2171602 synced recovery +DEBUG 3/19/2026, 8:20:07 AM 2174734 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:20:07 AM 2174734 synced recovery +DEBUG 3/19/2026, 8:20:09 AM 2176227 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:20:09 AM 2176228 synced recovery +DEBUG 3/19/2026, 8:20:16 AM 2183221 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:20:16 AM 2183222 synced recovery +DEBUG 3/19/2026, 8:20:19 AM 2186543 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:20:19 AM 2186544 synced recovery +DEBUG 3/19/2026, 8:20:22 AM 2189484 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:20:22 AM 2189484 synced recovery +DEBUG 3/19/2026, 8:20:24 AM 2191646 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:20:24 AM 2191647 synced recovery +DEBUG 3/19/2026, 8:20:29 AM 2195866 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:20:29 AM 2195867 synced recovery +DEBUG 3/19/2026, 8:20:30 AM 2197124 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:20:30 AM 2197125 synced recovery +DEBUG 3/19/2026, 8:20:32 AM 2198918 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:20:32 AM 2198918 synced recovery +INFO 3/19/2026, 8:20:44 AM 2210877 [blur] 1 +INFO 3/19/2026, 8:20:44 AM 2210877 [win] blur +INFO 3/19/2026, 8:21:12 AM 2239584 [focus] 1 +DEBUG 3/19/2026, 8:21:15 AM 2242275 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:21:15 AM 2242281 synced recovery +DEBUG 3/19/2026, 8:21:17 AM 2244023 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:21:17 AM 2244023 synced recovery +DEBUG 3/19/2026, 8:21:18 AM 2245693 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:21:18 AM 2245694 synced recovery +DEBUG 3/19/2026, 8:21:20 AM 2247483 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:21:20 AM 2247485 synced recovery +DEBUG 3/19/2026, 8:21:25 AM 2252384 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:21:25 AM 2252385 synced recovery +DEBUG 3/19/2026, 8:21:30 AM 2257017 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:21:30 AM 2257019 synced recovery +DEBUG 3/19/2026, 8:21:31 AM 2258339 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:21:31 AM 2258340 synced recovery +DEBUG 3/19/2026, 8:21:46 AM 2272846 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:21:46 AM 2272850 synced recovery +DEBUG 3/19/2026, 8:21:49 AM 2276340 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:21:49 AM 2276341 synced recovery +DEBUG 3/19/2026, 8:21:51 AM 2278113 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:21:51 AM 2278114 synced recovery +DEBUG 3/19/2026, 8:21:55 AM 2281964 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:21:55 AM 2281965 synced recovery +DEBUG 3/19/2026, 8:21:58 AM 2285671 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:21:58 AM 2285671 synced recovery +DEBUG 3/19/2026, 8:22:00 AM 2287682 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:22:00 AM 2287684 synced recovery +DEBUG 3/19/2026, 8:22:02 AM 2289223 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:22:02 AM 2289224 synced recovery +DEBUG 3/19/2026, 8:22:06 AM 2293343 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:22:06 AM 2293344 synced recovery +DEBUG 3/19/2026, 8:22:08 AM 2294933 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:22:08 AM 2294934 synced recovery +DEBUG 3/19/2026, 8:22:31 AM 2318643 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:22:31 AM 2318645 synced recovery +DEBUG 3/19/2026, 8:22:34 AM 2320853 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:22:34 AM 2320854 synced recovery +DEBUG 3/19/2026, 8:22:36 AM 2322792 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:22:36 AM 2322793 synced recovery +DEBUG 3/19/2026, 8:22:37 AM 2324013 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:22:37 AM 2324014 synced recovery +DEBUG 3/19/2026, 8:22:40 AM 2326950 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:22:40 AM 2326951 synced recovery +DEBUG 3/19/2026, 8:22:42 AM 2328920 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:22:42 AM 2328922 synced recovery +INFO 3/19/2026, 8:22:42 AM 2329339 [blur] 1 +INFO 3/19/2026, 8:22:42 AM 2329339 [win] blur +INFO 3/19/2026, 8:22:50 AM 2337014 [focus] 1 +INFO 3/19/2026, 8:23:13 AM 2360197 [blur] 1 +INFO 3/19/2026, 8:23:13 AM 2360197 [win] blur +INFO 3/19/2026, 8:23:54 AM 2401563 [focus] 1 +INFO 3/19/2026, 8:23:58 AM 2405389 [blur] 1 +INFO 3/19/2026, 8:23:58 AM 2405389 [win] blur +INFO 3/19/2026, 8:24:23 AM 2429844 [focus] 1 +DEBUG 3/19/2026, 8:24:26 AM 2433656 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:24:26 AM 2433657 synced recovery +DEBUG 3/19/2026, 8:24:30 AM 2437008 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:24:30 AM 2437009 synced recovery +DEBUG 3/19/2026, 8:24:37 AM 2444556 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:24:37 AM 2444563 synced recovery +INFO 3/19/2026, 8:24:42 AM 2449690 [blur] 1 +INFO 3/19/2026, 8:24:42 AM 2449691 [win] blur +INFO 3/19/2026, 8:25:11 AM 2478541 [focus] 1 +DEBUG 3/19/2026, 8:25:18 AM 2484750 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:25:18 AM 2484751 synced recovery +DEBUG 3/19/2026, 8:25:25 AM 2491932 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:25:25 AM 2491934 synced recovery +DEBUG 3/19/2026, 8:25:30 AM 2497056 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:25:30 AM 2497057 synced recovery +DEBUG 3/19/2026, 8:25:32 AM 2499136 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:25:32 AM 2499138 synced recovery +DEBUG 3/19/2026, 8:25:37 AM 2504284 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:25:37 AM 2504285 synced recovery +DEBUG 3/19/2026, 8:25:41 AM 2508375 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:25:41 AM 2508376 synced recovery +DEBUG 3/19/2026, 8:25:49 AM 2516284 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:25:49 AM 2516292 synced recovery +DEBUG 3/19/2026, 8:25:54 AM 2521563 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:25:54 AM 2521565 synced recovery +DEBUG 3/19/2026, 8:26:03 AM 2529847 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:26:03 AM 2529848 synced recovery +DEBUG 3/19/2026, 8:26:05 AM 2532159 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:26:05 AM 2532160 synced recovery +INFO 3/19/2026, 8:26:10 AM 2537077 [blur] 1 +INFO 3/19/2026, 8:26:10 AM 2537079 [win] blur +INFO 3/19/2026, 8:26:12 AM 2539265 [focus] 1 +DEBUG 3/19/2026, 8:26:20 AM 2547143 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:26:20 AM 2547144 synced recovery +INFO 3/19/2026, 8:26:24 AM 2550898 [blur] 1 +INFO 3/19/2026, 8:26:24 AM 2550898 [win] blur +DEBUG 3/19/2026, 8:26:24 AM 2551108 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:26:24 AM 2551125 synced recovery +INFO 3/19/2026, 8:26:33 AM 2560027 [focus] 1 +DEBUG 3/19/2026, 8:26:35 AM 2562229 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:26:35 AM 2562230 synced recovery +DEBUG 3/19/2026, 8:26:37 AM 2564144 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:26:37 AM 2564145 synced recovery +DEBUG 3/19/2026, 8:26:42 AM 2569365 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:26:42 AM 2569366 synced recovery +DEBUG 3/19/2026, 8:26:44 AM 2571310 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:26:44 AM 2571310 synced recovery +DEBUG 3/19/2026, 8:26:47 AM 2574689 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:26:47 AM 2574690 synced recovery +DEBUG 3/19/2026, 8:26:54 AM 2581140 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:26:54 AM 2581141 synced recovery +DEBUG 3/19/2026, 8:26:56 AM 2583011 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:26:56 AM 2583015 synced recovery +DEBUG 3/19/2026, 8:26:57 AM 2584176 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:26:57 AM 2584177 synced recovery +DEBUG 3/19/2026, 8:27:00 AM 2587383 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:27:00 AM 2587384 synced recovery +DEBUG 3/19/2026, 8:27:05 AM 2592342 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:27:05 AM 2592346 synced recovery +DEBUG 3/19/2026, 8:27:07 AM 2593741 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:27:07 AM 2593742 synced recovery +DEBUG 3/19/2026, 8:27:08 AM 2595593 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:27:08 AM 2595594 synced recovery +DEBUG 3/19/2026, 8:27:11 AM 2598572 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:27:11 AM 2598573 synced recovery +INFO 3/19/2026, 8:27:13 AM 2600659 [blur] 1 +INFO 3/19/2026, 8:27:13 AM 2600659 [win] blur +INFO 3/19/2026, 8:27:38 AM 2624828 [focus] 1 +DEBUG 3/19/2026, 8:27:42 AM 2629333 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:27:43 AM 2629909 synced recovery +DEBUG 3/19/2026, 8:27:45 AM 2632212 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:27:45 AM 2632258 synced recovery +DEBUG 3/19/2026, 8:27:49 AM 2636458 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:27:49 AM 2636538 synced recovery +DEBUG 3/19/2026, 8:27:51 AM 2638734 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:27:52 AM 2638835 synced recovery +DEBUG 3/19/2026, 8:27:55 AM 2641958 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:27:55 AM 2641962 synced recovery +DEBUG 3/19/2026, 8:28:01 AM 2647876 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:28:01 AM 2647877 synced recovery +DEBUG 3/19/2026, 8:28:07 AM 2653760 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:28:07 AM 2653965 synced recovery +DEBUG 3/19/2026, 8:28:08 AM 2654890 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:28:08 AM 2655084 synced recovery +DEBUG 3/19/2026, 8:28:09 AM 2656560 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:28:09 AM 2656594 synced recovery +DEBUG 3/19/2026, 8:28:13 AM 2660502 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:28:13 AM 2660503 synced recovery +DEBUG 3/19/2026, 8:28:18 AM 2665019 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:28:18 AM 2665262 synced recovery +DEBUG 3/19/2026, 8:28:20 AM 2667335 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:28:20 AM 2667336 synced recovery +DEBUG 3/19/2026, 8:28:23 AM 2669979 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:28:23 AM 2669980 synced recovery +DEBUG 3/19/2026, 8:28:25 AM 2671760 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:28:25 AM 2671761 synced recovery +DEBUG 3/19/2026, 8:28:27 AM 2674246 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:28:27 AM 2674250 synced recovery +DEBUG 3/19/2026, 8:28:28 AM 2675575 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:28:28 AM 2675576 synced recovery +DEBUG 3/19/2026, 8:28:31 AM 2678625 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:28:31 AM 2678626 synced recovery +DEBUG 3/19/2026, 8:28:33 AM 2680460 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:28:33 AM 2680461 synced recovery +DEBUG 3/19/2026, 8:28:36 AM 2682802 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:28:36 AM 2682851 synced recovery +DEBUG 3/19/2026, 8:28:38 AM 2685413 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:28:38 AM 2685414 synced recovery +DEBUG 3/19/2026, 8:29:41 AM 2748419 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:29:41 AM 2748420 synced recovery +DEBUG 3/19/2026, 8:29:42 AM 2749548 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:29:42 AM 2749559 synced recovery +DEBUG 3/19/2026, 8:29:44 AM 2751062 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:29:44 AM 2751065 synced recovery +DEBUG 3/19/2026, 8:29:45 AM 2752259 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:29:45 AM 2752260 synced recovery +DEBUG 3/19/2026, 8:29:47 AM 2753845 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:29:47 AM 2753851 synced recovery +DEBUG 3/19/2026, 8:29:48 AM 2755257 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:29:48 AM 2755258 synced recovery +DEBUG 3/19/2026, 8:29:49 AM 2756522 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:29:49 AM 2756523 synced recovery +DEBUG 3/19/2026, 8:30:16 AM 2783663 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:30:16 AM 2783668 synced recovery +INFO 3/19/2026, 8:30:42 AM 2809551 [blur] 1 +INFO 3/19/2026, 8:30:42 AM 2809551 [win] blur +INFO 3/19/2026, 8:30:55 AM 2822687 [focus] 1 +DEBUG 3/19/2026, 8:31:09 AM 2835829 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:31:09 AM 2835846 synced recovery +DEBUG 3/19/2026, 8:31:10 AM 2837025 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:31:10 AM 2837027 synced recovery +DEBUG 3/19/2026, 8:31:13 AM 2840186 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:31:13 AM 2840188 synced recovery +DEBUG 3/19/2026, 8:31:19 AM 2846171 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:31:19 AM 2846172 synced recovery +DEBUG 3/19/2026, 8:31:23 AM 2850273 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:31:23 AM 2850275 synced recovery +DEBUG 3/19/2026, 8:31:30 AM 2856921 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:31:30 AM 2856926 synced recovery +DEBUG 3/19/2026, 8:31:51 AM 2877765 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:31:51 AM 2877767 synced recovery +DEBUG 3/19/2026, 8:31:54 AM 2881264 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:31:54 AM 2881266 synced recovery +DEBUG 3/19/2026, 8:31:57 AM 2884091 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:31:57 AM 2884092 synced recovery +DEBUG 3/19/2026, 8:31:59 AM 2886328 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:31:59 AM 2886331 synced recovery +DEBUG 3/19/2026, 8:32:02 AM 2888975 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:32:02 AM 2888986 synced recovery +DEBUG 3/19/2026, 8:32:03 AM 2890126 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:32:03 AM 2890127 synced recovery +DEBUG 3/19/2026, 8:32:05 AM 2892494 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:32:05 AM 2892495 synced recovery +INFO 3/19/2026, 8:32:16 AM 2903009 [RenderProcess 1][Log] File.reloadContent, {"delayRefresh":true,"skipChangeCount":true,"skipStore":true} +INFO 3/19/2026, 8:32:16 AM 2903012 [RenderProcess 1][Log] reset NodeMap +INFO 3/19/2026, 8:32:20 AM 2907673 [blur] 1 +INFO 3/19/2026, 8:32:20 AM 2907674 [win] blur +INFO 3/19/2026, 8:32:23 AM 2910145 [focus] 1 +DEBUG 3/19/2026, 8:32:28 AM 2914911 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:32:28 AM 2914928 synced recovery +DEBUG 3/19/2026, 8:32:29 AM 2916584 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:32:29 AM 2916590 synced recovery +DEBUG 3/19/2026, 8:32:31 AM 2918151 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:32:31 AM 2918159 synced recovery +DEBUG 3/19/2026, 8:32:33 AM 2919977 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:32:33 AM 2919991 synced recovery +DEBUG 3/19/2026, 8:32:34 AM 2921135 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:32:34 AM 2921136 synced recovery +DEBUG 3/19/2026, 8:32:36 AM 2922960 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:32:36 AM 2922961 synced recovery +DEBUG 3/19/2026, 8:32:43 AM 2929987 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:32:43 AM 2929990 synced recovery +DEBUG 3/19/2026, 8:32:46 AM 2933206 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:32:46 AM 2933214 synced recovery +DEBUG 3/19/2026, 8:32:47 AM 2934403 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:32:47 AM 2934404 synced recovery +DEBUG 3/19/2026, 8:32:48 AM 2935578 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:32:48 AM 2935582 synced recovery +DEBUG 3/19/2026, 8:32:50 AM 2937504 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:32:50 AM 2937506 synced recovery +DEBUG 3/19/2026, 8:32:52 AM 2939494 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:32:52 AM 2939497 synced recovery +DEBUG 3/19/2026, 8:32:53 AM 2940660 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:32:53 AM 2940664 synced recovery +DEBUG 3/19/2026, 8:32:55 AM 2942623 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:32:55 AM 2942624 synced recovery +DEBUG 3/19/2026, 8:33:08 AM 2955693 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:33:08 AM 2955695 synced recovery +DEBUG 3/19/2026, 8:33:14 AM 2961462 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:33:14 AM 2961463 synced recovery +DEBUG 3/19/2026, 8:33:17 AM 2963787 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:33:17 AM 2963788 synced recovery +DEBUG 3/19/2026, 8:33:18 AM 2965383 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:33:18 AM 2965388 synced recovery +DEBUG 3/19/2026, 8:33:21 AM 2967823 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:33:21 AM 2967825 synced recovery +DEBUG 3/19/2026, 8:33:24 AM 2970981 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:33:24 AM 2970982 synced recovery +DEBUG 3/19/2026, 8:33:27 AM 2974113 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:33:27 AM 2974119 synced recovery +DEBUG 3/19/2026, 8:33:29 AM 2976022 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:33:29 AM 2976024 synced recovery +DEBUG 3/19/2026, 8:33:30 AM 2977459 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:33:30 AM 2977460 synced recovery +DEBUG 3/19/2026, 8:33:45 AM 2992699 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:33:45 AM 2992702 synced recovery +DEBUG 3/19/2026, 8:33:47 AM 2994670 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:33:47 AM 2994677 synced recovery +DEBUG 3/19/2026, 8:33:56 AM 3003478 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:33:56 AM 3003479 synced recovery +DEBUG 3/19/2026, 8:33:58 AM 3005156 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:33:58 AM 3005158 synced recovery +DEBUG 3/19/2026, 8:34:08 AM 3015706 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:34:08 AM 3015709 synced recovery +INFO 3/19/2026, 8:34:09 AM 3015787 [blur] 1 +INFO 3/19/2026, 8:34:09 AM 3015788 [win] blur +INFO 3/19/2026, 8:34:44 AM 3051033 [focus] 1 +DEBUG 3/19/2026, 8:34:47 AM 3054634 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:34:47 AM 3054635 synced recovery +DEBUG 3/19/2026, 8:34:50 AM 3057242 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:34:50 AM 3057243 synced recovery +DEBUG 3/19/2026, 8:34:52 AM 3058781 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:34:52 AM 3058784 synced recovery +DEBUG 3/19/2026, 8:34:56 AM 3062842 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:34:56 AM 3062843 synced recovery +DEBUG 3/19/2026, 8:34:59 AM 3066192 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:34:59 AM 3066193 synced recovery +DEBUG 3/19/2026, 8:35:02 AM 3069473 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:35:02 AM 3069476 synced recovery +DEBUG 3/19/2026, 8:35:12 AM 3079229 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:35:12 AM 3079230 synced recovery +DEBUG 3/19/2026, 8:35:16 AM 3082998 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:35:16 AM 3083001 synced recovery +DEBUG 3/19/2026, 8:35:20 AM 3086807 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:35:20 AM 3086812 synced recovery +DEBUG 3/19/2026, 8:35:24 AM 3091155 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:35:24 AM 3091156 synced recovery +DEBUG 3/19/2026, 8:35:26 AM 3093448 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:35:26 AM 3093449 synced recovery +DEBUG 3/19/2026, 8:35:29 AM 3095977 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:35:29 AM 3095978 synced recovery +DEBUG 3/19/2026, 8:35:32 AM 3098807 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:35:32 AM 3098809 synced recovery +DEBUG 3/19/2026, 8:35:37 AM 3103787 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:35:37 AM 3103789 synced recovery +DEBUG 3/19/2026, 8:35:51 AM 3118390 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:35:51 AM 3118391 synced recovery +DEBUG 3/19/2026, 8:35:53 AM 3120254 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:35:53 AM 3120255 synced recovery +DEBUG 3/19/2026, 8:35:55 AM 3121787 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:35:55 AM 3121792 synced recovery +DEBUG 3/19/2026, 8:36:16 AM 3143633 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:16 AM 3143634 synced recovery +DEBUG 3/19/2026, 8:36:18 AM 3144845 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:18 AM 3144846 synced recovery +DEBUG 3/19/2026, 8:36:19 AM 3146073 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:19 AM 3146074 synced recovery +DEBUG 3/19/2026, 8:36:20 AM 3147226 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:20 AM 3147227 synced recovery +DEBUG 3/19/2026, 8:36:22 AM 3148828 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:22 AM 3148833 synced recovery +DEBUG 3/19/2026, 8:36:23 AM 3150273 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:23 AM 3150274 synced recovery +DEBUG 3/19/2026, 8:36:25 AM 3152662 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:25 AM 3152679 synced recovery +DEBUG 3/19/2026, 8:36:27 AM 3153923 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:27 AM 3153924 synced recovery +DEBUG 3/19/2026, 8:36:28 AM 3155625 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:28 AM 3155626 synced recovery +DEBUG 3/19/2026, 8:36:31 AM 3158530 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:31 AM 3158533 synced recovery +DEBUG 3/19/2026, 8:36:34 AM 3160954 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:34 AM 3160955 synced recovery +DEBUG 3/19/2026, 8:36:36 AM 3162935 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:36 AM 3162936 synced recovery +DEBUG 3/19/2026, 8:36:40 AM 3167151 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:40 AM 3167153 synced recovery +DEBUG 3/19/2026, 8:36:41 AM 3168384 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:41 AM 3168385 synced recovery +DEBUG 3/19/2026, 8:36:42 AM 3169726 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:42 AM 3169730 synced recovery +DEBUG 3/19/2026, 8:36:44 AM 3171106 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:44 AM 3171115 synced recovery +DEBUG 3/19/2026, 8:36:45 AM 3172279 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:45 AM 3172283 synced recovery +DEBUG 3/19/2026, 8:36:48 AM 3175712 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:48 AM 3175716 synced recovery +DEBUG 3/19/2026, 8:36:50 AM 3176904 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:50 AM 3176905 synced recovery +DEBUG 3/19/2026, 8:36:52 AM 3179268 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:52 AM 3179269 synced recovery +DEBUG 3/19/2026, 8:36:59 AM 3185781 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:36:59 AM 3185782 synced recovery +DEBUG 3/19/2026, 8:37:12 AM 3199279 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:37:12 AM 3199280 synced recovery +DEBUG 3/19/2026, 8:37:15 AM 3202043 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:37:15 AM 3202048 synced recovery +DEBUG 3/19/2026, 8:37:17 AM 3203971 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:37:17 AM 3203975 synced recovery +DEBUG 3/19/2026, 8:37:20 AM 3207103 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:37:20 AM 3207111 synced recovery +DEBUG 3/19/2026, 8:37:23 AM 3210696 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:37:23 AM 3210700 synced recovery +INFO 3/19/2026, 8:37:24 AM 3210849 [blur] 1 +INFO 3/19/2026, 8:37:24 AM 3210852 [win] blur +INFO 3/19/2026, 8:37:49 AM 3236632 [focus] 1 +DEBUG 3/19/2026, 8:37:54 AM 3241092 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:37:54 AM 3241092 synced recovery +DEBUG 3/19/2026, 8:37:55 AM 3242315 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:37:55 AM 3242317 synced recovery +DEBUG 3/19/2026, 8:37:56 AM 3243555 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:37:56 AM 3243556 synced recovery +DEBUG 3/19/2026, 8:37:57 AM 3244733 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:37:57 AM 3244736 synced recovery +DEBUG 3/19/2026, 8:38:04 AM 3251568 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:38:04 AM 3251569 synced recovery +DEBUG 3/19/2026, 8:38:06 AM 3253555 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:38:06 AM 3253556 synced recovery +DEBUG 3/19/2026, 8:38:28 AM 3275324 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:38:28 AM 3275329 synced recovery +DEBUG 3/19/2026, 8:38:29 AM 3276695 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:38:29 AM 3276696 synced recovery +DEBUG 3/19/2026, 8:38:32 AM 3278807 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:38:32 AM 3278808 synced recovery +DEBUG 3/19/2026, 8:38:33 AM 3280146 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:38:33 AM 3280148 synced recovery +DEBUG 3/19/2026, 8:38:37 AM 3284111 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:38:37 AM 3284114 synced recovery +DEBUG 3/19/2026, 8:38:41 AM 3287812 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:38:41 AM 3287819 synced recovery +DEBUG 3/19/2026, 8:38:58 AM 3304877 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:38:58 AM 3304884 synced recovery +DEBUG 3/19/2026, 8:39:02 AM 3309047 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:02 AM 3309048 synced recovery +DEBUG 3/19/2026, 8:39:03 AM 3310308 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:03 AM 3310310 synced recovery +DEBUG 3/19/2026, 8:39:06 AM 3312967 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:06 AM 3312988 synced recovery +DEBUG 3/19/2026, 8:39:07 AM 3314147 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:07 AM 3314148 synced recovery +DEBUG 3/19/2026, 8:39:08 AM 3315301 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:08 AM 3315308 synced recovery +DEBUG 3/19/2026, 8:39:09 AM 3316474 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:09 AM 3316481 synced recovery +DEBUG 3/19/2026, 8:39:15 AM 3321882 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:15 AM 3321883 synced recovery +DEBUG 3/19/2026, 8:39:16 AM 3323066 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:16 AM 3323069 synced recovery +DEBUG 3/19/2026, 8:39:17 AM 3324253 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:17 AM 3324259 synced recovery +DEBUG 3/19/2026, 8:39:18 AM 3325459 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:18 AM 3325466 synced recovery +DEBUG 3/19/2026, 8:39:21 AM 3328179 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:21 AM 3328180 synced recovery +DEBUG 3/19/2026, 8:39:26 AM 3332843 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:26 AM 3332847 synced recovery +DEBUG 3/19/2026, 8:39:30 AM 3337529 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:30 AM 3337530 synced recovery +DEBUG 3/19/2026, 8:39:33 AM 3339947 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:33 AM 3339949 synced recovery +DEBUG 3/19/2026, 8:39:34 AM 3341094 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:34 AM 3341095 synced recovery +DEBUG 3/19/2026, 8:39:37 AM 3344407 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:37 AM 3344412 synced recovery +DEBUG 3/19/2026, 8:39:39 AM 3346706 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:39 AM 3346722 synced recovery +DEBUG 3/19/2026, 8:39:41 AM 3348137 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:41 AM 3348139 synced recovery +DEBUG 3/19/2026, 8:39:43 AM 3350029 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:43 AM 3350059 synced recovery +DEBUG 3/19/2026, 8:39:44 AM 3351450 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:44 AM 3351451 synced recovery +DEBUG 3/19/2026, 8:39:48 AM 3355426 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:48 AM 3355427 synced recovery +DEBUG 3/19/2026, 8:39:50 AM 3356828 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:50 AM 3356830 synced recovery +DEBUG 3/19/2026, 8:39:52 AM 3358901 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:52 AM 3358912 synced recovery +DEBUG 3/19/2026, 8:39:54 AM 3361141 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:54 AM 3361164 synced recovery +DEBUG 3/19/2026, 8:39:56 AM 3363410 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:39:56 AM 3363410 synced recovery +DEBUG 3/19/2026, 8:40:00 AM 3367217 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:00 AM 3367218 synced recovery +DEBUG 3/19/2026, 8:40:01 AM 3368632 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:01 AM 3368635 synced recovery +DEBUG 3/19/2026, 8:40:03 AM 3369972 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:03 AM 3369974 synced recovery +DEBUG 3/19/2026, 8:40:05 AM 3372039 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:05 AM 3372043 synced recovery +DEBUG 3/19/2026, 8:40:06 AM 3373564 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:06 AM 3373571 synced recovery +DEBUG 3/19/2026, 8:40:08 AM 3375192 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:08 AM 3375193 synced recovery +DEBUG 3/19/2026, 8:40:12 AM 3378884 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:12 AM 3378884 synced recovery +DEBUG 3/19/2026, 8:40:14 AM 3381028 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:14 AM 3381029 synced recovery +DEBUG 3/19/2026, 8:40:15 AM 3382702 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:15 AM 3382703 synced recovery +DEBUG 3/19/2026, 8:40:17 AM 3383878 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:17 AM 3383880 synced recovery +DEBUG 3/19/2026, 8:40:19 AM 3385944 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:19 AM 3385951 synced recovery +DEBUG 3/19/2026, 8:40:20 AM 3387097 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:20 AM 3387100 synced recovery +DEBUG 3/19/2026, 8:40:21 AM 3388259 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:21 AM 3388266 synced recovery +DEBUG 3/19/2026, 8:40:23 AM 3390072 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:23 AM 3390075 synced recovery +DEBUG 3/19/2026, 8:40:24 AM 3391356 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:24 AM 3391357 synced recovery +DEBUG 3/19/2026, 8:40:25 AM 3392543 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:25 AM 3392544 synced recovery +DEBUG 3/19/2026, 8:40:26 AM 3393732 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:26 AM 3393734 synced recovery +DEBUG 3/19/2026, 8:40:28 AM 3395369 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:28 AM 3395495 synced recovery +DEBUG 3/19/2026, 8:40:35 AM 3402352 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:35 AM 3402362 synced recovery +DEBUG 3/19/2026, 8:40:39 AM 3406085 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:39 AM 3406087 synced recovery +DEBUG 3/19/2026, 8:40:41 AM 3408403 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:41 AM 3408404 synced recovery +DEBUG 3/19/2026, 8:40:42 AM 3409612 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:42 AM 3409617 synced recovery +DEBUG 3/19/2026, 8:40:44 AM 3410853 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:44 AM 3410854 synced recovery +DEBUG 3/19/2026, 8:40:45 AM 3412236 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:45 AM 3412237 synced recovery +DEBUG 3/19/2026, 8:40:47 AM 3414222 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:40:47 AM 3414222 [blur] 1 +INFO 3/19/2026, 8:40:47 AM 3414222 [win] blur +INFO 3/19/2026, 8:40:47 AM 3414350 synced recovery +INFO 3/19/2026, 8:40:49 AM 3416456 [focus] 1 +INFO 3/19/2026, 8:40:50 AM 3416935 [blur] 1 +INFO 3/19/2026, 8:40:50 AM 3416935 [win] blur +INFO 3/19/2026, 8:40:50 AM 3417596 [focus] 1 +INFO 3/19/2026, 8:40:55 AM 3422587 [blur] 1 +INFO 3/19/2026, 8:40:55 AM 3422588 [win] blur +INFO 3/19/2026, 8:41:01 AM 3428677 [focus] 1 +INFO 3/19/2026, 8:41:10 AM 3437712 [blur] 1 +INFO 3/19/2026, 8:41:10 AM 3437712 [win] blur +INFO 3/19/2026, 8:41:11 AM 3438366 [focus] 1 +INFO 3/19/2026, 8:41:12 AM 3439027 [blur] 1 +INFO 3/19/2026, 8:41:12 AM 3439027 [win] blur +INFO 3/19/2026, 8:41:12 AM 3439263 [focus] 1 +INFO 3/19/2026, 8:41:15 AM 3442329 [blur] 1 +INFO 3/19/2026, 8:41:15 AM 3442330 [win] blur +INFO 3/19/2026, 8:41:15 AM 3442334 [focus] 1 +INFO 3/19/2026, 8:41:15 AM 3442509 [blur] 1 +INFO 3/19/2026, 8:41:15 AM 3442511 [win] blur +INFO 3/19/2026, 8:41:15 AM 3442511 [focus] 1 +INFO 3/19/2026, 8:41:16 AM 3443029 [blur] 1 +INFO 3/19/2026, 8:41:16 AM 3443031 [win] blur +INFO 3/19/2026, 8:41:16 AM 3443044 [focus] 1 +INFO 3/19/2026, 8:41:16 AM 3443715 [blur] 1 +INFO 3/19/2026, 8:41:16 AM 3443715 [win] blur +INFO 3/19/2026, 8:41:16 AM 3443715 [focus] 1 +INFO 3/19/2026, 8:41:22 AM 3449344 [blur] 1 +INFO 3/19/2026, 8:41:22 AM 3449345 [win] blur +INFO 3/19/2026, 8:42:27 AM 3513931 [focus] 1 +DEBUG 3/19/2026, 8:42:33 AM 3520370 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:42:33 AM 3520420 synced recovery +DEBUG 3/19/2026, 8:42:34 AM 3520828 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:42:34 AM 3520837 synced recovery +DEBUG 3/19/2026, 8:42:37 AM 3523919 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:42:37 AM 3523936 synced recovery +DEBUG 3/19/2026, 8:42:40 AM 3527676 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:42:40 AM 3527701 synced recovery +DEBUG 3/19/2026, 8:42:45 AM 3532229 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:42:45 AM 3532230 synced recovery +DEBUG 3/19/2026, 8:42:49 AM 3535823 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:42:49 AM 3535825 synced recovery +DEBUG 3/19/2026, 8:42:50 AM 3537274 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:42:50 AM 3537277 synced recovery +DEBUG 3/19/2026, 8:42:51 AM 3538469 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:42:51 AM 3538471 synced recovery +DEBUG 3/19/2026, 8:42:53 AM 3539815 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:42:53 AM 3539816 synced recovery +DEBUG 3/19/2026, 8:42:58 AM 3545733 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:42:58 AM 3545734 synced recovery +DEBUG 3/19/2026, 8:43:00 AM 3546929 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:43:00 AM 3546930 synced recovery +DEBUG 3/19/2026, 8:43:01 AM 3548075 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:43:01 AM 3548081 synced recovery +DEBUG 3/19/2026, 8:43:02 AM 3549306 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:43:02 AM 3549307 synced recovery +DEBUG 3/19/2026, 8:43:06 AM 3552904 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:43:06 AM 3552910 synced recovery +DEBUG 3/19/2026, 8:43:09 AM 3556343 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:43:09 AM 3556344 synced recovery +DEBUG 3/19/2026, 8:43:24 AM 3570957 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:43:24 AM 3570958 synced recovery +DEBUG 3/19/2026, 8:43:29 AM 3576423 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:43:29 AM 3576424 synced recovery +INFO 3/19/2026, 8:43:33 AM 3580333 [blur] 1 +INFO 3/19/2026, 8:43:33 AM 3580337 [win] blur +INFO 3/19/2026, 8:43:35 AM 3582153 [focus] 1 +INFO 3/19/2026, 8:43:35 AM 3582385 [blur] 1 +INFO 3/19/2026, 8:43:35 AM 3582385 [win] blur +INFO 3/19/2026, 8:43:41 AM 3588560 [focus] 1 +DEBUG 3/19/2026, 8:43:44 AM 3590822 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:43:44 AM 3590822 synced recovery +DEBUG 3/19/2026, 8:43:45 AM 3591987 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:43:45 AM 3591989 synced recovery +INFO 3/19/2026, 8:44:06 AM 3613056 [blur] 1 +INFO 3/19/2026, 8:44:06 AM 3613056 [win] blur +INFO 3/19/2026, 8:44:07 AM 3614357 [focus] 1 +DEBUG 3/19/2026, 8:44:26 AM 3632830 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:44:26 AM 3632836 synced recovery +DEBUG 3/19/2026, 8:44:28 AM 3634983 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:44:28 AM 3634984 synced recovery +DEBUG 3/19/2026, 8:44:29 AM 3636221 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:44:29 AM 3636222 synced recovery +DEBUG 3/19/2026, 8:44:31 AM 3638690 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:44:31 AM 3638691 synced recovery +DEBUG 3/19/2026, 8:44:33 AM 3639894 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:44:33 AM 3639895 synced recovery +DEBUG 3/19/2026, 8:44:34 AM 3641269 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:44:34 AM 3641271 synced recovery +DEBUG 3/19/2026, 8:44:41 AM 3647834 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:44:41 AM 3647843 synced recovery +DEBUG 3/19/2026, 8:45:37 AM 3704486 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:45:37 AM 3704487 synced recovery +DEBUG 3/19/2026, 8:45:42 AM 3709465 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:45:42 AM 3709466 synced recovery +DEBUG 3/19/2026, 8:45:48 AM 3715634 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:45:48 AM 3715634 synced recovery +DEBUG 3/19/2026, 8:45:56 AM 3723271 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:45:56 AM 3723272 synced recovery +DEBUG 3/19/2026, 8:45:59 AM 3725803 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:45:59 AM 3725804 synced recovery +DEBUG 3/19/2026, 8:46:10 AM 3736849 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:46:10 AM 3736850 synced recovery +DEBUG 3/19/2026, 8:46:12 AM 3738892 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:46:12 AM 3738893 synced recovery +DEBUG 3/19/2026, 8:46:23 AM 3749876 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:46:23 AM 3749886 synced recovery +INFO 3/19/2026, 8:47:13 AM 3799976 [blur] 1 +INFO 3/19/2026, 8:47:13 AM 3799977 [win] blur +INFO 3/19/2026, 8:48:17 AM 3863811 [focus] 1 +DEBUG 3/19/2026, 8:48:43 AM 3890625 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:48:43 AM 3890671 synced recovery +DEBUG 3/19/2026, 8:48:46 AM 3892874 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:48:46 AM 3892884 synced recovery +DEBUG 3/19/2026, 8:48:52 AM 3899595 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:48:52 AM 3899596 synced recovery +DEBUG 3/19/2026, 8:49:00 AM 3907106 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:49:00 AM 3907141 synced recovery +DEBUG 3/19/2026, 8:49:02 AM 3909459 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:49:02 AM 3909462 synced recovery +INFO 3/19/2026, 8:49:07 AM 3913907 [blur] 1 +INFO 3/19/2026, 8:49:07 AM 3913908 [win] blur +INFO 3/19/2026, 8:49:16 AM 3923458 [focus] 1 +DEBUG 3/19/2026, 8:49:20 AM 3927175 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:49:20 AM 3927179 synced recovery +DEBUG 3/19/2026, 8:49:24 AM 3930914 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:49:24 AM 3930918 synced recovery +DEBUG 3/19/2026, 8:49:29 AM 3936662 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:49:29 AM 3936665 synced recovery +DEBUG 3/19/2026, 8:49:33 AM 3939907 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:49:33 AM 3939920 synced recovery +DEBUG 3/19/2026, 8:49:40 AM 3947647 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:49:40 AM 3947661 synced recovery +INFO 3/19/2026, 8:49:41 AM 3948561 [blur] 1 +INFO 3/19/2026, 8:49:41 AM 3948561 [win] blur +INFO 3/19/2026, 8:49:42 AM 3949422 [focus] 1 +INFO 3/19/2026, 8:49:44 AM 3950809 [blur] 1 +INFO 3/19/2026, 8:49:44 AM 3950809 [win] blur +INFO 3/19/2026, 8:49:59 AM 3965979 [focus] 1 +DEBUG 3/19/2026, 8:50:04 AM 3971115 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:50:04 AM 3971143 synced recovery +DEBUG 3/19/2026, 8:50:10 AM 3977107 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:50:10 AM 3977108 synced recovery +DEBUG 3/19/2026, 8:50:10 AM 3977241 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:50:10 AM 3977242 synced recovery +DEBUG 3/19/2026, 8:50:15 AM 3982680 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:50:15 AM 3982681 synced recovery +DEBUG 3/19/2026, 8:50:21 AM 3988352 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:50:21 AM 3988361 synced recovery +INFO 3/19/2026, 8:50:24 AM 3990836 [blur] 1 +INFO 3/19/2026, 8:50:24 AM 3990837 [win] blur +INFO 3/19/2026, 8:50:28 AM 3995559 [focus] 1 +DEBUG 3/19/2026, 8:50:33 AM 4000301 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:50:33 AM 4000302 synced recovery +DEBUG 3/19/2026, 8:50:36 AM 4002750 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:50:36 AM 4002751 synced recovery +DEBUG 3/19/2026, 8:50:40 AM 4007404 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:50:40 AM 4007405 synced recovery +DEBUG 3/19/2026, 8:50:45 AM 4012252 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:50:45 AM 4012254 synced recovery +DEBUG 3/19/2026, 8:50:47 AM 4013874 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:50:47 AM 4013875 synced recovery +DEBUG 3/19/2026, 8:50:51 AM 4018730 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:50:51 AM 4018731 synced recovery +DEBUG 3/19/2026, 8:50:55 AM 4022600 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:50:55 AM 4022601 synced recovery +DEBUG 3/19/2026, 8:51:04 AM 4031172 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:51:04 AM 4031187 synced recovery +DEBUG 3/19/2026, 8:51:06 AM 4032811 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:51:06 AM 4032814 synced recovery +DEBUG 3/19/2026, 8:51:09 AM 4036093 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:51:09 AM 4036094 synced recovery +DEBUG 3/19/2026, 8:51:12 AM 4038911 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:51:12 AM 4038914 synced recovery +DEBUG 3/19/2026, 8:51:16 AM 4043340 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:51:16 AM 4043341 synced recovery +DEBUG 3/19/2026, 8:51:18 AM 4045153 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:51:18 AM 4045154 synced recovery +DEBUG 3/19/2026, 8:51:21 AM 4048620 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:51:21 AM 4048622 synced recovery +DEBUG 3/19/2026, 8:51:26 AM 4053500 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:51:26 AM 4053536 synced recovery +DEBUG 3/19/2026, 8:51:35 AM 4062327 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:51:35 AM 4062329 synced recovery +DEBUG 3/19/2026, 8:51:36 AM 4063554 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:51:36 AM 4063556 synced recovery +DEBUG 3/19/2026, 8:51:38 AM 4065137 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:51:38 AM 4065141 synced recovery +DEBUG 3/19/2026, 8:51:43 AM 4070408 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:51:43 AM 4070412 synced recovery +DEBUG 3/19/2026, 8:51:45 AM 4072263 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:51:45 AM 4072264 synced recovery +DEBUG 3/19/2026, 8:51:47 AM 4073820 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:51:47 AM 4073821 synced recovery +DEBUG 3/19/2026, 8:51:50 AM 4077617 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:51:50 AM 4077620 synced recovery +DEBUG 3/19/2026, 8:51:57 AM 4083806 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:51:57 AM 4083807 synced recovery +DEBUG 3/19/2026, 8:51:59 AM 4086691 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:51:59 AM 4086692 synced recovery +DEBUG 3/19/2026, 8:52:06 AM 4093182 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:52:06 AM 4093185 synced recovery +DEBUG 3/19/2026, 8:52:08 AM 4095572 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:52:08 AM 4095573 synced recovery +DEBUG 3/19/2026, 8:52:09 AM 4096737 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:52:09 AM 4096738 synced recovery +DEBUG 3/19/2026, 8:52:22 AM 4109278 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:52:22 AM 4109281 synced recovery +DEBUG 3/19/2026, 8:52:24 AM 4111648 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:52:24 AM 4111649 synced recovery +DEBUG 3/19/2026, 8:52:26 AM 4113715 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:52:26 AM 4113717 synced recovery +DEBUG 3/19/2026, 8:52:34 AM 4121709 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:52:34 AM 4121710 synced recovery +DEBUG 3/19/2026, 8:52:36 AM 4123440 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:52:36 AM 4123441 synced recovery +DEBUG 3/19/2026, 8:52:38 AM 4125385 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:52:38 AM 4125386 synced recovery +DEBUG 3/19/2026, 8:52:40 AM 4126934 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:52:40 AM 4126938 synced recovery +DEBUG 3/19/2026, 8:52:43 AM 4130122 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:52:43 AM 4130125 synced recovery +DEBUG 3/19/2026, 8:52:48 AM 4134770 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:52:48 AM 4134772 synced recovery +DEBUG 3/19/2026, 8:52:52 AM 4139213 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:52:52 AM 4139218 synced recovery +DEBUG 3/19/2026, 8:52:55 AM 4141888 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:52:55 AM 4141889 synced recovery +DEBUG 3/19/2026, 8:52:56 AM 4143488 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:52:56 AM 4143489 synced recovery +DEBUG 3/19/2026, 8:53:23 AM 4170446 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:53:23 AM 4170449 synced recovery +DEBUG 3/19/2026, 8:53:25 AM 4172056 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:53:25 AM 4172056 synced recovery +DEBUG 3/19/2026, 8:53:28 AM 4174953 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:53:28 AM 4174955 synced recovery +DEBUG 3/19/2026, 8:53:29 AM 4176479 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:53:29 AM 4176481 synced recovery +DEBUG 3/19/2026, 8:53:39 AM 4186645 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 8:53:39 AM 4186645 synced recovery +INFO 3/19/2026, 8:54:01 AM 4208021 [blur] 1 +INFO 3/19/2026, 8:54:01 AM 4208021 [win] blur +INFO 3/19/2026, 8:54:17 AM 4223882 [focus] 1 +INFO 3/19/2026, 8:54:27 AM 4234466 [blur] 1 +INFO 3/19/2026, 8:54:27 AM 4234466 [win] blur +INFO 3/19/2026, 8:54:38 AM 4245371 [focus] 1 +INFO 3/19/2026, 8:56:01 AM 4327915 [blur] 1 +INFO 3/19/2026, 8:56:01 AM 4327917 [win] blur +INFO 3/19/2026, 8:56:58 AM 4385053 [focus] 1 +INFO 3/19/2026, 8:57:51 AM 4438296 [blur] 1 +INFO 3/19/2026, 8:57:51 AM 4438296 [win] blur +INFO 3/19/2026, 9:14:36 AM 5443623 [focus] 1 +DEBUG 3/19/2026, 9:14:59 AM 5466139 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:14:59 AM 5466185 synced recovery +INFO 3/19/2026, 9:15:01 AM 5467949 [blur] 1 +INFO 3/19/2026, 9:15:01 AM 5467952 [win] blur +INFO 3/19/2026, 9:15:06 AM 5472820 [focus] 1 +DEBUG 3/19/2026, 9:15:13 AM 5480553 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:15:13 AM 5480564 synced recovery +DEBUG 3/19/2026, 9:15:17 AM 5484352 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:15:17 AM 5484355 synced recovery +INFO 3/19/2026, 9:16:55 AM 5582827 [blur] 1 +INFO 3/19/2026, 9:16:56 AM 5582828 [win] blur +INFO 3/19/2026, 9:23:48 AM 5995080 [focus] 1 +INFO 3/19/2026, 9:23:51 AM 5998281 [blur] 1 +INFO 3/19/2026, 9:23:51 AM 5998282 [win] blur +INFO 3/19/2026, 9:23:51 AM 5998476 [focus] 1 +DEBUG 3/19/2026, 9:23:52 AM 5999532 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:23:52 AM 5999556 synced recovery +DEBUG 3/19/2026, 9:23:52 AM 5999702 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:23:52 AM 5999713 synced recovery +DEBUG 3/19/2026, 9:24:20 AM 6026923 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:24:20 AM 6026949 synced recovery +DEBUG 3/19/2026, 9:24:25 AM 6032460 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:24:25 AM 6032486 synced recovery +DEBUG 3/19/2026, 9:24:34 AM 6040906 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:24:34 AM 6040925 synced recovery +INFO 3/19/2026, 9:24:40 AM 6047327 [blur] 1 +INFO 3/19/2026, 9:24:40 AM 6047328 [win] blur +INFO 3/19/2026, 9:24:44 AM 6051122 [focus] 1 +INFO 3/19/2026, 9:24:51 AM 6058777 [blur] 1 +INFO 3/19/2026, 9:24:52 AM 6058778 [win] blur +INFO 3/19/2026, 9:24:53 AM 6059787 [focus] 1 +INFO 3/19/2026, 9:25:04 AM 6071492 [blur] 1 +INFO 3/19/2026, 9:25:04 AM 6071493 [win] blur +INFO 3/19/2026, 9:25:04 AM 6071494 [focus] 1 +INFO 3/19/2026, 9:25:11 AM 6078370 synced recovery +INFO 3/19/2026, 9:25:11 AM 6078371 ----------------before-quit----------------- +INFO 3/19/2026, 9:25:11 AM 6078371 ------------------will-quit------------------ +INFO 3/19/2026, 9:25:11 AM 6078544 -----------------quit------------------ +INFO 3/19/2026, 9:25:11 AM 6078544 closeLogging +INFO 3/19/2026, 9:39:48 AM 73 launch with argv [/usr/share/typora/Typora] +INFO 3/19/2026, 9:39:50 AM 1549 ------------------start------------------ +DEBUG 3/19/2026, 9:39:50 AM 1629 before setting +DEBUG 3/19/2026, 9:39:50 AM 1730 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/19/2026, 9:39:50 AM 1748 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/19/2026, 9:39:50 AM 1753 OS is linux 6.19.8-arch1-1 +INFO 3/19/2026, 9:39:50 AM 1753 start LM in devVersion=false +DEBUG 3/19/2026, 9:39:50 AM 1768 after setting +INFO 3/19/2026, 9:39:50 AM 1768 typora version: 1.12.4 +user-dict.json not found +DEBUG 3/19/2026, 9:39:50 AM 1873 putAccelerator File -> &Fichier +DEBUG 3/19/2026, 9:39:50 AM 1874 putAccelerator Edit -> Édit&er +DEBUG 3/19/2026, 9:39:50 AM 1874 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/19/2026, 9:39:50 AM 1874 putAccelerator Format -> F&ormat +DEBUG 3/19/2026, 9:39:50 AM 1875 putAccelerator View -> Présentation(&V) +DEBUG 3/19/2026, 9:39:50 AM 1875 putAccelerator Themes -> &Thèmes +DEBUG 3/19/2026, 9:39:50 AM 1875 putAccelerator Help -> Aide(&H) +INFO 3/19/2026, 9:39:50 AM 1914 [watch L] +DEBUG 3/19/2026, 9:39:50 AM 1914 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/19/2026, 9:39:50 AM 1995 pure = undefined +INFO 3/19/2026, 9:39:50 AM 1995 renew +DEBUG 3/19/2026, 9:39:50 AM 1995 [renewLicense] license renewed in 12h +DEBUG 3/19/2026, 9:39:50 AM 1995 [L] pass +DEBUG 3/19/2026, 9:39:50 AM 1995 trailRemains is 0 +INFO 3/19/2026, 9:39:50 AM 1995 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/19/2026, 9:39:50 AM 1995 [watch L] hasL: true +DEBUG 3/19/2026, 9:39:50 AM 2013 app.openFile +DEBUG 3/19/2026, 9:39:50 AM 2313 added recovery 1 null (0) +INFO 3/19/2026, 9:39:51 AM 2817 synced recovery +ERROR 3/19/2026, 9:39:53 AM 4740 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/19/2026, 9:39:53 AM 4744 handle document.loadData +DEBUG 3/19/2026, 9:39:53 AM 4744 document.loadData 0 +ERROR 3/19/2026, 9:39:53 AM 4745 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/19/2026, 9:39:53 AM 4843 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/19/2026, 9:39:53 AM 4843 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/19/2026, 9:39:53 AM 4864 added recovery 1 (0) +INFO 3/19/2026, 9:39:53 AM 4866 synced recovery +INFO 3/19/2026, 9:39:53 AM 5166 [RenderProcess 1][Log] onBecomeActive +INFO 3/19/2026, 9:39:53 AM 5166 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/19/2026, 9:39:56 AM 8079 [focus] 1 +DEBUG 3/19/2026, 9:40:00 AM 12166 app.openFile +INFO 3/19/2026, 9:40:00 AM 12178 switchDocument 1 [/home/afoucaultc/workspace/cesi/code/versions/4.0/README.md] +INFO 3/19/2026, 9:40:00 AM 12179 addRecentDocument +DEBUG 3/19/2026, 9:40:00 AM 12200 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:40:00 AM 12208 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/19/2026, 9:40:00 AM 12211 synced recovery +INFO 3/19/2026, 9:40:00 AM 12211 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/19/2026, 9:40:00 AM 12212 [RenderProcess 1][Log] reset NodeMap +INFO 3/19/2026, 9:40:00 AM 12222 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md +DEBUG 3/19/2026, 9:40:01 AM 12378 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:40:01 AM 12379 synced recovery +INFO 3/19/2026, 9:40:05 AM 17216 [blur] 1 +INFO 3/19/2026, 9:40:05 AM 17216 [win] blur +INFO 3/19/2026, 9:40:20 AM 31804 cleanUpExpiredDrafts +DEBUG 3/19/2026, 9:40:20 AM 31805 cleanUpExpiredDrafts +INFO 3/19/2026, 9:42:27 AM 158660 [focus] 1 +DEBUG 3/19/2026, 9:42:31 AM 162808 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:42:31 AM 162811 synced recovery +INFO 3/19/2026, 9:46:23 AM 395026 [blur] 1 +INFO 3/19/2026, 9:46:23 AM 395026 [win] blur +DEBUG 3/19/2026, 9:48:41 AM 532503 2nd 0.3763421494112418 +DEBUG 3/19/2026, 9:48:41 AM 532506 pure = true +INFO 3/19/2026, 9:48:41 AM 532506 renew +DEBUG 3/19/2026, 9:48:41 AM 532506 [renewLicense] license renewed in 12h +DEBUG 3/19/2026, 9:48:41 AM 532506 [L] pass +INFO 3/19/2026, 9:48:41 AM 533364 [focus] 1 +DEBUG 3/19/2026, 9:48:45 AM 536892 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:48:45 AM 536903 synced recovery +DEBUG 3/19/2026, 9:48:47 AM 538405 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:48:47 AM 538406 synced recovery +DEBUG 3/19/2026, 9:48:48 AM 540355 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:48:48 AM 540356 synced recovery +DEBUG 3/19/2026, 9:48:50 AM 541651 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:48:50 AM 541652 synced recovery +INFO 3/19/2026, 9:50:25 AM 636686 [blur] 1 +INFO 3/19/2026, 9:50:25 AM 636686 [win] blur +INFO 3/19/2026, 9:50:32 AM 643816 [focus] 1 +INFO 3/19/2026, 9:50:33 AM 645106 [blur] 1 +INFO 3/19/2026, 9:50:33 AM 645106 [win] blur +INFO 3/19/2026, 9:51:45 AM 716713 [focus] 1 +DEBUG 3/19/2026, 9:52:09 AM 740523 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:52:09 AM 740523 synced recovery +DEBUG 3/19/2026, 9:52:13 AM 744773 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:52:13 AM 744776 synced recovery +DEBUG 3/19/2026, 9:52:16 AM 747467 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 9:52:16 AM 747468 synced recovery +INFO 3/19/2026, 9:52:17 AM 749040 [blur] 1 +INFO 3/19/2026, 9:52:17 AM 749040 [win] blur +INFO 3/19/2026, 9:52:24 AM 756345 [focus] 1 +INFO 3/19/2026, 9:53:15 AM 806517 [blur] 1 +INFO 3/19/2026, 9:53:15 AM 806517 [win] blur +INFO 3/19/2026, 9:53:16 AM 808139 [focus] 1 +INFO 3/19/2026, 9:53:18 AM 809697 [blur] 1 +INFO 3/19/2026, 9:53:18 AM 809698 [win] blur +INFO 3/19/2026, 9:54:39 AM 890628 [focus] 1 +INFO 3/19/2026, 9:54:39 AM 890740 [blur] 1 +INFO 3/19/2026, 9:54:39 AM 890740 [win] blur +INFO 3/19/2026, 9:55:13 AM 925309 [focus] 1 +INFO 3/19/2026, 9:55:17 AM 928873 [blur] 1 +INFO 3/19/2026, 9:55:17 AM 928873 [win] blur +INFO 3/19/2026, 9:58:55 AM 1146882 [focus] 1 +INFO 3/19/2026, 9:58:57 AM 1149142 [blur] 1 +INFO 3/19/2026, 9:58:57 AM 1149142 [win] blur +INFO 3/19/2026, 10:00:02 AM 1213948 [focus] 1 +INFO 3/19/2026, 10:00:03 AM 1214389 [blur] 1 +INFO 3/19/2026, 10:00:03 AM 1214390 [win] blur +INFO 3/19/2026, 10:04:54 AM 1505788 [focus] 1 +INFO 3/19/2026, 10:04:54 AM 1505891 [blur] 1 +INFO 3/19/2026, 10:04:54 AM 1505891 [win] blur +INFO 3/19/2026, 10:04:54 AM 1506129 [focus] 1 +INFO 3/19/2026, 10:04:56 AM 1507967 [blur] 1 +INFO 3/19/2026, 10:04:56 AM 1507967 [win] blur +INFO 3/19/2026, 10:04:56 AM 1508040 [focus] 1 +INFO 3/19/2026, 10:04:56 AM 1508143 [blur] 1 +INFO 3/19/2026, 10:04:56 AM 1508143 [win] blur +INFO 3/19/2026, 10:12:15 AM 1947203 [focus] 1 +INFO 3/19/2026, 10:12:16 AM 1947728 [blur] 1 +INFO 3/19/2026, 10:12:16 AM 1947728 [win] blur +INFO 3/19/2026, 10:12:16 AM 1947921 [focus] 1 +INFO 3/19/2026, 10:12:16 AM 1948001 [blur] 1 +INFO 3/19/2026, 10:12:16 AM 1948001 [win] blur +INFO 3/19/2026, 10:14:04 AM 2055451 [focus] 1 +INFO 3/19/2026, 10:14:04 AM 2055633 [blur] 1 +INFO 3/19/2026, 10:14:04 AM 2055634 [win] blur +INFO 3/19/2026, 10:14:04 AM 2055763 [focus] 1 +DEBUG 3/19/2026, 10:14:07 AM 2059313 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:14:07 AM 2059314 synced recovery +DEBUG 3/19/2026, 10:14:13 AM 2065343 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:14:13 AM 2065343 synced recovery +DEBUG 3/19/2026, 10:14:15 AM 2066511 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:14:15 AM 2066512 synced recovery +DEBUG 3/19/2026, 10:14:18 AM 2069619 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:14:18 AM 2069620 synced recovery +DEBUG 3/19/2026, 10:14:25 AM 2076906 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:14:25 AM 2076908 synced recovery +DEBUG 3/19/2026, 10:14:28 AM 2079727 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:14:28 AM 2079728 synced recovery +DEBUG 3/19/2026, 10:14:31 AM 2082795 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:14:31 AM 2082804 synced recovery +DEBUG 3/19/2026, 10:14:37 AM 2088375 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:14:37 AM 2088376 synced recovery +DEBUG 3/19/2026, 10:14:39 AM 2090430 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:14:39 AM 2090431 synced recovery +DEBUG 3/19/2026, 10:14:41 AM 2092706 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:14:41 AM 2092707 synced recovery +DEBUG 3/19/2026, 10:14:44 AM 2095961 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:14:44 AM 2095962 synced recovery +DEBUG 3/19/2026, 10:14:46 AM 2097839 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:14:46 AM 2097843 synced recovery +DEBUG 3/19/2026, 10:14:51 AM 2102714 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:14:51 AM 2102715 synced recovery +DEBUG 3/19/2026, 10:14:54 AM 2105757 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:14:54 AM 2105758 synced recovery +DEBUG 3/19/2026, 10:15:00 AM 2112062 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:15:00 AM 2112063 synced recovery +DEBUG 3/19/2026, 10:15:04 AM 2115978 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:15:04 AM 2115979 synced recovery +DEBUG 3/19/2026, 10:15:06 AM 2118305 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:15:06 AM 2118306 synced recovery +INFO 3/19/2026, 10:15:07 AM 2119076 [blur] 1 +INFO 3/19/2026, 10:15:07 AM 2119076 [win] blur +INFO 3/19/2026, 10:15:08 AM 2119494 [focus] 1 +INFO 3/19/2026, 10:15:08 AM 2119827 [blur] 1 +INFO 3/19/2026, 10:15:08 AM 2119827 [win] blur +INFO 3/19/2026, 10:15:08 AM 2119829 [focus] 1 +INFO 3/19/2026, 10:15:09 AM 2120446 [blur] 1 +INFO 3/19/2026, 10:15:09 AM 2120447 [win] blur +INFO 3/19/2026, 10:15:09 AM 2120448 [focus] 1 +INFO 3/19/2026, 10:15:09 AM 2120612 [blur] 1 +INFO 3/19/2026, 10:15:09 AM 2120612 [win] blur +INFO 3/19/2026, 10:15:11 AM 2122640 [focus] 1 +DEBUG 3/19/2026, 10:15:21 AM 2132721 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:15:21 AM 2132722 synced recovery +DEBUG 3/19/2026, 10:15:24 AM 2135923 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:15:24 AM 2135934 synced recovery +DEBUG 3/19/2026, 10:15:29 AM 2141091 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:15:29 AM 2141092 synced recovery +DEBUG 3/19/2026, 10:15:32 AM 2143586 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:15:32 AM 2143587 synced recovery +DEBUG 3/19/2026, 10:15:43 AM 2155142 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:15:43 AM 2155143 synced recovery +DEBUG 3/19/2026, 10:15:46 AM 2157539 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:15:46 AM 2157540 synced recovery +DEBUG 3/19/2026, 10:15:47 AM 2159222 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:15:47 AM 2159222 synced recovery +DEBUG 3/19/2026, 10:15:50 AM 2161486 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:15:50 AM 2161487 synced recovery +DEBUG 3/19/2026, 10:15:53 AM 2164465 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:15:53 AM 2164466 synced recovery +DEBUG 3/19/2026, 10:15:54 AM 2166049 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:15:54 AM 2166052 synced recovery +DEBUG 3/19/2026, 10:16:05 AM 2176827 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:16:05 AM 2176828 synced recovery +DEBUG 3/19/2026, 10:16:08 AM 2179560 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:16:08 AM 2179561 synced recovery +DEBUG 3/19/2026, 10:16:13 AM 2184645 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:16:13 AM 2184646 synced recovery +DEBUG 3/19/2026, 10:16:22 AM 2194351 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:16:22 AM 2194355 synced recovery +DEBUG 3/19/2026, 10:16:24 AM 2195891 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:16:24 AM 2195893 synced recovery +DEBUG 3/19/2026, 10:16:30 AM 2202365 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:16:30 AM 2202366 synced recovery +DEBUG 3/19/2026, 10:16:36 AM 2207543 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:16:36 AM 2207544 synced recovery +DEBUG 3/19/2026, 10:16:41 AM 2212741 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:16:41 AM 2212742 synced recovery +DEBUG 3/19/2026, 10:16:43 AM 2214722 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:16:43 AM 2214723 synced recovery +DEBUG 3/19/2026, 10:16:47 AM 2218532 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:16:47 AM 2218538 synced recovery +DEBUG 3/19/2026, 10:16:50 AM 2221906 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:16:50 AM 2221907 synced recovery +DEBUG 3/19/2026, 10:16:54 AM 2225551 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:16:54 AM 2225551 synced recovery +DEBUG 3/19/2026, 10:16:57 AM 2229338 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:16:57 AM 2229339 synced recovery +DEBUG 3/19/2026, 10:17:00 AM 2231539 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:17:00 AM 2231540 synced recovery +DEBUG 3/19/2026, 10:17:11 AM 2243360 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:17:11 AM 2243361 synced recovery +DEBUG 3/19/2026, 10:17:14 AM 2245515 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:17:14 AM 2245516 synced recovery +DEBUG 3/19/2026, 10:17:16 AM 2247493 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:17:16 AM 2247493 synced recovery +DEBUG 3/19/2026, 10:17:18 AM 2249865 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:17:18 AM 2249867 synced recovery +DEBUG 3/19/2026, 10:17:20 AM 2251599 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:17:20 AM 2251599 synced recovery +DEBUG 3/19/2026, 10:17:22 AM 2254110 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:17:22 AM 2254110 synced recovery +DEBUG 3/19/2026, 10:17:25 AM 2256473 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:17:25 AM 2256474 synced recovery +DEBUG 3/19/2026, 10:17:27 AM 2258610 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:17:27 AM 2258611 synced recovery +DEBUG 3/19/2026, 10:17:51 AM 2282575 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:17:51 AM 2282576 synced recovery +DEBUG 3/19/2026, 10:17:53 AM 2285054 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:17:53 AM 2285055 synced recovery +DEBUG 3/19/2026, 10:17:56 AM 2288080 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:17:56 AM 2288081 synced recovery +DEBUG 3/19/2026, 10:18:00 AM 2292344 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:18:00 AM 2292345 synced recovery +DEBUG 3/19/2026, 10:18:06 AM 2297850 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:18:06 AM 2297851 synced recovery +DEBUG 3/19/2026, 10:18:18 AM 2309932 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:18:18 AM 2309933 synced recovery +DEBUG 3/19/2026, 10:18:19 AM 2311302 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:18:19 AM 2311303 synced recovery +DEBUG 3/19/2026, 10:18:21 AM 2313044 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:18:21 AM 2313045 synced recovery +DEBUG 3/19/2026, 10:18:23 AM 2315286 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:18:23 AM 2315287 synced recovery +DEBUG 3/19/2026, 10:18:25 AM 2316655 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:18:25 AM 2316655 synced recovery +DEBUG 3/19/2026, 10:18:29 AM 2320809 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:18:29 AM 2320811 synced recovery +DEBUG 3/19/2026, 10:20:00 AM 2411481 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:20:00 AM 2411481 synced recovery +DEBUG 3/19/2026, 10:20:04 AM 2415495 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:20:04 AM 2415496 synced recovery +DEBUG 3/19/2026, 10:20:06 AM 2417654 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:20:06 AM 2417655 synced recovery +DEBUG 3/19/2026, 10:20:09 AM 2420980 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:20:09 AM 2420981 synced recovery +DEBUG 3/19/2026, 10:20:15 AM 2426942 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:20:15 AM 2426943 synced recovery +DEBUG 3/19/2026, 10:20:18 AM 2430172 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:20:18 AM 2430176 synced recovery +DEBUG 3/19/2026, 10:20:25 AM 2436789 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:20:25 AM 2436790 synced recovery +DEBUG 3/19/2026, 10:20:29 AM 2440637 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:20:29 AM 2440638 synced recovery +DEBUG 3/19/2026, 10:20:33 AM 2444535 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:20:33 AM 2444536 synced recovery +DEBUG 3/19/2026, 10:20:37 AM 2448657 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:20:37 AM 2448658 synced recovery +DEBUG 3/19/2026, 10:20:38 AM 2450141 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:20:38 AM 2450142 synced recovery +DEBUG 3/19/2026, 10:20:42 AM 2453376 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:20:42 AM 2453376 synced recovery +DEBUG 3/19/2026, 10:20:43 AM 2454728 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:20:43 AM 2454728 synced recovery +DEBUG 3/19/2026, 10:20:58 AM 2470296 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:20:58 AM 2470297 synced recovery +DEBUG 3/19/2026, 10:21:01 AM 2472650 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:21:01 AM 2472653 synced recovery +DEBUG 3/19/2026, 10:21:03 AM 2474402 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:21:03 AM 2474403 synced recovery +DEBUG 3/19/2026, 10:21:04 AM 2475994 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:21:04 AM 2475994 synced recovery +DEBUG 3/19/2026, 10:21:06 AM 2478317 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:21:06 AM 2478318 synced recovery +DEBUG 3/19/2026, 10:21:08 AM 2479993 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:21:08 AM 2479994 synced recovery +DEBUG 3/19/2026, 10:21:11 AM 2483211 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:21:11 AM 2483211 synced recovery +DEBUG 3/19/2026, 10:21:13 AM 2485100 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:21:13 AM 2485101 synced recovery +DEBUG 3/19/2026, 10:21:18 AM 2490184 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:21:18 AM 2490185 synced recovery +DEBUG 3/19/2026, 10:21:21 AM 2493365 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:21:21 AM 2493366 synced recovery +DEBUG 3/19/2026, 10:21:26 AM 2497986 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:21:26 AM 2497987 synced recovery +DEBUG 3/19/2026, 10:21:29 AM 2500793 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:21:29 AM 2500794 synced recovery +DEBUG 3/19/2026, 10:21:31 AM 2503009 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:21:31 AM 2503010 synced recovery +DEBUG 3/19/2026, 10:21:33 AM 2504943 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:21:33 AM 2504944 synced recovery +DEBUG 3/19/2026, 10:21:46 AM 2518036 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:21:46 AM 2518042 synced recovery +DEBUG 3/19/2026, 10:21:48 AM 2519906 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:21:48 AM 2519907 synced recovery +DEBUG 3/19/2026, 10:21:50 AM 2521610 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:21:50 AM 2521618 synced recovery +DEBUG 3/19/2026, 10:21:53 AM 2524494 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:21:53 AM 2524495 synced recovery +DEBUG 3/19/2026, 10:22:03 AM 2534677 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:22:03 AM 2534678 synced recovery +DEBUG 3/19/2026, 10:22:07 AM 2539179 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:22:07 AM 2539180 synced recovery +DEBUG 3/19/2026, 10:22:09 AM 2541278 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:22:09 AM 2541279 synced recovery +DEBUG 3/19/2026, 10:22:12 AM 2544244 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:22:12 AM 2544245 synced recovery +DEBUG 3/19/2026, 10:22:14 AM 2546336 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:22:14 AM 2546337 synced recovery +DEBUG 3/19/2026, 10:22:17 AM 2548451 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:22:17 AM 2548452 synced recovery +INFO 3/19/2026, 10:22:18 AM 2550085 [blur] 1 +INFO 3/19/2026, 10:22:18 AM 2550086 [win] blur +INFO 3/19/2026, 10:22:25 AM 2556526 [focus] 1 +DEBUG 3/19/2026, 10:22:30 AM 2561516 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:22:30 AM 2561517 synced recovery +DEBUG 3/19/2026, 10:22:33 AM 2564728 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:22:33 AM 2564729 synced recovery +INFO 3/19/2026, 10:22:35 AM 2566963 [blur] 1 +INFO 3/19/2026, 10:22:35 AM 2566963 [win] blur +INFO 3/19/2026, 10:22:52 AM 2583798 [focus] 1 +INFO 3/19/2026, 10:22:54 AM 2585422 [blur] 1 +INFO 3/19/2026, 10:22:54 AM 2585423 [win] blur +INFO 3/19/2026, 10:22:54 AM 2585688 [focus] 1 +DEBUG 3/19/2026, 10:23:31 AM 2623293 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:23:31 AM 2623294 synced recovery +DEBUG 3/19/2026, 10:23:40 AM 2631575 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:23:40 AM 2631576 synced recovery +DEBUG 3/19/2026, 10:23:42 AM 2633621 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:23:42 AM 2633622 synced recovery +DEBUG 3/19/2026, 10:23:44 AM 2636113 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:23:44 AM 2636114 synced recovery +DEBUG 3/19/2026, 10:23:46 AM 2637475 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:23:46 AM 2637476 synced recovery +DEBUG 3/19/2026, 10:23:48 AM 2639908 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:23:48 AM 2639909 synced recovery +DEBUG 3/19/2026, 10:23:50 AM 2641723 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:23:50 AM 2641724 synced recovery +DEBUG 3/19/2026, 10:23:52 AM 2643512 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:23:52 AM 2643513 synced recovery +DEBUG 3/19/2026, 10:23:53 AM 2645099 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:23:53 AM 2645100 synced recovery +DEBUG 3/19/2026, 10:24:13 AM 2664375 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:24:13 AM 2664376 synced recovery +DEBUG 3/19/2026, 10:24:59 AM 2710485 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:24:59 AM 2710486 synced recovery +DEBUG 3/19/2026, 10:25:15 AM 2726715 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:25:15 AM 2726715 synced recovery +DEBUG 3/19/2026, 10:25:17 AM 2728781 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:25:17 AM 2728795 synced recovery +DEBUG 3/19/2026, 10:25:55 AM 2767262 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:25:55 AM 2767263 synced recovery +DEBUG 3/19/2026, 10:25:57 AM 2769232 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:25:57 AM 2769233 synced recovery +DEBUG 3/19/2026, 10:25:59 AM 2771100 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:25:59 AM 2771103 synced recovery +DEBUG 3/19/2026, 10:26:04 AM 2775468 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:26:04 AM 2775478 synced recovery +INFO 3/19/2026, 10:26:25 AM 2797049 [blur] 1 +INFO 3/19/2026, 10:26:25 AM 2797049 [win] blur +INFO 3/19/2026, 10:26:31 AM 2803186 [focus] 1 +INFO 3/19/2026, 10:27:55 AM 2887160 [blur] 1 +INFO 3/19/2026, 10:27:55 AM 2887160 [win] blur +INFO 3/19/2026, 10:28:01 AM 2892554 [focus] 1 +INFO 3/19/2026, 10:28:02 AM 2893914 [blur] 1 +INFO 3/19/2026, 10:28:02 AM 2893915 [win] blur +INFO 3/19/2026, 10:28:02 AM 2894232 [focus] 1 +INFO 3/19/2026, 10:28:31 AM 2923327 [blur] 1 +INFO 3/19/2026, 10:28:31 AM 2923327 [win] blur +INFO 3/19/2026, 10:28:33 AM 2924816 [focus] 1 +INFO 3/19/2026, 10:29:47 AM 2998460 [blur] 1 +INFO 3/19/2026, 10:29:47 AM 2998461 [win] blur +INFO 3/19/2026, 10:29:49 AM 3000652 [focus] 1 +DEBUG 3/19/2026, 10:29:50 AM 3002350 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:29:50 AM 3002351 synced recovery +DEBUG 3/19/2026, 10:30:16 AM 3028316 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:30:16 AM 3028317 synced recovery +DEBUG 3/19/2026, 10:30:19 AM 3031216 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:30:19 AM 3031216 synced recovery +DEBUG 3/19/2026, 10:30:24 AM 3035682 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:30:24 AM 3035683 synced recovery +DEBUG 3/19/2026, 10:30:26 AM 3038066 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:30:26 AM 3038067 synced recovery +DEBUG 3/19/2026, 10:30:27 AM 3039192 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:30:27 AM 3039193 synced recovery +DEBUG 3/19/2026, 10:30:40 AM 3051621 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:30:40 AM 3051622 synced recovery +DEBUG 3/19/2026, 10:30:42 AM 3054125 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:30:42 AM 3054126 synced recovery +DEBUG 3/19/2026, 10:30:46 AM 3057399 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:30:46 AM 3057399 synced recovery +DEBUG 3/19/2026, 10:30:48 AM 3059778 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:30:48 AM 3059779 synced recovery +DEBUG 3/19/2026, 10:31:14 AM 3085373 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:31:14 AM 3085373 synced recovery +DEBUG 3/19/2026, 10:31:24 AM 3096087 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:31:24 AM 3096090 synced recovery +DEBUG 3/19/2026, 10:31:27 AM 3098743 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:31:27 AM 3098743 synced recovery +DEBUG 3/19/2026, 10:31:36 AM 3107394 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:31:36 AM 3107395 synced recovery +INFO 3/19/2026, 10:31:44 AM 3115487 [blur] 1 +INFO 3/19/2026, 10:31:44 AM 3115487 [win] blur +INFO 3/19/2026, 10:31:47 AM 3119287 [focus] 1 +DEBUG 3/19/2026, 10:32:08 AM 3139448 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:32:08 AM 3139448 synced recovery +DEBUG 3/19/2026, 10:32:10 AM 3142269 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:32:10 AM 3142271 synced recovery +DEBUG 3/19/2026, 10:32:27 AM 3159053 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:32:27 AM 3159064 synced recovery +DEBUG 3/19/2026, 10:32:29 AM 3160978 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:32:29 AM 3160979 synced recovery +DEBUG 3/19/2026, 10:32:30 AM 3162355 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:32:30 AM 3162356 synced recovery +DEBUG 3/19/2026, 10:32:36 AM 3168150 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:32:36 AM 3168150 synced recovery +DEBUG 3/19/2026, 10:32:38 AM 3170184 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:32:38 AM 3170185 synced recovery +DEBUG 3/19/2026, 10:32:53 AM 3184666 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:32:53 AM 3184667 synced recovery +DEBUG 3/19/2026, 10:32:54 AM 3186126 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:32:54 AM 3186126 synced recovery +DEBUG 3/19/2026, 10:32:58 AM 3189479 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:32:58 AM 3189480 synced recovery +DEBUG 3/19/2026, 10:33:00 AM 3191514 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:33:00 AM 3191515 synced recovery +DEBUG 3/19/2026, 10:33:59 AM 3250741 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:33:59 AM 3250741 synced recovery +DEBUG 3/19/2026, 10:34:02 AM 3254030 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:34:02 AM 3254031 synced recovery +DEBUG 3/19/2026, 10:34:09 AM 3261068 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:34:09 AM 3261069 synced recovery +DEBUG 3/19/2026, 10:34:12 AM 3263718 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:34:12 AM 3263719 synced recovery +DEBUG 3/19/2026, 10:34:30 AM 3281947 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:34:30 AM 3281948 synced recovery +DEBUG 3/19/2026, 10:34:32 AM 3284109 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:34:32 AM 3284110 synced recovery +DEBUG 3/19/2026, 10:34:50 AM 3302007 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:34:50 AM 3302008 synced recovery +DEBUG 3/19/2026, 10:35:00 AM 3311671 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:35:00 AM 3311681 synced recovery +DEBUG 3/19/2026, 10:35:05 AM 3317190 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:35:05 AM 3317195 synced recovery +DEBUG 3/19/2026, 10:35:08 AM 3320102 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:35:08 AM 3320103 synced recovery +INFO 3/19/2026, 10:37:26 AM 3457832 [blur] 1 +INFO 3/19/2026, 10:37:26 AM 3457832 [win] blur +INFO 3/19/2026, 10:38:13 AM 3505082 [focus] 1 +INFO 3/19/2026, 10:38:14 AM 3505893 [blur] 1 +INFO 3/19/2026, 10:38:14 AM 3505893 [win] blur +INFO 3/19/2026, 10:38:35 AM 3526815 [focus] 1 +INFO 3/19/2026, 10:38:43 AM 3535123 [blur] 1 +INFO 3/19/2026, 10:38:43 AM 3535123 [win] blur +INFO 3/19/2026, 10:38:46 AM 3537726 [focus] 1 +DEBUG 3/19/2026, 10:39:12 AM 3563796 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:39:12 AM 3563801 synced recovery +DEBUG 3/19/2026, 10:39:15 AM 3567322 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:39:15 AM 3567322 synced recovery +DEBUG 3/19/2026, 10:39:19 AM 3570415 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:39:19 AM 3570416 synced recovery +DEBUG 3/19/2026, 10:39:21 AM 3572761 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:39:21 AM 3572761 synced recovery +DEBUG 3/19/2026, 10:39:23 AM 3574757 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:39:23 AM 3574758 synced recovery +DEBUG 3/19/2026, 10:39:27 AM 3578711 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:39:27 AM 3578733 synced recovery +DEBUG 3/19/2026, 10:39:48 AM 3599378 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:39:48 AM 3599392 synced recovery +DEBUG 3/19/2026, 10:39:50 AM 3601406 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:39:50 AM 3601407 synced recovery +DEBUG 3/19/2026, 10:39:51 AM 3602727 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:39:51 AM 3602728 synced recovery +DEBUG 3/19/2026, 10:39:57 AM 3608650 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:39:57 AM 3608650 synced recovery +INFO 3/19/2026, 10:40:09 AM 3620904 [blur] 1 +INFO 3/19/2026, 10:40:09 AM 3620905 [win] blur +INFO 3/19/2026, 10:40:12 AM 3623535 [focus] 1 +DEBUG 3/19/2026, 10:40:22 AM 3633964 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:40:22 AM 3633965 synced recovery +DEBUG 3/19/2026, 10:40:25 AM 3636599 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:40:25 AM 3636599 synced recovery +DEBUG 3/19/2026, 10:40:26 AM 3638210 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:40:26 AM 3638218 synced recovery +DEBUG 3/19/2026, 10:40:27 AM 3639369 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:40:27 AM 3639369 synced recovery +DEBUG 3/19/2026, 10:40:29 AM 3641002 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:40:29 AM 3641005 synced recovery +DEBUG 3/19/2026, 10:40:30 AM 3642092 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:40:30 AM 3642093 synced recovery +DEBUG 3/19/2026, 10:40:31 AM 3643245 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:40:31 AM 3643253 synced recovery +DEBUG 3/19/2026, 10:40:33 AM 3644390 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:40:33 AM 3644391 synced recovery +DEBUG 3/19/2026, 10:40:37 AM 3648539 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:40:37 AM 3648539 synced recovery +DEBUG 3/19/2026, 10:41:11 AM 3682834 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:11 AM 3682835 synced recovery +DEBUG 3/19/2026, 10:41:14 AM 3685668 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:14 AM 3685668 synced recovery +DEBUG 3/19/2026, 10:41:16 AM 3688224 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:16 AM 3688225 synced recovery +DEBUG 3/19/2026, 10:41:18 AM 3690018 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:18 AM 3690019 synced recovery +DEBUG 3/19/2026, 10:41:24 AM 3695944 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:24 AM 3695945 synced recovery +DEBUG 3/19/2026, 10:41:26 AM 3698056 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:26 AM 3698056 synced recovery +DEBUG 3/19/2026, 10:41:28 AM 3699912 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:28 AM 3699914 synced recovery +DEBUG 3/19/2026, 10:41:30 AM 3701523 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:30 AM 3701523 synced recovery +DEBUG 3/19/2026, 10:41:31 AM 3703033 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:31 AM 3703035 synced recovery +DEBUG 3/19/2026, 10:41:35 AM 3706821 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:35 AM 3706821 synced recovery +DEBUG 3/19/2026, 10:41:36 AM 3708091 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:36 AM 3708091 synced recovery +DEBUG 3/19/2026, 10:41:39 AM 3711117 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:39 AM 3711118 synced recovery +DEBUG 3/19/2026, 10:41:40 AM 3712236 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:40 AM 3712237 synced recovery +DEBUG 3/19/2026, 10:41:41 AM 3713368 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:42 AM 3713374 synced recovery +DEBUG 3/19/2026, 10:41:43 AM 3714520 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:43 AM 3714521 synced recovery +DEBUG 3/19/2026, 10:41:45 AM 3716917 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:45 AM 3716927 synced recovery +DEBUG 3/19/2026, 10:41:46 AM 3718035 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:46 AM 3718035 synced recovery +DEBUG 3/19/2026, 10:41:47 AM 3719158 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:47 AM 3719159 synced recovery +DEBUG 3/19/2026, 10:41:48 AM 3720325 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:48 AM 3720329 synced recovery +DEBUG 3/19/2026, 10:41:50 AM 3721724 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:41:50 AM 3721725 synced recovery +INFO 3/19/2026, 10:41:51 AM 3723349 [blur] 1 +INFO 3/19/2026, 10:41:51 AM 3723351 [win] blur +INFO 3/19/2026, 10:43:22 AM 3814365 [focus] 1 +DEBUG 3/19/2026, 10:43:39 AM 3830567 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:43:39 AM 3830568 synced recovery +DEBUG 3/19/2026, 10:43:43 AM 3835365 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:43:43 AM 3835366 synced recovery +DEBUG 3/19/2026, 10:43:45 AM 3836592 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:43:45 AM 3836599 synced recovery +DEBUG 3/19/2026, 10:43:49 AM 3841331 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:43:49 AM 3841332 synced recovery +DEBUG 3/19/2026, 10:43:51 AM 3842595 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:43:51 AM 3842596 synced recovery +DEBUG 3/19/2026, 10:43:52 AM 3843727 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:43:52 AM 3843728 synced recovery +DEBUG 3/19/2026, 10:43:53 AM 3845124 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:43:53 AM 3845127 synced recovery +DEBUG 3/19/2026, 10:43:54 AM 3846272 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:43:54 AM 3846273 synced recovery +DEBUG 3/19/2026, 10:43:56 AM 3847415 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:43:56 AM 3847416 synced recovery +DEBUG 3/19/2026, 10:43:59 AM 3850452 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:43:59 AM 3850453 synced recovery +DEBUG 3/19/2026, 10:44:00 AM 3852087 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:44:00 AM 3852087 synced recovery +DEBUG 3/19/2026, 10:44:04 AM 3855668 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:44:04 AM 3855670 synced recovery +DEBUG 3/19/2026, 10:44:09 AM 3860524 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:44:09 AM 3860524 synced recovery +DEBUG 3/19/2026, 10:44:11 AM 3862463 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:44:11 AM 3862464 synced recovery +DEBUG 3/19/2026, 10:44:13 AM 3864665 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:44:13 AM 3864668 synced recovery +DEBUG 3/19/2026, 10:44:14 AM 3865794 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:44:14 AM 3865794 synced recovery +DEBUG 3/19/2026, 10:44:15 AM 3866987 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:44:15 AM 3866991 synced recovery +DEBUG 3/19/2026, 10:44:16 AM 3868094 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:44:16 AM 3868095 synced recovery +DEBUG 3/19/2026, 10:44:24 AM 3876032 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:44:24 AM 3876034 synced recovery +INFO 3/19/2026, 10:44:41 AM 3892953 [blur] 1 +INFO 3/19/2026, 10:44:41 AM 3892953 [win] blur +INFO 3/19/2026, 10:44:45 AM 3896569 [focus] 1 +DEBUG 3/19/2026, 10:44:55 AM 3906983 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:44:55 AM 3906983 synced recovery +DEBUG 3/19/2026, 10:44:57 AM 3909320 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:44:57 AM 3909320 synced recovery +DEBUG 3/19/2026, 10:45:00 AM 3911923 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:45:00 AM 3911929 synced recovery +DEBUG 3/19/2026, 10:45:01 AM 3913084 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:45:01 AM 3913084 synced recovery +DEBUG 3/19/2026, 10:45:03 AM 3914607 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:45:03 AM 3914612 synced recovery +DEBUG 3/19/2026, 10:45:08 AM 3919628 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:45:08 AM 3919629 synced recovery +DEBUG 3/19/2026, 10:45:12 AM 3923989 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:45:12 AM 3923989 synced recovery +DEBUG 3/19/2026, 10:45:14 AM 3925799 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:45:14 AM 3925807 synced recovery +DEBUG 3/19/2026, 10:45:15 AM 3927186 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:45:15 AM 3927187 synced recovery +DEBUG 3/19/2026, 10:45:16 AM 3928306 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:45:16 AM 3928310 synced recovery +DEBUG 3/19/2026, 10:45:20 AM 3932262 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:45:20 AM 3932263 synced recovery +INFO 3/19/2026, 10:45:23 AM 3934774 [blur] 1 +INFO 3/19/2026, 10:45:23 AM 3934775 [win] blur +INFO 3/19/2026, 10:45:46 AM 3957640 [focus] 1 +DEBUG 3/19/2026, 10:45:50 AM 3961829 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:45:50 AM 3961830 synced recovery +DEBUG 3/19/2026, 10:45:52 AM 3963747 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:45:52 AM 3963758 synced recovery +DEBUG 3/19/2026, 10:45:54 AM 3965583 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:45:54 AM 3965584 synced recovery +DEBUG 3/19/2026, 10:45:56 AM 3967882 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:45:56 AM 3967883 synced recovery +DEBUG 3/19/2026, 10:46:01 AM 3973309 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:01 AM 3973313 synced recovery +DEBUG 3/19/2026, 10:46:03 AM 3975094 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:03 AM 3975095 synced recovery +DEBUG 3/19/2026, 10:46:06 AM 3977806 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:06 AM 3977807 synced recovery +DEBUG 3/19/2026, 10:46:09 AM 3980887 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:09 AM 3980888 synced recovery +DEBUG 3/19/2026, 10:46:20 AM 3992223 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:20 AM 3992229 synced recovery +DEBUG 3/19/2026, 10:46:22 AM 3993401 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:22 AM 3993401 synced recovery +DEBUG 3/19/2026, 10:46:23 AM 3994522 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:23 AM 3994525 synced recovery +DEBUG 3/19/2026, 10:46:24 AM 3995712 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:24 AM 3995712 synced recovery +DEBUG 3/19/2026, 10:46:25 AM 3997077 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:25 AM 3997078 synced recovery +DEBUG 3/19/2026, 10:46:30 AM 4002351 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:30 AM 4002352 synced recovery +DEBUG 3/19/2026, 10:46:32 AM 4004257 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:32 AM 4004262 synced recovery +DEBUG 3/19/2026, 10:46:38 AM 4009486 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:38 AM 4009487 synced recovery +DEBUG 3/19/2026, 10:46:40 AM 4012290 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:40 AM 4012291 synced recovery +DEBUG 3/19/2026, 10:46:44 AM 4015611 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:44 AM 4015612 synced recovery +DEBUG 3/19/2026, 10:46:46 AM 4017447 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:46 AM 4017448 synced recovery +DEBUG 3/19/2026, 10:46:48 AM 4019482 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:48 AM 4019483 synced recovery +DEBUG 3/19/2026, 10:46:53 AM 4025066 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:53 AM 4025070 synced recovery +DEBUG 3/19/2026, 10:46:58 AM 4029794 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:46:58 AM 4029796 synced recovery +DEBUG 3/19/2026, 10:47:00 AM 4031720 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:47:00 AM 4031728 synced recovery +DEBUG 3/19/2026, 10:47:03 AM 4035113 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:47:03 AM 4035115 synced recovery +DEBUG 3/19/2026, 10:47:06 AM 4038229 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:47:06 AM 4038230 synced recovery +DEBUG 3/19/2026, 10:47:09 AM 4040759 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:47:09 AM 4040759 synced recovery +DEBUG 3/19/2026, 10:47:11 AM 4042518 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:47:11 AM 4042519 synced recovery +DEBUG 3/19/2026, 10:47:17 AM 4048679 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:47:17 AM 4048680 synced recovery +DEBUG 3/19/2026, 10:47:22 AM 4054003 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:47:22 AM 4054003 synced recovery +DEBUG 3/19/2026, 10:47:24 AM 4056011 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:47:24 AM 4056012 synced recovery +DEBUG 3/19/2026, 10:47:26 AM 4057758 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:47:26 AM 4057763 synced recovery +DEBUG 3/19/2026, 10:47:28 AM 4059564 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:47:28 AM 4059565 synced recovery +DEBUG 3/19/2026, 10:47:30 AM 4062070 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:47:30 AM 4062071 synced recovery +DEBUG 3/19/2026, 10:47:33 AM 4064741 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:47:33 AM 4064742 synced recovery +DEBUG 3/19/2026, 10:47:35 AM 4066559 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:47:35 AM 4066560 synced recovery +DEBUG 3/19/2026, 10:47:47 AM 4079216 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:47:47 AM 4079217 synced recovery +DEBUG 3/19/2026, 10:47:51 AM 4082520 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:47:51 AM 4082525 synced recovery +DEBUG 3/19/2026, 10:47:54 AM 4085443 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:47:54 AM 4085444 synced recovery +DEBUG 3/19/2026, 10:47:58 AM 4089993 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:47:58 AM 4090002 synced recovery +DEBUG 3/19/2026, 10:48:02 AM 4094051 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:48:02 AM 4094052 synced recovery +DEBUG 3/19/2026, 10:48:04 AM 4095979 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:48:04 AM 4095980 synced recovery +DEBUG 3/19/2026, 10:48:11 AM 4103090 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:48:11 AM 4103091 synced recovery +DEBUG 3/19/2026, 10:48:15 AM 4107105 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:48:15 AM 4107106 synced recovery +DEBUG 3/19/2026, 10:48:19 AM 4111047 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:48:19 AM 4111048 synced recovery +DEBUG 3/19/2026, 10:48:23 AM 4114584 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:48:23 AM 4114585 synced recovery +DEBUG 3/19/2026, 10:48:25 AM 4116563 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:48:25 AM 4116579 synced recovery +DEBUG 3/19/2026, 10:48:26 AM 4117820 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:48:26 AM 4117821 synced recovery +DEBUG 3/19/2026, 10:48:27 AM 4119340 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:48:27 AM 4119345 synced recovery +DEBUG 3/19/2026, 10:48:30 AM 4122044 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:48:30 AM 4122045 synced recovery +DEBUG 3/19/2026, 10:48:33 AM 4124667 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:48:33 AM 4124684 synced recovery +DEBUG 3/19/2026, 10:48:39 AM 4130863 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:48:39 AM 4130864 synced recovery +DEBUG 3/19/2026, 10:48:40 AM 4132011 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:48:40 AM 4132012 synced recovery +INFO 3/19/2026, 10:48:43 AM 4134946 [blur] 1 +INFO 3/19/2026, 10:48:43 AM 4134946 [win] blur +DEBUG 3/19/2026, 10:48:43 AM 4135164 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:48:43 AM 4135166 synced recovery +INFO 3/19/2026, 10:49:30 AM 4181528 [focus] 1 +DEBUG 3/19/2026, 10:49:41 AM 4193047 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:49:41 AM 4193048 synced recovery +DEBUG 3/19/2026, 10:49:52 AM 4203775 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:49:52 AM 4203775 synced recovery +DEBUG 3/19/2026, 10:50:04 AM 4215755 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:50:04 AM 4215758 synced recovery +DEBUG 3/19/2026, 10:50:05 AM 4217182 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:50:05 AM 4217182 synced recovery +DEBUG 3/19/2026, 10:50:06 AM 4218328 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:50:06 AM 4218332 synced recovery +DEBUG 3/19/2026, 10:50:10 AM 4221797 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:50:10 AM 4221803 synced recovery +DEBUG 3/19/2026, 10:50:11 AM 4222931 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:50:11 AM 4222935 synced recovery +DEBUG 3/19/2026, 10:50:16 AM 4227531 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:50:16 AM 4227532 synced recovery +DEBUG 3/19/2026, 10:50:18 AM 4229490 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:50:18 AM 4229492 synced recovery +INFO 3/19/2026, 10:50:20 AM 4231777 [blur] 1 +INFO 3/19/2026, 10:50:20 AM 4231777 [win] blur +INFO 3/19/2026, 10:52:10 AM 4341693 [focus] 1 +DEBUG 3/19/2026, 10:52:17 AM 4348757 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:52:17 AM 4348762 synced recovery +DEBUG 3/19/2026, 10:52:18 AM 4350251 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:52:18 AM 4350252 synced recovery +INFO 3/19/2026, 10:53:15 AM 4406816 [blur] 1 +INFO 3/19/2026, 10:53:15 AM 4406816 [win] blur +INFO 3/19/2026, 10:53:17 AM 4409356 [focus] 1 +DEBUG 3/19/2026, 10:53:27 AM 4418721 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:53:27 AM 4418722 synced recovery +DEBUG 3/19/2026, 10:53:30 AM 4421836 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:53:30 AM 4421839 synced recovery +DEBUG 3/19/2026, 10:53:38 AM 4430034 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:53:38 AM 4430034 synced recovery +DEBUG 3/19/2026, 10:54:00 AM 4451946 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:54:00 AM 4451947 synced recovery +INFO 3/19/2026, 10:54:01 AM 4452696 [blur] 1 +INFO 3/19/2026, 10:54:01 AM 4452696 [win] blur +INFO 3/19/2026, 10:54:37 AM 4488559 [focus] 1 +INFO 3/19/2026, 10:54:56 AM 4507997 [blur] 1 +INFO 3/19/2026, 10:54:56 AM 4507997 [win] blur +INFO 3/19/2026, 10:55:09 AM 4520528 [focus] 1 +INFO 3/19/2026, 10:55:11 AM 4522915 [blur] 1 +INFO 3/19/2026, 10:55:11 AM 4522915 [win] blur +INFO 3/19/2026, 10:55:14 AM 4525715 [focus] 1 +DEBUG 3/19/2026, 10:55:17 AM 4529111 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:55:17 AM 4529119 synced recovery +DEBUG 3/19/2026, 10:55:22 AM 4533544 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:55:22 AM 4533550 synced recovery +DEBUG 3/19/2026, 10:55:24 AM 4535604 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:55:24 AM 4535605 synced recovery +INFO 3/19/2026, 10:55:26 AM 4538360 [blur] 1 +INFO 3/19/2026, 10:55:26 AM 4538360 [win] blur +INFO 3/19/2026, 10:55:28 AM 4539700 [focus] 1 +DEBUG 3/19/2026, 10:55:34 AM 4545628 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:55:34 AM 4545644 synced recovery +DEBUG 3/19/2026, 10:55:35 AM 4546750 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:55:35 AM 4546751 synced recovery +DEBUG 3/19/2026, 10:55:38 AM 4549533 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:55:38 AM 4549534 synced recovery +DEBUG 3/19/2026, 10:55:39 AM 4550684 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:55:39 AM 4550685 synced recovery +DEBUG 3/19/2026, 10:55:40 AM 4551887 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:55:40 AM 4551899 synced recovery +DEBUG 3/19/2026, 10:55:42 AM 4554052 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:55:42 AM 4554053 synced recovery +DEBUG 3/19/2026, 10:55:44 AM 4555984 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:55:44 AM 4555989 synced recovery +DEBUG 3/19/2026, 10:55:46 AM 4557580 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:55:46 AM 4557580 synced recovery +DEBUG 3/19/2026, 10:55:51 AM 4562665 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:55:51 AM 4562671 synced recovery +DEBUG 3/19/2026, 10:55:54 AM 4566049 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:55:54 AM 4566051 synced recovery +DEBUG 3/19/2026, 10:55:57 AM 4569046 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:55:57 AM 4569048 synced recovery +DEBUG 3/19/2026, 10:56:01 AM 4573345 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:56:01 AM 4573347 synced recovery +DEBUG 3/19/2026, 10:56:07 AM 4578580 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:56:07 AM 4578581 synced recovery +DEBUG 3/19/2026, 10:56:21 AM 4593288 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:56:21 AM 4593289 synced recovery +DEBUG 3/19/2026, 10:56:23 AM 4594886 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:56:23 AM 4594887 synced recovery +DEBUG 3/19/2026, 10:56:27 AM 4599000 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:56:27 AM 4599000 synced recovery +DEBUG 3/19/2026, 10:56:32 AM 4604276 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:56:32 AM 4604280 synced recovery +DEBUG 3/19/2026, 10:56:34 AM 4605410 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:56:34 AM 4605411 synced recovery +DEBUG 3/19/2026, 10:56:35 AM 4606703 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:56:35 AM 4606712 synced recovery +DEBUG 3/19/2026, 10:56:36 AM 4608231 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:56:36 AM 4608232 synced recovery +DEBUG 3/19/2026, 10:56:38 AM 4609794 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:56:38 AM 4609795 synced recovery +DEBUG 3/19/2026, 10:56:40 AM 4611444 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:56:40 AM 4611445 synced recovery +DEBUG 3/19/2026, 10:56:43 AM 4614407 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:56:43 AM 4614412 synced recovery +DEBUG 3/19/2026, 10:56:54 AM 4625668 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:56:54 AM 4625672 synced recovery +DEBUG 3/19/2026, 10:56:58 AM 4629669 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:56:58 AM 4629669 synced recovery +DEBUG 3/19/2026, 10:57:04 AM 4636230 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:57:04 AM 4636249 synced recovery +DEBUG 3/19/2026, 10:57:06 AM 4638273 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:57:06 AM 4638274 synced recovery +DEBUG 3/19/2026, 10:57:09 AM 4640695 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:57:09 AM 4640700 synced recovery +DEBUG 3/19/2026, 10:57:13 AM 4644745 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:57:13 AM 4644745 synced recovery +DEBUG 3/19/2026, 10:57:17 AM 4648682 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:57:17 AM 4648682 synced recovery +DEBUG 3/19/2026, 10:57:24 AM 4655884 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:57:24 AM 4655885 synced recovery +DEBUG 3/19/2026, 10:57:29 AM 4661207 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:57:29 AM 4661211 synced recovery +DEBUG 3/19/2026, 10:57:30 AM 4662361 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:57:30 AM 4662362 synced recovery +DEBUG 3/19/2026, 10:57:33 AM 4665005 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:57:33 AM 4665009 synced recovery +DEBUG 3/19/2026, 10:57:42 AM 4674077 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:57:42 AM 4674077 synced recovery +DEBUG 3/19/2026, 10:57:44 AM 4675422 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:57:44 AM 4675423 synced recovery +DEBUG 3/19/2026, 10:57:46 AM 4677927 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:57:46 AM 4677928 synced recovery +DEBUG 3/19/2026, 10:57:48 AM 4679437 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:57:48 AM 4679438 synced recovery +DEBUG 3/19/2026, 10:57:50 AM 4682015 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:57:50 AM 4682017 synced recovery +DEBUG 3/19/2026, 10:57:52 AM 4683711 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:57:52 AM 4683711 synced recovery +DEBUG 3/19/2026, 10:57:55 AM 4687047 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:57:55 AM 4687047 synced recovery +DEBUG 3/19/2026, 10:58:05 AM 4696896 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:05 AM 4696897 synced recovery +DEBUG 3/19/2026, 10:58:07 AM 4698934 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:07 AM 4698935 synced recovery +DEBUG 3/19/2026, 10:58:09 AM 4700929 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:09 AM 4700930 synced recovery +DEBUG 3/19/2026, 10:58:11 AM 4703179 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:11 AM 4703180 synced recovery +DEBUG 3/19/2026, 10:58:13 AM 4704396 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:13 AM 4704397 synced recovery +DEBUG 3/19/2026, 10:58:16 AM 4707642 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:16 AM 4707643 synced recovery +DEBUG 3/19/2026, 10:58:17 AM 4708897 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:17 AM 4708898 synced recovery +DEBUG 3/19/2026, 10:58:18 AM 4710054 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:18 AM 4710054 synced recovery +DEBUG 3/19/2026, 10:58:19 AM 4711207 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:19 AM 4711208 synced recovery +DEBUG 3/19/2026, 10:58:21 AM 4712874 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:21 AM 4712875 synced recovery +DEBUG 3/19/2026, 10:58:22 AM 4714089 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:22 AM 4714090 synced recovery +DEBUG 3/19/2026, 10:58:24 AM 4716314 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:24 AM 4716318 synced recovery +DEBUG 3/19/2026, 10:58:26 AM 4718042 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:26 AM 4718044 synced recovery +DEBUG 3/19/2026, 10:58:27 AM 4719225 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:27 AM 4719229 synced recovery +DEBUG 3/19/2026, 10:58:29 AM 4720772 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:29 AM 4720773 synced recovery +DEBUG 3/19/2026, 10:58:30 AM 4722313 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:30 AM 4722317 synced recovery +DEBUG 3/19/2026, 10:58:32 AM 4724132 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:32 AM 4724133 synced recovery +DEBUG 3/19/2026, 10:58:36 AM 4727733 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:36 AM 4727733 synced recovery +DEBUG 3/19/2026, 10:58:41 AM 4733188 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:41 AM 4733188 synced recovery +DEBUG 3/19/2026, 10:58:45 AM 4737065 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:45 AM 4737066 synced recovery +DEBUG 3/19/2026, 10:58:48 AM 4739560 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:48 AM 4739562 synced recovery +DEBUG 3/19/2026, 10:58:49 AM 4741130 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:49 AM 4741131 synced recovery +DEBUG 3/19/2026, 10:58:56 AM 4747581 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:58:56 AM 4747582 synced recovery +DEBUG 3/19/2026, 10:59:02 AM 4754314 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:02 AM 4754315 synced recovery +DEBUG 3/19/2026, 10:59:07 AM 4758855 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:07 AM 4758856 synced recovery +DEBUG 3/19/2026, 10:59:10 AM 4761454 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:10 AM 4761460 synced recovery +DEBUG 3/19/2026, 10:59:11 AM 4763208 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:11 AM 4763209 synced recovery +DEBUG 3/19/2026, 10:59:12 AM 4764358 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:12 AM 4764360 synced recovery +DEBUG 3/19/2026, 10:59:14 AM 4765533 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:14 AM 4765535 synced recovery +DEBUG 3/19/2026, 10:59:22 AM 4774086 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:22 AM 4774088 synced recovery +DEBUG 3/19/2026, 10:59:23 AM 4775213 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:23 AM 4775214 synced recovery +INFO 3/19/2026, 10:59:25 AM 4776605 [blur] 1 +INFO 3/19/2026, 10:59:25 AM 4776605 [win] blur +INFO 3/19/2026, 10:59:26 AM 4777980 [focus] 1 +DEBUG 3/19/2026, 10:59:29 AM 4781280 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:29 AM 4781281 synced recovery +DEBUG 3/19/2026, 10:59:31 AM 4783145 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:31 AM 4783145 synced recovery +DEBUG 3/19/2026, 10:59:35 AM 4787267 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:35 AM 4787268 synced recovery +DEBUG 3/19/2026, 10:59:38 AM 4789781 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:38 AM 4789783 synced recovery +DEBUG 3/19/2026, 10:59:43 AM 4794784 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:43 AM 4794786 synced recovery +DEBUG 3/19/2026, 10:59:50 AM 4801606 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:50 AM 4801610 synced recovery +DEBUG 3/19/2026, 10:59:52 AM 4803861 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:52 AM 4803862 synced recovery +DEBUG 3/19/2026, 10:59:54 AM 4805447 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:54 AM 4805448 synced recovery +DEBUG 3/19/2026, 10:59:55 AM 4807188 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:55 AM 4807188 synced recovery +DEBUG 3/19/2026, 10:59:57 AM 4808441 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 10:59:57 AM 4808445 synced recovery +DEBUG 3/19/2026, 11:00:00 AM 4811615 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:00:00 AM 4811618 synced recovery +DEBUG 3/19/2026, 11:00:04 AM 4816156 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:00:04 AM 4816162 synced recovery +DEBUG 3/19/2026, 11:00:07 AM 4818697 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:00:07 AM 4818698 synced recovery +INFO 3/19/2026, 11:00:08 AM 4819658 [blur] 1 +INFO 3/19/2026, 11:00:08 AM 4819658 [win] blur +INFO 3/19/2026, 11:00:10 AM 4822146 [focus] 1 +DEBUG 3/19/2026, 11:00:15 AM 4826659 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:00:15 AM 4826661 synced recovery +DEBUG 3/19/2026, 11:00:17 AM 4829191 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:00:17 AM 4829191 synced recovery +DEBUG 3/19/2026, 11:00:21 AM 4832583 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:00:21 AM 4832586 synced recovery +DEBUG 3/19/2026, 11:00:24 AM 4835489 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:00:24 AM 4835490 synced recovery +DEBUG 3/19/2026, 11:00:25 AM 4837115 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:00:25 AM 4837116 synced recovery +DEBUG 3/19/2026, 11:00:27 AM 4839174 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:00:27 AM 4839174 synced recovery +DEBUG 3/19/2026, 11:00:33 AM 4844671 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:00:33 AM 4844676 synced recovery +DEBUG 3/19/2026, 11:00:44 AM 4855932 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:00:44 AM 4855934 synced recovery +DEBUG 3/19/2026, 11:00:45 AM 4857070 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:00:45 AM 4857071 synced recovery +DEBUG 3/19/2026, 11:00:48 AM 4860061 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:00:48 AM 4860063 synced recovery +DEBUG 3/19/2026, 11:00:52 AM 4864160 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:00:52 AM 4864164 synced recovery +DEBUG 3/19/2026, 11:00:53 AM 4865281 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:00:53 AM 4865286 synced recovery +DEBUG 3/19/2026, 11:00:56 AM 4867588 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:00:56 AM 4867593 synced recovery +DEBUG 3/19/2026, 11:01:02 AM 4874178 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:02 AM 4874178 synced recovery +DEBUG 3/19/2026, 11:01:06 AM 4878132 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:06 AM 4878136 synced recovery +DEBUG 3/19/2026, 11:01:07 AM 4879294 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:07 AM 4879299 synced recovery +DEBUG 3/19/2026, 11:01:09 AM 4880600 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:09 AM 4880604 synced recovery +DEBUG 3/19/2026, 11:01:13 AM 4884562 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:13 AM 4884565 synced recovery +DEBUG 3/19/2026, 11:01:15 AM 4886730 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:15 AM 4886730 synced recovery +DEBUG 3/19/2026, 11:01:16 AM 4888301 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:16 AM 4888315 synced recovery +DEBUG 3/19/2026, 11:01:18 AM 4889426 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:18 AM 4889427 synced recovery +DEBUG 3/19/2026, 11:01:21 AM 4893035 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:21 AM 4893037 synced recovery +DEBUG 3/19/2026, 11:01:22 AM 4894239 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:22 AM 4894244 synced recovery +DEBUG 3/19/2026, 11:01:24 AM 4896231 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:24 AM 4896231 synced recovery +DEBUG 3/19/2026, 11:01:29 AM 4900742 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:29 AM 4900758 synced recovery +DEBUG 3/19/2026, 11:01:30 AM 4901884 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:30 AM 4901885 synced recovery +INFO 3/19/2026, 11:01:33 AM 4904620 [blur] 1 +INFO 3/19/2026, 11:01:33 AM 4904620 [win] blur +INFO 3/19/2026, 11:01:34 AM 4905378 [focus] 1 +DEBUG 3/19/2026, 11:01:37 AM 4908407 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:37 AM 4908411 synced recovery +DEBUG 3/19/2026, 11:01:42 AM 4914106 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:42 AM 4914111 synced recovery +DEBUG 3/19/2026, 11:01:43 AM 4915312 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:43 AM 4915312 synced recovery +DEBUG 3/19/2026, 11:01:45 AM 4916498 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:45 AM 4916499 synced recovery +DEBUG 3/19/2026, 11:01:50 AM 4922051 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:50 AM 4922052 synced recovery +DEBUG 3/19/2026, 11:01:51 AM 4923223 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:51 AM 4923224 synced recovery +DEBUG 3/19/2026, 11:01:53 AM 4924572 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:53 AM 4924573 synced recovery +DEBUG 3/19/2026, 11:01:54 AM 4925722 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:01:54 AM 4925723 synced recovery +DEBUG 3/19/2026, 11:02:01 AM 4932401 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:01 AM 4932405 synced recovery +DEBUG 3/19/2026, 11:02:03 AM 4935019 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:03 AM 4935024 synced recovery +DEBUG 3/19/2026, 11:02:09 AM 4940990 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:09 AM 4940991 synced recovery +DEBUG 3/19/2026, 11:02:12 AM 4944238 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:12 AM 4944240 synced recovery +DEBUG 3/19/2026, 11:02:14 AM 4945963 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:14 AM 4945964 synced recovery +DEBUG 3/19/2026, 11:02:16 AM 4948143 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:16 AM 4948143 synced recovery +DEBUG 3/19/2026, 11:02:20 AM 4951414 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:20 AM 4951415 synced recovery +DEBUG 3/19/2026, 11:02:21 AM 4952568 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:21 AM 4952569 synced recovery +DEBUG 3/19/2026, 11:02:23 AM 4954505 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:23 AM 4954509 synced recovery +DEBUG 3/19/2026, 11:02:24 AM 4955851 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:24 AM 4955856 synced recovery +DEBUG 3/19/2026, 11:02:27 AM 4958867 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:27 AM 4958868 synced recovery +DEBUG 3/19/2026, 11:02:28 AM 4960172 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:28 AM 4960174 synced recovery +DEBUG 3/19/2026, 11:02:36 AM 4967711 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:36 AM 4967712 synced recovery +DEBUG 3/19/2026, 11:02:43 AM 4974649 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:43 AM 4974650 synced recovery +DEBUG 3/19/2026, 11:02:46 AM 4977898 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:46 AM 4977898 synced recovery +DEBUG 3/19/2026, 11:02:47 AM 4979019 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:47 AM 4979020 synced recovery +DEBUG 3/19/2026, 11:02:51 AM 4982383 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:51 AM 4982387 synced recovery +DEBUG 3/19/2026, 11:02:52 AM 4983525 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:52 AM 4983525 synced recovery +DEBUG 3/19/2026, 11:02:58 AM 4990355 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:02:58 AM 4990356 synced recovery +DEBUG 3/19/2026, 11:03:01 AM 4992951 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:01 AM 4992952 synced recovery +DEBUG 3/19/2026, 11:03:05 AM 4996568 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:05 AM 4996569 synced recovery +DEBUG 3/19/2026, 11:03:09 AM 5000773 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:09 AM 5000779 synced recovery +DEBUG 3/19/2026, 11:03:17 AM 5008397 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:17 AM 5008400 synced recovery +DEBUG 3/19/2026, 11:03:18 AM 5009718 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:18 AM 5009718 synced recovery +DEBUG 3/19/2026, 11:03:25 AM 5016914 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:25 AM 5016915 synced recovery +DEBUG 3/19/2026, 11:03:31 AM 5022856 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:31 AM 5022857 synced recovery +DEBUG 3/19/2026, 11:03:34 AM 5026301 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:34 AM 5026302 synced recovery +DEBUG 3/19/2026, 11:03:36 AM 5027465 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:36 AM 5027469 synced recovery +DEBUG 3/19/2026, 11:03:37 AM 5028613 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:37 AM 5028619 synced recovery +DEBUG 3/19/2026, 11:03:39 AM 5031369 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:39 AM 5031370 synced recovery +DEBUG 3/19/2026, 11:03:41 AM 5032483 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:41 AM 5032485 synced recovery +DEBUG 3/19/2026, 11:03:42 AM 5033658 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:42 AM 5033661 synced recovery +DEBUG 3/19/2026, 11:03:45 AM 5036785 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:45 AM 5036786 synced recovery +DEBUG 3/19/2026, 11:03:46 AM 5037975 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:46 AM 5037980 synced recovery +DEBUG 3/19/2026, 11:03:47 AM 5039175 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:47 AM 5039175 synced recovery +DEBUG 3/19/2026, 11:03:50 AM 5041435 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:50 AM 5041441 synced recovery +DEBUG 3/19/2026, 11:03:51 AM 5042546 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:51 AM 5042546 synced recovery +DEBUG 3/19/2026, 11:03:52 AM 5043713 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:52 AM 5043714 synced recovery +DEBUG 3/19/2026, 11:03:53 AM 5044872 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:53 AM 5044873 synced recovery +DEBUG 3/19/2026, 11:03:54 AM 5046075 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:03:54 AM 5046078 synced recovery +DEBUG 3/19/2026, 11:04:00 AM 5051746 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:00 AM 5051750 synced recovery +DEBUG 3/19/2026, 11:04:01 AM 5052891 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:01 AM 5052892 synced recovery +DEBUG 3/19/2026, 11:04:05 AM 5056590 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:05 AM 5056594 synced recovery +DEBUG 3/19/2026, 11:04:08 AM 5059380 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:08 AM 5059384 synced recovery +DEBUG 3/19/2026, 11:04:09 AM 5060526 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:09 AM 5060527 synced recovery +DEBUG 3/19/2026, 11:04:15 AM 5066631 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:15 AM 5066632 synced recovery +DEBUG 3/19/2026, 11:04:20 AM 5071690 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:20 AM 5071691 synced recovery +DEBUG 3/19/2026, 11:04:21 AM 5072846 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:21 AM 5072848 synced recovery +DEBUG 3/19/2026, 11:04:24 AM 5075648 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:24 AM 5075657 synced recovery +DEBUG 3/19/2026, 11:04:26 AM 5077469 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:26 AM 5077470 synced recovery +DEBUG 3/19/2026, 11:04:27 AM 5078648 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:27 AM 5078649 synced recovery +DEBUG 3/19/2026, 11:04:30 AM 5082154 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:30 AM 5082160 synced recovery +DEBUG 3/19/2026, 11:04:32 AM 5083464 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:32 AM 5083465 synced recovery +DEBUG 3/19/2026, 11:04:45 AM 5096917 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:45 AM 5096923 synced recovery +DEBUG 3/19/2026, 11:04:48 AM 5099680 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:48 AM 5099684 synced recovery +DEBUG 3/19/2026, 11:04:49 AM 5101080 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:49 AM 5101084 synced recovery +DEBUG 3/19/2026, 11:04:51 AM 5102915 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:51 AM 5102915 synced recovery +DEBUG 3/19/2026, 11:04:52 AM 5104282 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:04:52 AM 5104283 synced recovery +DEBUG 3/19/2026, 11:05:18 AM 5129788 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:05:18 AM 5129791 synced recovery +DEBUG 3/19/2026, 11:05:20 AM 5131464 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:05:20 AM 5131465 synced recovery +DEBUG 3/19/2026, 11:05:22 AM 5133779 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:05:22 AM 5133784 synced recovery +DEBUG 3/19/2026, 11:05:23 AM 5135259 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:05:23 AM 5135260 synced recovery +DEBUG 3/19/2026, 11:05:27 AM 5138835 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:05:27 AM 5138835 synced recovery +DEBUG 3/19/2026, 11:05:30 AM 5141854 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:05:30 AM 5141857 synced recovery +DEBUG 3/19/2026, 11:05:34 AM 5145748 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:05:34 AM 5145749 synced recovery +DEBUG 3/19/2026, 11:05:38 AM 5149387 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:05:38 AM 5149389 synced recovery +DEBUG 3/19/2026, 11:05:40 AM 5151734 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:05:40 AM 5151744 synced recovery +DEBUG 3/19/2026, 11:05:49 AM 5160701 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:05:49 AM 5160702 synced recovery +DEBUG 3/19/2026, 11:05:56 AM 5167622 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:05:56 AM 5167623 synced recovery +DEBUG 3/19/2026, 11:05:59 AM 5170883 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:05:59 AM 5170884 synced recovery +DEBUG 3/19/2026, 11:06:04 AM 5175641 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:06:04 AM 5175642 synced recovery +DEBUG 3/19/2026, 11:06:05 AM 5176883 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:06:05 AM 5176884 synced recovery +DEBUG 3/19/2026, 11:06:06 AM 5178124 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:06:06 AM 5178130 synced recovery +DEBUG 3/19/2026, 11:06:08 AM 5180117 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:06:08 AM 5180118 synced recovery +DEBUG 3/19/2026, 11:06:10 AM 5182123 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:06:10 AM 5182124 synced recovery +DEBUG 3/19/2026, 11:06:12 AM 5183528 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:06:12 AM 5183529 synced recovery +DEBUG 3/19/2026, 11:06:17 AM 5188529 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:06:17 AM 5188530 synced recovery +DEBUG 3/19/2026, 11:06:26 AM 5197449 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:06:26 AM 5197452 synced recovery +DEBUG 3/19/2026, 11:06:28 AM 5200322 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:06:28 AM 5200322 synced recovery +DEBUG 3/19/2026, 11:06:32 AM 5203963 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:06:32 AM 5203965 synced recovery +DEBUG 3/19/2026, 11:06:37 AM 5208656 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:06:37 AM 5208657 synced recovery +DEBUG 3/19/2026, 11:06:38 AM 5209799 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:06:38 AM 5209804 synced recovery +DEBUG 3/19/2026, 11:06:39 AM 5210987 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:06:39 AM 5210992 synced recovery +DEBUG 3/19/2026, 11:06:43 AM 5215160 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:06:43 AM 5215162 synced recovery +DEBUG 3/19/2026, 11:06:46 AM 5217380 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:06:46 AM 5217381 synced recovery +INFO 3/19/2026, 11:06:49 AM 5220528 [blur] 1 +INFO 3/19/2026, 11:06:49 AM 5220528 [win] blur +INFO 3/19/2026, 11:06:52 AM 5223458 [focus] 1 +DEBUG 3/19/2026, 11:06:56 AM 5227533 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:06:56 AM 5227538 synced recovery +DEBUG 3/19/2026, 11:06:57 AM 5228657 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:06:57 AM 5228659 synced recovery +DEBUG 3/19/2026, 11:07:01 AM 5232524 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:01 AM 5232525 synced recovery +DEBUG 3/19/2026, 11:07:04 AM 5235435 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:04 AM 5235436 synced recovery +DEBUG 3/19/2026, 11:07:05 AM 5237326 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:05 AM 5237329 synced recovery +DEBUG 3/19/2026, 11:07:09 AM 5240785 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:09 AM 5240789 synced recovery +DEBUG 3/19/2026, 11:07:10 AM 5241932 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:10 AM 5241933 synced recovery +DEBUG 3/19/2026, 11:07:11 AM 5243073 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:11 AM 5243073 synced recovery +DEBUG 3/19/2026, 11:07:12 AM 5244218 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:12 AM 5244219 synced recovery +DEBUG 3/19/2026, 11:07:17 AM 5248997 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:17 AM 5248998 synced recovery +DEBUG 3/19/2026, 11:07:18 AM 5250126 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:18 AM 5250132 synced recovery +DEBUG 3/19/2026, 11:07:21 AM 5252518 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:21 AM 5252522 synced recovery +DEBUG 3/19/2026, 11:07:30 AM 5261627 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:30 AM 5261628 synced recovery +DEBUG 3/19/2026, 11:07:34 AM 5265513 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:34 AM 5265522 synced recovery +DEBUG 3/19/2026, 11:07:35 AM 5267219 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:35 AM 5267220 synced recovery +DEBUG 3/19/2026, 11:07:41 AM 5272383 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:41 AM 5272384 synced recovery +DEBUG 3/19/2026, 11:07:45 AM 5276614 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:45 AM 5276621 synced recovery +DEBUG 3/19/2026, 11:07:46 AM 5278060 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:46 AM 5278062 synced recovery +DEBUG 3/19/2026, 11:07:48 AM 5279488 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:48 AM 5279490 synced recovery +DEBUG 3/19/2026, 11:07:52 AM 5283954 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:52 AM 5283955 synced recovery +DEBUG 3/19/2026, 11:07:55 AM 5287259 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:55 AM 5287260 synced recovery +DEBUG 3/19/2026, 11:07:57 AM 5288593 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:07:57 AM 5288594 synced recovery +DEBUG 3/19/2026, 11:08:02 AM 5294302 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:08:02 AM 5294308 synced recovery +DEBUG 3/19/2026, 11:08:05 AM 5296990 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:08:05 AM 5296995 synced recovery +DEBUG 3/19/2026, 11:08:12 AM 5303513 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:08:12 AM 5303515 synced recovery +DEBUG 3/19/2026, 11:08:18 AM 5309863 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:08:18 AM 5309872 synced recovery +DEBUG 3/19/2026, 11:08:21 AM 5313325 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:08:21 AM 5313329 synced recovery +DEBUG 3/19/2026, 11:08:28 AM 5320350 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:08:28 AM 5320353 synced recovery +DEBUG 3/19/2026, 11:08:30 AM 5321509 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:08:30 AM 5321513 synced recovery +DEBUG 3/19/2026, 11:08:39 AM 5331064 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:08:39 AM 5331065 synced recovery +DEBUG 3/19/2026, 11:08:41 AM 5333042 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:08:41 AM 5333047 synced recovery +DEBUG 3/19/2026, 11:08:48 AM 5340199 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:08:48 AM 5340199 synced recovery +DEBUG 3/19/2026, 11:08:51 AM 5342814 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:08:51 AM 5342817 synced recovery +DEBUG 3/19/2026, 11:08:53 AM 5344800 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:08:53 AM 5344801 synced recovery +DEBUG 3/19/2026, 11:08:54 AM 5345998 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:08:54 AM 5345998 synced recovery +DEBUG 3/19/2026, 11:08:55 AM 5347171 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:08:55 AM 5347174 synced recovery +INFO 3/19/2026, 11:08:55 AM 5347226 [blur] 1 +INFO 3/19/2026, 11:08:55 AM 5347226 [win] blur +INFO 3/19/2026, 11:08:57 AM 5348813 [focus] 1 +DEBUG 3/19/2026, 11:09:00 AM 5351570 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:09:00 AM 5351575 synced recovery +DEBUG 3/19/2026, 11:09:03 AM 5354853 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:09:03 AM 5354859 synced recovery +INFO 3/19/2026, 11:09:05 AM 5356454 [blur] 1 +INFO 3/19/2026, 11:09:05 AM 5356455 [win] blur +DEBUG 3/19/2026, 11:09:05 AM 5356661 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:09:05 AM 5356663 synced recovery +INFO 3/19/2026, 11:09:05 AM 5357259 [focus] 1 +INFO 3/19/2026, 11:09:07 AM 5358896 [blur] 1 +INFO 3/19/2026, 11:09:07 AM 5358897 [win] blur +INFO 3/19/2026, 11:09:10 AM 5361606 [focus] 1 +INFO 3/19/2026, 11:09:14 AM 5366304 [blur] 1 +INFO 3/19/2026, 11:09:14 AM 5366304 [win] blur +INFO 3/19/2026, 11:13:18 AM 5609661 [focus] 1 +INFO 3/19/2026, 11:13:23 AM 5614879 [blur] 1 +INFO 3/19/2026, 11:13:23 AM 5614879 [win] blur +INFO 3/19/2026, 11:13:41 AM 5632429 [focus] 1 +DEBUG 3/19/2026, 11:13:44 AM 5636087 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:13:44 AM 5636089 synced recovery +DEBUG 3/19/2026, 11:13:45 AM 5637248 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:13:45 AM 5637249 synced recovery +DEBUG 3/19/2026, 11:13:47 AM 5638412 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:13:47 AM 5638415 synced recovery +DEBUG 3/19/2026, 11:13:48 AM 5639553 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:13:48 AM 5639555 synced recovery +DEBUG 3/19/2026, 11:13:50 AM 5641501 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:13:50 AM 5641503 synced recovery +DEBUG 3/19/2026, 11:13:51 AM 5642824 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:13:51 AM 5642826 synced recovery +INFO 3/19/2026, 11:13:51 AM 5643262 [blur] 1 +INFO 3/19/2026, 11:13:51 AM 5643262 [win] blur +INFO 3/19/2026, 11:14:05 AM 5657143 [focus] 1 +INFO 3/19/2026, 11:14:06 AM 5657559 [blur] 1 +INFO 3/19/2026, 11:14:06 AM 5657559 [win] blur +INFO 3/19/2026, 11:14:07 AM 5658630 [focus] 1 +DEBUG 3/19/2026, 11:14:10 AM 5661914 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:14:10 AM 5661915 synced recovery +DEBUG 3/19/2026, 11:14:25 AM 5676731 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:14:25 AM 5676736 synced recovery +DEBUG 3/19/2026, 11:14:28 AM 5679822 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:14:28 AM 5679822 synced recovery +INFO 3/19/2026, 11:14:30 AM 5681917 [blur] 1 +INFO 3/19/2026, 11:14:30 AM 5681917 [win] blur +INFO 3/19/2026, 11:14:37 AM 5688928 [focus] 1 +DEBUG 3/19/2026, 11:14:40 AM 5692082 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:14:40 AM 5692086 synced recovery +DEBUG 3/19/2026, 11:14:42 AM 5693773 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:14:42 AM 5693775 synced recovery +DEBUG 3/19/2026, 11:14:44 AM 5695521 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:14:44 AM 5695526 synced recovery +DEBUG 3/19/2026, 11:14:45 AM 5696805 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:14:45 AM 5696806 synced recovery +DEBUG 3/19/2026, 11:14:48 AM 5699776 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:14:48 AM 5699778 synced recovery +DEBUG 3/19/2026, 11:14:50 AM 5701589 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:14:50 AM 5701591 synced recovery +DEBUG 3/19/2026, 11:14:51 AM 5702771 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:14:51 AM 5702777 synced recovery +DEBUG 3/19/2026, 11:14:53 AM 5704521 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:14:53 AM 5704526 synced recovery +DEBUG 3/19/2026, 11:14:55 AM 5706708 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:14:55 AM 5706723 synced recovery +DEBUG 3/19/2026, 11:14:56 AM 5708262 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:14:56 AM 5708263 synced recovery +DEBUG 3/19/2026, 11:15:01 AM 5712866 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:15:01 AM 5712866 synced recovery +DEBUG 3/19/2026, 11:15:03 AM 5714548 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:15:03 AM 5714548 synced recovery +DEBUG 3/19/2026, 11:15:05 AM 5716898 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:15:05 AM 5716899 synced recovery +DEBUG 3/19/2026, 11:15:07 AM 5719196 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:15:07 AM 5719201 synced recovery +DEBUG 3/19/2026, 11:15:09 AM 5720590 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:15:09 AM 5720593 synced recovery +DEBUG 3/19/2026, 11:15:15 AM 5726515 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:15:15 AM 5726516 synced recovery +DEBUG 3/19/2026, 11:15:27 AM 5738736 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:15:27 AM 5738736 synced recovery +DEBUG 3/19/2026, 11:15:28 AM 5739947 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:15:28 AM 5739952 synced recovery +DEBUG 3/19/2026, 11:15:31 AM 5743312 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:15:31 AM 5743319 synced recovery +DEBUG 3/19/2026, 11:15:33 AM 5744816 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:15:33 AM 5744818 synced recovery +DEBUG 3/19/2026, 11:15:36 AM 5747540 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:15:36 AM 5747541 synced recovery +DEBUG 3/19/2026, 11:15:37 AM 5748703 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:15:37 AM 5748705 synced recovery +DEBUG 3/19/2026, 11:15:40 AM 5751746 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:15:40 AM 5751748 synced recovery +DEBUG 3/19/2026, 11:15:41 AM 5752903 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:15:41 AM 5752904 synced recovery +DEBUG 3/19/2026, 11:15:50 AM 5761950 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:15:50 AM 5761955 synced recovery +DEBUG 3/19/2026, 11:15:57 AM 5769252 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:15:57 AM 5769256 synced recovery +DEBUG 3/19/2026, 11:16:27 AM 5798460 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:16:27 AM 5798461 synced recovery +DEBUG 3/19/2026, 11:16:31 AM 5802373 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:16:31 AM 5802373 synced recovery +DEBUG 3/19/2026, 11:16:39 AM 5811134 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:16:39 AM 5811135 synced recovery +DEBUG 3/19/2026, 11:16:45 AM 5816836 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:16:45 AM 5816841 synced recovery +DEBUG 3/19/2026, 11:17:05 AM 5837047 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:17:05 AM 5837047 synced recovery +DEBUG 3/19/2026, 11:17:10 AM 5842366 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:17:10 AM 5842367 synced recovery +DEBUG 3/19/2026, 11:17:15 AM 5846373 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:17:15 AM 5846381 synced recovery +INFO 3/19/2026, 11:17:17 AM 5848900 [blur] 1 +INFO 3/19/2026, 11:17:17 AM 5848900 [win] blur +INFO 3/19/2026, 11:17:39 AM 5871291 [focus] 1 +DEBUG 3/19/2026, 11:17:52 AM 5884173 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:17:52 AM 5884173 synced recovery +DEBUG 3/19/2026, 11:17:53 AM 5885273 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:17:53 AM 5885274 synced recovery +DEBUG 3/19/2026, 11:17:55 AM 5886464 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:17:55 AM 5886470 synced recovery +DEBUG 3/19/2026, 11:17:57 AM 5888687 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:17:57 AM 5888688 synced recovery +INFO 3/19/2026, 11:17:58 AM 5890036 [blur] 1 +INFO 3/19/2026, 11:17:58 AM 5890036 [win] blur +INFO 3/19/2026, 11:17:58 AM 5890310 [focus] 1 +DEBUG 3/19/2026, 11:18:01 AM 5892613 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:01 AM 5892619 synced recovery +DEBUG 3/19/2026, 11:18:02 AM 5893793 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:02 AM 5893793 synced recovery +DEBUG 3/19/2026, 11:18:08 AM 5899601 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:08 AM 5899601 synced recovery +DEBUG 3/19/2026, 11:18:10 AM 5901409 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:10 AM 5901410 synced recovery +DEBUG 3/19/2026, 11:18:11 AM 5902828 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:11 AM 5902828 synced recovery +DEBUG 3/19/2026, 11:18:13 AM 5904904 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:13 AM 5904907 synced recovery +DEBUG 3/19/2026, 11:18:21 AM 5912661 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:21 AM 5912662 synced recovery +DEBUG 3/19/2026, 11:18:23 AM 5914459 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:23 AM 5914460 synced recovery +DEBUG 3/19/2026, 11:18:24 AM 5915953 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:24 AM 5915953 synced recovery +DEBUG 3/19/2026, 11:18:29 AM 5921168 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:29 AM 5921169 synced recovery +DEBUG 3/19/2026, 11:18:31 AM 5923055 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:31 AM 5923056 synced recovery +DEBUG 3/19/2026, 11:18:37 AM 5928888 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:37 AM 5928889 synced recovery +DEBUG 3/19/2026, 11:18:38 AM 5930069 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:38 AM 5930070 synced recovery +DEBUG 3/19/2026, 11:18:39 AM 5931242 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:39 AM 5931243 synced recovery +DEBUG 3/19/2026, 11:18:43 AM 5934381 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:43 AM 5934384 synced recovery +DEBUG 3/19/2026, 11:18:45 AM 5937353 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:45 AM 5937353 synced recovery +DEBUG 3/19/2026, 11:18:47 AM 5938698 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:47 AM 5938699 synced recovery +DEBUG 3/19/2026, 11:18:48 AM 5940352 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:48 AM 5940353 synced recovery +DEBUG 3/19/2026, 11:18:53 AM 5945369 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:53 AM 5945370 synced recovery +DEBUG 3/19/2026, 11:18:56 AM 5948043 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:56 AM 5948043 synced recovery +DEBUG 3/19/2026, 11:18:59 AM 5950423 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:18:59 AM 5950423 synced recovery +DEBUG 3/19/2026, 11:19:05 AM 5957153 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:19:05 AM 5957155 synced recovery +DEBUG 3/19/2026, 11:19:07 AM 5959333 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:19:07 AM 5959333 synced recovery +DEBUG 3/19/2026, 11:19:10 AM 5961963 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:19:10 AM 5961963 synced recovery +DEBUG 3/19/2026, 11:19:11 AM 5963274 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:19:11 AM 5963275 synced recovery +DEBUG 3/19/2026, 11:19:13 AM 5964407 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:19:13 AM 5964407 synced recovery +DEBUG 3/19/2026, 11:19:15 AM 5966385 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:19:15 AM 5966388 synced recovery +DEBUG 3/19/2026, 11:19:18 AM 5970017 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:19:18 AM 5970018 synced recovery +INFO 3/19/2026, 11:19:54 AM 6006096 [blur] 1 +INFO 3/19/2026, 11:19:54 AM 6006096 [win] blur +INFO 3/19/2026, 11:19:54 AM 6006195 [focus] 1 +INFO 3/19/2026, 11:19:54 AM 6006342 [blur] 1 +INFO 3/19/2026, 11:19:54 AM 6006343 [win] blur +INFO 3/19/2026, 11:19:55 AM 6006618 [focus] 1 +DEBUG 3/19/2026, 11:20:01 AM 6012603 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:20:01 AM 6012604 synced recovery +DEBUG 3/19/2026, 11:20:02 AM 6014229 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:20:02 AM 6014230 synced recovery +DEBUG 3/19/2026, 11:20:25 AM 6036797 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:20:25 AM 6036798 synced recovery +DEBUG 3/19/2026, 11:20:38 AM 6049808 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:20:38 AM 6049818 synced recovery +DEBUG 3/19/2026, 11:20:40 AM 6051667 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:20:40 AM 6051670 synced recovery +DEBUG 3/19/2026, 11:20:41 AM 6052853 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:20:41 AM 6052853 synced recovery +DEBUG 3/19/2026, 11:20:43 AM 6055025 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:20:43 AM 6055026 synced recovery +DEBUG 3/19/2026, 11:20:45 AM 6056736 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:20:45 AM 6056741 synced recovery +DEBUG 3/19/2026, 11:20:47 AM 6059119 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:20:47 AM 6059120 synced recovery +DEBUG 3/19/2026, 11:20:48 AM 6060255 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:20:48 AM 6060255 synced recovery +DEBUG 3/19/2026, 11:20:50 AM 6061535 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:20:50 AM 6061539 synced recovery +DEBUG 3/19/2026, 11:20:54 AM 6066242 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:20:54 AM 6066243 synced recovery +DEBUG 3/19/2026, 11:20:56 AM 6067758 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:20:56 AM 6067759 synced recovery +DEBUG 3/19/2026, 11:21:02 AM 6073904 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:02 AM 6073904 synced recovery +DEBUG 3/19/2026, 11:21:03 AM 6075138 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:03 AM 6075139 synced recovery +DEBUG 3/19/2026, 11:21:04 AM 6076259 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:04 AM 6076261 synced recovery +DEBUG 3/19/2026, 11:21:06 AM 6077535 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:06 AM 6077536 synced recovery +DEBUG 3/19/2026, 11:21:07 AM 6078672 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:07 AM 6078673 synced recovery +DEBUG 3/19/2026, 11:21:09 AM 6081275 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:09 AM 6081276 synced recovery +DEBUG 3/19/2026, 11:21:11 AM 6082809 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:11 AM 6082817 synced recovery +DEBUG 3/19/2026, 11:21:12 AM 6083966 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:12 AM 6083966 synced recovery +DEBUG 3/19/2026, 11:21:18 AM 6089463 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:18 AM 6089467 synced recovery +DEBUG 3/19/2026, 11:21:19 AM 6091174 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:19 AM 6091175 synced recovery +DEBUG 3/19/2026, 11:21:22 AM 6093505 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:22 AM 6093506 synced recovery +DEBUG 3/19/2026, 11:21:23 AM 6094651 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:23 AM 6094652 synced recovery +DEBUG 3/19/2026, 11:21:24 AM 6095803 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:24 AM 6095804 synced recovery +DEBUG 3/19/2026, 11:21:28 AM 6100155 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:28 AM 6100157 synced recovery +DEBUG 3/19/2026, 11:21:35 AM 6106433 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:35 AM 6106433 synced recovery +DEBUG 3/19/2026, 11:21:36 AM 6107569 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:36 AM 6107570 synced recovery +DEBUG 3/19/2026, 11:21:40 AM 6111515 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:40 AM 6111519 synced recovery +DEBUG 3/19/2026, 11:21:41 AM 6112692 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:41 AM 6112693 synced recovery +DEBUG 3/19/2026, 11:21:43 AM 6115071 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:43 AM 6115072 synced recovery +DEBUG 3/19/2026, 11:21:44 AM 6116299 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:44 AM 6116300 synced recovery +DEBUG 3/19/2026, 11:21:46 AM 6117537 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:46 AM 6117538 synced recovery +DEBUG 3/19/2026, 11:21:48 AM 6119633 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:21:48 AM 6119639 synced recovery +DEBUG 3/19/2026, 11:22:00 AM 6132095 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:00 AM 6132096 synced recovery +DEBUG 3/19/2026, 11:22:04 AM 6135666 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:04 AM 6135667 synced recovery +DEBUG 3/19/2026, 11:22:07 AM 6138726 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:07 AM 6138727 synced recovery +DEBUG 3/19/2026, 11:22:10 AM 6142013 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:10 AM 6142025 synced recovery +DEBUG 3/19/2026, 11:22:14 AM 6145408 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:14 AM 6145409 synced recovery +DEBUG 3/19/2026, 11:22:16 AM 6147787 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:16 AM 6147787 synced recovery +DEBUG 3/19/2026, 11:22:20 AM 6151577 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:20 AM 6151577 synced recovery +DEBUG 3/19/2026, 11:22:23 AM 6155331 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:23 AM 6155335 synced recovery +DEBUG 3/19/2026, 11:22:25 AM 6157366 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:25 AM 6157369 synced recovery +DEBUG 3/19/2026, 11:22:27 AM 6159279 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:27 AM 6159280 synced recovery +DEBUG 3/19/2026, 11:22:30 AM 6161884 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:30 AM 6161885 synced recovery +DEBUG 3/19/2026, 11:22:32 AM 6164028 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:32 AM 6164030 synced recovery +DEBUG 3/19/2026, 11:22:35 AM 6166438 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:35 AM 6166444 synced recovery +DEBUG 3/19/2026, 11:22:37 AM 6168440 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:37 AM 6168441 synced recovery +DEBUG 3/19/2026, 11:22:40 AM 6171723 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:40 AM 6171724 synced recovery +DEBUG 3/19/2026, 11:22:43 AM 6174457 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:43 AM 6174458 synced recovery +DEBUG 3/19/2026, 11:22:46 AM 6177912 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:46 AM 6177914 synced recovery +DEBUG 3/19/2026, 11:22:48 AM 6180037 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:48 AM 6180039 synced recovery +DEBUG 3/19/2026, 11:22:50 AM 6182212 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:50 AM 6182216 synced recovery +DEBUG 3/19/2026, 11:22:52 AM 6184287 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:52 AM 6184293 synced recovery +DEBUG 3/19/2026, 11:22:54 AM 6186289 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:54 AM 6186301 synced recovery +DEBUG 3/19/2026, 11:22:56 AM 6188018 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:56 AM 6188021 synced recovery +DEBUG 3/19/2026, 11:22:59 AM 6191168 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:22:59 AM 6191170 synced recovery +DEBUG 3/19/2026, 11:23:02 AM 6194154 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:23:02 AM 6194157 synced recovery +DEBUG 3/19/2026, 11:23:05 AM 6197284 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:23:05 AM 6197285 synced recovery +DEBUG 3/19/2026, 11:23:20 AM 6211905 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:23:20 AM 6211906 synced recovery +DEBUG 3/19/2026, 11:23:29 AM 6221252 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:23:29 AM 6221252 synced recovery +DEBUG 3/19/2026, 11:23:31 AM 6223221 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:23:31 AM 6223226 synced recovery +DEBUG 3/19/2026, 11:23:34 AM 6225993 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:23:34 AM 6225996 synced recovery +DEBUG 3/19/2026, 11:23:36 AM 6227756 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:23:36 AM 6227766 synced recovery +DEBUG 3/19/2026, 11:23:39 AM 6230706 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:23:39 AM 6230707 synced recovery +DEBUG 3/19/2026, 11:23:42 AM 6233928 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:23:42 AM 6233929 synced recovery +DEBUG 3/19/2026, 11:23:44 AM 6236193 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:23:44 AM 6236194 synced recovery +DEBUG 3/19/2026, 11:23:46 AM 6237395 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:23:46 AM 6237401 synced recovery +DEBUG 3/19/2026, 11:23:47 AM 6238762 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:23:47 AM 6238763 synced recovery +DEBUG 3/19/2026, 11:23:48 AM 6240074 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:23:48 AM 6240076 synced recovery +DEBUG 3/19/2026, 11:23:51 AM 6242537 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:23:51 AM 6242542 synced recovery +DEBUG 3/19/2026, 11:23:55 AM 6246624 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:23:55 AM 6246628 synced recovery +DEBUG 3/19/2026, 11:23:56 AM 6248229 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:23:56 AM 6248231 synced recovery +DEBUG 3/19/2026, 11:24:01 AM 6253271 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:24:01 AM 6253272 synced recovery +DEBUG 3/19/2026, 11:24:03 AM 6254439 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:24:03 AM 6254441 synced recovery +DEBUG 3/19/2026, 11:24:04 AM 6255633 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:24:04 AM 6255638 synced recovery +DEBUG 3/19/2026, 11:24:06 AM 6257698 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:24:06 AM 6257712 synced recovery +DEBUG 3/19/2026, 11:24:08 AM 6259819 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:24:08 AM 6259832 synced recovery +DEBUG 3/19/2026, 11:24:09 AM 6261251 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:24:09 AM 6261252 synced recovery +DEBUG 3/19/2026, 11:24:16 AM 6268254 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:24:16 AM 6268261 synced recovery +DEBUG 3/19/2026, 11:24:18 AM 6269413 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:24:18 AM 6269414 synced recovery +DEBUG 3/19/2026, 11:24:19 AM 6270738 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:24:19 AM 6270739 synced recovery +DEBUG 3/19/2026, 11:24:35 AM 6286467 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:24:35 AM 6286468 synced recovery +DEBUG 3/19/2026, 11:24:36 AM 6288350 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:24:36 AM 6288350 synced recovery +DEBUG 3/19/2026, 11:24:39 AM 6290487 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:24:39 AM 6290488 synced recovery +DEBUG 3/19/2026, 11:24:40 AM 6292060 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:24:40 AM 6292070 synced recovery +INFO 3/19/2026, 11:24:41 AM 6293248 [blur] 1 +INFO 3/19/2026, 11:24:41 AM 6293249 [win] blur +INFO 3/19/2026, 11:24:55 AM 6306588 [focus] 1 +INFO 3/19/2026, 11:24:55 AM 6306663 [blur] 1 +INFO 3/19/2026, 11:24:55 AM 6306663 [win] blur +INFO 3/19/2026, 11:24:55 AM 6306771 [focus] 1 +DEBUG 3/19/2026, 11:24:59 AM 6311061 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:24:59 AM 6311065 synced recovery +DEBUG 3/19/2026, 11:25:01 AM 6312971 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:25:01 AM 6312971 synced recovery +DEBUG 3/19/2026, 11:25:03 AM 6315104 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:25:03 AM 6315106 synced recovery +DEBUG 3/19/2026, 11:25:06 AM 6317488 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:25:06 AM 6317489 synced recovery +DEBUG 3/19/2026, 11:25:08 AM 6319558 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:25:08 AM 6319559 synced recovery +DEBUG 3/19/2026, 11:25:10 AM 6322219 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:25:10 AM 6322221 synced recovery +DEBUG 3/19/2026, 11:25:12 AM 6324280 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:25:12 AM 6324281 synced recovery +DEBUG 3/19/2026, 11:25:14 AM 6325457 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:25:14 AM 6325462 synced recovery +DEBUG 3/19/2026, 11:25:18 AM 6330272 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:25:18 AM 6330273 synced recovery +DEBUG 3/19/2026, 11:25:20 AM 6331545 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:25:20 AM 6331546 synced recovery +DEBUG 3/19/2026, 11:25:24 AM 6335404 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:25:24 AM 6335405 synced recovery +DEBUG 3/19/2026, 11:25:25 AM 6336959 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:25:25 AM 6336964 synced recovery +DEBUG 3/19/2026, 11:25:43 AM 6354939 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:25:43 AM 6354939 synced recovery +DEBUG 3/19/2026, 11:25:46 AM 6358047 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:25:46 AM 6358048 synced recovery +DEBUG 3/19/2026, 11:25:51 AM 6362840 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:25:51 AM 6362847 synced recovery +DEBUG 3/19/2026, 11:25:52 AM 6364196 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:25:52 AM 6364198 synced recovery +DEBUG 3/19/2026, 11:25:57 AM 6369061 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:25:57 AM 6369062 synced recovery +DEBUG 3/19/2026, 11:25:58 AM 6370336 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:25:58 AM 6370340 synced recovery +DEBUG 3/19/2026, 11:26:07 AM 6378723 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:26:07 AM 6378724 synced recovery +DEBUG 3/19/2026, 11:26:12 AM 6383657 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:26:12 AM 6383658 synced recovery +DEBUG 3/19/2026, 11:26:15 AM 6386694 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:26:15 AM 6386695 synced recovery +DEBUG 3/19/2026, 11:26:16 AM 6387931 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:26:16 AM 6387932 synced recovery +INFO 3/19/2026, 11:26:28 AM 6399810 [blur] 1 +INFO 3/19/2026, 11:26:28 AM 6399810 [win] blur +INFO 3/19/2026, 11:26:37 AM 6408903 [focus] 1 +DEBUG 3/19/2026, 11:26:45 AM 6416967 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:26:45 AM 6416968 synced recovery +DEBUG 3/19/2026, 11:26:48 AM 6419796 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:26:48 AM 6419801 synced recovery +DEBUG 3/19/2026, 11:26:49 AM 6420957 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:26:49 AM 6420958 synced recovery +DEBUG 3/19/2026, 11:26:50 AM 6422187 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:26:50 AM 6422191 synced recovery +INFO 3/19/2026, 11:28:22 AM 6513902 [blur] 1 +INFO 3/19/2026, 11:28:22 AM 6513902 [win] blur +INFO 3/19/2026, 11:30:14 AM 6626128 [focus] 1 +DEBUG 3/19/2026, 11:30:26 AM 6638131 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:30:26 AM 6638132 synced recovery +DEBUG 3/19/2026, 11:30:27 AM 6639282 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:30:27 AM 6639282 synced recovery +DEBUG 3/19/2026, 11:30:29 AM 6640528 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:30:29 AM 6640529 synced recovery +DEBUG 3/19/2026, 11:30:30 AM 6641671 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:30:30 AM 6641672 synced recovery +DEBUG 3/19/2026, 11:30:31 AM 6642830 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:30:31 AM 6642837 synced recovery +DEBUG 3/19/2026, 11:30:33 AM 6644740 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:30:33 AM 6644740 synced recovery +DEBUG 3/19/2026, 11:30:34 AM 6646065 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:30:34 AM 6646069 synced recovery +DEBUG 3/19/2026, 11:30:37 AM 6648569 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:30:37 AM 6648573 synced recovery +INFO 3/19/2026, 11:30:39 AM 6650818 [blur] 1 +INFO 3/19/2026, 11:30:39 AM 6650818 [win] blur +INFO 3/19/2026, 11:30:41 AM 6653308 [focus] 1 +DEBUG 3/19/2026, 11:30:44 AM 6655422 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:30:44 AM 6655431 synced recovery +DEBUG 3/19/2026, 11:30:45 AM 6657173 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:30:45 AM 6657178 synced recovery +DEBUG 3/19/2026, 11:30:54 AM 6665475 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:30:54 AM 6665476 synced recovery +INFO 3/19/2026, 11:30:55 AM 6667124 [blur] 1 +INFO 3/19/2026, 11:30:55 AM 6667124 [win] blur +INFO 3/19/2026, 11:31:00 AM 6672173 [focus] 1 +DEBUG 3/19/2026, 11:31:05 AM 6676990 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:31:05 AM 6676991 synced recovery +DEBUG 3/19/2026, 11:31:07 AM 6679339 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:31:07 AM 6679341 synced recovery +DEBUG 3/19/2026, 11:31:17 AM 6688859 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:31:17 AM 6688861 synced recovery +DEBUG 3/19/2026, 11:31:19 AM 6691123 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:31:19 AM 6691128 synced recovery +DEBUG 3/19/2026, 11:31:27 AM 6698662 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:31:27 AM 6698663 synced recovery +DEBUG 3/19/2026, 11:31:35 AM 6706893 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:31:35 AM 6706899 synced recovery +DEBUG 3/19/2026, 11:31:38 AM 6710291 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:31:38 AM 6710292 synced recovery +DEBUG 3/19/2026, 11:31:40 AM 6711604 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:31:40 AM 6711607 synced recovery +DEBUG 3/19/2026, 11:31:44 AM 6715718 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:31:44 AM 6715721 synced recovery +DEBUG 3/19/2026, 11:31:53 AM 6724392 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:31:53 AM 6724394 synced recovery +DEBUG 3/19/2026, 11:31:59 AM 6730893 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:31:59 AM 6730893 synced recovery +DEBUG 3/19/2026, 11:32:03 AM 6735027 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:32:03 AM 6735030 synced recovery +DEBUG 3/19/2026, 11:32:04 AM 6736240 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:32:04 AM 6736240 synced recovery +DEBUG 3/19/2026, 11:32:15 AM 6747106 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:32:15 AM 6747112 synced recovery +DEBUG 3/19/2026, 11:32:19 AM 6750709 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:32:19 AM 6750709 synced recovery +INFO 3/19/2026, 11:32:22 AM 6753563 [blur] 1 +INFO 3/19/2026, 11:32:22 AM 6753563 [win] blur +INFO 3/19/2026, 11:32:22 AM 6753643 [focus] 1 +DEBUG 3/19/2026, 11:32:22 AM 6753932 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:32:22 AM 6753933 synced recovery +DEBUG 3/19/2026, 11:32:25 AM 6757358 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:32:25 AM 6757359 synced recovery +DEBUG 3/19/2026, 11:32:30 AM 6761612 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:32:30 AM 6761615 synced recovery +DEBUG 3/19/2026, 11:32:35 AM 6766390 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:32:35 AM 6766394 synced recovery +DEBUG 3/19/2026, 11:32:38 AM 6770181 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:32:38 AM 6770182 synced recovery +INFO 3/19/2026, 11:34:44 AM 6895606 [blur] 1 +INFO 3/19/2026, 11:34:44 AM 6895606 [win] blur +INFO 3/19/2026, 11:35:03 AM 6914658 [focus] 1 +INFO 3/19/2026, 11:35:05 AM 6916651 [blur] 1 +INFO 3/19/2026, 11:35:05 AM 6916652 [win] blur +INFO 3/19/2026, 11:35:12 AM 6923373 [focus] 1 +DEBUG 3/19/2026, 11:35:18 AM 6930053 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:35:18 AM 6930055 synced recovery +DEBUG 3/19/2026, 11:35:23 AM 6934925 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:35:23 AM 6934926 synced recovery +DEBUG 3/19/2026, 11:35:24 AM 6936064 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:35:24 AM 6936065 synced recovery +DEBUG 3/19/2026, 11:35:36 AM 6948069 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:35:36 AM 6948070 synced recovery +DEBUG 3/19/2026, 11:35:44 AM 6956118 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:35:44 AM 6956120 synced recovery +DEBUG 3/19/2026, 11:35:48 AM 6960115 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:35:48 AM 6960119 synced recovery +DEBUG 3/19/2026, 11:35:52 AM 6963539 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:35:52 AM 6963539 synced recovery +DEBUG 3/19/2026, 11:36:00 AM 6971544 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:00 AM 6971545 synced recovery +DEBUG 3/19/2026, 11:36:07 AM 6978838 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:07 AM 6978840 synced recovery +DEBUG 3/19/2026, 11:36:09 AM 6980597 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:09 AM 6980598 synced recovery +DEBUG 3/19/2026, 11:36:11 AM 6983037 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:11 AM 6983037 synced recovery +DEBUG 3/19/2026, 11:36:17 AM 6988621 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:17 AM 6988625 synced recovery +DEBUG 3/19/2026, 11:36:19 AM 6990742 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:19 AM 6990743 synced recovery +DEBUG 3/19/2026, 11:36:20 AM 6992343 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:20 AM 6992348 synced recovery +DEBUG 3/19/2026, 11:36:22 AM 6993966 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:22 AM 6993967 synced recovery +DEBUG 3/19/2026, 11:36:24 AM 6995561 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:24 AM 6995569 synced recovery +DEBUG 3/19/2026, 11:36:26 AM 6997862 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:26 AM 6997865 synced recovery +DEBUG 3/19/2026, 11:36:30 AM 7001429 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:30 AM 7001435 synced recovery +DEBUG 3/19/2026, 11:36:32 AM 7003799 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:32 AM 7003801 synced recovery +DEBUG 3/19/2026, 11:36:33 AM 7004939 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:33 AM 7004941 synced recovery +DEBUG 3/19/2026, 11:36:37 AM 7009326 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:37 AM 7009327 synced recovery +DEBUG 3/19/2026, 11:36:39 AM 7010856 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:39 AM 7010862 synced recovery +DEBUG 3/19/2026, 11:36:40 AM 7011968 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:40 AM 7011969 synced recovery +DEBUG 3/19/2026, 11:36:54 AM 7025533 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:54 AM 7025534 synced recovery +DEBUG 3/19/2026, 11:36:57 AM 7028401 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:57 AM 7028402 synced recovery +DEBUG 3/19/2026, 11:36:59 AM 7030770 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:36:59 AM 7030771 synced recovery +DEBUG 3/19/2026, 11:37:10 AM 7041986 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:37:10 AM 7041990 synced recovery +DEBUG 3/19/2026, 11:37:17 AM 7048965 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:37:17 AM 7048966 synced recovery +DEBUG 3/19/2026, 11:37:23 AM 7055301 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:37:23 AM 7055307 synced recovery +DEBUG 3/19/2026, 11:37:30 AM 7061383 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:37:30 AM 7061384 synced recovery +DEBUG 3/19/2026, 11:37:33 AM 7064638 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:37:33 AM 7064639 synced recovery +DEBUG 3/19/2026, 11:37:38 AM 7069745 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:37:38 AM 7069749 synced recovery +DEBUG 3/19/2026, 11:37:50 AM 7081590 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:37:50 AM 7081606 synced recovery +DEBUG 3/19/2026, 11:37:58 AM 7089935 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:37:58 AM 7089936 synced recovery +DEBUG 3/19/2026, 11:37:59 AM 7091345 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:37:59 AM 7091346 synced recovery +DEBUG 3/19/2026, 11:38:01 AM 7092799 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:38:01 AM 7092800 synced recovery +DEBUG 3/19/2026, 11:38:04 AM 7095980 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:38:04 AM 7095987 synced recovery +DEBUG 3/19/2026, 11:38:08 AM 7099398 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:38:08 AM 7099400 synced recovery +DEBUG 3/19/2026, 11:38:10 AM 7101958 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:38:10 AM 7101960 synced recovery +INFO 3/19/2026, 11:38:18 AM 7109712 [blur] 1 +INFO 3/19/2026, 11:38:18 AM 7109712 [win] blur +INFO 3/19/2026, 11:38:18 AM 7109983 [focus] 1 +DEBUG 3/19/2026, 11:38:22 AM 7113785 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:38:22 AM 7113786 synced recovery +DEBUG 3/19/2026, 11:38:24 AM 7115690 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:38:24 AM 7115691 synced recovery +DEBUG 3/19/2026, 11:38:36 AM 7127981 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:38:36 AM 7127982 synced recovery +DEBUG 3/19/2026, 11:38:38 AM 7130121 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:38:38 AM 7130124 synced recovery +DEBUG 3/19/2026, 11:38:40 AM 7131732 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:38:40 AM 7131733 synced recovery +DEBUG 3/19/2026, 11:39:01 AM 7153101 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:39:01 AM 7153104 synced recovery +DEBUG 3/19/2026, 11:39:06 AM 7157788 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:39:06 AM 7157792 synced recovery +DEBUG 3/19/2026, 11:39:07 AM 7159350 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:39:07 AM 7159351 synced recovery +DEBUG 3/19/2026, 11:39:09 AM 7161185 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:39:09 AM 7161186 synced recovery +INFO 3/19/2026, 11:39:16 AM 7167862 [blur] 1 +INFO 3/19/2026, 11:39:16 AM 7167864 [win] blur +INFO 3/19/2026, 11:39:21 AM 7172858 [focus] 1 +DEBUG 3/19/2026, 11:39:35 AM 7187058 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:39:35 AM 7187062 synced recovery +DEBUG 3/19/2026, 11:39:37 AM 7189080 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:39:37 AM 7189083 synced recovery +DEBUG 3/19/2026, 11:39:39 AM 7190431 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:39:39 AM 7190431 synced recovery +DEBUG 3/19/2026, 11:39:42 AM 7193935 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:39:42 AM 7193936 synced recovery +DEBUG 3/19/2026, 11:39:54 AM 7205811 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:39:54 AM 7205813 synced recovery +DEBUG 3/19/2026, 11:39:55 AM 7207189 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:39:55 AM 7207189 synced recovery +DEBUG 3/19/2026, 11:39:58 AM 7209505 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:39:58 AM 7209515 synced recovery +DEBUG 3/19/2026, 11:40:00 AM 7211844 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:40:00 AM 7211845 synced recovery +DEBUG 3/19/2026, 11:40:02 AM 7213595 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:40:02 AM 7213597 synced recovery +DEBUG 3/19/2026, 11:40:03 AM 7214751 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:40:03 AM 7214753 synced recovery +INFO 3/19/2026, 11:40:36 AM 7247822 [blur] 1 +INFO 3/19/2026, 11:40:36 AM 7247822 [win] blur +INFO 3/19/2026, 11:40:38 AM 7250112 [focus] 1 +DEBUG 3/19/2026, 11:40:44 AM 7255854 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:40:44 AM 7255857 synced recovery +DEBUG 3/19/2026, 11:40:51 AM 7262592 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:40:51 AM 7262593 synced recovery +DEBUG 3/19/2026, 11:40:52 AM 7263799 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:40:52 AM 7263800 synced recovery +DEBUG 3/19/2026, 11:40:54 AM 7266251 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:40:54 AM 7266258 synced recovery +DEBUG 3/19/2026, 11:40:56 AM 7267435 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:40:56 AM 7267437 synced recovery +DEBUG 3/19/2026, 11:40:59 AM 7270446 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:40:59 AM 7270448 synced recovery +DEBUG 3/19/2026, 11:41:00 AM 7271610 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:00 AM 7271610 synced recovery +DEBUG 3/19/2026, 11:41:02 AM 7273611 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:02 AM 7273615 synced recovery +DEBUG 3/19/2026, 11:41:05 AM 7276613 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:05 AM 7276614 synced recovery +DEBUG 3/19/2026, 11:41:07 AM 7279231 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:07 AM 7279234 synced recovery +DEBUG 3/19/2026, 11:41:15 AM 7286405 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:15 AM 7286406 synced recovery +DEBUG 3/19/2026, 11:41:18 AM 7289976 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:18 AM 7289976 synced recovery +DEBUG 3/19/2026, 11:41:19 AM 7291148 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:19 AM 7291151 synced recovery +DEBUG 3/19/2026, 11:41:25 AM 7296833 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:25 AM 7296834 synced recovery +DEBUG 3/19/2026, 11:41:26 AM 7298285 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:26 AM 7298286 synced recovery +DEBUG 3/19/2026, 11:41:30 AM 7301703 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:30 AM 7301709 synced recovery +DEBUG 3/19/2026, 11:41:34 AM 7305505 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:34 AM 7305508 synced recovery +DEBUG 3/19/2026, 11:41:39 AM 7310912 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:39 AM 7310913 synced recovery +DEBUG 3/19/2026, 11:41:41 AM 7312413 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:41 AM 7312414 synced recovery +DEBUG 3/19/2026, 11:41:42 AM 7314095 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:42 AM 7314097 synced recovery +DEBUG 3/19/2026, 11:41:44 AM 7315977 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:44 AM 7315979 synced recovery +DEBUG 3/19/2026, 11:41:45 AM 7317151 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:45 AM 7317156 synced recovery +DEBUG 3/19/2026, 11:41:47 AM 7319103 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:47 AM 7319103 synced recovery +DEBUG 3/19/2026, 11:41:50 AM 7321732 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:50 AM 7321734 synced recovery +DEBUG 3/19/2026, 11:41:54 AM 7325916 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:54 AM 7325916 synced recovery +DEBUG 3/19/2026, 11:41:59 AM 7330963 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:41:59 AM 7330966 synced recovery +DEBUG 3/19/2026, 11:42:01 AM 7332707 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:01 AM 7332710 synced recovery +DEBUG 3/19/2026, 11:42:02 AM 7334037 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:02 AM 7334039 synced recovery +DEBUG 3/19/2026, 11:42:04 AM 7336122 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:04 AM 7336123 synced recovery +DEBUG 3/19/2026, 11:42:08 AM 7340287 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:08 AM 7340291 synced recovery +DEBUG 3/19/2026, 11:42:12 AM 7344288 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:12 AM 7344289 synced recovery +DEBUG 3/19/2026, 11:42:14 AM 7345464 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:14 AM 7345466 synced recovery +DEBUG 3/19/2026, 11:42:15 AM 7346628 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:15 AM 7346629 synced recovery +DEBUG 3/19/2026, 11:42:18 AM 7349561 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:18 AM 7349565 synced recovery +DEBUG 3/19/2026, 11:42:19 AM 7350711 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:19 AM 7350717 synced recovery +DEBUG 3/19/2026, 11:42:20 AM 7352341 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:20 AM 7352342 synced recovery +DEBUG 3/19/2026, 11:42:24 AM 7355424 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:24 AM 7355425 synced recovery +DEBUG 3/19/2026, 11:42:25 AM 7357298 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:25 AM 7357304 synced recovery +DEBUG 3/19/2026, 11:42:27 AM 7359057 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:27 AM 7359060 synced recovery +DEBUG 3/19/2026, 11:42:31 AM 7362796 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:31 AM 7362798 synced recovery +DEBUG 3/19/2026, 11:42:33 AM 7364650 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:33 AM 7364654 synced recovery +DEBUG 3/19/2026, 11:42:34 AM 7366172 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:34 AM 7366176 synced recovery +DEBUG 3/19/2026, 11:42:38 AM 7369892 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:38 AM 7369895 synced recovery +DEBUG 3/19/2026, 11:42:48 AM 7379491 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:48 AM 7379496 synced recovery +DEBUG 3/19/2026, 11:42:51 AM 7382925 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:42:51 AM 7382941 synced recovery +DEBUG 3/19/2026, 11:43:03 AM 7394452 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:43:03 AM 7394453 synced recovery +DEBUG 3/19/2026, 11:43:10 AM 7402095 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:43:10 AM 7402096 synced recovery +DEBUG 3/19/2026, 11:43:18 AM 7410216 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:43:18 AM 7410217 synced recovery +DEBUG 3/19/2026, 11:43:28 AM 7419962 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:43:28 AM 7419964 synced recovery +DEBUG 3/19/2026, 11:43:32 AM 7424249 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:43:32 AM 7424249 synced recovery +DEBUG 3/19/2026, 11:43:34 AM 7425480 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:43:34 AM 7425481 synced recovery +INFO 3/19/2026, 11:43:35 AM 7426465 [blur] 1 +INFO 3/19/2026, 11:43:35 AM 7426466 [win] blur +INFO 3/19/2026, 11:43:48 AM 7440052 [focus] 1 +DEBUG 3/19/2026, 11:43:51 AM 7442382 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:43:51 AM 7442383 synced recovery +DEBUG 3/19/2026, 11:43:52 AM 7443555 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:43:52 AM 7443556 synced recovery +DEBUG 3/19/2026, 11:43:54 AM 7445372 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:43:54 AM 7445373 synced recovery +DEBUG 3/19/2026, 11:43:58 AM 7449683 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:43:58 AM 7449684 synced recovery +DEBUG 3/19/2026, 11:44:00 AM 7451767 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:00 AM 7451768 synced recovery +DEBUG 3/19/2026, 11:44:01 AM 7452961 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:01 AM 7452965 synced recovery +DEBUG 3/19/2026, 11:44:06 AM 7458196 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:06 AM 7458197 synced recovery +DEBUG 3/19/2026, 11:44:07 AM 7459360 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:07 AM 7459361 synced recovery +DEBUG 3/19/2026, 11:44:09 AM 7460540 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:09 AM 7460541 synced recovery +DEBUG 3/19/2026, 11:44:14 AM 7465938 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:14 AM 7465940 synced recovery +DEBUG 3/19/2026, 11:44:16 AM 7467698 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:16 AM 7467699 synced recovery +DEBUG 3/19/2026, 11:44:17 AM 7469262 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:17 AM 7469263 synced recovery +DEBUG 3/19/2026, 11:44:21 AM 7473227 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:21 AM 7473228 synced recovery +DEBUG 3/19/2026, 11:44:25 AM 7476761 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:25 AM 7476762 synced recovery +DEBUG 3/19/2026, 11:44:26 AM 7477946 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:26 AM 7477950 synced recovery +DEBUG 3/19/2026, 11:44:28 AM 7480111 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:28 AM 7480113 synced recovery +DEBUG 3/19/2026, 11:44:30 AM 7482326 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:30 AM 7482329 synced recovery +DEBUG 3/19/2026, 11:44:35 AM 7486993 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:35 AM 7486997 synced recovery +DEBUG 3/19/2026, 11:44:36 AM 7488151 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:36 AM 7488153 synced recovery +DEBUG 3/19/2026, 11:44:38 AM 7489573 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:38 AM 7489574 synced recovery +DEBUG 3/19/2026, 11:44:40 AM 7492037 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:40 AM 7492041 synced recovery +DEBUG 3/19/2026, 11:44:42 AM 7493481 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:42 AM 7493484 synced recovery +DEBUG 3/19/2026, 11:44:44 AM 7495385 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:44 AM 7495388 synced recovery +DEBUG 3/19/2026, 11:44:45 AM 7496914 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:45 AM 7496919 synced recovery +DEBUG 3/19/2026, 11:44:46 AM 7498058 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:46 AM 7498059 synced recovery +DEBUG 3/19/2026, 11:44:49 AM 7501043 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:49 AM 7501043 synced recovery +DEBUG 3/19/2026, 11:44:51 AM 7502994 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:51 AM 7502996 synced recovery +DEBUG 3/19/2026, 11:44:52 AM 7504190 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:52 AM 7504191 synced recovery +DEBUG 3/19/2026, 11:44:55 AM 7506853 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:55 AM 7506853 synced recovery +DEBUG 3/19/2026, 11:44:56 AM 7507993 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:56 AM 7507994 synced recovery +DEBUG 3/19/2026, 11:44:58 AM 7509871 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:44:58 AM 7509872 synced recovery +DEBUG 3/19/2026, 11:45:00 AM 7511603 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:00 AM 7511606 synced recovery +DEBUG 3/19/2026, 11:45:04 AM 7515403 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:04 AM 7515406 synced recovery +DEBUG 3/19/2026, 11:45:05 AM 7516539 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:05 AM 7516539 synced recovery +DEBUG 3/19/2026, 11:45:06 AM 7518349 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:06 AM 7518356 synced recovery +DEBUG 3/19/2026, 11:45:08 AM 7519509 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:08 AM 7519510 synced recovery +DEBUG 3/19/2026, 11:45:10 AM 7521722 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:10 AM 7521723 synced recovery +DEBUG 3/19/2026, 11:45:11 AM 7523327 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:11 AM 7523329 synced recovery +DEBUG 3/19/2026, 11:45:13 AM 7524941 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:13 AM 7524942 synced recovery +DEBUG 3/19/2026, 11:45:15 AM 7526849 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:15 AM 7526851 synced recovery +DEBUG 3/19/2026, 11:45:17 AM 7528894 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:17 AM 7528895 synced recovery +DEBUG 3/19/2026, 11:45:18 AM 7530228 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:18 AM 7530232 synced recovery +DEBUG 3/19/2026, 11:45:20 AM 7531475 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:20 AM 7531477 synced recovery +DEBUG 3/19/2026, 11:45:21 AM 7532641 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:21 AM 7532641 synced recovery +DEBUG 3/19/2026, 11:45:22 AM 7534222 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:22 AM 7534225 synced recovery +DEBUG 3/19/2026, 11:45:24 AM 7536031 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:24 AM 7536032 synced recovery +DEBUG 3/19/2026, 11:45:28 AM 7540019 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:28 AM 7540021 synced recovery +DEBUG 3/19/2026, 11:45:30 AM 7541847 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:30 AM 7541848 synced recovery +DEBUG 3/19/2026, 11:45:31 AM 7543230 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:31 AM 7543232 synced recovery +DEBUG 3/19/2026, 11:45:33 AM 7544397 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:33 AM 7544398 synced recovery +DEBUG 3/19/2026, 11:45:34 AM 7545927 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:34 AM 7545928 synced recovery +DEBUG 3/19/2026, 11:45:36 AM 7548325 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:36 AM 7548326 synced recovery +DEBUG 3/19/2026, 11:45:38 AM 7549521 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:38 AM 7549528 synced recovery +DEBUG 3/19/2026, 11:45:43 AM 7555075 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:43 AM 7555081 synced recovery +DEBUG 3/19/2026, 11:45:44 AM 7556215 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:44 AM 7556215 synced recovery +DEBUG 3/19/2026, 11:45:54 AM 7565800 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:54 AM 7565801 synced recovery +DEBUG 3/19/2026, 11:45:56 AM 7568016 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:45:56 AM 7568017 synced recovery +DEBUG 3/19/2026, 11:46:00 AM 7572116 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:46:00 AM 7572117 synced recovery +DEBUG 3/19/2026, 11:46:01 AM 7573241 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:46:01 AM 7573245 synced recovery +DEBUG 3/19/2026, 11:46:45 AM 7616655 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:46:45 AM 7616674 synced recovery +DEBUG 3/19/2026, 11:46:46 AM 7618233 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:46:46 AM 7618234 synced recovery +DEBUG 3/19/2026, 11:46:48 AM 7619426 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:46:48 AM 7619427 synced recovery +DEBUG 3/19/2026, 11:46:49 AM 7620629 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:46:49 AM 7620631 synced recovery +DEBUG 3/19/2026, 11:46:50 AM 7622230 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:46:50 AM 7622232 synced recovery +DEBUG 3/19/2026, 11:46:55 AM 7626659 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:46:55 AM 7626666 synced recovery +DEBUG 3/19/2026, 11:46:56 AM 7627813 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:46:56 AM 7627814 synced recovery +DEBUG 3/19/2026, 11:46:59 AM 7630575 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:46:59 AM 7630578 synced recovery +DEBUG 3/19/2026, 11:47:00 AM 7631709 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:00 AM 7631711 synced recovery +DEBUG 3/19/2026, 11:47:02 AM 7634091 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:02 AM 7634092 synced recovery +DEBUG 3/19/2026, 11:47:07 AM 7639325 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:07 AM 7639326 synced recovery +DEBUG 3/19/2026, 11:47:10 AM 7641565 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:10 AM 7641570 synced recovery +DEBUG 3/19/2026, 11:47:13 AM 7644576 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:13 AM 7644578 synced recovery +DEBUG 3/19/2026, 11:47:15 AM 7646399 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:15 AM 7646400 synced recovery +DEBUG 3/19/2026, 11:47:21 AM 7652753 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:21 AM 7652754 synced recovery +DEBUG 3/19/2026, 11:47:23 AM 7654802 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:23 AM 7654804 synced recovery +DEBUG 3/19/2026, 11:47:27 AM 7658383 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:27 AM 7658385 synced recovery +DEBUG 3/19/2026, 11:47:30 AM 7661991 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:30 AM 7661993 synced recovery +DEBUG 3/19/2026, 11:47:32 AM 7663722 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:32 AM 7663723 synced recovery +DEBUG 3/19/2026, 11:47:33 AM 7664890 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:33 AM 7664892 synced recovery +DEBUG 3/19/2026, 11:47:35 AM 7666503 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:35 AM 7666504 synced recovery +DEBUG 3/19/2026, 11:47:36 AM 7668204 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:36 AM 7668205 synced recovery +DEBUG 3/19/2026, 11:47:38 AM 7669405 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:38 AM 7669406 synced recovery +DEBUG 3/19/2026, 11:47:39 AM 7670566 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:39 AM 7670567 synced recovery +DEBUG 3/19/2026, 11:47:40 AM 7672225 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:40 AM 7672226 synced recovery +DEBUG 3/19/2026, 11:47:42 AM 7674236 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:42 AM 7674237 synced recovery +DEBUG 3/19/2026, 11:47:50 AM 7681596 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:50 AM 7681598 synced recovery +DEBUG 3/19/2026, 11:47:52 AM 7683751 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:52 AM 7683752 synced recovery +DEBUG 3/19/2026, 11:47:53 AM 7684960 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:53 AM 7684961 synced recovery +DEBUG 3/19/2026, 11:47:54 AM 7686253 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:54 AM 7686253 synced recovery +DEBUG 3/19/2026, 11:47:57 AM 7688716 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:57 AM 7688717 synced recovery +DEBUG 3/19/2026, 11:47:59 AM 7690791 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:47:59 AM 7690792 synced recovery +DEBUG 3/19/2026, 11:48:00 AM 7692293 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:00 AM 7692296 synced recovery +DEBUG 3/19/2026, 11:48:04 AM 7695595 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:04 AM 7695596 synced recovery +DEBUG 3/19/2026, 11:48:05 AM 7696753 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:05 AM 7696755 synced recovery +DEBUG 3/19/2026, 11:48:07 AM 7698592 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:07 AM 7698592 synced recovery +DEBUG 3/19/2026, 11:48:09 AM 7701148 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:09 AM 7701153 synced recovery +DEBUG 3/19/2026, 11:48:11 AM 7703207 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:11 AM 7703212 synced recovery +DEBUG 3/19/2026, 11:48:13 AM 7704454 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:13 AM 7704457 synced recovery +DEBUG 3/19/2026, 11:48:16 AM 7708077 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:16 AM 7708078 synced recovery +DEBUG 3/19/2026, 11:48:18 AM 7709750 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:18 AM 7709753 synced recovery +DEBUG 3/19/2026, 11:48:25 AM 7716553 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:25 AM 7716554 synced recovery +DEBUG 3/19/2026, 11:48:26 AM 7717746 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:26 AM 7717752 synced recovery +DEBUG 3/19/2026, 11:48:27 AM 7718911 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:27 AM 7718912 synced recovery +DEBUG 3/19/2026, 11:48:29 AM 7720653 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:29 AM 7720655 synced recovery +DEBUG 3/19/2026, 11:48:31 AM 7723286 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:31 AM 7723289 synced recovery +DEBUG 3/19/2026, 11:48:33 AM 7725305 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:33 AM 7725315 synced recovery +DEBUG 3/19/2026, 11:48:36 AM 7727459 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:36 AM 7727460 synced recovery +DEBUG 3/19/2026, 11:48:38 AM 7729884 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:38 AM 7729885 synced recovery +DEBUG 3/19/2026, 11:48:39 AM 7731247 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:39 AM 7731248 synced recovery +INFO 3/19/2026, 11:48:41 AM 7732549 [blur] 1 +INFO 3/19/2026, 11:48:41 AM 7732550 [win] blur +INFO 3/19/2026, 11:48:42 AM 7734076 [focus] 1 +DEBUG 3/19/2026, 11:48:53 AM 7745154 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:48:53 AM 7745158 synced recovery +DEBUG 3/19/2026, 11:49:05 AM 7756642 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:49:05 AM 7756642 synced recovery +DEBUG 3/19/2026, 11:49:06 AM 7757836 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:49:06 AM 7757840 synced recovery +DEBUG 3/19/2026, 11:49:07 AM 7759038 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:49:07 AM 7759044 synced recovery +DEBUG 3/19/2026, 11:49:09 AM 7760423 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:49:09 AM 7760423 synced recovery +DEBUG 3/19/2026, 11:49:10 AM 7761588 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:49:10 AM 7761589 synced recovery +DEBUG 3/19/2026, 11:49:11 AM 7762750 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:49:11 AM 7762753 synced recovery +DEBUG 3/19/2026, 11:49:15 AM 7766865 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:49:15 AM 7766866 synced recovery +INFO 3/19/2026, 11:49:36 AM 7788324 [blur] 1 +INFO 3/19/2026, 11:49:36 AM 7788324 [win] blur +INFO 3/19/2026, 11:49:37 AM 7788716 [focus] 1 +INFO 3/19/2026, 11:49:37 AM 7789292 load file [/tmp/Typora/1773917377689-0.25602543744568385.html] for PDF export +INFO 3/19/2026, 11:49:38 AM 7790074 generate print window with id [2] for [content] +INFO 3/19/2026, 11:49:39 AM 7791164 got PDF data +INFO 3/19/2026, 11:49:39 AM 7791167 get background color +INFO 3/19/2026, 11:49:39 AM 7791331 load file [/tmp/Typora/1773917379930-1.html] for PDF export +INFO 3/19/2026, 11:49:40 AM 7791457 generate print window with id [3] for [header] +INFO 3/19/2026, 11:49:40 AM 7791702 got PDF data +INFO 3/19/2026, 11:49:40 AM 7791705 get background color +INFO 3/19/2026, 11:49:40 AM 7791763 load file [/tmp/Typora/1773917380360-2.html] for PDF export +INFO 3/19/2026, 11:49:40 AM 7791860 generate print window with id [4] for [footer] +INFO 3/19/2026, 11:49:40 AM 7792130 got PDF data +INFO 3/19/2026, 11:49:40 AM 7792135 get background color +INFO 3/19/2026, 11:49:41 AM 7792632 [blur] 1 +INFO 3/19/2026, 11:49:41 AM 7792632 [win] blur +INFO 3/19/2026, 11:49:43 AM 7795115 [focus] 1 +INFO 3/19/2026, 11:49:43 AM 7795246 [blur] 1 +INFO 3/19/2026, 11:49:43 AM 7795247 [win] blur +INFO 3/19/2026, 11:49:45 AM 7796515 [RenderProcess 1][Log] export PDF to /home/afoucaultc/workspace/cesi/code/versions/4.0/README.pdf +INFO 3/19/2026, 11:49:45 AM 7796630 [focus] 1 +INFO 3/19/2026, 11:49:49 AM 7800553 synced recovery +INFO 3/19/2026, 11:49:49 AM 7800553 ----------------before-quit----------------- +INFO 3/19/2026, 11:49:49 AM 7800553 ------------------will-quit------------------ +INFO 3/19/2026, 11:49:49 AM 7800634 -----------------quit------------------ +INFO 3/19/2026, 11:49:49 AM 7800634 closeLogging diff --git a/config/Typora/typora.log b/config/Typora/typora.log new file mode 100644 index 0000000..6fc1965 --- /dev/null +++ b/config/Typora/typora.log @@ -0,0 +1,4831 @@ +INFO 3/19/2026, 11:52:01 AM 105 launch with argv [/usr/share/typora/Typora] +INFO 3/19/2026, 11:52:01 AM 250 ------------------start------------------ +DEBUG 3/19/2026, 11:52:01 AM 312 before setting +DEBUG 3/19/2026, 11:52:01 AM 395 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/19/2026, 11:52:01 AM 400 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/19/2026, 11:52:01 AM 405 OS is linux 6.19.8-arch1-1 +INFO 3/19/2026, 11:52:01 AM 405 start LM in devVersion=false +DEBUG 3/19/2026, 11:52:01 AM 421 after setting +INFO 3/19/2026, 11:52:01 AM 421 typora version: 1.12.4 +INFO 3/19/2026, 11:52:02 AM 519 [watch L] +DEBUG 3/19/2026, 11:52:02 AM 519 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/19/2026, 11:52:02 AM 535 pure = undefined +INFO 3/19/2026, 11:52:02 AM 536 renew +DEBUG 3/19/2026, 11:52:02 AM 536 [renewLicense] license renewed in 12h +DEBUG 3/19/2026, 11:52:02 AM 536 [L] pass +DEBUG 3/19/2026, 11:52:02 AM 536 trailRemains is 0 +INFO 3/19/2026, 11:52:02 AM 536 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/19/2026, 11:52:02 AM 536 [watch L] hasL: true +DEBUG 3/19/2026, 11:52:02 AM 552 app.openFile +DEBUG 3/19/2026, 11:52:02 AM 624 added recovery 1 null (0) +DEBUG 3/19/2026, 11:52:02 AM 633 putAccelerator File -> &Fichier +DEBUG 3/19/2026, 11:52:02 AM 634 putAccelerator Edit -> Édit&er +DEBUG 3/19/2026, 11:52:02 AM 634 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/19/2026, 11:52:02 AM 634 putAccelerator Format -> F&ormat +DEBUG 3/19/2026, 11:52:02 AM 634 putAccelerator View -> Présentation(&V) +DEBUG 3/19/2026, 11:52:02 AM 634 putAccelerator Themes -> &Thèmes +DEBUG 3/19/2026, 11:52:02 AM 635 putAccelerator Help -> Aide(&H) +INFO 3/19/2026, 11:52:02 AM 723 synced recovery +INFO 3/19/2026, 11:52:02 AM 834 [focus] 1 +ERROR 3/19/2026, 11:52:03 AM 1746 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/19/2026, 11:52:03 AM 1749 handle document.loadData +DEBUG 3/19/2026, 11:52:03 AM 1750 document.loadData 1 +ERROR 3/19/2026, 11:52:03 AM 1750 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/19/2026, 11:52:03 AM 1847 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/19/2026, 11:52:03 AM 1849 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/19/2026, 11:52:03 AM 1872 added recovery 1 (0) +INFO 3/19/2026, 11:52:03 AM 1876 synced recovery +INFO 3/19/2026, 11:52:03 AM 2167 [RenderProcess 1][Log] onBecomeActive +INFO 3/19/2026, 11:52:03 AM 2167 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/19/2026, 11:52:05 AM 3939 [blur] 1 +INFO 3/19/2026, 11:52:05 AM 3940 [win] blur +INFO 3/19/2026, 11:52:11 AM 9484 [focus] 1 +DEBUG 3/19/2026, 11:52:15 AM 13603 app.openFile +INFO 3/19/2026, 11:52:15 AM 13625 switchDocument 1 [/home/afoucaultc/workspace/cesi/code/versions/4.0/README.md] +INFO 3/19/2026, 11:52:15 AM 13625 addRecentDocument +DEBUG 3/19/2026, 11:52:15 AM 13632 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:52:15 AM 13636 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/19/2026, 11:52:15 AM 13636 synced recovery +INFO 3/19/2026, 11:52:15 AM 13640 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/19/2026, 11:52:15 AM 13640 [RenderProcess 1][Log] reset NodeMap +INFO 3/19/2026, 11:52:15 AM 13646 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md +DEBUG 3/19/2026, 11:52:15 AM 13871 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:52:15 AM 13872 synced recovery +DEBUG 3/19/2026, 11:52:20 AM 19310 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:52:20 AM 19311 synced recovery +DEBUG 3/19/2026, 11:52:26 AM 24658 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:52:26 AM 24659 synced recovery +DEBUG 3/19/2026, 11:52:27 AM 26364 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:52:27 AM 26365 synced recovery +INFO 3/19/2026, 11:52:31 AM 30426 cleanUpExpiredDrafts +DEBUG 3/19/2026, 11:52:31 AM 30427 cleanUpExpiredDrafts +DEBUG 3/19/2026, 11:52:34 AM 32554 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:52:34 AM 32554 synced recovery +DEBUG 3/19/2026, 11:52:53 AM 52348 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:52:53 AM 52349 synced recovery +DEBUG 3/19/2026, 11:52:56 AM 54717 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:52:56 AM 54719 synced recovery +DEBUG 3/19/2026, 11:52:58 AM 57061 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:52:58 AM 57063 synced recovery +INFO 3/19/2026, 11:53:02 AM 61056 load file [/tmp/Typora/1773917582509-0.2878385687063314.html] for PDF export +INFO 3/19/2026, 11:53:02 AM 61211 [blur] 1 +INFO 3/19/2026, 11:53:02 AM 61214 [win] blur +INFO 3/19/2026, 11:53:03 AM 61749 generate print window with id [2] for [content] +INFO 3/19/2026, 11:53:03 AM 62437 got PDF data +INFO 3/19/2026, 11:53:04 AM 62443 get background color +INFO 3/19/2026, 11:53:04 AM 62641 load file [/tmp/Typora/1773917584173-1.html] for PDF export +INFO 3/19/2026, 11:53:04 AM 62716 generate print window with id [3] for [header] +INFO 3/19/2026, 11:53:04 AM 62964 got PDF data +INFO 3/19/2026, 11:53:04 AM 62968 get background color +INFO 3/19/2026, 11:53:04 AM 63029 load file [/tmp/Typora/1773917584560-2.html] for PDF export +INFO 3/19/2026, 11:53:04 AM 63125 generate print window with id [4] for [footer] +INFO 3/19/2026, 11:53:04 AM 63375 got PDF data +INFO 3/19/2026, 11:53:04 AM 63378 get background color +INFO 3/19/2026, 11:53:06 AM 64877 [RenderProcess 1][Log] export PDF to /home/afoucaultc/workspace/cesi/code/versions/4.0/README.pdf +INFO 3/19/2026, 11:53:06 AM 65006 [focus] 1 +INFO 3/19/2026, 11:53:07 AM 65879 [blur] 1 +INFO 3/19/2026, 11:53:07 AM 65879 [win] blur +INFO 3/19/2026, 11:53:44 AM 102505 [focus] 1 +INFO 3/19/2026, 11:53:45 AM 104091 synced recovery +INFO 3/19/2026, 11:53:45 AM 104091 ----------------before-quit----------------- +INFO 3/19/2026, 11:53:45 AM 104091 ------------------will-quit------------------ +INFO 3/19/2026, 11:53:45 AM 104093 -----------------quit------------------ +INFO 3/19/2026, 11:53:45 AM 104093 closeLogging +INFO 3/19/2026, 11:54:38 AM 54 launch with argv [/usr/share/typora/Typora] +INFO 3/19/2026, 11:54:38 AM 219 ------------------start------------------ +DEBUG 3/19/2026, 11:54:38 AM 233 before setting +DEBUG 3/19/2026, 11:54:38 AM 266 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/19/2026, 11:54:38 AM 303 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/19/2026, 11:54:38 AM 308 OS is linux 6.19.8-arch1-1 +INFO 3/19/2026, 11:54:38 AM 308 start LM in devVersion=false +DEBUG 3/19/2026, 11:54:38 AM 321 after setting +INFO 3/19/2026, 11:54:38 AM 321 typora version: 1.12.4 +INFO 3/19/2026, 11:54:38 AM 411 [watch L] +DEBUG 3/19/2026, 11:54:38 AM 411 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/19/2026, 11:54:38 AM 433 pure = undefined +INFO 3/19/2026, 11:54:38 AM 433 renew +DEBUG 3/19/2026, 11:54:38 AM 433 [renewLicense] license renewed in 12h +DEBUG 3/19/2026, 11:54:38 AM 433 [L] pass +DEBUG 3/19/2026, 11:54:38 AM 434 trailRemains is 0 +INFO 3/19/2026, 11:54:38 AM 434 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/19/2026, 11:54:38 AM 434 [watch L] hasL: true +user-dict.json not found +DEBUG 3/19/2026, 11:54:38 AM 470 app.openFile +DEBUG 3/19/2026, 11:54:38 AM 519 added recovery 1 null (0) +DEBUG 3/19/2026, 11:54:38 AM 526 putAccelerator File -> &Fichier +DEBUG 3/19/2026, 11:54:38 AM 526 putAccelerator Edit -> Édit&er +DEBUG 3/19/2026, 11:54:38 AM 527 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/19/2026, 11:54:38 AM 527 putAccelerator Format -> F&ormat +DEBUG 3/19/2026, 11:54:38 AM 527 putAccelerator View -> Présentation(&V) +DEBUG 3/19/2026, 11:54:38 AM 527 putAccelerator Themes -> &Thèmes +DEBUG 3/19/2026, 11:54:38 AM 527 putAccelerator Help -> Aide(&H) +INFO 3/19/2026, 11:54:38 AM 612 synced recovery +INFO 3/19/2026, 11:54:39 AM 725 [focus] 1 +ERROR 3/19/2026, 11:54:39 AM 1673 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/19/2026, 11:54:39 AM 1676 handle document.loadData +DEBUG 3/19/2026, 11:54:39 AM 1677 document.loadData 0 +ERROR 3/19/2026, 11:54:39 AM 1677 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/19/2026, 11:54:40 AM 1752 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/19/2026, 11:54:40 AM 1752 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/19/2026, 11:54:40 AM 1773 added recovery 1 (0) +INFO 3/19/2026, 11:54:40 AM 1776 synced recovery +INFO 3/19/2026, 11:54:40 AM 2084 [RenderProcess 1][Log] onBecomeActive +INFO 3/19/2026, 11:54:40 AM 2084 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 3/19/2026, 11:54:48 AM 10417 app.openFile +INFO 3/19/2026, 11:54:48 AM 10455 switchDocument 1 [/home/afoucaultc/workspace/cesi/code/versions/4.0/README.md] +INFO 3/19/2026, 11:54:48 AM 10456 addRecentDocument +DEBUG 3/19/2026, 11:54:48 AM 10467 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:54:48 AM 10471 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/19/2026, 11:54:48 AM 10474 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/19/2026, 11:54:48 AM 10474 [RenderProcess 1][Log] reset NodeMap +INFO 3/19/2026, 11:54:48 AM 10474 synced recovery +INFO 3/19/2026, 11:54:48 AM 10477 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md +DEBUG 3/19/2026, 11:54:48 AM 10634 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 11:54:48 AM 10635 synced recovery +INFO 3/19/2026, 11:54:51 AM 12753 [blur] 1 +INFO 3/19/2026, 11:54:51 AM 12753 [win] blur +INFO 3/19/2026, 11:56:42 AM 124347 [focus] 1 +INFO 3/19/2026, 11:56:42 AM 124573 [blur] 1 +INFO 3/19/2026, 11:56:42 AM 124573 [win] blur +INFO 3/19/2026, 11:57:13 AM 154856 [focus] 1 +INFO 3/19/2026, 11:57:13 AM 155289 [blur] 1 +INFO 3/19/2026, 11:57:13 AM 155289 [win] blur +INFO 3/19/2026, 11:57:59 AM 201315 [focus] 1 +INFO 3/19/2026, 11:57:59 AM 201493 [blur] 1 +INFO 3/19/2026, 11:57:59 AM 201493 [win] blur +INFO 3/19/2026, 12:02:41 PM 483394 [focus] 1 +INFO 3/19/2026, 12:02:41 PM 483613 [blur] 1 +INFO 3/19/2026, 12:02:41 PM 483613 [win] blur +DEBUG 3/19/2026, 12:03:29 PM 530950 2nd 0.4480316994767797 +DEBUG 3/19/2026, 12:03:29 PM 531323 pure = false +INFO 3/19/2026, 12:03:29 PM 531349 renew +DEBUG 3/19/2026, 12:03:29 PM 531350 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 3/19/2026, 12:03:29 PM 531350 [L] pass +DEBUG 3/19/2026, 12:03:30 PM 532242 [renewLicense]: license renewed +INFO 3/19/2026, 12:03:30 PM 532242 ls put SLicense +INFO 3/19/2026, 12:04:37 PM 599138 [focus] 1 +INFO 3/19/2026, 12:04:37 PM 599331 [blur] 1 +INFO 3/19/2026, 12:04:37 PM 599331 [win] blur +INFO 3/19/2026, 12:05:00 PM 622164 [focus] 1 +INFO 3/19/2026, 12:05:00 PM 622314 [blur] 1 +INFO 3/19/2026, 12:05:00 PM 622316 [win] blur +INFO 3/19/2026, 12:06:01 PM 683333 [focus] 1 +INFO 3/19/2026, 12:06:03 PM 685074 synced recovery +INFO 3/19/2026, 12:06:03 PM 685074 ----------------before-quit----------------- +INFO 3/19/2026, 12:06:03 PM 685074 ------------------will-quit------------------ +INFO 3/19/2026, 12:06:03 PM 685308 -----------------quit------------------ +INFO 3/19/2026, 12:06:03 PM 685308 closeLogging +INFO 3/19/2026, 12:06:28 PM 69 launch with argv [/usr/share/typora/Typora] +INFO 3/19/2026, 12:06:29 PM 343 ------------------start------------------ +DEBUG 3/19/2026, 12:06:29 PM 418 before setting +DEBUG 3/19/2026, 12:06:29 PM 526 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/19/2026, 12:06:29 PM 532 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/19/2026, 12:06:29 PM 536 OS is linux 6.19.8-arch1-1 +INFO 3/19/2026, 12:06:29 PM 536 start LM in devVersion=false +DEBUG 3/19/2026, 12:06:29 PM 550 after setting +INFO 3/19/2026, 12:06:29 PM 550 typora version: 1.12.4 +INFO 3/19/2026, 12:06:29 PM 636 [watch L] +DEBUG 3/19/2026, 12:06:29 PM 636 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/19/2026, 12:06:29 PM 639 pure = undefined +INFO 3/19/2026, 12:06:29 PM 640 renew +DEBUG 3/19/2026, 12:06:29 PM 640 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 3/19/2026, 12:06:29 PM 640 [L] pass +DEBUG 3/19/2026, 12:06:29 PM 640 trailRemains is 0 +INFO 3/19/2026, 12:06:29 PM 640 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/19/2026, 12:06:29 PM 643 [watch L] hasL: true +user-dict.json not found +DEBUG 3/19/2026, 12:06:29 PM 657 app.openFile +DEBUG 3/19/2026, 12:06:29 PM 731 added recovery 1 null (0) +DEBUG 3/19/2026, 12:06:29 PM 738 putAccelerator File -> &Fichier +DEBUG 3/19/2026, 12:06:29 PM 738 putAccelerator Edit -> Édit&er +DEBUG 3/19/2026, 12:06:29 PM 738 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/19/2026, 12:06:29 PM 739 putAccelerator Format -> F&ormat +DEBUG 3/19/2026, 12:06:29 PM 739 putAccelerator View -> Présentation(&V) +DEBUG 3/19/2026, 12:06:29 PM 739 putAccelerator Themes -> &Thèmes +DEBUG 3/19/2026, 12:06:29 PM 739 putAccelerator Help -> Aide(&H) +INFO 3/19/2026, 12:06:29 PM 818 synced recovery +INFO 3/19/2026, 12:06:30 PM 1495 [focus] 1 +DEBUG 3/19/2026, 12:06:30 PM 1903 [renewLicense]: license renewed +INFO 3/19/2026, 12:06:30 PM 1904 ls put SLicense +ERROR 3/19/2026, 12:06:31 PM 2154 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/19/2026, 12:06:31 PM 2161 handle document.loadData +DEBUG 3/19/2026, 12:06:31 PM 2161 document.loadData 0 +ERROR 3/19/2026, 12:06:31 PM 2162 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/19/2026, 12:06:31 PM 2209 [blur] 1 +INFO 3/19/2026, 12:06:31 PM 2209 [win] blur +INFO 3/19/2026, 12:06:31 PM 2295 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/19/2026, 12:06:31 PM 2295 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/19/2026, 12:06:31 PM 2318 added recovery 1 (0) +INFO 3/19/2026, 12:06:31 PM 2320 synced recovery +INFO 3/19/2026, 12:06:31 PM 2633 [RenderProcess 1][Log] onBecomeActive +INFO 3/19/2026, 12:06:31 PM 2633 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/19/2026, 12:06:32 PM 3315 [focus] 1 +DEBUG 3/19/2026, 12:06:40 PM 11156 app.openFile +INFO 3/19/2026, 12:06:40 PM 11195 switchDocument 1 [/home/afoucaultc/workspace/cesi/code/versions/4.0/README.md] +INFO 3/19/2026, 12:06:40 PM 11196 addRecentDocument +DEBUG 3/19/2026, 12:06:40 PM 11207 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 12:06:40 PM 11211 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/19/2026, 12:06:40 PM 11214 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/19/2026, 12:06:40 PM 11216 [RenderProcess 1][Log] reset NodeMap +INFO 3/19/2026, 12:06:40 PM 11216 synced recovery +INFO 3/19/2026, 12:06:40 PM 11223 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md +DEBUG 3/19/2026, 12:06:40 PM 11429 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/README.md (0) +INFO 3/19/2026, 12:06:40 PM 11429 synced recovery +INFO 3/19/2026, 12:07:04 PM 35708 [blur] 1 +INFO 3/19/2026, 12:07:04 PM 35709 [win] blur +INFO 3/19/2026, 12:09:59 PM 210246 [focus] 1 +INFO 3/19/2026, 12:10:03 PM 214858 synced recovery +INFO 3/19/2026, 12:10:03 PM 214858 ----------------before-quit----------------- +INFO 3/19/2026, 12:10:03 PM 214858 ------------------will-quit------------------ +INFO 3/19/2026, 12:10:03 PM 214860 -----------------quit------------------ +INFO 3/19/2026, 12:10:03 PM 214860 closeLogging +INFO 3/19/2026, 12:20:08 PM 168 launch with argv [/usr/share/typora/Typora] +INFO 3/19/2026, 12:20:08 PM 779 ------------------start------------------ +DEBUG 3/19/2026, 12:20:08 PM 908 before setting +DEBUG 3/19/2026, 12:20:08 PM 1004 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/19/2026, 12:20:08 PM 1058 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/19/2026, 12:20:08 PM 1062 OS is linux 6.19.8-arch1-1 +INFO 3/19/2026, 12:20:08 PM 1062 start LM in devVersion=false +DEBUG 3/19/2026, 12:20:09 PM 1156 after setting +INFO 3/19/2026, 12:20:09 PM 1156 typora version: 1.12.4 +INFO 3/19/2026, 12:20:09 PM 1255 [watch L] +DEBUG 3/19/2026, 12:20:09 PM 1255 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/19/2026, 12:20:09 PM 1359 pure = undefined +INFO 3/19/2026, 12:20:09 PM 1361 renew +DEBUG 3/19/2026, 12:20:09 PM 1361 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 3/19/2026, 12:20:09 PM 1362 [L] pass +DEBUG 3/19/2026, 12:20:09 PM 1363 trailRemains is 0 +INFO 3/19/2026, 12:20:09 PM 1363 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/19/2026, 12:20:09 PM 1377 [watch L] hasL: true +user-dict.json not found +DEBUG 3/19/2026, 12:20:09 PM 1412 app.openFile +DEBUG 3/19/2026, 12:20:09 PM 1413 putAccelerator File -> &Fichier +DEBUG 3/19/2026, 12:20:09 PM 1414 putAccelerator Edit -> Édit&er +DEBUG 3/19/2026, 12:20:09 PM 1414 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/19/2026, 12:20:09 PM 1415 putAccelerator Format -> F&ormat +DEBUG 3/19/2026, 12:20:09 PM 1415 putAccelerator View -> Présentation(&V) +DEBUG 3/19/2026, 12:20:09 PM 1415 putAccelerator Themes -> &Thèmes +DEBUG 3/19/2026, 12:20:09 PM 1415 putAccelerator Help -> Aide(&H) +DEBUG 3/19/2026, 12:20:09 PM 1980 added recovery 1 null (0) +INFO 3/19/2026, 12:20:09 PM 2103 synced recovery +INFO 3/19/2026, 12:20:10 PM 2327 [focus] 1 +DEBUG 3/19/2026, 12:20:10 PM 2944 [renewLicense]: license renewed +INFO 3/19/2026, 12:20:10 PM 2944 ls put SLicense +ERROR 3/19/2026, 12:20:11 PM 3652 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/19/2026, 12:20:11 PM 3660 handle document.loadData +DEBUG 3/19/2026, 12:20:11 PM 3660 document.loadData 0 +ERROR 3/19/2026, 12:20:11 PM 3661 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/19/2026, 12:20:11 PM 3746 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/19/2026, 12:20:11 PM 3747 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/19/2026, 12:20:11 PM 3770 added recovery 1 (0) +INFO 3/19/2026, 12:20:11 PM 3772 synced recovery +INFO 3/19/2026, 12:20:11 PM 4084 [RenderProcess 1][Log] onBecomeActive +INFO 3/19/2026, 12:20:11 PM 4084 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/19/2026, 12:20:12 PM 4550 [blur] 1 +INFO 3/19/2026, 12:20:12 PM 4550 [win] blur +INFO 3/19/2026, 12:20:39 PM 31425 [focus] 1 +INFO 3/19/2026, 12:20:43 PM 35447 [blur] 1 +INFO 3/19/2026, 12:20:43 PM 35447 [win] blur +INFO 3/19/2026, 12:20:43 PM 35720 [focus] 1 +INFO 3/19/2026, 12:20:43 PM 35823 [blur] 1 +INFO 3/19/2026, 12:20:43 PM 35823 [win] blur +INFO 3/19/2026, 12:20:53 PM 45183 addRecentDocument +INFO 3/19/2026, 12:20:53 PM 45210 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/19/2026, 12:20:53 PM 45211 [RenderProcess 1][Log] reset NodeMap +INFO 3/19/2026, 12:20:53 PM 45226 [focus] 1 +INFO 3/19/2026, 12:20:53 PM 45230 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md +DEBUG 3/19/2026, 12:20:53 PM 45471 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:20:53 PM 45471 synced recovery +INFO 3/19/2026, 12:20:55 PM 47600 [blur] 1 +INFO 3/19/2026, 12:20:55 PM 47601 [win] blur +INFO 3/19/2026, 12:20:55 PM 47601 [focus] 1 +INFO 3/19/2026, 12:20:55 PM 47881 [blur] 1 +INFO 3/19/2026, 12:20:55 PM 47881 [win] blur +INFO 3/19/2026, 12:20:55 PM 47882 [focus] 1 +DEBUG 3/19/2026, 12:21:03 PM 55190 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:21:03 PM 55191 synced recovery +DEBUG 3/19/2026, 12:21:04 PM 56592 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:21:04 PM 56593 synced recovery +DEBUG 3/19/2026, 12:21:05 PM 58109 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:21:05 PM 58109 synced recovery +DEBUG 3/19/2026, 12:21:08 PM 60411 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:21:08 PM 60412 synced recovery +DEBUG 3/19/2026, 12:21:14 PM 66326 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:21:14 PM 66328 synced recovery +DEBUG 3/19/2026, 12:21:17 PM 69260 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:21:17 PM 69265 synced recovery +DEBUG 3/19/2026, 12:21:19 PM 71519 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:21:19 PM 71520 synced recovery +DEBUG 3/19/2026, 12:21:22 PM 74776 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:21:22 PM 74777 synced recovery +DEBUG 3/19/2026, 12:21:25 PM 77723 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:21:25 PM 77723 synced recovery +DEBUG 3/19/2026, 12:21:31 PM 83232 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:21:31 PM 83232 synced recovery +DEBUG 3/19/2026, 12:21:32 PM 84741 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:21:32 PM 84744 synced recovery +DEBUG 3/19/2026, 12:21:35 PM 87131 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:21:35 PM 87132 synced recovery +DEBUG 3/19/2026, 12:21:36 PM 88678 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:21:36 PM 88679 synced recovery +DEBUG 3/19/2026, 12:21:38 PM 91007 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:21:38 PM 91012 synced recovery +DEBUG 3/19/2026, 12:22:14 PM 126329 execForAll +INFO 3/19/2026, 12:22:14 PM 126330 File.option.customFontSize=16 +DEBUG 3/19/2026, 12:22:14 PM 126330 execForAll +INFO 3/19/2026, 12:22:14 PM 126330 document.body.parentElement.style.fontSize = '16px' +DEBUG 3/19/2026, 12:22:14 PM 126439 execForAll +INFO 3/19/2026, 12:22:14 PM 126440 File.option.useCustomFontSize=false +DEBUG 3/19/2026, 12:22:14 PM 126440 execForAll +INFO 3/19/2026, 12:22:14 PM 126440 document.body.parentElement.style.fontSize = '' +INFO 3/19/2026, 12:22:19 PM 132045 [blur] 1 +INFO 3/19/2026, 12:22:19 PM 132045 [win] blur +INFO 3/19/2026, 12:22:20 PM 132399 [focus] 1 +INFO 3/19/2026, 12:22:24 PM 136741 load file [/tmp/Typora/1773919344492-0.7910618073276796.html] for PDF export +INFO 3/19/2026, 12:22:24 PM 136986 [blur] 1 +INFO 3/19/2026, 12:22:24 PM 136986 [win] blur +INFO 3/19/2026, 12:22:25 PM 137432 generate print window with id [2] for [content] +INFO 3/19/2026, 12:22:26 PM 138317 got PDF data +INFO 3/19/2026, 12:22:26 PM 138320 get background color +INFO 3/19/2026, 12:22:26 PM 138471 load file [/tmp/Typora/1773919346338-1.html] for PDF export +INFO 3/19/2026, 12:22:26 PM 138577 generate print window with id [3] for [header] +INFO 3/19/2026, 12:22:26 PM 138824 got PDF data +INFO 3/19/2026, 12:22:26 PM 138827 get background color +INFO 3/19/2026, 12:22:26 PM 138882 load file [/tmp/Typora/1773919346739-2.html] for PDF export +INFO 3/19/2026, 12:22:26 PM 138985 generate print window with id [4] for [footer] +INFO 3/19/2026, 12:22:27 PM 139205 got PDF data +INFO 3/19/2026, 12:22:27 PM 139207 get background color +INFO 3/19/2026, 12:22:33 PM 145264 [RenderProcess 1][Log] export PDF to /home/afoucaultc/workspace/cesi/code/versions/4.0/README.pdf +INFO 3/19/2026, 12:22:33 PM 145414 [focus] 1 +INFO 3/19/2026, 12:22:37 PM 149967 [blur] 1 +INFO 3/19/2026, 12:22:37 PM 149967 [win] blur +INFO 3/19/2026, 12:22:55 PM 167209 [focus] 1 +DEBUG 3/19/2026, 12:22:59 PM 171630 execForAll +INFO 3/19/2026, 12:22:59 PM 171630 File.option.useCustomFontSize=true +DEBUG 3/19/2026, 12:22:59 PM 171631 execForAll +INFO 3/19/2026, 12:22:59 PM 171631 document.body.parentElement.style.fontSize = '16px' +DEBUG 3/19/2026, 12:23:01 PM 173616 execForAll +INFO 3/19/2026, 12:23:01 PM 173617 File.option.customFontSize=12 +DEBUG 3/19/2026, 12:23:01 PM 173617 execForAll +INFO 3/19/2026, 12:23:01 PM 173618 document.body.parentElement.style.fontSize = '12px' +DEBUG 3/19/2026, 12:23:03 PM 176030 execForAll +INFO 3/19/2026, 12:23:03 PM 176030 File.option.customFontSize=12 +DEBUG 3/19/2026, 12:23:03 PM 176031 execForAll +INFO 3/19/2026, 12:23:03 PM 176031 document.body.parentElement.style.fontSize = '12px' +DEBUG 3/19/2026, 12:23:13 PM 185792 execForAll +INFO 3/19/2026, 12:23:13 PM 185793 File.option.customFontSize=14 +DEBUG 3/19/2026, 12:23:13 PM 185793 execForAll +INFO 3/19/2026, 12:23:13 PM 185794 document.body.parentElement.style.fontSize = '14px' +DEBUG 3/19/2026, 12:23:15 PM 188077 execForAll +INFO 3/19/2026, 12:23:15 PM 188078 File.option.customFontSize=14 +DEBUG 3/19/2026, 12:23:15 PM 188078 execForAll +INFO 3/19/2026, 12:23:15 PM 188078 document.body.parentElement.style.fontSize = '14px' +INFO 3/19/2026, 12:23:21 PM 193977 load file [/tmp/Typora/1773919401794-0.8644233639970789.html] for PDF export +INFO 3/19/2026, 12:23:22 PM 194130 [blur] 1 +INFO 3/19/2026, 12:23:22 PM 194130 [win] blur +INFO 3/19/2026, 12:23:22 PM 194566 generate print window with id [5] for [content] +INFO 3/19/2026, 12:23:23 PM 195254 got PDF data +INFO 3/19/2026, 12:23:23 PM 195258 get background color +INFO 3/19/2026, 12:23:23 PM 195374 load file [/tmp/Typora/1773919403231-3.html] for PDF export +INFO 3/19/2026, 12:23:23 PM 195466 generate print window with id [6] for [header] +INFO 3/19/2026, 12:23:23 PM 195710 got PDF data +INFO 3/19/2026, 12:23:23 PM 195715 get background color +INFO 3/19/2026, 12:23:23 PM 195759 load file [/tmp/Typora/1773919403622-4.html] for PDF export +INFO 3/19/2026, 12:23:23 PM 195853 generate print window with id [7] for [footer] +INFO 3/19/2026, 12:23:23 PM 196109 got PDF data +INFO 3/19/2026, 12:23:24 PM 196113 get background color +INFO 3/19/2026, 12:23:25 PM 197230 [RenderProcess 1][Log] export PDF to /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.pdf +INFO 3/19/2026, 12:23:25 PM 197318 [focus] 1 +INFO 3/19/2026, 12:23:26 PM 198323 [blur] 1 +INFO 3/19/2026, 12:23:26 PM 198328 [win] blur +INFO 3/19/2026, 12:23:31 PM 203157 [focus] 1 +INFO 3/19/2026, 12:23:37 PM 209600 load file [/tmp/Typora/1773919417409-0.5283216110622144.html] for PDF export +INFO 3/19/2026, 12:23:37 PM 209738 [blur] 1 +INFO 3/19/2026, 12:23:37 PM 209738 [win] blur +INFO 3/19/2026, 12:23:38 PM 210216 generate print window with id [8] for [content] +INFO 3/19/2026, 12:23:38 PM 211024 got PDF data +INFO 3/19/2026, 12:23:38 PM 211027 get background color +INFO 3/19/2026, 12:23:39 PM 211140 load file [/tmp/Typora/1773919418994-5.html] for PDF export +INFO 3/19/2026, 12:23:39 PM 211269 generate print window with id [9] for [header] +INFO 3/19/2026, 12:23:39 PM 211517 got PDF data +INFO 3/19/2026, 12:23:39 PM 211524 get background color +INFO 3/19/2026, 12:23:39 PM 211579 load file [/tmp/Typora/1773919419433-6.html] for PDF export +INFO 3/19/2026, 12:23:39 PM 211732 generate print window with id [10] for [footer] +INFO 3/19/2026, 12:23:39 PM 211956 got PDF data +INFO 3/19/2026, 12:23:39 PM 211958 get background color +INFO 3/19/2026, 12:23:40 PM 212975 [RenderProcess 1][Log] export PDF to /home/afoucaultc/workspace/cesi/code/versions/4.0/README.pdf +INFO 3/19/2026, 12:23:40 PM 213073 [focus] 1 +INFO 3/19/2026, 12:23:43 PM 216033 [blur] 1 +INFO 3/19/2026, 12:23:43 PM 216033 [win] blur +INFO 3/19/2026, 12:23:47 PM 219657 [focus] 1 +DEBUG 3/19/2026, 12:23:52 PM 224117 execForAll +INFO 3/19/2026, 12:23:52 PM 224117 File.option.customFontSize=14 +DEBUG 3/19/2026, 12:23:52 PM 224118 execForAll +INFO 3/19/2026, 12:23:52 PM 224118 document.body.parentElement.style.fontSize = '14px' +DEBUG 3/19/2026, 12:23:55 PM 227226 execForAll +INFO 3/19/2026, 12:23:55 PM 227226 File.option.customFontSize=12 +DEBUG 3/19/2026, 12:23:55 PM 227226 execForAll +INFO 3/19/2026, 12:23:55 PM 227226 document.body.parentElement.style.fontSize = '12px' +DEBUG 3/19/2026, 12:23:55 PM 227761 execForAll +INFO 3/19/2026, 12:23:55 PM 227761 File.option.customFontSize=12 +DEBUG 3/19/2026, 12:23:55 PM 227761 execForAll +INFO 3/19/2026, 12:23:55 PM 227761 document.body.parentElement.style.fontSize = '12px' +INFO 3/19/2026, 12:24:00 PM 233065 load file [/tmp/Typora/1773919440876-0.0740439480125974.html] for PDF export +INFO 3/19/2026, 12:24:01 PM 233310 [blur] 1 +INFO 3/19/2026, 12:24:01 PM 233313 [win] blur +INFO 3/19/2026, 12:24:01 PM 233682 generate print window with id [11] for [content] +INFO 3/19/2026, 12:24:02 PM 234458 got PDF data +INFO 3/19/2026, 12:24:02 PM 234461 get background color +INFO 3/19/2026, 12:24:02 PM 234557 load file [/tmp/Typora/1773919442424-7.html] for PDF export +INFO 3/19/2026, 12:24:02 PM 234649 generate print window with id [12] for [header] +INFO 3/19/2026, 12:24:02 PM 234893 got PDF data +INFO 3/19/2026, 12:24:02 PM 234896 get background color +INFO 3/19/2026, 12:24:02 PM 234955 load file [/tmp/Typora/1773919442811-8.html] for PDF export +INFO 3/19/2026, 12:24:02 PM 235040 generate print window with id [13] for [footer] +INFO 3/19/2026, 12:24:03 PM 235299 got PDF data +INFO 3/19/2026, 12:24:03 PM 235310 get background color +INFO 3/19/2026, 12:24:05 PM 237635 [RenderProcess 1][Log] export PDF to /home/afoucaultc/workspace/cesi/code/versions/4.0/README.pdf +INFO 3/19/2026, 12:24:05 PM 237814 [focus] 1 +INFO 3/19/2026, 12:24:06 PM 238339 [blur] 1 +INFO 3/19/2026, 12:24:06 PM 238340 [win] blur +INFO 3/19/2026, 12:24:44 PM 277108 [focus] 1 +DEBUG 3/19/2026, 12:24:51 PM 283643 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:24:51 PM 283653 synced recovery +DEBUG 3/19/2026, 12:24:55 PM 287354 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:24:55 PM 287355 synced recovery +DEBUG 3/19/2026, 12:24:56 PM 288667 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:24:56 PM 288670 synced recovery +DEBUG 3/19/2026, 12:24:59 PM 291573 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:24:59 PM 291574 synced recovery +DEBUG 3/19/2026, 12:25:01 PM 293177 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:25:01 PM 293178 synced recovery +DEBUG 3/19/2026, 12:25:02 PM 294828 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:25:02 PM 294833 synced recovery +DEBUG 3/19/2026, 12:25:03 PM 296034 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:25:03 PM 296038 synced recovery +DEBUG 3/19/2026, 12:25:08 PM 300960 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:25:08 PM 300961 synced recovery +DEBUG 3/19/2026, 12:25:11 PM 303294 added recovery 1 /home/afoucaultc/workspace/cesi/code/versions/4.0/typora_readme.md (0) +INFO 3/19/2026, 12:25:11 PM 303295 synced recovery +INFO 3/19/2026, 12:25:17 PM 309240 load file [/tmp/Typora/1773919517067-0.6030194039586994.html] for PDF export +INFO 3/19/2026, 12:25:17 PM 309399 [blur] 1 +INFO 3/19/2026, 12:25:17 PM 309399 [win] blur +INFO 3/19/2026, 12:25:17 PM 309682 [focus] 1 +INFO 3/19/2026, 12:25:17 PM 310072 [blur] 1 +INFO 3/19/2026, 12:25:17 PM 310072 [win] blur +INFO 3/19/2026, 12:25:18 PM 310151 generate print window with id [14] for [content] +INFO 3/19/2026, 12:25:18 PM 310855 got PDF data +INFO 3/19/2026, 12:25:18 PM 310860 get background color +INFO 3/19/2026, 12:25:18 PM 310990 load file [/tmp/Typora/1773919518862-9.html] for PDF export +INFO 3/19/2026, 12:25:18 PM 311083 generate print window with id [15] for [header] +INFO 3/19/2026, 12:25:19 PM 311332 got PDF data +INFO 3/19/2026, 12:25:19 PM 311335 get background color +INFO 3/19/2026, 12:25:19 PM 311378 load file [/tmp/Typora/1773919519241-10.html] for PDF export +INFO 3/19/2026, 12:25:19 PM 311477 generate print window with id [16] for [footer] +INFO 3/19/2026, 12:25:19 PM 311723 got PDF data +INFO 3/19/2026, 12:25:19 PM 311727 get background color +INFO 3/19/2026, 12:25:23 PM 316106 [RenderProcess 1][Log] export PDF to /home/afoucaultc/workspace/cesi/code/versions/4.0/README.pdf +DEBUG 3/19/2026, 12:26:17 PM 369144 added recovery 1 "--- +Author: Ant... +``` +" (12617) +INFO 3/19/2026, 12:26:17 PM 369145 synced recovery +INFO 3/19/2026, 12:26:23 PM 375679 [focus] 1 +INFO 3/19/2026, 12:26:30 PM 382426 [blur] 1 +INFO 3/19/2026, 12:26:30 PM 382426 [win] blur +INFO 3/19/2026, 12:26:30 PM 383024 [focus] 1 +INFO 3/19/2026, 12:26:31 PM 383341 [blur] 1 +INFO 3/19/2026, 12:26:31 PM 383341 [win] blur +INFO 3/19/2026, 12:26:39 PM 392110 addRecentDocument +INFO 3/19/2026, 12:26:40 PM 392196 [focus] 1 +INFO 3/19/2026, 12:26:40 PM 392216 synced recovery +INFO 3/19/2026, 12:26:40 PM 392216 ----------------before-quit----------------- +INFO 3/19/2026, 12:26:40 PM 392220 ------------------will-quit------------------ +INFO 3/19/2026, 12:26:40 PM 392222 -----------------quit------------------ +INFO 3/19/2026, 12:26:40 PM 392222 closeLogging +INFO 3/20/2026, 7:50:08 AM 87 launch with argv [/usr/share/typora/Typora] +INFO 3/20/2026, 7:50:08 AM 305 ------------------start------------------ +DEBUG 3/20/2026, 7:50:08 AM 512 before setting +DEBUG 3/20/2026, 7:50:08 AM 697 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/20/2026, 7:50:08 AM 718 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/20/2026, 7:50:08 AM 723 OS is linux 6.19.8-arch1-1 +INFO 3/20/2026, 7:50:08 AM 723 start LM in devVersion=false +DEBUG 3/20/2026, 7:50:08 AM 736 after setting +INFO 3/20/2026, 7:50:08 AM 737 typora version: 1.12.4 +user-dict.json not found +INFO 3/20/2026, 7:50:08 AM 856 [watch L] +DEBUG 3/20/2026, 7:50:08 AM 856 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/20/2026, 7:50:09 AM 1060 pure = undefined +INFO 3/20/2026, 7:50:09 AM 1062 renew +DEBUG 3/20/2026, 7:50:09 AM 1062 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 3/20/2026, 7:50:09 AM 1063 [L] pass +DEBUG 3/20/2026, 7:50:09 AM 1064 trailRemains is 0 +INFO 3/20/2026, 7:50:09 AM 1064 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/20/2026, 7:50:09 AM 1079 [watch L] hasL: true +DEBUG 3/20/2026, 7:50:09 AM 1099 putAccelerator File -> &Fichier +DEBUG 3/20/2026, 7:50:09 AM 1101 putAccelerator Edit -> Édit&er +DEBUG 3/20/2026, 7:50:09 AM 1102 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/20/2026, 7:50:09 AM 1104 putAccelerator Format -> F&ormat +DEBUG 3/20/2026, 7:50:09 AM 1104 putAccelerator View -> Présentation(&V) +DEBUG 3/20/2026, 7:50:09 AM 1104 putAccelerator Themes -> &Thèmes +DEBUG 3/20/2026, 7:50:09 AM 1104 putAccelerator Help -> Aide(&H) +DEBUG 3/20/2026, 7:50:09 AM 1127 app.openFile +DEBUG 3/20/2026, 7:50:09 AM 1317 added recovery 1 null (0) +INFO 3/20/2026, 7:50:09 AM 1413 synced recovery +INFO 3/20/2026, 7:50:09 AM 1845 [focus] 1 +INFO 3/20/2026, 7:50:10 AM 1974 [blur] 1 +INFO 3/20/2026, 7:50:10 AM 1974 [win] blur +DEBUG 3/20/2026, 7:50:10 AM 2396 [renewLicense]: license renewed +INFO 3/20/2026, 7:50:10 AM 2396 ls put SLicense +ERROR 3/20/2026, 7:50:11 AM 3148 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/20/2026, 7:50:11 AM 3155 handle document.loadData +DEBUG 3/20/2026, 7:50:11 AM 3155 document.loadData 0 +ERROR 3/20/2026, 7:50:11 AM 3156 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/20/2026, 7:50:11 AM 3235 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/20/2026, 7:50:11 AM 3235 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/20/2026, 7:50:11 AM 3257 added recovery 1 (0) +INFO 3/20/2026, 7:50:11 AM 3262 synced recovery +INFO 3/20/2026, 7:50:11 AM 3602 [RenderProcess 1][Log] onBecomeActive +INFO 3/20/2026, 7:50:11 AM 3602 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/20/2026, 7:50:22 AM 14112 [focus] 1 +INFO 3/20/2026, 7:50:29 AM 21725 [blur] 1 +INFO 3/20/2026, 7:50:29 AM 21725 [win] blur +INFO 3/20/2026, 7:50:29 AM 21728 [focus] 1 +INFO 3/20/2026, 7:50:29 AM 21729 [blur] 1 +INFO 3/20/2026, 7:50:29 AM 21729 [win] blur +INFO 3/20/2026, 7:50:29 AM 21733 [focus] 1 +INFO 3/20/2026, 7:50:29 AM 21785 [blur] 1 +INFO 3/20/2026, 7:50:29 AM 21785 [win] blur +INFO 3/20/2026, 7:50:29 AM 21819 [focus] 1 +INFO 3/20/2026, 7:50:33 AM 25360 [blur] 1 +INFO 3/20/2026, 7:50:33 AM 25360 [win] blur +INFO 3/20/2026, 7:50:35 AM 27055 [focus] 1 +INFO 3/20/2026, 7:50:35 AM 27088 [blur] 1 +INFO 3/20/2026, 7:50:35 AM 27089 [win] blur +INFO 3/20/2026, 7:50:37 AM 29249 [focus] 1 +INFO 3/20/2026, 7:50:37 AM 29647 [blur] 1 +INFO 3/20/2026, 7:50:37 AM 29647 [win] blur +INFO 3/20/2026, 7:51:54 AM 106193 addRecentDocument +INFO 3/20/2026, 7:51:54 AM 106208 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/20/2026, 7:51:54 AM 106209 [RenderProcess 1][Log] reset NodeMap +INFO 3/20/2026, 7:51:54 AM 106222 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md +DEBUG 3/20/2026, 7:51:54 AM 106434 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:51:54 AM 106434 synced recovery +INFO 3/20/2026, 7:51:54 AM 106485 [focus] 1 +DEBUG 3/20/2026, 7:52:07 AM 119581 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:52:07 AM 119584 synced recovery +DEBUG 3/20/2026, 7:52:14 AM 126092 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:52:14 AM 126093 synced recovery +DEBUG 3/20/2026, 7:52:17 AM 129287 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:52:17 AM 129287 synced recovery +DEBUG 3/20/2026, 7:52:19 AM 131580 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:52:19 AM 131589 synced recovery +DEBUG 3/20/2026, 7:52:24 AM 136081 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:52:24 AM 136088 synced recovery +DEBUG 3/20/2026, 7:52:26 AM 138552 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:52:26 AM 138553 synced recovery +DEBUG 3/20/2026, 7:52:27 AM 139696 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:52:27 AM 139697 synced recovery +DEBUG 3/20/2026, 7:52:29 AM 141162 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:52:29 AM 141165 synced recovery +DEBUG 3/20/2026, 7:52:30 AM 142354 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:52:30 AM 142358 synced recovery +DEBUG 3/20/2026, 7:52:33 AM 145795 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:52:33 AM 145796 synced recovery +DEBUG 3/20/2026, 7:52:34 AM 146940 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:52:34 AM 146941 synced recovery +INFO 3/20/2026, 7:52:39 AM 151319 [blur] 1 +INFO 3/20/2026, 7:52:39 AM 151319 [win] blur +INFO 3/20/2026, 7:52:40 AM 152541 [focus] 1 +DEBUG 3/20/2026, 7:52:42 AM 154639 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:52:42 AM 154639 synced recovery +DEBUG 3/20/2026, 7:52:45 AM 157324 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:52:45 AM 157329 synced recovery +DEBUG 3/20/2026, 7:52:54 AM 166593 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:52:54 AM 166595 synced recovery +DEBUG 3/20/2026, 7:52:55 AM 167741 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:52:55 AM 167742 synced recovery +DEBUG 3/20/2026, 7:52:56 AM 168924 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:52:56 AM 168926 synced recovery +DEBUG 3/20/2026, 7:52:59 AM 171413 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:52:59 AM 171415 synced recovery +DEBUG 3/20/2026, 7:53:01 AM 173197 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.1/README.md (0) +INFO 3/20/2026, 7:53:01 AM 173197 synced recovery +INFO 3/20/2026, 7:53:03 AM 175604 [blur] 1 +INFO 3/20/2026, 7:53:03 AM 175604 [win] blur +INFO 3/20/2026, 7:56:24 AM 376722 [focus] 1 +INFO 3/20/2026, 7:56:24 AM 376787 [blur] 1 +INFO 3/20/2026, 7:56:24 AM 376787 [win] blur +INFO 3/20/2026, 7:56:33 AM 384985 [focus] 1 +INFO 3/20/2026, 7:56:33 AM 385292 [blur] 1 +INFO 3/20/2026, 7:56:33 AM 385292 [win] blur +INFO 3/20/2026, 7:56:59 AM 411889 [focus] 1 +INFO 3/20/2026, 7:57:00 AM 412210 [blur] 1 +INFO 3/20/2026, 7:57:00 AM 412210 [win] blur +INFO 3/20/2026, 7:57:30 AM 442206 [focus] 1 +INFO 3/20/2026, 7:57:32 AM 444161 [blur] 1 +INFO 3/20/2026, 7:57:32 AM 444161 [win] blur +INFO 3/20/2026, 7:57:32 AM 444162 [focus] 1 +INFO 3/20/2026, 7:57:32 AM 444163 [blur] 1 +INFO 3/20/2026, 7:57:32 AM 444163 [win] blur +INFO 3/20/2026, 7:57:32 AM 444163 [focus] 1 +INFO 3/20/2026, 7:57:40 AM 452618 [blur] 1 +INFO 3/20/2026, 7:57:40 AM 452619 [win] blur +DEBUG 3/20/2026, 7:58:59 AM 531627 2nd 0.7612347241173398 +DEBUG 3/20/2026, 7:58:59 AM 531628 pure = false +INFO 3/20/2026, 7:58:59 AM 531628 renew +DEBUG 3/20/2026, 7:58:59 AM 531628 [renewLicense] license renewed in 12h +DEBUG 3/20/2026, 7:58:59 AM 531629 [L] pass +DEBUG 3/20/2026, 8:17:27 AM 1639726 added recovery 1 "--- +Author: Ant... +``` +" (13078) +INFO 3/20/2026, 8:17:27 AM 1639731 synced recovery +INFO 3/20/2026, 8:33:36 AM 2608191 [focus] 1 +INFO 3/20/2026, 8:33:36 AM 2608227 [blur] 1 +INFO 3/20/2026, 8:33:36 AM 2608227 [win] blur +INFO 3/20/2026, 8:33:36 AM 2608693 [focus] 1 +INFO 3/20/2026, 8:33:36 AM 2608869 [blur] 1 +INFO 3/20/2026, 8:33:36 AM 2608869 [win] blur +INFO 3/20/2026, 8:33:41 AM 2613051 [focus] 1 +INFO 3/20/2026, 8:34:17 AM 2649755 [blur] 1 +INFO 3/20/2026, 8:34:17 AM 2649755 [win] blur +INFO 3/20/2026, 11:01:24 AM 11476708 [focus] 1 +INFO 3/20/2026, 11:01:24 AM 11476753 [blur] 1 +INFO 3/20/2026, 11:01:24 AM 11476754 [win] blur +INFO 3/20/2026, 11:01:24 AM 11476862 [focus] 1 +INFO 3/20/2026, 11:01:26 AM 11478394 [blur] 1 +INFO 3/20/2026, 11:01:26 AM 11478394 [win] blur +INFO 3/20/2026, 11:01:26 AM 11478395 [focus] 1 +INFO 3/20/2026, 11:01:26 AM 11478781 [blur] 1 +INFO 3/20/2026, 11:01:26 AM 11478781 [win] blur +INFO 3/20/2026, 11:01:26 AM 11478782 [focus] 1 +INFO 3/20/2026, 11:01:27 AM 11479017 [blur] 1 +INFO 3/20/2026, 11:01:27 AM 11479017 [win] blur +INFO 3/20/2026, 11:01:28 AM 11480941 [focus] 1 +INFO 3/20/2026, 11:01:31 AM 11483917 [blur] 1 +INFO 3/20/2026, 11:01:31 AM 11483918 [win] blur +INFO 3/20/2026, 11:01:37 AM 11489161 [focus] 1 +INFO 3/20/2026, 11:01:37 AM 11489471 [blur] 1 +INFO 3/20/2026, 11:01:37 AM 11489471 [win] blur +INFO 3/20/2026, 11:01:37 AM 11489619 [focus] 1 +INFO 3/20/2026, 11:01:38 AM 11490527 [blur] 1 +INFO 3/20/2026, 11:01:38 AM 11490528 [win] blur +INFO 3/20/2026, 11:01:38 AM 11490529 [focus] 1 +INFO 3/20/2026, 11:01:39 AM 11491196 [blur] 1 +INFO 3/20/2026, 11:01:39 AM 11491196 [win] blur +INFO 3/20/2026, 11:01:39 AM 11491196 [focus] 1 +INFO 3/20/2026, 11:01:39 AM 11491564 [blur] 1 +INFO 3/20/2026, 11:01:39 AM 11491564 [win] blur +INFO 3/20/2026, 11:01:40 AM 11492136 [focus] 1 +DEBUG 3/20/2026, 11:01:44 AM 11496827 added recovery 1 "--- +Author: Ant... +``` +" (13078) +INFO 3/20/2026, 11:01:44 AM 11496831 synced recovery +DEBUG 3/20/2026, 11:01:48 AM 11500041 added recovery 1 "--- +Author: Ant... +``` +" (13078) +INFO 3/20/2026, 11:01:48 AM 11500042 synced recovery +INFO 3/20/2026, 11:01:55 AM 11507141 [blur] 1 +INFO 3/20/2026, 11:01:55 AM 11507141 [win] blur +INFO 3/20/2026, 11:02:27 AM 11539166 [focus] 1 +INFO 3/20/2026, 11:02:29 AM 11541663 [blur] 1 +INFO 3/20/2026, 11:02:29 AM 11541664 [win] blur +INFO 3/20/2026, 11:02:30 AM 11541974 [focus] 1 +INFO 3/20/2026, 11:02:32 AM 11544056 [blur] 1 +INFO 3/20/2026, 11:02:32 AM 11544056 [win] blur +INFO 3/20/2026, 11:02:32 AM 11544056 [focus] 1 +INFO 3/20/2026, 11:02:32 AM 11544398 [blur] 1 +INFO 3/20/2026, 11:02:32 AM 11544398 [win] blur +INFO 3/20/2026, 11:02:32 AM 11544399 [focus] 1 +INFO 3/20/2026, 11:02:33 AM 11545652 [blur] 1 +INFO 3/20/2026, 11:02:33 AM 11545652 [win] blur +INFO 3/20/2026, 11:05:54 AM 11746466 [focus] 1 +INFO 3/20/2026, 11:06:00 AM 11752299 [blur] 1 +INFO 3/20/2026, 11:06:00 AM 11752299 [win] blur +INFO 3/20/2026, 11:08:04 AM 11876723 [focus] 1 +DEBUG 3/20/2026, 11:08:06 AM 11878624 added recovery 1 "--- +Author: Ant... +``` +" (13077) +INFO 3/20/2026, 11:08:06 AM 11878641 synced recovery +DEBUG 3/20/2026, 11:08:08 AM 11880632 added recovery 1 "--- +Author: Ant... +``` +" (13077) +INFO 3/20/2026, 11:08:08 AM 11880633 synced recovery +INFO 3/20/2026, 11:08:11 AM 11883331 [blur] 1 +INFO 3/20/2026, 11:08:11 AM 11883333 [win] blur +INFO 3/20/2026, 11:12:01 AM 12113439 [focus] 1 +DEBUG 3/20/2026, 11:12:06 AM 12118559 added recovery 1 "--- +Author: Ant... +``` +" (13077) +INFO 3/20/2026, 11:12:06 AM 12118560 synced recovery +DEBUG 3/20/2026, 11:12:09 AM 12121127 added recovery 1 "--- +Author: Ant... +``` +" (13077) +INFO 3/20/2026, 11:12:09 AM 12121128 synced recovery +INFO 3/20/2026, 11:12:10 AM 12122650 [blur] 1 +INFO 3/20/2026, 11:12:10 AM 12122650 [win] blur +INFO 3/20/2026, 11:14:39 AM 12271439 [focus] 1 +DEBUG 3/20/2026, 11:14:41 AM 12273462 added recovery 1 "--- +Author: Ant... +``` +" (13077) +INFO 3/20/2026, 11:14:41 AM 12273475 synced recovery +INFO 3/20/2026, 11:14:44 AM 12276371 [blur] 1 +INFO 3/20/2026, 11:14:44 AM 12276371 [win] blur +INFO 3/20/2026, 11:15:05 AM 12296959 [focus] 1 +INFO 3/20/2026, 11:15:05 AM 12297283 [blur] 1 +INFO 3/20/2026, 11:15:05 AM 12297284 [win] blur +INFO 3/20/2026, 11:15:05 AM 12297286 [focus] 1 +INFO 3/20/2026, 11:15:05 AM 12297683 [blur] 1 +INFO 3/20/2026, 11:15:05 AM 12297684 [win] blur +INFO 3/20/2026, 11:15:05 AM 12297685 [focus] 1 +INFO 3/20/2026, 11:15:06 AM 12298139 [blur] 1 +INFO 3/20/2026, 11:15:06 AM 12298139 [win] blur +INFO 3/20/2026, 11:15:45 AM 12336954 [focus] 1 +DEBUG 3/20/2026, 11:15:50 AM 12342134 added recovery 1 "--- +Author: Ant... +``` +" (13077) +INFO 3/20/2026, 11:15:50 AM 12342135 synced recovery +DEBUG 3/20/2026, 11:15:55 AM 12347020 added recovery 1 "--- +Author: Ant... +``` +" (13076) +INFO 3/20/2026, 11:15:55 AM 12347021 synced recovery +INFO 3/20/2026, 11:15:57 AM 12349150 [blur] 1 +INFO 3/20/2026, 11:15:57 AM 12349150 [win] blur +INFO 3/20/2026, 11:15:57 AM 12349732 [focus] 1 +INFO 3/20/2026, 11:15:57 AM 12349795 [blur] 1 +INFO 3/20/2026, 11:15:57 AM 12349795 [win] blur +INFO 3/20/2026, 11:16:01 AM 12353176 [focus] 1 +INFO 3/20/2026, 11:16:01 AM 12353343 [blur] 1 +INFO 3/20/2026, 11:16:01 AM 12353343 [win] blur +INFO 3/20/2026, 11:17:05 AM 12417648 [focus] 1 +DEBUG 3/20/2026, 11:17:09 AM 12421352 added recovery 1 "--- +Author: Ant... +``` +" (13076) +INFO 3/20/2026, 11:17:09 AM 12421374 synced recovery +INFO 3/20/2026, 11:17:17 AM 12429102 [blur] 1 +INFO 3/20/2026, 11:17:17 AM 12429102 [win] blur +INFO 3/20/2026, 11:18:23 AM 12495146 [focus] 1 +INFO 3/20/2026, 11:18:28 AM 12500629 [blur] 1 +INFO 3/20/2026, 11:18:28 AM 12500629 [win] blur +INFO 3/20/2026, 11:19:55 AM 12587064 [focus] 1 +INFO 3/20/2026, 11:20:15 AM 12607787 [blur] 1 +INFO 3/20/2026, 11:20:15 AM 12607789 [win] blur +INFO 3/20/2026, 11:20:23 AM 12615827 [focus] 1 +INFO 3/20/2026, 11:20:24 AM 12615991 [blur] 1 +INFO 3/20/2026, 11:20:24 AM 12615991 [win] blur +INFO 3/20/2026, 11:22:54 AM 12766616 [focus] 1 +INFO 3/20/2026, 11:22:54 AM 12766676 [blur] 1 +INFO 3/20/2026, 11:22:54 AM 12766676 [win] blur +INFO 3/20/2026, 11:22:58 AM 12770871 [focus] 1 +INFO 3/20/2026, 11:22:59 AM 12771182 [blur] 1 +INFO 3/20/2026, 11:22:59 AM 12771183 [win] blur +INFO 3/20/2026, 11:23:05 AM 12777206 [focus] 1 +INFO 3/20/2026, 11:23:10 AM 12782475 [blur] 1 +INFO 3/20/2026, 11:23:10 AM 12782476 [win] blur +INFO 3/20/2026, 11:23:50 AM 12822919 [focus] 1 +INFO 3/20/2026, 11:23:56 AM 12827960 [blur] 1 +INFO 3/20/2026, 11:23:56 AM 12827960 [win] blur +INFO 3/20/2026, 11:27:18 AM 13030436 [focus] 1 +INFO 3/20/2026, 11:27:18 AM 13030640 [blur] 1 +INFO 3/20/2026, 11:27:18 AM 13030640 [win] blur +INFO 3/20/2026, 11:27:18 AM 13030722 [focus] 1 +INFO 3/20/2026, 11:27:19 AM 13031209 [blur] 1 +INFO 3/20/2026, 11:27:19 AM 13031209 [win] blur +INFO 3/20/2026, 11:27:28 AM 13040695 [focus] 1 +DEBUG 3/20/2026, 11:27:31 AM 13043545 added recovery 1 "--- +Author: Ant... +``` +" (13076) +INFO 3/20/2026, 11:27:31 AM 13043547 synced recovery +INFO 3/20/2026, 11:27:32 AM 13044927 [blur] 1 +INFO 3/20/2026, 11:27:32 AM 13044927 [win] blur +INFO 3/20/2026, 11:28:11 AM 13083777 [focus] 1 +INFO 3/20/2026, 11:28:16 AM 13087971 [blur] 1 +INFO 3/20/2026, 11:28:16 AM 13087971 [win] blur +INFO 3/20/2026, 11:31:05 AM 13257389 [focus] 1 +DEBUG 3/20/2026, 11:31:07 AM 13259302 added recovery 1 "--- +Author: Ant... +``` +" (13076) +INFO 3/20/2026, 11:31:07 AM 13259304 synced recovery +INFO 3/20/2026, 11:31:12 AM 13264626 [blur] 1 +INFO 3/20/2026, 11:31:12 AM 13264626 [win] blur +INFO 3/20/2026, 11:31:19 AM 13271621 [focus] 1 +DEBUG 3/20/2026, 11:31:23 AM 13275675 added recovery 1 "--- +Author: Ant... +``` +" (13076) +INFO 3/20/2026, 11:31:23 AM 13275684 synced recovery +INFO 3/20/2026, 11:31:26 AM 13277946 [blur] 1 +INFO 3/20/2026, 11:31:26 AM 13277947 [win] blur +INFO 3/20/2026, 11:31:28 AM 13280701 [focus] 1 +INFO 3/20/2026, 11:31:28 AM 13280881 [blur] 1 +INFO 3/20/2026, 11:31:28 AM 13280882 [win] blur +INFO 3/20/2026, 11:31:40 AM 13292454 [focus] 1 +DEBUG 3/20/2026, 11:31:43 AM 13295405 added recovery 1 "--- +Author: Ant... +``` +" (13076) +INFO 3/20/2026, 11:31:43 AM 13295406 synced recovery +INFO 3/20/2026, 11:31:45 AM 13297476 [blur] 1 +INFO 3/20/2026, 11:31:45 AM 13297476 [win] blur +INFO 3/20/2026, 11:32:07 AM 13318965 [focus] 1 +INFO 3/20/2026, 11:32:07 AM 13319348 [blur] 1 +INFO 3/20/2026, 11:32:07 AM 13319349 [win] blur +INFO 3/20/2026, 11:32:45 AM 13357512 [focus] 1 +DEBUG 3/20/2026, 11:32:48 AM 13360718 added recovery 1 "--- +Author: Ant... +``` +" (13076) +INFO 3/20/2026, 11:32:48 AM 13360720 synced recovery +INFO 3/20/2026, 11:32:56 AM 13368907 [blur] 1 +INFO 3/20/2026, 11:32:56 AM 13368907 [win] blur +INFO 3/20/2026, 11:33:41 AM 13413805 [focus] 1 +DEBUG 3/20/2026, 11:33:47 AM 13419779 added recovery 1 "--- +Author: Ant... +``` +" (13076) +INFO 3/20/2026, 11:33:47 AM 13419781 synced recovery +INFO 3/20/2026, 11:33:52 AM 13424333 [blur] 1 +INFO 3/20/2026, 11:33:52 AM 13424334 [win] blur +INFO 3/20/2026, 11:36:42 AM 13594890 [focus] 1 +INFO 3/20/2026, 11:36:44 AM 13596205 [blur] 1 +INFO 3/20/2026, 11:36:44 AM 13596206 [win] blur +INFO 3/20/2026, 11:41:31 AM 13883939 [focus] 1 +INFO 3/20/2026, 11:41:37 AM 13889459 [blur] 1 +INFO 3/20/2026, 11:41:37 AM 13889459 [win] blur +INFO 3/20/2026, 11:41:47 AM 13899438 [focus] 1 +INFO 3/20/2026, 11:41:48 AM 13900401 [blur] 1 +INFO 3/20/2026, 11:41:48 AM 13900401 [win] blur +INFO 3/20/2026, 11:41:48 AM 13900610 [focus] 1 +INFO 3/20/2026, 11:41:50 AM 13902292 [blur] 1 +INFO 3/20/2026, 11:41:50 AM 13902293 [win] blur +INFO 3/20/2026, 11:45:40 AM 14132417 [focus] 1 +INFO 3/20/2026, 11:45:40 AM 14132557 [blur] 1 +INFO 3/20/2026, 11:45:40 AM 14132557 [win] blur +INFO 3/20/2026, 11:45:41 AM 14132975 [focus] 1 +INFO 3/20/2026, 11:45:41 AM 14133156 [blur] 1 +INFO 3/20/2026, 11:45:41 AM 14133157 [win] blur +INFO 3/20/2026, 11:45:41 AM 14133500 [focus] 1 +INFO 3/20/2026, 11:45:41 AM 14133599 [blur] 1 +INFO 3/20/2026, 11:45:41 AM 14133600 [win] blur +INFO 3/20/2026, 11:46:12 AM 14164017 [focus] 1 +INFO 3/20/2026, 11:46:12 AM 14164416 [blur] 1 +INFO 3/20/2026, 11:46:12 AM 14164416 [win] blur +INFO 3/20/2026, 11:46:12 AM 14164744 [focus] 1 +INFO 3/20/2026, 11:46:13 AM 14165801 [blur] 1 +INFO 3/20/2026, 11:46:13 AM 14165802 [win] blur +INFO 3/20/2026, 11:55:12 AM 14704752 [focus] 1 +INFO 3/20/2026, 11:55:14 AM 14706079 [blur] 1 +INFO 3/20/2026, 11:55:14 AM 14706079 [win] blur +INFO 3/20/2026, 11:55:17 AM 14709204 [focus] 1 +INFO 3/20/2026, 11:55:17 AM 14709706 [blur] 1 +INFO 3/20/2026, 11:55:17 AM 14709707 [win] blur +INFO 3/20/2026, 11:55:22 AM 14714040 [focus] 1 +INFO 3/20/2026, 11:55:22 AM 14714696 [blur] 1 +INFO 3/20/2026, 11:55:22 AM 14714696 [win] blur +DEBUG 3/20/2026, 11:55:24 AM 14716663 added recovery 1 "--- +Author: Ant... +``` +" (13022) +INFO 3/20/2026, 11:55:25 AM 14717190 synced recovery +INFO 3/20/2026, 11:57:11 AM 14823559 [focus] 1 +INFO 3/20/2026, 11:57:12 AM 14824500 [blur] 1 +INFO 3/20/2026, 11:57:12 AM 14824501 [win] blur +INFO 3/20/2026, 12:14:40 PM 15872374 [focus] 1 +INFO 3/20/2026, 12:14:40 PM 15872754 [blur] 1 +INFO 3/20/2026, 12:14:40 PM 15872754 [win] blur +INFO 3/20/2026, 12:18:49 PM 16121746 [focus] 1 +INFO 3/20/2026, 12:18:51 PM 16123380 [blur] 1 +INFO 3/20/2026, 12:18:51 PM 16123380 [win] blur +INFO 3/20/2026, 12:20:28 PM 16220102 [focus] 1 +INFO 3/20/2026, 12:20:30 PM 16222886 [blur] 1 +INFO 3/20/2026, 12:20:30 PM 16222886 [win] blur +INFO 3/20/2026, 12:20:31 PM 16223669 [focus] 1 +INFO 3/20/2026, 12:20:32 PM 16224005 [blur] 1 +INFO 3/20/2026, 12:20:32 PM 16224006 [win] blur +INFO 3/20/2026, 12:20:33 PM 16225688 [focus] 1 +INFO 3/20/2026, 12:20:34 PM 16226201 [blur] 1 +INFO 3/20/2026, 12:20:34 PM 16226201 [win] blur +INFO 3/20/2026, 12:22:43 PM 16355929 [focus] 1 +INFO 3/20/2026, 12:22:56 PM 16368183 [blur] 1 +INFO 3/20/2026, 12:22:56 PM 16368183 [win] blur +INFO 3/20/2026, 12:22:56 PM 16368309 [focus] 1 +INFO 3/20/2026, 12:23:02 PM 16374025 [blur] 1 +INFO 3/20/2026, 12:23:02 PM 16374028 [win] blur +INFO 3/20/2026, 12:23:02 PM 16374756 [focus] 1 +INFO 3/20/2026, 12:23:03 PM 16375609 [blur] 1 +INFO 3/20/2026, 12:23:03 PM 16375609 [win] blur +INFO 3/20/2026, 12:23:04 PM 16376052 [focus] 1 +INFO 3/20/2026, 12:23:05 PM 16377647 synced recovery +INFO 3/20/2026, 12:23:05 PM 16377647 ----------------before-quit----------------- +INFO 3/20/2026, 12:23:05 PM 16377647 ------------------will-quit------------------ +INFO 3/20/2026, 12:23:05 PM 16377692 -----------------quit------------------ +INFO 3/20/2026, 12:23:05 PM 16377692 closeLogging +INFO 3/20/2026, 2:07:43 PM 76 launch with argv [/usr/share/typora/Typora] +INFO 3/20/2026, 2:07:44 PM 683 ------------------start------------------ +DEBUG 3/20/2026, 2:07:44 PM 955 before setting +DEBUG 3/20/2026, 2:07:44 PM 1066 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/20/2026, 2:07:44 PM 1088 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/20/2026, 2:07:44 PM 1093 OS is linux 6.19.8-arch1-1 +INFO 3/20/2026, 2:07:44 PM 1093 start LM in devVersion=false +DEBUG 3/20/2026, 2:07:44 PM 1192 after setting +INFO 3/20/2026, 2:07:44 PM 1192 typora version: 1.12.4 +INFO 3/20/2026, 2:07:44 PM 1284 [watch L] +DEBUG 3/20/2026, 2:07:44 PM 1284 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/20/2026, 2:07:44 PM 1303 pure = undefined +INFO 3/20/2026, 2:07:44 PM 1304 renew +DEBUG 3/20/2026, 2:07:44 PM 1304 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 3/20/2026, 2:07:44 PM 1304 [L] pass +DEBUG 3/20/2026, 2:07:44 PM 1304 trailRemains is 0 +INFO 3/20/2026, 2:07:44 PM 1304 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/20/2026, 2:07:44 PM 1307 [watch L] hasL: true +user-dict.json not found +DEBUG 3/20/2026, 2:07:44 PM 1338 app.openFile +DEBUG 3/20/2026, 2:07:45 PM 1727 added recovery 1 null (0) +DEBUG 3/20/2026, 2:07:45 PM 1732 putAccelerator File -> &Fichier +DEBUG 3/20/2026, 2:07:45 PM 1733 putAccelerator Edit -> Édit&er +DEBUG 3/20/2026, 2:07:45 PM 1733 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/20/2026, 2:07:45 PM 1733 putAccelerator Format -> F&ormat +DEBUG 3/20/2026, 2:07:45 PM 1734 putAccelerator View -> Présentation(&V) +DEBUG 3/20/2026, 2:07:45 PM 1734 putAccelerator Themes -> &Thèmes +DEBUG 3/20/2026, 2:07:45 PM 1734 putAccelerator Help -> Aide(&H) +INFO 3/20/2026, 2:07:45 PM 1819 synced recovery +INFO 3/20/2026, 2:07:45 PM 2049 [focus] 1 +DEBUG 3/20/2026, 2:07:46 PM 3071 [renewLicense]: license renewed +INFO 3/20/2026, 2:07:46 PM 3072 ls put SLicense +ERROR 3/20/2026, 2:07:46 PM 3490 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/20/2026, 2:07:46 PM 3497 handle document.loadData +DEBUG 3/20/2026, 2:07:46 PM 3497 document.loadData 0 +ERROR 3/20/2026, 2:07:46 PM 3498 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/20/2026, 2:07:47 PM 3586 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/20/2026, 2:07:47 PM 3586 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/20/2026, 2:07:47 PM 3608 added recovery 1 (0) +INFO 3/20/2026, 2:07:47 PM 3610 synced recovery +INFO 3/20/2026, 2:07:47 PM 3846 [RenderProcess 1][Log] onBecomeActive +INFO 3/20/2026, 2:07:47 PM 3847 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/20/2026, 2:08:05 PM 21901 [blur] 1 +INFO 3/20/2026, 2:08:05 PM 21901 [win] blur +INFO 3/20/2026, 2:08:16 PM 32687 addRecentDocument +INFO 3/20/2026, 2:08:16 PM 32709 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/20/2026, 2:08:16 PM 32712 [RenderProcess 1][Log] reset NodeMap +INFO 3/20/2026, 2:08:16 PM 32717 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md +INFO 3/20/2026, 2:08:16 PM 32721 [focus] 1 +DEBUG 3/20/2026, 2:08:16 PM 32902 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:08:16 PM 32903 synced recovery +DEBUG 3/20/2026, 2:08:28 PM 45104 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:08:28 PM 45105 synced recovery +DEBUG 3/20/2026, 2:08:31 PM 47767 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:08:31 PM 47770 synced recovery +DEBUG 3/20/2026, 2:08:38 PM 55218 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:08:38 PM 55219 synced recovery +INFO 3/20/2026, 2:08:42 PM 59347 [blur] 1 +INFO 3/20/2026, 2:08:42 PM 59347 [win] blur +INFO 3/20/2026, 2:09:14 PM 91011 [focus] 1 +INFO 3/20/2026, 2:09:14 PM 91212 [blur] 1 +INFO 3/20/2026, 2:09:14 PM 91212 [win] blur +INFO 3/20/2026, 2:09:14 PM 91470 [focus] 1 +DEBUG 3/20/2026, 2:09:16 PM 93360 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:09:16 PM 93362 synced recovery +DEBUG 3/20/2026, 2:09:27 PM 103779 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:09:27 PM 103779 synced recovery +DEBUG 3/20/2026, 2:09:33 PM 110038 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:09:33 PM 110039 synced recovery +DEBUG 3/20/2026, 2:09:37 PM 114067 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:09:37 PM 114069 synced recovery +DEBUG 3/20/2026, 2:09:39 PM 116178 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:09:39 PM 116178 synced recovery +DEBUG 3/20/2026, 2:09:41 PM 118181 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:09:41 PM 118183 synced recovery +DEBUG 3/20/2026, 2:09:44 PM 120681 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:09:44 PM 120682 synced recovery +DEBUG 3/20/2026, 2:09:46 PM 123230 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:09:46 PM 123231 synced recovery +DEBUG 3/20/2026, 2:09:48 PM 125570 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:09:48 PM 125571 synced recovery +DEBUG 3/20/2026, 2:09:50 PM 126924 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:09:50 PM 126925 synced recovery +DEBUG 3/20/2026, 2:09:53 PM 130401 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:09:53 PM 130403 synced recovery +DEBUG 3/20/2026, 2:09:57 PM 134373 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:09:57 PM 134375 synced recovery +DEBUG 3/20/2026, 2:09:59 PM 136364 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:09:59 PM 136364 synced recovery +DEBUG 3/20/2026, 2:10:04 PM 141059 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:10:04 PM 141061 synced recovery +DEBUG 3/20/2026, 2:10:06 PM 143446 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:10:06 PM 143447 synced recovery +DEBUG 3/20/2026, 2:10:09 PM 146311 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:10:09 PM 146312 synced recovery +DEBUG 3/20/2026, 2:10:11 PM 147649 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:10:11 PM 147651 synced recovery +DEBUG 3/20/2026, 2:10:14 PM 151309 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:10:14 PM 151310 synced recovery +DEBUG 3/20/2026, 2:10:17 PM 153955 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:10:17 PM 153956 synced recovery +DEBUG 3/20/2026, 2:10:19 PM 155803 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:10:19 PM 155804 synced recovery +DEBUG 3/20/2026, 2:10:25 PM 162264 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:10:25 PM 162266 synced recovery +INFO 3/20/2026, 2:10:28 PM 165164 [blur] 1 +INFO 3/20/2026, 2:10:28 PM 165164 [win] blur +INFO 3/20/2026, 2:12:00 PM 257086 [focus] 1 +DEBUG 3/20/2026, 2:12:07 PM 263976 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:12:07 PM 263977 synced recovery +DEBUG 3/20/2026, 2:12:12 PM 268704 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:12:12 PM 268705 synced recovery +DEBUG 3/20/2026, 2:12:16 PM 272975 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:12:16 PM 272977 synced recovery +DEBUG 3/20/2026, 2:12:19 PM 275686 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:12:19 PM 275687 synced recovery +DEBUG 3/20/2026, 2:12:20 PM 277486 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:12:20 PM 277488 synced recovery +DEBUG 3/20/2026, 2:12:25 PM 282246 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:12:25 PM 282247 synced recovery +DEBUG 3/20/2026, 2:12:31 PM 287857 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:12:31 PM 287858 synced recovery +DEBUG 3/20/2026, 2:12:37 PM 293765 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:12:37 PM 293767 synced recovery +DEBUG 3/20/2026, 2:12:39 PM 295920 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:12:39 PM 295922 synced recovery +DEBUG 3/20/2026, 2:12:40 PM 297518 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:12:40 PM 297519 synced recovery +DEBUG 3/20/2026, 2:12:45 PM 301941 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:12:45 PM 301942 synced recovery +DEBUG 3/20/2026, 2:12:47 PM 304266 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:12:47 PM 304268 synced recovery +DEBUG 3/20/2026, 2:12:54 PM 310790 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:12:54 PM 310791 synced recovery +DEBUG 3/20/2026, 2:13:00 PM 316774 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:13:00 PM 316775 synced recovery +DEBUG 3/20/2026, 2:13:05 PM 321600 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:13:05 PM 321602 synced recovery +DEBUG 3/20/2026, 2:13:11 PM 327826 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:13:11 PM 327826 synced recovery +DEBUG 3/20/2026, 2:13:14 PM 330958 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:13:14 PM 330959 synced recovery +DEBUG 3/20/2026, 2:13:17 PM 334085 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:13:17 PM 334086 synced recovery +INFO 3/20/2026, 2:13:28 PM 344694 [blur] 1 +INFO 3/20/2026, 2:13:28 PM 344694 [win] blur +INFO 3/20/2026, 2:13:28 PM 344888 [focus] 1 +DEBUG 3/20/2026, 2:13:40 PM 357030 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:13:40 PM 357032 synced recovery +DEBUG 3/20/2026, 2:13:44 PM 360736 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:13:44 PM 360737 synced recovery +DEBUG 3/20/2026, 2:13:46 PM 363058 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:13:46 PM 363059 synced recovery +DEBUG 3/20/2026, 2:13:49 PM 365791 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:13:49 PM 365793 synced recovery +INFO 3/20/2026, 2:13:52 PM 368922 [blur] 1 +INFO 3/20/2026, 2:13:52 PM 368922 [win] blur +INFO 3/20/2026, 2:13:52 PM 369461 [focus] 1 +DEBUG 3/20/2026, 2:13:58 PM 374657 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:13:58 PM 374659 synced recovery +DEBUG 3/20/2026, 2:14:04 PM 381181 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:04 PM 381182 synced recovery +DEBUG 3/20/2026, 2:14:06 PM 383016 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:06 PM 383017 synced recovery +DEBUG 3/20/2026, 2:14:10 PM 386915 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:10 PM 386917 synced recovery +DEBUG 3/20/2026, 2:14:12 PM 389039 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:12 PM 389041 synced recovery +DEBUG 3/20/2026, 2:14:16 PM 393532 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:16 PM 393533 synced recovery +DEBUG 3/20/2026, 2:14:20 PM 397252 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:20 PM 397252 synced recovery +DEBUG 3/20/2026, 2:14:23 PM 400143 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:23 PM 400144 synced recovery +DEBUG 3/20/2026, 2:14:24 PM 401336 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:24 PM 401337 synced recovery +DEBUG 3/20/2026, 2:14:25 PM 402540 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:25 PM 402541 synced recovery +DEBUG 3/20/2026, 2:14:27 PM 403839 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:27 PM 403841 synced recovery +DEBUG 3/20/2026, 2:14:34 PM 411476 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:34 PM 411476 synced recovery +DEBUG 3/20/2026, 2:14:39 PM 415814 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:39 PM 415815 synced recovery +DEBUG 3/20/2026, 2:14:41 PM 418251 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:41 PM 418252 synced recovery +DEBUG 3/20/2026, 2:14:45 PM 421728 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:45 PM 421729 synced recovery +DEBUG 3/20/2026, 2:14:47 PM 423730 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:47 PM 423731 synced recovery +DEBUG 3/20/2026, 2:14:49 PM 425813 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:49 PM 425814 synced recovery +DEBUG 3/20/2026, 2:14:52 PM 429477 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:52 PM 429477 synced recovery +DEBUG 3/20/2026, 2:14:58 PM 435283 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:14:58 PM 435283 synced recovery +DEBUG 3/20/2026, 2:15:04 PM 441405 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:04 PM 441405 synced recovery +DEBUG 3/20/2026, 2:15:09 PM 445818 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:09 PM 445819 synced recovery +DEBUG 3/20/2026, 2:15:10 PM 447410 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:10 PM 447411 synced recovery +DEBUG 3/20/2026, 2:15:12 PM 448985 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:12 PM 448986 synced recovery +DEBUG 3/20/2026, 2:15:18 PM 454727 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:18 PM 454728 synced recovery +DEBUG 3/20/2026, 2:15:19 PM 455827 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:19 PM 455828 synced recovery +DEBUG 3/20/2026, 2:15:20 PM 457103 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:20 PM 457104 synced recovery +DEBUG 3/20/2026, 2:15:22 PM 459411 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:22 PM 459412 synced recovery +DEBUG 3/20/2026, 2:15:23 PM 460571 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:23 PM 460572 synced recovery +DEBUG 3/20/2026, 2:15:25 PM 462110 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:25 PM 462111 synced recovery +DEBUG 3/20/2026, 2:15:28 PM 464578 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:28 PM 464578 synced recovery +DEBUG 3/20/2026, 2:15:29 PM 466363 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:29 PM 466365 synced recovery +DEBUG 3/20/2026, 2:15:36 PM 473328 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:36 PM 473329 synced recovery +DEBUG 3/20/2026, 2:15:38 PM 475121 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:38 PM 475123 synced recovery +DEBUG 3/20/2026, 2:15:43 PM 479652 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:43 PM 479653 synced recovery +DEBUG 3/20/2026, 2:15:44 PM 481146 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:44 PM 481147 synced recovery +DEBUG 3/20/2026, 2:15:51 PM 488305 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:51 PM 488307 synced recovery +DEBUG 3/20/2026, 2:15:54 PM 491573 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:54 PM 491574 synced recovery +DEBUG 3/20/2026, 2:15:56 PM 492739 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:56 PM 492741 synced recovery +DEBUG 3/20/2026, 2:15:57 PM 494058 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:57 PM 494058 synced recovery +DEBUG 3/20/2026, 2:15:58 PM 495480 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:15:58 PM 495482 synced recovery +DEBUG 3/20/2026, 2:16:00 PM 497073 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:00 PM 497073 synced recovery +DEBUG 3/20/2026, 2:16:01 PM 498242 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:01 PM 498242 synced recovery +DEBUG 3/20/2026, 2:16:02 PM 499399 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:02 PM 499400 synced recovery +DEBUG 3/20/2026, 2:16:05 PM 501892 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:05 PM 501893 synced recovery +DEBUG 3/20/2026, 2:16:12 PM 508965 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:12 PM 508966 synced recovery +DEBUG 3/20/2026, 2:16:14 PM 511132 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:14 PM 511134 synced recovery +DEBUG 3/20/2026, 2:16:15 PM 512192 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:15 PM 512194 synced recovery +DEBUG 3/20/2026, 2:16:16 PM 513287 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:16 PM 513287 synced recovery +DEBUG 3/20/2026, 2:16:20 PM 517240 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:20 PM 517242 synced recovery +DEBUG 3/20/2026, 2:16:21 PM 518506 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:21 PM 518508 synced recovery +DEBUG 3/20/2026, 2:16:22 PM 519569 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:22 PM 519572 synced recovery +DEBUG 3/20/2026, 2:16:25 PM 521722 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:25 PM 521722 synced recovery +DEBUG 3/20/2026, 2:16:27 PM 523937 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:27 PM 523938 synced recovery +DEBUG 3/20/2026, 2:16:28 PM 525249 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:28 PM 525250 synced recovery +DEBUG 3/20/2026, 2:16:32 PM 528801 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:32 PM 528803 synced recovery +INFO 3/20/2026, 2:16:32 PM 529031 [blur] 1 +INFO 3/20/2026, 2:16:32 PM 529031 [win] blur +DEBUG 3/20/2026, 2:16:35 PM 531780 2nd 0.41349966158365636 +DEBUG 3/20/2026, 2:16:35 PM 531780 pure = false +INFO 3/20/2026, 2:16:35 PM 531780 renew +DEBUG 3/20/2026, 2:16:35 PM 531781 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 3/20/2026, 2:16:35 PM 531781 [L] pass +DEBUG 3/20/2026, 2:16:35 PM 532326 [renewLicense]: license renewed +INFO 3/20/2026, 2:16:35 PM 532326 ls put SLicense +INFO 3/20/2026, 2:16:41 PM 538368 [focus] 1 +DEBUG 3/20/2026, 2:16:46 PM 542776 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:46 PM 542777 synced recovery +DEBUG 3/20/2026, 2:16:50 PM 547408 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:50 PM 547408 synced recovery +DEBUG 3/20/2026, 2:16:52 PM 549179 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:52 PM 549180 synced recovery +DEBUG 3/20/2026, 2:16:54 PM 550913 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:16:54 PM 550914 synced recovery +DEBUG 3/20/2026, 2:17:00 PM 557045 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:17:00 PM 557047 synced recovery +DEBUG 3/20/2026, 2:17:05 PM 562086 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:17:05 PM 562087 synced recovery +DEBUG 3/20/2026, 2:17:09 PM 566473 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:17:09 PM 566474 synced recovery +DEBUG 3/20/2026, 2:17:11 PM 568490 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:17:11 PM 568491 synced recovery +DEBUG 3/20/2026, 2:17:13 PM 569967 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:17:13 PM 569967 synced recovery +DEBUG 3/20/2026, 2:17:15 PM 572492 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:17:15 PM 572493 synced recovery +DEBUG 3/20/2026, 2:17:19 PM 575757 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:17:19 PM 575757 synced recovery +DEBUG 3/20/2026, 2:17:25 PM 581709 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:17:25 PM 581709 synced recovery +DEBUG 3/20/2026, 2:17:29 PM 585863 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:17:29 PM 585864 synced recovery +DEBUG 3/20/2026, 2:17:31 PM 588067 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:17:31 PM 588068 synced recovery +DEBUG 3/20/2026, 2:17:38 PM 594659 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:17:38 PM 594660 synced recovery +DEBUG 3/20/2026, 2:17:43 PM 599866 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:17:43 PM 599867 synced recovery +DEBUG 3/20/2026, 2:17:48 PM 605201 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:17:48 PM 605203 synced recovery +DEBUG 3/20/2026, 2:17:53 PM 609661 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:17:53 PM 609662 synced recovery +INFO 3/20/2026, 2:17:56 PM 613356 [blur] 1 +INFO 3/20/2026, 2:17:56 PM 613356 [win] blur +INFO 3/20/2026, 2:18:11 PM 627877 [focus] 1 +DEBUG 3/20/2026, 2:18:14 PM 630705 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:14 PM 630706 synced recovery +DEBUG 3/20/2026, 2:18:15 PM 632262 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:15 PM 632263 synced recovery +DEBUG 3/20/2026, 2:18:17 PM 633754 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:17 PM 633755 synced recovery +DEBUG 3/20/2026, 2:18:20 PM 637165 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:20 PM 637166 synced recovery +DEBUG 3/20/2026, 2:18:21 PM 638323 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:21 PM 638324 synced recovery +DEBUG 3/20/2026, 2:18:23 PM 639599 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:23 PM 639600 synced recovery +DEBUG 3/20/2026, 2:18:24 PM 641037 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:24 PM 641038 synced recovery +DEBUG 3/20/2026, 2:18:26 PM 642678 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:26 PM 642679 synced recovery +DEBUG 3/20/2026, 2:18:27 PM 644428 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:27 PM 644429 synced recovery +DEBUG 3/20/2026, 2:18:29 PM 645966 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:29 PM 645968 synced recovery +DEBUG 3/20/2026, 2:18:32 PM 649110 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:32 PM 649111 synced recovery +DEBUG 3/20/2026, 2:18:34 PM 650715 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:34 PM 650715 synced recovery +DEBUG 3/20/2026, 2:18:35 PM 652095 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:35 PM 652096 synced recovery +DEBUG 3/20/2026, 2:18:36 PM 653174 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:36 PM 653175 synced recovery +DEBUG 3/20/2026, 2:18:40 PM 656733 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:40 PM 656733 synced recovery +DEBUG 3/20/2026, 2:18:42 PM 659120 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:42 PM 659121 synced recovery +DEBUG 3/20/2026, 2:18:44 PM 660877 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:44 PM 660878 synced recovery +DEBUG 3/20/2026, 2:18:45 PM 661981 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:45 PM 661982 synced recovery +DEBUG 3/20/2026, 2:18:46 PM 663450 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:46 PM 663451 synced recovery +DEBUG 3/20/2026, 2:18:49 PM 666493 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:49 PM 666494 synced recovery +INFO 3/20/2026, 2:18:52 PM 669034 [blur] 1 +INFO 3/20/2026, 2:18:52 PM 669034 [win] blur +INFO 3/20/2026, 2:18:52 PM 669504 [focus] 1 +DEBUG 3/20/2026, 2:18:56 PM 673553 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:56 PM 673554 synced recovery +DEBUG 3/20/2026, 2:18:59 PM 676538 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:18:59 PM 676539 synced recovery +DEBUG 3/20/2026, 2:19:01 PM 678081 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:01 PM 678082 synced recovery +DEBUG 3/20/2026, 2:19:02 PM 679443 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:02 PM 679444 synced recovery +DEBUG 3/20/2026, 2:19:04 PM 681159 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:04 PM 681160 synced recovery +DEBUG 3/20/2026, 2:19:05 PM 682219 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:05 PM 682220 synced recovery +DEBUG 3/20/2026, 2:19:09 PM 686360 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:09 PM 686361 synced recovery +DEBUG 3/20/2026, 2:19:12 PM 688960 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:12 PM 688961 synced recovery +DEBUG 3/20/2026, 2:19:13 PM 690089 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:13 PM 690089 synced recovery +DEBUG 3/20/2026, 2:19:18 PM 695513 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:18 PM 695516 synced recovery +DEBUG 3/20/2026, 2:19:24 PM 700728 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:24 PM 700729 synced recovery +DEBUG 3/20/2026, 2:19:25 PM 702345 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:25 PM 702345 synced recovery +DEBUG 3/20/2026, 2:19:26 PM 703392 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:26 PM 703393 synced recovery +DEBUG 3/20/2026, 2:19:27 PM 704511 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:27 PM 704511 synced recovery +DEBUG 3/20/2026, 2:19:30 PM 706615 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:30 PM 706616 synced recovery +DEBUG 3/20/2026, 2:19:31 PM 707881 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:31 PM 707882 synced recovery +DEBUG 3/20/2026, 2:19:34 PM 711097 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:34 PM 711097 synced recovery +DEBUG 3/20/2026, 2:19:35 PM 712350 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:35 PM 712351 synced recovery +DEBUG 3/20/2026, 2:19:36 PM 713446 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:36 PM 713447 synced recovery +DEBUG 3/20/2026, 2:19:41 PM 718093 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:41 PM 718097 synced recovery +DEBUG 3/20/2026, 2:19:42 PM 719562 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:42 PM 719563 synced recovery +DEBUG 3/20/2026, 2:19:44 PM 720768 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:44 PM 720768 synced recovery +DEBUG 3/20/2026, 2:19:45 PM 721947 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:45 PM 721949 synced recovery +DEBUG 3/20/2026, 2:19:46 PM 723533 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:46 PM 723535 synced recovery +DEBUG 3/20/2026, 2:19:49 PM 726258 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.2/README.md (0) +INFO 3/20/2026, 2:19:49 PM 726260 synced recovery +INFO 3/20/2026, 2:20:09 PM 746469 [blur] 1 +INFO 3/20/2026, 2:20:09 PM 746469 [win] blur +INFO 3/20/2026, 2:20:11 PM 748397 [focus] 1 +INFO 3/20/2026, 2:20:18 PM 754798 [blur] 1 +INFO 3/20/2026, 2:20:18 PM 754799 [win] blur +INFO 3/20/2026, 2:20:32 PM 769392 [focus] 1 +INFO 3/20/2026, 2:20:32 PM 769469 [blur] 1 +INFO 3/20/2026, 2:20:32 PM 769469 [win] blur +INFO 3/20/2026, 2:28:13 PM 1229876 [focus] 1 +INFO 3/20/2026, 2:28:13 PM 1230144 [blur] 1 +INFO 3/20/2026, 2:28:13 PM 1230144 [win] blur +INFO 3/20/2026, 2:29:34 PM 1311397 [focus] 1 +INFO 3/20/2026, 2:29:34 PM 1311478 [blur] 1 +INFO 3/20/2026, 2:29:34 PM 1311478 [win] blur +INFO 3/20/2026, 2:30:32 PM 1368689 [focus] 1 +INFO 3/20/2026, 2:30:32 PM 1368759 [blur] 1 +INFO 3/20/2026, 2:30:32 PM 1368759 [win] blur +INFO 3/20/2026, 2:34:03 PM 1580370 [focus] 1 +INFO 3/20/2026, 2:34:03 PM 1580400 [blur] 1 +INFO 3/20/2026, 2:34:03 PM 1580400 [win] blur +INFO 3/20/2026, 2:34:32 PM 1609451 [focus] 1 +INFO 3/20/2026, 2:34:33 PM 1609628 [blur] 1 +INFO 3/20/2026, 2:34:33 PM 1609628 [win] blur +INFO 3/20/2026, 2:34:39 PM 1616294 [focus] 1 +INFO 3/20/2026, 2:34:39 PM 1616426 [blur] 1 +INFO 3/20/2026, 2:34:39 PM 1616427 [win] blur +INFO 3/20/2026, 2:35:40 PM 1677158 [focus] 1 +INFO 3/20/2026, 2:35:40 PM 1677225 [blur] 1 +INFO 3/20/2026, 2:35:40 PM 1677225 [win] blur +INFO 3/20/2026, 2:35:40 PM 1677282 [focus] 1 +INFO 3/20/2026, 2:35:40 PM 1677477 [blur] 1 +INFO 3/20/2026, 2:35:40 PM 1677477 [win] blur +INFO 3/20/2026, 2:35:53 PM 1690122 [focus] 1 +INFO 3/20/2026, 2:35:53 PM 1690202 [blur] 1 +INFO 3/20/2026, 2:35:53 PM 1690205 [win] blur +INFO 3/20/2026, 2:35:54 PM 1691291 [focus] 1 +INFO 3/20/2026, 2:35:55 PM 1691777 [blur] 1 +INFO 3/20/2026, 2:35:55 PM 1691778 [win] blur +INFO 3/20/2026, 2:35:55 PM 1691962 [focus] 1 +INFO 3/20/2026, 2:35:55 PM 1692365 [blur] 1 +INFO 3/20/2026, 2:35:55 PM 1692366 [win] blur +INFO 3/20/2026, 2:35:57 PM 1694367 [focus] 1 +INFO 3/20/2026, 2:35:57 PM 1694379 [blur] 1 +INFO 3/20/2026, 2:35:57 PM 1694379 [win] blur +INFO 3/20/2026, 2:37:25 PM 1782175 [focus] 1 +INFO 3/20/2026, 2:37:25 PM 1782197 [blur] 1 +INFO 3/20/2026, 2:37:25 PM 1782198 [win] blur +INFO 3/20/2026, 2:37:25 PM 1782388 [focus] 1 +INFO 3/20/2026, 2:37:25 PM 1782415 [blur] 1 +INFO 3/20/2026, 2:37:25 PM 1782415 [win] blur +INFO 3/20/2026, 2:37:46 PM 1803363 [focus] 1 +INFO 3/20/2026, 2:37:47 PM 1803584 [blur] 1 +INFO 3/20/2026, 2:37:47 PM 1803584 [win] blur +INFO 3/20/2026, 2:37:47 PM 1804087 [focus] 1 +INFO 3/20/2026, 2:37:47 PM 1804323 [blur] 1 +INFO 3/20/2026, 2:37:47 PM 1804326 [win] blur +INFO 3/20/2026, 2:38:47 PM 1863836 [focus] 1 +INFO 3/20/2026, 2:38:47 PM 1863877 [blur] 1 +INFO 3/20/2026, 2:38:47 PM 1863877 [win] blur +INFO 3/20/2026, 2:40:38 PM 1975459 [focus] 1 +INFO 3/20/2026, 2:40:39 PM 1975676 [blur] 1 +INFO 3/20/2026, 2:40:39 PM 1975677 [win] blur +INFO 3/20/2026, 2:41:34 PM 2030838 [focus] 1 +INFO 3/20/2026, 2:41:35 PM 2031725 [blur] 1 +INFO 3/20/2026, 2:41:35 PM 2031725 [win] blur +INFO 3/20/2026, 2:41:35 PM 2032211 [focus] 1 +INFO 3/20/2026, 2:41:36 PM 2033208 [blur] 1 +INFO 3/20/2026, 2:41:36 PM 2033211 [win] blur +INFO 3/20/2026, 2:41:36 PM 2033237 [focus] 1 +INFO 3/20/2026, 2:41:36 PM 2033247 [blur] 1 +INFO 3/20/2026, 2:41:36 PM 2033247 [win] blur +INFO 3/20/2026, 2:42:08 PM 2065542 [focus] 1 +INFO 3/20/2026, 2:42:11 PM 2068273 synced recovery +INFO 3/20/2026, 2:42:11 PM 2068273 ----------------before-quit----------------- +INFO 3/20/2026, 2:42:11 PM 2068273 ------------------will-quit------------------ +INFO 3/20/2026, 2:42:11 PM 2068276 -----------------quit------------------ +INFO 3/20/2026, 2:42:11 PM 2068276 closeLogging +INFO 3/23/2026, 12:28:12 PM 112 launch with argv [/usr/share/typora/Typora] +INFO 3/23/2026, 12:28:12 PM 905 ------------------start------------------ +DEBUG 3/23/2026, 12:28:13 PM 1044 before setting +DEBUG 3/23/2026, 12:28:13 PM 1181 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/23/2026, 12:28:13 PM 1207 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/23/2026, 12:28:13 PM 1212 OS is linux 6.19.9-arch1-1 +INFO 3/23/2026, 12:28:13 PM 1212 start LM in devVersion=false +DEBUG 3/23/2026, 12:28:13 PM 1229 after setting +INFO 3/23/2026, 12:28:13 PM 1229 typora version: 1.12.4 +user-dict.json not found +DEBUG 3/23/2026, 12:28:13 PM 1343 app.openFile +DEBUG 3/23/2026, 12:28:13 PM 1610 added recovery 1 null (0) +INFO 3/23/2026, 12:28:13 PM 1619 [watch L] +DEBUG 3/23/2026, 12:28:13 PM 1619 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/23/2026, 12:28:13 PM 1819 pure = undefined +INFO 3/23/2026, 12:28:13 PM 1821 renew +DEBUG 3/23/2026, 12:28:13 PM 1822 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 3/23/2026, 12:28:13 PM 1822 [L] pass +DEBUG 3/23/2026, 12:28:13 PM 1824 trailRemains is 0 +INFO 3/23/2026, 12:28:13 PM 1824 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/23/2026, 12:28:13 PM 1838 [watch L] hasL: true +DEBUG 3/23/2026, 12:28:13 PM 1848 putAccelerator File -> &Fichier +DEBUG 3/23/2026, 12:28:13 PM 1849 putAccelerator Edit -> Édit&er +DEBUG 3/23/2026, 12:28:13 PM 1849 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/23/2026, 12:28:13 PM 1851 putAccelerator Format -> F&ormat +DEBUG 3/23/2026, 12:28:13 PM 1851 putAccelerator View -> Présentation(&V) +DEBUG 3/23/2026, 12:28:13 PM 1852 putAccelerator Themes -> &Thèmes +DEBUG 3/23/2026, 12:28:13 PM 1852 putAccelerator Help -> Aide(&H) +INFO 3/23/2026, 12:28:14 PM 2097 synced recovery +INFO 3/23/2026, 12:28:14 PM 2555 [focus] 1 +DEBUG 3/23/2026, 12:28:15 PM 3577 [renewLicense]: license renewed +INFO 3/23/2026, 12:28:15 PM 3577 ls put SLicense +ERROR 3/23/2026, 12:28:15 PM 3701 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 3/23/2026, 12:28:15 PM 3704 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/23/2026, 12:28:15 PM 3704 handle document.loadData +DEBUG 3/23/2026, 12:28:15 PM 3704 document.loadData 0 +INFO 3/23/2026, 12:28:15 PM 3779 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/23/2026, 12:28:15 PM 3780 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/23/2026, 12:28:15 PM 3800 added recovery 1 (0) +INFO 3/23/2026, 12:28:15 PM 3803 synced recovery +INFO 3/23/2026, 12:28:16 PM 4110 [RenderProcess 1][Log] onBecomeActive +INFO 3/23/2026, 12:28:16 PM 4111 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/23/2026, 12:28:16 PM 4331 [blur] 1 +INFO 3/23/2026, 12:28:16 PM 4331 [win] blur +INFO 3/23/2026, 12:28:16 PM 4332 [focus] 1 +INFO 3/23/2026, 12:28:16 PM 4533 [blur] 1 +INFO 3/23/2026, 12:28:16 PM 4533 [win] blur +INFO 3/23/2026, 12:28:16 PM 4533 [focus] 1 +INFO 3/23/2026, 12:28:19 PM 7791 [blur] 1 +INFO 3/23/2026, 12:28:19 PM 7791 [win] blur +INFO 3/23/2026, 12:28:43 PM 31243 cleanUpExpiredDrafts +DEBUG 3/23/2026, 12:28:43 PM 31243 cleanUpExpiredDrafts +INFO 3/23/2026, 12:28:51 PM 39995 addRecentDocument +INFO 3/23/2026, 12:28:51 PM 40020 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/23/2026, 12:28:51 PM 40021 [RenderProcess 1][Log] reset NodeMap +INFO 3/23/2026, 12:28:51 PM 40031 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.0/.typora_readme.md +INFO 3/23/2026, 12:28:52 PM 40037 [focus] 1 +DEBUG 3/23/2026, 12:28:52 PM 40247 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/versions/4.0/.typora_readme.md (0) +INFO 3/23/2026, 12:28:52 PM 40248 synced recovery +INFO 3/23/2026, 12:29:03 PM 51855 synced recovery +INFO 3/23/2026, 12:29:03 PM 51855 ----------------before-quit----------------- +INFO 3/23/2026, 12:29:03 PM 51855 ------------------will-quit------------------ +INFO 3/23/2026, 12:29:03 PM 51857 -----------------quit------------------ +INFO 3/23/2026, 12:29:03 PM 51857 closeLogging +INFO 3/31/2026, 9:45:23 AM 79 launch with argv [/usr/share/typora/Typora] +INFO 3/31/2026, 9:45:23 AM 307 ------------------start------------------ +DEBUG 3/31/2026, 9:45:23 AM 501 before setting +DEBUG 3/31/2026, 9:45:23 AM 633 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 3/31/2026, 9:45:23 AM 652 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 3/31/2026, 9:45:23 AM 657 OS is linux 6.19.9-arch1-1 +INFO 3/31/2026, 9:45:23 AM 657 start LM in devVersion=false +DEBUG 3/31/2026, 9:45:23 AM 673 after setting +INFO 3/31/2026, 9:45:23 AM 673 typora version: 1.12.4 +INFO 3/31/2026, 9:45:23 AM 762 [watch L] +DEBUG 3/31/2026, 9:45:23 AM 762 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 3/31/2026, 9:45:23 AM 771 pure = undefined +INFO 3/31/2026, 9:45:23 AM 772 renew +DEBUG 3/31/2026, 9:45:23 AM 772 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 3/31/2026, 9:45:23 AM 772 [L] pass +DEBUG 3/31/2026, 9:45:23 AM 772 trailRemains is 0 +INFO 3/31/2026, 9:45:23 AM 772 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 3/31/2026, 9:45:23 AM 775 [watch L] hasL: true +user-dict.json not found +DEBUG 3/31/2026, 9:45:23 AM 802 app.openFile +DEBUG 3/31/2026, 9:45:24 AM 952 added recovery 1 null (0) +DEBUG 3/31/2026, 9:45:24 AM 961 putAccelerator File -> &Fichier +DEBUG 3/31/2026, 9:45:24 AM 962 putAccelerator Edit -> Édit&er +DEBUG 3/31/2026, 9:45:24 AM 962 putAccelerator Paragraph -> &Paragraphe +DEBUG 3/31/2026, 9:45:24 AM 962 putAccelerator Format -> F&ormat +DEBUG 3/31/2026, 9:45:24 AM 963 putAccelerator View -> Présentation(&V) +DEBUG 3/31/2026, 9:45:24 AM 963 putAccelerator Themes -> &Thèmes +DEBUG 3/31/2026, 9:45:24 AM 963 putAccelerator Help -> Aide(&H) +INFO 3/31/2026, 9:45:24 AM 1039 synced recovery +INFO 3/31/2026, 9:45:24 AM 1129 [focus] 1 +DEBUG 3/31/2026, 9:45:25 AM 1932 [renewLicense]: license renewed +INFO 3/31/2026, 9:45:25 AM 1932 ls put SLicense +ERROR 3/31/2026, 9:45:25 AM 2573 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/31/2026, 9:45:25 AM 2577 handle document.loadData +DEBUG 3/31/2026, 9:45:25 AM 2578 document.loadData 1 +ERROR 3/31/2026, 9:45:25 AM 2578 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 3/31/2026, 9:45:25 AM 2647 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/31/2026, 9:45:25 AM 2647 [RenderProcess 1][Log] reset NodeMap +DEBUG 3/31/2026, 9:45:25 AM 2672 added recovery 1 (0) +INFO 3/31/2026, 9:45:25 AM 2676 synced recovery +INFO 3/31/2026, 9:45:26 AM 2984 [RenderProcess 1][Log] onBecomeActive +INFO 3/31/2026, 9:45:26 AM 2984 [RenderProcess 1][Log] File.activeWindow = true +INFO 3/31/2026, 9:45:28 AM 5105 [blur] 1 +INFO 3/31/2026, 9:45:28 AM 5106 [win] blur +INFO 3/31/2026, 9:45:36 AM 13164 [focus] 1 +INFO 3/31/2026, 9:45:40 AM 17497 [blur] 1 +INFO 3/31/2026, 9:45:40 AM 17497 [win] blur +INFO 3/31/2026, 9:46:05 AM 42130 addRecentDocument +INFO 3/31/2026, 9:46:05 AM 42138 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 3/31/2026, 9:46:05 AM 42139 [RenderProcess 1][Log] reset NodeMap +INFO 3/31/2026, 9:46:05 AM 42150 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md +INFO 3/31/2026, 9:46:05 AM 42154 [focus] 1 +DEBUG 3/31/2026, 9:46:05 AM 42387 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:46:05 AM 42388 synced recovery +DEBUG 3/31/2026, 9:46:15 AM 52210 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:46:15 AM 52211 synced recovery +DEBUG 3/31/2026, 9:46:16 AM 53379 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:46:16 AM 53380 synced recovery +DEBUG 3/31/2026, 9:46:26 AM 62955 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:46:26 AM 62956 synced recovery +DEBUG 3/31/2026, 9:46:28 AM 65712 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:46:28 AM 65713 synced recovery +DEBUG 3/31/2026, 9:46:30 AM 67442 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:46:30 AM 67444 synced recovery +DEBUG 3/31/2026, 9:46:33 AM 70682 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:46:33 AM 70684 synced recovery +DEBUG 3/31/2026, 9:46:40 AM 77720 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:46:40 AM 77723 synced recovery +DEBUG 3/31/2026, 9:46:47 AM 83962 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:46:47 AM 83963 synced recovery +DEBUG 3/31/2026, 9:46:48 AM 84979 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:46:48 AM 84980 synced recovery +DEBUG 3/31/2026, 9:46:49 AM 86329 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:46:49 AM 86330 synced recovery +DEBUG 3/31/2026, 9:46:53 AM 90460 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:46:53 AM 90461 synced recovery +DEBUG 3/31/2026, 9:46:57 AM 94430 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:46:57 AM 94432 synced recovery +DEBUG 3/31/2026, 9:46:59 AM 96431 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:46:59 AM 96432 synced recovery +DEBUG 3/31/2026, 9:47:03 AM 100018 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:47:03 AM 100019 synced recovery +DEBUG 3/31/2026, 9:47:09 AM 105951 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:47:09 AM 105952 synced recovery +DEBUG 3/31/2026, 9:47:10 AM 107429 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:47:10 AM 107430 synced recovery +DEBUG 3/31/2026, 9:47:29 AM 126019 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:47:29 AM 126019 synced recovery +INFO 3/31/2026, 9:47:41 AM 138717 [blur] 1 +INFO 3/31/2026, 9:47:41 AM 138717 [win] blur +INFO 3/31/2026, 9:47:45 AM 141901 [focus] 1 +INFO 3/31/2026, 9:47:50 AM 147221 [blur] 1 +INFO 3/31/2026, 9:47:50 AM 147221 [win] blur +INFO 3/31/2026, 9:49:00 AM 217174 [focus] 1 +INFO 3/31/2026, 9:49:00 AM 217750 [blur] 1 +INFO 3/31/2026, 9:49:00 AM 217750 [win] blur +INFO 3/31/2026, 9:49:05 AM 221864 [focus] 1 +DEBUG 3/31/2026, 9:49:07 AM 223861 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:49:07 AM 223862 synced recovery +DEBUG 3/31/2026, 9:49:09 AM 226521 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:49:09 AM 226522 synced recovery +INFO 3/31/2026, 9:49:10 AM 227140 [blur] 1 +INFO 3/31/2026, 9:49:10 AM 227141 [win] blur +INFO 3/31/2026, 9:49:15 AM 232222 [focus] 1 +DEBUG 3/31/2026, 9:49:19 AM 236410 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:49:19 AM 236412 synced recovery +INFO 3/31/2026, 9:49:24 AM 241205 [blur] 1 +INFO 3/31/2026, 9:49:24 AM 241205 [win] blur +INFO 3/31/2026, 9:49:36 AM 253183 [focus] 1 +INFO 3/31/2026, 9:49:37 AM 254154 [blur] 1 +INFO 3/31/2026, 9:49:37 AM 254154 [win] blur +DEBUG 3/31/2026, 9:49:37 AM 254249 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:49:37 AM 254250 synced recovery +INFO 3/31/2026, 9:49:38 AM 255441 [focus] 1 +DEBUG 3/31/2026, 9:49:44 AM 261733 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:49:44 AM 261735 synced recovery +DEBUG 3/31/2026, 9:49:46 AM 263086 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:49:46 AM 263089 synced recovery +DEBUG 3/31/2026, 9:49:48 AM 265458 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:49:48 AM 265459 synced recovery +DEBUG 3/31/2026, 9:49:50 AM 267498 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:49:50 AM 267499 synced recovery +INFO 3/31/2026, 9:49:56 AM 273247 [blur] 1 +INFO 3/31/2026, 9:49:56 AM 273247 [win] blur +INFO 3/31/2026, 9:50:01 AM 277934 [focus] 1 +DEBUG 3/31/2026, 9:50:04 AM 281222 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:50:04 AM 281223 synced recovery +INFO 3/31/2026, 9:50:09 AM 286350 [blur] 1 +INFO 3/31/2026, 9:50:09 AM 286350 [win] blur +INFO 3/31/2026, 9:50:20 AM 297183 [focus] 1 +DEBUG 3/31/2026, 9:50:23 AM 300424 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:50:23 AM 300426 synced recovery +DEBUG 3/31/2026, 9:50:27 AM 304135 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:50:27 AM 304135 synced recovery +DEBUG 3/31/2026, 9:50:30 AM 306938 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:50:30 AM 306939 synced recovery +INFO 3/31/2026, 9:50:55 AM 332370 [blur] 1 +INFO 3/31/2026, 9:50:55 AM 332370 [win] blur +INFO 3/31/2026, 9:51:11 AM 348136 [focus] 1 +DEBUG 3/31/2026, 9:51:13 AM 350486 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:51:13 AM 350487 synced recovery +DEBUG 3/31/2026, 9:51:17 AM 353889 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:51:17 AM 353892 synced recovery +INFO 3/31/2026, 9:51:18 AM 355558 [blur] 1 +INFO 3/31/2026, 9:51:18 AM 355558 [win] blur +INFO 3/31/2026, 9:51:27 AM 364080 [focus] 1 +INFO 3/31/2026, 9:51:27 AM 364751 [blur] 1 +INFO 3/31/2026, 9:51:27 AM 364751 [win] blur +INFO 3/31/2026, 9:51:51 AM 387994 [focus] 1 +DEBUG 3/31/2026, 9:51:52 AM 389798 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:51:52 AM 389799 synced recovery +DEBUG 3/31/2026, 9:51:56 AM 393318 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:51:56 AM 393319 synced recovery +DEBUG 3/31/2026, 9:52:00 AM 397179 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:52:00 AM 397180 synced recovery +DEBUG 3/31/2026, 9:52:02 AM 398881 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:52:02 AM 398881 synced recovery +DEBUG 3/31/2026, 9:52:04 AM 401488 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:52:04 AM 401488 synced recovery +DEBUG 3/31/2026, 9:52:06 AM 403454 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:52:06 AM 403454 synced recovery +DEBUG 3/31/2026, 9:52:11 AM 407855 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:52:11 AM 407856 synced recovery +DEBUG 3/31/2026, 9:52:15 AM 412162 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:52:15 AM 412163 synced recovery +INFO 3/31/2026, 9:52:15 AM 412743 [blur] 1 +INFO 3/31/2026, 9:52:15 AM 412743 [win] blur +DEBUG 3/31/2026, 9:52:15 AM 412795 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:52:15 AM 412796 synced recovery +INFO 3/31/2026, 9:52:21 AM 418827 [focus] 1 +DEBUG 3/31/2026, 9:52:24 AM 421485 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:52:24 AM 421486 synced recovery +DEBUG 3/31/2026, 9:52:33 AM 430073 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:52:33 AM 430074 synced recovery +DEBUG 3/31/2026, 9:52:35 AM 432206 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:52:35 AM 432207 synced recovery +DEBUG 3/31/2026, 9:52:37 AM 434052 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:52:37 AM 434053 synced recovery +DEBUG 3/31/2026, 9:52:40 AM 437614 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:52:40 AM 437615 synced recovery +DEBUG 3/31/2026, 9:52:43 AM 440580 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:52:43 AM 440581 synced recovery +DEBUG 3/31/2026, 9:52:46 AM 443330 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:52:46 AM 443332 synced recovery +DEBUG 3/31/2026, 9:52:48 AM 445582 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:52:48 AM 445583 synced recovery +DEBUG 3/31/2026, 9:52:56 AM 453805 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:52:56 AM 453806 synced recovery +DEBUG 3/31/2026, 9:53:01 AM 458064 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:53:01 AM 458065 synced recovery +DEBUG 3/31/2026, 9:53:10 AM 466844 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:53:10 AM 466845 synced recovery +DEBUG 3/31/2026, 9:53:15 AM 472001 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:53:15 AM 472002 synced recovery +DEBUG 3/31/2026, 9:53:24 AM 480947 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:53:24 AM 480948 synced recovery +DEBUG 3/31/2026, 9:53:25 AM 482653 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:53:25 AM 482654 synced recovery +DEBUG 3/31/2026, 9:53:33 AM 490780 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:53:33 AM 490780 synced recovery +DEBUG 3/31/2026, 9:53:36 AM 493377 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:53:36 AM 493377 synced recovery +DEBUG 3/31/2026, 9:53:39 AM 495881 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:53:39 AM 495882 synced recovery +DEBUG 3/31/2026, 9:53:43 AM 500759 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:53:43 AM 500760 synced recovery +DEBUG 3/31/2026, 9:53:45 AM 502452 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:53:45 AM 502453 synced recovery +DEBUG 3/31/2026, 9:53:48 AM 505301 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:53:48 AM 505302 synced recovery +DEBUG 3/31/2026, 9:54:00 AM 517452 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:00 AM 517453 synced recovery +DEBUG 3/31/2026, 9:54:02 AM 519207 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:02 AM 519208 synced recovery +DEBUG 3/31/2026, 9:54:04 AM 521032 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:04 AM 521072 synced recovery +DEBUG 3/31/2026, 9:54:05 AM 522439 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:05 AM 522440 synced recovery +DEBUG 3/31/2026, 9:54:07 AM 524190 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:07 AM 524191 synced recovery +DEBUG 3/31/2026, 9:54:09 AM 526131 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:09 AM 526132 synced recovery +DEBUG 3/31/2026, 9:54:12 AM 529521 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:12 AM 529521 synced recovery +DEBUG 3/31/2026, 9:54:14 AM 531246 2nd 0.47974655766573604 +DEBUG 3/31/2026, 9:54:14 AM 531246 pure = false +INFO 3/31/2026, 9:54:14 AM 531246 renew +DEBUG 3/31/2026, 9:54:14 AM 531246 [renewLicense] license renewed in 12h +DEBUG 3/31/2026, 9:54:14 AM 531246 [L] pass +DEBUG 3/31/2026, 9:54:16 AM 532967 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:16 AM 532968 synced recovery +DEBUG 3/31/2026, 9:54:20 AM 537565 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:20 AM 537566 synced recovery +DEBUG 3/31/2026, 9:54:22 AM 539211 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:22 AM 539212 synced recovery +DEBUG 3/31/2026, 9:54:35 AM 551929 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:35 AM 551930 synced recovery +DEBUG 3/31/2026, 9:54:36 AM 553564 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:36 AM 553565 synced recovery +DEBUG 3/31/2026, 9:54:37 AM 554689 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:37 AM 554690 synced recovery +DEBUG 3/31/2026, 9:54:40 AM 557451 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:40 AM 557452 synced recovery +DEBUG 3/31/2026, 9:54:42 AM 559081 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:42 AM 559082 synced recovery +DEBUG 3/31/2026, 9:54:44 AM 561314 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:44 AM 561315 synced recovery +DEBUG 3/31/2026, 9:54:52 AM 569440 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:52 AM 569441 synced recovery +DEBUG 3/31/2026, 9:54:55 AM 572083 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:55 AM 572085 synced recovery +DEBUG 3/31/2026, 9:54:58 AM 575207 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:54:58 AM 575208 synced recovery +DEBUG 3/31/2026, 9:55:03 AM 580292 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:55:03 AM 580293 synced recovery +DEBUG 3/31/2026, 9:55:09 AM 585934 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:55:09 AM 585936 synced recovery +DEBUG 3/31/2026, 9:55:12 AM 589015 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:55:12 AM 589016 synced recovery +DEBUG 3/31/2026, 9:55:19 AM 596270 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:55:19 AM 596271 synced recovery +DEBUG 3/31/2026, 9:55:23 AM 600093 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:55:23 AM 600094 synced recovery +DEBUG 3/31/2026, 9:55:26 AM 603037 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:55:26 AM 603037 synced recovery +DEBUG 3/31/2026, 9:55:29 AM 605983 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:55:29 AM 605985 synced recovery +DEBUG 3/31/2026, 9:55:33 AM 610379 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:55:33 AM 610381 synced recovery +DEBUG 3/31/2026, 9:55:34 AM 611554 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:55:34 AM 611556 synced recovery +DEBUG 3/31/2026, 9:55:38 AM 615607 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:55:38 AM 615608 synced recovery +DEBUG 3/31/2026, 9:55:41 AM 618524 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:55:41 AM 618525 synced recovery +INFO 3/31/2026, 9:55:51 AM 628433 [blur] 1 +INFO 3/31/2026, 9:55:51 AM 628433 [win] blur +INFO 3/31/2026, 9:55:57 AM 633907 [focus] 1 +DEBUG 3/31/2026, 9:56:00 AM 636971 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:56:00 AM 636972 synced recovery +DEBUG 3/31/2026, 9:56:02 AM 639460 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:56:02 AM 639460 synced recovery +DEBUG 3/31/2026, 9:56:08 AM 645642 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:56:08 AM 645643 synced recovery +DEBUG 3/31/2026, 9:56:11 AM 647905 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:56:11 AM 647906 synced recovery +DEBUG 3/31/2026, 9:56:14 AM 651269 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:56:14 AM 651270 synced recovery +DEBUG 3/31/2026, 9:56:18 AM 654897 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:56:18 AM 654899 synced recovery +DEBUG 3/31/2026, 9:56:20 AM 656886 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:56:20 AM 656887 synced recovery +DEBUG 3/31/2026, 9:56:43 AM 680178 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:56:43 AM 680178 synced recovery +INFO 3/31/2026, 9:56:45 AM 682219 [blur] 1 +INFO 3/31/2026, 9:56:45 AM 682219 [win] blur +INFO 3/31/2026, 9:56:50 AM 686926 [focus] 1 +DEBUG 3/31/2026, 9:56:52 AM 689414 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:56:52 AM 689415 synced recovery +DEBUG 3/31/2026, 9:56:53 AM 690669 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:56:53 AM 690670 synced recovery +INFO 3/31/2026, 9:56:56 AM 693626 [blur] 1 +INFO 3/31/2026, 9:56:56 AM 693626 [win] blur +INFO 3/31/2026, 9:56:59 AM 696642 [focus] 1 +DEBUG 3/31/2026, 9:57:02 AM 699143 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:57:02 AM 699144 synced recovery +DEBUG 3/31/2026, 9:57:06 AM 703709 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:57:06 AM 703710 synced recovery +DEBUG 3/31/2026, 9:57:08 AM 705019 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:57:08 AM 705022 synced recovery +DEBUG 3/31/2026, 9:57:10 AM 707237 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:57:10 AM 707238 synced recovery +DEBUG 3/31/2026, 9:57:13 AM 710549 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:57:13 AM 710549 synced recovery +DEBUG 3/31/2026, 9:57:16 AM 713720 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:57:16 AM 713722 synced recovery +DEBUG 3/31/2026, 9:57:24 AM 721484 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:57:24 AM 721485 synced recovery +DEBUG 3/31/2026, 9:57:28 AM 725197 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:57:28 AM 725199 synced recovery +INFO 3/31/2026, 9:57:29 AM 726374 [blur] 1 +INFO 3/31/2026, 9:57:29 AM 726374 [win] blur +DEBUG 3/31/2026, 9:57:29 AM 726477 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:57:29 AM 726478 synced recovery +INFO 3/31/2026, 9:57:31 AM 727862 [focus] 1 +DEBUG 3/31/2026, 9:57:34 AM 731803 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:57:34 AM 731806 synced recovery +DEBUG 3/31/2026, 9:57:38 AM 734908 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:57:38 AM 734908 synced recovery +INFO 3/31/2026, 9:57:41 AM 738542 [blur] 1 +INFO 3/31/2026, 9:57:41 AM 738542 [win] blur +INFO 3/31/2026, 9:57:53 AM 750340 [focus] 1 +INFO 3/31/2026, 9:58:08 AM 765692 [blur] 1 +INFO 3/31/2026, 9:58:08 AM 765692 [win] blur +INFO 3/31/2026, 9:58:09 AM 766548 [focus] 1 +DEBUG 3/31/2026, 9:58:21 AM 778716 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:58:21 AM 778717 synced recovery +DEBUG 3/31/2026, 9:58:23 AM 779927 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:58:23 AM 779928 synced recovery +DEBUG 3/31/2026, 9:58:25 AM 782829 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:58:25 AM 782831 synced recovery +DEBUG 3/31/2026, 9:58:28 AM 785669 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:58:28 AM 785671 synced recovery +DEBUG 3/31/2026, 9:58:30 AM 787050 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:58:30 AM 787051 [blur] 1 +INFO 3/31/2026, 9:58:30 AM 787051 [win] blur +INFO 3/31/2026, 9:58:30 AM 787055 synced recovery +INFO 3/31/2026, 9:58:48 AM 805438 [focus] 1 +DEBUG 3/31/2026, 9:58:52 AM 809130 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:58:52 AM 809154 synced recovery +INFO 3/31/2026, 9:58:52 AM 809261 [blur] 1 +INFO 3/31/2026, 9:58:52 AM 809262 [win] blur +INFO 3/31/2026, 9:58:57 AM 813925 [focus] 1 +DEBUG 3/31/2026, 9:58:59 AM 815891 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:58:59 AM 815892 synced recovery +INFO 3/31/2026, 9:59:02 AM 819010 [blur] 1 +INFO 3/31/2026, 9:59:02 AM 819010 [win] blur +DEBUG 3/31/2026, 9:59:02 AM 819057 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:59:02 AM 819058 synced recovery +INFO 3/31/2026, 9:59:05 AM 822813 [focus] 1 +DEBUG 3/31/2026, 9:59:08 AM 825030 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:59:08 AM 825031 synced recovery +DEBUG 3/31/2026, 9:59:10 AM 826904 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:59:10 AM 826905 synced recovery +DEBUG 3/31/2026, 9:59:14 AM 830897 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:59:14 AM 830899 synced recovery +DEBUG 3/31/2026, 9:59:15 AM 831983 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:59:15 AM 831984 synced recovery +DEBUG 3/31/2026, 9:59:16 AM 833079 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:59:16 AM 833079 synced recovery +DEBUG 3/31/2026, 9:59:17 AM 834165 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:59:17 AM 834169 synced recovery +DEBUG 3/31/2026, 9:59:19 AM 836089 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:59:19 AM 836091 synced recovery +DEBUG 3/31/2026, 9:59:22 AM 839756 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:59:22 AM 839756 synced recovery +INFO 3/31/2026, 9:59:44 AM 861188 [blur] 1 +INFO 3/31/2026, 9:59:44 AM 861188 [win] blur +INFO 3/31/2026, 9:59:49 AM 865934 [focus] 1 +DEBUG 3/31/2026, 9:59:59 AM 876548 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 9:59:59 AM 876549 synced recovery +DEBUG 3/31/2026, 10:00:00 AM 877577 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 10:00:00 AM 877578 synced recovery +DEBUG 3/31/2026, 10:00:02 AM 879697 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 10:00:02 AM 879698 synced recovery +DEBUG 3/31/2026, 10:00:03 AM 880763 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 10:00:03 AM 880765 synced recovery +DEBUG 3/31/2026, 10:00:04 AM 881825 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 10:00:04 AM 881826 synced recovery +DEBUG 3/31/2026, 10:00:06 AM 883389 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 10:00:06 AM 883390 synced recovery +DEBUG 3/31/2026, 10:00:07 AM 884501 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 10:00:07 AM 884502 synced recovery +DEBUG 3/31/2026, 10:00:13 AM 890741 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 10:00:13 AM 890743 synced recovery +DEBUG 3/31/2026, 10:00:15 AM 892274 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 10:00:15 AM 892275 synced recovery +DEBUG 3/31/2026, 10:00:17 AM 894008 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 10:00:17 AM 894010 synced recovery +DEBUG 3/31/2026, 10:00:18 AM 895450 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 10:00:18 AM 895454 synced recovery +INFO 3/31/2026, 10:00:24 AM 901132 [blur] 1 +INFO 3/31/2026, 10:00:24 AM 901132 [win] blur +INFO 3/31/2026, 10:01:16 AM 953811 [focus] 1 +DEBUG 3/31/2026, 10:01:30 AM 967486 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 10:01:30 AM 967487 synced recovery +DEBUG 3/31/2026, 10:01:38 AM 975398 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 3/31/2026, 10:01:38 AM 975399 synced recovery +INFO 3/31/2026, 10:01:53 AM 990345 synced recovery +INFO 3/31/2026, 10:01:53 AM 990345 ----------------before-quit----------------- +INFO 3/31/2026, 10:01:53 AM 990345 ------------------will-quit------------------ +INFO 3/31/2026, 10:01:53 AM 990355 -----------------quit------------------ +INFO 3/31/2026, 10:01:53 AM 990355 closeLogging +INFO 4/8/2026, 1:57:44 PM 87 launch with argv [/usr/share/typora/Typora] +INFO 4/8/2026, 1:57:45 PM 330 ------------------start------------------ +DEBUG 4/8/2026, 1:57:45 PM 490 before setting +DEBUG 4/8/2026, 1:57:45 PM 575 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 4/8/2026, 1:57:45 PM 610 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 4/8/2026, 1:57:45 PM 615 OS is linux 6.19.11-arch1-1 +INFO 4/8/2026, 1:57:45 PM 615 start LM in devVersion=false +DEBUG 4/8/2026, 1:57:45 PM 632 after setting +INFO 4/8/2026, 1:57:45 PM 632 typora version: 1.12.4 +INFO 4/8/2026, 1:57:45 PM 721 [watch L] +DEBUG 4/8/2026, 1:57:45 PM 721 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 4/8/2026, 1:57:45 PM 739 pure = undefined +INFO 4/8/2026, 1:57:45 PM 739 renew +DEBUG 4/8/2026, 1:57:45 PM 739 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 4/8/2026, 1:57:45 PM 739 [L] pass +DEBUG 4/8/2026, 1:57:45 PM 740 trailRemains is 0 +INFO 4/8/2026, 1:57:45 PM 740 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 4/8/2026, 1:57:45 PM 742 [watch L] hasL: true +user-dict.json not found +DEBUG 4/8/2026, 1:57:45 PM 766 putAccelerator File -> &Fichier +DEBUG 4/8/2026, 1:57:45 PM 766 putAccelerator Edit -> Édit&er +DEBUG 4/8/2026, 1:57:45 PM 767 putAccelerator Paragraph -> &Paragraphe +DEBUG 4/8/2026, 1:57:45 PM 767 putAccelerator Format -> F&ormat +DEBUG 4/8/2026, 1:57:45 PM 767 putAccelerator View -> Présentation(&V) +DEBUG 4/8/2026, 1:57:45 PM 767 putAccelerator Themes -> &Thèmes +DEBUG 4/8/2026, 1:57:45 PM 767 putAccelerator Help -> Aide(&H) +DEBUG 4/8/2026, 1:57:45 PM 809 app.openFile +DEBUG 4/8/2026, 1:57:45 PM 982 added recovery 1 null (0) +INFO 4/8/2026, 1:57:45 PM 1050 synced recovery +INFO 4/8/2026, 1:57:47 PM 2146 [focus] 1 +DEBUG 4/8/2026, 1:57:47 PM 2656 [renewLicense]: license renewed +INFO 4/8/2026, 1:57:47 PM 2656 ls put SLicense +ERROR 4/8/2026, 1:57:48 PM 3448 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 4/8/2026, 1:57:48 PM 3451 handle document.loadData +DEBUG 4/8/2026, 1:57:48 PM 3451 document.loadData 0 +ERROR 4/8/2026, 1:57:48 PM 3452 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 4/8/2026, 1:57:48 PM 3525 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 4/8/2026, 1:57:48 PM 3525 [RenderProcess 1][Log] reset NodeMap +DEBUG 4/8/2026, 1:57:48 PM 3548 added recovery 1 (0) +INFO 4/8/2026, 1:57:48 PM 3553 synced recovery +INFO 4/8/2026, 1:57:48 PM 3936 [RenderProcess 1][Log] onBecomeActive +INFO 4/8/2026, 1:57:48 PM 3936 [RenderProcess 1][Log] File.activeWindow = true +DEBUG 4/8/2026, 1:57:54 PM 9273 app.openFile +INFO 4/8/2026, 1:57:54 PM 9282 switchDocument 1 [/home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md] +INFO 4/8/2026, 1:57:54 PM 9282 addRecentDocument +DEBUG 4/8/2026, 1:57:54 PM 9288 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:57:54 PM 9289 synced recovery +INFO 4/8/2026, 1:57:54 PM 9293 [RenderProcess 1][Log] File.activeWindow = true +INFO 4/8/2026, 1:57:54 PM 9294 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 4/8/2026, 1:57:54 PM 9295 [RenderProcess 1][Log] reset NodeMap +INFO 4/8/2026, 1:57:54 PM 9300 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md +DEBUG 4/8/2026, 1:57:54 PM 9478 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:57:54 PM 9480 synced recovery +INFO 4/8/2026, 1:58:01 PM 16662 [blur] 1 +INFO 4/8/2026, 1:58:01 PM 16662 [win] blur +INFO 4/8/2026, 1:58:09 PM 24985 [focus] 1 +INFO 4/8/2026, 1:58:10 PM 25943 [blur] 1 +INFO 4/8/2026, 1:58:10 PM 25945 [win] blur +INFO 4/8/2026, 1:58:18 PM 33623 [focus] 1 +DEBUG 4/8/2026, 1:58:20 PM 36101 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:58:20 PM 36102 synced recovery +DEBUG 4/8/2026, 1:58:25 PM 40643 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:58:25 PM 40644 synced recovery +DEBUG 4/8/2026, 1:58:29 PM 44576 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:58:29 PM 44578 synced recovery +DEBUG 4/8/2026, 1:58:30 PM 45860 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:58:30 PM 45861 synced recovery +DEBUG 4/8/2026, 1:58:32 PM 47636 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:58:32 PM 47637 synced recovery +INFO 4/8/2026, 1:58:33 PM 48231 [blur] 1 +INFO 4/8/2026, 1:58:33 PM 48231 [win] blur +INFO 4/8/2026, 1:58:39 PM 54668 [focus] 1 +INFO 4/8/2026, 1:58:49 PM 64769 [blur] 1 +INFO 4/8/2026, 1:58:49 PM 64769 [win] blur +INFO 4/8/2026, 1:58:49 PM 65031 [focus] 1 +INFO 4/8/2026, 1:58:50 PM 65319 [blur] 1 +INFO 4/8/2026, 1:58:50 PM 65319 [win] blur +INFO 4/8/2026, 1:58:50 PM 65735 [focus] 1 +DEBUG 4/8/2026, 1:58:52 PM 68024 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:58:52 PM 68025 synced recovery +DEBUG 4/8/2026, 1:58:55 PM 70582 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:58:55 PM 70583 synced recovery +DEBUG 4/8/2026, 1:58:56 PM 72128 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:58:56 PM 72129 synced recovery +DEBUG 4/8/2026, 1:58:59 PM 74721 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:58:59 PM 74722 synced recovery +DEBUG 4/8/2026, 1:59:00 PM 76112 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:00 PM 76112 synced recovery +DEBUG 4/8/2026, 1:59:02 PM 77858 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:02 PM 77859 synced recovery +DEBUG 4/8/2026, 1:59:05 PM 80730 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:05 PM 80731 synced recovery +DEBUG 4/8/2026, 1:59:06 PM 81859 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:06 PM 81860 synced recovery +DEBUG 4/8/2026, 1:59:08 PM 83393 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:08 PM 83393 synced recovery +DEBUG 4/8/2026, 1:59:09 PM 84825 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:09 PM 84826 synced recovery +DEBUG 4/8/2026, 1:59:16 PM 91865 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:16 PM 91865 synced recovery +DEBUG 4/8/2026, 1:59:23 PM 98871 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:23 PM 98874 synced recovery +DEBUG 4/8/2026, 1:59:28 PM 103596 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:28 PM 103597 synced recovery +DEBUG 4/8/2026, 1:59:34 PM 109190 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:34 PM 109191 synced recovery +DEBUG 4/8/2026, 1:59:35 PM 110480 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:35 PM 110481 synced recovery +DEBUG 4/8/2026, 1:59:36 PM 111787 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:36 PM 111788 synced recovery +DEBUG 4/8/2026, 1:59:38 PM 113765 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:38 PM 113766 synced recovery +DEBUG 4/8/2026, 1:59:40 PM 116017 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:40 PM 116018 synced recovery +DEBUG 4/8/2026, 1:59:42 PM 117404 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:42 PM 117405 synced recovery +DEBUG 4/8/2026, 1:59:43 PM 118989 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:43 PM 118990 synced recovery +DEBUG 4/8/2026, 1:59:47 PM 122359 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:47 PM 122361 synced recovery +DEBUG 4/8/2026, 1:59:48 PM 124102 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:48 PM 124103 synced recovery +DEBUG 4/8/2026, 1:59:50 PM 125844 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:50 PM 125846 synced recovery +DEBUG 4/8/2026, 1:59:52 PM 127539 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:52 PM 127542 synced recovery +DEBUG 4/8/2026, 1:59:54 PM 129322 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:54 PM 129323 synced recovery +DEBUG 4/8/2026, 1:59:56 PM 131713 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:56 PM 131714 synced recovery +DEBUG 4/8/2026, 1:59:57 PM 133022 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 1:59:57 PM 133023 synced recovery +DEBUG 4/8/2026, 2:00:00 PM 136022 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:00:00 PM 136024 synced recovery +DEBUG 4/8/2026, 2:00:02 PM 137412 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:00:02 PM 137414 synced recovery +DEBUG 4/8/2026, 2:00:09 PM 144173 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:00:09 PM 144175 synced recovery +DEBUG 4/8/2026, 2:00:14 PM 149991 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:00:14 PM 149991 synced recovery +DEBUG 4/8/2026, 2:00:18 PM 153182 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:00:18 PM 153186 synced recovery +DEBUG 4/8/2026, 2:00:19 PM 154685 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:00:19 PM 154686 synced recovery +DEBUG 4/8/2026, 2:00:21 PM 156490 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:00:21 PM 156491 synced recovery +DEBUG 4/8/2026, 2:00:23 PM 158381 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:00:23 PM 158382 synced recovery +DEBUG 4/8/2026, 2:00:24 PM 159926 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:00:24 PM 159927 synced recovery +DEBUG 4/8/2026, 2:00:27 PM 163103 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:00:27 PM 163104 synced recovery +DEBUG 4/8/2026, 2:00:29 PM 165047 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:00:29 PM 165048 synced recovery +DEBUG 4/8/2026, 2:00:31 PM 166625 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:00:31 PM 166626 synced recovery +DEBUG 4/8/2026, 2:00:35 PM 170685 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:00:35 PM 170687 synced recovery +DEBUG 4/8/2026, 2:00:44 PM 179883 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:00:44 PM 179884 synced recovery +DEBUG 4/8/2026, 2:00:46 PM 181551 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:00:46 PM 181552 synced recovery +DEBUG 4/8/2026, 2:00:58 PM 193772 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:00:58 PM 193773 synced recovery +DEBUG 4/8/2026, 2:01:00 PM 195605 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:01:00 PM 195606 synced recovery +DEBUG 4/8/2026, 2:01:04 PM 199431 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:01:04 PM 199432 synced recovery +DEBUG 4/8/2026, 2:01:06 PM 201975 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:01:06 PM 201976 synced recovery +DEBUG 4/8/2026, 2:01:10 PM 205349 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:01:10 PM 205351 synced recovery +INFO 4/8/2026, 2:01:29 PM 224739 [blur] 1 +INFO 4/8/2026, 2:01:29 PM 224739 [win] blur +INFO 4/8/2026, 2:01:34 PM 229344 [focus] 1 +DEBUG 4/8/2026, 2:01:51 PM 246421 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:01:51 PM 246422 synced recovery +DEBUG 4/8/2026, 2:01:52 PM 247518 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:01:52 PM 247519 synced recovery +DEBUG 4/8/2026, 2:01:53 PM 249053 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:01:53 PM 249054 synced recovery +INFO 4/8/2026, 2:03:28 PM 343555 load file [/tmp/Typora/1775649808304-0.9043058319052464.html] for PDF export +INFO 4/8/2026, 2:03:28 PM 344072 generate print window with id [2] for [content] +INFO 4/8/2026, 2:03:29 PM 344814 got PDF data +INFO 4/8/2026, 2:03:29 PM 344817 get background color +INFO 4/8/2026, 2:03:29 PM 344945 load file [/tmp/Typora/1775649809793-1.html] for PDF export +INFO 4/8/2026, 2:03:29 PM 345051 generate print window with id [3] for [header] +INFO 4/8/2026, 2:03:30 PM 345297 got PDF data +INFO 4/8/2026, 2:03:30 PM 345304 get background color +INFO 4/8/2026, 2:03:30 PM 345369 load file [/tmp/Typora/1775649810195-2.html] for PDF export +INFO 4/8/2026, 2:03:30 PM 345458 generate print window with id [4] for [footer] +INFO 4/8/2026, 2:03:30 PM 345763 got PDF data +INFO 4/8/2026, 2:03:30 PM 345766 get background color +INFO 4/8/2026, 2:03:30 PM 345829 [blur] 1 +INFO 4/8/2026, 2:03:30 PM 345829 [win] blur +INFO 4/8/2026, 2:03:37 PM 352612 [RenderProcess 1][Log] export PDF to /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README.pdf +INFO 4/8/2026, 2:03:37 PM 352713 [focus] 1 +INFO 4/8/2026, 2:03:39 PM 354349 [blur] 1 +INFO 4/8/2026, 2:03:39 PM 354349 [win] blur +INFO 4/8/2026, 2:03:39 PM 354700 [focus] 1 +INFO 4/8/2026, 2:03:39 PM 355004 [blur] 1 +INFO 4/8/2026, 2:03:39 PM 355005 [win] blur +INFO 4/8/2026, 2:03:40 PM 356109 [focus] 1 +INFO 4/8/2026, 2:03:41 PM 356650 [blur] 1 +INFO 4/8/2026, 2:03:41 PM 356650 [win] blur +INFO 4/8/2026, 2:04:13 PM 389056 [focus] 1 +DEBUG 4/8/2026, 2:04:26 PM 401381 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:04:26 PM 401382 synced recovery +DEBUG 4/8/2026, 2:04:27 PM 403124 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:04:27 PM 403125 synced recovery +DEBUG 4/8/2026, 2:04:30 PM 405569 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:04:30 PM 405570 synced recovery +DEBUG 4/8/2026, 2:04:32 PM 407292 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:04:32 PM 407293 synced recovery +DEBUG 4/8/2026, 2:04:40 PM 415889 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:04:40 PM 415890 synced recovery +DEBUG 4/8/2026, 2:04:41 PM 416980 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:04:41 PM 416982 synced recovery +DEBUG 4/8/2026, 2:04:43 PM 418538 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:04:43 PM 418541 synced recovery +DEBUG 4/8/2026, 2:04:46 PM 421700 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:04:46 PM 421701 synced recovery +DEBUG 4/8/2026, 2:04:47 PM 423000 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:04:47 PM 423002 synced recovery +DEBUG 4/8/2026, 2:04:49 PM 424381 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:04:49 PM 424382 synced recovery +DEBUG 4/8/2026, 2:04:51 PM 426976 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:04:51 PM 426976 synced recovery +DEBUG 4/8/2026, 2:04:53 PM 428875 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:04:53 PM 428876 synced recovery +DEBUG 4/8/2026, 2:04:54 PM 430016 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:04:54 PM 430017 synced recovery +DEBUG 4/8/2026, 2:04:56 PM 431449 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:04:56 PM 431450 synced recovery +DEBUG 4/8/2026, 2:04:59 PM 434813 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:04:59 PM 434814 synced recovery +DEBUG 4/8/2026, 2:05:01 PM 436235 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:05:01 PM 436236 synced recovery +DEBUG 4/8/2026, 2:05:02 PM 437939 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:05:02 PM 437940 synced recovery +DEBUG 4/8/2026, 2:05:05 PM 440529 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:05:05 PM 440530 synced recovery +DEBUG 4/8/2026, 2:05:07 PM 442851 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:05:07 PM 442851 synced recovery +DEBUG 4/8/2026, 2:05:09 PM 444290 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:05:09 PM 444290 synced recovery +DEBUG 4/8/2026, 2:05:11 PM 446929 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:05:11 PM 446930 synced recovery +DEBUG 4/8/2026, 2:05:12 PM 448091 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:05:12 PM 448092 synced recovery +DEBUG 4/8/2026, 2:05:14 PM 449423 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:05:14 PM 449424 synced recovery +DEBUG 4/8/2026, 2:05:15 PM 450688 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:05:15 PM 450689 synced recovery +INFO 4/8/2026, 2:05:28 PM 463584 [blur] 1 +INFO 4/8/2026, 2:05:28 PM 463584 [win] blur +DEBUG 4/8/2026, 2:05:35 PM 470204 added recovery 1 "--- +Author: Ant... +``` +" (18216) +INFO 4/8/2026, 2:05:35 PM 470205 synced recovery +INFO 4/8/2026, 2:06:23 PM 519054 [focus] 1 +DEBUG 4/8/2026, 2:06:35 PM 531008 added recovery 1 "--- +Author: Ant... +``` +" (18227) +INFO 4/8/2026, 2:06:35 PM 531009 synced recovery +DEBUG 4/8/2026, 2:06:36 PM 531211 2nd 0.6849215717131691 +DEBUG 4/8/2026, 2:06:36 PM 531212 pure = false +INFO 4/8/2026, 2:06:36 PM 531212 renew +DEBUG 4/8/2026, 2:06:36 PM 531213 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 4/8/2026, 2:06:36 PM 531213 [L] pass +DEBUG 4/8/2026, 2:06:36 PM 531737 [renewLicense]: license renewed +INFO 4/8/2026, 2:06:36 PM 531737 ls put SLicense +DEBUG 4/8/2026, 2:06:39 PM 535052 added recovery 1 "--- +Author: Ant... +``` +" (18232) +INFO 4/8/2026, 2:06:39 PM 535054 synced recovery +DEBUG 4/8/2026, 2:06:46 PM 541319 added recovery 1 "--- +Author: Ant... +``` +" (18243) +INFO 4/8/2026, 2:06:46 PM 541320 synced recovery +DEBUG 4/8/2026, 2:06:50 PM 545617 added recovery 1 "--- +Author: Ant... +``` +" (18249) +INFO 4/8/2026, 2:06:50 PM 545619 synced recovery +DEBUG 4/8/2026, 2:06:54 PM 549409 added recovery 1 "--- +Author: Ant... +``` +" (18252) +INFO 4/8/2026, 2:06:54 PM 549409 synced recovery +DEBUG 4/8/2026, 2:06:56 PM 551267 added recovery 1 "--- +Author: Ant... +``` +" (18253) +INFO 4/8/2026, 2:06:56 PM 551268 synced recovery +INFO 4/8/2026, 2:07:00 PM 555302 [blur] 1 +INFO 4/8/2026, 2:07:00 PM 555302 [win] blur +INFO 4/8/2026, 2:07:01 PM 556551 [focus] 1 +DEBUG 4/8/2026, 2:07:09 PM 564283 added recovery 1 "--- +Author: Ant... +``` +" (18253) +INFO 4/8/2026, 2:07:09 PM 564284 synced recovery +DEBUG 4/8/2026, 2:07:14 PM 569388 added recovery 1 "--- +Author: Ant... +``` +" (18253) +INFO 4/8/2026, 2:07:14 PM 569392 synced recovery +INFO 4/8/2026, 2:07:16 PM 571575 [blur] 1 +INFO 4/8/2026, 2:07:16 PM 571576 [win] blur +INFO 4/8/2026, 2:07:16 PM 571678 [focus] 1 +DEBUG 4/8/2026, 2:07:19 PM 574714 added recovery 1 "--- +Author: Ant... +``` +" (18244) +INFO 4/8/2026, 2:07:19 PM 574716 synced recovery +DEBUG 4/8/2026, 2:07:24 PM 580120 added recovery 1 "--- +Author: Ant... +``` +" (18241) +INFO 4/8/2026, 2:07:24 PM 580120 synced recovery +DEBUG 4/8/2026, 2:07:36 PM 591722 added recovery 1 "--- +Author: Ant... +``` +" (18241) +INFO 4/8/2026, 2:07:36 PM 591723 synced recovery +INFO 4/8/2026, 2:07:38 PM 594022 [blur] 1 +INFO 4/8/2026, 2:07:38 PM 594022 [win] blur +INFO 4/8/2026, 2:07:42 PM 597480 [focus] 1 +DEBUG 4/8/2026, 2:07:48 PM 603648 added recovery 1 "--- +Author: Ant... +``` +" (18241) +INFO 4/8/2026, 2:07:48 PM 603650 synced recovery +DEBUG 4/8/2026, 2:07:50 PM 605847 added recovery 1 "--- +Author: Ant... +``` +" (18241) +INFO 4/8/2026, 2:07:50 PM 605848 synced recovery +DEBUG 4/8/2026, 2:07:53 PM 608915 added recovery 1 "--- +Author: Ant... +``` +" (18241) +INFO 4/8/2026, 2:07:53 PM 608916 synced recovery +INFO 4/8/2026, 2:07:57 PM 612742 [blur] 1 +INFO 4/8/2026, 2:07:57 PM 612742 [win] blur +INFO 4/8/2026, 2:08:01 PM 616904 [focus] 1 +DEBUG 4/8/2026, 2:08:05 PM 620857 added recovery 1 "--- +Author: Ant... +``` +" (18240) +INFO 4/8/2026, 2:08:05 PM 620859 synced recovery +INFO 4/8/2026, 2:08:07 PM 622326 [blur] 1 +INFO 4/8/2026, 2:08:07 PM 622326 [win] blur +INFO 4/8/2026, 2:08:07 PM 622720 [focus] 1 +DEBUG 4/8/2026, 2:08:10 PM 626055 added recovery 1 "--- +Author: Ant... +``` +" (18239) +INFO 4/8/2026, 2:08:10 PM 626056 synced recovery +INFO 4/8/2026, 2:08:13 PM 628694 [blur] 1 +INFO 4/8/2026, 2:08:13 PM 628694 [win] blur +INFO 4/8/2026, 2:08:15 PM 630544 [focus] 1 +INFO 4/8/2026, 2:08:18 PM 633775 [blur] 1 +INFO 4/8/2026, 2:08:18 PM 633775 [win] blur +INFO 4/8/2026, 2:08:20 PM 635281 [focus] 1 +INFO 4/8/2026, 2:08:28 PM 643447 [blur] 1 +INFO 4/8/2026, 2:08:28 PM 643447 [win] blur +INFO 4/8/2026, 2:08:29 PM 644376 [focus] 1 +INFO 4/8/2026, 2:08:34 PM 649967 [blur] 1 +INFO 4/8/2026, 2:08:34 PM 649968 [win] blur +INFO 4/8/2026, 2:08:35 PM 650607 [focus] 1 +INFO 4/8/2026, 2:08:35 PM 650895 [blur] 1 +INFO 4/8/2026, 2:08:35 PM 650895 [win] blur +INFO 4/8/2026, 2:08:50 PM 665913 [focus] 1 +INFO 4/8/2026, 2:08:51 PM 666360 [blur] 1 +INFO 4/8/2026, 2:08:51 PM 666360 [win] blur +INFO 4/8/2026, 2:08:51 PM 666400 [focus] 1 +INFO 4/8/2026, 2:09:13 PM 688968 [blur] 1 +INFO 4/8/2026, 2:09:13 PM 688968 [win] blur +INFO 4/8/2026, 2:09:19 PM 694697 [focus] 1 +DEBUG 4/8/2026, 2:09:33 PM 708966 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:09:33 PM 708973 synced recovery +DEBUG 4/8/2026, 2:09:37 PM 712713 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:09:37 PM 712713 synced recovery +DEBUG 4/8/2026, 2:09:39 PM 714711 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:09:39 PM 714712 synced recovery +DEBUG 4/8/2026, 2:09:45 PM 720504 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:09:45 PM 720505 synced recovery +DEBUG 4/8/2026, 2:09:47 PM 722514 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:09:47 PM 722516 synced recovery +DEBUG 4/8/2026, 2:09:52 PM 727501 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:09:52 PM 727502 synced recovery +DEBUG 4/8/2026, 2:09:56 PM 731759 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:09:56 PM 731761 synced recovery +DEBUG 4/8/2026, 2:10:02 PM 737939 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:10:02 PM 737940 synced recovery +INFO 4/8/2026, 2:10:03 PM 738424 [blur] 1 +INFO 4/8/2026, 2:10:03 PM 738425 [win] blur +INFO 4/8/2026, 2:10:03 PM 738457 [focus] 1 +INFO 4/8/2026, 2:10:03 PM 739105 [blur] 1 +INFO 4/8/2026, 2:10:03 PM 739106 [win] blur +INFO 4/8/2026, 2:10:04 PM 739370 [focus] 1 +INFO 4/8/2026, 2:10:06 PM 742122 [blur] 1 +INFO 4/8/2026, 2:10:06 PM 742122 [win] blur +INFO 4/8/2026, 2:11:31 PM 826202 [focus] 1 +DEBUG 4/8/2026, 2:11:33 PM 829098 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:11:33 PM 829099 synced recovery +DEBUG 4/8/2026, 2:11:37 PM 832579 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:11:37 PM 832580 synced recovery +DEBUG 4/8/2026, 2:11:38 PM 833898 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:11:38 PM 833900 synced recovery +DEBUG 4/8/2026, 2:11:41 PM 836316 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:11:41 PM 836317 synced recovery +DEBUG 4/8/2026, 2:11:43 PM 838760 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:11:43 PM 838761 synced recovery +DEBUG 4/8/2026, 2:11:44 PM 839914 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:11:44 PM 839915 synced recovery +DEBUG 4/8/2026, 2:11:46 PM 841861 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:11:46 PM 841861 synced recovery +DEBUG 4/8/2026, 2:11:48 PM 843444 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:11:48 PM 843445 synced recovery +DEBUG 4/8/2026, 2:11:49 PM 844712 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:11:49 PM 844713 synced recovery +DEBUG 4/8/2026, 2:11:53 PM 848569 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:11:53 PM 848570 synced recovery +DEBUG 4/8/2026, 2:11:54 PM 849649 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:11:54 PM 849650 synced recovery +DEBUG 4/8/2026, 2:11:56 PM 851545 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:11:56 PM 851546 synced recovery +DEBUG 4/8/2026, 2:11:58 PM 853669 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:11:58 PM 853670 synced recovery +DEBUG 4/8/2026, 2:12:00 PM 855289 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:00 PM 855290 synced recovery +DEBUG 4/8/2026, 2:12:01 PM 856973 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:01 PM 856974 synced recovery +DEBUG 4/8/2026, 2:12:02 PM 858016 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:02 PM 858017 synced recovery +DEBUG 4/8/2026, 2:12:03 PM 859096 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:03 PM 859096 synced recovery +DEBUG 4/8/2026, 2:12:05 PM 860291 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:05 PM 860292 synced recovery +DEBUG 4/8/2026, 2:12:09 PM 864747 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:09 PM 864748 synced recovery +DEBUG 4/8/2026, 2:12:11 PM 866181 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:11 PM 866182 synced recovery +DEBUG 4/8/2026, 2:12:12 PM 867580 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:12 PM 867581 synced recovery +DEBUG 4/8/2026, 2:12:13 PM 868817 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:13 PM 868817 synced recovery +DEBUG 4/8/2026, 2:12:14 PM 869930 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:14 PM 869931 synced recovery +DEBUG 4/8/2026, 2:12:17 PM 872740 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:17 PM 872741 synced recovery +DEBUG 4/8/2026, 2:12:19 PM 874437 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:19 PM 874438 synced recovery +DEBUG 4/8/2026, 2:12:20 PM 875700 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:20 PM 875701 synced recovery +DEBUG 4/8/2026, 2:12:24 PM 879763 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:24 PM 879764 synced recovery +DEBUG 4/8/2026, 2:12:25 PM 880897 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:25 PM 880898 synced recovery +DEBUG 4/8/2026, 2:12:26 PM 882046 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:26 PM 882047 synced recovery +DEBUG 4/8/2026, 2:12:28 PM 883880 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:28 PM 883881 synced recovery +INFO 4/8/2026, 2:12:33 PM 888339 [blur] 1 +INFO 4/8/2026, 2:12:33 PM 888339 [win] blur +DEBUG 4/8/2026, 2:12:33 PM 888406 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:33 PM 888407 synced recovery +INFO 4/8/2026, 2:12:33 PM 888476 [focus] 1 +DEBUG 4/8/2026, 2:12:36 PM 891252 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:36 PM 891252 synced recovery +DEBUG 4/8/2026, 2:12:39 PM 894565 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:39 PM 894566 synced recovery +DEBUG 4/8/2026, 2:12:40 PM 895659 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:40 PM 895663 synced recovery +DEBUG 4/8/2026, 2:12:45 PM 900179 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:12:45 PM 900180 synced recovery +INFO 4/8/2026, 2:13:00 PM 915323 [blur] 1 +INFO 4/8/2026, 2:13:00 PM 915324 [win] blur +INFO 4/8/2026, 2:13:07 PM 922156 [focus] 1 +DEBUG 4/8/2026, 2:13:09 PM 925017 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:13:09 PM 925017 synced recovery +DEBUG 4/8/2026, 2:13:11 PM 926195 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:13:11 PM 926196 synced recovery +DEBUG 4/8/2026, 2:13:15 PM 930331 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:13:15 PM 930332 synced recovery +DEBUG 4/8/2026, 2:13:17 PM 933029 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:13:17 PM 933030 synced recovery +DEBUG 4/8/2026, 2:13:19 PM 934317 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:13:19 PM 934318 synced recovery +DEBUG 4/8/2026, 2:13:20 PM 935843 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:13:20 PM 935844 synced recovery +DEBUG 4/8/2026, 2:13:22 PM 937340 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:13:22 PM 937340 synced recovery +DEBUG 4/8/2026, 2:13:23 PM 938408 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:13:23 PM 938409 synced recovery +DEBUG 4/8/2026, 2:13:24 PM 939574 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:13:24 PM 939574 synced recovery +DEBUG 4/8/2026, 2:13:25 PM 940685 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:13:25 PM 940686 synced recovery +DEBUG 4/8/2026, 2:13:26 PM 941850 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:13:26 PM 941851 synced recovery +DEBUG 4/8/2026, 2:13:29 PM 944181 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:13:29 PM 944182 synced recovery +INFO 4/8/2026, 2:13:29 PM 944203 [blur] 1 +INFO 4/8/2026, 2:13:29 PM 944203 [win] blur +INFO 4/8/2026, 2:13:29 PM 944371 [focus] 1 +DEBUG 4/8/2026, 2:13:32 PM 947845 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:13:32 PM 947846 synced recovery +DEBUG 4/8/2026, 2:13:36 PM 951235 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:13:36 PM 951235 synced recovery +INFO 4/8/2026, 2:13:38 PM 953244 [blur] 1 +INFO 4/8/2026, 2:13:38 PM 953244 [win] blur +INFO 4/8/2026, 2:14:10 PM 985212 [focus] 1 +DEBUG 4/8/2026, 2:14:20 PM 995815 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:14:20 PM 995816 synced recovery +DEBUG 4/8/2026, 2:14:21 PM 996914 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:14:21 PM 996915 synced recovery +DEBUG 4/8/2026, 2:14:23 PM 998769 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:14:23 PM 998770 synced recovery +DEBUG 4/8/2026, 2:14:25 PM 1000542 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:14:25 PM 1000543 synced recovery +DEBUG 4/8/2026, 2:14:26 PM 1001654 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:14:26 PM 1001655 synced recovery +DEBUG 4/8/2026, 2:14:27 PM 1003120 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:14:27 PM 1003121 synced recovery +DEBUG 4/8/2026, 2:14:29 PM 1004368 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:14:29 PM 1004369 synced recovery +DEBUG 4/8/2026, 2:14:30 PM 1005524 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:14:30 PM 1005525 synced recovery +DEBUG 4/8/2026, 2:14:31 PM 1006586 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:14:31 PM 1006587 synced recovery +DEBUG 4/8/2026, 2:14:33 PM 1009008 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:14:33 PM 1009009 synced recovery +DEBUG 4/8/2026, 2:14:34 PM 1010049 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:14:34 PM 1010052 synced recovery +DEBUG 4/8/2026, 2:14:37 PM 1012621 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:14:37 PM 1012624 synced recovery +INFO 4/8/2026, 2:14:38 PM 1013157 [blur] 1 +INFO 4/8/2026, 2:14:38 PM 1013158 [win] blur +INFO 4/8/2026, 2:14:42 PM 1017237 [focus] 1 +INFO 4/8/2026, 2:14:43 PM 1018644 [blur] 1 +INFO 4/8/2026, 2:14:43 PM 1018644 [win] blur +INFO 4/8/2026, 2:18:18 PM 1233600 [focus] 1 +INFO 4/8/2026, 2:18:18 PM 1233759 [blur] 1 +INFO 4/8/2026, 2:18:18 PM 1233759 [win] blur +INFO 4/8/2026, 2:22:15 PM 1470618 [focus] 1 +INFO 4/8/2026, 2:22:15 PM 1470674 [blur] 1 +INFO 4/8/2026, 2:22:15 PM 1470675 [win] blur +INFO 4/8/2026, 2:22:15 PM 1470964 [focus] 1 +INFO 4/8/2026, 2:22:15 PM 1470967 [blur] 1 +INFO 4/8/2026, 2:22:15 PM 1470967 [win] blur +INFO 4/8/2026, 2:22:16 PM 1471316 [focus] 1 +INFO 4/8/2026, 2:22:16 PM 1471603 [blur] 1 +INFO 4/8/2026, 2:22:16 PM 1471603 [win] blur +INFO 4/8/2026, 2:23:56 PM 1571563 [focus] 1 +INFO 4/8/2026, 2:24:07 PM 1582787 [blur] 1 +INFO 4/8/2026, 2:24:07 PM 1582788 [win] blur +INFO 4/8/2026, 2:24:07 PM 1582840 [RenderProcess 1][Error] Error: ENOENT: no such file or directory, unlink '/home/afoucaultc/.config/Typora/draftsRecover/2026-4-8 README 142407.md' +DEBUG 4/8/2026, 2:24:07 PM 1582849 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:24:07 PM 1582850 synced recovery +DEBUG 4/8/2026, 2:24:07 PM 1582853 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:24:07 PM 1582879 synced recovery +INFO 4/8/2026, 2:24:09 PM 1584180 [focus] 1 +INFO 4/8/2026, 2:24:09 PM 1584412 [blur] 1 +INFO 4/8/2026, 2:24:09 PM 1584412 [win] blur +INFO 4/8/2026, 2:24:09 PM 1584419 [focus] 1 +DEBUG 4/8/2026, 2:24:10 PM 1586051 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:24:10 PM 1586055 synced recovery +INFO 4/8/2026, 2:24:11 PM 1586185 [blur] 1 +INFO 4/8/2026, 2:24:11 PM 1586185 [win] blur +INFO 4/8/2026, 2:24:12 PM 1587716 [focus] 1 +INFO 4/8/2026, 2:24:12 PM 1587991 [blur] 1 +INFO 4/8/2026, 2:24:12 PM 1587991 [win] blur +INFO 4/8/2026, 2:24:12 PM 1588007 [focus] 1 +INFO 4/8/2026, 2:24:14 PM 1589770 [blur] 1 +INFO 4/8/2026, 2:24:14 PM 1589770 [win] blur +DEBUG 4/8/2026, 2:24:14 PM 1589835 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:24:14 PM 1589837 synced recovery +INFO 4/8/2026, 2:24:15 PM 1590754 [focus] 1 +INFO 4/8/2026, 2:24:16 PM 1591502 [blur] 1 +INFO 4/8/2026, 2:24:16 PM 1591502 [win] blur +INFO 4/8/2026, 2:24:16 PM 1591507 [focus] 1 +DEBUG 4/8/2026, 2:24:16 PM 1591568 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:24:16 PM 1591570 synced recovery +INFO 4/8/2026, 2:24:18 PM 1593162 [blur] 1 +INFO 4/8/2026, 2:24:18 PM 1593162 [win] blur +DEBUG 4/8/2026, 2:24:18 PM 1593246 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/octave/README.md (0) +INFO 4/8/2026, 2:24:18 PM 1593248 synced recovery +INFO 4/8/2026, 2:24:18 PM 1593362 [focus] 1 +INFO 4/8/2026, 2:24:18 PM 1594114 [blur] 1 +INFO 4/8/2026, 2:24:18 PM 1594114 [win] blur +INFO 4/8/2026, 2:24:19 PM 1594426 [focus] 1 +INFO 4/8/2026, 2:24:19 PM 1594500 [blur] 1 +INFO 4/8/2026, 2:24:19 PM 1594500 [win] blur +INFO 4/8/2026, 2:24:19 PM 1594500 [focus] 1 +INFO 4/8/2026, 2:24:19 PM 1594983 [blur] 1 +INFO 4/8/2026, 2:24:19 PM 1594983 [win] blur +INFO 4/8/2026, 2:24:26 PM 1601574 [focus] 1 +INFO 4/8/2026, 2:24:26 PM 1601587 [blur] 1 +INFO 4/8/2026, 2:24:26 PM 1601587 [win] blur +INFO 4/8/2026, 2:24:26 PM 1601946 [focus] 1 +INFO 4/8/2026, 2:24:26 PM 1601995 [blur] 1 +INFO 4/8/2026, 2:24:26 PM 1601995 [win] blur +INFO 4/8/2026, 2:24:27 PM 1602261 [focus] 1 +INFO 4/8/2026, 2:24:27 PM 1602276 [blur] 1 +INFO 4/8/2026, 2:24:27 PM 1602277 [win] blur +INFO 4/8/2026, 2:24:27 PM 1602536 [focus] 1 +INFO 4/8/2026, 2:24:27 PM 1602549 [blur] 1 +INFO 4/8/2026, 2:24:27 PM 1602550 [win] blur +INFO 4/8/2026, 2:24:27 PM 1602888 [focus] 1 +INFO 4/8/2026, 2:24:27 PM 1602892 [blur] 1 +INFO 4/8/2026, 2:24:27 PM 1602892 [win] blur +INFO 4/8/2026, 2:24:28 PM 1603226 [focus] 1 +INFO 4/8/2026, 2:24:28 PM 1603240 [blur] 1 +INFO 4/8/2026, 2:24:28 PM 1603241 [win] blur +INFO 4/8/2026, 2:24:28 PM 1603530 [focus] 1 +INFO 4/8/2026, 2:24:28 PM 1603545 [blur] 1 +INFO 4/8/2026, 2:24:28 PM 1603546 [win] blur +INFO 4/8/2026, 2:24:28 PM 1603855 [focus] 1 +INFO 4/8/2026, 2:24:28 PM 1603862 [blur] 1 +INFO 4/8/2026, 2:24:28 PM 1603862 [win] blur +INFO 4/8/2026, 2:24:29 PM 1604186 [focus] 1 +INFO 4/8/2026, 2:24:29 PM 1604189 [blur] 1 +INFO 4/8/2026, 2:24:29 PM 1604189 [win] blur +INFO 4/8/2026, 2:24:29 PM 1604510 [focus] 1 +INFO 4/8/2026, 2:24:29 PM 1604524 [blur] 1 +INFO 4/8/2026, 2:24:29 PM 1604524 [win] blur +INFO 4/8/2026, 2:24:29 PM 1604828 [focus] 1 +INFO 4/8/2026, 2:24:29 PM 1604845 [blur] 1 +INFO 4/8/2026, 2:24:29 PM 1604845 [win] blur +INFO 4/8/2026, 2:24:30 PM 1605159 [focus] 1 +INFO 4/8/2026, 2:24:30 PM 1605170 [blur] 1 +INFO 4/8/2026, 2:24:30 PM 1605171 [win] blur +INFO 4/8/2026, 2:25:50 PM 1685148 [focus] 1 +INFO 4/8/2026, 2:25:50 PM 1685167 [blur] 1 +INFO 4/8/2026, 2:25:50 PM 1685167 [win] blur +INFO 4/8/2026, 2:28:04 PM 1819767 [focus] 1 +INFO 4/8/2026, 2:28:11 PM 1826808 [blur] 1 +INFO 4/8/2026, 2:28:11 PM 1826809 [win] blur +INFO 4/8/2026, 2:28:12 PM 1827206 [focus] 1 +INFO 4/8/2026, 2:28:16 PM 1831463 [blur] 1 +INFO 4/8/2026, 2:28:16 PM 1831464 [win] blur +INFO 4/8/2026, 2:28:17 PM 1832631 load file [/tmp/Typora/1775651297204-0.18885501784797865.html] for PDF export +INFO 4/8/2026, 2:28:17 PM 1833018 [focus] 1 +INFO 4/8/2026, 2:28:17 PM 1833082 [blur] 1 +INFO 4/8/2026, 2:28:17 PM 1833082 [win] blur +INFO 4/8/2026, 2:28:18 PM 1833883 generate print window with id [5] for [content] +INFO 4/8/2026, 2:28:19 PM 1834915 got PDF data +INFO 4/8/2026, 2:28:19 PM 1834918 get background color +INFO 4/8/2026, 2:28:19 PM 1835099 load file [/tmp/Typora/1775651299884-3.html] for PDF export +INFO 4/8/2026, 2:28:20 PM 1835290 generate print window with id [6] for [header] +INFO 4/8/2026, 2:28:20 PM 1835522 got PDF data +INFO 4/8/2026, 2:28:20 PM 1835525 get background color +INFO 4/8/2026, 2:28:20 PM 1835567 load file [/tmp/Typora/1775651300408-4.html] for PDF export +INFO 4/8/2026, 2:28:20 PM 1835719 generate print window with id [7] for [footer] +INFO 4/8/2026, 2:28:20 PM 1835953 got PDF data +INFO 4/8/2026, 2:28:20 PM 1835956 get background color +INFO 4/8/2026, 2:28:26 PM 1842084 [RenderProcess 1][Log] export PDF to /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README.pdf +INFO 4/8/2026, 2:28:27 PM 1842178 [focus] 1 +INFO 4/8/2026, 2:28:29 PM 1844564 synced recovery +INFO 4/8/2026, 2:28:29 PM 1844564 ----------------before-quit----------------- +INFO 4/8/2026, 2:28:29 PM 1844564 ------------------will-quit------------------ +INFO 4/8/2026, 2:28:29 PM 1844584 -----------------quit------------------ +INFO 4/8/2026, 2:28:29 PM 1844584 closeLogging +INFO 4/21/2026, 10:51:48 AM 140 launch with argv [/usr/share/typora/Typora] +INFO 4/21/2026, 10:51:49 AM 1147 ------------------start------------------ +DEBUG 4/21/2026, 10:51:49 AM 1338 before setting +DEBUG 4/21/2026, 10:51:50 AM 1445 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 4/21/2026, 10:51:50 AM 1510 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 4/21/2026, 10:51:50 AM 1528 OS is linux 6.19.12-arch1-1 +INFO 4/21/2026, 10:51:50 AM 1528 start LM in devVersion=false +DEBUG 4/21/2026, 10:51:50 AM 1566 after setting +INFO 4/21/2026, 10:51:50 AM 1566 typora version: 1.12.4 +INFO 4/21/2026, 10:51:50 AM 1765 [watch L] +DEBUG 4/21/2026, 10:51:50 AM 1765 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 4/21/2026, 10:51:50 AM 1787 pure = undefined +INFO 4/21/2026, 10:51:50 AM 1788 renew +DEBUG 4/21/2026, 10:51:50 AM 1788 [renewLicense]: {"v":"linux|1.12.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 4/21/2026, 10:51:50 AM 1788 [L] pass +DEBUG 4/21/2026, 10:51:50 AM 1789 trailRemains is 0 +INFO 4/21/2026, 10:51:50 AM 1789 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 4/21/2026, 10:51:50 AM 1795 [watch L] hasL: true +user-dict.json not found +DEBUG 4/21/2026, 10:51:50 AM 1863 putAccelerator File -> &Fichier +DEBUG 4/21/2026, 10:51:50 AM 1864 putAccelerator Edit -> Édit&er +DEBUG 4/21/2026, 10:51:50 AM 1865 putAccelerator Paragraph -> &Paragraphe +DEBUG 4/21/2026, 10:51:50 AM 1865 putAccelerator Format -> F&ormat +DEBUG 4/21/2026, 10:51:50 AM 1866 putAccelerator View -> Présentation(&V) +DEBUG 4/21/2026, 10:51:50 AM 1866 putAccelerator Themes -> &Thèmes +DEBUG 4/21/2026, 10:51:50 AM 1866 putAccelerator Help -> Aide(&H) +DEBUG 4/21/2026, 10:51:50 AM 2041 app.openFile +DEBUG 4/21/2026, 10:51:50 AM 2282 added recovery 1 null (0) +INFO 4/21/2026, 10:51:51 AM 2420 synced recovery +INFO 4/21/2026, 10:51:51 AM 3091 [focus] 1 +DEBUG 4/21/2026, 10:51:52 AM 3598 [renewLicense]: license renewed +INFO 4/21/2026, 10:51:52 AM 3598 ls put SLicense +ERROR 4/21/2026, 10:51:53 AM 4803 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +ERROR 4/21/2026, 10:51:53 AM 4808 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 4/21/2026, 10:51:53 AM 4815 handle document.loadData +DEBUG 4/21/2026, 10:51:53 AM 4816 document.loadData 0 +INFO 4/21/2026, 10:51:53 AM 4953 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 4/21/2026, 10:51:53 AM 4954 [RenderProcess 1][Log] reset NodeMap +DEBUG 4/21/2026, 10:51:53 AM 4997 added recovery 1 (0) +INFO 4/21/2026, 10:51:53 AM 5002 synced recovery +INFO 4/21/2026, 10:51:54 AM 5578 [RenderProcess 1][Log] onBecomeActive +INFO 4/21/2026, 10:51:54 AM 5579 [RenderProcess 1][Log] File.activeWindow = true +INFO 4/21/2026, 10:52:20 AM 31604 cleanUpExpiredDrafts +DEBUG 4/21/2026, 10:52:20 AM 31604 cleanUpExpiredDrafts +INFO 4/21/2026, 10:53:26 AM 98244 [blur] 1 +INFO 4/21/2026, 10:53:26 AM 98244 [win] blur +INFO 4/21/2026, 10:53:39 AM 110805 addRecentDocument +INFO 4/21/2026, 10:53:39 AM 110831 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 4/21/2026, 10:53:39 AM 110832 [RenderProcess 1][Log] reset NodeMap +INFO 4/21/2026, 10:53:39 AM 110851 [focus] 1 +INFO 4/21/2026, 10:53:39 AM 110853 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md +DEBUG 4/21/2026, 10:53:39 AM 111032 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:53:39 AM 111037 synced recovery +DEBUG 4/21/2026, 10:53:59 AM 130531 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:53:59 AM 130532 synced recovery +DEBUG 4/21/2026, 10:54:06 AM 138173 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:54:06 AM 138174 synced recovery +DEBUG 4/21/2026, 10:54:09 AM 140963 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:54:09 AM 140966 synced recovery +DEBUG 4/21/2026, 10:54:19 AM 151075 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:54:19 AM 151076 synced recovery +DEBUG 4/21/2026, 10:54:21 AM 152542 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:54:21 AM 152545 synced recovery +DEBUG 4/21/2026, 10:54:26 AM 157696 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:54:26 AM 157698 synced recovery +DEBUG 4/21/2026, 10:54:29 AM 160858 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:54:29 AM 160860 synced recovery +DEBUG 4/21/2026, 10:54:35 AM 166998 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:54:35 AM 167000 synced recovery +DEBUG 4/21/2026, 10:54:46 AM 177619 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:54:46 AM 177621 synced recovery +DEBUG 4/21/2026, 10:54:55 AM 187062 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:54:55 AM 187063 synced recovery +DEBUG 4/21/2026, 10:54:59 AM 191199 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:54:59 AM 191201 synced recovery +DEBUG 4/21/2026, 10:55:00 AM 192322 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:55:00 AM 192324 synced recovery +DEBUG 4/21/2026, 10:55:03 AM 195327 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:55:03 AM 195328 synced recovery +DEBUG 4/21/2026, 10:55:05 AM 196590 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:55:05 AM 196591 synced recovery +DEBUG 4/21/2026, 10:55:06 AM 197791 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:55:06 AM 197794 synced recovery +DEBUG 4/21/2026, 10:55:08 AM 199594 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:55:08 AM 199596 synced recovery +DEBUG 4/21/2026, 10:55:10 AM 201369 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:55:10 AM 201371 synced recovery +DEBUG 4/21/2026, 10:55:12 AM 204062 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:55:12 AM 204063 synced recovery +DEBUG 4/21/2026, 10:55:14 AM 205528 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:55:14 AM 205531 synced recovery +DEBUG 4/21/2026, 10:55:16 AM 208034 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:55:16 AM 208035 synced recovery +DEBUG 4/21/2026, 10:55:18 AM 209799 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:55:18 AM 209802 synced recovery +DEBUG 4/21/2026, 10:55:20 AM 212229 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:55:20 AM 212231 synced recovery +DEBUG 4/21/2026, 10:55:25 AM 216398 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:55:25 AM 216400 synced recovery +DEBUG 4/21/2026, 10:57:33 AM 344787 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:57:33 AM 344789 synced recovery +DEBUG 4/21/2026, 10:57:41 AM 353310 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:57:41 AM 353312 synced recovery +DEBUG 4/21/2026, 10:57:43 AM 355193 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:57:43 AM 355195 synced recovery +DEBUG 4/21/2026, 10:57:47 AM 358496 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:57:47 AM 358497 synced recovery +DEBUG 4/21/2026, 10:57:48 AM 359745 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:57:48 AM 359746 synced recovery +DEBUG 4/21/2026, 10:57:51 AM 362783 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:57:51 AM 362786 synced recovery +DEBUG 4/21/2026, 10:57:53 AM 364566 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:57:53 AM 364568 synced recovery +DEBUG 4/21/2026, 10:57:56 AM 367894 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:57:56 AM 367895 synced recovery +DEBUG 4/21/2026, 10:57:59 AM 370433 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:57:59 AM 370436 synced recovery +DEBUG 4/21/2026, 10:58:03 AM 374927 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:58:03 AM 374929 synced recovery +DEBUG 4/21/2026, 10:58:05 AM 376803 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:58:05 AM 376805 synced recovery +DEBUG 4/21/2026, 10:58:07 AM 378400 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:58:07 AM 378402 synced recovery +DEBUG 4/21/2026, 10:58:09 AM 381005 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:58:09 AM 381007 synced recovery +DEBUG 4/21/2026, 10:58:11 AM 382526 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:58:11 AM 382529 synced recovery +DEBUG 4/21/2026, 10:58:13 AM 385174 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:58:13 AM 385175 synced recovery +DEBUG 4/21/2026, 10:58:20 AM 391637 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:58:20 AM 391639 synced recovery +DEBUG 4/21/2026, 10:58:24 AM 396323 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:58:24 AM 396325 synced recovery +DEBUG 4/21/2026, 10:58:30 AM 401589 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:58:30 AM 401590 synced recovery +DEBUG 4/21/2026, 10:59:31 AM 462708 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:59:31 AM 462709 synced recovery +DEBUG 4/21/2026, 10:59:34 AM 465390 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:59:34 AM 465396 synced recovery +DEBUG 4/21/2026, 10:59:38 AM 469411 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 10:59:38 AM 469412 synced recovery +DEBUG 4/21/2026, 11:00:40 AM 532275 2nd 0.7574586769252043 +DEBUG 4/21/2026, 11:00:40 AM 532275 pure = false +INFO 4/21/2026, 11:00:40 AM 532276 renew +DEBUG 4/21/2026, 11:00:40 AM 532276 [renewLicense] license renewed in 12h +DEBUG 4/21/2026, 11:00:40 AM 532276 [L] pass +DEBUG 4/21/2026, 11:01:46 AM 597823 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:01:46 AM 597827 synced recovery +DEBUG 4/21/2026, 11:01:51 AM 602795 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:01:51 AM 602797 synced recovery +DEBUG 4/21/2026, 11:01:54 AM 606277 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:01:54 AM 606279 synced recovery +DEBUG 4/21/2026, 11:02:04 AM 616131 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:04 AM 616133 synced recovery +DEBUG 4/21/2026, 11:02:10 AM 621615 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:10 AM 621617 synced recovery +DEBUG 4/21/2026, 11:02:13 AM 624923 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:13 AM 624924 synced recovery +DEBUG 4/21/2026, 11:02:17 AM 628858 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:17 AM 628860 synced recovery +DEBUG 4/21/2026, 11:02:21 AM 632840 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:21 AM 632841 synced recovery +DEBUG 4/21/2026, 11:02:24 AM 636080 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:24 AM 636081 synced recovery +DEBUG 4/21/2026, 11:02:27 AM 638708 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:27 AM 638711 synced recovery +DEBUG 4/21/2026, 11:02:34 AM 645513 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:34 AM 645515 synced recovery +DEBUG 4/21/2026, 11:02:36 AM 648250 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:36 AM 648253 synced recovery +DEBUG 4/21/2026, 11:02:38 AM 649481 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:38 AM 649482 synced recovery +DEBUG 4/21/2026, 11:02:39 AM 651038 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:39 AM 651041 synced recovery +DEBUG 4/21/2026, 11:02:40 AM 652088 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:40 AM 652090 synced recovery +DEBUG 4/21/2026, 11:02:42 AM 653564 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:42 AM 653567 synced recovery +DEBUG 4/21/2026, 11:02:45 AM 657045 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:45 AM 657047 synced recovery +DEBUG 4/21/2026, 11:02:47 AM 659230 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:47 AM 659232 synced recovery +DEBUG 4/21/2026, 11:02:50 AM 662159 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:50 AM 662162 synced recovery +DEBUG 4/21/2026, 11:02:57 AM 668385 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:57 AM 668386 synced recovery +DEBUG 4/21/2026, 11:02:59 AM 671335 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:02:59 AM 671336 synced recovery +DEBUG 4/21/2026, 11:03:01 AM 672945 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:03:01 AM 672946 synced recovery +DEBUG 4/21/2026, 11:03:03 AM 675318 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:03:03 AM 675319 synced recovery +DEBUG 4/21/2026, 11:03:08 AM 679986 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:03:08 AM 679987 synced recovery +DEBUG 4/21/2026, 11:03:11 AM 682475 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:03:11 AM 682476 synced recovery +DEBUG 4/21/2026, 11:03:12 AM 684315 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:03:12 AM 684316 synced recovery +DEBUG 4/21/2026, 11:03:15 AM 687145 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:03:15 AM 687148 synced recovery +DEBUG 4/21/2026, 11:03:19 AM 690943 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:03:19 AM 690945 synced recovery +DEBUG 4/21/2026, 11:03:20 AM 692283 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:03:20 AM 692285 synced recovery +DEBUG 4/21/2026, 11:03:22 AM 694289 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:03:22 AM 694290 synced recovery +DEBUG 4/21/2026, 11:03:24 AM 695355 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:03:24 AM 695358 synced recovery +DEBUG 4/21/2026, 11:03:28 AM 699691 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:03:28 AM 699693 synced recovery +DEBUG 4/21/2026, 11:03:32 AM 703867 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:03:32 AM 703870 synced recovery +DEBUG 4/21/2026, 11:03:34 AM 705935 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:03:34 AM 705936 synced recovery +DEBUG 4/21/2026, 11:03:40 AM 711596 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:03:40 AM 711599 synced recovery +DEBUG 4/21/2026, 11:03:44 AM 716160 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:03:44 AM 716162 synced recovery +DEBUG 4/21/2026, 11:03:47 AM 719291 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:03:47 AM 719292 synced recovery +DEBUG 4/21/2026, 11:05:05 AM 796729 execForAll +INFO 4/21/2026, 11:05:05 AM 796730 File.option.customFontSize=12 +DEBUG 4/21/2026, 11:05:05 AM 796731 execForAll +INFO 4/21/2026, 11:05:05 AM 796731 document.body.parentElement.style.fontSize = '12px' +DEBUG 4/21/2026, 11:05:06 AM 798231 execForAll +INFO 4/21/2026, 11:05:06 AM 798231 File.option.useCustomFontSize=false +DEBUG 4/21/2026, 11:05:06 AM 798232 execForAll +INFO 4/21/2026, 11:05:06 AM 798232 document.body.parentElement.style.fontSize = '' +DEBUG 4/21/2026, 11:05:33 AM 824434 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:05:33 AM 824435 synced recovery +DEBUG 4/21/2026, 11:05:35 AM 826481 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:05:35 AM 826482 synced recovery +DEBUG 4/21/2026, 11:05:37 AM 829058 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:05:37 AM 829060 synced recovery +DEBUG 4/21/2026, 11:05:44 AM 835599 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:05:44 AM 835600 synced recovery +DEBUG 4/21/2026, 11:05:52 AM 843667 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:05:52 AM 843668 synced recovery +DEBUG 4/21/2026, 11:05:57 AM 848885 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:05:57 AM 848887 synced recovery +DEBUG 4/21/2026, 11:06:02 AM 853730 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:06:02 AM 853732 synced recovery +DEBUG 4/21/2026, 11:06:19 AM 870521 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:06:19 AM 870523 synced recovery +DEBUG 4/21/2026, 11:06:20 AM 871920 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:06:20 AM 871925 synced recovery +DEBUG 4/21/2026, 11:06:21 AM 872957 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:06:21 AM 872958 synced recovery +DEBUG 4/21/2026, 11:06:23 AM 874740 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:06:23 AM 874741 synced recovery +DEBUG 4/21/2026, 11:06:28 AM 879657 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:06:28 AM 879660 synced recovery +DEBUG 4/21/2026, 11:06:30 AM 882159 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:06:30 AM 882161 synced recovery +DEBUG 4/21/2026, 11:06:32 AM 883950 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:06:32 AM 883952 synced recovery +DEBUG 4/21/2026, 11:06:45 AM 897258 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:06:45 AM 897259 synced recovery +DEBUG 4/21/2026, 11:06:47 AM 898775 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:06:47 AM 898776 synced recovery +DEBUG 4/21/2026, 11:06:48 AM 899968 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:06:48 AM 899970 synced recovery +DEBUG 4/21/2026, 11:06:49 AM 901042 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:06:49 AM 901044 synced recovery +DEBUG 4/21/2026, 11:06:50 AM 902269 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:06:50 AM 902270 synced recovery +DEBUG 4/21/2026, 11:06:54 AM 906075 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:06:54 AM 906077 synced recovery +DEBUG 4/21/2026, 11:06:57 AM 909334 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:06:57 AM 909335 synced recovery +DEBUG 4/21/2026, 11:06:59 AM 910955 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:06:59 AM 910957 synced recovery +DEBUG 4/21/2026, 11:07:00 AM 912134 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:07:00 AM 912136 synced recovery +DEBUG 4/21/2026, 11:07:01 AM 913197 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:07:01 AM 913199 synced recovery +INFO 4/21/2026, 11:07:09 AM 920420 [blur] 1 +INFO 4/21/2026, 11:07:09 AM 920421 [win] blur +INFO 4/21/2026, 11:15:35 AM 1426404 [focus] 1 +INFO 4/21/2026, 11:15:36 AM 1427984 [blur] 1 +INFO 4/21/2026, 11:15:36 AM 1427984 [win] blur +INFO 4/21/2026, 11:16:01 AM 1452483 [focus] 1 +DEBUG 4/21/2026, 11:16:03 AM 1454981 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:16:03 AM 1454983 synced recovery +DEBUG 4/21/2026, 11:16:05 AM 1457204 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:16:05 AM 1457205 synced recovery +DEBUG 4/21/2026, 11:16:07 AM 1458655 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:16:07 AM 1458658 synced recovery +DEBUG 4/21/2026, 11:16:09 AM 1461135 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:16:09 AM 1461137 synced recovery +DEBUG 4/21/2026, 11:16:11 AM 1462738 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:16:11 AM 1462739 synced recovery +DEBUG 4/21/2026, 11:16:20 AM 1472338 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:16:20 AM 1472339 synced recovery +DEBUG 4/21/2026, 11:16:24 AM 1475839 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:16:24 AM 1475840 synced recovery +DEBUG 4/21/2026, 11:16:32 AM 1484082 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:16:32 AM 1484083 synced recovery +DEBUG 4/21/2026, 11:16:36 AM 1488026 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:16:36 AM 1488028 synced recovery +DEBUG 4/21/2026, 11:16:37 AM 1489288 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:16:37 AM 1489291 synced recovery +DEBUG 4/21/2026, 11:16:39 AM 1490403 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:16:39 AM 1490405 synced recovery +DEBUG 4/21/2026, 11:16:42 AM 1493919 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:16:42 AM 1493920 synced recovery +DEBUG 4/21/2026, 11:16:45 AM 1496574 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:16:45 AM 1496576 synced recovery +DEBUG 4/21/2026, 11:16:46 AM 1498259 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:16:46 AM 1498260 synced recovery +DEBUG 4/21/2026, 11:16:47 AM 1499342 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:16:47 AM 1499343 synced recovery +DEBUG 4/21/2026, 11:16:53 AM 1504738 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:16:53 AM 1504740 synced recovery +DEBUG 4/21/2026, 11:16:55 AM 1507313 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:16:55 AM 1507315 synced recovery +DEBUG 4/21/2026, 11:17:04 AM 1515460 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:04 AM 1515461 synced recovery +DEBUG 4/21/2026, 11:17:06 AM 1517394 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:06 AM 1517395 synced recovery +DEBUG 4/21/2026, 11:17:08 AM 1519733 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:08 AM 1519734 synced recovery +DEBUG 4/21/2026, 11:17:09 AM 1521312 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:09 AM 1521313 synced recovery +DEBUG 4/21/2026, 11:17:11 AM 1523244 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:11 AM 1523246 synced recovery +DEBUG 4/21/2026, 11:17:14 AM 1525695 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:14 AM 1525696 synced recovery +DEBUG 4/21/2026, 11:17:16 AM 1527966 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:16 AM 1527967 synced recovery +DEBUG 4/21/2026, 11:17:19 AM 1530946 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:19 AM 1530948 synced recovery +DEBUG 4/21/2026, 11:17:23 AM 1534376 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:23 AM 1534379 synced recovery +DEBUG 4/21/2026, 11:17:25 AM 1537149 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:25 AM 1537151 synced recovery +DEBUG 4/21/2026, 11:17:27 AM 1538371 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:27 AM 1538372 synced recovery +DEBUG 4/21/2026, 11:17:31 AM 1543194 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:31 AM 1543197 synced recovery +DEBUG 4/21/2026, 11:17:34 AM 1546163 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:34 AM 1546164 synced recovery +DEBUG 4/21/2026, 11:17:37 AM 1549267 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:37 AM 1549269 synced recovery +DEBUG 4/21/2026, 11:17:44 AM 1555899 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:44 AM 1555901 synced recovery +DEBUG 4/21/2026, 11:17:46 AM 1558090 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:46 AM 1558091 synced recovery +DEBUG 4/21/2026, 11:17:49 AM 1561004 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:49 AM 1561005 synced recovery +DEBUG 4/21/2026, 11:17:51 AM 1562699 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:51 AM 1562700 synced recovery +DEBUG 4/21/2026, 11:17:54 AM 1565675 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:54 AM 1565676 synced recovery +DEBUG 4/21/2026, 11:17:55 AM 1566874 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:55 AM 1566875 synced recovery +DEBUG 4/21/2026, 11:17:57 AM 1568415 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:17:57 AM 1568416 synced recovery +DEBUG 4/21/2026, 11:18:01 AM 1573162 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:18:01 AM 1573164 synced recovery +DEBUG 4/21/2026, 11:18:05 AM 1576525 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:18:05 AM 1576527 synced recovery +DEBUG 4/21/2026, 11:18:10 AM 1581740 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:18:10 AM 1581741 synced recovery +DEBUG 4/21/2026, 11:18:13 AM 1584758 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:18:13 AM 1584759 synced recovery +DEBUG 4/21/2026, 11:18:17 AM 1588681 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:18:17 AM 1588683 synced recovery +DEBUG 4/21/2026, 11:18:21 AM 1592858 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:18:21 AM 1592859 synced recovery +DEBUG 4/21/2026, 11:18:36 AM 1607710 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:18:36 AM 1607711 synced recovery +DEBUG 4/21/2026, 11:18:39 AM 1611295 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:18:39 AM 1611297 synced recovery +DEBUG 4/21/2026, 11:18:41 AM 1613063 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:18:41 AM 1613064 synced recovery +DEBUG 4/21/2026, 11:18:44 AM 1616087 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:18:44 AM 1616088 synced recovery +DEBUG 4/21/2026, 11:18:48 AM 1619879 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:18:48 AM 1619881 synced recovery +DEBUG 4/21/2026, 11:18:52 AM 1623948 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:18:52 AM 1623950 synced recovery +DEBUG 4/21/2026, 11:18:54 AM 1625798 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:18:54 AM 1625799 synced recovery +DEBUG 4/21/2026, 11:18:58 AM 1629916 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:18:58 AM 1629917 synced recovery +DEBUG 4/21/2026, 11:19:01 AM 1632751 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:01 AM 1632753 synced recovery +DEBUG 4/21/2026, 11:19:02 AM 1634082 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:02 AM 1634084 synced recovery +DEBUG 4/21/2026, 11:19:05 AM 1636481 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:05 AM 1636482 synced recovery +DEBUG 4/21/2026, 11:19:06 AM 1637999 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:06 AM 1638000 synced recovery +DEBUG 4/21/2026, 11:19:13 AM 1644659 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:13 AM 1644661 synced recovery +DEBUG 4/21/2026, 11:19:14 AM 1645711 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:14 AM 1645714 synced recovery +DEBUG 4/21/2026, 11:19:15 AM 1646802 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:15 AM 1646804 synced recovery +DEBUG 4/21/2026, 11:19:16 AM 1648109 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:16 AM 1648110 synced recovery +DEBUG 4/21/2026, 11:19:18 AM 1649765 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:18 AM 1649767 synced recovery +DEBUG 4/21/2026, 11:19:20 AM 1651952 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:20 AM 1651954 synced recovery +DEBUG 4/21/2026, 11:19:21 AM 1653070 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:21 AM 1653071 synced recovery +DEBUG 4/21/2026, 11:19:22 AM 1654253 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:22 AM 1654257 synced recovery +DEBUG 4/21/2026, 11:19:25 AM 1656536 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:25 AM 1656539 synced recovery +INFO 4/21/2026, 11:19:33 AM 1664833 [blur] 1 +INFO 4/21/2026, 11:19:33 AM 1664833 [win] blur +INFO 4/21/2026, 11:19:45 AM 1676556 [focus] 1 +DEBUG 4/21/2026, 11:19:48 AM 1679904 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:48 AM 1679906 synced recovery +DEBUG 4/21/2026, 11:19:49 AM 1680936 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:49 AM 1680938 synced recovery +DEBUG 4/21/2026, 11:19:50 AM 1682017 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:50 AM 1682018 synced recovery +DEBUG 4/21/2026, 11:19:55 AM 1686496 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:55 AM 1686497 synced recovery +DEBUG 4/21/2026, 11:19:56 AM 1687625 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:56 AM 1687626 synced recovery +DEBUG 4/21/2026, 11:19:58 AM 1690059 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:58 AM 1690060 synced recovery +DEBUG 4/21/2026, 11:19:59 AM 1691223 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:19:59 AM 1691225 synced recovery +DEBUG 4/21/2026, 11:20:03 AM 1694728 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:03 AM 1694765 synced recovery +DEBUG 4/21/2026, 11:20:04 AM 1695881 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:04 AM 1695882 synced recovery +DEBUG 4/21/2026, 11:20:06 AM 1698207 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:06 AM 1698210 synced recovery +DEBUG 4/21/2026, 11:20:09 AM 1700626 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:09 AM 1700627 synced recovery +DEBUG 4/21/2026, 11:20:11 AM 1702917 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:11 AM 1702919 synced recovery +DEBUG 4/21/2026, 11:20:12 AM 1704124 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:12 AM 1704125 synced recovery +DEBUG 4/21/2026, 11:20:14 AM 1705585 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:14 AM 1705586 synced recovery +DEBUG 4/21/2026, 11:20:18 AM 1709967 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:18 AM 1709970 synced recovery +DEBUG 4/21/2026, 11:20:22 AM 1714282 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:22 AM 1714284 synced recovery +DEBUG 4/21/2026, 11:20:28 AM 1720056 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:28 AM 1720057 synced recovery +DEBUG 4/21/2026, 11:20:30 AM 1721922 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:30 AM 1721923 synced recovery +DEBUG 4/21/2026, 11:20:32 AM 1723749 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:32 AM 1723751 synced recovery +DEBUG 4/21/2026, 11:20:37 AM 1728898 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:37 AM 1728900 synced recovery +DEBUG 4/21/2026, 11:20:40 AM 1731487 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:40 AM 1731489 synced recovery +DEBUG 4/21/2026, 11:20:43 AM 1734957 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:43 AM 1734960 synced recovery +DEBUG 4/21/2026, 11:20:44 AM 1736254 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:44 AM 1736256 synced recovery +DEBUG 4/21/2026, 11:20:47 AM 1738432 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:47 AM 1738433 synced recovery +DEBUG 4/21/2026, 11:20:49 AM 1740889 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:49 AM 1740891 synced recovery +DEBUG 4/21/2026, 11:20:50 AM 1742053 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:50 AM 1742054 synced recovery +DEBUG 4/21/2026, 11:20:52 AM 1744109 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:20:52 AM 1744110 synced recovery +DEBUG 4/21/2026, 11:21:03 AM 1754983 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:21:03 AM 1754986 synced recovery +DEBUG 4/21/2026, 11:21:05 AM 1756779 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:21:05 AM 1756780 synced recovery +DEBUG 4/21/2026, 11:21:08 AM 1760221 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:21:08 AM 1760223 synced recovery +DEBUG 4/21/2026, 11:21:11 AM 1763332 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:21:11 AM 1763334 synced recovery +DEBUG 4/21/2026, 11:21:14 AM 1766007 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:21:14 AM 1766009 synced recovery +DEBUG 4/21/2026, 11:21:16 AM 1767794 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:21:16 AM 1767796 synced recovery +DEBUG 4/21/2026, 11:21:21 AM 1772727 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:21:21 AM 1772729 synced recovery +DEBUG 4/21/2026, 11:21:23 AM 1775233 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:21:23 AM 1775235 synced recovery +DEBUG 4/21/2026, 11:21:25 AM 1776453 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:21:25 AM 1776455 synced recovery +DEBUG 4/21/2026, 11:21:33 AM 1784495 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:21:33 AM 1784497 synced recovery +DEBUG 4/21/2026, 11:21:36 AM 1787776 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:21:36 AM 1787777 synced recovery +DEBUG 4/21/2026, 11:21:38 AM 1790218 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:21:38 AM 1790219 synced recovery +DEBUG 4/21/2026, 11:21:44 AM 1795660 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:21:44 AM 1795661 synced recovery +DEBUG 4/21/2026, 11:21:49 AM 1801059 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:21:49 AM 1801060 synced recovery +DEBUG 4/21/2026, 11:21:53 AM 1804846 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:21:53 AM 1804848 synced recovery +DEBUG 4/21/2026, 11:21:57 AM 1809262 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:21:57 AM 1809264 synced recovery +DEBUG 4/21/2026, 11:21:59 AM 1811270 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:21:59 AM 1811271 synced recovery +DEBUG 4/21/2026, 11:22:01 AM 1812435 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:01 AM 1812437 synced recovery +DEBUG 4/21/2026, 11:22:07 AM 1819010 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:07 AM 1819011 synced recovery +DEBUG 4/21/2026, 11:22:12 AM 1823548 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:12 AM 1823549 synced recovery +DEBUG 4/21/2026, 11:22:20 AM 1831408 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:20 AM 1831410 synced recovery +DEBUG 4/21/2026, 11:22:24 AM 1835458 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:24 AM 1835460 synced recovery +DEBUG 4/21/2026, 11:22:26 AM 1837856 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:26 AM 1837857 synced recovery +DEBUG 4/21/2026, 11:22:28 AM 1839560 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:28 AM 1839562 synced recovery +DEBUG 4/21/2026, 11:22:29 AM 1840880 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:29 AM 1840882 synced recovery +DEBUG 4/21/2026, 11:22:33 AM 1844807 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:33 AM 1844808 synced recovery +DEBUG 4/21/2026, 11:22:35 AM 1846406 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:35 AM 1846407 synced recovery +DEBUG 4/21/2026, 11:22:38 AM 1849707 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:38 AM 1849709 synced recovery +DEBUG 4/21/2026, 11:22:40 AM 1852241 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:40 AM 1852242 synced recovery +DEBUG 4/21/2026, 11:22:42 AM 1854321 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:42 AM 1854323 synced recovery +DEBUG 4/21/2026, 11:22:44 AM 1855639 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:44 AM 1855641 synced recovery +DEBUG 4/21/2026, 11:22:45 AM 1856884 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:45 AM 1856886 synced recovery +DEBUG 4/21/2026, 11:22:47 AM 1858813 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:47 AM 1858815 synced recovery +DEBUG 4/21/2026, 11:22:49 AM 1860541 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:49 AM 1860543 synced recovery +DEBUG 4/21/2026, 11:22:51 AM 1862620 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:51 AM 1862621 synced recovery +DEBUG 4/21/2026, 11:22:55 AM 1867045 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:55 AM 1867047 synced recovery +DEBUG 4/21/2026, 11:22:57 AM 1868580 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:57 AM 1868583 synced recovery +DEBUG 4/21/2026, 11:22:59 AM 1870412 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:22:59 AM 1870414 synced recovery +DEBUG 4/21/2026, 11:23:00 AM 1872084 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:23:00 AM 1872086 synced recovery +DEBUG 4/21/2026, 11:23:02 AM 1874084 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:23:02 AM 1874085 synced recovery +DEBUG 4/21/2026, 11:23:09 AM 1880675 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:23:09 AM 1880676 synced recovery +DEBUG 4/21/2026, 11:23:10 AM 1882251 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:23:10 AM 1882252 synced recovery +DEBUG 4/21/2026, 11:23:13 AM 1885228 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:23:13 AM 1885231 synced recovery +DEBUG 4/21/2026, 11:23:14 AM 1886330 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:23:14 AM 1886331 synced recovery +DEBUG 4/21/2026, 11:23:19 AM 1890994 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:23:19 AM 1890995 synced recovery +DEBUG 4/21/2026, 11:23:36 AM 1907859 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:23:36 AM 1907861 synced recovery +DEBUG 4/21/2026, 11:23:38 AM 1909466 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:23:38 AM 1909467 synced recovery +DEBUG 4/21/2026, 11:23:40 AM 1911780 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:23:40 AM 1911781 synced recovery +DEBUG 4/21/2026, 11:23:58 AM 1929856 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:23:58 AM 1929860 synced recovery +DEBUG 4/21/2026, 11:24:06 AM 1937414 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:06 AM 1937416 synced recovery +DEBUG 4/21/2026, 11:24:09 AM 1941076 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:09 AM 1941077 synced recovery +DEBUG 4/21/2026, 11:24:12 AM 1943380 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:12 AM 1943381 synced recovery +DEBUG 4/21/2026, 11:24:24 AM 1956056 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:24 AM 1956057 synced recovery +DEBUG 4/21/2026, 11:24:25 AM 1957153 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:25 AM 1957155 synced recovery +INFO 4/21/2026, 11:24:27 AM 1958712 [blur] 1 +INFO 4/21/2026, 11:24:27 AM 1958712 [win] blur +INFO 4/21/2026, 11:24:30 AM 1962158 [focus] 1 +DEBUG 4/21/2026, 11:24:34 AM 1965362 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:34 AM 1965364 synced recovery +DEBUG 4/21/2026, 11:24:35 AM 1967028 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:35 AM 1967030 synced recovery +DEBUG 4/21/2026, 11:24:40 AM 1971393 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:40 AM 1971395 synced recovery +DEBUG 4/21/2026, 11:24:41 AM 1972726 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:41 AM 1972728 synced recovery +DEBUG 4/21/2026, 11:24:44 AM 1975410 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:44 AM 1975411 synced recovery +DEBUG 4/21/2026, 11:24:45 AM 1977071 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:45 AM 1977072 synced recovery +DEBUG 4/21/2026, 11:24:46 AM 1978266 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:46 AM 1978268 synced recovery +DEBUG 4/21/2026, 11:24:48 AM 1979798 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:48 AM 1979800 synced recovery +DEBUG 4/21/2026, 11:24:50 AM 1981755 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:50 AM 1981756 synced recovery +DEBUG 4/21/2026, 11:24:52 AM 1983521 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:52 AM 1983522 synced recovery +DEBUG 4/21/2026, 11:24:55 AM 1987337 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:55 AM 1987339 synced recovery +DEBUG 4/21/2026, 11:24:57 AM 1988471 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:57 AM 1988472 synced recovery +DEBUG 4/21/2026, 11:24:59 AM 1990623 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:24:59 AM 1990624 synced recovery +DEBUG 4/21/2026, 11:25:37 AM 2028687 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:25:37 AM 2028688 synced recovery +DEBUG 4/21/2026, 11:25:41 AM 2032674 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:25:41 AM 2032675 synced recovery +DEBUG 4/21/2026, 11:25:42 AM 2033814 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:25:42 AM 2033816 synced recovery +DEBUG 4/21/2026, 11:25:43 AM 2035215 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:25:43 AM 2035217 synced recovery +DEBUG 4/21/2026, 11:25:44 AM 2036344 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:25:44 AM 2036346 synced recovery +DEBUG 4/21/2026, 11:25:48 AM 2039400 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:25:48 AM 2039401 synced recovery +INFO 4/21/2026, 11:25:49 AM 2040420 [blur] 1 +INFO 4/21/2026, 11:25:49 AM 2040420 [win] blur +INFO 4/21/2026, 11:26:13 AM 2065140 [focus] 1 +DEBUG 4/21/2026, 11:26:18 AM 2069587 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:26:18 AM 2069588 synced recovery +DEBUG 4/21/2026, 11:26:19 AM 2071268 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:26:19 AM 2071272 synced recovery +DEBUG 4/21/2026, 11:26:24 AM 2076262 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:26:24 AM 2076263 synced recovery +DEBUG 4/21/2026, 11:26:25 AM 2077349 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:26:26 AM 2077350 synced recovery +DEBUG 4/21/2026, 11:26:27 AM 2078562 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:26:27 AM 2078565 synced recovery +DEBUG 4/21/2026, 11:26:29 AM 2080597 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:26:29 AM 2080598 synced recovery +DEBUG 4/21/2026, 11:26:31 AM 2082670 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:26:31 AM 2082671 synced recovery +INFO 4/21/2026, 11:26:34 AM 2085869 [blur] 1 +INFO 4/21/2026, 11:26:34 AM 2085869 [win] blur +INFO 4/21/2026, 11:26:48 AM 2100251 [focus] 1 +DEBUG 4/21/2026, 11:26:51 AM 2102991 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:26:51 AM 2102992 synced recovery +DEBUG 4/21/2026, 11:26:52 AM 2104147 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:26:52 AM 2104149 synced recovery +DEBUG 4/21/2026, 11:26:53 AM 2105213 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:26:53 AM 2105216 synced recovery +DEBUG 4/21/2026, 11:26:55 AM 2106469 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:26:55 AM 2106471 synced recovery +DEBUG 4/21/2026, 11:26:59 AM 2110765 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:26:59 AM 2110767 synced recovery +DEBUG 4/21/2026, 11:27:01 AM 2112641 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:01 AM 2112642 synced recovery +DEBUG 4/21/2026, 11:27:04 AM 2115543 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:04 AM 2115544 synced recovery +DEBUG 4/21/2026, 11:27:06 AM 2117372 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:06 AM 2117373 synced recovery +DEBUG 4/21/2026, 11:27:07 AM 2118578 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:07 AM 2118579 synced recovery +DEBUG 4/21/2026, 11:27:08 AM 2119701 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:08 AM 2119703 synced recovery +DEBUG 4/21/2026, 11:27:12 AM 2123632 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:12 AM 2123633 synced recovery +DEBUG 4/21/2026, 11:27:31 AM 2143109 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:31 AM 2143110 synced recovery +DEBUG 4/21/2026, 11:27:37 AM 2148629 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:37 AM 2148636 synced recovery +DEBUG 4/21/2026, 11:27:38 AM 2150234 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:38 AM 2150235 synced recovery +DEBUG 4/21/2026, 11:27:40 AM 2151392 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:40 AM 2151394 synced recovery +DEBUG 4/21/2026, 11:27:44 AM 2155874 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:44 AM 2155877 synced recovery +DEBUG 4/21/2026, 11:27:46 AM 2158026 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:46 AM 2158027 synced recovery +DEBUG 4/21/2026, 11:27:48 AM 2159812 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:48 AM 2159813 synced recovery +DEBUG 4/21/2026, 11:27:49 AM 2161271 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:49 AM 2161272 synced recovery +DEBUG 4/21/2026, 11:27:51 AM 2162420 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:51 AM 2162421 synced recovery +DEBUG 4/21/2026, 11:27:52 AM 2163566 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:52 AM 2163569 synced recovery +DEBUG 4/21/2026, 11:27:53 AM 2164763 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:53 AM 2164765 synced recovery +DEBUG 4/21/2026, 11:27:57 AM 2168759 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:27:57 AM 2168762 synced recovery +DEBUG 4/21/2026, 11:28:00 AM 2172044 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:28:00 AM 2172045 synced recovery +DEBUG 4/21/2026, 11:28:04 AM 2175979 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:28:04 AM 2175981 synced recovery +DEBUG 4/21/2026, 11:28:06 AM 2177610 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:28:06 AM 2177611 synced recovery +DEBUG 4/21/2026, 11:28:07 AM 2178872 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:28:07 AM 2178873 synced recovery +DEBUG 4/21/2026, 11:28:11 AM 2182651 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:28:11 AM 2182652 synced recovery +DEBUG 4/21/2026, 11:28:12 AM 2183906 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:28:12 AM 2183907 synced recovery +DEBUG 4/21/2026, 11:28:16 AM 2187904 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:28:16 AM 2187906 synced recovery +DEBUG 4/21/2026, 11:28:26 AM 2198259 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:28:26 AM 2198261 synced recovery +DEBUG 4/21/2026, 11:28:32 AM 2204315 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:28:32 AM 2204317 synced recovery +DEBUG 4/21/2026, 11:28:34 AM 2205851 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:28:34 AM 2205854 synced recovery +DEBUG 4/21/2026, 11:28:38 AM 2209768 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:28:38 AM 2209769 synced recovery +DEBUG 4/21/2026, 11:28:50 AM 2222093 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:28:50 AM 2222095 synced recovery +DEBUG 4/21/2026, 11:28:52 AM 2223920 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:28:52 AM 2223924 synced recovery +INFO 4/21/2026, 11:28:53 AM 2225030 [blur] 1 +INFO 4/21/2026, 11:28:53 AM 2225032 [win] blur +INFO 4/21/2026, 11:29:29 AM 2260983 [focus] 1 +INFO 4/21/2026, 11:29:31 AM 2263012 [blur] 1 +INFO 4/21/2026, 11:29:31 AM 2263012 [win] blur +INFO 4/21/2026, 11:29:44 AM 2275914 [focus] 1 +DEBUG 4/21/2026, 11:29:54 AM 2286144 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:29:54 AM 2286202 synced recovery +DEBUG 4/21/2026, 11:29:56 AM 2287552 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:29:56 AM 2287553 synced recovery +DEBUG 4/21/2026, 11:29:58 AM 2289743 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:29:58 AM 2289744 synced recovery +DEBUG 4/21/2026, 11:30:01 AM 2292453 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:01 AM 2292454 synced recovery +DEBUG 4/21/2026, 11:30:02 AM 2293908 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:02 AM 2293909 synced recovery +DEBUG 4/21/2026, 11:30:05 AM 2296664 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:05 AM 2296666 synced recovery +DEBUG 4/21/2026, 11:30:09 AM 2300570 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:09 AM 2300571 synced recovery +DEBUG 4/21/2026, 11:30:11 AM 2302399 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:11 AM 2302401 synced recovery +DEBUG 4/21/2026, 11:30:12 AM 2303728 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:12 AM 2303729 synced recovery +DEBUG 4/21/2026, 11:30:14 AM 2306193 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:14 AM 2306194 synced recovery +DEBUG 4/21/2026, 11:30:16 AM 2308207 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:16 AM 2308209 synced recovery +DEBUG 4/21/2026, 11:30:19 AM 2311166 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:19 AM 2311168 synced recovery +DEBUG 4/21/2026, 11:30:31 AM 2322777 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:31 AM 2322779 synced recovery +DEBUG 4/21/2026, 11:30:32 AM 2324077 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:32 AM 2324079 synced recovery +DEBUG 4/21/2026, 11:30:35 AM 2326428 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:35 AM 2326429 synced recovery +INFO 4/21/2026, 11:30:36 AM 2327799 [blur] 1 +INFO 4/21/2026, 11:30:36 AM 2327799 [win] blur +INFO 4/21/2026, 11:30:39 AM 2331347 [focus] 1 +DEBUG 4/21/2026, 11:30:44 AM 2336070 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:44 AM 2336071 synced recovery +DEBUG 4/21/2026, 11:30:46 AM 2337471 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:46 AM 2337472 synced recovery +DEBUG 4/21/2026, 11:30:52 AM 2344249 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:52 AM 2344254 synced recovery +DEBUG 4/21/2026, 11:30:56 AM 2347653 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:56 AM 2347654 synced recovery +DEBUG 4/21/2026, 11:30:57 AM 2348835 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:57 AM 2348838 synced recovery +DEBUG 4/21/2026, 11:30:59 AM 2350365 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:30:59 AM 2350366 synced recovery +DEBUG 4/21/2026, 11:31:01 AM 2352601 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:31:01 AM 2352603 synced recovery +DEBUG 4/21/2026, 11:31:02 AM 2354168 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:31:02 AM 2354171 synced recovery +DEBUG 4/21/2026, 11:31:05 AM 2356666 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:31:05 AM 2356668 synced recovery +DEBUG 4/21/2026, 11:31:12 AM 2364091 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:31:12 AM 2364092 synced recovery +DEBUG 4/21/2026, 11:31:14 AM 2365632 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:31:14 AM 2365634 synced recovery +DEBUG 4/21/2026, 11:31:16 AM 2367385 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:31:16 AM 2367386 synced recovery +DEBUG 4/21/2026, 11:31:17 AM 2368515 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:31:17 AM 2368517 synced recovery +DEBUG 4/21/2026, 11:31:21 AM 2372362 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:31:21 AM 2372363 synced recovery +DEBUG 4/21/2026, 11:31:24 AM 2376326 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:31:24 AM 2376327 synced recovery +DEBUG 4/21/2026, 11:31:26 AM 2377523 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:31:26 AM 2377524 synced recovery +DEBUG 4/21/2026, 11:31:27 AM 2379099 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:31:27 AM 2379100 synced recovery +DEBUG 4/21/2026, 11:31:32 AM 2383632 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:31:32 AM 2383633 synced recovery +DEBUG 4/21/2026, 11:31:39 AM 2390431 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:31:39 AM 2390433 synced recovery +DEBUG 4/21/2026, 11:31:44 AM 2395787 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:31:44 AM 2395788 synced recovery +DEBUG 4/21/2026, 11:32:06 AM 2418064 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:32:06 AM 2418069 synced recovery +DEBUG 4/21/2026, 11:32:10 AM 2421679 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:32:10 AM 2421682 synced recovery +DEBUG 4/21/2026, 11:32:14 AM 2425886 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:32:14 AM 2425887 synced recovery +DEBUG 4/21/2026, 11:32:16 AM 2427930 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:32:16 AM 2427931 synced recovery +DEBUG 4/21/2026, 11:32:19 AM 2430632 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:32:19 AM 2430633 synced recovery +DEBUG 4/21/2026, 11:32:25 AM 2436625 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:32:25 AM 2436630 synced recovery +DEBUG 4/21/2026, 11:32:27 AM 2438749 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:32:27 AM 2438751 synced recovery +DEBUG 4/21/2026, 11:32:28 AM 2439817 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:32:28 AM 2439818 synced recovery +DEBUG 4/21/2026, 11:32:30 AM 2442076 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:32:30 AM 2442077 synced recovery +DEBUG 4/21/2026, 11:32:32 AM 2443946 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:32:32 AM 2443947 synced recovery +INFO 4/21/2026, 11:32:37 AM 2448688 [blur] 1 +INFO 4/21/2026, 11:32:37 AM 2448688 [win] blur +INFO 4/21/2026, 11:32:37 AM 2448744 [focus] 1 +INFO 4/21/2026, 11:32:37 AM 2449234 [blur] 1 +INFO 4/21/2026, 11:32:37 AM 2449234 [win] blur +INFO 4/21/2026, 11:33:12 AM 2484236 [focus] 1 +DEBUG 4/21/2026, 11:33:28 AM 2500179 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:33:28 AM 2500238 synced recovery +DEBUG 4/21/2026, 11:33:31 AM 2502993 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:33:31 AM 2502995 synced recovery +DEBUG 4/21/2026, 11:33:39 AM 2510986 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:33:39 AM 2510988 synced recovery +INFO 4/21/2026, 11:33:56 AM 2528205 [blur] 1 +INFO 4/21/2026, 11:33:56 AM 2528205 [win] blur +INFO 4/21/2026, 11:34:15 AM 2546896 [focus] 1 +DEBUG 4/21/2026, 11:34:18 AM 2549731 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:34:18 AM 2549732 synced recovery +DEBUG 4/21/2026, 11:34:19 AM 2551128 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:34:19 AM 2551130 synced recovery +DEBUG 4/21/2026, 11:34:20 AM 2552264 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:34:20 AM 2552266 synced recovery +DEBUG 4/21/2026, 11:34:26 AM 2557792 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:34:26 AM 2557794 synced recovery +INFO 4/21/2026, 11:34:31 AM 2563167 [blur] 1 +INFO 4/21/2026, 11:34:31 AM 2563167 [win] blur +INFO 4/21/2026, 11:34:32 AM 2563776 [focus] 1 +INFO 4/21/2026, 11:34:32 AM 2564207 [blur] 1 +INFO 4/21/2026, 11:34:32 AM 2564207 [win] blur +INFO 4/21/2026, 11:36:18 AM 2670210 [focus] 1 +DEBUG 4/21/2026, 11:36:23 AM 2674934 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:23 AM 2674936 synced recovery +DEBUG 4/21/2026, 11:36:25 AM 2677019 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:25 AM 2677020 synced recovery +DEBUG 4/21/2026, 11:36:29 AM 2681147 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:29 AM 2681148 synced recovery +DEBUG 4/21/2026, 11:36:30 AM 2682248 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:30 AM 2682250 synced recovery +DEBUG 4/21/2026, 11:36:32 AM 2683405 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:32 AM 2683406 synced recovery +DEBUG 4/21/2026, 11:36:33 AM 2684541 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:33 AM 2684543 synced recovery +DEBUG 4/21/2026, 11:36:34 AM 2685703 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:34 AM 2685705 synced recovery +DEBUG 4/21/2026, 11:36:36 AM 2687509 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:36 AM 2687510 synced recovery +DEBUG 4/21/2026, 11:36:37 AM 2688567 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:37 AM 2688569 synced recovery +DEBUG 4/21/2026, 11:36:38 AM 2690273 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:38 AM 2690275 synced recovery +DEBUG 4/21/2026, 11:36:40 AM 2691484 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:40 AM 2691485 synced recovery +DEBUG 4/21/2026, 11:36:43 AM 2694893 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:43 AM 2694895 synced recovery +DEBUG 4/21/2026, 11:36:45 AM 2697122 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:45 AM 2697124 synced recovery +DEBUG 4/21/2026, 11:36:48 AM 2699780 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:48 AM 2699782 synced recovery +DEBUG 4/21/2026, 11:36:50 AM 2701999 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:50 AM 2702000 synced recovery +DEBUG 4/21/2026, 11:36:51 AM 2703162 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:51 AM 2703164 synced recovery +DEBUG 4/21/2026, 11:36:53 AM 2705151 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:53 AM 2705152 synced recovery +DEBUG 4/21/2026, 11:36:57 AM 2709055 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:57 AM 2709056 synced recovery +DEBUG 4/21/2026, 11:36:59 AM 2710760 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:36:59 AM 2710761 synced recovery +DEBUG 4/21/2026, 11:37:02 AM 2713852 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:37:02 AM 2713854 synced recovery +DEBUG 4/21/2026, 11:37:04 AM 2715834 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:37:04 AM 2715835 synced recovery +INFO 4/21/2026, 11:37:08 AM 2720096 [blur] 1 +INFO 4/21/2026, 11:37:08 AM 2720096 [win] blur +INFO 4/21/2026, 11:37:10 AM 2721408 [focus] 1 +DEBUG 4/21/2026, 11:37:15 AM 2726669 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:37:15 AM 2726672 synced recovery +INFO 4/21/2026, 11:37:32 AM 2743828 [blur] 1 +INFO 4/21/2026, 11:37:32 AM 2743828 [win] blur +INFO 4/21/2026, 11:37:34 AM 2746266 [focus] 1 +DEBUG 4/21/2026, 11:37:48 AM 2759969 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:37:48 AM 2759970 synced recovery +DEBUG 4/21/2026, 11:37:49 AM 2761091 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:37:49 AM 2761093 synced recovery +DEBUG 4/21/2026, 11:37:53 AM 2764492 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:37:53 AM 2764493 synced recovery +DEBUG 4/21/2026, 11:37:54 AM 2765995 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:37:54 AM 2765996 synced recovery +DEBUG 4/21/2026, 11:37:57 AM 2769335 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:37:57 AM 2769338 synced recovery +DEBUG 4/21/2026, 11:37:59 AM 2770977 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:37:59 AM 2770979 synced recovery +DEBUG 4/21/2026, 11:38:02 AM 2773523 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:38:02 AM 2773524 synced recovery +DEBUG 4/21/2026, 11:38:04 AM 2776147 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:38:04 AM 2776148 synced recovery +DEBUG 4/21/2026, 11:38:05 AM 2777281 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:38:05 AM 2777282 synced recovery +DEBUG 4/21/2026, 11:38:08 AM 2779410 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:38:08 AM 2779411 synced recovery +DEBUG 4/21/2026, 11:38:12 AM 2783556 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:38:12 AM 2783557 synced recovery +DEBUG 4/21/2026, 11:38:13 AM 2784657 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:38:13 AM 2784658 synced recovery +DEBUG 4/21/2026, 11:38:14 AM 2786344 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:38:14 AM 2786345 synced recovery +DEBUG 4/21/2026, 11:38:16 AM 2787490 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:38:16 AM 2787491 synced recovery +DEBUG 4/21/2026, 11:38:25 AM 2796813 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:38:25 AM 2796817 synced recovery +DEBUG 4/21/2026, 11:38:30 AM 2801476 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:38:30 AM 2801477 synced recovery +DEBUG 4/21/2026, 11:38:32 AM 2803767 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:38:32 AM 2803770 synced recovery +INFO 4/21/2026, 11:38:33 AM 2804745 [blur] 1 +INFO 4/21/2026, 11:38:33 AM 2804745 [win] blur +INFO 4/21/2026, 11:38:34 AM 2805635 [focus] 1 +INFO 4/21/2026, 11:38:34 AM 2806153 [blur] 1 +INFO 4/21/2026, 11:38:34 AM 2806153 [win] blur +INFO 4/21/2026, 11:38:53 AM 2824976 [focus] 1 +DEBUG 4/21/2026, 11:38:55 AM 2826907 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:38:55 AM 2826910 synced recovery +DEBUG 4/21/2026, 11:39:00 AM 2832101 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:39:00 AM 2832102 synced recovery +DEBUG 4/21/2026, 11:39:03 AM 2834378 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:39:03 AM 2834380 synced recovery +DEBUG 4/21/2026, 11:39:04 AM 2836015 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:39:04 AM 2836017 synced recovery +DEBUG 4/21/2026, 11:39:08 AM 2839439 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:39:08 AM 2839443 synced recovery +DEBUG 4/21/2026, 11:39:19 AM 2851014 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:39:19 AM 2851016 synced recovery +DEBUG 4/21/2026, 11:39:28 AM 2859865 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:39:28 AM 2859866 synced recovery +DEBUG 4/21/2026, 11:39:30 AM 2861605 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:39:30 AM 2861608 synced recovery +DEBUG 4/21/2026, 11:39:31 AM 2862986 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:39:31 AM 2862988 synced recovery +DEBUG 4/21/2026, 11:39:37 AM 2868472 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:39:37 AM 2868475 synced recovery +DEBUG 4/21/2026, 11:39:40 AM 2872177 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:39:40 AM 2872179 synced recovery +DEBUG 4/21/2026, 11:39:43 AM 2874964 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:39:43 AM 2874965 synced recovery +DEBUG 4/21/2026, 11:39:45 AM 2876542 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:39:45 AM 2876544 synced recovery +DEBUG 4/21/2026, 11:39:46 AM 2877784 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:39:46 AM 2877786 synced recovery +DEBUG 4/21/2026, 11:39:47 AM 2878852 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:39:47 AM 2878856 synced recovery +DEBUG 4/21/2026, 11:39:49 AM 2880928 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:39:49 AM 2880932 synced recovery +DEBUG 4/21/2026, 11:39:51 AM 2882406 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:39:51 AM 2882408 synced recovery +DEBUG 4/21/2026, 11:39:55 AM 2886436 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:39:55 AM 2886438 synced recovery +DEBUG 4/21/2026, 11:40:01 AM 2892566 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:01 AM 2892569 synced recovery +DEBUG 4/21/2026, 11:40:03 AM 2894419 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:03 AM 2894421 synced recovery +DEBUG 4/21/2026, 11:40:04 AM 2895495 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:04 AM 2895496 synced recovery +DEBUG 4/21/2026, 11:40:05 AM 2896848 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:05 AM 2896849 synced recovery +DEBUG 4/21/2026, 11:40:07 AM 2899201 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:07 AM 2899202 synced recovery +DEBUG 4/21/2026, 11:40:09 AM 2901223 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:09 AM 2901225 synced recovery +DEBUG 4/21/2026, 11:40:10 AM 2902269 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:10 AM 2902271 synced recovery +DEBUG 4/21/2026, 11:40:12 AM 2903411 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:12 AM 2903412 synced recovery +DEBUG 4/21/2026, 11:40:15 AM 2906382 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:15 AM 2906383 synced recovery +DEBUG 4/21/2026, 11:40:18 AM 2909943 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:18 AM 2909944 synced recovery +DEBUG 4/21/2026, 11:40:22 AM 2913700 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:22 AM 2913701 synced recovery +DEBUG 4/21/2026, 11:40:23 AM 2915326 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:23 AM 2915327 synced recovery +DEBUG 4/21/2026, 11:40:25 AM 2916605 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:25 AM 2916606 synced recovery +DEBUG 4/21/2026, 11:40:29 AM 2921005 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:29 AM 2921006 synced recovery +DEBUG 4/21/2026, 11:40:34 AM 2926012 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:34 AM 2926013 synced recovery +DEBUG 4/21/2026, 11:40:37 AM 2928795 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:37 AM 2928797 synced recovery +DEBUG 4/21/2026, 11:40:38 AM 2929902 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:38 AM 2929903 synced recovery +DEBUG 4/21/2026, 11:40:39 AM 2930995 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:39 AM 2930997 synced recovery +DEBUG 4/21/2026, 11:40:41 AM 2932987 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:41 AM 2932992 synced recovery +DEBUG 4/21/2026, 11:40:43 AM 2935191 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:43 AM 2935192 synced recovery +DEBUG 4/21/2026, 11:40:45 AM 2936837 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:45 AM 2936840 synced recovery +DEBUG 4/21/2026, 11:40:49 AM 2941251 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:49 AM 2941252 synced recovery +DEBUG 4/21/2026, 11:40:56 AM 2947964 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:56 AM 2947966 synced recovery +DEBUG 4/21/2026, 11:40:58 AM 2949460 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:40:58 AM 2949463 synced recovery +DEBUG 4/21/2026, 11:41:01 AM 2952860 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:01 AM 2952862 synced recovery +DEBUG 4/21/2026, 11:41:03 AM 2954946 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:03 AM 2954948 synced recovery +DEBUG 4/21/2026, 11:41:04 AM 2956206 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:04 AM 2956208 synced recovery +DEBUG 4/21/2026, 11:41:09 AM 2960583 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:09 AM 2960584 synced recovery +DEBUG 4/21/2026, 11:41:11 AM 2963071 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:11 AM 2963072 synced recovery +DEBUG 4/21/2026, 11:41:14 AM 2965935 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:14 AM 2965936 synced recovery +DEBUG 4/21/2026, 11:41:22 AM 2973540 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:22 AM 2973541 synced recovery +DEBUG 4/21/2026, 11:41:26 AM 2977877 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:26 AM 2977878 synced recovery +DEBUG 4/21/2026, 11:41:27 AM 2979005 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:27 AM 2979006 synced recovery +DEBUG 4/21/2026, 11:41:28 AM 2980080 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:28 AM 2980082 synced recovery +DEBUG 4/21/2026, 11:41:32 AM 2984011 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:32 AM 2984013 synced recovery +DEBUG 4/21/2026, 11:41:34 AM 2985988 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:34 AM 2985989 synced recovery +DEBUG 4/21/2026, 11:41:36 AM 2988347 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:37 AM 2988350 synced recovery +DEBUG 4/21/2026, 11:41:41 AM 2992623 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:41 AM 2992624 synced recovery +DEBUG 4/21/2026, 11:41:43 AM 2994420 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:43 AM 2994422 synced recovery +DEBUG 4/21/2026, 11:41:44 AM 2995777 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:44 AM 2995779 synced recovery +DEBUG 4/21/2026, 11:41:47 AM 2998848 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:47 AM 2998850 synced recovery +DEBUG 4/21/2026, 11:41:49 AM 3001183 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:49 AM 3001184 synced recovery +DEBUG 4/21/2026, 11:41:51 AM 3002728 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:51 AM 3002730 synced recovery +DEBUG 4/21/2026, 11:41:53 AM 3005282 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:53 AM 3005283 synced recovery +DEBUG 4/21/2026, 11:41:58 AM 3009898 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:41:58 AM 3009900 synced recovery +DEBUG 4/21/2026, 11:42:02 AM 3013707 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:02 AM 3013708 synced recovery +DEBUG 4/21/2026, 11:42:04 AM 3016127 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:04 AM 3016128 synced recovery +DEBUG 4/21/2026, 11:42:07 AM 3018585 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:07 AM 3018587 synced recovery +DEBUG 4/21/2026, 11:42:08 AM 3020257 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:08 AM 3020258 synced recovery +DEBUG 4/21/2026, 11:42:10 AM 3022180 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:10 AM 3022182 synced recovery +DEBUG 4/21/2026, 11:42:11 AM 3023262 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:11 AM 3023264 synced recovery +DEBUG 4/21/2026, 11:42:12 AM 3024344 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:12 AM 3024345 synced recovery +DEBUG 4/21/2026, 11:42:16 AM 3028215 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:16 AM 3028216 synced recovery +DEBUG 4/21/2026, 11:42:18 AM 3029367 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:18 AM 3029368 synced recovery +DEBUG 4/21/2026, 11:42:20 AM 3032171 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:20 AM 3032172 synced recovery +DEBUG 4/21/2026, 11:42:22 AM 3033687 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:22 AM 3033689 synced recovery +DEBUG 4/21/2026, 11:42:24 AM 3035874 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:24 AM 3035876 synced recovery +DEBUG 4/21/2026, 11:42:27 AM 3038543 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:27 AM 3038544 synced recovery +DEBUG 4/21/2026, 11:42:29 AM 3041131 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:29 AM 3041133 synced recovery +INFO 4/21/2026, 11:42:34 AM 3046106 [blur] 1 +INFO 4/21/2026, 11:42:34 AM 3046107 [win] blur +INFO 4/21/2026, 11:42:40 AM 3051966 [focus] 1 +DEBUG 4/21/2026, 11:42:42 AM 3054296 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:42 AM 3054297 synced recovery +DEBUG 4/21/2026, 11:42:44 AM 3055976 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:44 AM 3055977 synced recovery +DEBUG 4/21/2026, 11:42:48 AM 3060045 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:48 AM 3060047 synced recovery +DEBUG 4/21/2026, 11:42:52 AM 3064213 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:52 AM 3064215 synced recovery +DEBUG 4/21/2026, 11:42:55 AM 3067040 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:55 AM 3067041 synced recovery +DEBUG 4/21/2026, 11:42:58 AM 3070159 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:42:58 AM 3070162 synced recovery +DEBUG 4/21/2026, 11:43:02 AM 3073622 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:43:02 AM 3073624 synced recovery +DEBUG 4/21/2026, 11:43:03 AM 3075061 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:43:03 AM 3075063 synced recovery +DEBUG 4/21/2026, 11:43:08 AM 3079988 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:43:08 AM 3079989 synced recovery +DEBUG 4/21/2026, 11:43:13 AM 3084809 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:43:13 AM 3084810 synced recovery +DEBUG 4/21/2026, 11:43:15 AM 3086881 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:43:15 AM 3086883 synced recovery +DEBUG 4/21/2026, 11:43:16 AM 3088031 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:43:16 AM 3088032 synced recovery +DEBUG 4/21/2026, 11:43:23 AM 3094972 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:43:23 AM 3094974 synced recovery +DEBUG 4/21/2026, 11:43:25 AM 3097146 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:43:25 AM 3097150 synced recovery +DEBUG 4/21/2026, 11:45:10 AM 3201446 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:45:10 AM 3201448 synced recovery +DEBUG 4/21/2026, 11:45:14 AM 3206017 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:45:14 AM 3206019 synced recovery +DEBUG 4/21/2026, 11:45:15 AM 3207196 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:45:15 AM 3207198 synced recovery +DEBUG 4/21/2026, 11:45:16 AM 3208305 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:45:16 AM 3208306 synced recovery +DEBUG 4/21/2026, 11:45:18 AM 3209574 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:45:18 AM 3209577 synced recovery +DEBUG 4/21/2026, 11:45:19 AM 3210861 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:45:19 AM 3210864 synced recovery +DEBUG 4/21/2026, 11:45:21 AM 3212754 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:45:21 AM 3212755 synced recovery +INFO 4/21/2026, 11:45:25 AM 3216747 [blur] 1 +INFO 4/21/2026, 11:45:25 AM 3216747 [win] blur +INFO 4/21/2026, 11:45:26 AM 3217876 [focus] 1 +DEBUG 4/21/2026, 11:45:29 AM 3220932 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:45:29 AM 3220933 synced recovery +INFO 4/21/2026, 11:45:44 AM 3235867 [blur] 1 +INFO 4/21/2026, 11:45:44 AM 3235867 [win] blur +INFO 4/21/2026, 11:45:49 AM 3241210 [focus] 1 +DEBUG 4/21/2026, 11:45:53 AM 3245027 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:45:53 AM 3245028 synced recovery +DEBUG 4/21/2026, 11:45:55 AM 3246443 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:45:55 AM 3246444 synced recovery +DEBUG 4/21/2026, 11:45:56 AM 3248130 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:45:56 AM 3248132 synced recovery +DEBUG 4/21/2026, 11:45:58 AM 3249937 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:45:58 AM 3249939 synced recovery +DEBUG 4/21/2026, 11:46:01 AM 3252556 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:01 AM 3252561 synced recovery +DEBUG 4/21/2026, 11:46:02 AM 3253974 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:02 AM 3253976 synced recovery +DEBUG 4/21/2026, 11:46:03 AM 3255161 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:03 AM 3255163 synced recovery +DEBUG 4/21/2026, 11:46:04 AM 3256287 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:04 AM 3256289 synced recovery +DEBUG 4/21/2026, 11:46:06 AM 3257359 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:06 AM 3257360 synced recovery +DEBUG 4/21/2026, 11:46:10 AM 3261873 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:10 AM 3261876 synced recovery +DEBUG 4/21/2026, 11:46:13 AM 3264632 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:13 AM 3264633 synced recovery +DEBUG 4/21/2026, 11:46:16 AM 3267830 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:16 AM 3267831 synced recovery +DEBUG 4/21/2026, 11:46:21 AM 3272821 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:21 AM 3272822 synced recovery +INFO 4/21/2026, 11:46:21 AM 3273291 [blur] 1 +INFO 4/21/2026, 11:46:21 AM 3273291 [win] blur +INFO 4/21/2026, 11:46:37 AM 3288620 [focus] 1 +DEBUG 4/21/2026, 11:46:39 AM 3291018 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:39 AM 3291020 synced recovery +DEBUG 4/21/2026, 11:46:40 AM 3292086 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:40 AM 3292087 synced recovery +DEBUG 4/21/2026, 11:46:41 AM 3293197 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:41 AM 3293198 synced recovery +DEBUG 4/21/2026, 11:46:43 AM 3295298 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:43 AM 3295299 synced recovery +DEBUG 4/21/2026, 11:46:45 AM 3297107 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:45 AM 3297109 synced recovery +DEBUG 4/21/2026, 11:46:46 AM 3298200 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:46 AM 3298201 synced recovery +DEBUG 4/21/2026, 11:46:48 AM 3299755 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:48 AM 3299757 synced recovery +DEBUG 4/21/2026, 11:46:50 AM 3301456 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:50 AM 3301458 synced recovery +DEBUG 4/21/2026, 11:46:51 AM 3302981 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:51 AM 3302993 synced recovery +DEBUG 4/21/2026, 11:46:53 AM 3304844 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:53 AM 3304846 synced recovery +DEBUG 4/21/2026, 11:46:54 AM 3305952 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:54 AM 3305955 synced recovery +DEBUG 4/21/2026, 11:46:56 AM 3307378 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:46:56 AM 3307379 synced recovery +DEBUG 4/21/2026, 11:47:00 AM 3312130 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:00 AM 3312131 synced recovery +DEBUG 4/21/2026, 11:47:01 AM 3313213 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:01 AM 3313214 synced recovery +DEBUG 4/21/2026, 11:47:03 AM 3314559 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:03 AM 3314560 synced recovery +DEBUG 4/21/2026, 11:47:04 AM 3315835 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:04 AM 3315838 synced recovery +DEBUG 4/21/2026, 11:47:09 AM 3320831 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:09 AM 3320833 synced recovery +DEBUG 4/21/2026, 11:47:10 AM 3321915 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:10 AM 3321916 synced recovery +DEBUG 4/21/2026, 11:47:11 AM 3323094 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:11 AM 3323095 synced recovery +DEBUG 4/21/2026, 11:47:15 AM 3327275 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:15 AM 3327276 synced recovery +DEBUG 4/21/2026, 11:47:17 AM 3328406 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:17 AM 3328407 synced recovery +DEBUG 4/21/2026, 11:47:20 AM 3332223 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:20 AM 3332225 synced recovery +DEBUG 4/21/2026, 11:47:26 AM 3337619 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:26 AM 3337620 synced recovery +DEBUG 4/21/2026, 11:47:28 AM 3339405 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:28 AM 3339406 synced recovery +DEBUG 4/21/2026, 11:47:32 AM 3343684 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:32 AM 3343685 synced recovery +DEBUG 4/21/2026, 11:47:33 AM 3345195 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:33 AM 3345197 synced recovery +DEBUG 4/21/2026, 11:47:34 AM 3346310 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:34 AM 3346311 synced recovery +DEBUG 4/21/2026, 11:47:36 AM 3347498 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:36 AM 3347500 synced recovery +DEBUG 4/21/2026, 11:47:45 AM 3356670 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:45 AM 3356671 synced recovery +DEBUG 4/21/2026, 11:47:46 AM 3357768 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:46 AM 3357769 synced recovery +DEBUG 4/21/2026, 11:47:50 AM 3362326 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:47:50 AM 3362327 synced recovery +DEBUG 4/21/2026, 11:48:00 AM 3371630 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:00 AM 3371631 synced recovery +DEBUG 4/21/2026, 11:48:01 AM 3372806 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:01 AM 3372807 synced recovery +DEBUG 4/21/2026, 11:48:02 AM 3373869 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:02 AM 3373870 synced recovery +DEBUG 4/21/2026, 11:48:04 AM 3375867 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:04 AM 3375868 synced recovery +DEBUG 4/21/2026, 11:48:05 AM 3377295 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:05 AM 3377296 synced recovery +DEBUG 4/21/2026, 11:48:07 AM 3378516 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:07 AM 3378517 synced recovery +DEBUG 4/21/2026, 11:48:08 AM 3379751 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:08 AM 3379752 synced recovery +DEBUG 4/21/2026, 11:48:20 AM 3391913 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:20 AM 3391914 synced recovery +DEBUG 4/21/2026, 11:48:25 AM 3396462 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:25 AM 3396463 synced recovery +DEBUG 4/21/2026, 11:48:26 AM 3397517 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:26 AM 3397520 synced recovery +DEBUG 4/21/2026, 11:48:27 AM 3398761 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:27 AM 3398762 synced recovery +DEBUG 4/21/2026, 11:48:28 AM 3399913 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:28 AM 3399914 synced recovery +DEBUG 4/21/2026, 11:48:30 AM 3401846 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:30 AM 3401847 synced recovery +DEBUG 4/21/2026, 11:48:32 AM 3404304 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:32 AM 3404306 synced recovery +DEBUG 4/21/2026, 11:48:35 AM 3406441 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:35 AM 3406442 synced recovery +DEBUG 4/21/2026, 11:48:36 AM 3407500 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:36 AM 3407502 synced recovery +DEBUG 4/21/2026, 11:48:37 AM 3408570 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:37 AM 3408572 synced recovery +DEBUG 4/21/2026, 11:48:38 AM 3409866 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:38 AM 3409868 synced recovery +DEBUG 4/21/2026, 11:48:40 AM 3411923 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:40 AM 3411925 synced recovery +DEBUG 4/21/2026, 11:48:41 AM 3412991 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:41 AM 3412992 synced recovery +DEBUG 4/21/2026, 11:48:44 AM 3415914 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:44 AM 3415916 synced recovery +DEBUG 4/21/2026, 11:48:46 AM 3418198 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:46 AM 3418199 synced recovery +DEBUG 4/21/2026, 11:48:47 AM 3419320 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:47 AM 3419323 synced recovery +DEBUG 4/21/2026, 11:48:52 AM 3423962 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:52 AM 3423964 synced recovery +DEBUG 4/21/2026, 11:48:53 AM 3425005 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:53 AM 3425008 synced recovery +DEBUG 4/21/2026, 11:48:56 AM 3427590 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:56 AM 3427591 synced recovery +DEBUG 4/21/2026, 11:48:58 AM 3429754 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:58 AM 3429756 synced recovery +DEBUG 4/21/2026, 11:48:59 AM 3431119 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:48:59 AM 3431120 synced recovery +DEBUG 4/21/2026, 11:49:00 AM 3432247 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:00 AM 3432248 synced recovery +DEBUG 4/21/2026, 11:49:02 AM 3433391 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:02 AM 3433394 synced recovery +DEBUG 4/21/2026, 11:49:15 AM 3447287 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:15 AM 3447288 synced recovery +DEBUG 4/21/2026, 11:49:16 AM 3448329 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:16 AM 3448331 synced recovery +DEBUG 4/21/2026, 11:49:18 AM 3449452 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:18 AM 3449454 synced recovery +INFO 4/21/2026, 11:49:19 AM 3450767 [blur] 1 +INFO 4/21/2026, 11:49:19 AM 3450767 [win] blur +INFO 4/21/2026, 11:49:22 AM 3453680 [focus] 1 +DEBUG 4/21/2026, 11:49:29 AM 3460502 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:29 AM 3460503 synced recovery +DEBUG 4/21/2026, 11:49:30 AM 3461581 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:30 AM 3461582 synced recovery +DEBUG 4/21/2026, 11:49:31 AM 3463140 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:31 AM 3463141 synced recovery +DEBUG 4/21/2026, 11:49:32 AM 3464267 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:32 AM 3464268 synced recovery +DEBUG 4/21/2026, 11:49:35 AM 3466701 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:35 AM 3466702 synced recovery +DEBUG 4/21/2026, 11:49:37 AM 3468573 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:37 AM 3468574 synced recovery +DEBUG 4/21/2026, 11:49:38 AM 3469657 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:38 AM 3469659 synced recovery +DEBUG 4/21/2026, 11:49:43 AM 3475284 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:43 AM 3475285 synced recovery +DEBUG 4/21/2026, 11:49:45 AM 3477261 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:45 AM 3477263 synced recovery +DEBUG 4/21/2026, 11:49:47 AM 3478604 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:47 AM 3478606 synced recovery +DEBUG 4/21/2026, 11:49:50 AM 3481644 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:50 AM 3481645 synced recovery +DEBUG 4/21/2026, 11:49:51 AM 3482765 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:51 AM 3482766 synced recovery +DEBUG 4/21/2026, 11:49:56 AM 3487569 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:56 AM 3487570 synced recovery +DEBUG 4/21/2026, 11:49:58 AM 3490314 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:49:58 AM 3490315 synced recovery +DEBUG 4/21/2026, 11:50:01 AM 3492393 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:50:01 AM 3492394 synced recovery +DEBUG 4/21/2026, 11:50:07 AM 3498915 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:50:07 AM 3498918 synced recovery +DEBUG 4/21/2026, 11:50:09 AM 3500853 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:50:09 AM 3500855 synced recovery +DEBUG 4/21/2026, 11:50:12 AM 3504288 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:50:12 AM 3504289 synced recovery +DEBUG 4/21/2026, 11:50:14 AM 3505448 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:50:14 AM 3505449 synced recovery +DEBUG 4/21/2026, 11:50:23 AM 3514545 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:50:23 AM 3514547 synced recovery +DEBUG 4/21/2026, 11:50:25 AM 3516991 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:50:25 AM 3516992 synced recovery +DEBUG 4/21/2026, 11:50:28 AM 3519679 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:50:28 AM 3519681 synced recovery +DEBUG 4/21/2026, 11:50:29 AM 3521212 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:50:29 AM 3521214 synced recovery +DEBUG 4/21/2026, 11:50:47 AM 3539117 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:50:47 AM 3539119 synced recovery +DEBUG 4/21/2026, 11:50:48 AM 3540300 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:50:48 AM 3540304 synced recovery +DEBUG 4/21/2026, 11:50:50 AM 3542246 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:50:50 AM 3542248 synced recovery +DEBUG 4/21/2026, 11:50:53 AM 3544359 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:50:53 AM 3544361 synced recovery +INFO 4/21/2026, 11:51:39 AM 3590486 [blur] 1 +INFO 4/21/2026, 11:51:39 AM 3590486 [win] blur +INFO 4/21/2026, 11:51:44 AM 3595405 [focus] 1 +DEBUG 4/21/2026, 11:51:47 AM 3599135 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:51:47 AM 3599136 synced recovery +DEBUG 4/21/2026, 11:51:48 AM 3600327 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:51:48 AM 3600328 synced recovery +DEBUG 4/21/2026, 11:51:50 AM 3602283 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:51:50 AM 3602284 synced recovery +DEBUG 4/21/2026, 11:51:53 AM 3604707 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:51:53 AM 3604710 synced recovery +DEBUG 4/21/2026, 11:51:55 AM 3606991 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:51:55 AM 3606992 synced recovery +DEBUG 4/21/2026, 11:51:56 AM 3608156 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:51:56 AM 3608158 synced recovery +DEBUG 4/21/2026, 11:51:57 AM 3609208 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:51:57 AM 3609209 synced recovery +DEBUG 4/21/2026, 11:51:58 AM 3610260 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:51:58 AM 3610262 synced recovery +DEBUG 4/21/2026, 11:52:00 AM 3612287 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:00 AM 3612289 synced recovery +DEBUG 4/21/2026, 11:52:01 AM 3613309 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:01 AM 3613310 synced recovery +DEBUG 4/21/2026, 11:52:03 AM 3614615 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:03 AM 3614617 synced recovery +DEBUG 4/21/2026, 11:52:05 AM 3617037 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:05 AM 3617038 synced recovery +DEBUG 4/21/2026, 11:52:06 AM 3618219 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:06 AM 3618220 synced recovery +DEBUG 4/21/2026, 11:52:07 AM 3619261 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:07 AM 3619263 synced recovery +DEBUG 4/21/2026, 11:52:09 AM 3620352 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:09 AM 3620353 synced recovery +DEBUG 4/21/2026, 11:52:10 AM 3621434 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:10 AM 3621435 synced recovery +DEBUG 4/21/2026, 11:52:12 AM 3623897 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:12 AM 3623898 synced recovery +DEBUG 4/21/2026, 11:52:14 AM 3625874 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:14 AM 3625875 synced recovery +DEBUG 4/21/2026, 11:52:16 AM 3628127 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:16 AM 3628129 synced recovery +DEBUG 4/21/2026, 11:52:17 AM 3629255 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:17 AM 3629256 synced recovery +DEBUG 4/21/2026, 11:52:18 AM 3630320 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:18 AM 3630322 synced recovery +DEBUG 4/21/2026, 11:52:24 AM 3635788 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:24 AM 3635790 synced recovery +DEBUG 4/21/2026, 11:52:26 AM 3637930 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:26 AM 3637931 synced recovery +DEBUG 4/21/2026, 11:52:27 AM 3639025 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:27 AM 3639027 synced recovery +DEBUG 4/21/2026, 11:52:28 AM 3640095 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:28 AM 3640097 synced recovery +DEBUG 4/21/2026, 11:52:31 AM 3642748 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:31 AM 3642749 synced recovery +DEBUG 4/21/2026, 11:52:35 AM 3646781 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:35 AM 3646782 synced recovery +DEBUG 4/21/2026, 11:52:36 AM 3647873 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:36 AM 3647874 synced recovery +DEBUG 4/21/2026, 11:52:39 AM 3650355 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:39 AM 3650358 synced recovery +DEBUG 4/21/2026, 11:52:40 AM 3651775 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:40 AM 3651778 synced recovery +DEBUG 4/21/2026, 11:52:45 AM 3656615 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:45 AM 3656617 synced recovery +DEBUG 4/21/2026, 11:52:46 AM 3657924 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:46 AM 3657926 synced recovery +DEBUG 4/21/2026, 11:52:51 AM 3662900 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:51 AM 3662901 synced recovery +DEBUG 4/21/2026, 11:52:54 AM 3665909 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:54 AM 3665911 synced recovery +DEBUG 4/21/2026, 11:52:56 AM 3667490 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:56 AM 3667491 synced recovery +DEBUG 4/21/2026, 11:52:57 AM 3669030 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:52:57 AM 3669032 synced recovery +DEBUG 4/21/2026, 11:53:01 AM 3672666 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:01 AM 3672667 synced recovery +DEBUG 4/21/2026, 11:53:06 AM 3678045 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:06 AM 3678046 synced recovery +DEBUG 4/21/2026, 11:53:08 AM 3679987 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:08 AM 3679990 synced recovery +DEBUG 4/21/2026, 11:53:10 AM 3682286 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:10 AM 3682287 synced recovery +DEBUG 4/21/2026, 11:53:12 AM 3683397 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:12 AM 3683399 synced recovery +DEBUG 4/21/2026, 11:53:13 AM 3684459 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:13 AM 3684460 synced recovery +DEBUG 4/21/2026, 11:53:15 AM 3686459 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:15 AM 3686460 synced recovery +DEBUG 4/21/2026, 11:53:19 AM 3690714 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:19 AM 3690716 synced recovery +DEBUG 4/21/2026, 11:53:22 AM 3693777 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:22 AM 3693779 synced recovery +DEBUG 4/21/2026, 11:53:24 AM 3695432 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:24 AM 3695433 synced recovery +DEBUG 4/21/2026, 11:53:25 AM 3696619 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:25 AM 3696620 synced recovery +DEBUG 4/21/2026, 11:53:26 AM 3697729 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:26 AM 3697730 synced recovery +DEBUG 4/21/2026, 11:53:30 AM 3701842 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:30 AM 3701843 synced recovery +DEBUG 4/21/2026, 11:53:31 AM 3702973 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:31 AM 3702974 synced recovery +DEBUG 4/21/2026, 11:53:50 AM 3721889 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:50 AM 3721890 synced recovery +DEBUG 4/21/2026, 11:53:56 AM 3727405 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:56 AM 3727407 synced recovery +DEBUG 4/21/2026, 11:53:57 AM 3728554 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:57 AM 3728555 synced recovery +DEBUG 4/21/2026, 11:53:59 AM 3730602 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:53:59 AM 3730604 synced recovery +DEBUG 4/21/2026, 11:54:01 AM 3732835 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:54:01 AM 3732837 synced recovery +DEBUG 4/21/2026, 11:54:05 AM 3736855 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:54:05 AM 3736857 synced recovery +INFO 4/21/2026, 11:56:49 AM 3900591 [blur] 1 +INFO 4/21/2026, 11:56:49 AM 3900591 [win] blur +INFO 4/21/2026, 11:56:52 AM 3904346 [focus] 1 +INFO 4/21/2026, 11:57:14 AM 3926297 [blur] 1 +INFO 4/21/2026, 11:57:14 AM 3926297 [win] blur +INFO 4/21/2026, 11:57:36 AM 3947984 [focus] 1 +INFO 4/21/2026, 11:57:41 AM 3953323 [blur] 1 +INFO 4/21/2026, 11:57:41 AM 3953323 [win] blur +DEBUG 4/21/2026, 11:57:42 AM 3953433 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:57:42 AM 3953436 synced recovery +INFO 4/21/2026, 11:57:43 AM 3954892 [focus] 1 +DEBUG 4/21/2026, 11:57:45 AM 3957032 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:57:45 AM 3957034 synced recovery +DEBUG 4/21/2026, 11:57:46 AM 3958121 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:57:46 AM 3958124 synced recovery +DEBUG 4/21/2026, 11:57:52 AM 3964315 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:57:52 AM 3964319 synced recovery +DEBUG 4/21/2026, 11:57:55 AM 3967095 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:57:55 AM 3967098 synced recovery +DEBUG 4/21/2026, 11:58:02 AM 3974200 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:58:02 AM 3974202 synced recovery +DEBUG 4/21/2026, 11:58:04 AM 3975990 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:58:04 AM 3975991 synced recovery +DEBUG 4/21/2026, 11:58:06 AM 3977419 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:58:06 AM 3977423 synced recovery +DEBUG 4/21/2026, 11:58:08 AM 3979942 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:58:08 AM 3979944 synced recovery +DEBUG 4/21/2026, 11:58:13 AM 3984830 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:58:13 AM 3984831 synced recovery +DEBUG 4/21/2026, 11:58:17 AM 3989120 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:58:17 AM 3989122 synced recovery +DEBUG 4/21/2026, 11:58:22 AM 3993902 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:58:22 AM 3993903 synced recovery +DEBUG 4/21/2026, 11:58:25 AM 3996607 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:58:25 AM 3996608 synced recovery +DEBUG 4/21/2026, 11:58:33 AM 4004520 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:58:33 AM 4004522 synced recovery +DEBUG 4/21/2026, 11:58:35 AM 4006584 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:58:35 AM 4006585 synced recovery +DEBUG 4/21/2026, 11:58:36 AM 4008009 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:58:36 AM 4008043 synced recovery +DEBUG 4/21/2026, 11:58:40 AM 4011515 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:58:40 AM 4011517 synced recovery +DEBUG 4/21/2026, 11:58:44 AM 4015645 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:58:44 AM 4015647 synced recovery +DEBUG 4/21/2026, 11:58:46 AM 4017918 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:58:46 AM 4017919 synced recovery +DEBUG 4/21/2026, 11:58:52 AM 4023464 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:58:52 AM 4023467 synced recovery +DEBUG 4/21/2026, 11:58:58 AM 4029774 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:58:58 AM 4029776 synced recovery +DEBUG 4/21/2026, 11:59:00 AM 4031599 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:59:00 AM 4031600 synced recovery +DEBUG 4/21/2026, 11:59:10 AM 4042342 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:59:10 AM 4042343 synced recovery +DEBUG 4/21/2026, 11:59:15 AM 4046799 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:59:15 AM 4046800 synced recovery +INFO 4/21/2026, 11:59:17 AM 4048872 [blur] 1 +INFO 4/21/2026, 11:59:17 AM 4048873 [win] blur +INFO 4/21/2026, 11:59:18 AM 4050066 [focus] 1 +DEBUG 4/21/2026, 11:59:25 AM 4056693 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:59:25 AM 4056694 synced recovery +DEBUG 4/21/2026, 11:59:26 AM 4058131 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:59:26 AM 4058132 synced recovery +DEBUG 4/21/2026, 11:59:30 AM 4061717 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:59:30 AM 4061718 synced recovery +DEBUG 4/21/2026, 11:59:31 AM 4062974 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:59:31 AM 4062978 synced recovery +DEBUG 4/21/2026, 11:59:37 AM 4068961 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:59:37 AM 4068963 synced recovery +DEBUG 4/21/2026, 11:59:38 AM 4070118 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:59:38 AM 4070120 synced recovery +DEBUG 4/21/2026, 11:59:41 AM 4073272 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:59:41 AM 4073274 synced recovery +DEBUG 4/21/2026, 11:59:44 AM 4075465 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:59:44 AM 4075467 synced recovery +INFO 4/21/2026, 11:59:46 AM 4078296 [blur] 1 +INFO 4/21/2026, 11:59:46 AM 4078298 [win] blur +DEBUG 4/21/2026, 11:59:47 AM 4078380 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 11:59:47 AM 4078383 synced recovery +INFO 4/21/2026, 11:59:51 AM 4083315 [focus] 1 +DEBUG 4/21/2026, 12:00:00 PM 4091354 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:00 PM 4091356 synced recovery +DEBUG 4/21/2026, 12:00:01 PM 4093330 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:01 PM 4093333 synced recovery +DEBUG 4/21/2026, 12:00:04 PM 4096181 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:04 PM 4096183 synced recovery +DEBUG 4/21/2026, 12:00:06 PM 4097839 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:06 PM 4097840 synced recovery +DEBUG 4/21/2026, 12:00:07 PM 4099132 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:07 PM 4099134 synced recovery +DEBUG 4/21/2026, 12:00:11 PM 4103078 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:11 PM 4103079 synced recovery +DEBUG 4/21/2026, 12:00:15 PM 4106427 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:15 PM 4106428 synced recovery +DEBUG 4/21/2026, 12:00:16 PM 4108085 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:16 PM 4108086 synced recovery +DEBUG 4/21/2026, 12:00:19 PM 4110443 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:19 PM 4110445 synced recovery +DEBUG 4/21/2026, 12:00:20 PM 4111605 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:20 PM 4111606 synced recovery +DEBUG 4/21/2026, 12:00:26 PM 4118029 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:26 PM 4118031 synced recovery +DEBUG 4/21/2026, 12:00:29 PM 4120443 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:29 PM 4120444 synced recovery +DEBUG 4/21/2026, 12:00:32 PM 4123594 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:32 PM 4123596 synced recovery +DEBUG 4/21/2026, 12:00:35 PM 4127233 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:35 PM 4127234 synced recovery +DEBUG 4/21/2026, 12:00:38 PM 4129482 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:38 PM 4129484 synced recovery +DEBUG 4/21/2026, 12:00:41 PM 4132834 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:41 PM 4132836 synced recovery +DEBUG 4/21/2026, 12:00:42 PM 4134319 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:42 PM 4134321 synced recovery +DEBUG 4/21/2026, 12:00:48 PM 4139690 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:48 PM 4139694 synced recovery +DEBUG 4/21/2026, 12:00:49 PM 4141164 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:49 PM 4141166 synced recovery +DEBUG 4/21/2026, 12:00:52 PM 4143861 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:52 PM 4143863 synced recovery +INFO 4/21/2026, 12:00:52 PM 4144206 [blur] 1 +INFO 4/21/2026, 12:00:52 PM 4144207 [win] blur +INFO 4/21/2026, 12:00:54 PM 4145825 [focus] 1 +DEBUG 4/21/2026, 12:00:59 PM 4150515 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:00:59 PM 4150517 synced recovery +DEBUG 4/21/2026, 12:01:00 PM 4152201 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:01:00 PM 4152202 synced recovery +DEBUG 4/21/2026, 12:01:01 PM 4153295 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:01:01 PM 4153297 synced recovery +INFO 4/21/2026, 12:01:04 PM 4156057 [blur] 1 +INFO 4/21/2026, 12:01:04 PM 4156057 [win] blur +INFO 4/21/2026, 12:01:05 PM 4157090 [focus] 1 +DEBUG 4/21/2026, 12:01:08 PM 4159911 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:01:08 PM 4159912 synced recovery +DEBUG 4/21/2026, 12:01:11 PM 4163091 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:01:11 PM 4163092 synced recovery +DEBUG 4/21/2026, 12:01:14 PM 4166302 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:01:14 PM 4166303 synced recovery +DEBUG 4/21/2026, 12:01:20 PM 4171498 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:01:20 PM 4171499 synced recovery +DEBUG 4/21/2026, 12:01:27 PM 4178773 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:01:27 PM 4178775 synced recovery +DEBUG 4/21/2026, 12:01:29 PM 4180732 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:01:29 PM 4180734 synced recovery +DEBUG 4/21/2026, 12:01:33 PM 4184838 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:01:33 PM 4184839 synced recovery +DEBUG 4/21/2026, 12:01:35 PM 4186921 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:01:35 PM 4186923 synced recovery +DEBUG 4/21/2026, 12:01:37 PM 4188970 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:01:37 PM 4188971 synced recovery +DEBUG 4/21/2026, 12:01:39 PM 4190890 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:01:39 PM 4190891 synced recovery +DEBUG 4/21/2026, 12:01:40 PM 4192319 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:01:40 PM 4192322 synced recovery +DEBUG 4/21/2026, 12:01:48 PM 4199514 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:01:48 PM 4199515 synced recovery +DEBUG 4/21/2026, 12:01:52 PM 4203426 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:01:52 PM 4203427 synced recovery +DEBUG 4/21/2026, 12:01:57 PM 4208932 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:01:57 PM 4208933 synced recovery +DEBUG 4/21/2026, 12:01:58 PM 4210268 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:01:58 PM 4210270 synced recovery +DEBUG 4/21/2026, 12:02:04 PM 4215412 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:04 PM 4215414 synced recovery +DEBUG 4/21/2026, 12:02:06 PM 4217516 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:06 PM 4217517 synced recovery +DEBUG 4/21/2026, 12:02:07 PM 4218576 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:07 PM 4218577 synced recovery +DEBUG 4/21/2026, 12:02:10 PM 4222292 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:10 PM 4222294 synced recovery +DEBUG 4/21/2026, 12:02:14 PM 4225727 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:14 PM 4225728 synced recovery +DEBUG 4/21/2026, 12:02:17 PM 4229329 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:17 PM 4229330 synced recovery +DEBUG 4/21/2026, 12:02:28 PM 4239446 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:28 PM 4239448 synced recovery +DEBUG 4/21/2026, 12:02:29 PM 4241319 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:29 PM 4241321 synced recovery +DEBUG 4/21/2026, 12:02:31 PM 4242922 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:31 PM 4242924 synced recovery +DEBUG 4/21/2026, 12:02:32 PM 4244110 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:32 PM 4244112 synced recovery +DEBUG 4/21/2026, 12:02:35 PM 4246975 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:35 PM 4246977 synced recovery +DEBUG 4/21/2026, 12:02:36 PM 4248066 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:36 PM 4248067 synced recovery +DEBUG 4/21/2026, 12:02:37 PM 4249150 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:37 PM 4249152 synced recovery +INFO 4/21/2026, 12:02:39 PM 4251028 [blur] 1 +INFO 4/21/2026, 12:02:39 PM 4251028 [win] blur +INFO 4/21/2026, 12:02:41 PM 4252788 [focus] 1 +DEBUG 4/21/2026, 12:02:44 PM 4255470 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:44 PM 4255472 synced recovery +DEBUG 4/21/2026, 12:02:48 PM 4259375 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:48 PM 4259377 synced recovery +DEBUG 4/21/2026, 12:02:49 PM 4260655 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:49 PM 4260656 synced recovery +DEBUG 4/21/2026, 12:02:50 PM 4261715 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:50 PM 4261716 synced recovery +DEBUG 4/21/2026, 12:02:52 PM 4263775 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:52 PM 4263776 synced recovery +DEBUG 4/21/2026, 12:02:53 PM 4264916 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:53 PM 4264917 synced recovery +DEBUG 4/21/2026, 12:02:56 PM 4267645 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:56 PM 4267646 synced recovery +DEBUG 4/21/2026, 12:02:57 PM 4268810 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:57 PM 4268811 synced recovery +DEBUG 4/21/2026, 12:02:58 PM 4270300 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:02:58 PM 4270302 synced recovery +DEBUG 4/21/2026, 12:03:04 PM 4275899 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:04 PM 4275900 synced recovery +DEBUG 4/21/2026, 12:03:05 PM 4277048 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:05 PM 4277049 synced recovery +DEBUG 4/21/2026, 12:03:07 PM 4278897 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:07 PM 4278899 synced recovery +DEBUG 4/21/2026, 12:03:08 PM 4280056 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:08 PM 4280058 synced recovery +DEBUG 4/21/2026, 12:03:10 PM 4281517 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:10 PM 4281519 synced recovery +DEBUG 4/21/2026, 12:03:12 PM 4284101 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:12 PM 4284102 synced recovery +DEBUG 4/21/2026, 12:03:14 PM 4285536 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:14 PM 4285537 synced recovery +DEBUG 4/21/2026, 12:03:15 PM 4286711 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:15 PM 4286714 synced recovery +DEBUG 4/21/2026, 12:03:17 PM 4288722 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:17 PM 4288724 synced recovery +DEBUG 4/21/2026, 12:03:18 PM 4290073 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:18 PM 4290075 synced recovery +DEBUG 4/21/2026, 12:03:19 PM 4291180 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:19 PM 4291181 synced recovery +DEBUG 4/21/2026, 12:03:21 PM 4292374 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:21 PM 4292375 synced recovery +DEBUG 4/21/2026, 12:03:22 PM 4294014 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:22 PM 4294015 synced recovery +DEBUG 4/21/2026, 12:03:24 PM 4296129 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:24 PM 4296130 synced recovery +DEBUG 4/21/2026, 12:03:35 PM 4306718 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:35 PM 4306719 synced recovery +DEBUG 4/21/2026, 12:03:38 PM 4309966 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:38 PM 4309968 synced recovery +DEBUG 4/21/2026, 12:03:45 PM 4316995 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:45 PM 4316997 synced recovery +DEBUG 4/21/2026, 12:03:46 PM 4318244 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:46 PM 4318246 synced recovery +DEBUG 4/21/2026, 12:03:47 PM 4319309 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:47 PM 4319311 synced recovery +DEBUG 4/21/2026, 12:03:49 PM 4320603 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:49 PM 4320604 synced recovery +DEBUG 4/21/2026, 12:03:50 PM 4321668 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:50 PM 4321670 synced recovery +DEBUG 4/21/2026, 12:03:51 PM 4322835 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:51 PM 4322836 synced recovery +DEBUG 4/21/2026, 12:03:53 PM 4324405 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:53 PM 4324406 synced recovery +DEBUG 4/21/2026, 12:03:56 PM 4327693 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:56 PM 4327694 synced recovery +DEBUG 4/21/2026, 12:03:59 PM 4330398 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:03:59 PM 4330399 synced recovery +DEBUG 4/21/2026, 12:04:00 PM 4331706 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:00 PM 4331708 synced recovery +DEBUG 4/21/2026, 12:04:03 PM 4335078 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:03 PM 4335079 synced recovery +DEBUG 4/21/2026, 12:04:04 PM 4336122 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:04 PM 4336123 synced recovery +DEBUG 4/21/2026, 12:04:07 PM 4338958 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:07 PM 4338959 synced recovery +DEBUG 4/21/2026, 12:04:11 PM 4342374 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:11 PM 4342375 synced recovery +DEBUG 4/21/2026, 12:04:12 PM 4343536 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:12 PM 4343539 synced recovery +DEBUG 4/21/2026, 12:04:13 PM 4344781 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:13 PM 4344783 synced recovery +DEBUG 4/21/2026, 12:04:14 PM 4345975 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:14 PM 4345976 synced recovery +DEBUG 4/21/2026, 12:04:38 PM 4369934 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:38 PM 4369935 synced recovery +DEBUG 4/21/2026, 12:04:41 PM 4372556 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:41 PM 4372557 synced recovery +DEBUG 4/21/2026, 12:04:43 PM 4374514 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:43 PM 4374516 synced recovery +DEBUG 4/21/2026, 12:04:44 PM 4375622 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:44 PM 4375623 synced recovery +DEBUG 4/21/2026, 12:04:46 PM 4377976 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:46 PM 4377977 synced recovery +DEBUG 4/21/2026, 12:04:48 PM 4379800 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:48 PM 4379802 synced recovery +DEBUG 4/21/2026, 12:04:53 PM 4385303 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:53 PM 4385304 synced recovery +DEBUG 4/21/2026, 12:04:55 PM 4386568 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:55 PM 4386569 synced recovery +DEBUG 4/21/2026, 12:04:56 PM 4387615 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:56 PM 4387616 synced recovery +DEBUG 4/21/2026, 12:04:57 PM 4388748 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:57 PM 4388749 synced recovery +DEBUG 4/21/2026, 12:04:58 PM 4389884 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:04:58 PM 4389885 synced recovery +DEBUG 4/21/2026, 12:05:00 PM 4391501 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:00 PM 4391502 synced recovery +DEBUG 4/21/2026, 12:05:01 PM 4392549 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:01 PM 4392550 synced recovery +DEBUG 4/21/2026, 12:05:02 PM 4393698 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:02 PM 4393699 synced recovery +DEBUG 4/21/2026, 12:05:05 PM 4397142 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:05 PM 4397143 synced recovery +DEBUG 4/21/2026, 12:05:06 PM 4398270 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:06 PM 4398272 synced recovery +DEBUG 4/21/2026, 12:05:08 PM 4400126 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:08 PM 4400128 synced recovery +DEBUG 4/21/2026, 12:05:09 PM 4401326 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:09 PM 4401328 synced recovery +DEBUG 4/21/2026, 12:05:11 PM 4402773 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:11 PM 4402774 synced recovery +DEBUG 4/21/2026, 12:05:12 PM 4403977 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:12 PM 4403979 synced recovery +DEBUG 4/21/2026, 12:05:14 PM 4405961 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:14 PM 4405962 synced recovery +DEBUG 4/21/2026, 12:05:17 PM 4408690 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:17 PM 4408691 synced recovery +DEBUG 4/21/2026, 12:05:18 PM 4409767 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:18 PM 4409768 synced recovery +DEBUG 4/21/2026, 12:05:19 PM 4410843 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:19 PM 4410844 synced recovery +INFO 4/21/2026, 12:05:23 PM 4415275 [blur] 1 +INFO 4/21/2026, 12:05:23 PM 4415275 [win] blur +INFO 4/21/2026, 12:05:24 PM 4416205 [focus] 1 +DEBUG 4/21/2026, 12:05:27 PM 4418911 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:27 PM 4418913 synced recovery +DEBUG 4/21/2026, 12:05:28 PM 4419961 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:28 PM 4419963 synced recovery +DEBUG 4/21/2026, 12:05:30 PM 4422222 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:30 PM 4422223 synced recovery +DEBUG 4/21/2026, 12:05:33 PM 4425328 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:33 PM 4425329 synced recovery +DEBUG 4/21/2026, 12:05:37 PM 4428632 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:37 PM 4428634 synced recovery +DEBUG 4/21/2026, 12:05:41 PM 4433120 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:41 PM 4433121 synced recovery +DEBUG 4/21/2026, 12:05:43 PM 4434396 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:43 PM 4434398 synced recovery +DEBUG 4/21/2026, 12:05:46 PM 4437545 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:46 PM 4437547 synced recovery +DEBUG 4/21/2026, 12:05:47 PM 4439288 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:47 PM 4439290 synced recovery +DEBUG 4/21/2026, 12:05:49 PM 4440460 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:49 PM 4440462 synced recovery +DEBUG 4/21/2026, 12:05:57 PM 4448369 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:57 PM 4448371 synced recovery +DEBUG 4/21/2026, 12:05:58 PM 4449434 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:05:58 PM 4449437 synced recovery +DEBUG 4/21/2026, 12:06:00 PM 4451748 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:00 PM 4451749 synced recovery +DEBUG 4/21/2026, 12:06:04 PM 4455555 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:04 PM 4455556 synced recovery +DEBUG 4/21/2026, 12:06:05 PM 4456612 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:05 PM 4456614 synced recovery +DEBUG 4/21/2026, 12:06:06 PM 4458049 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:06 PM 4458050 synced recovery +DEBUG 4/21/2026, 12:06:07 PM 4459093 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:07 PM 4459094 synced recovery +DEBUG 4/21/2026, 12:06:09 PM 4460371 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:09 PM 4460372 synced recovery +DEBUG 4/21/2026, 12:06:11 PM 4462535 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:11 PM 4462536 synced recovery +DEBUG 4/21/2026, 12:06:17 PM 4468414 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:17 PM 4468416 synced recovery +DEBUG 4/21/2026, 12:06:18 PM 4469553 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:18 PM 4469555 synced recovery +DEBUG 4/21/2026, 12:06:21 PM 4472734 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:21 PM 4472735 synced recovery +DEBUG 4/21/2026, 12:06:25 PM 4477066 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:25 PM 4477068 synced recovery +DEBUG 4/21/2026, 12:06:26 PM 4478135 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:26 PM 4478137 synced recovery +DEBUG 4/21/2026, 12:06:29 PM 4480938 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:29 PM 4480940 synced recovery +DEBUG 4/21/2026, 12:06:31 PM 4483264 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:31 PM 4483266 synced recovery +DEBUG 4/21/2026, 12:06:32 PM 4484347 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:32 PM 4484349 synced recovery +DEBUG 4/21/2026, 12:06:34 PM 4485422 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:34 PM 4485423 synced recovery +DEBUG 4/21/2026, 12:06:38 PM 4489939 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:38 PM 4489940 synced recovery +DEBUG 4/21/2026, 12:06:40 PM 4491795 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:40 PM 4491798 synced recovery +DEBUG 4/21/2026, 12:06:41 PM 4493074 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:41 PM 4493075 synced recovery +DEBUG 4/21/2026, 12:06:42 PM 4494342 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:42 PM 4494343 synced recovery +DEBUG 4/21/2026, 12:06:44 PM 4495737 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:44 PM 4495738 synced recovery +DEBUG 4/21/2026, 12:06:45 PM 4497173 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:45 PM 4497174 synced recovery +DEBUG 4/21/2026, 12:06:47 PM 4498494 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:47 PM 4498497 synced recovery +DEBUG 4/21/2026, 12:06:48 PM 4500337 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:48 PM 4500338 synced recovery +DEBUG 4/21/2026, 12:06:55 PM 4507295 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:55 PM 4507297 synced recovery +DEBUG 4/21/2026, 12:06:59 PM 4511304 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:06:59 PM 4511305 synced recovery +DEBUG 4/21/2026, 12:07:04 PM 4515906 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:04 PM 4515907 synced recovery +DEBUG 4/21/2026, 12:07:06 PM 4517804 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:06 PM 4517805 synced recovery +DEBUG 4/21/2026, 12:07:11 PM 4522938 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:11 PM 4522940 synced recovery +DEBUG 4/21/2026, 12:07:14 PM 4525610 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:14 PM 4525612 synced recovery +DEBUG 4/21/2026, 12:07:16 PM 4528133 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:16 PM 4528135 synced recovery +DEBUG 4/21/2026, 12:07:22 PM 4533596 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:22 PM 4533597 synced recovery +DEBUG 4/21/2026, 12:07:26 PM 4537638 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:26 PM 4537640 synced recovery +DEBUG 4/21/2026, 12:07:28 PM 4539998 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:28 PM 4539999 synced recovery +DEBUG 4/21/2026, 12:07:29 PM 4541200 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:29 PM 4541201 synced recovery +DEBUG 4/21/2026, 12:07:31 PM 4542512 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:31 PM 4542513 synced recovery +DEBUG 4/21/2026, 12:07:32 PM 4544104 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:32 PM 4544106 synced recovery +DEBUG 4/21/2026, 12:07:33 PM 4545229 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:33 PM 4545231 synced recovery +DEBUG 4/21/2026, 12:07:34 PM 4546334 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:34 PM 4546336 synced recovery +DEBUG 4/21/2026, 12:07:36 PM 4547407 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:36 PM 4547409 synced recovery +DEBUG 4/21/2026, 12:07:37 PM 4548475 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:37 PM 4548478 synced recovery +DEBUG 4/21/2026, 12:07:38 PM 4550341 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:38 PM 4550343 synced recovery +DEBUG 4/21/2026, 12:07:40 PM 4551375 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:40 PM 4551377 synced recovery +DEBUG 4/21/2026, 12:07:41 PM 4552511 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:41 PM 4552513 synced recovery +DEBUG 4/21/2026, 12:07:45 PM 4556580 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:45 PM 4556581 synced recovery +DEBUG 4/21/2026, 12:07:46 PM 4558241 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:46 PM 4558243 synced recovery +DEBUG 4/21/2026, 12:07:48 PM 4559723 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:07:48 PM 4559725 synced recovery +INFO 4/21/2026, 12:07:57 PM 4568765 [blur] 1 +INFO 4/21/2026, 12:07:57 PM 4568765 [win] blur +INFO 4/21/2026, 12:07:59 PM 4570354 [focus] 1 +DEBUG 4/21/2026, 12:08:02 PM 4573728 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:02 PM 4573729 synced recovery +DEBUG 4/21/2026, 12:08:03 PM 4574810 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:03 PM 4574812 synced recovery +DEBUG 4/21/2026, 12:08:04 PM 4575883 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:04 PM 4575885 synced recovery +DEBUG 4/21/2026, 12:08:08 PM 4579415 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:08 PM 4579416 synced recovery +DEBUG 4/21/2026, 12:08:09 PM 4580523 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:09 PM 4580525 synced recovery +DEBUG 4/21/2026, 12:08:12 PM 4583514 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:12 PM 4583517 synced recovery +DEBUG 4/21/2026, 12:08:14 PM 4586348 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:15 PM 4586350 synced recovery +DEBUG 4/21/2026, 12:08:19 PM 4590647 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:19 PM 4590649 synced recovery +DEBUG 4/21/2026, 12:08:21 PM 4592520 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:21 PM 4592522 synced recovery +DEBUG 4/21/2026, 12:08:22 PM 4593755 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:22 PM 4593757 synced recovery +DEBUG 4/21/2026, 12:08:23 PM 4595045 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:23 PM 4595047 synced recovery +DEBUG 4/21/2026, 12:08:27 PM 4598524 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:27 PM 4598527 synced recovery +DEBUG 4/21/2026, 12:08:29 PM 4600759 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:29 PM 4600765 synced recovery +DEBUG 4/21/2026, 12:08:33 PM 4604445 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:33 PM 4604446 synced recovery +DEBUG 4/21/2026, 12:08:34 PM 4605997 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:34 PM 4605998 synced recovery +DEBUG 4/21/2026, 12:08:37 PM 4608941 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:37 PM 4608943 synced recovery +DEBUG 4/21/2026, 12:08:44 PM 4616159 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:44 PM 4616165 synced recovery +DEBUG 4/21/2026, 12:08:48 PM 4619943 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:48 PM 4619944 synced recovery +DEBUG 4/21/2026, 12:08:50 PM 4621494 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:50 PM 4621495 synced recovery +DEBUG 4/21/2026, 12:08:51 PM 4622986 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:51 PM 4622987 synced recovery +DEBUG 4/21/2026, 12:08:54 PM 4625748 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:54 PM 4625750 synced recovery +DEBUG 4/21/2026, 12:08:56 PM 4627487 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:56 PM 4627488 synced recovery +DEBUG 4/21/2026, 12:08:57 PM 4628536 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:57 PM 4628538 synced recovery +DEBUG 4/21/2026, 12:08:59 PM 4630682 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:08:59 PM 4630683 synced recovery +DEBUG 4/21/2026, 12:09:00 PM 4631926 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:09:00 PM 4631927 synced recovery +DEBUG 4/21/2026, 12:09:04 PM 4635946 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:09:04 PM 4635947 synced recovery +DEBUG 4/21/2026, 12:09:06 PM 4637371 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:09:06 PM 4637373 synced recovery +DEBUG 4/21/2026, 12:09:07 PM 4638441 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:09:07 PM 4638443 synced recovery +DEBUG 4/21/2026, 12:09:10 PM 4642345 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:09:10 PM 4642346 synced recovery +DEBUG 4/21/2026, 12:09:23 PM 4654800 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:09:23 PM 4654801 synced recovery +DEBUG 4/21/2026, 12:09:24 PM 4656264 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:09:24 PM 4656266 synced recovery +DEBUG 4/21/2026, 12:09:55 PM 4686861 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:09:55 PM 4686862 synced recovery +DEBUG 4/21/2026, 12:10:00 PM 4691890 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:10:00 PM 4691893 synced recovery +DEBUG 4/21/2026, 12:10:03 PM 4694683 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:10:03 PM 4694684 synced recovery +INFO 4/21/2026, 12:10:31 PM 4722666 [blur] 1 +INFO 4/21/2026, 12:10:31 PM 4722668 [win] blur +INFO 4/21/2026, 12:11:04 PM 4755727 [focus] 1 +INFO 4/21/2026, 12:11:05 PM 4757096 [blur] 1 +INFO 4/21/2026, 12:11:05 PM 4757097 [win] blur +INFO 4/21/2026, 12:11:14 PM 4766119 [focus] 1 +DEBUG 4/21/2026, 12:11:19 PM 4771150 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:11:19 PM 4771151 synced recovery +DEBUG 4/21/2026, 12:11:22 PM 4773454 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:11:22 PM 4773455 synced recovery +DEBUG 4/21/2026, 12:11:25 PM 4776828 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:11:25 PM 4776831 synced recovery +DEBUG 4/21/2026, 12:11:26 PM 4777854 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:11:26 PM 4777855 synced recovery +DEBUG 4/21/2026, 12:11:29 PM 4781237 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:11:29 PM 4781238 synced recovery +DEBUG 4/21/2026, 12:11:33 PM 4785216 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:11:33 PM 4785217 synced recovery +DEBUG 4/21/2026, 12:11:34 PM 4786294 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:11:34 PM 4786295 synced recovery +DEBUG 4/21/2026, 12:11:36 PM 4787392 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:11:36 PM 4787394 synced recovery +DEBUG 4/21/2026, 12:11:37 PM 4788449 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:11:37 PM 4788451 synced recovery +DEBUG 4/21/2026, 12:11:38 PM 4790052 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:11:38 PM 4790054 synced recovery +DEBUG 4/21/2026, 12:11:40 PM 4791662 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:11:40 PM 4791663 synced recovery +DEBUG 4/21/2026, 12:11:41 PM 4792781 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:11:41 PM 4792782 synced recovery +DEBUG 4/21/2026, 12:11:42 PM 4793910 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:11:42 PM 4793911 synced recovery +DEBUG 4/21/2026, 12:11:44 PM 4796113 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:11:44 PM 4796114 synced recovery +DEBUG 4/21/2026, 12:11:50 PM 4801719 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:11:50 PM 4801721 synced recovery +DEBUG 4/21/2026, 12:11:52 PM 4804107 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:11:52 PM 4804108 synced recovery +DEBUG 4/21/2026, 12:11:54 PM 4805680 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:11:54 PM 4805682 synced recovery +DEBUG 4/21/2026, 12:12:01 PM 4813295 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:12:01 PM 4813296 synced recovery +DEBUG 4/21/2026, 12:12:03 PM 4814444 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:12:03 PM 4814445 synced recovery +DEBUG 4/21/2026, 12:12:04 PM 4816262 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:12:04 PM 4816264 synced recovery +DEBUG 4/21/2026, 12:12:10 PM 4821384 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:12:10 PM 4821385 synced recovery +DEBUG 4/21/2026, 12:12:14 PM 4825923 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:12:14 PM 4825924 synced recovery +DEBUG 4/21/2026, 12:12:16 PM 4828304 added recovery 1 /home/afoucaultc/workspace/cesi/wind_turbine_gearbox/README_v2.md (0) +INFO 4/21/2026, 12:12:16 PM 4828306 synced recovery +INFO 4/21/2026, 12:12:19 PM 4830448 synced recovery +INFO 4/21/2026, 12:12:19 PM 4830448 ----------------before-quit----------------- +INFO 4/21/2026, 12:12:19 PM 4830448 ------------------will-quit------------------ +INFO 4/21/2026, 12:12:19 PM 4830500 -----------------quit------------------ +INFO 4/21/2026, 12:12:19 PM 4830501 closeLogging +INFO 5/4/2026, 12:49:40 PM 81 launch with argv [/usr/share/typora/Typora] +INFO 5/4/2026, 12:49:40 PM 383 ------------------start------------------ +DEBUG 5/4/2026, 12:49:40 PM 522 before setting +DEBUG 5/4/2026, 12:49:40 PM 576 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 5/4/2026, 12:49:40 PM 604 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 5/4/2026, 12:49:40 PM 609 OS is linux 7.0.3-arch1-2 +INFO 5/4/2026, 12:49:40 PM 609 launchFromDiffVersion, pre version is 1.12.4 +INFO 5/4/2026, 12:49:40 PM 609 start LM in devVersion=false +INFO 5/4/2026, 12:49:40 PM 622 cleanupOlderCache +INFO 5/4/2026, 12:49:40 PM 788 [watch L] +DEBUG 5/4/2026, 12:49:40 PM 789 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 5/4/2026, 12:49:41 PM 974 pure = undefined +INFO 5/4/2026, 12:49:41 PM 976 renew +DEBUG 5/4/2026, 12:49:41 PM 976 [renewLicense]: {"v":"linux|1.13.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 5/4/2026, 12:49:41 PM 977 [L] pass +DEBUG 5/4/2026, 12:49:41 PM 977 trailRemains is 0 +INFO 5/4/2026, 12:49:41 PM 977 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 5/4/2026, 12:49:41 PM 991 [watch L] hasL: true +INFO 5/4/2026, 12:49:41 PM 1528 overwriteThemeFolder +DEBUG 5/4/2026, 12:49:41 PM 1690 after setting +INFO 5/4/2026, 12:49:41 PM 1690 typora version: 1.13.4 +user-dict.json not found +DEBUG 5/4/2026, 12:49:42 PM 1857 app.openFile +DEBUG 5/4/2026, 12:49:42 PM 2169 added recovery 1 null (0) +DEBUG 5/4/2026, 12:49:42 PM 2170 putAccelerator File -> &Fichier +DEBUG 5/4/2026, 12:49:42 PM 2171 putAccelerator Edit -> Édit&er +DEBUG 5/4/2026, 12:49:42 PM 2171 putAccelerator Paragraph -> &Paragraphe +DEBUG 5/4/2026, 12:49:42 PM 2172 putAccelerator Format -> F&ormat +DEBUG 5/4/2026, 12:49:42 PM 2172 putAccelerator View -> Présentation(&V) +DEBUG 5/4/2026, 12:49:42 PM 2172 putAccelerator Themes -> &Thèmes +DEBUG 5/4/2026, 12:49:42 PM 2172 putAccelerator Help -> Aide(&H) +INFO 5/4/2026, 12:49:42 PM 2363 [focus] 1 +INFO 5/4/2026, 12:49:42 PM 2412 synced recovery +ERROR 5/4/2026, 12:49:43 PM 3789 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 5/4/2026, 12:49:43 PM 3793 handle document.loadData +DEBUG 5/4/2026, 12:49:43 PM 3793 document.loadData 0 +ERROR 5/4/2026, 12:49:43 PM 3794 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +DEBUG 5/4/2026, 12:49:43 PM 3820 [renewLicense]: license renewed +INFO 5/4/2026, 12:49:43 PM 3820 ls put SLicense +INFO 5/4/2026, 12:49:44 PM 3873 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 5/4/2026, 12:49:44 PM 3874 [RenderProcess 1][Log] reset NodeMap +DEBUG 5/4/2026, 12:49:44 PM 3893 added recovery 1 (0) +INFO 5/4/2026, 12:49:44 PM 3896 synced recovery +INFO 5/4/2026, 12:49:44 PM 4132 [RenderProcess 1][Log] onBecomeActive +INFO 5/4/2026, 12:49:44 PM 4132 [RenderProcess 1][Log] File.activeWindow = true +INFO 5/4/2026, 12:49:46 PM 5999 [blur] 1 +INFO 5/4/2026, 12:49:46 PM 6000 [win] blur +INFO 5/4/2026, 12:49:46 PM 6000 [focus] 1 +INFO 5/4/2026, 12:49:46 PM 6340 [blur] 1 +INFO 5/4/2026, 12:49:46 PM 6341 [win] blur +INFO 5/4/2026, 12:49:55 PM 15448 addRecentDocument +INFO 5/4/2026, 12:49:55 PM 15471 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 5/4/2026, 12:49:55 PM 15471 [RenderProcess 1][Log] reset NodeMap +INFO 5/4/2026, 12:49:55 PM 15474 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.md +INFO 5/4/2026, 12:49:55 PM 15483 [focus] 1 +DEBUG 5/4/2026, 12:49:55 PM 15634 added recovery 1 /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.md (0) +INFO 5/4/2026, 12:49:55 PM 15635 synced recovery +DEBUG 5/4/2026, 12:50:07 PM 26845 added recovery 1 /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.md (0) +INFO 5/4/2026, 12:50:07 PM 26846 synced recovery +DEBUG 5/4/2026, 12:50:09 PM 29779 added recovery 1 /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.md (0) +INFO 5/4/2026, 12:50:09 PM 29782 synced recovery +INFO 5/4/2026, 12:50:11 PM 31700 cleanUpExpiredDrafts +DEBUG 5/4/2026, 12:50:11 PM 31700 cleanUpExpiredDrafts +DEBUG 5/4/2026, 12:50:21 PM 41437 added recovery 1 /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.md (0) +INFO 5/4/2026, 12:50:21 PM 41440 synced recovery +DEBUG 5/4/2026, 12:50:26 PM 45949 added recovery 1 /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.md (0) +INFO 5/4/2026, 12:50:26 PM 45952 synced recovery +DEBUG 5/4/2026, 12:50:29 PM 49110 added recovery 1 /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.md (0) +INFO 5/4/2026, 12:50:29 PM 49114 synced recovery +DEBUG 5/4/2026, 12:50:31 PM 51382 added recovery 1 /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.md (0) +INFO 5/4/2026, 12:50:31 PM 51387 synced recovery +DEBUG 5/4/2026, 12:50:38 PM 57907 added recovery 1 /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.md (0) +INFO 5/4/2026, 12:50:38 PM 57912 synced recovery +DEBUG 5/4/2026, 12:50:42 PM 62803 added recovery 1 /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.md (0) +INFO 5/4/2026, 12:50:42 PM 62804 synced recovery +DEBUG 5/4/2026, 12:50:44 PM 64768 added recovery 1 /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.md (0) +INFO 5/4/2026, 12:50:44 PM 64802 synced recovery +DEBUG 5/4/2026, 12:50:46 PM 66047 added recovery 1 /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.md (0) +INFO 5/4/2026, 12:50:46 PM 66048 synced recovery +DEBUG 5/4/2026, 12:50:48 PM 68030 added recovery 1 /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.md (0) +INFO 5/4/2026, 12:50:48 PM 68031 synced recovery +DEBUG 5/4/2026, 12:50:49 PM 69751 added recovery 1 /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.md (0) +INFO 5/4/2026, 12:50:49 PM 69754 synced recovery +DEBUG 5/4/2026, 12:50:54 PM 74361 added recovery 1 /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.md (0) +INFO 5/4/2026, 12:50:54 PM 74364 synced recovery +DEBUG 5/4/2026, 12:50:56 PM 76203 added recovery 1 /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.md (0) +INFO 5/4/2026, 12:50:56 PM 76205 synced recovery +DEBUG 5/4/2026, 12:50:57 PM 77627 added recovery 1 /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.md (0) +INFO 5/4/2026, 12:50:57 PM 77629 synced recovery +INFO 5/4/2026, 12:51:26 PM 106221 load file [/tmp/Typora/1777891886381-0.37274755748302124.html] for PDF export +INFO 5/4/2026, 12:51:26 PM 106489 [blur] 1 +INFO 5/4/2026, 12:51:26 PM 106489 [win] blur +INFO 5/4/2026, 12:51:26 PM 106489 [focus] 1 +INFO 5/4/2026, 12:51:26 PM 106546 generate print window with id [2] for [content] +INFO 5/4/2026, 12:51:26 PM 106588 [blur] 1 +INFO 5/4/2026, 12:51:26 PM 106588 [win] blur +INFO 5/4/2026, 12:51:27 PM 106877 got PDF data +INFO 5/4/2026, 12:51:27 PM 106880 get background color +INFO 5/4/2026, 12:51:27 PM 106998 load file [/tmp/Typora/1777891887165-1.html] for PDF export +INFO 5/4/2026, 12:51:27 PM 107071 generate print window with id [3] for [header] +INFO 5/4/2026, 12:51:27 PM 107328 got PDF data +INFO 5/4/2026, 12:51:27 PM 107333 get background color +INFO 5/4/2026, 12:51:27 PM 107400 load file [/tmp/Typora/1777891887548-2.html] for PDF export +INFO 5/4/2026, 12:51:27 PM 107481 generate print window with id [4] for [footer] +INFO 5/4/2026, 12:51:27 PM 107746 got PDF data +INFO 5/4/2026, 12:51:27 PM 107751 get background color +INFO 5/4/2026, 12:51:31 PM 111174 [RenderProcess 1][Log] export PDF to /home/afoucaultc/dotfiles_arch/tutoriels/degoogle.pdf +INFO 5/4/2026, 12:51:31 PM 111325 [focus] 1 +INFO 5/4/2026, 12:51:37 PM 117363 [blur] 1 +INFO 5/4/2026, 12:51:37 PM 117364 [win] blur +INFO 5/4/2026, 12:51:37 PM 117364 [focus] 1 +INFO 5/4/2026, 12:51:39 PM 118956 synced recovery +INFO 5/4/2026, 12:51:39 PM 118956 ----------------before-quit----------------- +INFO 5/4/2026, 12:51:39 PM 118956 ------------------will-quit------------------ +INFO 5/4/2026, 12:51:39 PM 118967 -----------------quit------------------ +INFO 5/4/2026, 12:51:39 PM 118967 closeLogging +INFO 5/12/2026, 10:23:18 AM 124 launch with argv [/usr/share/typora/Typora, /home/afoucaultc/workspace/cesi/uncertainties/files/revue_code_cpg.md] +INFO 5/12/2026, 10:23:19 AM 837 ------------------start------------------ +DEBUG 5/12/2026, 10:23:19 AM 942 before setting +DEBUG 5/12/2026, 10:23:19 AM 1142 prepDatabase /home/afoucaultc/.config/Typora/profile.data +DEBUG 5/12/2026, 10:23:19 AM 1152 prepDatabase /home/afoucaultc/.config/Typora/history.data +INFO 5/12/2026, 10:23:19 AM 1172 OS is linux 7.0.5-arch1-1 +INFO 5/12/2026, 10:23:19 AM 1172 start LM in devVersion=false +DEBUG 5/12/2026, 10:23:19 AM 1308 after setting +INFO 5/12/2026, 10:23:19 AM 1308 typora version: 1.13.4 +DEBUG 5/12/2026, 10:23:19 AM 1309 app.openFile +INFO 5/12/2026, 10:23:19 AM 1309 addRecentDocument +DEBUG 5/12/2026, 10:23:20 AM 1897 added recovery 1 /home/afoucaultc/workspace/cesi/uncertainties/files/revue_code_cpg.md (0) +user-dict.json not found +INFO 5/12/2026, 10:23:20 AM 1918 [watch L] +DEBUG 5/12/2026, 10:23:20 AM 1918 prepDatabase /home/afoucaultc/.config/Typora/T9ToEagTYy +DEBUG 5/12/2026, 10:23:20 AM 2049 pure = undefined +INFO 5/12/2026, 10:23:20 AM 2051 renew +DEBUG 5/12/2026, 10:23:20 AM 2052 [renewLicense]: {"v":"linux|1.13.4","license":"74TKY7-7KCQ3C-MNQX9W-ZKVATZ","l":"SJ7c","u":"a788a577-c145-4e09-941b-4cad9b36dfc3","type":""} +DEBUG 5/12/2026, 10:23:20 AM 2052 [L] pass +DEBUG 5/12/2026, 10:23:20 AM 2053 trailRemains is 0 +INFO 5/12/2026, 10:23:20 AM 2053 [L] installDate is 2/16/2026, trail remains: 0 days +INFO 5/12/2026, 10:23:20 AM 2068 [watch L] hasL: true +DEBUG 5/12/2026, 10:23:20 AM 2158 putAccelerator File -> &Fichier +DEBUG 5/12/2026, 10:23:20 AM 2159 putAccelerator Edit -> Édit&er +DEBUG 5/12/2026, 10:23:20 AM 2159 putAccelerator Paragraph -> &Paragraphe +DEBUG 5/12/2026, 10:23:20 AM 2159 putAccelerator Format -> F&ormat +DEBUG 5/12/2026, 10:23:20 AM 2159 putAccelerator View -> Présentation(&V) +DEBUG 5/12/2026, 10:23:20 AM 2159 putAccelerator Themes -> &Thèmes +DEBUG 5/12/2026, 10:23:20 AM 2159 putAccelerator Help -> Aide(&H) +INFO 5/12/2026, 10:23:20 AM 2188 synced recovery +INFO 5/12/2026, 10:23:22 AM 3996 [focus] 1 +DEBUG 5/12/2026, 10:23:22 AM 4752 [renewLicense]: license renewed +INFO 5/12/2026, 10:23:22 AM 4753 ls put SLicense +ERROR 5/12/2026, 10:23:23 AM 5391 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 5/12/2026, 10:23:23 AM 5395 handle document.loadData +DEBUG 5/12/2026, 10:23:23 AM 5395 document.loadData 0 +ERROR 5/12/2026, 10:23:23 AM 5397 Error: net::ERR_FILE_NOT_FOUND + at SimpleURLLoaderWrapper. (node:electron/js2c/browser_init:2:123516) + at SimpleURLLoaderWrapper.emit (node:events:518:28) +INFO 5/12/2026, 10:23:23 AM 5485 [RenderProcess 1][Log] [UndoManager] reset commandStack +INFO 5/12/2026, 10:23:23 AM 5485 [RenderProcess 1][Log] reset NodeMap +INFO 5/12/2026, 10:23:23 AM 5486 [RenderProcess 1][Log] readContentFrom /home/afoucaultc/workspace/cesi/uncertainties/files/revue_code_cpg.md +DEBUG 5/12/2026, 10:23:23 AM 5817 added recovery 1 /home/afoucaultc/workspace/cesi/uncertainties/files/revue_code_cpg.md (0) +INFO 5/12/2026, 10:23:23 AM 5823 synced recovery +INFO 5/12/2026, 10:23:24 AM 5918 [RenderProcess 1][Log] onBecomeActive +INFO 5/12/2026, 10:23:24 AM 5919 [RenderProcess 1][Log] File.activeWindow = true +INFO 5/12/2026, 10:23:25 AM 7129 [blur] 1 +INFO 5/12/2026, 10:23:25 AM 7129 [win] blur +INFO 5/12/2026, 10:23:27 AM 8842 [focus] 1 +INFO 5/12/2026, 10:23:29 AM 11468 [blur] 1 +INFO 5/12/2026, 10:23:29 AM 11468 [win] blur +INFO 5/12/2026, 10:23:54 AM 36257 [focus] 1 +DEBUG 5/12/2026, 10:23:56 AM 38510 added recovery 1 /home/afoucaultc/workspace/cesi/uncertainties/files/revue_code_cpg.md (0) +INFO 5/12/2026, 10:23:56 AM 38512 synced recovery +DEBUG 5/12/2026, 10:23:58 AM 40124 added recovery 1 /home/afoucaultc/workspace/cesi/uncertainties/files/revue_code_cpg.md (0) +INFO 5/12/2026, 10:23:58 AM 40126 synced recovery +INFO 5/12/2026, 10:24:18 AM 60416 [blur] 1 +INFO 5/12/2026, 10:24:18 AM 60416 [win] blur +INFO 5/12/2026, 10:24:39 AM 81498 [focus] 1 +INFO 5/12/2026, 10:25:19 AM 121467 [blur] 1 +INFO 5/12/2026, 10:25:19 AM 121467 [win] blur +INFO 5/12/2026, 10:25:29 AM 131491 [focus] 1 diff --git a/config/autostart/electron.desktop b/config/autostart/electron.desktop new file mode 100644 index 0000000..482c434 --- /dev/null +++ b/config/autostart/electron.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Type=Application +Version=1.0 +Name=electron +Comment=electronstartup script +Exec=/usr/lib/electron38/electron +StartupNotify=false +Terminal=false \ No newline at end of file diff --git a/config/btop/btop.conf b/config/btop/btop.conf new file mode 100644 index 0000000..506079f --- /dev/null +++ b/config/btop/btop.conf @@ -0,0 +1,272 @@ +#? Config file for btop v.1.4.6 + +#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes. +#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes" +color_theme = "/home/afoucaultc/.config/btop/themes/tokyo.theme" + +#* If the theme set background should be shown, set to False if you want terminal background transparency. +theme_background = true + +#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false. +truecolor = true + +#* Set to true to force tty mode regardless if a real tty has been detected or not. +#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols. +force_tty = false + +#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets. +#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box. +#* Use whitespace " " as separator between different presets. +#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty" +presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty" + +#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists. +#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift. +vim_keys = true + +#* Rounded corners on boxes, is ignored if TTY mode is ON. +rounded_corners = true + +#* Use terminal synchronized output sequences to reduce flickering on supported terminals. +terminal_sync = true + +#* Default symbols to use for graph creation, "braille", "block" or "tty". +#* "braille" offers the highest resolution but might not be included in all fonts. +#* "block" has half the resolution of braille but uses more common characters. +#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY. +#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view. +graph_symbol = "braille" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_cpu = "default" + +# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty". +graph_symbol_gpu = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_mem = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_net = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_proc = "default" + +#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace. +shown_boxes = "cpu mem net proc" + +#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs. +update_ms = 500 + +#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", +#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly. +proc_sorting = "cpu lazy" + +#* Reverse sorting order, True or False. +proc_reversed = false + +#* Show processes as a tree. +proc_tree = false + +#* Use the cpu graph colors in the process list. +proc_colors = true + +#* Use a darkening gradient in the process list. +proc_gradient = true + +#* If process cpu usage should be of the core it's running on or usage of the total available cpu power. +proc_per_core = false + +#* Show process memory as bytes instead of percent. +proc_mem_bytes = true + +#* Show cpu graph for each process. +proc_cpu_graphs = true + +#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate) +proc_info_smaps = false + +#* Show proc box on left side of screen instead of right. +proc_left = false + +#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop). +proc_filter_kernel = false + +#* In tree-view, always accumulate child process resources in the parent process. +proc_aggregate = false + +#* Should cpu and memory usage display be preserved for dead processes when paused. +keep_dead_proc_usage = false + +#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available. +#* Select from a list of detected attributes from the options menu. +cpu_graph_upper = "Auto" + +#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available. +#* Select from a list of detected attributes from the options menu. +cpu_graph_lower = "Auto" + +#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off". +show_gpu_info = "Auto" + +#* Toggles if the lower CPU graph should be inverted. +cpu_invert_lower = true + +#* Set to True to completely disable the lower CPU graph. +cpu_single_graph = false + +#* Show cpu box at bottom of screen instead of top. +cpu_bottom = false + +#* Shows the system uptime in the CPU box. +show_uptime = true + +#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo. +show_cpu_watts = true + +#* Show cpu temperature. +check_temp = true + +#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors. +cpu_sensor = "Auto" + +#* Show temperatures for cpu cores also if check_temp is True and sensors has been found. +show_coretemp = true + +#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core. +#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine. +#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries. +#* Example: "4:0 5:1 6:3" +cpu_core_map = "" + +#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine". +temp_scale = "celsius" + +#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024. +base_10_sizes = false + +#* Show CPU frequency. +show_cpu_freq = true + +#* How to calculate CPU frequency, available values: "first", "range", "lowest", "highest" and "average". +freq_mode = "first" + +#* Draw a clock at top of screen, formatting according to strftime, empty string to disable. +#* Special formatting: /host = hostname | /user = username | /uptime = system uptime +clock_format = "%X" + +#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort. +background_update = true + +#* Custom cpu model name, empty string to disable. +custom_cpu_name = "" + +#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ". +#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user" +disks_filter = "" + +#* Show graphs instead of meters for memory values. +mem_graphs = true + +#* Show mem box below net box instead of above. +mem_below_net = false + +#* Count ZFS ARC in cached and available memory. +zfs_arc_cached = true + +#* If swap memory should be shown in memory box. +show_swap = true + +#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk. +swap_disk = true + +#* If mem box should be split to also show disks info. +show_disks = true + +#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar. +only_physical = true + +#* Read disks list from /etc/fstab. This also disables only_physical. +use_fstab = true + +#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool) +zfs_hide_datasets = false + +#* Set to true to show available disk space for privileged users. +disk_free_priv = false + +#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view. +show_io_stat = true + +#* Toggles io mode for disks, showing big graphs for disk read/write speeds. +io_mode = false + +#* Set to True to show combined read/write io graphs in io mode. +io_graph_combined = false + +#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ". +#* Example: "/mnt/media:100 /:20 /boot:1". +io_graph_speeds = "" + +#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False. +net_download = 100 + +net_upload = 100 + +#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest. +net_auto = true + +#* Sync the auto scaling for download and upload to whichever currently has the highest scale. +net_sync = true + +#* Starts with the Network Interface specified here. +net_iface = "" + +#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes. +base_10_bitrate = "Auto" + +#* Show battery stats in top right if battery is present. +show_battery = true + +#* Which battery to use if multiple are present. "Auto" for auto detection. +selected_battery = "Auto" + +#* Show power stats of battery next to charge indicator. +show_battery_watts = true + +#* Set loglevel for "~/.local/state/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG". +#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info. +log_level = "WARNING" + +#* Automatically save current settings to config file on exit. +save_config_on_exit = false + +#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards. +nvml_measure_pcie_speeds = true + +#* Measure PCIe throughput on AMD cards, may impact performance on certain cards. +rsmi_measure_pcie_speeds = true + +#* Horizontally mirror the GPU graph. +gpu_mirror_graph = true + +#* Set which GPU vendors to show. Available values are "nvidia amd intel" +shown_gpus = "nvidia amd intel" + +#* Custom gpu0 model name, empty string to disable. +custom_gpu_name0 = "" + +#* Custom gpu1 model name, empty string to disable. +custom_gpu_name1 = "" + +#* Custom gpu2 model name, empty string to disable. +custom_gpu_name2 = "" + +#* Custom gpu3 model name, empty string to disable. +custom_gpu_name3 = "" + +#* Custom gpu4 model name, empty string to disable. +custom_gpu_name4 = "" + +#* Custom gpu5 model name, empty string to disable. +custom_gpu_name5 = "" diff --git a/config/btop/themes/tokyo.theme b/config/btop/themes/tokyo.theme new file mode 100644 index 0000000..b8200ec --- /dev/null +++ b/config/btop/themes/tokyo.theme @@ -0,0 +1,81 @@ +# Theme: tokyo-night +# By: Pascal Jaeger + +# Main bg +theme[main_bg]="#1a1b26" + +# Main text color +theme[main_fg]="#cfc9c2" + +# Title color for boxes +theme[title]="#cfc9c2" + +# Highlight color for keyboard shortcuts +theme[hi_fg]="#7dcfff" + +# Background color of selected item in processes box +theme[selected_bg]="#414868" + +# Foreground color of selected item in processes box +theme[selected_fg]="#cfc9c2" + +# Color of inactive/disabled text +theme[inactive_fg]="#565f89" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#7dcfff" + +# Cpu box outline color +theme[cpu_box]="#565f89" + +# Memory/disks box outline color +theme[mem_box]="#565f89" + +# Net up/down box outline color +theme[net_box]="#565f89" + +# Processes box outline color +theme[proc_box]="#565f89" + +# Box divider line and small boxes line color +theme[div_line]="#565f89" + +# Temperature graph colors +theme[temp_start]="#9ece6a" +theme[temp_mid]="#e0af68" +theme[temp_end]="#f7768e" + +# CPU graph colors +theme[cpu_start]="#9ece6a" +theme[cpu_mid]="#e0af68" +theme[cpu_end]="#f7768e" + +# Mem/Disk free meter +theme[free_start]="#9ece6a" +theme[free_mid]="#e0af68" +theme[free_end]="#f7768e" + +# Mem/Disk cached meter +theme[cached_start]="#9ece6a" +theme[cached_mid]="#e0af68" +theme[cached_end]="#f7768e" + +# Mem/Disk available meter +theme[available_start]="#9ece6a" +theme[available_mid]="#e0af68" +theme[available_end]="#f7768e" + +# Mem/Disk used meter +theme[used_start]="#9ece6a" +theme[used_mid]="#e0af68" +theme[used_end]="#f7768e" + +# Download graph colors +theme[download_start]="#9ece6a" +theme[download_mid]="#e0af68" +theme[download_end]="#f7768e" + +# Upload graph colors +theme[upload_start]="#9ece6a" +theme[upload_mid]="#e0af68" +theme[upload_end]="#f7768e" diff --git a/config/config/autostart/Proton Mail Bridge.desktop b/config/config/autostart/Proton Mail Bridge.desktop new file mode 100644 index 0000000..7f789bb --- /dev/null +++ b/config/config/autostart/Proton Mail Bridge.desktop @@ -0,0 +1,5 @@ +[Desktop Entry] +Type=Application +Name=Proton Mail Bridge +Exec="protonmail-bridge" "--no-window" +X-GNOME-Autostart-enabled=true diff --git a/config/config/autostart/electron.desktop b/config/config/autostart/electron.desktop new file mode 100644 index 0000000..482c434 --- /dev/null +++ b/config/config/autostart/electron.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Type=Application +Version=1.0 +Name=electron +Comment=electronstartup script +Exec=/usr/lib/electron38/electron +StartupNotify=false +Terminal=false \ No newline at end of file diff --git a/config/config/btop/btop.conf b/config/config/btop/btop.conf new file mode 100644 index 0000000..506079f --- /dev/null +++ b/config/config/btop/btop.conf @@ -0,0 +1,272 @@ +#? Config file for btop v.1.4.6 + +#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes. +#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes" +color_theme = "/home/afoucaultc/.config/btop/themes/tokyo.theme" + +#* If the theme set background should be shown, set to False if you want terminal background transparency. +theme_background = true + +#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false. +truecolor = true + +#* Set to true to force tty mode regardless if a real tty has been detected or not. +#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols. +force_tty = false + +#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets. +#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box. +#* Use whitespace " " as separator between different presets. +#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty" +presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty" + +#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists. +#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift. +vim_keys = true + +#* Rounded corners on boxes, is ignored if TTY mode is ON. +rounded_corners = true + +#* Use terminal synchronized output sequences to reduce flickering on supported terminals. +terminal_sync = true + +#* Default symbols to use for graph creation, "braille", "block" or "tty". +#* "braille" offers the highest resolution but might not be included in all fonts. +#* "block" has half the resolution of braille but uses more common characters. +#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY. +#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view. +graph_symbol = "braille" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_cpu = "default" + +# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty". +graph_symbol_gpu = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_mem = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_net = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_proc = "default" + +#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace. +shown_boxes = "cpu mem net proc" + +#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs. +update_ms = 500 + +#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", +#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly. +proc_sorting = "cpu lazy" + +#* Reverse sorting order, True or False. +proc_reversed = false + +#* Show processes as a tree. +proc_tree = false + +#* Use the cpu graph colors in the process list. +proc_colors = true + +#* Use a darkening gradient in the process list. +proc_gradient = true + +#* If process cpu usage should be of the core it's running on or usage of the total available cpu power. +proc_per_core = false + +#* Show process memory as bytes instead of percent. +proc_mem_bytes = true + +#* Show cpu graph for each process. +proc_cpu_graphs = true + +#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate) +proc_info_smaps = false + +#* Show proc box on left side of screen instead of right. +proc_left = false + +#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop). +proc_filter_kernel = false + +#* In tree-view, always accumulate child process resources in the parent process. +proc_aggregate = false + +#* Should cpu and memory usage display be preserved for dead processes when paused. +keep_dead_proc_usage = false + +#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available. +#* Select from a list of detected attributes from the options menu. +cpu_graph_upper = "Auto" + +#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available. +#* Select from a list of detected attributes from the options menu. +cpu_graph_lower = "Auto" + +#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off". +show_gpu_info = "Auto" + +#* Toggles if the lower CPU graph should be inverted. +cpu_invert_lower = true + +#* Set to True to completely disable the lower CPU graph. +cpu_single_graph = false + +#* Show cpu box at bottom of screen instead of top. +cpu_bottom = false + +#* Shows the system uptime in the CPU box. +show_uptime = true + +#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo. +show_cpu_watts = true + +#* Show cpu temperature. +check_temp = true + +#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors. +cpu_sensor = "Auto" + +#* Show temperatures for cpu cores also if check_temp is True and sensors has been found. +show_coretemp = true + +#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core. +#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine. +#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries. +#* Example: "4:0 5:1 6:3" +cpu_core_map = "" + +#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine". +temp_scale = "celsius" + +#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024. +base_10_sizes = false + +#* Show CPU frequency. +show_cpu_freq = true + +#* How to calculate CPU frequency, available values: "first", "range", "lowest", "highest" and "average". +freq_mode = "first" + +#* Draw a clock at top of screen, formatting according to strftime, empty string to disable. +#* Special formatting: /host = hostname | /user = username | /uptime = system uptime +clock_format = "%X" + +#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort. +background_update = true + +#* Custom cpu model name, empty string to disable. +custom_cpu_name = "" + +#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ". +#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user" +disks_filter = "" + +#* Show graphs instead of meters for memory values. +mem_graphs = true + +#* Show mem box below net box instead of above. +mem_below_net = false + +#* Count ZFS ARC in cached and available memory. +zfs_arc_cached = true + +#* If swap memory should be shown in memory box. +show_swap = true + +#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk. +swap_disk = true + +#* If mem box should be split to also show disks info. +show_disks = true + +#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar. +only_physical = true + +#* Read disks list from /etc/fstab. This also disables only_physical. +use_fstab = true + +#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool) +zfs_hide_datasets = false + +#* Set to true to show available disk space for privileged users. +disk_free_priv = false + +#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view. +show_io_stat = true + +#* Toggles io mode for disks, showing big graphs for disk read/write speeds. +io_mode = false + +#* Set to True to show combined read/write io graphs in io mode. +io_graph_combined = false + +#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ". +#* Example: "/mnt/media:100 /:20 /boot:1". +io_graph_speeds = "" + +#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False. +net_download = 100 + +net_upload = 100 + +#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest. +net_auto = true + +#* Sync the auto scaling for download and upload to whichever currently has the highest scale. +net_sync = true + +#* Starts with the Network Interface specified here. +net_iface = "" + +#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes. +base_10_bitrate = "Auto" + +#* Show battery stats in top right if battery is present. +show_battery = true + +#* Which battery to use if multiple are present. "Auto" for auto detection. +selected_battery = "Auto" + +#* Show power stats of battery next to charge indicator. +show_battery_watts = true + +#* Set loglevel for "~/.local/state/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG". +#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info. +log_level = "WARNING" + +#* Automatically save current settings to config file on exit. +save_config_on_exit = false + +#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards. +nvml_measure_pcie_speeds = true + +#* Measure PCIe throughput on AMD cards, may impact performance on certain cards. +rsmi_measure_pcie_speeds = true + +#* Horizontally mirror the GPU graph. +gpu_mirror_graph = true + +#* Set which GPU vendors to show. Available values are "nvidia amd intel" +shown_gpus = "nvidia amd intel" + +#* Custom gpu0 model name, empty string to disable. +custom_gpu_name0 = "" + +#* Custom gpu1 model name, empty string to disable. +custom_gpu_name1 = "" + +#* Custom gpu2 model name, empty string to disable. +custom_gpu_name2 = "" + +#* Custom gpu3 model name, empty string to disable. +custom_gpu_name3 = "" + +#* Custom gpu4 model name, empty string to disable. +custom_gpu_name4 = "" + +#* Custom gpu5 model name, empty string to disable. +custom_gpu_name5 = "" diff --git a/config/config/btop/themes/tokyo.theme b/config/config/btop/themes/tokyo.theme new file mode 100644 index 0000000..b8200ec --- /dev/null +++ b/config/config/btop/themes/tokyo.theme @@ -0,0 +1,81 @@ +# Theme: tokyo-night +# By: Pascal Jaeger + +# Main bg +theme[main_bg]="#1a1b26" + +# Main text color +theme[main_fg]="#cfc9c2" + +# Title color for boxes +theme[title]="#cfc9c2" + +# Highlight color for keyboard shortcuts +theme[hi_fg]="#7dcfff" + +# Background color of selected item in processes box +theme[selected_bg]="#414868" + +# Foreground color of selected item in processes box +theme[selected_fg]="#cfc9c2" + +# Color of inactive/disabled text +theme[inactive_fg]="#565f89" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#7dcfff" + +# Cpu box outline color +theme[cpu_box]="#565f89" + +# Memory/disks box outline color +theme[mem_box]="#565f89" + +# Net up/down box outline color +theme[net_box]="#565f89" + +# Processes box outline color +theme[proc_box]="#565f89" + +# Box divider line and small boxes line color +theme[div_line]="#565f89" + +# Temperature graph colors +theme[temp_start]="#9ece6a" +theme[temp_mid]="#e0af68" +theme[temp_end]="#f7768e" + +# CPU graph colors +theme[cpu_start]="#9ece6a" +theme[cpu_mid]="#e0af68" +theme[cpu_end]="#f7768e" + +# Mem/Disk free meter +theme[free_start]="#9ece6a" +theme[free_mid]="#e0af68" +theme[free_end]="#f7768e" + +# Mem/Disk cached meter +theme[cached_start]="#9ece6a" +theme[cached_mid]="#e0af68" +theme[cached_end]="#f7768e" + +# Mem/Disk available meter +theme[available_start]="#9ece6a" +theme[available_mid]="#e0af68" +theme[available_end]="#f7768e" + +# Mem/Disk used meter +theme[used_start]="#9ece6a" +theme[used_mid]="#e0af68" +theme[used_end]="#f7768e" + +# Download graph colors +theme[download_start]="#9ece6a" +theme[download_mid]="#e0af68" +theme[download_end]="#f7768e" + +# Upload graph colors +theme[upload_start]="#9ece6a" +theme[upload_mid]="#e0af68" +theme[upload_end]="#f7768e" diff --git a/config/config/dconf/user b/config/config/dconf/user new file mode 100644 index 0000000..c9454f0 Binary files /dev/null and b/config/config/dconf/user differ diff --git a/config/config/electron.desktop b/config/config/electron.desktop new file mode 100644 index 0000000..482c434 --- /dev/null +++ b/config/config/electron.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Type=Application +Version=1.0 +Name=electron +Comment=electronstartup script +Exec=/usr/lib/electron38/electron +StartupNotify=false +Terminal=false \ No newline at end of file diff --git a/config/dconf/user b/config/dconf/user new file mode 100644 index 0000000..bc511c5 Binary files /dev/null and b/config/dconf/user differ diff --git a/config/gtk-3.0/settings.ini b/config/gtk-3.0/settings.ini new file mode 100644 index 0000000..f755c41 --- /dev/null +++ b/config/gtk-3.0/settings.ini @@ -0,0 +1,17 @@ +[Settings] +gtk-theme-name=Tokyonight-B-MB-Dark-Moon +gtk-icon-theme-name=Papirus-Dark +gtk-font-name=Luciole 11 +gtk-cursor-theme-name=Bibata-Modern-Ice +gtk-cursor-theme-size=24 +gtk-toolbar-style=GTK_TOOLBAR_ICONS +gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR +gtk-button-images=0 +gtk-menu-images=0 +gtk-enable-event-sounds=1 +gtk-enable-input-feedback-sounds=0 +gtk-xft-antialias=1 +gtk-xft-hinting=1 +gtk-xft-hintstyle=hintslight +gtk-xft-rgba=rgb +gtk-application-prefer-dark-theme=1 diff --git a/config/gtk-4.0/assets b/config/gtk-4.0/assets new file mode 120000 index 0000000..55219bd --- /dev/null +++ b/config/gtk-4.0/assets @@ -0,0 +1 @@ +/home/Antoine/.themes/Kanagawa-BL-LB-Dark/gtk-4.0/assets \ No newline at end of file diff --git a/config/gtk-4.0/gtk-dark.css b/config/gtk-4.0/gtk-dark.css new file mode 120000 index 0000000..20ba1ec --- /dev/null +++ b/config/gtk-4.0/gtk-dark.css @@ -0,0 +1 @@ +/home/Antoine/.themes/Kanagawa-BL-LB-Dark/gtk-4.0/gtk-dark.css \ No newline at end of file diff --git a/config/gtk-4.0/gtk.css b/config/gtk-4.0/gtk.css new file mode 120000 index 0000000..bb3ce8e --- /dev/null +++ b/config/gtk-4.0/gtk.css @@ -0,0 +1 @@ +/home/Antoine/.themes/Kanagawa-BL-LB-Dark/gtk-4.0/gtk.css \ No newline at end of file diff --git a/config/gtk-4.0/settings.ini b/config/gtk-4.0/settings.ini new file mode 100644 index 0000000..462e82f --- /dev/null +++ b/config/gtk-4.0/settings.ini @@ -0,0 +1,7 @@ +[Settings] +gtk-theme-name=Tokyonight-B-MB-Dark-Moon +gtk-icon-theme-name=Papirus-Dark +gtk-font-name=Luciole 11 +gtk-cursor-theme-name=Bibata-Modern-Ice +gtk-cursor-theme-size=24 +gtk-application-prefer-dark-theme=1 diff --git a/config/hypr/conf/binding.lua b/config/hypr/conf/binding.lua new file mode 100644 index 0000000..96e1cf2 --- /dev/null +++ b/config/hypr/conf/binding.lua @@ -0,0 +1,57 @@ +-- shutdown hyprland and lock +hl.bind( + "CTRL + ALT + M", + hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"), + { description = "hyprland shutdown" } +) +hl.bind("CTRL + ALT + L", hl.dsp.exec_cmd(lockscreen)) +-- launchers +hl.bind("ALT + D", hl.dsp.exec_cmd(fileManager)) +hl.bind("ALT + Q", hl.dsp.exec_cmd(terminal)) +hl.bind("ALT + N", hl.dsp.exec_cmd("kitty -e nvim")) +hl.bind("ALT + W", hl.dsp.exec_cmd(app_launcher)) +hl.bind("ALT + F", hl.dsp.exec_cmd(browser)) +hl.bind("ALT + Z", hl.dsp.exec_cmd("zotero")) +-- window management +hl.bind("ALT + V", hl.dsp.window.float({ action = "toggle" })) +hl.bind("ALT + F4", hl.dsp.window.kill("activewindow")) +-- move focus +hl.bind("ALT + L", hl.dsp.focus({ direction = "right" })) +hl.bind("ALT + H", hl.dsp.focus({ direction = "left" })) +hl.bind("ALT + J", hl.dsp.focus({ direction = "up" })) +hl.bind("ALT + K", hl.dsp.focus({ direction = "down" })) +-- move window +hl.bind("CTRL + SUPER + L", hl.dsp.window.move({ direction = "right" })) +hl.bind("CTRL + SUPER + H", hl.dsp.window.move({ direction = "left" })) +hl.bind("CTRL + SUPER + K", hl.dsp.window.move({ direction = "up" })) +hl.bind("CTRL + SUPER + J", hl.dsp.window.move({ direction = "down" })) +-- move to monitor +hl.bind("SUPER + A", hl.dsp.focus({ monitor = monitorA })) +hl.bind("SUPER + B", hl.dsp.focus({ monitor = monitorB })) +hl.bind("CTRL + SUPER + A", hl.dsp.window.move({ monitor = monitorA })) +hl.bind("CTRL + SUPER + B", hl.dsp.window.move({ monitor = monitorB })) +-- change workspace +hl.bind("SUPER + L", hl.dsp.focus({ workspace = "r+1" })) +hl.bind("SUPER + H", hl.dsp.focus({ workspace = "r-1" })) +hl.bind("SUPER + K", hl.dsp.window.move({ workspace = "r+1" })) +hl.bind("SUPER + J", hl.dsp.window.move({ workspace = "r-1" })) +-- screenshot +hl.bind( + "Print", + hl.dsp.exec_cmd( + [[filename="$(date +'%F-%T').png" && grimblast --freeze copysave area "$filename" && mkdir -p ~/Screenshots && mv "$filename" ~/Screenshots/ && nomacs ~/Screenshots/"$filename"]] + ) +) +hl.bind("SUPER + V", hl.dsp.exec_cmd("cliphist list | rofi -dmenu -display-columns 2 | cliphist decode | wl-copy")) + +-- mouse resize +hl.bind("ALT + mouse:272", hl.dsp.window.drag(), { mouse = true }) +hl.bind("ALT + mouse:273", hl.dsp.window.resize(), { mouse = true }) + +-- brightness +hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%+")) +hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%-")) +hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+")) +hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-")) +hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle")) +hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle")) diff --git a/config/hypr/conf/env.lua b/config/hypr/conf/env.lua new file mode 100644 index 0000000..bef6acd --- /dev/null +++ b/config/hypr/conf/env.lua @@ -0,0 +1,8 @@ +-- environment variables +hl.env("XDG_CURRENT_DESKTOP", "Hyprland") +hl.env("XDG_SESSION_TYPE", "wayland") +hl.env("WLR_NO_HARDWARE_CURSOR", 1) +hl.env("NVD_BACKEND", "direct") +hl.env("ELECTRON_OZONE_PLATFORM_HINT", "auto") +hl.env("SCREENSHOT_DIR", "$home/Screenshots") +hl.env("GDK_SCALE", 1) diff --git a/config/hypr/conf/input.lua b/config/hypr/conf/input.lua new file mode 100644 index 0000000..2fe4bea --- /dev/null +++ b/config/hypr/conf/input.lua @@ -0,0 +1,17 @@ +hl.config({ + input = { + kb_layout = "fr", + numlock_by_default = true, + + accel_profile = "adaptive", + follow_mouse = 1, + + sensitivity = -0.3, + touchpad = { + disable_while_typing = true, + scroll_factor = 1.2, + natural_scroll = false, + middle_button_emulation = false, + }, + }, +}) diff --git a/config/hypr/conf/monitor.lua b/config/hypr/conf/monitor.lua new file mode 100644 index 0000000..581fb5c --- /dev/null +++ b/config/hypr/conf/monitor.lua @@ -0,0 +1,13 @@ +hl.monitor({ + output = monitorA, + mode = "1366x768@60", + position = "0x0", + scale = "1", +}) + +hl.monitor({ + output = monitorB, + mode = "preferred", + position = "1366x0", + scale = "1.2", +}) diff --git a/config/hypr/conf/others.lua b/config/hypr/conf/others.lua new file mode 100644 index 0000000..5a55172 --- /dev/null +++ b/config/hypr/conf/others.lua @@ -0,0 +1,6 @@ +hl.misc({ + force_default_wallpaper = 0, + disable_hyprland_logo = true, + disable_splash_rendering = true, + vrr = 0, +}) diff --git a/config/hypr/conf/startup.lua b/config/hypr/conf/startup.lua new file mode 100644 index 0000000..1cab242 --- /dev/null +++ b/config/hypr/conf/startup.lua @@ -0,0 +1,8 @@ +hl.on("hyprland.start", function() + hl.exec_cmd("hyprpaper") + hl.exec_cmd("wl-paste --type text --watch cliphist store") + hl.exec_cmd("wl-paste --type image --watch cliphist store") + hl.exec_cmd("systemctl --user start hyprpolkitagent") + hl.exec_cmd("hyprctl setcursor Bibata-Modern-Ice 24") + hl.exec_cmd("protonmail-bridge") +end) diff --git a/config/hypr/conf/style.lua b/config/hypr/conf/style.lua new file mode 100644 index 0000000..b7a16d8 --- /dev/null +++ b/config/hypr/conf/style.lua @@ -0,0 +1,65 @@ +hl.config({ + general = { + gaps_in = 2.5, + gaps_out = 5, + border_size = 2, + col = { + active_border = { colors = { "rgba(6788D1ee)", "rgba(8EB962ee)" }, angle = 45 }, + inactive_border = "rgba(4E567Daa)", + }, + resize_on_border = true, + hover_icon_on_border = true, + allow_tearing = true, + layout = "dwindle", + snap = { + enabled = true, + }, + }, + decoration = { + rounding = 8, + rounding_power = 10, + + -- Change transparency of focused and unfocused windows + active_opacity = 1.0, + inactive_opacity = 1.0, + + shadow = { + enabled = false, + range = 4, + render_power = 3, + color = 0xee1a1a1a, + }, + + blur = { + enabled = true, + size = 3, + passes = 2, + vibrancy = 0.1696, + }, + }, + animations = { + enabled = false, + }, +}) +-- tiling managers +hl.config({ + dwindle = { + preserve_split = true, + }, + master = { + new_status = "master", + orientation = "center", + mfact = "0.5", + }, + scrolling = { + fullscreen_on_one_column = true, + }, +}) +-- others +hl.config({ + misc = { + disable_hyprland_logo = true, + disable_splash_rendering = true, + force_default_wallpaper = 0, + }, +}) diff --git a/config/hypr/conf/variables.lua b/config/hypr/conf/variables.lua new file mode 100644 index 0000000..41f88f5 --- /dev/null +++ b/config/hypr/conf/variables.lua @@ -0,0 +1,9 @@ +terminal = "kitty" +fileManager = "nautilus" +menu = "wofi --show drun" +home = "/home/afoucaultc/" +lockscreen = "hyprlock" +browser = "zen-browser" +app_launcher = "~/.config/rofi/launchers/type-1/launcher.sh" +monitorA = "eDP-1" +monitorB = "DP-2" diff --git a/config/hypr/conf/windowrules.lua b/config/hypr/conf/windowrules.lua new file mode 100644 index 0000000..9e6ffa1 --- /dev/null +++ b/config/hypr/conf/windowrules.lua @@ -0,0 +1,7 @@ +hl.window_rule({ + name = "opacity kitty", + match = { + class = "kitty", + }, + opacity = "0.9", +}) diff --git a/config/hypr/conf/workspace.lua b/config/hypr/conf/workspace.lua new file mode 100644 index 0000000..e69de29 diff --git a/config/hypr/hyprland.conf b/config/hypr/hyprland.conf new file mode 100644 index 0000000..e5f4322 --- /dev/null +++ b/config/hypr/hyprland.conf @@ -0,0 +1,4 @@ +source = ~/.config/hypr/hyprland_config/variables.conf +source = ~/.config/hypr/hyprland_config/* + + diff --git a/config/hypr/hyprland.lua b/config/hypr/hyprland.lua new file mode 100644 index 0000000..59d9010 --- /dev/null +++ b/config/hypr/hyprland.lua @@ -0,0 +1,9 @@ +require("conf.variables") +require("conf.env") +require("conf.binding") +require("conf.input") +require("conf.monitor") +require("conf.startup") +require("conf.style") +require("conf.windowrules") +require("conf.workspace") diff --git a/config/hypr/hyprland_config/.config/hypr/old.txt b/config/hypr/hyprland_config/.config/hypr/old.txt new file mode 100644 index 0000000..fd64eaf --- /dev/null +++ b/config/hypr/hyprland_config/.config/hypr/old.txt @@ -0,0 +1,16 @@ +# windows rules (to see) +windowrulev2 = center, floating:[1] +windowrulev2 = float,class:^(xdg-desktop-portal-gtk)$ +windowrulev2 = float,title:^(Picture-in-Picture)$ +windowrulev2 = opacity 0.95 override 0.95 override 0.95 override, class: firefox +windowrulev2 = opacity 1 override 1 override, class:^(org.pwmt.zathura)$ +windowrulev2 = opacity 1 override 1 override, class:^(org.pwmt.nomacs)$ +windowrulev2 = opacity 1.0 override 1 override, class:^(gimp)$ + +windowrulev2 = opacity 1.0 override 1 override, class:^(steam)$ +windowrulev2 = opacity 1.0 override 1 override, title:^(Steam)$ +windowrulev2 = opacity 1.0 override 1 override, class:^(steam_app_[0-9]+)$ +windowrulev2 = opacity 1.0 override 1 override, class:^(steam_app_[0-9]+)$,floating:0 + +windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 + diff --git a/config/hypr/hyprland_config/binding.conf b/config/hypr/hyprland_config/binding.conf new file mode 100644 index 0000000..d51abe7 --- /dev/null +++ b/config/hypr/hyprland_config/binding.conf @@ -0,0 +1,89 @@ +# Brightness +bind = ALT , up, exec, brightnessctl -d *::kbd_backlight set +33% +bind = ALT , down, exec, brightnessctl -d *::kbd_backlight set -33% + +# shutdown (window, hyprland) +bind = ALT, F4, killactive, +bind = CTRL SUPER, M, exit, +bind = CTRL ALT, L, exec, $lockscreen + +# apps +bind = ALT, D, exec, $fileManager +bind = ALT, N, exec, $terminal nvim +bind = ALT, Q, exec, $terminal +bind = ALT, W, exec, $app_launcher +bind = ALT, F, exec, $browser +bind = ALT, Z, exec, zotero + +# Move focus with mod0 + arrow keys +bind = CTRL SUPER, h, movefocus, l +bind = CTRL SUPER, l, movefocus, r +bind = CTRL SUPER, k, movefocus, u +bind = CTRL SUPER, j, movefocus, d + +# screenshot +bind =, Print, exec, filename="$(date +'%F-%T').png" && grimblast --freeze copysave area "$filename" && mkdir -p ~/Screenshots && mv "$filename" ~/Screenshots/ && nomacs ~/Screenshots/"$filename" +bind = SUPER, V, exec, cliphist list | rofi -dmenu -display-columns 2 | cliphist decode | wl-copy + +# Switch workspaces +bind = SUPER, ampersand, workspace, 1 +bind = SUPER, eacute, workspace, 2 +bind = SUPER, quotedbl, workspace, 3 +bind = SUPER, apostrophe, workspace, 4 +bind = SUPER, parenleft, workspace, 5 +bind = SUPER, minus, workspace, 6 +bind = SUPER, egrave, workspace, 7 +bind = SUPER, underscore, workspace, 8 +bind = SUPER, ccedilla, workspace, 9 +bind = SUPER, agrave, workspace, 10 +bind = SUPER, up, workspace, name:secondscreen +bind = SUPER, Q, workspace, name:coding + +# Move to workspace +bind = SUPER SHIFT, ampersand, movetoworkspace, 1 +bind = SUPER SHIFT, eacute, movetoworkspace, 2 +bind = SUPER SHIFT, quotedbl, movetoworkspace, 3 +bind = SUPER SHIFT, apostrophe, movetoworkspace, 4 +bind = SUPER SHIFT, parenleft, movetoworkspace, 5 +bind = SUPER SHIFT, minus, movetoworkspace, 6 +bind = SUPER SHIFT, egrave, movetoworkspace, 7 +bind = SUPER SHIFT, underscore, movetoworkspace, 8 +bind = SUPER SHIFT, ccedilla, movetoworkspace, 9 +bind = SUPER SHIFT, agrave, movetoworkspace, 10 + +bind = SUPER SHIFT, up, movetoworkspace, name:secondscreen +bind = SUPER SHIFT, Q, movetoworkspace, name:coding + +bind = SUPER, down, workspace, 1 +bind = SUPER SHIFT, down, movetoworkspace, 1 + +# Scroll through existing workspaces with mod0 + scroll or arrows +bind = SUPER, mouse_down, workspace, +1 +bind = SUPER, mouse_up, workspace, -1 +bind = SUPER, l, workspace, +1 +bind = SUPER, h, workspace, -1 + +bind = SUPER SHIFT, mouse_down, movetoworkspace, +1 +bind = SUPER SHIFT, mouse_up, movetoworkspace, -1 +bind = SUPER SHIFT, right, movetoworkspace, +1 +bind = SUPER SHIFT, left, movetoworkspace, -1 + +# floating windows +bind = ALT, V, togglefloating, +bind = ALT, Y, togglesplit +binde = ALT_CTRL, K, resizeactive, 40 0 +binde = ALT_CTRL, J, resizeactive, -40 0 +binde = ALT_SHIFT, K, resizeactive, 40 0 +binde = ALT_SHIFT, J, resizeactive, -40 0 + +# Move/resize windows with mouse +bindm = ALT, mouse:272, movewindow +bindm = ALT, mouse:273, resizewindow + +# Audio control +bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ +bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle +bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+ +bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%- diff --git a/config/hypr/hyprland_config/env.conf b/config/hypr/hyprland_config/env.conf new file mode 100644 index 0000000..179c358 --- /dev/null +++ b/config/hypr/hyprland_config/env.conf @@ -0,0 +1,8 @@ +# environment variables +env = XDG_CURRENT_DESKTOP,Hyprland +env = XDG_SESSION_TYPE,wayland +env = WLR_NO_HARDWARE_CURSOR,1 +env = NVD_BACKEND,direct +env = ELECTRON_OZONE_PLATFORM_HINT,auto +env = SCREENSHOT_DIR, $home/Screenshots +env = GDK_SCALE,1 diff --git a/config/hypr/hyprland_config/input.conf b/config/hypr/hyprland_config/input.conf new file mode 100644 index 0000000..2bfc2a1 --- /dev/null +++ b/config/hypr/hyprland_config/input.conf @@ -0,0 +1,23 @@ +# keyboard and mouse +input { + kb_layout = fr + kb_variant = + kb_model = + kb_options = + kb_rules = + numlock_by_default = true + + follow_mouse = 1 + + accel_profile = adaptive + # force_no_accel = true + + sensitivity = -0.3 # -1.0 - 1.0, 0 means no modification. + + touchpad { + natural_scroll = false + scroll_factor=2 + disable_while_typing = true + middle_button_emulation = false + } +} diff --git a/config/hypr/hyprland_config/monitor.conf b/config/hypr/hyprland_config/monitor.conf new file mode 100644 index 0000000..d2b654b --- /dev/null +++ b/config/hypr/hyprland_config/monitor.conf @@ -0,0 +1,4 @@ +# monitors settings +monitor=eDP-1,1366x768@60,0x0,1 +monitor=DP-2,1680x1050@59.95400,1366x0,1 +monitor=HDMI-A-1,1920x1080@60.00000,1366x0,1 diff --git a/config/hypr/hyprland_config/others.conf b/config/hypr/hyprland_config/others.conf new file mode 100644 index 0000000..ed47541 --- /dev/null +++ b/config/hypr/hyprland_config/others.conf @@ -0,0 +1,36 @@ +dwindle { + pseudotile = true # Master switch for pseudotiling. Enabling is bound to mod0 + P in the keybinds section below + preserve_split = true # You probably want this +} + +master { + new_status = slave + mfact = 0.50 + orientation = center +} + +misc { + force_default_wallpaper = 0 + disable_hyprland_logo = true + vfr = true + animate_manual_resizes = true +} + +layout { + # single_window_aspect_ratio = 4 3 +} + +gesture = 3, horizontal, workspace + +device { + name = epic-mouse-v1 + sensitivity = -0.5 +} + +binds { + allow_workspace_cycles = true +} + +ecosystem { + no_donation_nag = true +} diff --git a/config/hypr/hyprland_config/startup.conf b/config/hypr/hyprland_config/startup.conf new file mode 100644 index 0000000..abfacd6 --- /dev/null +++ b/config/hypr/hyprland_config/startup.conf @@ -0,0 +1,9 @@ +# startup programs +# exec/execr = on each reload, exec-once/execr-once = only on launch, exec-shutdown = command on shutdown +# exec-once = hyprpaper +exec-once = wl-paste --type text --watch cliphist store +exec-once = wl-paste --type image --watch cliphist store +exec-once = systemctl --user start hyprpolkitagent +exec-once= hyprctl setcursor Bibata-Modern-Ice 24 +# exec-once = hyprpanel +# exec-once = hyprsunset diff --git a/config/hypr/hyprland_config/style.conf b/config/hypr/hyprland_config/style.conf new file mode 100644 index 0000000..c256518 --- /dev/null +++ b/config/hypr/hyprland_config/style.conf @@ -0,0 +1,67 @@ +# windows and tiling +general { + gaps_in = 2.5 + gaps_out = 5 + + border_size = 1 + + col.active_border = rgba(00ffd2ee) rgba(004687ee) 45deg + col.inactive_border = rgba(00ffd2aa) + + resize_on_border = true + allow_tearing = true + layout = master + hover_icon_on_border = true + snap { + enabled = true + } +} + +scrolling { + column_width = 0.7 + focus_fit_method = 0 +} + +dwindle { + smart_split = true +} + +decoration { + rounding = 5 + rounding_power = 10 + active_opacity = 1 + inactive_opacity = 1 + fullscreen_opacity = 1 + border_part_of_window = true + + blur { + enabled = false + ignore_opacity = true + size = 1 + passes = 1 + new_optimizations = true + brightness = 0.5 + } + shadow { + enabled = false + } +} + +animations { + enabled = false + bezier = custom,0.13, 1, 0.75,1 + + animation = windows, 1, 3, custom, popin + animation = windowsOut, 1, 3, custom, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 3, default + animation = windowsMove, 1, 2.5, custom, slide +} +cursor { + inactive_timeout = 3 + no_hardware_cursors = 0 + use_cpu_buffer = true + persistent_warps = true +} diff --git a/config/hypr/hyprland_config/variables.conf b/config/hypr/hyprland_config/variables.conf new file mode 100644 index 0000000..353d6ef --- /dev/null +++ b/config/hypr/hyprland_config/variables.conf @@ -0,0 +1,10 @@ +$terminal = kitty +$fileManager = nautilus +$menu = wofi --show drun +$home = /home/afoucaultc/ +$lockscreen = hyprlock +$browser = zen-browser +$app_launcher = ~/.config/rofi/launchers/type-1/launcher.sh + +$monitorA = eDP-1 +$monitorB = HDMI-A-1 diff --git a/config/hypr/hyprland_config/windowrules.conf b/config/hypr/hyprland_config/windowrules.conf new file mode 100644 index 0000000..b479a2c --- /dev/null +++ b/config/hypr/hyprland_config/windowrules.conf @@ -0,0 +1,32 @@ +windowrule { + name = fullscreen opacity + match:fullscreen = true + opacity = 1 +} +windowrule { + name = opacity zen + match:class = zen + opacity = 1 +} + +windowrule { + name = opacity kitty + match:class = kitty + opacity = 1 +} + +windowrule { + name = opacity zathura + match:class = org.pwmt.zathura + opacity = 1 +} +windowrule { + name = gnufloat + match:class = Gnuplot + float = on +} +windowrule { + name = opacity typora + match:class = Typora + opacity = 1 +} diff --git a/config/hypr/hyprland_config/workspace.conf b/config/hypr/hyprland_config/workspace.conf new file mode 100644 index 0000000..6643ae6 --- /dev/null +++ b/config/hypr/hyprland_config/workspace.conf @@ -0,0 +1,12 @@ +# workspaces +workspace = 1 , default=true, persistent:true +workspace = 2 , persistent:true +workspace = 3 , persistent:true +workspace = 4 , persistent:true +workspace = 5 , persistent:true +workspace = 6 , persistent:true +workspace = 7 , persistent:true +workspace = 8 , persistent:true +workspace = 9 , persistent:true +workspace = 10 persistent:true +workspace = name:coding, $monitorA, rounding:false, decorate:true, gapsin:0, gapsout:0, border:true, persistent:true diff --git a/config/hypr/hyprlock.conf b/config/hypr/hyprlock.conf new file mode 100644 index 0000000..c05dca9 --- /dev/null +++ b/config/hypr/hyprlock.conf @@ -0,0 +1,73 @@ +source = ~/.config/hypr/variables.conf + +# BACKGROUND +background { + monitor = + #path = screenshot + path = ~/.config/hypr/wallpaper/save.jpg + color = #000000 + blur_passes = 0 + contrast = 1 + brightness = 0.5 + vibrancy = 0.2 + vibrancy_darkness = 0.2 +} + +# GENERAL +general { + no_fade_in = true + no_fade_out = true + hide_cursor = false + grace = 0 + disable_loading_bar = true +} + +# INPUT FIELD +input-field { + monitor = + size = 250, 60 + outline_thickness = 2 + dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.35 # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = true + outer_color = rgba(1, 1, 1, 0) + inner_color = rgba(1, 1, 1, 0.2) + font_color = #000000 + fade_on_empty = false + rounding = -1 + check_color = rgb(204, 136, 34) + placeholder_text = Input Password... + hide_input = false + position = 0, -200 + halign = center + valign = center +} + +# DATE +label { + monitor = + text = cmd[update:1000] echo "$(date +"%A, %B %d")" + color = rgba(255,255,255, 0.75) + font_size = 22 + font_family = Luciole + position = 0, 100 + halign = center + valign = center +} + +# TIME +label { + monitor = + text = cmd[update:1000] echo "$(date +"%-I:%M")" + color = rgba(255,255,255, 0.75) + font_size = 95 + font_family = Luciole + position = 0, 200 + halign = center + valign = center +} + + +auth { + fingerprint:enabled=true +} diff --git a/config/hypr/hyprpaper.conf b/config/hypr/hyprpaper.conf new file mode 100644 index 0000000..7bcb67e --- /dev/null +++ b/config/hypr/hyprpaper.conf @@ -0,0 +1,11 @@ +wallpaper { + monitor = eDP-1 + path = /home/afoucaultc/.config/hypr/wallpaper/hyprwallpaper.png + fit_mode = cover +} +wallpaper { + monitor = DP-2 + path = /home/afoucaultc/.config/hypr/wallpaper/hyprwallpaper.png + fit_mode = cover +} +splash = false diff --git a/config/hypr/hyprsunset.conf b/config/hypr/hyprsunset.conf new file mode 100644 index 0000000..7bd6a1b --- /dev/null +++ b/config/hypr/hyprsunset.conf @@ -0,0 +1,12 @@ +max-gamma = 150 + +profile { + time = 7:30 + identity = true +} + +profile { + time = 21:00 + temperature = 5500 + gamma = 0.8 +} diff --git a/config/hypr/hyprtoolkit.conf b/config/hypr/hyprtoolkit.conf new file mode 100644 index 0000000..31f520a --- /dev/null +++ b/config/hypr/hyprtoolkit.conf @@ -0,0 +1,18 @@ +background = #D9C49C +base = #F2E2CE +text = #0D0000 +alternate_base = #BF895A +bright_text = #F2E2CE +accent = #8C030E +accent_secondary = #400202 + +font_family = Sans Serif +rounding_large = 5 +rounding_small = 2 +h1_size = 19 +h2_size = 15 +h3_size = 13 +font_size = 11 +small_font_size = 10 +icon_theme = + diff --git a/config/hypr/wallpaper/colorpalettes.txt b/config/hypr/wallpaper/colorpalettes.txt new file mode 100644 index 0000000..e14e547 --- /dev/null +++ b/config/hypr/wallpaper/colorpalettes.txt @@ -0,0 +1,25 @@ +Light mode : +Lumineux +#73020C +#D9C49C +#F2E2CE +#BF895A +#0D0000 +Sombre +#73020C +#010D00 +#F2E2CE +#BF895A +#260101 +Dark mode : +#1C1D26 +#222940 +#2F4C73 +#4681A6 +#56ACBF +sombre +#1C1D26 +#242426 +#222940 +#253659 +#3A668C diff --git a/config/hypr/wallpaper/hyprwallpaper.png b/config/hypr/wallpaper/hyprwallpaper.png new file mode 100644 index 0000000..73bdeef Binary files /dev/null and b/config/hypr/wallpaper/hyprwallpaper.png differ diff --git a/config/hypr/wallpaper/wallpaper.jpg b/config/hypr/wallpaper/wallpaper.jpg new file mode 100644 index 0000000..2a45c1f Binary files /dev/null and b/config/hypr/wallpaper/wallpaper.jpg differ diff --git a/config/hyprpanel/config.json b/config/hyprpanel/config.json new file mode 100644 index 0000000..fc190cb --- /dev/null +++ b/config/hyprpanel/config.json @@ -0,0 +1,146 @@ +{ + "bar.customModules.storage.paths": [ + "/" + ], + "theme.matugen_settings.mode": "dark", + "theme.font.name": "Luciole", + "theme.font.label": "Luciole", + "terminal": "$terminal", + "menus.transition": "none", + "menus.transitionTime": 0, + "theme.bar.menus.enableShadow": false, + "theme.bar.floating": false, + "theme.bar.location": "top", + "bar.autoHide": "fullscreen", + "theme.bar.buttons.enableBorders": false, + "theme.bar.buttons.borderSize": "0", + "theme.bar.border.location": "none", + "theme.bar.border.width": "0.2em", + "theme.bar.enableShadow": false, + "theme.bar.border_radius": "0.1em", + "theme.bar.outer_spacing": "0em", + "theme.font.size": "1rem", + "menus.media.hideAuthor": false, + "menus.media.hideAlbum": false, + "menus.media.displayTime": true, + "menus.media.displayTimeTooltip": true, + "notifications.position": "top right", + "theme.notification.enableShadow": false, + "notifications.clearDelay": 100, + "notifications.timeout": 5000, + "bar.layouts": { + "1": { + "left": [ + "dashboard", + "workspaces", + "windowtitle" + ], + "middle": [ + "media" + ], + "right": [ + "volume", + "clock", + "notifications" + ] + }, + "eDP-1": { + "left": [ + "clock", + "workspaces", + "windowtitle" + ], + "middle": [ + "media" + ], + "right": [ + "volume", + "microphone", + "network", + "bluetooth", + "battery", + "hyprsunset", + "systray", + "dashboard" + ] + }, + "DP-2": {} + }, + "menus.clock.time.military": true, + "menus.clock.time.hideSeconds": true, + "menus.clock.weather.location": "Paris", + "menus.clock.weather.unit": "metric", + "menus.dashboard.powermenu.avatar.image": "/home/afoucaultc/.config/hypr/wallpaper/avatar.jpg", + "menus.dashboard.controls.enabled": true, + "menus.dashboard.stats.enabled": true, + "menus.dashboard.shortcuts.enabled": true, + "menus.dashboard.directories.enabled": false, + "theme.bar.buttons.modules.microphone.enableBorder": false, + "theme.bar.buttons.modules.ram.enableBorder": false, + "theme.bar.buttons.modules.netstat.enableBorder": true, + "bar.customModules.netstat.dynamicIcon": true, + "bar.customModules.worldclock.tz": [ + "Europe/Paris" + ], + "theme.bar.buttons.modules.power.enableBorder": false, + "bar.clock.format": "%a %b %d %H:%M", + "bar.clock.showIcon": false, + "bar.clock.showTime": true, + "theme.bar.buttons.media.enableBorder": false, + "theme.bar.menus.monochrome": false, + "wallpaper.pywal": true, + "wallpaper.image": "/home/afoucaultc/.config/hypr/wallpaper/wallpaper.jpg", + "theme.bar.menus.opacity": 100, + "theme.bar.transparent": true, + "theme.bar.buttons.style": "default", + "theme.bar.opacity": 85, + "theme.bar.menus.background": "#11111b", + "theme.bar.menus.cards": "#1e1e2e", + "theme.bar.menus.icons.active": "#b4befe", + "theme.bar.menus.icons.passive": "#585b70", + "theme.bar.buttons.opacity": 100, + "theme.bar.buttons.background_hover_opacity": 100, + "theme.bar.buttons.background_opacity": 100, + "theme.bar.buttons.monochrome": false, + "theme.bar.buttons.text": "#b4befe", + "theme.bar.buttons.workspaces.hover": "#f66151", + "theme.bar.buttons.workspaces.occupied": "#62a0ea", + "theme.bar.buttons.workspaces.available": "#b4befe", + "theme.bar.buttons.workspaces.active": "#8ff0a4", + "menus.dashboard.shortcuts.left.shortcut1.tooltip": "Zen Browser", + "menus.dashboard.shortcuts.left.shortcut1.command": "zen-browser", + "menus.dashboard.shortcuts.left.shortcut1.icon": "◎", + "menus.dashboard.shortcuts.left.shortcut3.tooltip": "Neovim", + "menus.dashboard.shortcuts.left.shortcut3.command": "kitty nvim", + "menus.dashboard.shortcuts.left.shortcut3.icon": "⌨️", + "menus.dashboard.shortcuts.left.shortcut2.tooltip": "Deezer", + "menus.dashboard.shortcuts.left.shortcut2.command": "zen-browser https://www.deezer.com/fr/", + "menus.dashboard.shortcuts.left.shortcut2.icon": "▶", + "menus.dashboard.shortcuts.left.shortcut4.command": "~/.config/rofi/launchers/type-1/launcher.sh", + "menus.dashboard.shortcuts.right.shortcut1.command": "dolphin", + "menus.dashboard.shortcuts.right.shortcut1.icon": "🗂", + "menus.dashboard.shortcuts.right.shortcut1.tooltip": "File manager", + "menus.dashboard.shortcuts.right.shortcut3.tooltip": "Zotero", + "menus.dashboard.shortcuts.right.shortcut3.command": "zotero", + "menus.dashboard.shortcuts.right.shortcut3.icon": "📚", + "theme.bar.buttons.modules.weather.enableBorder": false, + "bar.customModules.weather.unit": "metric", + "theme.font.weight": 100, + "theme.bar.buttons.y_margins": "0.1em", + "theme.bar.buttons.spacing": "0.3em", + "menus.clock.weather.enabled": false, + "bar.customModules.hyprsunset.temperature": "4000k", + "theme.bar.background": "#3d3846", + "bar.workspaces.monitorSpecific": true, + "theme.bar.buttons.workspaces.enableBorder": false, + "bar.workspaces.applicationIconOncePerWorkspace": true, + "bar.workspaces.showAllActive": true, + "bar.customModules.microphone.label": false, + "scalingPriority": "hyprland", + "wallpaper.enable": true, + "theme.matugen": true, + "theme.matugen_settings.scheme_type": "content", + "theme.matugen_settings.contrast": 0, + "theme.matugen_settings.variation": "standard_1", + "tear": true +} \ No newline at end of file diff --git a/config/hyprpanel/modules.json b/config/hyprpanel/modules.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/config/hyprpanel/modules.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/config/hyprpanel/modules.scss b/config/hyprpanel/modules.scss new file mode 100644 index 0000000..e69de29 diff --git a/config/inkscape/cphistory.xml b/config/inkscape/cphistory.xml new file mode 100644 index 0000000..cd91a84 --- /dev/null +++ b/config/inkscape/cphistory.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/config/inkscape/dialogs-state-ex.ini b/config/inkscape/dialogs-state-ex.ini new file mode 100644 index 0000000..63931fe --- /dev/null +++ b/config/inkscape/dialogs-state-ex.ini @@ -0,0 +1,35 @@ +[Windows] +Count=1 + +[Window0Column0] +Notebook0Dialogs=ObjectProperties;FillStroke;Export;AlignDistribute;Objects;Text; +Notebook0Height=893 +Notebook0ActiveTab=1 +ColumnWidth=543 +NotebookCount=1 +BeforeCanvas=false + +[Window0] +ColumnCount=1 +Floating=false + +[transient] +state1= +dialogs1=CloneTiler; +state2=[Windows]\nCount=1\n\n[Window0Column0]\nNotebook0Dialogs=DocumentProperties;\nNotebookCount=1\n\n[Window0]\nColumnCount=1\nPosition=true\nx=0\ny=0\nwidth=831\nheight=673\n +dialogs2=DocumentProperties; +state3=[Windows]\nCount=1\n\n[Window0Column0]\nNotebook0Dialogs=DocumentResources;\nNotebookCount=1\n\n[Window0]\nColumnCount=1\nPosition=true\nx=0\ny=0\nwidth=613\nheight=678\n +dialogs3=DocumentResources; +state4=[Windows]\nCount=1\n\n[Window0Column0]\nNotebook0Dialogs=ExtensionsGallery;\nNotebookCount=1\n\n[Window0]\nColumnCount=1\nPosition=true\nx=0\ny=0\nwidth=1186\nheight=777\n +dialogs4=ExtensionsGallery; +state5= +dialogs5=FilterEffects; +state6= +dialogs6=FilterGallery; +state7= +dialogs7=FontCollections; +state8=[Windows]\nCount=1\n\n[Window0Column0]\nNotebook0Dialogs=Preferences;\nNotebookCount=1\n\n[Window0]\nColumnCount=1\nPosition=true\nx=0\ny=0\nwidth=1447\nheight=672\n +dialogs8=Preferences; +state9= +dialogs9=XMLEditor; +count=9 diff --git a/config/inkscape/extension-errors.log b/config/inkscape/extension-errors.log new file mode 100644 index 0000000..7803f4f --- /dev/null +++ b/config/inkscape/extension-errors.log @@ -0,0 +1,15 @@ +L'extension « XFIG Input » n'a pas été chargée, car une dépendance est manquante. Dépendance: + type: executable + emplacement: chemin + chaîne: fig2dev + +L'extension « Export to PDF via Scribus » n'a pas été chargée, car une dépendance est manquante. Dépendance: + type: executable + emplacement: chemin + chaîne: scribus + +L'extension « Optimized PNG » n'a pas été chargée, car une dépendance est manquante. Dépendance: + type: executable + emplacement: chemin + chaîne: optipng + diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/info.json b/config/inkscape/extensions/org.inkscape.extension.30306/info.json new file mode 100644 index 0000000..50e4978 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/info.json @@ -0,0 +1 @@ +{"id": "org.inkscape.extension.30306", "author": "burghoff", "name": "Scientific Inkscape", "type": "application/zip", "license": "GPLv3", "icon": "https://media.inkscape.org/media/resources/thumb/Thumbnail.png", "summary": "A set of extensions for efficiently importing, editing, and resizing scientific figures.\r", "links": {"html": "https://inkscape.org/gallery/item/30306/", "json": "https://inkscape.org/gallery/item/30306/json/", "file": "https://media.inkscape.org/media/resources/file/scientific_inkscape_ZeJG1fk.zip"}, "verified": true, "stats": {"liked": 18, "downloaded": 1154, "revisions": 12, "extra": 7}, "dates": {"created": "2021-11-21T17:57:19+00:00", "edited": "2025-05-18T22:59:59.756843+00:00"}, "Inkscape Version": ["1.0", "1.1", "1.2", "1.3", "1.4"], "Extension Type": ["export", "import"], "Platform": ["linux", "os x", "windows"], "previous": {"Inkscape Version": ["1.0", "1.0", "1.0", "1.0", "1.0", "1.0", "1.0", "1.0", "1.0", "1.0", "1.0", "1.0", "1.1", "1.1", "1.1", "1.1", "1.1", "1.1", "1.1", "1.1", "1.1", "1.1", "1.1", "1.1", "1.1.2", "1.1.2", "1.1.2", "1.2", "1.2", "1.2", "1.2", "1.2", "1.2", "1.2", "1.2", "1.2", "1.2", "1.2", "1.2", "1.3", "1.3", "1.3", "1.3", "1.4", "1.4", "1.4"], "Extension Type": ["export", "export", "export", "export", "export", "export", "export", "export", "import", "import", "import", "import", "import", "import", "import", "import", "text", "text", "text", "text", "text"], "Platform": ["linux", "linux", "linux", "linux", "linux", "linux", "linux", "linux", "linux", "linux", "linux", "linux", "os x", "os x", "os x", "os x", "os x", "os x", "os x", "os x", "os x", "os x", "os x", "os x", "windows", "windows", "windows", "windows", "windows", "windows", "windows", "windows", "windows", "windows", "windows", "windows"]}, "files": ["org.inkscape.extension.30306/scientific_inkscape/applytransform_mod.py", "org.inkscape.extension.30306/scientific_inkscape/autoexporter.inx", "org.inkscape.extension.30306/scientific_inkscape/autoexporter.py", "org.inkscape.extension.30306/scientific_inkscape/autoexporter_script.py", "org.inkscape.extension.30306/scientific_inkscape/combine_by_color.inx", "org.inkscape.extension.30306/scientific_inkscape/combine_by_color.py", "org.inkscape.extension.30306/scientific_inkscape/dhelpers.py", "org.inkscape.extension.30306/scientific_inkscape/favorite_markers.inx", "org.inkscape.extension.30306/scientific_inkscape/favorite_markers.py", "org.inkscape.extension.30306/scientific_inkscape/flatten_plots.inx", "org.inkscape.extension.30306/scientific_inkscape/flatten_plots.py", "org.inkscape.extension.30306/scientific_inkscape/gallery_viewer.inx", "org.inkscape.extension.30306/scientific_inkscape/gallery_viewer.py", "org.inkscape.extension.30306/scientific_inkscape/gallery_viewer_script.py", "org.inkscape.extension.30306/scientific_inkscape/gallery_viewer_template.html", "org.inkscape.extension.30306/scientific_inkscape/homogenizer.inx", "org.inkscape.extension.30306/scientific_inkscape/homogenizer.py", "org.inkscape.extension.30306/scientific_inkscape/image_helpers.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/base.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/bezier.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/colors.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/command.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/css.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated/deprecatedeffect.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated/main.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated/meta.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/bezmisc.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/cspsubdiv.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/cubicsuperpath.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/ffgeom.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/README.rst", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/run_command.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/simplepath.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/simplestyle.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/simpletransform.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_base.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_filters.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_groups.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_image.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_meta.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_parser.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_polygons.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_selected.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_svg.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_text.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_use.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_utils.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/extensions.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/app.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/asyncme.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/listview.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/pixmap.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/README.md", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/tester.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/window.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/interfaces/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/interfaces/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/interfaces/IElement.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/inx.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/localization.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/paths.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/ports.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/properties.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/styles.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/decorators.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/filters.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/inkscape.extension.rng", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/inkscape.extension.schema", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/inx.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/mock.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/svg.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/test_inx_file.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/word.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/xmldiff.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/cache.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/font_properties.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/parser.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/typelibs/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/typelibs/fontconfig-2.0.typelib", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/typelibs/freetype2-2.0.typelib", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/typelibs/PangoFc-1.0.typelib", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/typelibs/PangoFT2-1.0.typelib", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/utils.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/transforms.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/turtle.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tween.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/units.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/utils.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/__main__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/big5freq.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/big5prober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/chardistribution.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/charsetgroupprober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/charsetprober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/cli/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/cli/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/cli/chardetect.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/codingstatemachine.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/codingstatemachinedict.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/cp949prober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/enums.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/escprober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/escsm.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/eucjpprober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/euckrfreq.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/euckrprober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/euctwfreq.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/euctwprober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/gb2312freq.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/gb2312prober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/hebrewprober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/jisfreq.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/johabfreq.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/johabprober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/jpcntx.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langbulgarianmodel.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langgreekmodel.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langhebrewmodel.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langhungarianmodel.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langrussianmodel.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langthaimodel.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langturkishmodel.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/latin1prober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/macromanprober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/mbcharsetprober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/mbcsgroupprober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/mbcssm.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/metadata/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/metadata/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/metadata/languages.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/py.typed", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/resultdict.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/sbcharsetprober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/sbcsgroupprober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/sjisprober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/universaldetector.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/utf1632prober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/utf8prober.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/version.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/cssselect/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/cssselect/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/cssselect/parser.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/cssselect/py.typed", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/cssselect/xpath.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/__main__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/afmLib.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/agl.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cffLib/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cffLib/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cffLib/specializer.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cffLib/width.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/builder.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/errors.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/geometry.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/table_builder.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/unbuilder.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/config/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/config/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/__main__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/benchmark.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/cli.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/cu2qu.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/errors.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/ufo.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/designspaceLib/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/designspaceLib/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/designspaceLib/split.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/designspaceLib/statNames.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/designspaceLib/types.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/encodings/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/encodings/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/encodings/codecs.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/encodings/MacRoman.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/encodings/StandardEncoding.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/feaLib/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/feaLib/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/feaLib/__main__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/feaLib/ast.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/feaLib/builder.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/feaLib/error.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/feaLib/lexer.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/feaLib/location.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/feaLib/lookupDebugInfo.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/feaLib/parser.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/feaLib/variableScalar.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/fontBuilder.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/help.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/merge/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/merge/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/merge/__main__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/merge/base.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/merge/cmap.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/merge/layout.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/merge/options.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/merge/tables.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/merge/unicode.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/merge/util.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/arrayTools.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/bezierTools.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/classifyTools.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/cliTools.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/configTools.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/cython.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/dictTools.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/eexec.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/encodingTools.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/etree.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/filenames.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/fixedTools.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/intTools.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/loggingTools.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/macCreatorType.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/macRes.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/plistlib/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/plistlib/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/plistlib/py.typed", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/psCharStrings.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/psLib.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/psOperators.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/py23.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/roundTools.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/sstruct.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/symfont.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/testTools.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/textTools.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/timeTools.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/transform.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/treeTools.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/vector.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/visitor.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/xmlReader.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/misc/xmlWriter.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/mtiLib/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/mtiLib/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/mtiLib/__main__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/otlLib/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/otlLib/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/otlLib/builder.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/otlLib/builder.py.sketch", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/otlLib/error.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/otlLib/maxContextCalc.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/otlLib/optimize/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/otlLib/optimize/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/otlLib/optimize/__main__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/otlLib/optimize/gpos.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/areaPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/basePen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/boundsPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/cairoPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/cocoaPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/cu2quPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/explicitClosingLinePen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/filterPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/freetypePen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/hashPointPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/momentsPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/perimeterPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/pointInsidePen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/pointPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/qtPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/qu2cuPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/quartzPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/recordingPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/reportLabPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/reverseContourPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/roundingPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/statisticsPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/svgPathPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/t2CharStringPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/teePen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/transformPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/ttGlyphPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/pens/wxPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/qu2cu/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/qu2cu/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/qu2cu/__main__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/qu2cu/benchmark.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/qu2cu/cli.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/qu2cu/qu2cu.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/subset/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/subset/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/subset/__main__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/subset/cff.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/subset/svg.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/subset/util.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/svgLib/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/svgLib/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/svgLib/path/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/svgLib/path/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/svgLib/path/arc.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/svgLib/path/parser.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/svgLib/path/shapes.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/t1Lib/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/t1Lib/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/tfmLib.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/__main__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/macUtils.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/removeOverlaps.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/scaleUpem.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/sfnt.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/standardGlyphOrder.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_a_n_k_r.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_a_v_a_r.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_b_s_l_n.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_c_i_d_g.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_c_m_a_p.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_c_v_a_r.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_c_v_t.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_f_e_a_t.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_f_p_g_m.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_f_v_a_r.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_g_a_s_p.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_g_c_i_d.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_g_l_y_f.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_g_v_a_r.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_h_d_m_x.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_h_e_a_d.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_h_h_e_a.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_h_m_t_x.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_k_e_r_n.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_l_c_a_r.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_l_o_c_a.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_l_t_a_g.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_m_a_x_p.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_m_e_t_a.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_m_o_r_t.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_m_o_r_x.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_n_a_m_e.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_o_p_b_d.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_p_o_s_t.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_p_r_e_p.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_p_r_o_p.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_s_b_i_x.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_t_r_a_k.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_v_h_e_a.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/_v_m_t_x.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/asciiTable.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/B_A_S_E_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/BitmapGlyphMetrics.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/C_B_D_T_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/C_B_L_C_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/C_F_F_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/C_F_F__2.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/C_O_L_R_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/C_P_A_L_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/D__e_b_g.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/D_S_I_G_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/DefaultTable.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/E_B_D_T_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/E_B_L_C_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/F__e_a_t.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/F_F_T_M_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/G__l_a_t.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/G__l_o_c.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/G_D_E_F_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/G_M_A_P_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/G_P_K_G_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/G_P_O_S_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/G_S_U_B_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/grUtils.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/H_V_A_R_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/J_S_T_F_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/L_T_S_H_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/M_A_T_H_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/M_E_T_A_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/M_V_A_R_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/O_S_2f_2.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/otBase.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/otConverters.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/otData.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/otTables.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/otTraverse.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/S__i_l_f.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/S__i_l_l.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/S_I_N_G_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/S_T_A_T_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/S_V_G_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/sbixGlyph.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/sbixStrike.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/T_S_I__0.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/T_S_I__1.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/T_S_I__2.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/T_S_I__3.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/T_S_I__5.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/T_S_I_B_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/T_S_I_C_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/T_S_I_D_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/T_S_I_J_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/T_S_I_P_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/T_S_I_S_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/T_S_I_V_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/T_T_F_A_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/table_API_readme.txt", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/ttProgram.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/TupleVariation.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/V_D_M_X_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/V_O_R_G_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/tables/V_V_A_R_.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/ttCollection.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/ttFont.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/ttGlyphSet.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/ttVisitor.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttLib/woff2.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ttx.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ufoLib/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ufoLib/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ufoLib/converters.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ufoLib/errors.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ufoLib/etree.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ufoLib/filenames.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ufoLib/glifLib.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ufoLib/kerning.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ufoLib/plistlib.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ufoLib/pointPen.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ufoLib/utils.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/ufoLib/validators.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/unicode.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/unicodedata/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/unicodedata/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/unicodedata/Blocks.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/unicodedata/OTTags.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/unicodedata/ScriptExtensions.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/unicodedata/Scripts.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/__main__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/builder.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/cff.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/errors.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/featureVars.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/instancer/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/instancer/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/instancer/__main__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/instancer/featureVars.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/instancer/names.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/instancer/solver.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/interpolatable.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/interpolate_layout.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/iup.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/merger.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/models.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/mutator.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/mvar.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/plot.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/stat.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/varLib/varStore.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/voltLib/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/voltLib/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/voltLib/ast.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/voltLib/error.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/voltLib/lexer.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/voltLib/parser.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/python_fontconfig/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/python_fontconfig/.gitignore", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/python_fontconfig/COPYING", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/python_fontconfig/fontconfig.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/python_fontconfig/README", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/python_fontconfig/setup.cfg", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/python_fontconfig/setup_renamed_for_inkman.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/README.md", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgpathtools/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgpathtools/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgpathtools/bezier.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgpathtools/document.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgpathtools/misctools.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgpathtools/parser.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgpathtools/path.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgpathtools/paths2svg.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgpathtools/polytools.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgpathtools/smoothing.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgpathtools/svg_io_sax.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgpathtools/svg_to_paths.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/animate.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/base.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/container.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/data/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/data/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/data/colors.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/data/full11.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/data/pattern.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/data/svgparser.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/data/tiny12.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/data/typechecker.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/data/types.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/drawing.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/elementfactory.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/etree.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/extensions/", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/extensions/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/extensions/inkscape.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/extensions/shapes.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/filters.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/gradients.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/image.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/masking.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/mixins.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/params.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/path.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/pattern.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/shapes.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/solidcolor.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/text.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/utils.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/validator2.py", "org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/svgwrite/version.py", "org.inkscape.extension.30306/scientific_inkscape/packages/", "org.inkscape.extension.30306/scientific_inkscape/packages/click/", "org.inkscape.extension.30306/scientific_inkscape/packages/click/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/click/_compat.py", "org.inkscape.extension.30306/scientific_inkscape/packages/click/_termui_impl.py", "org.inkscape.extension.30306/scientific_inkscape/packages/click/_textwrap.py", "org.inkscape.extension.30306/scientific_inkscape/packages/click/_unicodefun.py", "org.inkscape.extension.30306/scientific_inkscape/packages/click/_winconsole.py", "org.inkscape.extension.30306/scientific_inkscape/packages/click/core.py", "org.inkscape.extension.30306/scientific_inkscape/packages/click/decorators.py", "org.inkscape.extension.30306/scientific_inkscape/packages/click/exceptions.py", "org.inkscape.extension.30306/scientific_inkscape/packages/click/formatting.py", "org.inkscape.extension.30306/scientific_inkscape/packages/click/globals.py", "org.inkscape.extension.30306/scientific_inkscape/packages/click/parser.py", "org.inkscape.extension.30306/scientific_inkscape/packages/click/py.typed", "org.inkscape.extension.30306/scientific_inkscape/packages/click/shell_completion.py", "org.inkscape.extension.30306/scientific_inkscape/packages/click/termui.py", "org.inkscape.extension.30306/scientific_inkscape/packages/click/testing.py", "org.inkscape.extension.30306/scientific_inkscape/packages/click/types.py", "org.inkscape.extension.30306/scientific_inkscape/packages/click/utils.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/__main__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/_compat.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/app.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/blueprints.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/cli.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/config.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/ctx.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/debughelpers.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/Flask.egg-info/", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/Flask.egg-info/dependency_links.txt", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/Flask.egg-info/entry_points.txt", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/Flask.egg-info/PKG-INFO", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/Flask.egg-info/requires.txt", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/Flask.egg-info/SOURCES.txt", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/Flask.egg-info/top_level.txt", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/globals.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/helpers.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/json/", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/json/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/json/tag.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/logging.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/pngs/", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/pngs/scale_options.png", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/py.typed", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/scaffold.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/sessions.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/signals.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/templating.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/testing.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/typing.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/views.py", "org.inkscape.extension.30306/scientific_inkscape/packages/flask/wrappers.py", "org.inkscape.extension.30306/scientific_inkscape/packages/itsdangerous/", "org.inkscape.extension.30306/scientific_inkscape/packages/itsdangerous/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/itsdangerous/_json.py", "org.inkscape.extension.30306/scientific_inkscape/packages/itsdangerous/encoding.py", "org.inkscape.extension.30306/scientific_inkscape/packages/itsdangerous/exc.py", "org.inkscape.extension.30306/scientific_inkscape/packages/itsdangerous/jws.py", "org.inkscape.extension.30306/scientific_inkscape/packages/itsdangerous/py.typed", "org.inkscape.extension.30306/scientific_inkscape/packages/itsdangerous/serializer.py", "org.inkscape.extension.30306/scientific_inkscape/packages/itsdangerous/signer.py", "org.inkscape.extension.30306/scientific_inkscape/packages/itsdangerous/timed.py", "org.inkscape.extension.30306/scientific_inkscape/packages/itsdangerous/url_safe.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/_compat.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/_identifier.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/async_utils.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/asyncfilters.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/asyncsupport.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/bccache.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/compiler.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/constants.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/debug.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/defaults.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/environment.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/exceptions.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/ext.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/filters.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/idtracking.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/lexer.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/loaders.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/meta.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/nativetypes.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/nodes.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/optimizer.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/parser.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/py.typed", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/runtime.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/tests.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/utils.py", "org.inkscape.extension.30306/scientific_inkscape/packages/jinja2/visitor.py", "org.inkscape.extension.30306/scientific_inkscape/packages/markupsafe/", "org.inkscape.extension.30306/scientific_inkscape/packages/markupsafe/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/markupsafe/_compat.py", "org.inkscape.extension.30306/scientific_inkscape/packages/markupsafe/_constants.py", "org.inkscape.extension.30306/scientific_inkscape/packages/markupsafe/_native.py", "org.inkscape.extension.30306/scientific_inkscape/packages/markupsafe/_speedups.c", "org.inkscape.extension.30306/scientific_inkscape/packages/markupsafe/_speedups.cp39-win_amd64.pyd", "org.inkscape.extension.30306/scientific_inkscape/packages/markupsafe/_speedups.pyi", "org.inkscape.extension.30306/scientific_inkscape/packages/markupsafe/py.typed", "org.inkscape.extension.30306/scientific_inkscape/packages/onenoteextractor/", "org.inkscape.extension.30306/scientific_inkscape/packages/onenoteextractor/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/onenoteextractor/cli.py", "org.inkscape.extension.30306/scientific_inkscape/packages/onenoteextractor/enc.py", "org.inkscape.extension.30306/scientific_inkscape/packages/onenoteextractor/one.py", "org.inkscape.extension.30306/scientific_inkscape/packages/onenoteextractor/py.typed", "org.inkscape.extension.30306/scientific_inkscape/packages/pyaes/", "org.inkscape.extension.30306/scientific_inkscape/packages/pyaes/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/pyaes/aes.py", "org.inkscape.extension.30306/scientific_inkscape/packages/pyaes/blockfeeder.py", "org.inkscape.extension.30306/scientific_inkscape/packages/pyaes/util.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/events.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/observers/", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/observers/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/observers/api.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/observers/fsevents.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/observers/fsevents2.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/observers/inotify.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/observers/inotify_buffer.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/observers/inotify_c.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/observers/kqueue.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/observers/polling.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/observers/read_directory_changes.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/observers/winapi.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/tricks/", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/tricks/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/utils/", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/utils/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/utils/bricks.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/utils/delayed_queue.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/utils/dirsnapshot.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/utils/echo.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/utils/patterns.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/utils/platform.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/version.py", "org.inkscape.extension.30306/scientific_inkscape/packages/watchdog/watchmedo.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/_internal.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/_reloader.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/datastructures.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/datastructures.pyi", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/debug/", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/debug/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/debug/console.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/debug/repr.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/debug/shared/", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/debug/shared/console.png", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/debug/shared/debugger.js", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/debug/shared/FONT_LICENSE", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/debug/shared/ICON_LICENSE.md", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/debug/shared/less.png", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/debug/shared/more.png", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/debug/shared/source.png", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/debug/shared/style.css", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/debug/shared/ubuntu.ttf", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/debug/tbtools.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/exceptions.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/filesystem.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/formparser.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/http.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/local.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/middleware/", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/middleware/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/middleware/dispatcher.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/middleware/http_proxy.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/middleware/lint.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/middleware/profiler.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/middleware/proxy_fix.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/middleware/shared_data.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/py.typed", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/routing.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/routing/", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/routing/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/routing/converters.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/routing/exceptions.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/routing/map.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/routing/matcher.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/routing/rules.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/sansio/", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/sansio/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/sansio/http.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/sansio/multipart.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/sansio/request.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/sansio/response.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/sansio/utils.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/security.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/serving.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/test.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/testapp.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/urls.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/user_agent.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/useragents.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/utils.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/wrappers/", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/wrappers/__init__.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/wrappers/accept.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/wrappers/auth.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/wrappers/base_request.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/wrappers/base_response.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/wrappers/common_descriptors.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/wrappers/cors.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/wrappers/etag.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/wrappers/json.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/wrappers/request.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/wrappers/response.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/wrappers/user_agent.py", "org.inkscape.extension.30306/scientific_inkscape/packages/werkzeug/wsgi.py", "org.inkscape.extension.30306/scientific_inkscape/pngs/", "org.inkscape.extension.30306/scientific_inkscape/pngs/converting_emf.svg", "org.inkscape.extension.30306/scientific_inkscape/pngs/converting_wmf.svg", "org.inkscape.extension.30306/scientific_inkscape/pngs/missing_svg.svg", "org.inkscape.extension.30306/scientific_inkscape/pngs/scale_options.png", "org.inkscape.extension.30306/scientific_inkscape/remove_kerning.py", "org.inkscape.extension.30306/scientific_inkscape/scale_plots.inx", "org.inkscape.extension.30306/scientific_inkscape/scale_plots.py", "org.inkscape.extension.30306/scientific_inkscape/speedups.py", "org.inkscape.extension.30306/scientific_inkscape/styles0.py", "org.inkscape.extension.30306/scientific_inkscape/text_ghoster.inx", "org.inkscape.extension.30306/scientific_inkscape/text_ghoster.py"]} \ No newline at end of file diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/applytransform_mod.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/applytransform_mod.py new file mode 100644 index 0000000..13e3e9b --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/applytransform_mod.py @@ -0,0 +1,238 @@ +#!/usr/bin/env python3 +# +# License: GPL2 +# Copyright Mark "Klowner" Riedesel +# https://github.com/Klowner/inkscape-applytransforms +# Modified by David Burghoff + +import inkex +from inkex.paths import CubicSuperPath, Path +from inkex.transforms import Transform +from inkex import Rectangle, Ellipse, Circle + +import math +import dhelpers as dh +from inkex.text.cache import BaseElementCache + +Itr = Transform([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]) + + +# @staticmethod +def remove_attrs(el): + if el.tag == inkex.addNS("g", "svg"): + return el + if el.tag == inkex.addNS("path", "svg") or el.tag == "path": + for attName in el.attrib.keys(): + if ( + (("sodipodi" in attName) or ("inkscape" in attName)) + and "inkscape-academic" not in attName + and "inkscape-scientific" not in attName + ): + del el.attrib[attName] + return el + return el + + +# Scale stroke width and dashes +def applyToStrokes(el, tf): + if "style" in el.attrib: + style = el.cstyle + update = False + if "stroke-width" in style: + try: + stroke_width = dh.ipx(style.get("stroke-width")) + stroke_width *= math.sqrt(abs(tf.a * tf.d - tf.b * tf.c)) + style["stroke-width"] = str(stroke_width) + update = True + except AttributeError: + pass + if "stroke-dasharray" in style: + try: + strokedasharray = style.get("stroke-dasharray") + if strokedasharray.lower() != "none": + strokedasharray = dh.listsplit(style.get("stroke-dasharray")) + strokedasharray = [ + sdv * math.sqrt(abs(tf.a * tf.d - tf.b * tf.c)) + for sdv in strokedasharray + ] + style["stroke-dasharray"] = ( + str(strokedasharray).strip("[").strip("]") + ) + update = True + except AttributeError: + pass + if update: + el.cstyle = style + + +def transform_clipmask(el, mask=False): + if not (mask): + cm = "clip-path" + else: + cm = "mask" + clippathurl = el.get(cm) + if clippathurl is not None and el.ctransform is not None: + svg = el.croot + clippath = svg.getElementById(clippathurl[5:-1]) + if clippath is not None: + d = clippath.duplicate() + clippathurl = "url(#" + d.get_id() + ")" + el.set(cm, clippathurl) + dh.fix_css_clipmask(el, mask=mask) + for k in d.getchildren(): + if k.ctransform is not None: + tr = el.ctransform @ k.ctransform + else: + tr = el.ctransform + k.ctransform = tr + + +poly_tags = {inkex.Polygon.ctag, inkex.Polyline.ctag} +round_tags = {inkex.Ellipse.ctag, inkex.Circle.ctag} +line_tag = inkex.Line.ctag +rect_tag = inkex.Rectangle.ctag + + +def fuseTransform(el, transf=Itr, irange=None, trange=None, applytostroke=True): + # Fuses an object's transform to its path, adding the additional transformation transf + # When applytostroke enabled, transform goes onto stroke/dashes, keeping it looking the same + # Without it, it is applied to the points only + + if el.tag in BaseElementCache.otp_support_tags: # supported types + # Since transforms apply to an object's clips, before applying the transform + # we will need to duplicate the clip path and transform it + transform_clipmask(el, mask=False) + transform_clipmask(el, mask=True) + + transf = Transform(transf) @ el.ctransform + el.ctransform = None + el = remove_attrs(el) + + if not (transf.b == 0 and transf.c == 0) and isinstance( + el, (Rectangle, Ellipse, Circle) + ): + # Rectangles, Ellipses, and Circles need to be converted to paths if there is shear/rotation + el.object_to_path() + + if not (transf == Itr and irange is None and trange is None): + # Don't do anything if there is effectively no transform applied + if el.tag in poly_tags: + points = [] + for p in el.cpath.end_points: + p = transf.apply_to_point([p[0],p[1]]) + points.append(f"{p[0]},{p[1]}") + points = " ".join(points) + el.set("points", points) + elif el.tag in round_tags: + + def isequal(a, b): + return abs(a - b) <= transf.absolute_tolerance + + if el.tag == inkex.addNS( + "ellipse", "svg" + ): # "{http://www.w3.org/2000/svg}ellipse": + rx = dh.ipx(el.get("rx")) + ry = dh.ipx(el.get("ry")) + else: + rx = dh.ipx(el.get("r")) + ry = rx + cx = dh.ipx(el.get("cx")) + cy = dh.ipx(el.get("cy")) + sqxy1 = (cx - rx, cy - ry) + sqxy2 = (cx + rx, cy - ry) + sqxy3 = (cx + rx, cy + ry) + newxy1 = transf.apply_to_point(sqxy1) + newxy2 = transf.apply_to_point(sqxy2) + newxy3 = transf.apply_to_point(sqxy3) + el.set("cx", (newxy1[0] + newxy3[0]) / 2) + el.set("cy", (newxy1[1] + newxy3[1]) / 2) + edgex = math.sqrt( + abs(newxy1[0] - newxy2[0]) ** 2 + abs(newxy1[1] - newxy2[1]) ** 2 + ) + edgey = math.sqrt( + abs(newxy2[0] - newxy3[0]) ** 2 + abs(newxy2[1] - newxy3[1]) ** 2 + ) + + if isequal(edgex, edgey): + el.tag = inkex.addNS("circle", "svg") + el.set("rx", None) + el.set("ry", None) + el.set("r", edgex / 2) + else: + el.tag = inkex.addNS("ellipse", "svg") + el.set("rx", edgex / 2) + el.set("ry", edgey / 2) + el.set("r", None) + elif el.tag in line_tag: + x1 = dh.ipx(el.get("x1")) + x2 = dh.ipx(el.get("x2")) + y1 = dh.ipx(el.get("y1")) + y2 = dh.ipx(el.get("y2")) + p1 = transf.apply_to_point([x1, y1]) + p2 = transf.apply_to_point([x2, y2]) + el.set("x1", str(p1[0])) + el.set("y1", str(p1[1])) + el.set("x2", str(p2[0])) + el.set("y2", str(p2[1])) + + elif el.tag in rect_tag: + x = dh.ipx(el.get("x")) + y = dh.ipx(el.get("y")) + w = dh.ipx(el.get("width")) + h = dh.ipx(el.get("height")) + pts = [[x, y], [x + w, y], [x + w, y + h], [x, y + h], [x, y]] + xs = [] + ys = [] + for p in pts: + p = transf.apply_to_point(p) + xs.append(p.x) + ys.append(p.y) + el.set("x", str(min(xs))) + el.set("y", str(min(ys))) + el.set("width", str(max(xs) - min(xs))) + el.set("height", str(max(ys) - min(ys))) + else: + if "d" in el.attrib: + # inkex.utils.debug(el.get('d')) + d = el.get("d") + try: + p = CubicSuperPath(d) + except ZeroDivisionError: + p = Path(d) + if irange is None: + p = Path(p).to_absolute().transform(transf, True) + if irange is not None: + p = Path(p).to_absolute() + pnew = [] + for ii in range(len(irange)): + xf = ( + trange[ii] @ el.ctransform + ) # Transform(el.get("transform", None)) + pnew += Path(p[irange[ii][0] : irange[ii][1]]).transform( + xf, True + ) + p = pnew + + try: + p2 = str(Path(CubicSuperPath(p).to_path())) + except ZeroDivisionError: + p2 = str(Path(p)) + el.set("d", p2) + + el.cpath = None + + if applytostroke: + applyToStrokes(el, transf) + + # Duplicate any gradient and apply the transform + for sf in ["fill", "stroke"]: + sfel = el.cstyle.get_link(sf, svg=el.croot) + if sfel is not None and "gradient" in sfel.tag.lower(): + d = sfel.duplicate() + el.cstyle[sf] = "url(#{0})".format(d.get_id()) + gt = d.get("gradientTransform") + gt = Transform(gt) if gt is not None else Itr + d.set("gradientTransform", str(transf @ gt)) + + for child in list(el): + fuseTransform(child, transf) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/autoexporter.inx b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/autoexporter.inx new file mode 100644 index 0000000..4ffeeb5 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/autoexporter.inx @@ -0,0 +1,98 @@ + + + Autoexporter + burghoff.autoexporter + + + + + + true + false + false + false + false + + + + + + + + + + + + + + + + + + + + + 600 + + + + true + + + false + true + false + true + 0.3 + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + text + + + + + + diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/autoexporter.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/autoexporter.py new file mode 100644 index 0000000..936196e --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/autoexporter.py @@ -0,0 +1,1949 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# Copyright (c) 2023 David Burghoff +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# pylint: disable=import-error +""" +AutoExporter for Inkscape + +This module provides an extension for Inkscape to automate the export of SVG files +into multiple formats. It supports watching directories, exporting immediately, +and offers various configuration options for exporting to PDF, PNG, EMF, EPS, +and plain SVG. The module handles preprocessing steps to ensure compatibility +and quality of exported files, such as embedding linked images, fixing markers, +scaling text, and more. + +Main Features: +- Watches specified directories for changes and exports files automatically. +- Supports exporting to multiple formats with various options. +- Handles preprocessing of SVG files to fix common issues and improve compatibility. +- Provides postprocessing to clean up and adjust SVGs for better rendering in + different environments. +- Includes utility functions for handling subprocesses, file manipulations, + and SVG operations. +""" + +import os +import sys +import time +import re +import copy +import subprocess +import warnings +import pickle +import math +import shutil +import tempfile +import hashlib +import lxml +import random +import threading + +import dhelpers as dh +import inkex +from inkex import TextElement, Transform, Vector2d +from inkex.text.utils import default_style_atts, unique +from inkex.text.cache import BaseElementCache +from inkex.text.parser import ParsedText, xyset + +import numpy as np +import image_helpers as ih + +otp_support_tags = BaseElementCache.otp_support_tags +peltag = inkex.PathElement.ctag + +USE_TERMINAL = False +DEBUGGING = False +DISPPROFILE = False + + +MAXATTEMPTS = 2 +MAX_THREADS = 10; +sema1 = threading.Semaphore(MAX_THREADS) +sema2 = threading.Semaphore(MAX_THREADS) + +class AutoExporter(inkex.EffectExtension): + """Automates exporting of SVG files in multiple formats.""" + + def add_arguments(self, pars): # pylint: disable=no-self-use + """Add arguments to the parser.""" + pars.add_argument("--tab", help="The selected UI-tab when OK was pressed") + pars.add_argument("--watchdir", help="Watch directory") + pars.add_argument("--writedir", help="Write directory") + pars.add_argument( + "--usepdf", type=inkex.Boolean, default=False, help="Export PDF?" + ) + pars.add_argument( + "--usepng", type=inkex.Boolean, default=False, help="Export PNG?" + ) + pars.add_argument( + "--useemf", type=inkex.Boolean, default=False, help="Export EMF?" + ) + pars.add_argument( + "--useeps", type=inkex.Boolean, default=False, help="Export EPS?" + ) + pars.add_argument( + "--usepsvg", type=inkex.Boolean, default=False, help="Export plain SVG?" + ) + pars.add_argument("--dpi", default=600, help="Rasterization DPI") + # pars.add_argument("--dpi_im", default=300, help="Resampling DPI") + pars.add_argument( + "--imagemode2", + type=inkex.Boolean, + default=True, + help="Embedded image handling", + ) + pars.add_argument( + "--thinline", + type=inkex.Boolean, + default=True, + help="Prevent thin line enhancement", + ) + pars.add_argument( + "--texttopath", type=inkex.Boolean, default=False, help="Text to paths?" + ) + pars.add_argument( + "--backingrect", + type=inkex.Boolean, + default=True, + help="Add backing rectangle?", + ) + pars.add_argument( + "--stroketopath", type=inkex.Boolean, default=False, help="Stroke to paths?" + ) + pars.add_argument( + "--latexpdf", type=inkex.Boolean, default=False, help="Make LaTeX PDF?" + ) + pars.add_argument( + "--testmode", type=inkex.Boolean, default=False, help="Test mode?" + ) + pars.add_argument("--testpage", type=int, default=1, help="Test mode page") + pars.add_argument("--v", type=str, default="1.2", help="Version for debugging") + pars.add_argument( + "--rasterizermode", type=int, default=1, help="Mark for rasterization" + ) + pars.add_argument( + "--margin", type=float, default=0.5, help="Document margin (mm)" + ) + pars.add_argument( + "--exportwhat", type=int, default=1, help="Export what?" + ) + + def effect(self): + """Start the Autoexporter or initiate export now.""" + if self.options.tab == "rasterizer": + sel = [self.svg.selection[i] for i in range(len(self.svg.selection))] + for elem in sel: + if self.options.rasterizermode == 1: + elem.set("autoexporter_rasterize", "png") + elif self.options.rasterizermode == 2: + elem.set("autoexporter_rasterize", "jpg") + elif self.options.rasterizermode == 3: + elem.set("autoexporter_rasterize", "topath") + else: + elem.set("autoexporter_rasterize", None) + return + self.options.exportnow = self.options.exportwhat==3 + self.options.watchhere = self.options.exportwhat==2 + + # self.options.testmode = True; + if self.options.testmode: + self.options.usepsvg = True + self.options.thinline = True + self.options.imagemode2 = True + self.options.texttopath = True + self.options.stroketopath = True + self.options.exportnow = True + self.options.margin = 0.5 + self.options.latexpdf = False + + if DISPPROFILE: + # pylint: disable=import-outside-toplevel + import cProfile + import pstats + import io + from pstats import SortKey + # pylint: enable=import-outside-toplevel + + prf = cProfile.Profile() + prf.enable() + + formats = [ + self.options.usepdf, + self.options.usepng, + self.options.useemf, + self.options.useeps, + self.options.usepsvg, + ] + formats = [ + ["pdf", "png", "emf", "eps", "psvg"][i] + for i in range(len(formats)) + if formats[i] + ] + + # Make an options copy we can pass to the external program + optcopy = copy.copy(self.options) + delattr(optcopy, "output") + delattr(optcopy, "input_file") + optcopy.reduce_images = self.options.imagemode2 + + bfn = inkex.inkscape_system_info.binary_location + pyloc, pybin = os.path.split(sys.executable) + + if not (self.options.exportnow): + aepy = os.path.abspath( + os.path.join(dh.get_script_path(), "autoexporter_script.py") + ) + + if self.options.watchhere: + pth = dh.Get_Current_File(self, "To watch this document's location, ") + optcopy.watchdir = os.path.dirname(pth) + optcopy.writedir = os.path.dirname(pth) + + if not os.path.exists(optcopy.watchdir): + dh.idebug( + "Watch directory could not be found. Please be sure the " + "selected location is valid.\n" + ) + dh.idebug( + "Note: Linux AppImage and Snap installations of Inkscape " + "cannot see locations outside the installation directory." + ) + sys.exit() + + # Pass settings using a config file. Include the current path so + # Inkex can be called if needed. + optcopy.inkscape_bfn = bfn + optcopy.formats = formats + optcopy.syspath = sys.path + + try: + with warnings.catch_warnings(): + # Ignore ImportWarning for Gtk/Pango + warnings.simplefilter("ignore") + # Prevent Gtk-Message: Failed to load module "xapp-gtk3-module" + os.environ["GTK_MODULES"] = "" + # pylint: disable=import-outside-toplevel, unused-import + import gi + + gi.require_version("Gtk", "3.0") + from gi.repository import Gtk # noqa + # pylint: enable=import-outside-toplevel, unused-import + guitype = "gtk" + except ImportError: + guitype = "terminal" + if USE_TERMINAL: + guitype = "terminal" + optcopy.guitype = guitype + + aes = os.path.join( + os.path.abspath(tempfile.gettempdir()), "si_ae_settings.p" + ) + with open(aes, "wb") as file: + pickle.dump(optcopy, file) + warnings.simplefilter("ignore", ResourceWarning) + # prevent warning that process is open + + if guitype == "gtk": + AutoExporter._gtk_call(pybin, aepy) + else: + AutoExporter._terminal_call(pybin, aepy, pyloc) + + else: + if not (self.options.testmode): + pth = dh.Get_Current_File(self, "To do a direct export, ") + else: + pth = self.options.input_file + optcopy.original_file = pth + optcopy.debug = DEBUGGING + optcopy.prints = False + optcopy.linked_locations = ih.get_linked_locations(self) + # needed to find linked images in relative directories + optcopy.formats = formats + optcopy.outtemplate = pth + optcopy.bfn = bfn + + Exporter(self.options.input_file, optcopy).export_all() + + if DISPPROFILE: + prf.disable() + sio = io.StringIO() + sortby = SortKey.CUMULATIVE + pst = pstats.Stats(prf, stream=sio).sort_stats(sortby) + pst.print_stats() + dh.debug(sio.getvalue()) + + if self.options.testmode: + nfn = os.path.abspath(pth[0:-4] + "_plain.svg") + stream = self.options.output + + if isinstance(stream, str): + # Copy the new file + shutil.copyfile(nfn, self.options.output) + else: + # Write to the output stream + svg2 = get_svg(nfn) + newdoc = lxml.etree.tostring(svg2, pretty_print=True) + try: + stream.write(newdoc) + except TypeError: + # we hope that this happens only when document needs to be encoded + stream.write(newdoc.encode("utf-8")) # type: ignore + self.options.output = None + + os.remove(nfn) + + # Runs a Python script using a Python binary in a working directory + # It detaches from Inkscape, allowing it to continue running after the + # extension has finished + @staticmethod + def _gtk_call(python_bin, python_script): + """Run a Python script using GTK terminal.""" + devnull_location = dh.shared_temp(filename="si_ae_output.txt") + with open(devnull_location, "w") as devnull: + subprocess.Popen( + [python_bin, python_script], stdout=devnull, stderr=devnull + ) + + @staticmethod + def _terminal_call(python_bin, python_script, python_wd): + """Run a Python script using a terminal.""" + + def escp(x): + return x.replace(" ", "\\\\ ") + + if sys.platform == "darwin": + # https://stackoverflow.com/questions/39840632/launch-python-script-in-new-terminal + os.system( + 'osascript -e \'tell application "Terminal" to do script "' + + escp(sys.executable) + + " " + + escp(python_script) + + "\"' >/dev/null" + ) + elif sys.platform == "win32": + if "pythonw.exe" in python_bin: + python_bin = python_bin.replace("pythonw.exe", "python.exe") + subprocess.Popen([python_bin, python_script], shell=False, cwd=python_wd) + + # if 'pythonw.exe' in python_bin: + # python_bin = python_bin.replace('pythonw.exe', 'python.exe') + # DETACHED_PROCESS = 0x08000000 + # subprocess.Popen([python_bin, python_script, 'standalone'], + # creationflags=DETACHED_PROCESS) + else: + if sys.executable[0:4] == "/tmp": + inkex.utils.errormsg( + "This appears to be an AppImage of Inkscape, which the " + "Autoexporter cannot support since AppImages are sandboxed." + ) + return + if sys.executable[0:5] == "/snap": + inkex.utils.errormsg( + "This appears to be an Snap installation of Inkscape, which " + "the Autoexporter cannot support since Snap installations " + "are sandboxed." + ) + return + terminals = [ + "x-terminal-emulator", + "mate-terminal", + "gnome-terminal", + "terminator", + "xfce4-terminal", + "urxvt", + "rxvt", + "termit", + "Eterm", + "aterm", + "uxterm", + "xterm", + "roxterm", + "termite", + "lxterminal", + "terminology", + "st", + "qterminal", + "lilyterm", + "tilix", + "terminix", + "konsole", + "kitty", + "guake", + "tilda", + "alacritty", + "hyper", + "terminal", + "iTerm", + "mintty", + "xiterm", + "terminal.app", + "Terminal.app", + "terminal-w", + "terminal.js", + "Terminal.js", + "conemu", + "cmder", + "powercmd", + "terminus", + "termina", + "terminal-plus", + "iterm2", + "terminus-terminal", + "terminal-tabs", + ] + terms = [] + for terminal in terminals: + result = subprocess.run( + ["which", terminal], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + if result.returncode == 0: + terms.append(terminal) + + for t in reversed(terms): + if t == "x-terminal-emulator": + linux_terminal_call = "x-terminal-emulator -e bash -c '%CMD'" + elif t == "gnome-terminal": + linux_terminal_call = 'gnome-terminal -- bash -c "%CMD; exec bash"' + elif t == "konsole": + linux_terminal_call = "konsole -e bash -c '%CMD'" + os.system( + linux_terminal_call.replace( + "%CMD", + escp(sys.executable) + " " + escp(python_script) + " >/dev/null", + ) + ) + +class Exporter(): + def __init__(self,fin,opts): + self.filein = fin + self.__dict__.update(vars(opts)) + + sema_temp = threading.Semaphore(1) + def export_all(self): + """Export all files in specified formats.""" + # Make a temp directory + self.tempdir, self.temphead = dh.shared_temp('ae') + self.tempbase = joinmod(self.tempdir,self.temphead) + + + if self.debug: + if self.prints: + self.prints("\n " + joinmod(self.tempdir, "")) + + # Make sure output directory exists + outdir = os.path.dirname(self.outtemplate) + if not os.path.exists(outdir): + os.makedirs(outdir) + + # Add a document margin + cfile = self.filein # current file we're working on + if self.margin != 0: + svg = get_svg(cfile) + tmp = self.tempbase + "_marg.svg" + Exporter.add_margin(svg, self.margin, self.testmode) + dh.overwrite_svg(svg, tmp) + cfile = copy.copy(tmp) + + # Do png before any preprocessing + if "png" in self.formats: + finished, myo = self.export_file(cfile, "png") + + # Do preprocessing + if any(fmt in self.formats for fmt in ["pdf", "emf", "eps", "psvg"]): + cfile = self.preprocessing(cfile) + + # Do vector outputs + newfiles = [] + for fmt in self.formats: + if fmt != "png": + finished, myo = self.export_file(cfile, fmt) + if finished: + newfiles.append(myo) + + # Remove temporary outputs and directory + failed_to_delete = None + if not (self.debug): + self.clear_temp() + else: + warnings.simplefilter("ignore", ResourceWarning) + # prevent warning that process is open + subprocess.Popen(f'explorer "{os.path.realpath(self.tempdir)}"') + return failed_to_delete + + def clear_temp(self): + """ Clear any temporary files """ + if not (self.debug): + tmps = [] + for t in os.listdir(self.tempdir): + tmp = joinmod(self.tempdir, t) + try: + one_day_ago = time.time() - 24 * 60 * 60 + if os.path.getmtime(tmp) < one_day_ago: + tmps.append(joinmod(self.tempdir, t)) + except FileNotFoundError: # already deleted + pass + if tmp.startswith(self.tempbase): + tmps.append(joinmod(self.tempdir, t)) + for tmp in tmps: + if os.path.exists(tmp): + deleted = False + nattempts = 0 + while not (deleted) and nattempts < MAXATTEMPTS: + try: + os.remove(tmp) + deleted = True + except PermissionError: + time.sleep(1) + nattempts += 1 + + def preprocessing(self, fin): + """Modifications that are done prior to conversion to any vector output""" + if self.prints: + fname = os.path.split(self.filein)[1] + try: + offset = round(os.get_terminal_size().columns / 2) + except OSError: + offset = 40 + fname = fname + " " * max(0, offset - len(fname)) + self.prints(fname + ": Preprocessing vector output", flush=True) + timestart = time.time() + + tempdir = self.tempdir + temphead = self.temphead + + # SVG modifications that should be done prior to any binary calls + cfile = fin + svg = get_svg(cfile) + + # Prune hidden items and remove language switching + stag = inkex.addNS("switch", "svg") + todelete, todelang, switches = [], [], [] + for elem in dh.visible_descendants(svg): + if elem.cspecified_style.get("display") == "none": + todelete.append(elem) + if elem.get("systemLanguage") is not None: + lang = inkex.inkscape_system_info.language + if elem.get("systemLanguage") == lang: + todelang.append(elem) + # Remove other languages from switches + if elem.getparent().tag == stag: + todelete.extend( + [ + k + for k in elem.getparent() + if k.get("systemLanguage") != lang + ] + ) + else: + # Remove non-matching languages + todelete.append(elem) + if elem.tag == stag: + switches.append(elem) + for elem in unique(todelete): + elem.delete() + for elem in todelang: + elem.set("systemLanguage", None) + for elem in switches: + if len(elem)==1: + dh.ungroup(elem) + + # Embed linked images into the SVG. This should be done prior to clone unlinking + # since some images may be cloned + if self.exportnow: + lls = self.linked_locations + else: + lls = ih.get_linked_locations_file(cfile, svg) + for k in lls: + elem = svg.getElementById(k) + ih.embed_external_image(elem, lls[k]) + + vds = dh.visible_descendants(svg) + raster_ids, image_ids, jpgs = [], [], [] + for elem in vds: + # Unlink any clones for the PDF image and marker fixes + if isinstance(elem, (inkex.Use)) and not (isinstance(elem, (inkex.Symbol))): + newel = dh.unlink2(elem) + myi = vds.index(elem) + vds[myi] = newel + for ddv in newel.descendants2()[1:]: + vds.append(ddv) + + # Remove trivial groups inside masks/transparent objects or clipped groups + if isinstance(elem, (inkex.Group)): + ancs = elem.ancestors2(includeme=True) + masked = any( + anc.get_link("mask", svg) is not None + or ( + elem.ccascaded_style.get("opacity") is not None + and float(elem.ccascaded_style.get("opacity")) < 1 + ) + for anc in ancs + ) + clipped = any( + anc.get_link("clip-path", svg) is not None for anc in ancs + ) + if ( + len(list(elem)) == 1 + and (masked or clipped) + and elem.get("autoexporter_rasterize") not in ["png", "jpg", "True"] + ): + dh.ungroup(elem) + + # Remove groups inside clips + cpth = elem.get_link("clip-path", svg) + if cpth is not None: + while any(isinstance(v, inkex.Group) for v in list(cpth)): + for grp in list(cpth): + if isinstance(grp, inkex.Group): + dh.ungroup(grp) + + stps = [] + ttps = [] + for elem in vds: + elid = elem.get_id() + + # Fix marker export bug for PDFs + mkrs = Exporter.marker_fix(elem) + # Convert markers to path for Office + if len(mkrs) > 0 and self.usepsvg: + stps.append(elid) + + # Fix opacity bug for Office PDF saving + if len(mkrs) == 0: # works poorly with markers + Exporter.opacity_fix(elem) + + # Disable connectors + elem.set("inkscape:connector-type", None) + + # Find out which objects need to be rasterized + sty = elem.cstyle + # only want the object with the filter + if sty.get_link("filter", svg) is not None: + raster_ids.append(elid) # filtered objects (always rasterized at PDF) + if (sty.get("fill") is not None and "url" in sty.get("fill")) or ( + sty.get("stroke") is not None and "url" in sty.get("stroke") + ): + raster_ids.append(elid) # gradient objects + if elem.get_link("mask") is not None: + raster_ids.append(elid) # masked objects (always rasterized at PDF) + if elem.get("autoexporter_rasterize") in ["png", "jpg", "True"]: + raster_ids.append(elid) + # rasterizer-marked + if elem.get("autoexporter_rasterize") == "jpg": + jpgs.append(elid) + if elem.get("autoexporter_rasterize")=='topath': + ttps.append(elid) + if isinstance(elem, (inkex.Image)): + image_ids.append(elid) + # Inkscape inappropriately clips non-'optimizeQuality' images + # when generating PDFs and calculating bounding boxes + elem.cstyle["image-rendering"] = "optimizeQuality" + # Set image x,y,width,height to standard values to prevent Office + # from mishandling clips + Exporter.standardize_image(elem) + + # Remove style attributes with invalid URLs + # (Office doesn't display the element while Inkscape ignores it) + for satt in list(sty.keys()): + if ( + satt in dh.urlatts + and sty.get(satt).startswith("url") + and sty.get_link(satt, svg) is None + ): + elem.cstyle[satt] = None + + # Prune single-point paths, which Inkscape doesn't show + if elem.tag in otp_support_tags: + pth = elem.cpath + firstpt = None + trivial = True + for pnt in pth.end_points: + if firstpt is None: + firstpt = (pnt.x, pnt.y) + elif (pnt.x, pnt.y) != firstpt: + trivial = False + break + if trivial: + elem.delete(deleteup=True) + + # Fix Avenir/Whitney + tetag = inkex.TextElement.ctag + frtag = inkex.FlowRoot.ctag + tels = [elem for elem in vds if elem.tag in {tetag, frtag}] + + dh.character_fixer(tels) + + # Strip all sodipodi:role lines from document + # Conversion to plain SVG does this automatically but poorly + excludetxtids = [] + self.duplicatelabels = dict() + # if self.usepsvg: + if len(tels) > 0: + svg.make_char_table() + self.ctable = svg.char_table + # store for later + + nels = [] + for elem in reversed(tels): + if elem.parsed_text.isflow: + nels += elem.parsed_text.flow_to_text() + tels.remove(elem) + tels += nels + + for elem in tels: + elem.parsed_text.strip_text_baseline_shift() + elem.parsed_text.strip_sodipodi_role_line() + elem.parsed_text.fuse_fonts() + Exporter.subsuper_fix(elem) + + # Preserve duplicate of text to be converted to paths + if self.texttopath and elem.get("display") != "none" and elem.croot is not None: + dup = elem.duplicate() + excludetxtids.append(dup.get_id()) + grp = dh.group([dup]) + grp.set("display", "none") + + # tel = svg.new_element(inkex.TextElement, svg) + tel = inkex.TextElement() + grp.append(tel) # Remember the original ID + tel.text = "{0}: {1}".format(DUP_KEY, elem.get_id()) + tel.set("display", "none") + excludetxtids.append(tel.get_id()) + self.duplicatelabels[tel.get_id()] = elem.get_id() + + # Make sure nested tspans have fill specified (STP bug) + for dsd in elem.descendants2()[1:]: + if ( + "fill" in dsd.cspecified_style + and dsd.cspecified_style["fill"] != "#000000" + ): + dsd.cstyle["fill"] = dsd.cspecified_style["fill"] + + tmp = self.tempbase + "_mod.svg" + dh.overwrite_svg(svg, tmp) + cfile = tmp + self.excludetxtids = excludetxtids + + do_rasterizations = len(raster_ids + image_ids) > 0 + do_stroketopaths = self.texttopath or self.stroketopath or len(stps) > 0 or len(ttps)>0 + + dpi = self.dpi + class Act(): + ''' + Represents a single binary call Action. + type == 'stp' creates an action that stroke-to-path's a group of objects + type == 'imgt' exports a PNG copy of an image with a transparent background + type == 'imgo' exports a PNG copy of an image with an opaque background, and objects above hidden + ''' + def __init__(self,typ,els,fname=None,overlaps=None): + self.type = typ + if isinstance(els,list): + self.els = els + else: + self.els = [els] + if fname is None: + elid = self.els[0].get_id() + if typ=='imgt': + fname = temphead + "_im_" + elid + "." + imgtype + else: + fname = temphead + "_imbg_" + elid + "." + imgtype + self.fname = fname; + self.overlaps = overlaps + + if ( + (self.stroketopath or len(stps) > 0) + and inkex.installed_ivp[0] >= 1 + and inkex.installed_ivp[1] > 0 + ): + stpact = "object-stroke-to-path" + else: + stpact = "object-to-path" + + def __str__(self): + if self.type == 'stp': + return "select:{0}; {1}; export-filename:{2}; export-do; unselect:{0}; ".format( + ",".join(self.els), Act.stpact, self.fname + ) + elif self.type == 'imgt': + fmt1 = ( + "export-id:{0}; export-id-only; export-dpi:{1}; " + "export-filename:{2}; export-background-opacity:0.0; " + "export-do; " + ) + return fmt1.format(self.els[0].get_id(), int(dpi), self.fname) + elif self.type == 'imgo': + el = self.els[0] + fmt2 = ( + "export-id:{0}; export-dpi:{1}; " + "export-filename:{2}; export-background-opacity:1.0; " + "export-do; " + ) + actv = fmt2.format(el.get_id(), int(dpi), self.fname) + + # For export all, hide objects on top + displays = {el: el.cstyle.get('display') for el in overlaps[el]} + hides = ['select:{0}; object-set-property:display,none; unselect:{0}; '.format(el.get_id()) for el in overlaps[el]] + unhides = ['select:{0}; object-set-property:display,{1}; unselect:{0}; '.format(el.get_id(), \ + displays[el] if displays[el] is not None else '') for el in overlaps[el]] + return ''.join(hides) + actv + ''.join(unhides) + + def split(self,intermediate_fn): + ''' Splits a STP act into two sub-acts ''' + spl = math.ceil(len(self.els) / 2) + act1 = Act('stp',self.els[:spl],intermediate_fn) + act2 = Act('stp',self.els[spl:],self.fname) + return act1, act2 + + + allacts = [] + if do_stroketopaths: + svg = get_svg(cfile) + vdd = dh.visible_descendants(svg) + + updatefile = False + tels = [] + if self.texttopath or len(ttps)>0: + for elem in vdd: + if (elem.get_id() in ttps or self.texttopath) and (elem.tag == tetag and elem.get_id() not in excludetxtids): + tels.append(elem.get_id()) + for dsd in elem.descendants2(): + # Fuse fill and stroke to account for STP bugs + if "fill" in dsd.cspecified_style: + dsd.cstyle["fill"] = dsd.cspecified_style["fill"] + updatefile = True + if "stroke" in dsd.cspecified_style: + dsd.cstyle["stroke"] = dsd.cspecified_style["stroke"] + updatefile = True + + pels, dgroups = [], [] + if self.stroketopath or len(stps) > 0: + # Stroke to Path has a number of bugs, try to fix them + if self.stroketopath: + stpels = vdd + elif len(stps) > 0: + stpels = [el for el in vdd if el.get_id() in stps] + stpels = [el for el in stpels if el.get_id() not in raster_ids] + pels, dgroups = Exporter.stroke_to_path_fixes(stpels) + updatefile = True + + if updatefile: + dh.overwrite_svg(svg, cfile) + + tmpstp = self.tempbase + "_stp.svg" + allacts += [Act('stp',tels + pels,tmpstp)] + + + # Rasterizations + actts, actos = [], [] + if do_rasterizations: + svg = get_svg(cfile) + + vds = dh.visible_descendants(svg) + els = [el for el in vds if el.get_id() in list(set(raster_ids + image_ids))] + if len(els) > 0: + imgtype = "png" + + overlaps = dh.overlapping_els(svg,els) + for elem in els: + elid = elem.get_id() + actts.append(Act('imgt',elem)) + actos.append(Act('imgo',elem,overlaps=overlaps)) + + allacts += (actos + actts) if ih.hasPIL else actts + # export-id-onlys need to go last + + imgs_trnp = {act.fname:act.els[0].get_id() for act in actts} + imgs_opqe = {act.fname:act.els[0].get_id() for act in actos} + + # To reduce the number of binary calls, we collect the stroke-to-path and + # rasterization actions into a single call that also gets the Bounding Boxes. + # Skip binary call during testing + if len(allacts) > 0 and not self.testmode: + # use relative paths to reduce arg length + + bbs = self.split_acts(fnm=cfile, acts=allacts) + + imgs = imgs_opqe | imgs_trnp + missing_images = [t for t in imgs if not os.path.exists(os.path.join(tempdir, t)) and imgs[t] in bbs] + if missing_images: + raise TimeoutError( + "\nThe Inkscape binary could not generate the temporary images " + + ", ".join(missing_images) + ' in ' + tempdir + '.\n\n' + + "This may be a temporary issue; try running the extension again." + ) + if do_stroketopaths: + cfile = tmpstp + + if do_rasterizations: + svg = get_svg(cfile) + vds = dh.visible_descendants(svg) + els = [el for el in vds if el.get_id() in list(set(raster_ids + image_ids))] + if len(els) > 0: + jimgs_trnp = [os.path.join(tempdir, t) for t in imgs_trnp] + jimgs_opqe = [os.path.join(tempdir, t) for t in imgs_opqe] + + for i, elem in enumerate(els): + img_trnp = jimgs_trnp[i] + img_opqe = jimgs_opqe[i] + + if os.path.exists(img_trnp): + anyalpha0 = False + if ih.hasPIL: + bbox = ih.crop_images([img_trnp, img_opqe]) + anyalpha0 = ih.Set_Alpha0_RGB(img_trnp, img_opqe) + if elem.get_id() in jpgs: + tmpjpg = img_trnp.replace(".png", ".jpg") + ih.to_jpeg(img_opqe, tmpjpg) + img_trnp = copy.copy(tmpjpg) + else: + bbox = None + + # Compare size of old and new images + osz = ih.embedded_size(elem) + if osz is None: + osz = float("inf") + nsz = os.path.getsize(img_trnp) + hasmaskclip = ( + elem.get_link("mask") is not None + or elem.get_link("clip-path") is not None + ) # clipping and masking + embedimg = (nsz < osz) or (anyalpha0 or hasmaskclip) + if embedimg: + Exporter.replace_with_raster( + elem, img_trnp, bbs[elem.get_id()], bbox + ) + + tmp = self.tempbase + "_eimg.svg" + dh.overwrite_svg(svg, tmp) + cfile = tmp + + if do_stroketopaths: + svg = get_svg(cfile) + # Remove temporary groups + if self.stroketopath: + for elid in dgroups: + elem = svg.getElementById(elid) + if elem is not None: + dh.ungroup(elem) + + tmp = self.tempbase + "_poststp.svg" + dh.overwrite_svg(svg, tmp) + cfile = tmp + + if self.prints: + self.prints( + fname + + ": Preprocessing done (" + + str(round(1000 * (time.time() - timestart)) / 1000) + + " s)" + ) + return cfile + + def check(self,func, *args, **kwargs): + """Wraps a binary call with a check if thread has been stopped; if so, clear the temp file and exit""" + with sema1 if func==dh.wrapped_binary else sema2: + if hasattr(self, "aeThread") and self.aeThread.stopped is True: + self.clear_temp() + sys.exit() + ret = func(*args, **kwargs) + if hasattr(self, "aeThread") and self.aeThread.stopped is True: + self.clear_temp() + sys.exit() + return ret + + def split_acts(self, fnm, acts, reserved=None, get_bbs=True): + """Split actions and run.""" + if reserved is None: + reserved = set() + + eargs = ["--actions", "".join([str(a) for a in acts])] + bbs = None + try: + bbs = self.check(dh.wrapped_binary,filename=fnm, inkscape_binary=self.bfn, extra_args=eargs, get_bbs = get_bbs, cwd=self.tempdir) + fnf_err = False + except FileNotFoundError: + fnf_err = True + + + missing_exports = [] + missing_fns = [] + found_fns = [] + for i, act in enumerate(acts): + actfile = act.fname + if actfile is not None and not os.path.exists(joinmod(self.tempdir,actfile)): + missing_exports.append(act) + missing_fns.append(actfile) + if os.path.exists(joinmod(self.tempdir,actfile)): + found_fns.append(actfile) + + # dh.idebug('Found '+str(found_fns)) + # dh.idebug('FNF: '+str(fnf_err)) + # dh.idebug('Missing ' + str(missing_fns) +'\n') + + if fnf_err: + if len(acts)==1: + if missing_exports[0].type=='stp': + bbs = self.split_stp( + fnm, missing_exports, 0, reserved=reserved, get_bbs = get_bbs + ) + else: + # Already simplified call as much as we can... + raise Exception('FileNotFoundError and cannot split:\n'+str(acts)) + elif len(missing_exports)>0: + acts1 = missing_exports[: math.ceil(len(missing_exports) / 2)] + acts2 = missing_exports[math.ceil(len(missing_exports) / 2) :] + bbs = self.split_acts( + fnm=fnm, acts=acts1, reserved=reserved, get_bbs = get_bbs + ) + if len(acts2)>0: + self.split_acts( + fnm=fnm, acts=acts2, reserved=reserved, get_bbs = False + ) + elif any(act.type=='stp' for act in missing_exports): + stp_idx = [i for i, act in enumerate(missing_exports) if act.type=='stp'][0] + bbs = self.split_stp( + fnm, missing_exports, stp_idx, reserved=reserved, get_bbs = get_bbs + ) + return bbs + + + def split_stp(self,fnm, acts, selii, reserved, get_bbs=True, cwd=None): + """ + Windows cannot handle arguments that are too long. + If needed, this can split a stroke-to-path operation into two. + """ + act = acts[selii] + actfn = act.fname + + reserved.update({fnm, actfn}) + isreserved = True + cnt = 0 + while isreserved: + actfna = actfn.strip(".svg") + str(cnt) + ".svg" + isreserved = actfna in reserved + cnt += 1 + reserved.update({actfna}) + + if len(act.els) == 1: + # cannot split, fact that we failed means there is a STP crash + shutil.copy(fnm, actfn) + return self.split_acts( + fnm=fnm, + acts=acts[:selii] + acts[selii + 1 :], + reserved=reserved + ) + act1, act2 = act.split(actfna) + acts1 = acts[:selii] + [act1] if len(act1.els) > 0 else acts[:selii] + acts2 = ( + [act2] + acts[selii + 1 :] if len(act2.els) > 0 else acts[selii + 1 :] + ) + + bbs = self.split_acts( + fnm=fnm, acts=acts1, reserved=reserved, get_bbs=get_bbs + ) + bbs = self.split_acts( + fnm=actfna, acts=acts2, reserved=reserved, get_bbs=get_bbs + ) + return bbs + + def export_file(self, fin, fformat): + """Use the Inkscape binary to export the file""" + myoutput = self.outtemplate[0:-4] + "." + fformat + if self.prints: + fname = os.path.split(self.filein)[1] + try: + offset = round(os.get_terminal_size().columns / 2) + except OSError: + offset = 40 + fname = fname + " " * max(0, offset - len(fname)) + self.prints(fname + ": Converting to " + fformat, flush=True) + timestart = time.time() + + ispsvg = fformat == "psvg" + notpng = not (fformat == "png") + + cfile = fin + if self.thinline and notpng: + svg = get_svg(cfile) + if fformat in ["pdf", "eps"]: + Exporter.thinline_dehancement(svg, "bezier") + else: + Exporter.thinline_dehancement(svg, "split") + tmp = self.tempbase + "_tld" + fformat[0] + ".svg" + dh.overwrite_svg(svg, tmp) + cfile = copy.copy(tmp) + + if fformat == "psvg": + myoutput = myoutput.replace(".psvg", "_plain.svg") + + def overwrite_output(filein, fileout): + if os.path.exists(fileout): + os.remove(fileout) + args = [ + self.bfn, + "--export-background", + "#ffffff", + "--export-background-opacity", + "1.0", + "--export-dpi", + str(self.dpi), + "--export-filename", + fileout, + filein, + ] + if fileout.endswith(".pdf") and self.latexpdf: + if os.path.exists(fileout + "_tex"): + os.remove(fileout + "_tex") + args = args[0:5] + ["--export-latex"] + args[5:] + if fileout.endswith(".svg"): + args = ( + [args[0]] + + ["--vacuum-defs"] + + args[1:5] + + ["--export-plain-svg"] + + args[5:] + ) + self.check(dh.subprocess_repeat,args) + + def make_output(filein, fileout): + if fileout.endswith(".svg"): + if not (self.testmode): + overwrite_output(filein, fileout) + else: + shutil.copy(filein, fileout) # skip conversion + self.made_outputs = [fileout] + + osvg = get_svg(filein) + + pgs = osvg.cdocsize.pgs + haspgs = inkex.installed_haspages + if (haspgs or self.testmode) and len(pgs) > 0: + # bbs = dh.BB2(type("DummyClass", (), {"svg": osvg})) + bbs = dh.BB2(osvg) + dlbl = self.duplicatelabels + outputs = [] + pgiis = ( + range(len(pgs)) if not (self.testmode) else [self.testpage - 1] + ) + for i in pgiis: + # match the viewbox to each page and delete them + psvg = get_svg(fileout) + # plain SVG has no pages + pgs2 = psvg.cdocsize.pgs + + Exporter.change_viewbox_to_page(psvg, pgs[i]) + # Only need to delete other Pages in testmode since + # plain SVGs have none + if self.testmode: + for j in reversed(range(len(pgs2))): + pgs2[j].delete() + + # Delete content not on current page + pgbb = dh.bbox(psvg.cdocsize.effvb) + for k, bbx in bbs.items(): + removeme = not (dh.bbox(bbx).intersect(pgbb)) + if k in dlbl: + removeme = not ( + dlbl[k] in bbs + and dh.bbox(bbs[dlbl[k]]).intersect(pgbb) + ) + if removeme and psvg.getElementById(k) is not None: + psvg.getElementById(k).delete() + + pname = pgs[i].get("inkscape:label") + pname = str(i + 1) if pname is None else pname + addendum = ( + "_page_" + pname + if not (self.testmode or len(pgs) == 1) + else "" + ) + outparts = fileout.split(".") + pgout = ".".join(outparts[:-1]) + addendum + "." + outparts[-1] + dh.overwrite_svg(psvg, pgout) + outputs.append(pgout) + self.made_outputs = outputs + else: + svg = get_svg(filein) + pgs = svg.cdocsize.pgs + + haspgs = inkex.installed_haspages + if (haspgs or self.testmode) and len(pgs) > 1: + outputs = [] + pgiis = ( + range(len(pgs)) if not (self.testmode) else [self.testpage - 1] + ) + for i in pgiis: + # match the viewbox to each page and delete them + svgpg = get_svg(filein) + pgs2 = svgpg.cdocsize.pgs + Exporter.change_viewbox_to_page(svgpg, pgs[i]) + for j in reversed(range(len(pgs2))): + pgs2[j].delete() + + pname = pgs[i].get("inkscape:label") + pname = str(i + 1) if pname is None else pname + addendum = "_page_" + pname if not (self.testmode) else "" + svgpgfn = self.tempbase + addendum + ".svg" + dh.overwrite_svg(svgpg, svgpgfn) + + outparts = fileout.split(".") + pgout = ".".join(outparts[:-1]) + addendum + "." + outparts[-1] + overwrite_output(svgpgfn, pgout) + outputs.append(pgout) + self.made_outputs = outputs + else: + overwrite_output(filein, fileout) + self.made_outputs = [fileout] + + if not (ispsvg): + make_output(cfile, myoutput) + finalnames = self.made_outputs + else: + tmp = self.tempbase + "_tmp_small.svg" + make_output(cfile, tmp) + + moutputs = self.made_outputs + finalnames = [] + for mout in moutputs: + svg = get_svg(mout) + self.postprocessing(svg) + finalname = myoutput + if len(moutputs) > 1: + pnum, _ = os.path.splitext(mout.split("_page_")[-1]) + finalname = myoutput.replace( + "_plain.svg", "_page_" + pnum + "_plain.svg" + ) + dh.overwrite_svg(svg, finalname) + finalnames.append(finalname) + + # Remove any previous outputs that we did not just make + directory, file_name = os.path.split(myoutput) + base_name, extension = os.path.splitext(file_name) + if extension == ".svg" and base_name.endswith("_plain"): + base_name = base_name[:-6] # Remove "_plain" from the base name + pattern = re.compile( + rf"{re.escape(base_name)}(_page_.*)?_plain{re.escape(extension)}$" + ) + else: + pattern = re.compile( + rf"{re.escape(base_name)}(_page_.*)?{re.escape(extension)}$" + ) + matching_files = [] + for file in os.listdir(directory): + if pattern.match(file): + matching_files.append(os.path.join(directory, file)) + for file in matching_files: + if file not in finalnames: + try: + os.remove(file) + except PermissionError: + pass + + if self.prints: + toc = time.time() - timestart + self.prints( + fname + + ": Conversion to " + + fformat + + " done (" + + str(round(1000 * toc) / 1000) + + " s)" + ) + return True, myoutput + + def postprocessing(self, svg): + """Postprocessing of SVGs, mainly for overcoming bugs in Office products""" + vds = dh.visible_descendants(svg) + + # Shift viewbox corner to (0,0) by translating top-level elements + evb = svg.cdocsize.effvb + if not (evb[0] == 0 and evb[1] == 0): + newtr = Transform("translate(" + str(-evb[0]) + ", " + str(-evb[1]) + ")") + svg.set_viewbox([0, 0, evb[2], evb[3]]) + ndefs = [el for el in list(svg) if not (el.tag in dh.unungroupable)] + for elem in ndefs: + elem.ctransform = newtr @ elem.ctransform + + for dsd in vds: + if ( + isinstance(dsd, (TextElement)) + and dsd.get_id() not in self.excludetxtids + ): + scaleto = 100 if not self.testmode else 10 + # Make 10 px in test mode so that errors are not unnecessarily large + Exporter.scale_text(dsd, scaleto) + elif isinstance(dsd, (inkex.Image)): + if ih.hasPIL: + Exporter.merge_mask(dsd) + # while dsd.getparent()!=dsd.croot and dsd.getparent() is not None + # and dsd.croot is not None: + # # iteratively remove groups containing images + # # I don't think it's necessary? + # dh.ungroup(dsd.getparent()); + elif isinstance(dsd, (inkex.Group)): + if len(dsd) == 0: + dsd.delete(deleteup=True) + + if self.backingrect: + r = inkex.Rectangle() + tlvl = [el for el in list(svg) if not (el.tag in dh.unungroupable)] + if len(tlvl) > 0: + svg.insert(svg.index(tlvl[0]), r) + else: + svg.append(r) + r.cstyle["fill"] = "#ffffff" + r.cstyle["fill-opacity"] = ".00001" + r.cstyle["stroke"] = "none" + vbx = svg.cdocsize.effvb + r.set("x", vbx[0]) + r.set("y", vbx[1]) + r.set("width", vbx[2]) + r.set("height", vbx[3]) + + # if self.thinline: + # for dsd in vds: + # self.Bezier_to_Split(dsd) # moved to deprecated + + # dh.idebug(self.svgtopdf_vbs) + # embed_original = False + # if embed_original: + # def main_contents(svg): + # ret = list(svg) + # for k in reversed(ret): + # if k.tag in [inkex.addNS('metadata','svg'), + # inkex.addNS('namedview','sodipodi')]: + # ret.remove(k); + # return ret + + # grp = dh.group(main_contents(svg)) + # svgo = get_svg(original_file) + # go = dh.group(main_contents(svgo)) + # svg.append(go) + # go.set('style','display:none'); + # go.set('inkscape:label','SI original'); + # go.set('inkscape:groupmode','layer'); + + # # Conversion to PDF changes the viewbox to pixels. Convert back to the + # # original viewbox by applying a transform + # dds = self.svgtopdf_dss[i] + # tfmt = 'matrix({0},{1},{2},{3},{4},{5})'; + # T =inkex.Transform(tfmt.format(dds.uuw,0,0,dds.uuh, + # -dds.effvb[0]*dds.uuw, + # -dds.effvb[1]*dds.uuh)) + # grp.set('transform',str(-T)) + # svg.set_viewbox(dds.effvb) + + tel = None + for elem in list(svg): + if ( + isinstance(elem, (inkex.TextElement,)) + and elem.text is not None + and ORIG_KEY in elem.text + ): + tel = elem + if tel is None: + # tel = svg.new_element(inkex.TextElement, svg) + tel = inkex.TextElement() + svg.append(tel) + tel.text = ORIG_KEY + ": {0}, hash: {1}".format( + self.original_file, hash_file(self.original_file) + ) + tel.set("style", "display:none") + dh.clean_up_document(svg) # Clean up + + PTH_COMMANDS = list("MLHVCSQTAZmlhvcsqtaz") + + @staticmethod + def thinline_dehancement(svg, mode="split"): + """ + Prevents thin-line enhancement in certain bad PDF renderers + 'bezier' mode converts h,v,l path commands to trivial Beziers + 'split' mode splits h,v,l path commands into two path commands + The Office PDF renderer removes trivial Beziers, as does conversion to EMF + The Inkscape PDF/EPS renderer removes split commands + Split is more general, so apply it to everything but PDFs/EPS + """ + + command_chars = {"h", "v", "l", "H", "V", "L"} + split = mode == "split" + for elem in svg.descendants2(): + if elem.tag in otp_support_tags and not elem.tag == peltag: + elem.object_to_path() + + pthd = elem.get("d") + if pthd and any(char in pthd for char in command_chars): + if any(char in pthd for char in {"H", "V", "L"}): + pthd = str(inkex.Path(pthd).to_relative()) + dds = [v for v in pthd.replace(",", " ").split(" ") if v] + current_command = None + i = 0 + while i < len(dds): + token = dds[i] + if token in {"v", "h", "l"}: + current_command = token + dds[i] = "" + elif token in Exporter.PTH_COMMANDS: + current_command = None + else: + if current_command == "h": + hval = float(token) + dds[i] = ( + f"h {hval / 2} {hval / 2}" + if split + else f"c {hval},0 {hval},0 {hval},0" + ) + elif current_command == "v": + vval = float(token) + dds[i] = ( + f"v {vval / 2} {vval / 2}" + if split + else f"c 0,{vval} 0,{vval} 0,{vval}" + ) + elif current_command == "l": + lxv = float(token) + lyv = float(dds[i + 1]) + dds[i] = ( + f"l {lxv / 2},{lyv / 2} {lxv / 2},{lyv / 2}" + if split + else f"c {lxv},{lyv} {lxv},{lyv} {lxv},{lyv}" + ) + dds[i + 1] = "" + i += 1 + i += 1 + + newd = " ".join(v for v in dds if v).replace(" ", " ") + elem.set("d", newd) + + @staticmethod + def marker_fix(elem): + """Fixes the marker bug that occurs with context-stroke and context-fill""" + mkrs = Exporter.get_markers(elem) + sty = elem.cspecified_style + for mtyp, mkrel in mkrs.items(): + dh.get_strokefill(elem) + mkrds = mkrel.descendants2() + anycontext = any( + a in ("stroke", "fill") and "context" in v + for d in mkrds + for a, v in d.cspecified_style.items() + ) + if anycontext: + handled = True + dup = mkrel.duplicate() + dupds = dup.descendants2() + for dsd in dupds: + dsty = dsd.cspecified_style + for att, val in dsty.items(): + if att in ("stroke", "fill") and "context" in val: + if val == "context-stroke": + dsd.cstyle[att] = sty.get("stroke", "none") + elif val == "context-fill": + dsd.cstyle[att] = sty.get("fill", "none") + else: # I don't know what this is + handled = False + if handled: + elem.cstyle[mtyp] = dup.get_id(as_url=2) + return mkrs + + @staticmethod + def opacity_fix(elem): + """ + Fuse opacity onto fill and stroke for path-like elements + Helps prevent rasterization-at-PDF for Office products + """ + sty = elem.cspecified_style + if ( + sty.get("opacity") is not None + and float(sty.get("opacity", 1.0)) != 1.0 + and elem.tag in otp_support_tags + ): + strf = dh.get_strokefill(elem) # fuses opacity and + # stroke-opacity/fill-opacity + if strf.stroke is not None and strf.fill is None: + elem.cstyle["stroke-opacity"] = strf.stroke.alpha + elem.cstyle["opacity"] = 1 + elif strf.fill is not None and strf.stroke is None: + elem.cstyle["fill-opacity"] = strf.fill.alpha + elem.cstyle["opacity"] = 1 + + @staticmethod + def subsuper_fix(elem): + """ + Replace super and sub with numerical values + Collapse Tspans with 0% baseline-shift, which Office displays incorrectly + """ + for dsd in elem.descendants2(): + bsh = dsd.ccascaded_style.get("baseline-shift") + if bsh in ["super", "sub"]: + sty = dsd.ccascaded_style + sty["baseline-shift"] = "40%" if bsh == "super" else "-20%" + dsd.cstyle = sty + + for dsd in reversed(elem.descendants2()): # all Tspans + bsh = dsd.ccascaded_style.get("baseline-shift") + if bsh is not None and bsh.replace(" ", "") == "0%": + # see if any ancestors with non-zero shift + anysubsuper = False + for anc in dsd.ancestors2(stopafter=elem): + bsa = anc.ccascaded_style.get("baseline-shift") + if bsa is not None and "%" in bsa: + anysubsuper = float(bsa.replace(" ", "").strip("%")) != 0 + + # split parent + myp = dsd.getparent() + if anysubsuper and myp is not None: + dds = dh.split_text(myp) + for dsd2 in reversed(dds): + if ( + len(list(dsd2)) == 1 + and list(dsd2)[0].ccascaded_style.get("baseline-shift") + == "0%" + ): + sel = list(dsd2)[0] + mys = sel.ccascaded_style + if mys.get("baseline-shift") == "0%": + mys["baseline-shift"] = dsd2.ccascaded_style.get( + "baseline-shift" + ) + fsz, scf, _ = dh.composed_width(sel, "font-size") + mys["font-size"] = str(fsz / scf) + dsd2.addprevious(sel) + sel.cstyle = mys + sel.tail = dsd2.tail + dsd2.delete() + Exporter.subsuper_fix( + elem + ) # parent is now gone, so start over + return + + @staticmethod + def scale_text(elem, scaleto): + """ + Sets all font-sizes to 100 px by moving size into transform + Office rounds every fonts to the nearest px and then transforms it, + so this makes text sizes more accurate + """ + svg = elem.croot + szs = [] + for dsd in elem.descendants2(): # all Tspan sizes + fsz = dsd.ccascaded_style.get("font-size") + fsz = {"small": "10px", "medium": "12px", "large": "14px"}.get(fsz, fsz) + if fsz is not None and "%" not in fsz: + szs.append(dh.ipx(fsz)) + if len(szs) == 0: + maxsz = default_style_atts["font-size"] + maxsz = {"small": 10, "medium": 12, "large": 14}.get(maxsz, maxsz) + else: + maxsz = max(szs) + + scv = 1 / maxsz * scaleto + + # Make a dummy group so we can properly compose the transform + grp = dh.group([elem], moveTCM=True) + + for dsd in reversed(elem.descendants2()): + x = ParsedText.get_xy(dsd, "x") + y = ParsedText.get_xy(dsd, "y") + dxv = ParsedText.get_xy(dsd, "dx") + dyv = ParsedText.get_xy(dsd, "dy") + + if x[0] is not None: + xyset(dsd, "x", [v * scv for v in x]) + if y[0] is not None: + xyset(dsd, "y", [v * scv for v in y]) + if dxv[0] is not None: + xyset(dsd, "dx", [v * scv for v in dxv]) + if dyv[0] is not None: + xyset(dsd, "dy", [v * scv for v in dyv]) + + fsz, scf, _ = dh.composed_width(dsd, "font-size") + if scf==0: + continue + dsd.cstyle["font-size"] = "{:.3f}".format(fsz / scf * scv) + + otherpx = [ + "letter-spacing", + "inline-size", + "stroke-width", + "stroke-dasharray", + ] + for oth in otherpx: + othv = dsd.ccascaded_style.get(oth) + if ( + othv is None + and oth == "stroke-width" + and "stroke" in dsd.ccascaded_style + ): + othv = default_style_atts[oth] + if othv is not None: + if "," not in othv: + if 'em' not in othv: # scaling not needed for em sizes + dsd.cstyle[oth] = str((dh.ipx(othv) or 0) * scv) + else: + dsd.cstyle[oth] = ",".join( + [str((dh.ipx(v) or 0) * scv) for v in othv.split(",")] + ) + + shape = dsd.ccascaded_style.get_link("shape-inside", svg) + if shape is not None: + dup = shape.duplicate() + svg.cdefs.append(dup) + dup.ctransform = ( + inkex.Transform((scv, 0, 0, scv, 0, 0)) @ dup.ctransform + ) + dsd.cstyle["shape-inside"] = dup.get_id(as_url=2) + + elem.ctransform = inkex.Transform((1 / scv, 0, 0, 1 / scv, 0, 0)) + dh.ungroup(grp) + + @staticmethod + def merge_mask(elem): + """ + Office will poorly rasterize masked elements at PDF-time + Revert alpha masks made by PDFication back to alpha + """ + mymask = elem.get_link("mask") + if mymask is not None and len(list(mymask)) == 1: + # only if one object in mask + mask = list(mymask)[0] + if isinstance(mask, inkex.Image): + if mask.get("height") == "1" and mask.get("width") == "1": + im1 = ih.str_to_ImagePIL(elem.get("xlink:href")).convert("RGBA") + im2 = ih.str_to_ImagePIL(mask.get("xlink:href")).convert("RGBA") + # only if mask the same size + if im1.size == im2.size: + d1a = np.asarray(im1) + d2a = np.asarray(im2) + # only if image is opaque + if np.where(d1a[:, :, 3] == 255, True, False).all(): + nda = np.stack( + ( + d1a[:, :, 0], + d1a[:, :, 1], + d1a[:, :, 2], + d2a[:, :, 0], + ), + 2, + ) + # pylint: disable=import-outside-toplevel + from PIL import Image as ImagePIL + # pylint: enable=import-outside-toplevel + + newstr = ih.ImagePIL_to_str(ImagePIL.fromarray(nda)) + elem.set("xlink:href", newstr) + mask.delete() + elem.set("mask", None) + + @staticmethod + def standardize_image(elem): + """Office has difficulty with clipped images with a nonzero x or y.""" + xv = dh.ipx(elem.get('x','0')) + yv = dh.ipx(elem.get('y','0')) + if xv!=0 or yv!=0: + grp = dh.group([elem], moveTCM=True) + elem.set('x','0') + elem.set('y','0') + elem.ctransform = inkex.Transform(f'translate({xv},{yv})') + dh.ungroup(grp) + + @staticmethod + def replace_with_raster(elem, imgloc, bbx, imgbbox): + """Replace vector elements with raster images.""" + svg = elem.croot + if svg is None: # in case we were already rasterized within ancestor + return + ih.embed_external_image(elem, imgloc) + + # The exported image has a different size and shape than the original + # Correct by putting transform/clip/mask on a new parent group, then + # fix location, then ungroup + grp = dh.group([elem], moveTCM=True) + grp.set("clip-path", None) + # conversion to bitmap already includes clips + grp.set("mask", None) # conversion to bitmap already includes masks + + # Calculate what transform is needed to preserve the image's location + ctf = elem.ccomposed_transform + pbb = [ + Vector2d(bbx[0], bbx[1]), + Vector2d(bbx[0] + bbx[2], bbx[1]), + Vector2d(bbx[0] + bbx[2], bbx[1] + bbx[3]), + Vector2d(bbx[0], bbx[1] + bbx[3]), + ] + # top-left,tr,br,bl + put = [ + (-ctf).apply_to_point(p) for p in pbb + ] # untransformed bbox (where the image needs to go) + + newel = inkex.Image() + dh.replace_element(elem, newel) + newel.set("x", 0) + myx = 0 + newel.set("y", 0) + myy = 0 + newel.set("width", 1) + myw = dh.ipx(newel.get("width")) + newel.set("height", 1) + myh = dh.ipx(newel.get("height")) + newel.set("xlink:href", elem.get("xlink:href")) + + # Inkscape inappropriately clips non-'optimizeQuality' images + # when generating PDFs + sty = "image-rendering:optimizeQuality" + elem = newel + + pgo = [ + Vector2d(myx, myy), + Vector2d(myx + myw, myy), + Vector2d(myx + myw, myy + myh), + Vector2d(myx, myy + myh), + ] # where the image is + elem.set("preserveAspectRatio", "none") # prevents aspect ratio snapping + elem.set("style", sty) # override existing styles + + # pylint: disable=invalid-name + a = np.array( + [ + [pgo[0].x, 0, pgo[0].y, 0, 1, 0], + [0, pgo[0].x, 0, pgo[0].y, 0, 1], + [pgo[1].x, 0, pgo[1].y, 0, 1, 0], + [0, pgo[1].x, 0, pgo[1].y, 0, 1], + [pgo[2].x, 0, pgo[2].y, 0, 1, 0], + [0, pgo[2].x, 0, pgo[2].y, 0, 1], + ] + ) + b = np.array( + [ + [ + put[0].x, + put[0].y, + put[1].x, + put[1].y, + put[2].x, + put[2].y, + ] + ] + ).T + T = np.linalg.solve(a, b) + T = "matrix(" + ",".join([str(v[0]) for v in T]) + ")" + elem.set("transform", T) + # pylint: enable=invalid-name + + # If we cropped, need to modify location according to bbox + if ih.hasPIL and imgbbox is not None: + elem.set("x", str(myx + imgbbox[0] * myw)) + elem.set("y", str(myy + imgbbox[1] * myh)) + elem.set("width", str((imgbbox[2] - imgbbox[0]) * myw)) + elem.set("height", str((imgbbox[3] - imgbbox[1]) * myh)) + dh.ungroup(grp) + + @staticmethod + def add_margin(svg, amt_mm, testmode): + """Add margin to the document.""" + mrgn = inkex.units.convert_unit(str(amt_mm) + "mm", "px") + uuw, uuh = svg.cdocsize.uuw, svg.cdocsize.uuh + # pgs = self.Get_Pages(svg) + + haspgs = inkex.installed_haspages or testmode + if haspgs and len(svg.cdocsize.pgs) > 0: + # Has Pages + for page in svg.cdocsize.pgs: + newbbuu = svg.cdocsize.pxtouupgs( + [ + page.bbpx[0] - mrgn, + page.bbpx[1] - mrgn, + page.bbpx[2] + 2 * mrgn, + page.bbpx[3] + 2 * mrgn, + ] + ) + page.set("x", str(newbbuu[0])) + page.set("y", str(newbbuu[1])) + page.set("width", str(newbbuu[2])) + page.set("height", str(newbbuu[3])) + svg.cdocsize = None + + else: + # If an old version of Inkscape or has no Pages, defined by viewbox + vbx = svg.cdocsize.effvb + nvb = [ + vbx[0] - mrgn / uuw, + vbx[1] - mrgn / uuh, + vbx[2] + 2 * mrgn / uuw, + vbx[3] + 2 * mrgn / uuh, + ] + svg.set_viewbox(nvb) + + @staticmethod + def change_viewbox_to_page(svg, page): + """Change viewbox to match specified page.""" + newvb = page.croot.cdocsize.pxtouu(page.bbpx) + svg.set_viewbox(newvb) + + @staticmethod + def get_markers(elem): + """Returns valid marker keys and corresponding elements""" + mkrd = dict() + for mtyp in ["marker", "marker-start", "marker-mid", "marker-end"]: + mkrel = elem.cstyle.get_link(mtyp, elem.croot) + if mkrel is not None: + mkrd[mtyp] = mkrel + return mkrd + + @staticmethod + def stroke_to_path_fixes(els): + """ + Stroke to Path has tons of bugs. Try to preempt them. + 1. STP does not properly handle clips, so move clips and + masks to a temp parent group. + 2. Densely-spaced nodes can be converted incorrectly, so scale paths up + to be size 1000 and position corner at (0,0) + 3. Starting markers can be flipped. + 4. Markers on groups cause crashes + 5. Markers are given the wrong size + """ + dummy_groups = [] + path_els = [] + stroked_els = [] + if len(els) > 0: + svg = els[0].croot + for elem in els: + mkrs = Exporter.get_markers(elem) + if isinstance(elem, inkex.Group) and len(mkrs) > 0: + dh.ungroup(elem) + elif elem.tag in otp_support_tags: + sty = elem.cspecified_style + if "stroke" in sty and sty["stroke"] != "none": + stroked_els.append((elem, sty, mkrs)) + + for elem, sty, mkrs in stroked_els: + swd = sty.get("stroke-width") + if dh.ipx(swd) == 0: + # Fix bug on zero-stroke paths + sty["stroke"] = "none" + elem.cstyle = sty + elif swd is None: + sty["stroke-width"] = default_style_atts['stroke-width'] + else: + # Clip and mask issues solved by moving to a dummy parent group + gndp = dh.group([elem], moveTCM=True) + # Do it again so we can add transform later without + # messing up clip + grp = dh.group([elem], moveTCM=True) + + path_els.append(elem.get_id()) + dummy_groups.extend([gndp.get_id(), grp.get_id()]) + + # Scale up most paths to be size 1000 and position corner + # at (0,0) + if inkex.addNS("type", "sodipodi") not in elem.attrib: + # Object to path doesn't currently support + # Inkscape-specific objects + elem.object_to_path() + bbx = elem.bounding_box2( + dotransform=False, includestroke=False, roughpath=False + ) + if len(mkrs) == 0: + # scaleby = 1000 + maxsz = max(bbx.w, bbx.h) + scaleby = 1000 / maxsz if maxsz > 0 else 1000 + else: + # For paths with markers, scale to make stroke-width=1 + # Prevents incorrect marker size + # https://gitlab.com/inkscape/inbox/-/issues/10506#note_1931910230 + scaleby = 1 / dh.ipx(swd) if swd is not None else 1 + + tfm = Transform("scale({0})".format(scaleby)) @ Transform( + "translate({0},{1})".format(-bbx.x1, -bbx.y1) + ) + # relative paths seem to have some bugs + pth2 = str(elem.cpath.to_absolute().transform(tfm)) + elem.set("d", pth2) + + # Put transform on parent group since STP cannot convert + # transformed paths correctly if they have dashes + # See https://gitlab.com/inkscape/inbox/-/issues/7844 + grp.ctransform = -tfm + + csty = elem.cspecified_style + if "stroke-width" in csty: + swd = dh.ipx(csty["stroke-width"]) + elem.cstyle["stroke-width"] = str(swd * scaleby) + if "stroke-dasharray" in csty: + sda = dh.listsplit(csty["stroke-dasharray"]) + elem.cstyle["stroke-dasharray"] = ( + str([(sdv or 0) * scaleby for sdv in sda]) + .strip("[") + .strip("]") + ) + + # Fix bug on start markers where auto-start-reverse + # oriented markers are inverted by STP + sty = elem.cspecified_style + mstrt = sty.get_link("marker-start", svg) + if mstrt is not None: + if mstrt.get("orient") == "auto-start-reverse": + dup = mstrt.duplicate() + dup.set("orient", "auto") + for dkid in list(dup): + dkid.ctransform = Transform("scale(-1)") @ dkid.ctransform + sty["marker-start"] = dup.get_id(as_url=2) + elem.cstyle = sty + return path_els, dummy_groups + + +# Convenience functions +def joinmod(dirc, fname): + """Join directory and file name with absolute path.""" + return os.path.join(os.path.abspath(dirc), fname) + +def get_svg(fin): + """Load an SVG file and return the root svg element.""" + try: + svg = inkex.load_svg(fin).getroot() + except lxml.etree.XMLSyntaxError: + # Try removing problematic bytes + with open(fin, "rb") as file: + bytes_content = file.read() + cleaned_content = bytes_content.decode("utf-8", errors="ignore") + nfin = dh.shared_temp(filename="cleaned.svg") + with open(nfin, "w", encoding="utf-8") as file: + file.write(cleaned_content) + svg = inkex.load_svg(nfin).getroot() + return svg + + +ORIG_KEY = "si_ae_original_filename" +DUP_KEY = "si_ae_original_duplicate" + + +def hash_file(filename): + """Calculate hash of a file.""" + hashv = hashlib.sha256() + with open(filename, "rb") as file: + chunk = 0 + while chunk != b"": + chunk = file.read(1024) + hashv.update(chunk) + return hashv.hexdigest() + + +if __name__ == "__main__": + dh.Run_SI_Extension(AutoExporter(), "Autoexporter") \ No newline at end of file diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/autoexporter_script.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/autoexporter_script.py new file mode 100644 index 0000000..ecccb7d --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/autoexporter_script.py @@ -0,0 +1,911 @@ +# Inkscape Auto-Exporter, by David Burghoff +# Service that checks a folder for changes in svg files, and then exports them +# automatically to another folder in multiple formats. + +DEBUG = False +WHILESLEEP = 0.5 +MAXTHREADS = 1000 + +import sys, platform, os, threading, time, copy, pickle + +import tempfile + +systmpdir = os.path.abspath(tempfile.gettempdir()) +aes = os.path.join(systmpdir, "si_ae_settings.p") + +with open(aes, "rb") as f: + input_options = pickle.load(f) +os.remove(aes) +bfn = input_options.inkscape_bfn +sys.path += input_options.syspath +guitype = input_options.guitype + +import dhelpers as dh # noqa +import inkex +import inkex.text.parser # needed to prevent GTK crashing + +import autoexporter +from autoexporter import Exporter + + +def mprint(*args, **kwargs): + if guitype == "gtk": + global win + GLib.idle_add(win.print_text, args[0]) + else: + print(*args, **kwargs) + + +# Get svg files in directory +def get_files(dirin): + import re + from datetime import datetime + + def ends_with_date(s): + pattern = r"\.(\d{4}_\d{2}_\d{2}_\d{2}_\d{2}_\d{2}\.\d{1,6})\.svg$" + match = re.search(pattern, s) + if match: + date_string = match.group(1) + custom_format = "%Y_%m_%d_%H_%M_%S.%f" + try: + datetime.strptime(date_string, custom_format) + return True + except ValueError: + return False + return False + + fs = [] + try: + for f in os.scandir(dirin): + excludes = ["_portable.svg", "_plain.svg"] + if ( + f.name.endswith(".svg") + and all([not (f.name.endswith(ex)) for ex in excludes]) + and not (ends_with_date(f.name)) + ): + fs.append(os.path.join(os.path.abspath(dirin), f.name)) + return fs + except: # (FileNotFoundError, OSError): + return None # directory missing (cloud drive error?) + + +class Watcher: + """Class that watches a folder for changes to SVGs""" + + def __init__(self, directory_to_watch, createfcn=None, modfcn=None, deletefcn=None): + import re, sys + from threading import Timer + import warnings + + warnings.filterwarnings( + "ignore", message="Failed to import fsevents. Fall back to kqueue" + ) + mydir = os.path.dirname(os.path.abspath(__file__)) + packages = os.path.join(mydir, "packages") + if packages not in sys.path: + sys.path.append(packages) + from watchdog.observers import Observer + from watchdog.events import FileSystemEventHandler + + class Handler(FileSystemEventHandler): + def __init__(self, createfcn=None, modfcn=None, deletefcn=None): + # Dictionary to store the last event and debounce timers for each file + self.debounce_timers = {} + self.last_event = {} + self.file_mod_times = {} + self.createfcn = createfcn + self.modfcn = modfcn + self.deletefcn = deletefcn + # Initialize file modification times + self.initialize_mod_times(directory_to_watch) + + @staticmethod + def is_target_file(file_name): + excludes = ["_portable.svg", "_plain.svg"] + pattern = r"\.(\d{4}_\d{2}_\d{2}_\d{2}_\d{2}_\d{2}\.\d{1,6})\.svg$" + if any(file_name.endswith(ex) for ex in excludes): + return False + if re.search(pattern, file_name): + return False + return file_name.endswith(".svg") + + @staticmethod + def get_mod_time(file_path): + try: + return os.path.getmtime(file_path) + except FileNotFoundError: + return None + + def initialize_mod_times(self, directory): + for file in os.listdir(directory): + file_path = os.path.join(directory, file) + if os.path.isfile(file_path) and self.is_target_file(file_path): + mod_time = self.get_mod_time(file_path) + if mod_time: + self.file_mod_times[file_path] = mod_time + + def debounce(self, event): + # Process the last event + if event.event_type == "created": + if self.createfcn is not None: + self.createfcn(event.src_path) + elif event.event_type == "modified": + if self.modfcn is not None: + self.modfcn(event.src_path) + elif event.event_type == "deleted": + if self.deletefcn is not None: + self.deletefcn(event.src_path) + + def handle_event(self, event): + if event.is_directory: + return None + if self.is_target_file(event.src_path): + # Cancel existing timer if present + if event.src_path in self.debounce_timers: + self.debounce_timers[event.src_path].cancel() + # Store the event + self.last_event[event.src_path] = event + # Set a new timer + self.debounce_timers[event.src_path] = Timer( + 1.0, self.debounce, [event] + ) + self.debounce_timers[event.src_path].start() + + def on_created(self, event): + self.handle_event(event) + + def on_modified(self, event): + if event.is_directory: + return None + + if self.is_target_file(event.src_path): + new_mod_time = self.get_mod_time(event.src_path) + old_mod_time = self.file_mod_times.get(event.src_path) + + # Only handle the event if the file modification time has changed + if new_mod_time and new_mod_time != old_mod_time: + self.file_mod_times[event.src_path] = new_mod_time + self.handle_event(event) + + def on_deleted(self, event): + if event.src_path in self.file_mod_times: + del self.file_mod_times[event.src_path] + self.handle_event(event) + + self.Handler = Handler # Make Handler an attribute of Watcher + self.observer = Observer() + self.directory_to_watch = directory_to_watch + self.createfcn = createfcn + self.modfcn = modfcn + self.deletefcn = deletefcn + self.start() + + def start(self): + event_handler = self.Handler( + createfcn=self.createfcn, modfcn=self.modfcn, deletefcn=self.deletefcn + ) + self.observer.schedule(event_handler, self.directory_to_watch, recursive=False) + self.observer.start() + + def stop(self): + self.observer.stop() + self.observer.join() + + +# Threading class +class FileCheckerThread(threading.Thread): + def __init__(self, watchdir, writedir): + threading.Thread.__init__(self) + self.stopped = False + self.nf = True # new folder + self.ea = False # export all + self.es = False # export selected + self.dm = False # debug mode + self.promptpending = True + self.watcher = None + self.watchdir = input_options.watchdir + self.writedir = input_options.writedir + self.thread_queue = [] + self.running_threads = [] + self.finished_threads = [] + + def queue_thread(self, f): + for t in self.thread_queue + self.running_threads: + if t.file == f: + t.stopped = True + fthr = AutoExporterThread() + fthr.file = f + fthr.outtemplate = autoexporter.joinmod(self.writedir, os.path.split(f)[1]) + self.thread_queue.append(fthr) + + def start_watcher(self): + if self.watcher is not None: # Stop existing watcher + self.watcher.stop() + mfcn = lambda x: self.queue_thread(os.path.abspath(x)) + self.watcher = Watcher(self.watchdir, createfcn=mfcn, modfcn=mfcn) + + def run(self): + self.start_watcher() + while not self.stopped: + self.checkongoing = True + if self.nf: + if guitype == "terminal": + mprint( + "Export formats: " + + ", ".join([v.upper() for v in input_options.formats]) + ) + mprint("Rasterization DPI: " + str(input_options.dpi)) + mprint("Watch directory: " + self.watchdir) + mprint("Write directory: " + self.writedir) + self.nf = False + + if self.watcher.directory_to_watch != self.watchdir: + self.start_watcher() + + if self.ea: # export all + self.ea = False + updatefiles = get_files(self.watchdir) + if updatefiles is None: + mprint("Cannot access watch directory.") + updatefiles = [] + elif self.es: + self.es = False + updatefiles = [self.selectedfile] + else: + updatefiles = [] + + loopme = True + while loopme: + for f in sorted(updatefiles): + self.queue_thread(f) + + while ( + len(self.thread_queue) > 0 + and len(self.running_threads) < MAXTHREADS + and not self.stopped + ): + self.thread_queue[0].start() + self.running_threads.append(self.thread_queue[0]) + self.thread_queue.remove(self.thread_queue[0]) + time.sleep(WHILESLEEP) + + for thr in reversed(self.running_threads): + if not thr.is_alive(): + self.running_threads.remove(thr) + self.finished_threads.append(thr) + self.promptpending = True + + while self.dm and any([thr.is_alive() for thr in self.running_threads]): + time.sleep(WHILESLEEP) + loopme = self.dm + + if self.promptpending and len(self.running_threads) + len(self.thread_queue) == 0: + if guitype == "terminal": + mprint(promptstring) + self.promptpending = False + time.sleep(WHILESLEEP) + + self.watcher.stop() + for t in self.running_threads: + t.stopped = True + while any([thr.is_alive() for thr in self.running_threads]): + time.sleep(WHILESLEEP) + for thr in reversed(self.running_threads): + self.running_threads.remove(thr) + self.finished_threads.append(thr) + +class PromptThread(threading.Thread): + def __init__(self): + threading.Thread.__init__(self) + self.ui = None # user input + + def run(self): + self.ui = input("") + + +class AutoExporterThread(threading.Thread): + def __init__(self): + threading.Thread.__init__(self) + self.file = None + self.outtemplate = None + self.stopped = False + + def run(self): + fname = os.path.split(self.file)[1] + try: + offset = round(os.get_terminal_size().columns / 2) + except: + offset = 40 + fname = fname + " " * max(0, offset - len(fname)) + mprint(fname + ": Beginning export") + opts = copy.copy(input_options) + opts.debug = DEBUG + opts.prints = mprint + opts.aeThread = self + opts.original_file = self.file + opts.formats = [ + fmt + for fmt, use in zip( + ["pdf", "png", "emf", "eps", "psvg"], + [opts.usepdf, opts.usepng, opts.useemf, opts.useeps, opts.usepsvg], + ) + if use + ] + opts.outtemplate = self.outtemplate + opts.bfn = bfn + try: + Exporter(self.file, opts).export_all() + except SystemExit: + pass + except: + import traceback + error_message = f"Exception in {fname}\n" + error_message += traceback.format_exc() + mprint(error_message) + +if guitype == "gtk": + import warnings + + with warnings.catch_warnings(): + # Ignore ImportWarning for Gtk + warnings.simplefilter("ignore") + import gi + + gi.require_version("Gtk", "3.0") + from gi.repository import Gtk, GLib, Gdk + + class AutoexporterWindow(Gtk.Window): + def __init__(self, ct): + Gtk.Window.__init__(self, title="Autoexporter") + WINDOW_WIDTH = 450 + MARGIN = 10 + self.set_default_size(WINDOW_WIDTH, -1) + self.set_position(Gtk.WindowPosition.CENTER) + + self.notebook = Gtk.Notebook() + self.notebook.set_margin_start(MARGIN) + self.notebook.set_margin_end(MARGIN) + self.notebook.set_margin_top(MARGIN) + self.notebook.set_margin_bottom(MARGIN) + self.add(self.notebook) + + # Tab 1: Controls + tab1_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) + self.notebook.append_page(tab1_box, Gtk.Label(label="Controls")) + + # Top message window + self.selected_file_label = Gtk.TextView() + self.selected_file_label.set_editable(False) + self.selected_file_label.set_wrap_mode(Gtk.WrapMode.CHAR) + self.selected_file_label.get_buffer().set_text("No file selected.") + self.message_scrolled_window = Gtk.ScrolledWindow() # Renamed for clarity + self.message_scrolled_window.set_size_request(WINDOW_WIDTH-2*MARGIN, 150) + self.message_scrolled_window.set_hexpand(True) + self.message_scrolled_window.set_vexpand(True) + self.message_scrolled_window.add(self.selected_file_label) + tab1_box.pack_start(self.message_scrolled_window, True, True, 0) + + # Bottom file log window + self.filelogstore = Gtk.ListStore(str, str) + self.treeview = Gtk.TreeView(model=self.filelogstore) + renderer_text = Gtk.CellRendererText() + column_text = Gtk.TreeViewColumn("Filename", renderer_text, text=0) + column_text.set_fixed_width((WINDOW_WIDTH-2*MARGIN)*0.49) # Set your desired fixed width + self.treeview.append_column(column_text) + renderer_text = Gtk.CellRendererText() + column_text = Gtk.TreeViewColumn("Message", renderer_text, text=1) + self.treeview.append_column(column_text) + self.file_log_scrolled_window = Gtk.ScrolledWindow() # Renamed for clarity + self.file_log_scrolled_window.set_policy( + Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC + ) + self.file_log_scrolled_window.set_size_request(WINDOW_WIDTH-2*MARGIN, 350) + self.file_log_scrolled_window.set_vexpand(True) + self.file_log_scrolled_window.add(self.treeview) + self.filelogstore.connect("row-inserted", self.on_row_inserted) + self.maxlsrows = 100 + self.treeview.connect("size-allocate", self.on_treeview_size_allocate) + tab1_box.pack_start(self.file_log_scrolled_window, True, True, 0) + + # Separator + separator = Gtk.Separator(orientation=Gtk.Orientation.HORIZONTAL) + tab1_box.pack_start(separator, False, True, 0) + + # Watch directory + LABEL_WIDTH = 16 + watch_file_chooser_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=10) + watch_file_chooser_label = Gtk.Label(label="Watch directory", xalign=0.5) # Center text + watch_file_chooser_label.set_width_chars(LABEL_WIDTH) # Set fixed width + self.watch_file_chooser_button = Gtk.FileChooserButton(title="Choose watch directory", action=Gtk.FileChooserAction.SELECT_FOLDER) + self.watch_file_chooser_button.set_filename(input_options.watchdir) # Set the initial folder here + self.watch_file_chooser_button.connect("file-set", self.watch_folder_button_clicked) + self.watch_file_chooser_button.set_hexpand(True) + self.watch_file_chooser_button.set_halign(Gtk.Align.FILL) + watch_file_chooser_box.pack_start(watch_file_chooser_label, False, False, 0) + watch_file_chooser_box.pack_start(self.watch_file_chooser_button, True, True, 0) + tab1_box.pack_start(watch_file_chooser_box, False, False, 0) + + # Write directory + write_file_chooser_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=10) + write_file_chooser_label = Gtk.Label(label="Write directory", xalign=0.5) # Center text + write_file_chooser_label.set_width_chars(LABEL_WIDTH) # Set fixed width + self.write_file_chooser_button = Gtk.FileChooserButton(title="Choose write directory", action=Gtk.FileChooserAction.SELECT_FOLDER) + self.write_file_chooser_button.set_filename(input_options.writedir) # Set the initial folder here + self.write_file_chooser_button.connect("file-set", self.write_folder_button_clicked) + self.write_file_chooser_button.set_hexpand(True) + self.write_file_chooser_button.set_halign(Gtk.Align.FILL) + write_file_chooser_box.pack_start(write_file_chooser_label, False, False, 0) + write_file_chooser_box.pack_start(self.write_file_chooser_button, True, True, 0) + tab1_box.pack_start(write_file_chooser_box, False, False, 0) + + # Export all button + self.ea_button = Gtk.Button(label="Export all") + self.ea_button.connect("clicked", self.export_all_clicked) + tab1_box.pack_start(self.ea_button, False, False, 0) + + # Export file button + self.ef_button = Gtk.Button(label="Export file") + self.ef_button.connect("clicked", self.export_file_clicked) + tab1_box.pack_start(self.ef_button, False, False, 0) + + # Exit button + self.exit_button = Gtk.Button(label="Exit") + self.exit_button.connect("clicked", self.exit_clicked) + tab1_box.pack_start(self.exit_button, False, False, 0) + + + + # Tab 2: Options + tab2_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) + tab2_box.set_margin_start(10) + tab2_box.set_margin_end(10) + tab2_box.set_margin_top(10) + tab2_box.set_margin_bottom(10) + self.notebook.append_page(tab2_box, Gtk.Label(label="Options")) + + css_provider = Gtk.CssProvider() + css_provider.load_from_data(b".label-bold { font-weight: bold; }") + Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) + + # Formats to export + export_label = Gtk.Label(label="Formats to export", xalign=0) + export_label.get_style_context().add_class("label-bold") + tab2_box.pack_start(export_label, False, False, 5) + export_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=10) + tab2_box.pack_start(export_box, False, False, 10) + vbox_formats = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5) + export_box.pack_start(vbox_formats, True, True, 0) + self.pdf_check = Gtk.CheckButton(label="PDF") + self.png_check = Gtk.CheckButton(label="PNG") + self.emf_check = Gtk.CheckButton(label="EMF") + self.eps_check = Gtk.CheckButton(label="EPS") + self.svg_check = Gtk.CheckButton(label="Plain SVG") + vbox_formats.pack_start(self.pdf_check, False, False, 0) + vbox_formats.pack_start(self.png_check, False, False, 0) + vbox_formats.pack_start(self.emf_check, False, False, 0) + vbox_formats.pack_start(self.eps_check, False, False, 0) + vbox_formats.pack_start(self.svg_check, False, False, 0) + + # Rasterization DPI + dpi_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5) + export_box.pack_start(dpi_box, False, False, 0) + dpi_label = Gtk.Label(label="Rasterization DPI") + adj = Gtk.Adjustment(value=1.0, lower=1, upper=10000, step_increment=1, + page_increment=10, page_size=0) + self.dpi_spin = Gtk.SpinButton(adjustment=adj, digits=0) + dpi_box.pack_start(dpi_label, False, False, 0) + dpi_box.pack_start(self.dpi_spin, False, False, 0) + + # Embedded image handling options + image_handling_label = Gtk.Label(label="Embedded image handling", xalign=0) + image_handling_label.get_style_context().add_class("label-bold") + tab2_box.pack_start(image_handling_label, False, False, 5) + self.crop_check = Gtk.CheckButton(label="Crop and resample images?") + tab2_box.pack_start(self.crop_check, False, False, 5) + + # Other options + other_options_label = Gtk.Label(label="Other options", xalign=0) + other_options_label.get_style_context().add_class("label-bold") + tab2_box.pack_start(other_options_label, False, False, 5) + other_options_box = Gtk.Box( + orientation=Gtk.Orientation.HORIZONTAL, spacing=10 + ) + tab2_box.pack_start(other_options_box, False, False, 10) + vbox_other_options = Gtk.Box( + orientation=Gtk.Orientation.VERTICAL, spacing=5 + ) + other_options_box.pack_start(vbox_other_options, True, True, 0) + self.convert_text_check = Gtk.CheckButton(label="Convert text to paths") + self.prevent_thin_lines_check = Gtk.CheckButton( + label="Prevent thin line enhancement" + ) + self.convert_strokes_check = Gtk.CheckButton( + label="Convert all strokes to paths" + ) + self.transparent_back_check = Gtk.CheckButton( + label="Add transparent backing rectangle" + ) + vbox_other_options.pack_start(self.convert_text_check, False, False, 0) + vbox_other_options.pack_start( + self.prevent_thin_lines_check, False, False, 0 + ) + vbox_other_options.pack_start(self.convert_strokes_check, False, False, 0) + vbox_other_options.pack_start(self.transparent_back_check, False, False, 0) + extra_margin_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5) + other_options_box.pack_start(extra_margin_box, False, False, 0) + self.extra_margin_label = Gtk.Label(label="Extra margin (mm)") + adj = Gtk.Adjustment(value=1.0, lower=0, upper=10, step_increment=0.1, page_increment=1, page_size=0) + self.extra_margin_spin = Gtk.SpinButton(adjustment=adj, digits=1) + extra_margin_box.pack_start(self.extra_margin_label, False, False, 0) + extra_margin_box.pack_start(self.extra_margin_spin, False, False, 0) + + # PDF options + pdf_options_label = Gtk.Label(label="PDF options", xalign=0) + pdf_options_label.get_style_context().add_class("label-bold") + tab2_box.pack_start(pdf_options_label, False, False, 5) + self.omit_text_check = Gtk.CheckButton( + label="Omit text in PDF and create LaTeX file" + ) + tab2_box.pack_start(self.omit_text_check, False, False, 5) + + # Initialize from input_options + self.pdf_check.set_active(input_options.usepdf) + self.png_check.set_active(input_options.usepng) + self.emf_check.set_active(input_options.useemf) + self.eps_check.set_active(input_options.useeps) + self.svg_check.set_active(input_options.usepsvg) + self.dpi_spin.set_value(float(input_options.dpi)) + + self.crop_check.set_active(input_options.imagemode2) + self.convert_text_check.set_active(input_options.texttopath) + self.prevent_thin_lines_check.set_active(input_options.thinline) + self.convert_strokes_check.set_active(input_options.stroketopath) + self.transparent_back_check.set_active(input_options.backingrect) + self.extra_margin_spin.set_value(float(input_options.margin)) + self.omit_text_check.set_active(input_options.latexpdf) + + # Connect options buttons to callbacks + self.pdf_check.connect("toggled", self.on_pdf_toggled) + self.png_check.connect("toggled", self.on_png_toggled) + self.emf_check.connect("toggled", self.on_emf_toggled) + self.eps_check.connect("toggled", self.on_eps_toggled) + self.svg_check.connect("toggled", self.on_svg_toggled) + self.dpi_spin.connect("value-changed", self.on_dpi_changed) + self.crop_check.connect("toggled", self.on_crop_toggled) + self.convert_text_check.connect("toggled", self.on_convert_text_toggled) + self.prevent_thin_lines_check.connect( + "toggled", self.on_prevent_thin_lines_toggled + ) + self.convert_strokes_check.connect( + "toggled", self.on_convert_strokes_toggled + ) + self.transparent_back_check.connect( + "toggled", self.on_transparent_back_toggled + ) + self.extra_margin_spin.connect("value-changed", self.on_margin_changed) + self.omit_text_check.connect("toggled", self.on_omit_text_toggled) + + self.ct = ct + + + def on_treeview_size_allocate(self, widget, allocation): + ''' + Scroll to end after file inserted to File Log window + Seems to sometimes cause GTK to crash + ''' + if len(self.filelogstore)>0: + path = Gtk.TreePath.new_from_string(str(len(self.filelogstore)-1)) + column = None + self.treeview.scroll_to_cell(path, column, False, 0.0, 1.0) + + # def on_text_buffer_insert_text(self, buffer, iter, text, length): + # # Scroll to end after text printed + # mark = buffer.get_insert() + # self.selected_file_label.scroll_to_mark(mark, 0.0, True, 0.0, 1.0) + + def on_row_inserted(self, store, path, iter): + # Count the number of rows currently in the store + num_rows = len(self.filelogstore) + + # If the number of rows exceeds 100, remove the oldest rows + if num_rows > self.maxlsrows: + for i in range(num_rows - self.maxlsrows): + self.filelogstore.remove(self.filelogstore.get_iter_first()) + + def print_text(self, text): + lns = text.split("\n") + tor = [] + exception = text.startswith("Exception") + for ln in lns: + if "Export formats: " in ln or "Rasterization DPI: " in ln or exception: + continue + if ( + ":" in ln + and len(ln.split(":")) == 2 + and "Inkscape binary" not in ln + and "Python interpreter" not in ln + ): + ln2 = [v.strip(" ") for v in ln.split(":")] + self.filelogstore.append(ln2) + tor.append(ln) + lns = [item for item in lns if item not in tor] + text = "\n".join(lns) + + if len(text) > 0: + buffer = self.selected_file_label.get_buffer() + self.selected_file_label.get_buffer() + start, end = buffer.get_bounds() + if buffer.get_text(start, end, False) == "No file selected.": + buffer.set_text("") + buffer.insert(buffer.get_end_iter(), text + "\n") + + def exit_clicked(self, widget): + self.destroy() + + def watch_folder_button_clicked(self, widget): + selected_file = self.watch_file_chooser_button.get_filename() + # Check if selected_file is None, which indicates the user clicked 'Cancel' + if selected_file is not None: + self.ct.watchdir = selected_file + self.ct.nf = True + + def write_folder_button_clicked(self, widget): + selected_file = self.write_file_chooser_button.get_filename() + # Check if selected_file is None, which indicates the user clicked 'Cancel' + if selected_file is not None: + self.ct.writedir = selected_file + self.ct.nf = True + + def export_all_clicked(self, widget): + self.ct.ea = True + # self.ct.dm = True + + def export_file_clicked(self, widget): + native = Gtk.FileChooserNative.new( + "Please choose a file", self, Gtk.FileChooserAction.OPEN, None, None + ) + filter_ppt = Gtk.FileFilter() + filter_ppt.set_name("SVG files") + filter_ppt.add_pattern("*.svg") + native.add_filter(filter_ppt) + response = native.run() + if response == Gtk.ResponseType.ACCEPT: + selected_file = native.get_filename() + self.ct.selectedfile = selected_file + self.ct.es = True + native.destroy() + + def on_pdf_toggled(self, widget): + input_options.usepdf = widget.get_active() + print("PDF option toggled:", widget.get_active()) + + def on_png_toggled(self, widget): + input_options.usepng = widget.get_active() + print("PNG option toggled:", widget.get_active()) + + def on_emf_toggled(self, widget): + input_options.useemf = widget.get_active() + print("EMF option toggled:", widget.get_active()) + + def on_eps_toggled(self, widget): + input_options.useeps = widget.get_active() + print("EPS option toggled:", widget.get_active()) + + def on_svg_toggled(self, widget): + input_options.usepsvg = widget.get_active() + print("SVG option toggled:", widget.get_active()) + + def on_dpi_changed(self, widget): + input_options.dpi = widget.get_value_as_int() + print("Rasterization DPI changed:", widget.get_value_as_int()) + + def on_crop_toggled(self, widget): + input_options.imagemode2 = widget.get_active() + print("Crop and resample images option toggled:", widget.get_active()) + + def on_convert_text_toggled(self, widget): + input_options.texttopath = widget.get_active() + print("Convert text to paths option toggled:", widget.get_active()) + + def on_prevent_thin_lines_toggled(self, widget): + input_options.thinline = widget.get_active() + print("Prevent thin line enhancement option toggled:", widget.get_active()) + + def on_convert_strokes_toggled(self, widget): + input_options.stroketopath = widget.get_active() + print("Convert all strokes to paths option toggled:", widget.get_active()) + + def on_transparent_back_toggled(self, widget): + input_options.backingrect = widget.get_active() + print( + "Add transparent backing rectangle option toggled:", widget.get_active() + ) + + def on_margin_changed(self, widget): + input_options.margin = widget.get_value() + print("Extra margin changed:", widget.get_value()) + + def on_omit_text_toggled(self, widget): + input_options.latexpdf = widget.get_active() + print( + "Omit text in PDF and create LaTeX file option toggled:", + widget.get_active(), + ) + + fc = FileCheckerThread(input_options.watchdir,input_options.writedir) + global win + win = AutoexporterWindow(fc) + win.set_keep_above(True) + + mprint("Scientific Inkscape Autoexporter") + mprint("\nPython interpreter: " + sys.executable) + mprint("Inkscape binary: " + bfn + "") + + import image_helpers as ih + + mprint("Python does not have PIL, images will not be cropped" + " or converted to JPG\n" if not ih.hasPIL else "Python has PIL\n") + fc.start() + + def quit_and_close(self): + fc.stopped = True + Gtk.main_quit() + + win.connect("destroy", quit_and_close) + win.show_all() + win.set_keep_above(False) + Gtk.main() +else: + try: + import tkinter + + promptstring = ("\nEnter D to change directories, R to change DPI, F to" + " export a file, A to export all now, and Q to quit: ") + hastkinter = True + except: + promptstring = "\nEnter A to export all now, R to change DPI, and Q to quit: " + hastkinter = False + + if platform.system().lower() == "darwin": + mprint(" ") + elif platform.system().lower() == "windows": + # Disable QuickEdit, which I think causes the occasional freezes + # From https://stackoverflow.com/questions/37500076/ + # how-to-enable-windows-console-quickedit-mode-from-python + def quickedit(enabled=1): + import ctypes + + """ + Enable or disable quick edit mode to prevent system hangs, + sometimes when using remote desktop + Param (Enabled) + enabled = 1(default), enable quick edit mode in python console + enabled = 0, disable quick edit mode in python console + """ + # -10 is input handle => STD_INPUT_HANDLE (DWORD) -10 | + # https://docs.microsoft.com/en-us/windows/console/getstdhandle + # default = (0x4|0x80|0x20|0x2|0x10|0x1|0x40|0x200) + # 0x40 is quick edit, #0x20 is insert mode + # 0x8 is disabled by default + # https://docs.microsoft.com/en-us/windows/console/setconsolemode + kernel32 = ctypes.windll.kernel32 + if enabled: + kernel32.SetConsoleMode( + kernel32.GetStdHandle(-10), + (0x4 | 0x80 | 0x20 | 0x2 | 0x10 | 0x1 | 0x40 | 0x100), + ) + # mprint("Console Quick Edit Enabled") + else: + kernel32.SetConsoleMode( + kernel32.GetStdHandle(-10), + (0x4 | 0x80 | 0x20 | 0x2 | 0x10 | 0x1 | 0x00 | 0x100), + ) + # mprint("Console Quick Edit Disabled") + + quickedit(0) # Disable quick edit in terminal + + mprint("Scientific Inkscape Autoexporter") + mprint("\nPython interpreter: " + sys.executable) + mprint("Inkscape binary: " + bfn + "") + + import image_helpers as ih + + mprint("Python does not have PIL, images will not be cropped" + " or converted to JPG\n" if not ih.hasPIL else "Python has PIL\n") + + def Get_Directories(): + root = tkinter.Tk() + root.geometry("1x1") + root.lift() + root.overrideredirect(1) + mprint("Select a directory to watch") + watchdir = tkinter.filedialog.askdirectory(title="Select a directory to watch") + root.destroy() + if watchdir == "": + raise + root = tkinter.Tk() + root.geometry("1x1") + root.lift() + root.overrideredirect(1) + mprint("Select a directory to write to") + writedir = tkinter.filedialog.askdirectory( + title="Select a directory to write to" + ) + root.destroy() + if writedir == "": + raise + return watchdir, writedir + + def Get_File(initdir): + root = tkinter.Tk() + root.geometry("1x1") + root.lift() + root.overrideredirect(1) + mprint("Select a file to export") + selectedfile = tkinter.filedialog.askopenfile(title="Select a file") + root.destroy() + selectedfile.close() + return selectedfile.name + + def get_defs(svg): + for k in list(svg): + if isinstance(k, (inkex.Defs)): + return k + d = inkex.Defs() + # no Defs, make one + svg.insert(len(list(svg)), d) + return d + + # Main loop + fc = FileCheckerThread(input_options.watchdir,input_options.writedir) + if fc.watchdir is None or fc.writedir is None: + fc.watchdir, fc.writedir = Get_Directories() + + fc.start() + while fc.nf: # wait until it's done initializing + pass + t2 = PromptThread() + t2.start() + keeprunning = True + while keeprunning: + if not (t2.is_alive()): + if t2.ui in ["Q", "q"]: + fc.stopped = True + keeprunning = False + elif t2.ui in ["D", "d"]: + if hastkinter: + try: + fc.watchdir, fc.writedir = Get_Directories() + fc.nf = True + except: + pass + elif t2.ui in ["R", "r"]: + input_options.dpi = int(input("Enter new rasterization DPI: ")) + elif t2.ui in ["A", "a"]: + fc.ea = True + elif t2.ui in ["F", "f"]: + if hastkinter: + try: + fc.selectedfile = Get_File(fc.watchdir) + fc.es = True + except: + pass + elif t2.ui in ["#"]: + fc.dm = True + # entering # starts an infinite export loop in the current dir + fc.ea = True + else: + mprint("Invalid input!") + if keeprunning: + t2 = PromptThread() + t2.start() + fc.promptpending = True + time.sleep(WHILESLEEP) + + # On macOS close the terminal we opened + # https://superuser.com/questions/158375/ + # how-do-i-close-the-terminal-in-osx-from-the-command-line + if platform.system().lower() == "darwin": + os.system( + "osascript -e 'tell application \"Terminal\" to close first window' & exit" + ) \ No newline at end of file diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/combine_by_color.inx b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/combine_by_color.inx new file mode 100644 index 0000000..7318c7e --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/combine_by_color.inx @@ -0,0 +1,34 @@ + + + Combine by color + burghoff.combinebycolor + + + + + + + + + + + + 15 + + + + + + + + + text + + + + + + diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/combine_by_color.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/combine_by_color.py new file mode 100644 index 0000000..2291e78 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/combine_by_color.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# Copyright (C) 2021 David Burghoff, dburghoff@nd.edu +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +import dhelpers as dh +import inkex +from inkex import NamedView, Defs, Metadata, ForeignObject, Group, MissingGlyph +import math + +class CombineByColor(inkex.EffectExtension): + # def document_path(self): + # return 'test' + + def add_arguments(self, pars): + pars.add_argument("--tab", help="The selected UI-tab when OK was pressed") + pars.add_argument( + "--lightnessth", type=float, default=15, help="Lightness threshold" + ) + + def effect(self): + lightness_threshold = self.options.lightnessth / 100 + + sel = [self.svg.selection[ii] for ii in range(len(self.svg.selection))] + # should work with both v1.0 and v1.1 + sel = [v for el in sel for v in el.descendants2()] + + allel = [v for v in self.svg.descendants2()] + elord = [allel.index(v) for v in sel] + # order of selected elements in svg + + els = [ + el + for el in sel + if not ( + isinstance( + el, (NamedView, Defs, Metadata, ForeignObject, Group, MissingGlyph) + ) + ) + and ( + el.get("d") is not None + or el.get("points") is not None + or el.get("x1") is not None + ) + ] + + merged = [False for el in els] + # stys = [(el.cspecified_style) for el in els] + sfs = [dh.get_strokefill(els[ii]) for ii in range(len(els))] + # dh.debug(lightness_threshold) + for ii in reversed(range(len(els))): # reversed so that order is preserved + sf1 = sfs[ii] + # if ( + # sf1.stroke is not None + # and sf1.stroke.efflightness >= lightness_threshold + # ): + if ( + sf1.stroke is None or sf1.stroke.efflightness >= lightness_threshold + ) and (sf1.fill is None or sf1.fill.efflightness >= lightness_threshold): + merges = [ii] + merged[ii] = True + for jj in range(ii): + if not (merged[jj]): + sf2 = sfs[jj] + samesw = ( + sf1.strokewidth is None and sf2.strokewidth is None + ) or ( + sf1.strokewidth is not None + and sf2.strokewidth is not None + and abs(sf1.strokewidth - sf2.strokewidth) < 0.001 + ) + samestrk = (sf1.stroke is None and sf2.stroke is None) or ( + sf1.stroke is not None + and sf2.stroke is not None + and sf1.stroke.red == sf2.stroke.red + and sf1.stroke.blue == sf2.stroke.blue + and sf1.stroke.green == sf2.stroke.green + and abs(sf1.stroke.alpha - sf2.stroke.alpha) < 0.001 + ) + # RGB are 0-255, alpha are 0-1 + samefill = (sf1.fill is None and sf2.fill is None) or ( + sf1.fill is not None + and sf2.fill is not None + and sf1.fill.red == sf2.fill.red + and sf1.fill.blue == sf2.fill.blue + and sf1.fill.green == sf2.fill.green + and abs(sf1.fill.alpha - sf2.fill.alpha) < 0.001 + ) + if ( + samestrk + and samefill + and samesw + and sf1.strokedasharray == sf2.strokedasharray + and sf1.markerstart == sf2.markerstart + and sf1.markermid == sf2.markermid + and sf1.markerend == sf2.markerend + ): + merges.append(jj) + merged[jj] = True + if len(merges) > 1: + ords = [elord[kk] for kk in merges] + ords.sort() + medord = ords[math.floor((len(ords) - 1) / 2)] + topord = ords[-1] + mergeii = [ + kk for kk in range(len(merges)) if elord[merges[kk]] == topord + ][ + 0 + ] # use the median + dh.combine_paths([els[kk] for kk in merges], mergeii) + # dh.flush_stylesheet_entries(self.svg) # since we removed clips + + +if __name__ == "__main__": + dh.Run_SI_Extension(CombineByColor(), "Combine by color") diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/dhelpers.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/dhelpers.py new file mode 100644 index 0000000..539791d --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/dhelpers.py @@ -0,0 +1,1963 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# Copyright (c) 2023 David Burghoff +# +# Functions modified from Inkex were made by +# Martin Owens +# Sergei Izmailov +# Thomas Holder +# Jonathan Neuhauser +# Functions modified from Deep_Ungroup made by Nikita Kitaev +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Locate the installed Inkex so we can assess the version. Do not import! +import pkgutil +installed_inkex = None +for finder in pkgutil.iter_importers(): + if hasattr(finder, "find_spec"): + try: + spec = finder.find_spec("inkex") + if spec and spec.origin: + installed_inkex = spec.origin + except TypeError: + continue + +# Import the packaged version of Inkex (currently v1.3.0) +import sys, os + +inkex_to_use = "inkex1_3_0" +si_dir = os.path.dirname(os.path.realpath(__file__)) # my install location +sys.path.insert(0, os.path.join(si_dir, inkex_to_use)) +sys.path.insert(1, os.path.join(si_dir, inkex_to_use, "site-packages")) +import inkex + +# For SI we override Inkex's Style with a modified version, Style0 +# To do this we import Style0, then replace inkex.Style with it +import styles0 + +inkex.Style = styles0.Style0 + +# Next we make sure we have the text submodule +sys.path.append( + os.path.join(si_dir, inkex_to_use, "site-packages", "python_fontconfig") +) +import inkex.text # noqa +import speedups # noqa + +from inkex import Style +from inkex.text.cache import BaseElementCache +from inkex.text.parser import TextTree, TYP_TEXT + +from inkex.text.utils import ( + composed_width, + unique, + isrectangle, + subprocess_repeat, + tags, + bbox, + ipx, +) + + +from inkex import Tspan, Transform, Path, PathElement, BaseElement +from applytransform_mod import fuseTransform +import lxml, math, re, os, random, sys +from functools import lru_cache + +# Parsed Inkex version, with extension back to v0.92.4 +if not hasattr(inkex, "__version__"): + try: + tmp = BaseElement.unittouu # introduced in 1.1 + inkex.__version__ = "1.1.0" + except: + try: + from inkex.paths import Path, CubicSuperPath # noqa + + inkex.__version__ = "1.0.0" + except: + inkex.__version__ = "0.92.4" +inkex.vparse = lambda x: [int(v) for v in x.split(".")] # type: ignore +inkex.ivp = inkex.vparse(inkex.__version__) # type: ignore + + +# Returns non-comment children +def list2(el): + return [k for k in list(el) if not (k.tag == ctag)] + + +EBget = lxml.etree.ElementBase.get +EBset = lxml.etree.ElementBase.set + +import inspect + + +def count_callers(): + caller_frame = inspect.stack()[2] + filename = caller_frame.filename + line_number = caller_frame.lineno + lstr = f"{filename} at line {line_number}" + global callinfo + try: + callinfo + except: + callinfo = dict() + if lstr in callinfo: + callinfo[lstr] += 1 + else: + callinfo[lstr] = 1 + + +# Discover the version of Inkex installed, NOT the version packaged with SI +if installed_inkex is not None: + with open(installed_inkex, "r") as file: + content = file.read() + match = re.search(r'__version__\s*=\s*"(.*?)"', content) + vstr = match.group(1) if match else "1.0.0" + if vstr=='1.2.0': # includes 1.2.0, 1.2.1, 1.2.2 + extpy = os.path.join(os.path.dirname(installed_inkex),'extensions.py') + with open(extpy, "r") as file: + content = file.read() + match = re.search(r'Pattern', content) # appeared in 1.2.2 + if match: + vstr='1.2.2' +else: + # No installed Inkex, probably not called by Inkscape + vstr = inkex.__version__ + +inkex.installed_ivp = inkex.vparse(vstr) # type: ignore +inkex.installed_haspages = inkex.installed_ivp[0] >= 1 and inkex.installed_ivp[1] >= 2 + +# On v1.1-1.2.1 gi produces an error for some reason that is actually fine +import platform + +if platform.system().lower() == "windows" and inkex.installed_ivp[0:2] == [1, 1] or (inkex.installed_ivp[0:2] == [1, 2] and inkex.installed_ivp[2]<2): + if inkex.text.font_properties.HASPANGOFT2: + from gi.repository import GLib + + def custom_log_writer(log_domain, log_level, message, user_data): + return GLib.LogWriterOutput.UNHANDLED + + GLib.log_set_writer_func(custom_log_writer, None) + + +# Replace an element with another one +# Puts it in the same location, update the cache dicts +def replace_element(el1, el2): + # replace el1 with el2 + myp = el1.getparent() + myi = list(myp).index(el1) + myp.insert(myi + 1, el2) + + newid = el1.get_id() + oldid = el2.get_id() + + el1.delete() + el2.set_id(newid) + el2.croot.iddict.add(el2) + el2.croot.cssdict.dupe_entry(oldid, newid) + + +# For style components that are a list (stroke-dasharray), calculate +# the true size reported by Inkscape, inheriting any styles/transforms +def listsplit(x): + # split list on commas or spaces + return [ipx(v) for v in re.split("[ ,]", x) if v] + + +def composed_list(el, comp): + cs = el.cspecified_style + ct = el.ccomposed_transform + sc = cs.get(comp) + if sc == "none": + return "none", None + elif sc is not None: + sv = listsplit(sc) + sf = math.sqrt(abs(ct.a * ct.d - ct.b * ct.c)) + sv = [x * sf for x in sv] + return sv, sf + else: + return None, None + + +# Unit parser and renderer +def uparse(str): + if str is not None: + uv = inkex.units.parse_unit(str, default_unit=None) + return uv[0], uv[1] + else: + return None, None + + +def urender(v, u): + if v is not None: + if u is not None: + return inkex.units.render_unit(v, u) + else: + return str(v) + else: + return None + + +# Get points of a path, element, or rectangle in the global coordinate system +def get_points(el, irange=None): + pth = el.cpath.to_absolute() + if irange is not None: + pnew = Path() + for ii in range(irange[0], irange[1]): + pnew.append(pth[ii]) + pth = pnew + pts = list(pth.end_points) + + ct = el.ccomposed_transform + + xs = [] + ys = [] + for p in pts: + p = ct.apply_to_point(p) + xs.append(p.x) + ys.append(p.y) + return xs, ys + + +# Unlinks clones and composes transform/clips/etc, along with descendants +def unlink2(el): + if el.tag == usetag: + useel = el.get_link("xlink:href") + if useel is not None: + d = useel.duplicate() + + # xy translation treated as a transform (applied first, then clip/mask, then full xform) + tx = EBget(el, "x") + ty = EBget(el, "y") + if tx is None: + tx = 0 + if ty is None: + ty = 0 + # order: x,y translation, then clip/mask, then transform + compose_all( + d, + None, + None, + Transform("translate(" + str(tx) + "," + str(ty) + ")"), + None, + ) + compose_all( + d, + el.get_link("clip-path", llget=True), + el.get_link("mask", llget=True), + el.ctransform, + el.ccascaded_style, + ) + replace_element(el, d) + d.set("unlinked_clone", True) + for k in d.descendants2()[1:]: + unlink2(k) + + # To match Unlink Clone behavior, convert Symbol to Group + if isinstance(d, (inkex.Symbol)): + g = group(list(d)) + ungroup(d) + d = g + return d + else: + return el + else: + return el + + +# unungroupable = (NamedView, Defs, Metadata, ForeignObject, lxml.etree._Comment) +unungroupable = tags((inkex.NamedView, inkex.Defs, inkex.Metadata, inkex.ForeignObject)) +ctag = lxml.etree.Comment("").tag +unungroupable.add(ctag) + + +def ungroup(g, removetextclip=False): + # Ungroup a group, preserving style, clipping, and masking + # Remove any comments + + if g.croot is not None: + gparent = g.getparent() + gindex = gparent.index(g) # group's location in parent + + gtransform = g.ctransform + gclip = g.get_link("clip-path", llget=True) + gmask = g.get_link("mask", llget=True) + gstyle = g.ccascaded_style + + for el in reversed(list(g)): + if el.tag == ctag: # remove comments + g.remove(el) + if el.tag not in unungroupable: + clippedout = compose_all( + el, gclip, gmask, gtransform, gstyle, removetextclip=removetextclip + ) + if clippedout: + el.delete() + else: + gparent.insert(gindex + 1, el) # places above + if len(g) == 0: + g.delete() + + +# Group a list of elements, placing the group in the location of the first element +def group(el_list, moveTCM=False): + g = inkex.Group() + myi = list(el_list[0].getparent()).index(el_list[0]) + el_list[0].getparent().insert(myi + 1, g) + for el in el_list: + g.append(el) + + # If moveTCM is set and are grouping one element, move transform/clip/mask to group + # Handy for adding and properly composing transforms/clips/masks + if moveTCM and len(el_list) == 1: + g.ctransform = el.ctransform + el.ctransform = None + g.set("clip-path", el.get("clip-path")) + el.set("clip-path", None) + g.set("mask", el.get("mask")) + el.set("mask", None) + return g + + +# For composing a group's properties onto its children (also group-like objects like Uses) +Itmat = ((1.0, 0.0, 0.0), (0.0, 1.0, 0.0)) + + +def compose_all(el, clip, mask, transform, style, removetextclip=False): + if style is not None: # style must go first since we may change it with CSS + mysty = el.ccascaded_style + compsty = style + mysty + compsty["opacity"] = str( + float(mysty.get("opacity", "1")) * float(style.get("opacity", "1")) + ) # opacity accumulates at each layer + el.cstyle = compsty + + if removetextclip and el.tag in ttags: + el.set("clip-path", None) + el.set("mask", None) + cout = False + else: + if clip is not None: + cout = merge_clipmask(el, clip) # clip applied before transform, fix first + if mask is not None: + merge_clipmask(el, mask, mask=True) + if clip is not None: + fix_css_clipmask(el) + if mask is not None: + fix_css_clipmask(el, mask=True) + + if transform is not None and transform.matrix != Itmat: + if el.ctransform is None or el.ctransform.matrix == Itmat: + el.ctransform = transform + else: + el.ctransform = transform @ el.ctransform + + if clip is None: + return False + else: + return cout + + +# If an element has clipping/masking specified in a stylesheet, this will override any attributes +# I think this is an Inkscape bug +# Fix by creating a style specific to my id that includes the new clipping/masking +def fix_css_clipmask(el, mask=False): + cm = "clip-path" if not mask else "mask" + svg = el.croot + if svg is not None: + mycss = svg.cssdict.get(el.get_id()) + if ( + mycss is not None + and mycss.get(cm) is not None + and mycss.get(cm) != el.get(cm) + ): + sty = el.croot.crootsty + sty.text = (sty.text or "") + "\n#{0}{{{1}:{2}}}".format( + el.get_id(), cm, el.get(cm) + ) + mycss[cm] = el.get(cm) + if el.cstyle.get(cm) is not None: # also clear local style + el.cstyle[cm] = None + + +def intersect_paths(ptha, pthb): + # Intersect two rectangular paths. Could be generalized later + ptsa = list(ptha.end_points) + ptsb = list(pthb.end_points) + x1c = max(min([p.x for p in ptsa]), min([p.x for p in ptsb])) + x2c = min(max([p.x for p in ptsa]), max([p.x for p in ptsb])) + y1c = max(min([p.y for p in ptsa]), min([p.y for p in ptsb])) + y2c = min(max([p.y for p in ptsa]), max([p.y for p in ptsb])) + w = x2c - x1c + h = y2c - y1c + if w > 0 and h > 0: + return Path("M {},{} h {} v {} h {} Z".format(x1c, y1c, w, h, -w)) + else: + return Path("") + + +usetag = inkex.Use.ctag + + +def merge_clipmask(node, newclip, mask=False): + # Modified from Deep Ungroup + def compose_clips(el, ptha, pthb): + newpath = intersect_paths(ptha, pthb) + isempty = str(newpath) == "" + + if not (isempty): + p = PathElement() + el.getparent().append(p) + p.set("d", newpath) + el.delete() + return isempty # if clipped out, safe to delete element + + if newclip is not None: + svg = node.croot + cmstr = "mask" if mask else "clip-path" + + if node.ctransform is not None: + # Clip-paths on nodes with a transform have the transform + # applied to the clipPath as well, which we don't want. + # Duplicate the new clip and apply node's inverse transform to its children. + if newclip is not None: + d = newclip.duplicate() + if not (hasattr(svg, "newclips")): + svg.newclips = [] + svg.newclips.append(d) # for later cleanup + for k in list(d): + compose_all(k, None, None, -node.ctransform, None) + # newclipurl = d.get_id(2) + newclip = d + + if newclip is not None: + for k in list(newclip): + if k.tag == usetag: + k = unlink2(k) + oldclip = node.get_link(cmstr, llget=True) + if oldclip is not None: + # Existing clip is replaced by a duplicate, then apply new clip to children of duplicate + for k in list(oldclip): + if k.tag == usetag: + k = unlink2(k) + + d = oldclip.duplicate() + if not (hasattr(svg, "newclips")): + svg.newclips = [] + svg.newclips.append(d) # for later cleanup + node.set(cmstr, d.get_id(2)) + + newclipisrect = False + if newclip is not None and len(newclip) == 1: + newclipisrect = isrectangle(list(newclip)[0]) + + couts = [] + for k in reversed(list(d)): # may be deleting, so reverse + oldclipisrect = isrectangle(k) + if newclipisrect and oldclipisrect and mask == False: + # For rectangular clips, we can compose them easily + # Since most clips are rectangles this semi-fixes the PDF clip export bug + newclippth = list(newclip)[0].cpath.transform( + list(newclip)[0].ctransform + ) + oldclippth = k.cpath.transform(k.ctransform) + cout = compose_clips(k, newclippth, oldclippth) + else: + cout = merge_clipmask(k, newclip, mask) + couts.append(cout) + cout = all(couts) + + if oldclip is None: + node.set(cmstr, newclip.get_id(2)) + cout = False + + return cout + + +# A cached list of all descendants of an svg in order +# Currently only handles deletions appropriately +class dtree: + def __init__(self, svg): + ds, pts = svg.descendants2(True) + self.ds = ds + self.iids = {d: ii for ii, d in enumerate(ds)} # desc. index by el + iipts = { + ptv: (ii, jj) for ii, pt in enumerate(pts) for jj, ptv in enumerate(pt) + } + self.range = [(ii, iipts[d][0]) for ii, d in enumerate(ds)] + + def iterel(self, el): + try: + eli = self.iids[el] + for ii in range(self.range[eli][0], self.range[eli][1]): + yield self.ds[ii] + except: + pass + + def delel(self, el): + try: + eli = self.iids[el] + strt = self.range[eli][0] + stop = self.range[eli][1] + self.ds = self.ds[:strt] + self.ds[stop:] + self.range = self.range[:strt] + self.range[stop:] + N = stop - strt + self.range = [ + (x - N if x > strt else x, y - N if y > strt else y) + for x, y in self.range + ] + self.iids = {d: ii for ii, d in enumerate(self.ds)} # desc. index by el + except: + pass + + +def get_cd2(svg): + if not (hasattr(svg, "_cd2")): + svg._cd2 = dtree(svg) + return svg._cd2 + + +def set_cd2(svg, sv): + if sv is None and hasattr(svg, "_cd2"): + delattr(svg, "_cd2") + + +inkex.SvgDocumentElement.cdescendants2 = property(get_cd2, set_cd2) + + +masktag = inkex.addNS("mask", "svg") +svgtag = inkex.SvgDocumentElement.ctag + +unrendered = tags( + ( + inkex.NamedView, + inkex.Defs, + inkex.Metadata, + inkex.ForeignObject, + inkex.Guide, + inkex.ClipPath, + inkex.StyleElement, + Tspan, + inkex.FlowRegion, + inkex.FlowPara, + ) +) +unrendered.update( + { + masktag, + inkex.addNS("RDF", "rdf"), + inkex.addNS("Work", "cc"), + inkex.addNS("format", "dc"), + inkex.addNS("type", "dc"), + } +) + + + +def wrapped_binary(filename, inkscape_binary=None, extra_args=None, svg=None, get_bbs=True,cwd=None): + """ + Retrieves all of a document's bounding boxes using a call to the Inkscape binary. + + Parameters: + filename (str): The path to the SVG file. + inkscape_binary (str): The path to the Inkscape binary. If not provided, + it will attempt to find it. + extra_args (list): Additional arguments to pass to the Inkscape command. + svg: An optional svg to use instead of loading from file. + + Returns: + dict: A dictionary where keys are element IDs and values are bounding + boxes in user units. + """ + if inkscape_binary is None: + inkscape_binary = inkex.inkscape_system_info.binary_location + extra_args = [] if extra_args is None else extra_args + + if get_bbs: + arg2 = [inkscape_binary, "--query-all"] + extra_args + [filename] + proc = subprocess_repeat(arg2,cwd=cwd) + else: + arg2 = [inkscape_binary] + extra_args + [filename] + proc = subprocess_repeat(arg2,cwd=cwd) + return None + tfstr = proc.stdout + + # Parse the output + tbbli = tfstr.splitlines() + bbs = dict() + for line in tbbli: + keyv = str(line).split(",", maxsplit=1)[0] + if keyv[0:2] == "b'": # pre version 1.1 + keyv = keyv[2:] + if str(line)[2:52] == "WARNING: Requested update while update in progress": + continue + # skip warnings (version 1.0 only?) + data = [float(x.strip("'")) for x in str(line).split(",")[1:]] + if keyv != "'": # sometimes happens in v1.3 + bbs[keyv] = data + + # Inkscape always reports a bounding box in pixels, relative to the viewbox + # Convert to user units for the output + if svg is None: + # If SVG not supplied, load from file from load_svg + svg = load_svg(filename).getroot() + + dsz = svg.cdocsize + for k in bbs: + bbs[k] = dsz.pxtouu(bbs[k]) + return bbs + + +# Determine if object has a bbox +@lru_cache(maxsize=None) +def hasbbox(el): + myp = el.getparent() + if myp is None: + return el.tag == svgtag + else: + return el.tag not in unrendered if hasbbox(myp) else False + + +# Determine if object itself is drawn +@lru_cache(maxsize=None) +def isdrawn(el): + return ( + el.tag not in grouplike_tags + and hasbbox(el) + and el.cspecified_style.get("display") != "none" + ) + + +# A wrapper that replaces get_bounding_boxes with Pythonic calls only if possible +def BB2(svg, els=None, forceupdate=False, roughpath=False, parsed=False): + if els is None: + els = svg.descendants2() + if all([d.tag in bb2_support_tags or not (hasbbox(d)) for d in els]): + # All descendants of all els in the list + allds = set() + for el in els: + if el not in allds: # so we're not re-descendants2ing + allds.update(el.descendants2()) + tels = [ + d + for d in unique(allds) + if isinstance(d, (inkex.TextElement, inkex.FlowRoot)) + ] + + if len(tels) > 0: + if forceupdate: + svg.char_table = None + for d in els: + d.cbbox = None + d.parsed_text = None + if not hasattr(svg, "_char_table"): + from inkex.text import parser # noqa + + svg.make_char_table(els=tels) + # pts = [el.parsed_text for el in tels] + ptl = parser.ParsedTextList(tels) + ptl.precalcs() + ret = dict() + for d in els: + if d.tag in bb2_support_tags and hasbbox(d): + mbbox = bounding_box2(d, roughpath=roughpath, parsed=parsed) + if not (mbbox.isnull): + ret[d.get_id()] = mbbox.sbb + else: + import tempfile + + # with tempfile.TemporaryFile() as temp: + # idebug(temp.name) + # tname = os.path.abspath(temp.name) + # overwrite_svg(svg, tname) + # ret = wrapped_binary(filename=tname, svg=svg) + + with tempfile.NamedTemporaryFile(delete=False) as temp: + tname = os.path.abspath(temp.name) + try: + overwrite_svg(svg, tname) + ret = wrapped_binary(filename=tname, svg=svg) + finally: + if os.path.exists(tname): + os.remove(tname) + + return ret + + +# For diagnosing BB2 +def Check_BB2(svg): + bb2 = BB2(svg) + HIGHLIGHT_STYLE = "fill:#007575;fill-opacity:0.4675" # mimic selection + for el in svg.descendants2(): + if el.get_id() in bb2 and not el.tag in grouplike_tags: + bb = bbox(bb2[el.get_id()]) + # bb = bbox(bb2[el.get_id()])*(1/slf.svg.cscale); + r = inkex.Rectangle() + r.set("mysource", el.get_id()) + r.set("x", bb.x1) + r.set("y", bb.y1) + r.set("height", bb.h) + r.set("width", bb.w) + r.set("style", HIGHLIGHT_STYLE) + el.croot.append(r) + + +# Vectorized calculation of bbox intersection bools +# Returns a matrix sized len(bbs) x len(bb2s) +def bb_intersects(bbs, bb2s=None): + if bb2s is None: + bb2s = bbs + import numpy as np + + if len(bbs) == 0 or len(bb2s) == 0: + return np.zeros((len(bbs), len(bb2s)), dtype=bool) + else: + xc1, yc1, wd1, ht1 = np.array([ + (bb.xc, bb.yc, bb.w, bb.h) if not bb.isnull else (np.nan, np.nan, np.nan, np.nan) + for bb in bbs + ]).T + + xc2, yc2, wd2, ht2 = np.array([ + (bb.xc, bb.yc, bb.w, bb.h) if not bb.isnull else (np.nan, np.nan, np.nan, np.nan) + for bb in bb2s + ]).T + return np.logical_and( + np.nan_to_num(abs(xc1.reshape(-1, 1) - xc2) * 2 < (wd1.reshape(-1, 1) + wd2), nan=False), + np.nan_to_num(abs(yc1.reshape(-1, 1) - yc2) * 2 < (ht1.reshape(-1, 1) + ht2), nan=False), + ) + +# Return list of objects on top of other objects +def overlapping_els(svg,tocheck): + els = [el for el in svg.descendants2() if isdrawn(el)] + bbs = BB2(svg, els, roughpath=True, parsed=True) + bbs = [bbox(bbs.get(el.get_id())) for el in els] + + chki = [i for i,el in enumerate(els) if el in tocheck] + bbs_check = [bbs[i] for i in chki] + intrscts = bb_intersects(bbs, bbs_check) + + ret = {el: [] for el in tocheck} + for j,ci in enumerate(chki): + elj = els[ci] + for i in range(ci+1,len(els)): + eli = els[i] + ds = elj.descendants2() + if intrscts[i,j] and eli not in ds: + ret[elj].append(eli) + + # for k,v in ret.items(): + # dh.idebug(k.get_id()+': '+str([v2.get_id() for v2 in v])) + return ret + +# Get SVG from file +from inkex import load_svg + + +def svg_from_file(fin): + svg = load_svg(fin).getroot() + return svg + + +def el_from_string(strin): + prefix = """ + + """ + svgtxt = prefix + strin + "" + nsvg = svg_from_file(svgtxt) + return list(nsvg)[0] + + +# Write to disk, removing any existing file +def overwrite_svg(svg, fileout): + try: + os.remove(fileout) + except: + pass + # idebug(inkex) + import inkex.command # needed for a weird bug in v1.1 + + inkex.command.write_svg(svg, fileout) + + +global debugs +debugs = "" + + +def debug(x): + # inkex.utils.debug(x); + global debugs + if debugs != "": + debugs += "\n" + debugs += str(x) + + +def write_debug(): + global debugs + if debugs != "": + debugname = "Debug.txt" + f = open(debugname, "w", encoding="utf-8") + f.write(debugs) + f.close() + + +def idebug(x, printids=True): + def is_nested_list_of_base_elements(x): + if not isinstance(x, (list, tuple)): + return False + for element in x: + if isinstance(element, (list, tuple)): + if not is_nested_list_of_base_elements(element): + return False + elif not isinstance(element, BaseElement): + return False + return True + + if printids and is_nested_list_of_base_elements(x): + + def process_nested_list(input_list): + if isinstance(input_list, list): + return [process_nested_list(e) for e in input_list] + if isinstance(input_list, tuple): + return tuple([process_nested_list(e) for e in input_list]) + elif isinstance(input_list, BaseElement): + return input_list.get_id() + + pv = process_nested_list(x) + else: + pv = x + inkex.utils.debug(pv) + + +import time + +global lasttic + + +def tic(): + global lasttic + lasttic = time.time() + + +def toc(): + global lasttic + idebug(time.time() - lasttic) + + +def benchmark_functions(func1, func2): + import numpy as np + + differences = [] + time1s = [] + + MINIBATCH_TIME = 0.01 + TOTAL_TIME = 10 + + strt = time.time() + f1cnt = 0 + while time.time() - strt < MINIBATCH_TIME: + func1() + f1cnt += 1 + strt = time.time() + f2cnt = 0 + while time.time() - strt < MINIBATCH_TIME: + func2() + f2cnt += 1 + + for Nr in range(5): + strt = time.time() + for ii in range(f1cnt): + func1() + f1act = time.time() - strt + strt = time.time() + for ii in range(f2cnt): + func2() + f2act = time.time() - strt + f1cnt = int(f1cnt * MINIBATCH_TIME / f1act) + f2cnt = int(f2cnt * MINIBATCH_TIME / f2act) + + M = int(TOTAL_TIME / MINIBATCH_TIME / 2) + N1 = f1cnt + N2 = f2cnt + + for _ in range(M): + # Timing function 1 + start_time = time.time() + for _ in range(N1): + func1() + end_time = time.time() + time_func1 = (end_time - start_time) / N1 + time1s.append(time_func1) + + # Timing function 2 + start_time = time.time() + for _ in range(N2): + func2() + end_time = time.time() + time_func2 = (end_time - start_time) / N2 + + # Calculate the difference in times + time_difference = time_func2 - time_func1 + differences.append(time_difference) + + # Calculating mean and standard deviation of time differences + mean_difference = np.mean(differences) + std_deviation = np.std(differences) + + return np.mean(time1s), mean_difference, std_deviation / np.sqrt(M) + + +# style atts that could have urls +urlatts = [ + "fill", + "stroke", + "clip-path", + "mask", + "filter", + "marker-start", + "marker-mid", + "marker-end", + "marker", +] + + +# An efficient Pythonic version of Clean Up Document +def clean_up_document(svg): + # defs types that do nothing unless they are referenced + prune = [ + "clipPath", + "mask", + "linearGradient", + "radialGradient", + "pattern", + "symbol", + "marker", + "filter", + "animate", + "animateTransform", + "animateMotion", + "textPath", + "font", + "font-face", + ] + prune = [inkex.addNS(v, "svg") for v in prune] + + # defs types that don't need to be referenced + exclude = [inkex.addNS(v, "svg") for v in ["style", "glyph"]] + + def should_prune(el): + return el.tag in prune or ( + el.getparent() == svg.cdefs and el.tag not in exclude + ) + + xlink = [inkex.addNS("href", "xlink"), "href"] + attids = {sa: dict() for sa in urlatts} + xlinks = dict() + + def miterdescendants(el): + yield el + for d in el.iterdescendants(): + yield d + + # Make dicts of all url-containing style atts and xlinks + for d in svg.cdescendants2.ds: + for attName in d.attrib.keys(): + if attName in urlatts: + if d.attrib[attName].startswith("url"): + attids[attName][d.get_id()] = d.attrib[attName][5:-1] + elif attName in xlink: + if d.attrib[attName].startswith("#"): + xlinks[d.get_id()] = d.attrib[attName][1:] + elif attName == "style": + if "url" in d.attrib[attName]: + sty = Style(d.attrib[attName]) + for an2 in sty.keys(): + if an2 in urlatts: + if sty[an2].startswith("url"): + attids[an2][d.get_id()] = sty[an2][5:-1] + + deletedsome = True + while deletedsome: + allurls = set( + [v for sa in urlatts for v in attids[sa].values()] + list(xlinks.values()) + ) + # sets much faster than lists for membership testing + deletedsome = False + for el in svg.cdescendants2.ds: + if should_prune(el): + eldids = [dv.get_id() for dv in svg.cdescendants2.iterel(el)] + if not (any([idv in allurls for idv in eldids])): + el.delete() + deletedsome = True + for did in eldids: + for anm in urlatts: + if did in attids[anm]: + del attids[anm][did] + if did in xlinks: + del xlinks[did] + + +def global_transform(el, trnsfrm, irange=None, trange=None, preserveStroke=True): + # Transforms an object and fuses it to any paths + # If preserveStroke is set the stroke width will be unchanged, otherwise + # will also be scaled + + # If parent layer is transformed, need to rotate out of its coordinate system + myp = el.getparent() + if myp is None: + prt = Transform([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]) + else: + prt = myp.ccomposed_transform + + myt = el.ctransform + if myt == None: + newtr = (-prt) @ trnsfrm @ prt + if trange is not None: + for ii in range(len(trange)): + trange[ii] = (-prt) @ trange[ii] @ prt + else: + newtr = (-prt) @ trnsfrm @ prt @ Transform(myt) + if trange is not None: + for ii in range(len(trange)): + trange[ii] = (-prt) @ trange[ii] @ prt @ Transform(myt) + + sw, _, _ = composed_width(el, "stroke-width") + sd, _ = composed_list(el, "stroke-dasharray") + + el.ctransform = newtr # Add the new transform + fuseTransform(el, irange=irange, trange=trange) + + if preserveStroke: + if sw is not None: + neww, sf, _ = composed_width(el, "stroke-width") + if sf != 0: + el.cstyle["stroke-width"] = str(sw / sf) + # fix width + if not (sd in [None, "none"]): + nd, sf = composed_list(el, "stroke-dasharray") + if sf != 0: + el.cstyle["stroke-dasharray"] = ( + str([sdv / sf for sdv in sd]).strip("[").strip("]") + ) + # fix dash + + +# Combines a group of path-like elements +def combine_paths(els, mergeii=0): + pnew = Path() + si = [] + # start indices + for el in els: + pth = el.cpath.to_absolute().transform(el.ccomposed_transform) + if el.get("inkscape-scientific-combined-by-color") is None: + si.append(len(pnew)) + else: + cbc = el.get( + "inkscape-scientific-combined-by-color" + ) # take existing ones and weld them + cbc = [int(v) for v in cbc.split()] + si += [v + len(pnew) for v in cbc[0:-1]] + for p in pth: + pnew.append(p) + si.append(len(pnew)) + + # Set the path on the mergeiith element + mel = els[mergeii] + if mel.get("d") is None: # Polylines and lines have to be converted to a path + mel.object_to_path() + mel.set("d", str(pnew.transform(-mel.ccomposed_transform))) + + # Release clips/masks + mel.set("clip-path", "none") + # release any clips + mel.set("mask", "none") + # release any masks + fix_css_clipmask(mel, mask=False) # fix CSS bug + fix_css_clipmask(mel, mask=True) + + mel.set("inkscape-scientific-combined-by-color", " ".join([str(v) for v in si])) + for s in range(len(els)): + if s != mergeii: + # deleteup(els[s]) + els[s].delete(deleteup=True) + + +# Gets all of the stroke and fill properties from a style +# Alpha is its effective alpha including opacity +# Note to self: inkex.Color inherits from list +from inkex.text.utils import default_style_atts as dsa + + +def get_strokefill(el): + sty = el.cspecified_style + strk = sty.get("stroke", dsa.get("stroke")) + fill = sty.get("fill", dsa.get("fill")) + op = float(sty.get("opacity", 1.0)) + nones = [None, "none"] + strk_isurl, fill_isurl = False, False + if not (strk in nones): + try: + strk = inkex.Color(strk).to_rgb() + strkl = strk.lightness + strkop = float(sty.get("stroke-opacity", 1.0)) + strk.alpha = strkop * op + strkl = strk.alpha * strkl / 255 + (1 - strk.alpha) * 1 + # effective lightness frac with a white bg + strk.efflightness = strkl + except: # inkex.colors.ColorIdError: + if "url(#" in strk: + strk = sty.get_link("stroke", el.croot) + strk_isurl = True + else: + strk = None + else: + strk = None + if not (fill in nones): + try: + fill = inkex.Color(fill).to_rgb() + filll = fill.lightness + fillop = float(sty.get("fill-opacity", 1.0)) + fill.alpha = fillop * op + filll = fill.alpha * filll / 255 + (1 - fill.alpha) * 1 + # effective lightness frac with a white bg + fill.efflightness = filll + except: # inkex.colors.ColorIdError: + if "url(#" in fill: + fill = sty.get_link("fill", el.croot) + fill_isurl = True + else: + fill = None + else: + fill = None + + sw, _, _ = composed_width(el, "stroke-width") + sd, _ = composed_list(el, "stroke-dasharray") + if sd in nones: + sd = None + if sw in nones or sw == 0 or strk is None: + sw = None + strk = None + sd = None + + ms = sty.get("marker-start", None) + mm = sty.get("marker-mid", None) + me = sty.get("marker-end", None) + + class StrokeFill: + def __init__(self, *args): + ( + self.stroke, + self.fill, + self.strokewidth, + self.strokedasharray, + self.markerstart, + self.markermid, + self.markerend, + self.strk_isurl, + self.fill_isurl, + ) = args + + return StrokeFill(strk, fill, sw, sd, ms, mm, me, strk_isurl, fill_isurl) + + +# Gets the caller's location +def get_script_path(): + return os.path.dirname(os.path.realpath(sys.argv[0])) + + +# Return a document's visible descendants not in Defs/Metadata/etc +def visible_descendants(svg): + ndefs = [el for el in list(svg) if not (el.tag in unungroupable)] + return [v for el in ndefs for v in el.descendants2()] + + +# Get document location or prompt +def Get_Current_File(ext, msgstr): + tooearly = inkex.installed_ivp[0] <= 1 and inkex.installed_ivp[1] < 1 + if not (tooearly): + myfile = ext.document_path() + else: + myfile = None + + if myfile is None or myfile == "": + if tooearly: + msg = msgstr + "Inkscape must be version 1.1.0 or higher." + else: + msg = ( + msgstr + + "the SVG must first be saved. Please retry after you have done so." + ) + inkex.utils.errormsg(msg) + quit() + return None + else: + return myfile + + +import threading +sema_temp = threading.Semaphore(1) + +def shared_temp(headprefix = None, filename=None): + """ + Generate a temporary file in the system temp folder or SI's location + (tempfile does not always work with Linux Snap distributions) + + Can also generate a unique temp_head that can be used to prefix all temp files. + Since the Inkscape binary cannot handle multiple cwd arguments when multithreading, + (and might switch dirs unexpectedly), any exports with multiple cwd's and relative + paths must be done here. + + """ + if sys.executable[0:4] == "/tmp" or sys.executable[0:5] == "/snap": + si_dir = os.path.dirname( + os.path.realpath(__file__) + ) # in case si_dir is not loaded + system_temp = si_dir + else: + import tempfile + system_temp = tempfile.gettempdir() + if not os.path.exists(system_temp): + os.mkdir(system_temp) + + tempdir = os.path.join(os.path.abspath(system_temp), 'si_temp') + if not os.path.exists(tempdir): + os.mkdir(tempdir) + + if headprefix is not None: + with sema_temp: + pnum = random.randint(1, 100000) + while any(t.startswith(f"{headprefix}{pnum:05d}") for t in os.listdir(tempdir)): + pnum = random.randint(1, 100000) + temphead = f"{headprefix}{pnum:05d}" + tempbase = os.path.join(tempdir, temphead) + open(tempbase+'.lock', 'w').close() + return tempdir, temphead + if filename is not None: + return os.path.join(tempdir,filename) + return tempdir + + + +ttags = tags((inkex.TextElement, inkex.FlowRoot)) +line_tag = inkex.Line.ctag +cpath_support_tags = tags(BaseElementCache.cpath_support) +mask_tag = inkex.addNS("mask", "svg") +grouplike_tags = tags( + ( + inkex.SvgDocumentElement, + inkex.Group, + inkex.Layer, + inkex.ClipPath, + inkex.Symbol, + ) +) +grouplike_tags.add(mask_tag) + + +def bounding_box2( + self, dotransform=True, includestroke=True, roughpath=False, parsed=False, includeclipmask=True +): + """ + Cached bounding box that requires no command call + Uses extents for text + dotransform: whether or not we want the element's bbox or its true + transformed bbox + includestroke: whether or not to add the stroke to the calculation + roughpath: use control points for a path's bbox, which is faster and an + upper bound for the true bbox + """ + if not (hasattr(self, "_cbbox")): + self._cbbox = dict() + inputs = (dotransform, includestroke, roughpath, parsed, includeclipmask) + if inputs not in self._cbbox: + try: + ret = bbox(None) + if self.tag in ttags: + ret = self.parsed_text.get_full_extent(parsed=parsed) + elif self.tag in cpath_support_tags: + pth = self.cpath + if len(pth) > 0: + swd = ipx(self.cspecified_style.get("stroke-width", "0px")) + if self.cspecified_style.get("stroke") is None or not ( + includestroke + ): + swd = 0 + + if self.tag == line_tag: + x = [ipx(self.get("x1", "0")), ipx(self.get("x2", "0"))] + y = [ipx(self.get("y1", "0")), ipx(self.get("y2", "0"))] + ret = bbox( + [ + min(x) - swd / 2, + min(y) - swd / 2, + max(x) - min(x) + swd, + max(y) - min(y) + swd, + ] + ) + elif not roughpath: + bbx = pth.bounding_box() + ret = bbox( + [ + bbx.left - swd / 2, + bbx.top - swd / 2, + bbx.width + swd, + bbx.height + swd, + ] + ) + else: + anyarc = any(s.letter in ["a", "A"] for s in pth) + pth = inkex.Path(inkex.CubicSuperPath(pth)) if anyarc else pth + pts = list(pth.control_points) + x = [p.x for p in pts] + y = [p.y for p in pts] + ret = bbox( + [ + min(x) - swd / 2, + min(y) - swd / 2, + max(x) - min(x) + swd, + max(y) - min(y) + swd, + ] + ) + + elif self.tag in grouplike_tags: + for kid in list2(self): + dbb = bounding_box2( + kid, + dotransform=False, + includestroke=includestroke, + roughpath=roughpath, + parsed=parsed, + ) + if not (dbb.isnull): + ret = ret.union(dbb.transform(kid.ctransform)) + elif isinstance(self, (inkex.Image)): + ret = bbox( + [ipx(self.get(v, "0")) for v in ["x", "y", "width", "height"]] + ) + elif isinstance(self, (inkex.Use,)): + lel = self.get_link("xlink:href") + if lel is not None: + ret = bounding_box2( + lel, dotransform=False, roughpath=roughpath, parsed=parsed + ) + + # clones have the transform of the link, followed by any + # xy transform + xyt = inkex.Transform( + "translate({0},{1})".format( + ipx(self.get("x", "0")), ipx(self.get("y", "0")) + ) + ) + ret = ret.transform(xyt @ lel.ctransform) + + if not (ret.isnull): + if includeclipmask: + for cmv in ["clip-path", "mask"]: + clip = self.get_link(cmv, llget=True) + if clip is not None: + cbb = bounding_box2( + clip, + dotransform=False, + includestroke=False, + roughpath=roughpath, + parsed=parsed, + ) + if not (cbb.isnull): + ret = ret.intersection(cbb) + else: + ret = bbox(None) + + if dotransform: + if not (ret.isnull): + ret = ret.transform(self.ccomposed_transform) + except: + # For some reason errors are occurring silently + import traceback + + inkex.utils.debug(traceback.format_exc()) + self._cbbox[inputs] = ret + return self._cbbox[inputs] + + +def set_cbbox(self, val): + """Invalidates the cached bounding box.""" + if val is None and hasattr(self, "_cbbox"): + delattr(self, "_cbbox") + + +inkex.BaseElement.cbbox = property(bounding_box2, set_cbbox) +inkex.BaseElement.bounding_box2 = bounding_box2 + +bb2_support = ( + inkex.TextElement, + inkex.FlowRoot, + inkex.Image, + inkex.Use, + inkex.SvgDocumentElement, + inkex.Group, + inkex.Layer, +) + BaseElementCache.cpath_support +bb2_support_tags = tags(bb2_support) + + +masktag = inkex.addNS("mask", "svg") + + +def isMask(el): + return el.tag == masktag + + +# cprofile tic and toc +def ctic(): + import cProfile + + global pr + pr = cProfile.Profile() + pr.enable() + + +def ctoc(): + import io, pstats + + global pr + pr.disable() + s = io.StringIO() + sortby = pstats.SortKey.CUMULATIVE + profiledir = os.path.dirname(os.path.abspath(__file__)) + try: + pr.dump_stats(os.path.abspath(os.path.join(profiledir, "cprofile.prof"))) + ps = pstats.Stats(pr, stream=s).sort_stats(sortby) + ps.print_stats() + ppath = os.path.abspath(os.path.join(profiledir, "cprofile.csv")) + + result = s.getvalue() + prefix = result.split("ncalls")[0] + # chop the string into a csv-like buffer + result = "ncalls" + result.split("ncalls")[-1] + result = "\n".join( + [",".join(line.rstrip().split(None, 5)) for line in result.split("\n")] + ) + result = prefix + "\n" + result + with open(ppath, "w") as f: + f.write(result) + except OSError: # occasional irreproducible error, doesn't matter + return + + +def Run_SI_Extension(effext, name): + Version_Check(name) + + def run_and_cleanup(): + effext.run() + # flush_stylesheet_entries(effext.svg) + + alreadyran = False + lprofile = os.getenv("LINEPROFILE") == "True" + batexists = os.path.exists( + os.path.join(os.path.dirname(os.path.abspath(__file__)), "cprofile open.bat") + ) + cprofile = batexists if not lprofile else False + if cprofile or lprofile: + profiledir = get_script_path() + if cprofile: + ctic() + if lprofile: + try: + from line_profiler import LineProfiler + + lp = LineProfiler() + from inkex.text import parser + from inkex.text import font_properties + from inkex.text import speedups + from inkex.text import cache + import remove_kerning + from inspect import getmembers, isfunction, isclass, getmodule + + fns = [] + for m in [ + sys.modules[__name__], + parser, + remove_kerning, + Style, + font_properties, + inkex.transforms, + getmodule(effext), + speedups, + cache, + ]: + fns += [v[1] for v in getmembers(m, isfunction)] + for c in getmembers(m, isclass): + if getmodule(c[1]) is m: + fns += [v[1] for v in getmembers(c[1], isfunction)] + for p in getmembers( + c[1], lambda o: isinstance(o, property) + ): + if p[1].fget is not None: + fns += [p[1].fget] + if p[1].fset is not None: + fns += [p[1].fset] + for fn in fns: + lp.add_function(fn) + lp.add_function(ipx.__wrapped__) + lp.add_function(font_properties.true_style.__wrapped__) + lp.add_function(speedups.transform_to_matrix.__wrapped__) + lp.add_function(Style.parse_str.__wrapped__) + + lp(run_and_cleanup)() + import io + + stdouttrap = io.StringIO() + lp.dump_stats( + os.path.abspath(os.path.join(profiledir, "lprofile.prof")) + ) + lp.print_stats(stdouttrap) + + ppath = os.path.abspath(os.path.join(profiledir, "lprofile.csv")) + result = stdouttrap.getvalue() + with open(ppath, "w", encoding="utf-8") as f: + f.write(result) + + # Copy lprofile.csv to the profiles subdirectory + profiles_dir = os.path.join(os.path.dirname(ppath), "profiles") + if not os.path.exists(profiles_dir): + os.makedirs(profiles_dir) + from datetime import datetime + import shutil + + timestamp = datetime.now().strftime("%Y-%m-%dT%H-%M-%S") + new_filename = f"lprofile_{timestamp}.csv" + dst_path = os.path.join(profiles_dir, new_filename) + shutil.copy2(ppath, dst_path) + + alreadyran = True + except ImportError: + pass + + if not (alreadyran): + try: + run_and_cleanup() + except lxml.etree.XMLSyntaxError: + try: + # Try getting Inkscape to write a new clean copy + s = effext + s.parse_arguments(sys.argv[1:]) + if s.options.input_file is None: + s.options.input_file = sys.stdin + elif "DOCUMENT_PATH" not in os.environ: + os.environ["DOCUMENT_PATH"] = s.options.input_file + + def overwrite_output(filein, fileout): + try: + os.remove(fileout) + except: + pass + arg2 = [ + inkex.inkscape_system_info.binary_location, + "--export-filename", + fileout, + filein, + ] + subprocess_repeat(arg2) + + tmpname = s.options.input_file.strip(".svg") + "_tmp.svg" + overwrite_output(s.options.input_file, tmpname) + os.remove(s.options.input_file) + os.rename(tmpname, s.options.input_file) + try: + run_and_cleanup() + except lxml.etree.XMLSyntaxError: + # Try removing problematic bytes + with open(s.options.input_file, "rb") as f: + bytes_content = f.read() + cleaned_content = bytes_content.decode("utf-8", errors="ignore") + nfin = s.options.input_file.strip(".svg") + "_tmp.svg" + with open(nfin, "w", encoding="utf-8") as f: + f.write(cleaned_content) + os.remove(s.options.input_file) + os.rename(tmpname, s.options.input_file) + run_and_cleanup() + except: + inkex.utils.errormsg( + "Error reading file! Extensions can only run on SVG files.\n\nIf this is a file imported from another format, try saving as an SVG and restarting Inkscape. Alternatively, try pasting the contents into a new document." + ) + if cprofile: + ctoc() + write_debug() + + # Display accumulated caller info if any + # from inkex.transforms import callinfo + global callinfo + try: + callinfo + except: + callinfo = dict() + sorted_items = sorted(callinfo.items(), key=lambda x: x[1], reverse=True) + for key, value in sorted_items: + idebug(f"{key}: {value}") + + +# Give early versions of Style a .to_xpath function +def to_xpath_func(sty): + # pre-1.2: use v1.1 version of to_xpath from inkex.Style + import re + + step_to_xpath = [ + ( + re.compile(r"\[(\w+)\^=([^\]]+)\]"), + r"[starts-with(@\1,\2)]", + ), # Starts With + (re.compile(r"\[(\w+)\$=([^\]]+)\]"), r"[ends-with(@\1,\2)]"), # Ends With + (re.compile(r"\[(\w+)\*=([^\]]+)\]"), r"[contains(@\1,\2)]"), # Contains + (re.compile(r"\[([^@\(\)\]]+)\]"), r"[@\1]"), # Attribute (start) + (re.compile(r"#(\w+)"), r"[@id='\1']"), # Id Match + (re.compile(r"\s*>\s*([^\s>~\+]+)"), r"/\1"), # Direct child match + # (re.compile(r'\s*~\s*([^\s>~\+]+)'), r'/following-sibling::\1'), + # (re.compile(r'\s*\+\s*([^\s>~\+]+)'), r'/following-sibling::\1[1]'), + (re.compile(r"\s*([^\s>~\+]+)"), r"//\1"), # Decendant match + ( + re.compile(r"\.([-\w]+)"), + r"[contains(concat(' ', normalize-space(@class), ' '), ' \1 ')]", + ), + (re.compile(r"//\["), r"//*["), # Attribute only match + (re.compile(r"//(\w+)"), r"//svg:\1"), # SVG namespace addition + ] + + def style_to_xpath(styin): + return "|".join([rule_to_xpath(rule) for rule in styin.rules]) + + def rule_to_xpath(rulein): + ret = rulein.rule + for matcher, replacer in step_to_xpath: + ret = matcher.sub(replacer, ret) + return ret + + return style_to_xpath(sty) + + +if not hasattr(Style, "to_xpath"): + Style.to_xpath = to_xpath_func +if not hasattr(inkex.Style, "to_xpath"): + inkex.Style.to_xpath = to_xpath_func + +# Patch Style string conversion to restore single-quote strings +# FQUOTE = r'^[^\'"]*\"' +# def swap_quotes(s): +# return s.translate(str.maketrans({"'": '"', '"': "'"})) +# def to_str(self, sep=";"): +# return sep.join( +# [f"{key}:{value}" if not re.search(FQUOTE, str(value)) else f"{key}:{swap_quotes(value)}" for key, value in self.items()] +# ) +# def __str__(self): +# return ";".join( +# [f"{key}:{value}" if not re.search(FQUOTE, str(value)) else f"{key}:{swap_quotes(value)}" for key, value in self.items()] +# ) +# inkex.Style.to_str = to_str +# inkex.Style.__str__ = __str__ + + +def nonascii(c): + """Returns True if the character is non-ASCII.""" + return ord(c) >= 128 + + +def nonletter(c): + """Returns True if the character is not a letter.""" + return not ((ord(c) >= 65 and ord(c) <= 90) or (ord(c) >= 97 and ord(c) <= 122)) + + +fixwith = { + "Avenir": (nonletter, "'Avenir Next', 'Arial'"), + "Whitney": (nonascii, "'Avenir Next', 'Arial'"), + "Whitney Book": (nonascii, "'Avenir Next', 'Arial'"), +} +fw2 = {k.lower(): val for k, val in fixwith.items()} + + +def shouldfixfont(ffam): + """Checks if the font needs fixing based on non-ASCII or non-letter characters.""" + shouldfix = ( + ffam is not None + and ffam.split(",")[0].strip("'").strip('"').lower() in fw2.keys() + ) + fixw = ( + None if not shouldfix else fw2[ffam.split(",")[0].strip("'").strip('"').lower()] + ) + return shouldfix, fixw + + +def character_fixer(els): + """Fixes characters in a list of elements based on their text style.""" + for elem in els: + tree = TextTree(elem) + for _, typ, tel, sel, txt in tree.dgenerator(): + if txt is not None and len(txt) > 0: + sty = sel.cspecified_style + shouldfix, fixw = shouldfixfont(sty.get("font-family")) + if shouldfix: + # replace_non_ascii_font(sel, fixw) + elem.set("xml:space", "preserve") # so spaces don't vanish + fixcondition, fixw = fixw + + if all(fixcondition(c) for c in txt) and typ == TYP_TEXT: + sel.cstyle["font-family"] = fixw + else: + prev_nonascii = False + for j, c in enumerate(reversed(txt)): + i = len(txt) - 1 - j + if fixcondition(c): + if not prev_nonascii: + t = Tspan() + t.text = c + if typ == TYP_TEXT: + tbefore = tel.text[0:i] + tafter = tel.text[i + 1 :] + tel.text = tbefore + tel.insert(0, t) + t.tail = tafter + else: + tbefore = tel.tail[0:i] + tafter = tel.tail[i + 1 :] + tel.tail = tbefore + grp = tel.getparent() + # parent is a Tspan, so insert it into + # the grandparent + grp.insert(grp.index(tel) + 1, t) + # after the parent + t.tail = tafter + t.cstyle = Style( + "font-family:" + fixw + ";baseline-shift:0%" + ) + else: + t.text = c + t.text + if typ == TYP_TEXT: + tel.text = tel.text[0:i] + else: + tel.tail = tel.tail[0:i] + if tel.text is not None and tel.text == "": + tel.text = None + if tel.tail is not None and tel.tail == "": + tel.tail = None + prev_nonascii = nonascii(c) + + +spantags = tags((Tspan, inkex.FlowPara, inkex.FlowSpan)) +TEtag = inkex.TextElement.ctag + + +def replace_non_ascii_font(elem, newfont, *args): + """Replaces non-ASCII characters in an element with a specified font.""" + + def alltext(elem): + astr = elem.text + if astr is None: + astr = "" + for k in list(elem): + if k.tag in spantags: + astr += alltext(k) + tlv = k.tail + if tlv is None: + tlv = "" + astr += tlv + return astr + + forcereplace = len(args) > 0 and args[0] + if forcereplace or any(nonascii(c) for c in alltext(elem)): + alltxt = [elem.text] + elem.text = "" + for k in list(elem): + if k.tag in spantags: + dupe = k.duplicate() + alltxt.append(dupe) + alltxt.append(k.tail) + k.tail = "" + k.delete() + lstspan = None + for t in alltxt: + if t is None: + pass + elif isinstance(t, str): + chks = [] + sind = 0 + for i in range(1, len(t)): + # split into chunks based on whether unicode or not + if nonletter(t[i - 1]) != nonletter(t[i]): + chks.append(t[sind:i]) + sind = i + chks.append(t[sind:]) + sty = "baseline-shift:0%;" + for chk in chks: + if any(nonletter(c) for c in chk): + chk = chk.replace(" ", "\u00a0") + # spaces can disappear, replace with NBSP + if elem.croot is not None: + nts = Tspan() + elem.append(nts) + nts.text = chk + nts.cstyle = Style(sty + "font-family:" + newfont) + nts.cspecified_style = None + nts.ccomposed_transform = None + lstspan = nts + else: + if lstspan is None: + elem.text = chk + else: + lstspan.tail = chk + elif t.tag in spantags: + replace_non_ascii_font(t, newfont, True) + elem.append(t) + t.cspecified_style = None + t.ccomposed_transform = None + lstspan = t + + # Inkscape automatically prunes empty text/tails + # Do the same so future parsing is not affected + if elem.tag == TEtag: + for ddv in elem.descendants2(): + if ddv.text is not None and ddv.text == "": + ddv.text = None + if ddv.tail is not None and ddv.tail == "": + ddv.tail = None + + +def split_text(elem): + """ + Splits a text or tspan into its constituent blocks of text + (i.e., each text and each tail in separate hierarchies) + """ + dups = [] + dds = elem.descendants2() + for dgen in reversed(list(TextTree(elem).dgenerator())): + _, _, _, sel, txt = dgen + if txt is not None: + # For each block of text, spin off a copy of the structure + # that only has this block and only the needed ancestors. + dup = elem.duplicate() + d2s = dup.descendants2() + mydup = d2s[dds.index(sel)] + ancs = mydup.ancestors2(includeme=True) + for dd2 in d2s: + dd2.text = None + dd2.tail = None + if dd2 not in ancs: + dd2.delete() + mydup.text = txt + dups = [dup] + dups + if len(dups) > 0 and elem.tail is not None: + dups[-1].tail = elem.tail + elem.delete() + return dups + + +def Version_Check(caller): + siv = "v1.4.23" # Scientific Inkscape version + maxsupport = "1.4.2" + minsupport = "1.1.0" + + logname = "Log.txt" + NFORM = 200 + + maxsupp = inkex.vparse(maxsupport) + minsupp = inkex.vparse(minsupport) + + try: + f = open(logname, "r") + d = f.readlines() + f.close() + except: + d = [] + + displayedform = False + if len(d) > 0: + displayedform = d[-1] == "Displayed form screen" + if displayedform: + d = d[: len(d) - 1] + + # idebug(ivp) + prevvp = [inkex.vparse(dv[-6:]) for dv in d] + if (inkex.ivp[0] < minsupp[0] or inkex.ivp[1] < minsupp[1]) and not ( + inkex.ivp in prevvp + ): + msg = ( + "For best results, Scientific Inkscape requires Inkscape version " + + minsupport + + " or higher. " + + "You are running an older version—all features may not work as expected.\n\nThis is a one-time message.\n\n" + ) + inkex.utils.errormsg(msg) + if (inkex.ivp[0] > maxsupp[0] or inkex.ivp[1] > maxsupp[1]) and not ( + inkex.ivp in prevvp + ): + msg = ( + "For best results, Scientific Inkscape requires Inkscape version " + + maxsupport + + " or lower. " + + "You are running a newer version—you must be from the future!\n\n" + + "It might work, it might not. Check if there is a more recent version of Scientific Inkscape available. \n\nThis is a one-time message.\n\n" + ) + inkex.utils.errormsg(msg) + + from datetime import datetime + + dt = datetime.now().strftime("%Y.%m.%d, %H:%M:%S") + d.append( + dt + + " Running " + + caller + + " " + + siv + + ", Inkscape v" + + inkex.__version__ + + "\n" + ) + + if len(d) > NFORM: + d = d[-NFORM:] + if not (displayedform): + sif3 = "dt9mt3Br6" + sif1 = "https://forms.gle/" + sif2 = "RS6HythP" + msg = ( + f"You have run Scientific Inkscape extensions over {NFORM} times! Thank you for being such a dedicated user!" + "\n\nBuilding and maintaining Scientific Inkscape is a time-consuming job," + " and I have no real way of tracking the number of active users. For reporting purposes, I would greatly " + "appreciate it if you could sign my guestbook to indicate that you use Scientific Inkscape. " + f"It is located at\n\n{sif1}{sif2}{sif3}" + "\n\nPlease note that this is a one-time message. " + "You will never get this message again, so please copy the URL before you click OK.\n\n" + ) + inkex.utils.errormsg(msg) + d.append("Displayed form screen") + + try: + f = open(logname, "w") + f.write("".join(d)) + f.close() + except: + err_msg = ( + "Error: You do not have write access to the directory where the Scientific Inkscape " + "extensions are installed. You may have not installed them in the correct location. " + "\n\nMake sure you install them in the User Extensions directory, not the Inkscape Extensions " + "directory." + ) + inkex.utils.errormsg(err_msg) + quit() diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/favorite_markers.inx b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/favorite_markers.inx new file mode 100644 index 0000000..05d6f1b --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/favorite_markers.inx @@ -0,0 +1,49 @@ + + + Favorite markers + burghoff.favoritemarkers + + + + + + + + + + + false + false + true + + + 100 + + + + + + + + + false + + false + + + + + + + + + text + + + + + + diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/favorite_markers.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/favorite_markers.py new file mode 100644 index 0000000..9be741a --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/favorite_markers.py @@ -0,0 +1,491 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# Copyright (C) 2021 David Burghoff, dburghoff@nd.edu +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Note that this function modifies its own .inx file by editing the options in the "template" +# parameter and the "template_rem" parameter. + +# dflt = {'Arrow': [[{'style': 'overflow:visible', 'id': 'Arrow2Lstart', 'refX': '0.0', 'refY': '0.0', 'orient': 'auto', '{http://www.inkscape.org/namespaces/inkscape}stockid': 'Arrow2Lstart', '{http://www.inkscape.org/namespaces/inkscape}isstock': 'true'}, [{'transform': 'matrix(1.1 0 0 1.1 1.1 0)', 'd': 'M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z ', 'style': 'stroke:context-stroke;fill-rule:evenodd;fill:context-stroke;stroke-width:0.62500000;stroke-linejoin:round', 'id': 'path1068'}]], [{'style': 'overflow:visible', 'id': 'Arrow2Lend', 'refX': '0.0', 'refY': '0.0', 'orient': 'auto', '{http://www.inkscape.org/namespaces/inkscape}stockid': 'Arrow2Lend', '{http://www.inkscape.org/namespaces/inkscape}isstock': 'true'}, [{'transform': 'matrix(-1.1 1.34707e-16 -1.34707e-16 -1.1 -1.1 1.34707e-16)', 'd': 'M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z ', 'style': 'stroke:context-stroke;fill-rule:evenodd;fill:context-stroke;stroke-width:0.62500000;stroke-linejoin:round', 'id': 'path1071'}]], [{'style': 'overflow:visible', 'id': 'marker1328', 'refX': '0.0', 'refY': '0.0', 'orient': 'auto', '{http://www.inkscape.org/namespaces/inkscape}stockid': 'Arrow2Lend', '{http://www.inkscape.org/namespaces/inkscape}isstock': 'true'}, [{'transform': 'matrix(-1.1 1.34707e-16 -1.34707e-16 -1.1 -1.1 1.34707e-16)', 'd': 'M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z ', 'style': 'stroke:context-stroke;fill-rule:evenodd;fill:context-stroke;stroke-width:0.62500000;stroke-linejoin:round', 'id': 'path1326'}]]], 'Triangle': [[{'style': 'overflow:visible', 'id': 'TriangleInL', 'refX': '0.0', 'refY': '0.0', 'orient': 'auto', '{http://www.inkscape.org/namespaces/inkscape}stockid': 'TriangleInL', '{http://www.inkscape.org/namespaces/inkscape}isstock': 'true'}, [{'transform': 'scale(-0.8, -0.8)', 'style': 'fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt', 'd': 'M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z ', 'id': 'path1183'}]], [{'style': 'overflow:visible', 'id': 'marker1395', 'refX': '0.0', 'refY': '0.0', 'orient': 'auto', '{http://www.inkscape.org/namespaces/inkscape}stockid': 'TriangleOutL', '{http://www.inkscape.org/namespaces/inkscape}isstock': 'true'}, [{'transform': 'scale(0.8, 0.8)', 'style': 'fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt', 'd': 'M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z ', 'id': 'path1393'}]], [{'style': 'overflow:visible', 'id': 'TriangleOutL', 'refX': '0.0', 'refY': '0.0', 'orient': 'auto', '{http://www.inkscape.org/namespaces/inkscape}stockid': 'TriangleOutL', '{http://www.inkscape.org/namespaces/inkscape}isstock': 'true'}, [{'transform': 'scale(0.8, 0.8)', 'style': 'fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt', 'd': 'M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z ', 'id': 'path1192'}]]]} +dflt = { + "Arrow": [ + [ + { + "style": "overflow:visible", + "refX": "0.0", + "refY": "0.0", + "orient": "auto", + "{http://www.inkscape.org/namespaces/inkscape}stockid": "Arrow2Mstart", + "{http://www.inkscape.org/namespaces/inkscape}isstock": "true", + }, + [ + { + "transform": "scale(0.6, 0.6)", + "d": "M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z ", + "style": "stroke:context-stroke;fill-rule:evenodd;fill:context-stroke;stroke-width:0.62500000;stroke-linejoin:round", + "id": "path961", + } + ], + ], + [ + { + "style": "overflow:visible", + "refX": "0.0", + "refY": "0.0", + "orient": "auto", + "{http://www.inkscape.org/namespaces/inkscape}stockid": "Arrow2Mend", + "{http://www.inkscape.org/namespaces/inkscape}isstock": "true", + }, + [ + { + "transform": "scale(-0.6, -0.6)", + "d": "M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z ", + "style": "stroke:context-stroke;fill-rule:evenodd;fill:context-stroke;stroke-width:0.62500000;stroke-linejoin:round", + "id": "path964", + } + ], + ], + [ + { + "style": "overflow:visible", + "refX": "0.0", + "refY": "0.0", + "orient": "auto", + "{http://www.inkscape.org/namespaces/inkscape}stockid": "Arrow2Mend", + "{http://www.inkscape.org/namespaces/inkscape}isstock": "true", + }, + [ + { + "transform": "scale(-0.6, -0.6)", + "d": "M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z ", + "style": "stroke:context-stroke;fill-rule:evenodd;fill:context-stroke;stroke-width:0.62500000;stroke-linejoin:round", + "id": "path1354", + } + ], + ], + ], + "Triangle": [ + [ + { + "style": "overflow:visible", + "refX": "0.0", + "refY": "0.0", + "orient": "auto", + "{http://www.inkscape.org/namespaces/inkscape}stockid": "TriangleInM", + "{http://www.inkscape.org/namespaces/inkscape}isstock": "true", + }, + [ + { + "transform": "scale(-0.4, -0.4)", + "style": "fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt", + "d": "M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z ", + "id": "path1073", + } + ], + ], + [ + { + "style": "overflow:visible", + "refX": "0.0", + "refY": "0.0", + "orient": "auto", + "{http://www.inkscape.org/namespaces/inkscape}stockid": "TriangleOutM", + "{http://www.inkscape.org/namespaces/inkscape}isstock": "true", + }, + [ + { + "transform": "scale(0.4, 0.4)", + "style": "fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt", + "d": "M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z ", + "id": "path1082", + } + ], + ], + [ + { + "style": "overflow:visible", + "refX": "0.0", + "refY": "0.0", + "orient": "auto", + "{http://www.inkscape.org/namespaces/inkscape}stockid": "TriangleOutM", + "{http://www.inkscape.org/namespaces/inkscape}isstock": "true", + }, + [ + { + "transform": "scale(0.4, 0.4)", + "style": "fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt", + "d": "M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z ", + "id": "path1213", + } + ], + ], + ], + "Distance": [ + [ + { + "{http://www.inkscape.org/namespaces/inkscape}stockid": "DistanceStart", + "orient": "auto", + "refY": "0.0", + "refX": "0.0", + "id": "DistanceStart", + "style": "overflow:visible", + "{http://www.inkscape.org/namespaces/inkscape}isstock": "true", + }, + [ + { + "id": "path2306", + "d": "M 0,0 L 2,0", + "style": "fill:none;stroke:context-fill;stroke-width:1.15;stroke-linecap:square", + }, + { + "id": "path2302", + "d": "M 0,0 L 13,4 L 9,0 13,-4 L 0,0 z ", + "style": "fill:context-stroke;fill-rule:evenodd;stroke:none", + }, + { + "id": "path2304", + "d": "M 0,-4 L 0,40", + "style": "fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:square", + }, + ], + ], + [ + { + "style": "overflow:visible", + "id": "StopL", + "refX": "0.0", + "refY": "0.0", + "orient": "auto", + "{http://www.inkscape.org/namespaces/inkscape}stockid": "StopL", + "{http://www.inkscape.org/namespaces/inkscape}isstock": "true", + }, + [ + { + "transform": "scale(0.8, 0.8)", + "style": "fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:context-stroke;stroke-width:1.0pt", + "d": "M 0.0,5.65 L 0.0,-5.65", + "id": "path2127", + } + ], + ], + [ + { + "{http://www.inkscape.org/namespaces/inkscape}stockid": "DistanceEnd", + "orient": "auto", + "refY": "0.0", + "refX": "0.0", + "id": "DistanceEnd", + "style": "overflow:visible", + "{http://www.inkscape.org/namespaces/inkscape}isstock": "true", + }, + [ + { + "id": "path2316", + "d": "M 0,0 L -2,0", + "style": "fill:none;stroke:context-fill;stroke-width:1.15;stroke-linecap:square", + }, + { + "id": "path2312", + "d": "M 0,0 L -13,4 L -9,0 -13,-4 L 0,0 z ", + "style": "fill:context-stroke;fill-rule:evenodd;stroke:none", + }, + { + "id": "path2314", + "d": "M 0,-4 L 0,40", + "style": "fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:square", + }, + ], + ], + ], +} + +import dhelpers as dh +import inkex +from inkex import ( + TextElement, + FlowRoot, + FlowPara, + Tspan, + TextPath, + Rectangle, + addNS, + Transform, + PathElement, + Line, + Rectangle, + Path, + Vector2d, + Use, + NamedView, + Defs, + Metadata, + ForeignObject, + Group, + FontFace, + StyleElement, + StyleSheets, + SvgDocumentElement, + ShapeElement, + BaseElement, + FlowSpan, + Ellipse, + Circle, +) + +import os, sys + +def get_script_path(): + return os.path.dirname(os.path.realpath(sys.argv[0])) + + +dispprofile = False + + +class FavoriteMarkers(inkex.EffectExtension): + # def document_path(self): + # return 'test' + + def add_arguments(self, pars): + pars.add_argument("--tab", help="The selected UI-tab when OK was pressed") + pars.add_argument("--template", type=int, default=1, help="Template") + + pars.add_argument( + "--smarker", type=inkex.Boolean, default=False, help="Start marker?" + ) + pars.add_argument( + "--mmarker", type=inkex.Boolean, default=False, help="Mid marker?" + ) + pars.add_argument( + "--emarker", type=inkex.Boolean, default=False, help="End marker?" + ) + pars.add_argument("--size", type=float, default=100, help="Size (%)") + + pars.add_argument( + "--addt", type=inkex.Boolean, default=True, help="Add template?" + ) + pars.add_argument( + "--template_name", type=str, default="untitled", help="New template name" + ) + pars.add_argument( + "--remt", type=inkex.Boolean, default=True, help="Remove template?" + ) + pars.add_argument( + "--template_rem", type=int, default=1, help="Template to remove" + ) + + def get_marker_props(self, murl): + if murl is not None and murl != "" and murl != "none": + mkr = self.svg.getElementById(murl.strip("#url(").strip(")")) + mkratt = dict() + for att in mkr.attrib: + if att != "id": + mkratt[att] = mkr.get(att) + patts = [] + if len(mkr.getchildren()) > 0: + if isinstance(mkr.getchildren()[0], (Group)): + pparent = mkr.getchildren()[0] + else: + pparent = mkr + for k in pparent.getchildren(): + if isinstance(k, (PathElement)): + patt = dict() + for att in k.attrib: + patt[att] = k.get(att) + patts.append(patt) + return [mkratt, patts] + else: + return None + else: + return None + + def set_marker_props(self, el, mkrname, mtype, mkrdat): + if mkrdat is not None: + newname = (mkrname + mtype).translate({ord(c): None for c in " \n\t\r"}) + # strip white space + mysize = self.options.size / 100 + existing = [ + v for v in self.svg.defs.descendants2() if newname in v.get_id() + ] + previousmkr = None + for eel in existing: + if len(eel.getchildren()) > 0 and isinstance( + eel.getchildren()[0], (Group) + ): + trn = Transform(eel.getchildren()[0].get("transform")) + if abs(trn.a - mysize) < 0.01 and abs(trn.d - mysize) < 0.01: + previousmkr = eel + + if previousmkr is None: + mkratt = mkrdat[0] + patt = mkrdat[1] + m = inkex.elements._groups.Marker() + + for att in mkratt.keys(): + if att != "id": + m.set(att, mkratt[att]) + g = Group() + m.append(g) + g.set("transform", "scale(" + str(mysize) + ")") + for ii in range(len(patt)): + p = PathElement() + for att in patt[ii].keys(): + if att != "id": + p.set(att, patt[ii][att]) + g.append(p) + self.svg.defs.append(m) + m.set_random_id(prefix=newname) + else: + m = previousmkr + el.cstyle["marker-" + mtype] = "url(#" + m.get_id() + ")" + else: + el.cstyle["marker-" + mtype] = None + + # dh.debug(mkrname+mtype) + # dh.debug(mkrdat) + + def effect(self): + if dispprofile: + import cProfile, pstats, io + from pstats import SortKey + + pr = cProfile.Profile() + pr.enable() + + sel = [self.svg.selection[ii] for ii in range(len(self.svg.selection))] + # should work with both v1.0 and v1.1 + sel = [v for el in sel for v in el.descendants2()] + import pickle, os + + fmsettings = os.path.abspath( + os.path.join(get_script_path(), "favorite_markers.settings") + ) + try: + f = open(fmsettings, "rb") + except: + f = open(fmsettings, "wb") + pickle.dump(dflt, f) + f.close() + f = open(fmsettings, "rb") + s = pickle.load(f) + f.close() + + # dh.debug(s) + if self.options.tab == "addremove": + if self.options.addt: + sel = [ + x + for x in sel + if isinstance( + x, + ( + inkex.PathElement, + inkex.Line, + inkex.Polyline, + inkex.Rectangle, + inkex.Circle, + inkex.Ellipse, + ), + ) + ] + sty = sel[0].cspecified_style + + ms = self.get_marker_props(sty.get("marker-start")) + mm = self.get_marker_props(sty.get("marker-mid")) + me = self.get_marker_props(sty.get("marker-end")) + s[self.options.template_name] = [ms, mm, me] + if self.options.remt: + templates = list(s.keys()) + if self.options.template_rem < len(templates): + del s[templates[self.options.template_rem]] + f = open(fmsettings, "wb") + pickle.dump(s, f) + f.close() + + fminx = os.path.abspath( + os.path.join(get_script_path(), "favorite_markers.inx") + ) + f = open(fminx) + inxd = f.read() + f.close() + + opts = "" + ts = list(s.keys()) + for ii in range(len(ts)): + opts += '\n" + ss1 = '' + ss1loc = inxd.find(ss1) + ss1srt = ss1loc + len(ss1) + ss1end = inxd[ss1loc:].find("") + ss1loc + ss2 = '' + ss2loc = inxd.find(ss2) + ss2srt = ss2loc + len(ss2) + ss2end = inxd[ss2loc:].find("") + ss2loc + newinx = inxd[0:ss1srt] + opts + inxd[ss1end:ss2srt] + opts + inxd[ss2end:] + f = open(fminx, "w") + inxd = f.write(newinx) + f.close() + + dh.idebug( + "Templates successfully updated! Update will take effect when Inkscape is restarted." + ) + else: + for el in sel: + if isinstance( + el, + ( + inkex.PathElement, + inkex.Line, + inkex.Polyline, + inkex.Rectangle, + inkex.Circle, + inkex.Ellipse, + ), + ): + ts = list(s.keys()) + tname = ts[self.options.template] + tval = s[tname] + if self.options.smarker: + self.set_marker_props(el, "FM" + tname, "start", tval[0]) + else: + self.set_marker_props(el, "FM" + tname, "start", None) + if self.options.mmarker: + self.set_marker_props(el, "FM" + tname, "mid", tval[1]) + else: + self.set_marker_props(el, "FM" + tname, "mid", None) + if self.options.emarker: + self.set_marker_props(el, "FM" + tname, "end", tval[2]) + else: + self.set_marker_props(el, "FM" + tname, "end", None) + + # pickle.dump(s,open(os.path.join(get_script_path(),'ae_settings.p'),'wb')); + + # for el in sela: + # if + # dh.debug(el.get_id()) + # dh.debug(bb[el.get_id()]); + + if dispprofile: + pr.disable() + s = io.StringIO() + sortby = SortKey.CUMULATIVE + ps = pstats.Stats(pr, stream=s).sort_stats(sortby) + ps.print_stats() + dh.debug(s.getvalue()) + + +if __name__ == "__main__": + dh.Run_SI_Extension(FavoriteMarkers(), "Favorite markers") diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/flatten_plots.inx b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/flatten_plots.inx new file mode 100644 index 0000000..c702bea --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/flatten_plots.inx @@ -0,0 +1,81 @@ + + + Flattener + burghoff.flattenplots1 + + + + true + true + true + true + + + true + + + + + + + + + + + + + true + true + true + true + true + true + + + + + + + + false + Arial + + + + + + + + + + + + + + + + + + + + + text + + + + + + + \ No newline at end of file diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/flatten_plots.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/flatten_plots.py new file mode 100644 index 0000000..6b842e7 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/flatten_plots.py @@ -0,0 +1,538 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# Copyright (c) 2023 David Burghoff +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +import dhelpers as dh +import inkex + +from inkex import ( + TextElement, + FlowRoot, + FlowPara, + FlowRegion, + FlowSpan, + Tspan, + TextPath, + Rectangle, + PathElement, + Line, + StyleElement, + NamedView, + Defs, + Metadata, + ForeignObject, + Group, +) + +from inkex.text.utils import isrectangle +import lxml +from remove_kerning import remove_kerning + + +class FlattenPlots(inkex.EffectExtension): + def add_arguments(self, pars): + pars.add_argument("--tab", help="The selected UI-tab when OK was pressed") + pars.add_argument( + "--deepungroup", type=inkex.Boolean, default=True, help="Deep ungroup" + ) + pars.add_argument( + "--fixtext", type=inkex.Boolean, default=True, help="Text fixes" + ) + pars.add_argument( + "--removerectw", + type=inkex.Boolean, + default=True, + help="Remove white rectangles", + ) + pars.add_argument( + "--splitdistant", + type=inkex.Boolean, + default=True, + help="Split distant text", + ) + pars.add_argument( + "--mergenearby", type=inkex.Boolean, default=True, help="Merge nearby text" + ) + pars.add_argument( + "--removemanualkerning", + type=inkex.Boolean, + default=True, + help="Fix text shattering", + ) + pars.add_argument( + "--mergesubsuper", + type=inkex.Boolean, + default=True, + help="Import superscripts and subscripts", + ) + pars.add_argument( + "--setreplacement", + type=inkex.Boolean, + default=False, + help="Replace missing fonts", + ) + pars.add_argument( + "--reversions", + type=inkex.Boolean, + default=True, + help="Revert known paths to text", + ) + pars.add_argument( + "--revertpaths", + type=inkex.Boolean, + default=True, + help="Revert certain paths to strokes?", + ) + pars.add_argument( + "--removeduppaths", + type=inkex.Boolean, + default=True, + help="Delete overlapping duplicate paths?", + ) + pars.add_argument( + "--removetextclips", + type=inkex.Boolean, + default=True, + help="Remove clips and masks from text?", + ) + pars.add_argument( + "--replacement", type=str, default="Arial", help="Missing font replacement" + ) + pars.add_argument( + "--justification", type=int, default=1, help="Text justification" + ) + pars.add_argument("--markexc", type=int, default=1, help="Exclude objects") + pars.add_argument( + "--testmode", type=inkex.Boolean, default=False, help="Test mode" + ) + pars.add_argument("--v", type=str, default="1.2", help="Version for debugging") + pars.add_argument( + "--debugparser", + type=inkex.Boolean, + default=False, + help="Use parser debugger?", + ) + + def duplicate_layer1(self): + # For testing, duplicate selection and flatten its elements + sel = [self.svg.selection[ii] for ii in range(len(self.svg.selection))] + # should work with both v1.0 and v1.1 + for el in sel: + d = el.duplicate() + el.getparent().insert(list(el.getparent()).index(el), d) + if d.get("inkscape:label") is not None: + el.set("inkscape:label", el.get("inkscape:label") + " flat") + d.set("inkscape:label", d.get("inkscape:label") + " original") + d.set("sodipodi:insensitive", "true") + # lock original + d.set("opacity", 0.3) + sel = [list(el) for el in sel] + import itertools + + sel = list(itertools.chain.from_iterable(sel)) + return sel + + def effect(self): + if self.options.testmode: + if not hasattr(self.options, "enabled_profile"): + self.options.enabled_profile = True + self.options.lyr1 = self.duplicate_layer1() + dh.ctic() + self.effect() + dh.ctoc() + return + else: + sel = self.options.lyr1 + self.options.deepungroup = True + self.options.fixtext = True + self.options.removerectw = True + self.options.revertpaths = True + self.options.splitdistant = True + self.options.mergenearby = True + self.options.removemanualkerning = True + self.options.mergesubsuper = True + self.options.setreplacement = True + self.options.reversions = True + self.options.removetextclips = True + self.options.replacement = "sans-serif" + self.options.justification = 1 + else: + sel = [self.svg.selection[ii] for ii in range(len(self.svg.selection))] + + splitdistant = self.options.splitdistant and self.options.fixtext + removemanualkerning = self.options.removemanualkerning and self.options.fixtext + mergesubsuper = self.options.mergesubsuper and self.options.fixtext + mergenearby = self.options.mergenearby and self.options.fixtext + setreplacement = self.options.setreplacement and self.options.fixtext + reversions = self.options.reversions and self.options.fixtext + removetextclips = self.options.removetextclips and self.options.fixtext + + sel = [el for el in self.svg.descendants2() if el in sel] # doc order + if self.options.tab == "Exclusions": + self.options.markexc = {1: True, 2: False}[self.options.markexc] + for el in sel: + if self.options.markexc: + el.set("inkscape-scientific-flattenexclude", self.options.markexc) + else: + el.set("inkscape-scientific-flattenexclude", None) + return + for el in sel: + if el.get("inkscape-scientific-flattenexclude"): + sel.remove(el) + seld = [v for el in sel for v in el.descendants2()] + for el in seld: + if el.get("inkscape-scientific-flattenexclude"): + seld.remove(el) + + # Move selected defs/clips/mask into global defs + defstag = inkex.Defs.ctag + clipmask = {inkex.addNS("mask", "svg"), inkex.ClipPath.ctag} + if self.options.deepungroup: + seldefs = [el for el in seld if el.tag == defstag] + for el in seldefs: + self.svg.cdefs.append(el) + for d in el.descendants2(): + if d in seld: + seld.remove(d) # no longer selected + selcm = [el for el in seld if el.tag in clipmask] + for el in selcm: + self.svg.cdefs.append(el) + for d in el.descendants2(): + if d in seld: + seld.remove(d) # no longer selected + + gtag = inkex.Group.ctag + gigtags = dh.tags((NamedView, Defs, Metadata, ForeignObject) + (Group,)) + + gs = [el for el in seld if el.tag == gtag] + ngs = [el for el in seld if el.tag not in gigtags] + if len(gs) == 0 and len(ngs) == 0: + inkex.utils.errormsg("No objects selected!") + return + + if self.options.deepungroup: + # Unlink all clones + nels = [] + oels = [] + for el in seld: + if isinstance(el, inkex.Use): + useel = el.get_link("xlink:href") + if useel is not None and not (isinstance(useel, (inkex.Symbol))): + ul = dh.unlink2(el) + nels.append(ul) + oels.append(el) + for nel in nels: + seld += nel.descendants2() + for oel in oels: + seld.remove(oel) + gs = [el for el in seld if el.tag == gtag] + ngs = [el for el in seld if el.tag not in gigtags] + + commenttag = lxml.etree.Comment + commentdefs = {commenttag, defstag} + sorted_gs = sorted(gs, key=lambda group: len(list(group))) + # ascending order of size to reduce number of calls + for g in sorted_gs: + ks = g.getchildren() + if any([k.tag == commenttag for k in ks]) and all( + [ + k.tag in commentdefs or dh.EBget(k, "unlinked_clone") == "True" + for k in ks + ] + ): + # Leave Matplotlib text glyphs grouped together + cmnt = ";".join( + [ + str(k).strip("") + for k in ks + if k.tag == commenttag + ] + ) + g.set("mpl_comment", cmnt) + [g.remove(k) for k in ks if isinstance(k, lxml.etree._Comment)] + # remove comment, but leave grouped + elif dh.EBget(g, "mpl_comment") is not None: + pass + else: + dh.ungroup(g, removetextclips) + # dh.flush_stylesheet_entries(self.svg) + + prltag = dh.tags((PathElement, Rectangle, Line)) + if self.options.removerectw or reversions or self.options.revertpaths: + from inkex.text.utils import default_style_atts as dsa + + fltag = dh.tags((FlowPara, FlowRegion, FlowRoot)) + nones = {None, "none"} + wrects = [] + + minusp = inkex.Path( + "M 106,355 H 732 V 272 H 106 Z" + ) # Matplotlib minus sign + RECT_THRESHOLD = 2.49 # threshold ratio for rectangle reversion + for ii, el in enumerate(ngs): + if el.tag in prltag: + myp = el.getparent() + if ( + myp is not None + and not (myp.tag in fltag) + and isrectangle(el, includingtransform=False) + ): + sty = el.cspecified_style + strk = sty.get("stroke", dsa.get("stroke")) + fill = sty.get("fill", dsa.get("fill")) + if strk in nones and fill not in nones: + sf = dh.get_strokefill(el) + if sf.fill is not None and tuple(sf.fill) == ( + 255, + 255, + 255, + 1, + ): + wrects.append(el) + + if reversions: + dv = el.get("d") + if ( + dv is not None + and inkex.Path(dv)[0:3] == minusp[0:3] + ): + t0 = el.ccomposed_transform + if t0.a * t0.d - t0.b * t0.c < 0: + bb = dh.bounding_box2( + el, includestroke=False, dotransform=False + ) + trl = inkex.Transform( + "translate({0},{1})".format(bb.xc, bb.yc) + ) + scl = inkex.Transform("scale(1,-1)") + t0 = t0 @ trl @ scl @ (-trl) + nt = inkex.TextElement() + nt.set("id", el.get_id()) + myi = list(myp).index(el) + el.delete() + myp.insert(myi, nt) + nt.text = chr(0x2212) # minus sign + nt.ctransform = (-myp.ccomposed_transform) @ t0 + nt.set("x", str(19.3964)) + nt.set("y", str(626.924)) + nt.cstyle = "font-size:999.997; font-family:sans-serif; fill:{0};".format( + sf.fill + ) + + ngs.append(nt) + ngs.remove(el) + + if self.options.revertpaths: + bb = dh.bounding_box2( + el, includestroke=False, dotransform=False, includeclipmask=False + ) + if not bb.isnull: + if bb.w < bb.h / RECT_THRESHOLD and not sf.fill_isurl: + el.object_to_path() + npv = "m {0},{1} v {2}".format(bb.xc, bb.y1, bb.h) + el.set("d", npv) + el.cstyle["stroke"] = sf.fill.to_rgb() + if sf.fill.alpha != 1.0: + el.cstyle["stroke-opacity"] = sf.fill.alpha + el.cstyle["opacity"] = 1 + el.cstyle["fill"] = "none" + el.cstyle["stroke-width"] = str(bb.w) + el.cstyle["stroke-linecap"] = "butt" + elif bb.h < bb.w / RECT_THRESHOLD and not sf.fill_isurl: + el.object_to_path() + npv = "m {0},{1} h {2}".format(bb.x1, bb.yc, bb.w) + el.set("d", npv) + el.cstyle["stroke"] = sf.fill.to_rgb() + if sf.fill.alpha != 1.0: + el.cstyle["stroke-opacity"] = sf.fill.alpha + el.cstyle["opacity"] = 1 + el.cstyle["fill"] = "none" + el.cstyle["stroke-width"] = str(bb.h) + el.cstyle["stroke-linecap"] = "butt" + + TE_TAG = TextElement.ctag; + if self.options.fixtext: + if setreplacement: + repl = self.options.replacement + ttags = dh.tags((TextElement, Tspan)) + for el in ngs: + if el.tag in ttags and el.getparent() is not None: + # textelements not deleted + ff = el.cspecified_style.get("font-family") + el.cstyle["-inkscape-font-specification"] = None + if ff == None or ff == "none" or ff == "": + el.cstyle["font-family"] = repl + elif ff == repl: + pass + else: + ff = [ + x.strip("'").strip('"').strip() for x in ff.split(",") + ] + if not (ff[-1].lower() == repl.lower()): + ff.append(repl) + el.cstyle["font-family"] = ",".join(ff) + + if removemanualkerning or mergesubsuper or splitdistant or mergenearby: + jdict = {1: "middle", 2: "start", 3: "end", 4: None} + justification = jdict[self.options.justification] + ngs = remove_kerning( + ngs, + removemanualkerning, + mergesubsuper, + splitdistant, + mergenearby, + justification, + self.options.debugparser, + ) + if removetextclips: + for el in ngs: + if el.tag in dh.ttags: + el.set("clip-path", None) + el.set("mask", None) + + if self.options.removerectw or self.options.removeduppaths: + ngset = set(ngs) + ngs2 = [ + el for el in self.svg.descendants2() if el in ngset and dh.isdrawn(el) + ] + bbs = dh.BB2(self.svg, ngs2, roughpath=True, parsed=True) + + if self.options.removeduppaths: + # Prune identical overlapping paths + bbsp = {el:bbs[el.get_id()] for el in ngs2 if el.get_id() in bbs} + txts = [el for el in self.svg.descendants2() if el.tag==TE_TAG and 'shape-inside' in el.cspecified_style] + txt_inside = [el.cspecified_style.get_link("shape-inside",el.croot) for el in txts] + bbsp = {el:v for el,v in bbsp.items() if el.tag in prltag and el not in txt_inside} + + els = list(bbsp.keys()) + sfs = [None]*len(els) + + import numpy as np + if len(els)>0: + bbox_values = np.array(list(bbsp.values())) + left = bbox_values[:, 0] + top = bbox_values[:, 1] + width = bbox_values[:, 2] + height = bbox_values[:, 3] + right = left + width + bottom = top + height + size = np.maximum(width, height) + is_empty = (width == 0) | (height == 0) + left_diff = np.abs(left[:, np.newaxis] - left[np.newaxis, :]) + top_diff = np.abs(top[:, np.newaxis] - top[np.newaxis, :]) + right_diff = np.abs(right[:, np.newaxis] - right[np.newaxis, :]) + bottom_diff = np.abs(bottom[:, np.newaxis] - bottom[np.newaxis, :]) + size_i = size[:, np.newaxis] + size_j = size[np.newaxis, :] + size_max = np.maximum(size_i, size_j) + tol = 1e-6 * size_max + is_empty_pair = is_empty[:, np.newaxis] | is_empty[np.newaxis, :] + equal = (~is_empty_pair) & \ + (left_diff <= tol) & \ + (top_diff <= tol) & \ + (right_diff <= tol) & \ + (bottom_diff <= tol) + else: + equal = np.zeros((0, 0), dtype=bool) + + for jj in reversed(range(len(els))): + for ii in range(jj): + if equal[ii,jj]: + for kk in [ii,jj]: + if sfs[kk] is None: + sfs[kk] = dh.get_strokefill(els[kk]) + mysf = sfs[jj] + othsf = sfs[ii] + if mysf.stroke is None and mysf.fill is None: + continue + if mysf.stroke is not None: + if mysf.stroke.alpha != 1.0 or othsf.stroke is None: + continue + if not mysf.stroke == othsf.stroke: + continue + if mysf.fill is not None: + if mysf.fill.alpha != 1.0 or othsf.fill is None: + continue + if not mysf.fill == othsf.fill: + continue + if not els[jj].cspecified_style == els[ii].cspecified_style: + continue + + mypth = els[jj].cpath.transform(els[jj].ccomposed_transform).to_absolute(); + othpth= els[ii].cpath.transform(els[ii].ccomposed_transform).to_absolute(); + if mypth!=othpth and mypth!=othpth.reverse(): + continue + # dh.idebug(els[ii].get_id()) + els[ii].delete(deleteup=True) + equal[ii,:] = False + ngs2.remove(els[ii]) + + if self.options.removerectw: + ngs3 = [el for el in ngs2 if el.get_id() in bbs] + bbs3 = [dh.bbox(bbs.get(el.get_id())) for el in ngs3] + wriis = [ii for ii, el in enumerate(ngs3) if el in wrects] + wrbbs = [bbs3[ii] for ii in wriis] + intrscts = dh.bb_intersects(bbs3, wrbbs) + for jj, ii in enumerate(wriis): + if not any(intrscts[:ii, jj]): + ngs3[ii].delete(deleteup=True) + intrscts[ii, :] = False + ngs2.remove(ngs3[ii]) + + + + # Remove any unused clips we made, unnecessary white space in document + ds = self.svg.iddict.descendants + clips = [dh.EBget(el, "clip-path") for el in ds] + masks = [dh.EBget(el, "mask") for el in ds] + clips = [url[5:-1] for url in clips if url is not None] + masks = [url[5:-1] for url in masks if url is not None] + + ctag = inkex.ClipPath.ctag + if hasattr(self.svg, "newclips"): + for el in self.svg.newclips: + if el.tag == ctag and not (el.get_id() in clips): + el.delete(deleteup=True) + elif dh.isMask(el) and not (el.get_id() in masks): + el.delete(deleteup=True) + + ttags = dh.tags((Tspan, TextPath, FlowPara, FlowRegion, FlowSpan)) + ttags2 = dh.tags( + ( + StyleElement, + TextElement, + Tspan, + TextPath, + inkex.FlowRoot, + inkex.FlowPara, + inkex.FlowRegion, + inkex.FlowSpan, + ) + ) + for el in reversed(ds): + if not (el.tag in ttags): + if el.tail is not None: + el.tail = None + if not (el.tag in ttags2): + if el.text is not None: + el.text = None + + +if __name__ == "__main__": + dh.Run_SI_Extension(FlattenPlots(), "Flattener") diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/gallery_viewer.inx b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/gallery_viewer.inx new file mode 100644 index 0000000..bbef0ec --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/gallery_viewer.inx @@ -0,0 +1,28 @@ + + + Gallery viewer + burghoff.gallery_viewer + + + + + + + 5001 + + + + + + + + text + + + + + + diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/gallery_viewer.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/gallery_viewer.py new file mode 100644 index 0000000..131aeb5 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/gallery_viewer.py @@ -0,0 +1,132 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# Copyright (c) 2023 David Burghoff +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +DEBUGGING = False +dispprofile = False + +import dhelpers as dh +import inkex +import os, sys, copy, subprocess, platform + +# Convenience functions +def joinmod(dirc, f): + return os.path.join(os.path.abspath(dirc), f) + + +# Runs a Python script using a Python binary in a working directory +# It detaches from Inkscape, allowing it to continue running after the extension has finished +def run_python(python_bin, python_script, python_wd, interminal=False): + if platform.system() == "Windows": + DEVNULL = "nul" + else: + DEVNULL = "/dev/null" + # DEVNULL = dh.si_tmp(filename="si_gv_output.txt") + # dh.idebug(DEVNULL) + with open(DEVNULL, "w") as devnull: + subprocess.Popen([python_bin, python_script], stdout=devnull, stderr=devnull) + + +class GalleryViewer(inkex.EffectExtension): + def add_arguments(self, pars): + pars.add_argument("--tab", help="The selected UI-tab when OK was pressed") + pars.add_argument("--portnum", help="Port number for server") + + def effect(self): + if dispprofile: + import cProfile, pstats, io + from pstats import SortKey + + pr = cProfile.Profile() + pr.enable() + + # Make an options copy we can pass to the external program + optcopy = copy.copy(self.options) + delattr(optcopy, "output") + delattr(optcopy, "input_file") + + bfn = inkex.inkscape_system_info.binary_location + bloc, bnm = os.path.split(bfn) + pyloc, pybin = os.path.split(sys.executable) + + aepy = os.path.join(dh.si_dir, "gallery_viewer_script.py") + + # Pass settings using a config file. Include the current path so Inkex can be called if needed. + import pickle + + optcopy.inkscape_bfn = bfn + optcopy.syspath = sys.path + optcopy.inshell = False + optcopy.logfile = dh.shared_temp(filename="si_gv_output.txt") + + import tempfile + settings = os.path.join( + os.path.abspath(tempfile.gettempdir()), "si_gv_settings.p" + ) + + with open(settings, "wb") as f: + pickle.dump(optcopy, f) + import warnings + warnings.simplefilter("ignore", ResourceWarning) # prevent process open warning + run_python(pybin, aepy, pyloc, optcopy.inshell) + + # Make a batch file that can run the Gallery Viewer directly on Windows + # Hardcodes the pickled settings + if platform.system() == "Windows": + python_cwd = os.getcwd() + pickled_file_path = settings + with open(pickled_file_path, "rb") as f: + pickled_data = f.read() + import base64 + pickled_data_base64 = base64.b64encode(pickled_data).decode('utf-8') + current_script_dir = os.path.dirname(os.path.abspath(__file__)) + batch_file_path = os.path.join(current_script_dir, "Gallery Viewer.bat") + batch_content = '''@echo off + cd "{python_cwd}" + + SET PYBIN="{pybin}" + SET AEPY="{aepy}" + SET PICKLED_FILE="{pickled_file}" + + REM Use PowerShell to decode the base64 string and write the binary pickled data + powershell -Command "[System.IO.File]::WriteAllBytes('%PICKLED_FILE%', [Convert]::FromBase64String('{pickled_data_base64}'))" + + REM Start the Python script in a new process without opening a new window + start "" %PYBIN% %AEPY% + '''.format( + python_cwd=python_cwd, # Add the current working directory + pybin=sys.executable, + aepy=aepy, + pickled_file=pickled_file_path.replace('\\', '\\\\'), + pickled_data_base64=pickled_data_base64 + ) + with open(batch_file_path, "w") as batch_file: + batch_file.write(batch_content) + + + if dispprofile: + pr.disable() + s = io.StringIO() + sortby = SortKey.CUMULATIVE + ps = pstats.Stats(pr, stream=s).sort_stats(sortby) + ps.print_stats() + dh.debug(s.getvalue()) + + +if __name__ == "__main__": + dh.Run_SI_Extension(GalleryViewer(), "Gallery Viewer") diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/gallery_viewer_script.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/gallery_viewer_script.py new file mode 100644 index 0000000..a57939e --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/gallery_viewer_script.py @@ -0,0 +1,1227 @@ +# Inkscape Gallery Viewer, by David Burghoff +# Copyright (c) 2023 David Burghoff +# Prints written to [temp]/si_gv_output.txt + +# Load the settings file +import tempfile, os, pickle, sys +settings = os.path.join( + os.path.abspath(tempfile.gettempdir()), "si_gv_settings.p" +) +with open(settings, "rb") as f: + input_options = pickle.load(f) + +bfn = input_options.inkscape_bfn +sys.path.extend([p for p in input_options.syspath if p not in sys.path]) +bfn_dir = os.path.dirname(bfn) +if bfn_dir not in sys.path: + sys.path.append(bfn_dir) +PORTNUMBER = input_options.portnum +sys.stdout = open(input_options.logfile, "w") +sys.stderr = sys.stdout + +import sys, subprocess, threading, time, chardet +import random +import webbrowser, pathlib +from urllib import parse +import warnings +import re +from threading import Thread +import zipfile +import shutil +import hashlib +import requests +import builtins + +import dhelpers as dh +import inkex +import xml.etree.ElementTree as ET +from autoexporter import ORIG_KEY +from autoexporter import DUP_KEY +from autoexporter import hash_file + +WHILESLEEP = 0.25 +IMAGE_WIDTH = 175 +IMAGE_HEIGHT = IMAGE_WIDTH * 0.7 +MAXATTEMPTS = 1 + +original_print = print + + +def mprint(*args, **kwargs): + original_print(*args, **kwargs, flush=True) + + +builtins.print = mprint + +try: + import gi + + gi.require_version("Gtk", "3.0") + from gi.repository import Gtk + + guitype = "gtk" +except: + try: + import tkinter as tk + from tkinter import filedialog + + guitype = "tkinter" + except: + guitype = "terminal" + +current_script_directory = os.path.dirname(os.path.abspath(__file__)) +sys.path += [os.path.join(current_script_directory, "packages")] + +def file_uri_to_path(file_uri, path_class=pathlib.PurePath): + # https://stackoverflow.com/questions/5977576/is-there-a-convenient-way-to-map-a-file-uri-to-os-path + """ + This function returns a pathlib.PurePath object for the supplied file URI. + + :param str file_uri: The file URI ... + :param class path_class: The type of path in the file_uri. By default it uses + the system specific path pathlib.PurePath, to force a specific type of path + pass pathlib.PureWindowsPath or pathlib.PurePosixPath + :returns: the pathlib.PurePath object + :rtype: pathlib.PurePath + """ + windows_path = isinstance(path_class(), pathlib.PureWindowsPath) + file_uri_parsed = parse.urlparse(file_uri) + file_uri_path_unquoted = parse.unquote(file_uri_parsed.path) + if windows_path and file_uri_path_unquoted.startswith("/"): + result = path_class(file_uri_path_unquoted[1:]) + else: + result = path_class(file_uri_path_unquoted) + if result.is_absolute() == False: + raise ValueError( + "Invalid file uri {} : resulting path {} not absolute".format( + file_uri, result + ) + ) + return result + +refreshapp = False + +def trigger_refresh(): + global refreshapp + refreshapp = True + +def show_in_file_browser(path): + if not os.path.exists(path): + raise FileNotFoundError(f"The path {path} does not exist.") + + # Resolve the absolute path + path = os.path.abspath(path) + + if sys.platform.startswith("win"): + import ctypes + from ctypes import wintypes + + # Define necessary Windows types and constants + LPCTSTR = wintypes.LPCWSTR + # HWND = wintypes.HWND + UINT = wintypes.UINT + LPVOID = ctypes.c_void_p + + # Define the functions + SHOpenFolderAndSelectItems = ctypes.windll.shell32.SHOpenFolderAndSelectItems + ILCreateFromPathW = ctypes.windll.shell32.ILCreateFromPathW + ILFree = ctypes.windll.shell32.ILFree + + # Create an ITEMIDLIST for the path + ILCreateFromPathW.restype = LPVOID + ILCreateFromPathW.argtypes = [LPCTSTR] + pidl = ILCreateFromPathW(path) + + if not pidl: + raise FileNotFoundError(f"Unable to get PIDL for path: {path}") + + # Open the folder and select the item + SHOpenFolderAndSelectItems.restype = ctypes.HRESULT + SHOpenFolderAndSelectItems.argtypes = [LPVOID, UINT, LPVOID, UINT] + res = SHOpenFolderAndSelectItems(pidl, 0, None, 0) + + # Free the ITEMIDLIST + ILFree.argtypes = [LPVOID] + ILFree(pidl) + + if res != 0: + raise OSError(f"Failed to open folder and select item. HRESULT: {res}") + + elif sys.platform == "darwin": # macOS + # Use AppleScript to bring Finder to the front + script = f''' + tell application "Finder" + activate + reveal POSIX file "{path}" + end tell + ''' + subprocess.run(['osascript', '-e', script]) + + elif sys.platform.startswith("linux"): + directory, file = os.path.split(path) + # Open the directory and select the file using Nautilus or default file manager + subprocess.Popen(['xdg-open', directory]) + + else: + raise OSError(f"Unsupported OS: {sys.platform}") + +truepath = dict() +truepath_lock = threading.Lock(); + +app = None +app_lock = threading.Lock(); +def Make_Flask_App(): + warnings.simplefilter("ignore", DeprecationWarning) + # prevent warning that process is open + from flask import Flask, request, url_for, jsonify, send_from_directory, render_template, abort + + global app + app = Flask(__name__, template_folder='.') + + @app.route("/images//") + def send_image(folder, path): + with truepath_lock: + tp = truepath.get(folder) + if tp is None: + abort(404) # Sends a 404 response + return send_from_directory(os.path.abspath(tp), path) + + @app.route("/") + def index(): + # Render the gallery page (without data, which will be fetched via AJAX) + return render_template("gallery_viewer_template.html", image_width=IMAGE_WIDTH, image_height=IMAGE_HEIGHT, port=PORTNUMBER) + + + def get_folder_key(folder): + with truepath_lock: + temp_dir_name = os.path.split(temp_dir)[-1] + if folder not in truepath.values(): + key = temp_dir_name + "-dir" + str(random.randint(1, 100000)) + while key in truepath: + key = temp_dir_name + "-dir" + str(random.randint(1, 100000)) + truepath[key] = folder + else: + key = next(key for key, value in truepath.items() if value == folder) + return key + + + from functools import lru_cache + @lru_cache(maxsize=None) + def cached_url(path): + folder, filename = os.path.split(path) + return url_for("send_image", path=filename, folder=get_folder_key(folder)) + + @app.route("/gallery_data") + def gallery_data(): + # Collect the gallery data to be sent dynamically + gallery_data = [] + tic = time.time() + for fp in processors: + files_data = [] + for ii, f in enumerate(fp.files): + svg = f.name + if fp.files[ii].slidenum is not None: + label = f"Slide {fp.files[ii].slidenum}" + else: + pn = ( + " ({0})".format(fp.files[ii].pagenum) + if fp.files[ii].pagenum is not None + else "" + ) + label = os.path.split(svg)[-1] + pn + + # Determine currenttype accurately + if fp.isdir: + currenttype = "Current" + elif fp.files[ii].islinked: + currenttype = "Linked" + else: + currenttype = "Embedded" + + file_url = cached_url(svg) + thumbnail_url = cached_url(fp.files[ii].thumbnail) + + # Add file data + files_data.append({ + "file_url": file_url, + "thumbnail_url": thumbnail_url, + "file_uri": f.name_uri, + "label": label, + "currenttype": currenttype, + "embed": f.embed_uri, + }) + processing = not fp.run_on_fof_done or any(not t.done for t in fp.cthreads) + gallery_data.append({ + "header": fp.header, + "files": files_data, + "processing": processing + }) + + # Return gallery data as JSON + print(f'Done jsonifying in {time.time()-tic}') + return jsonify(gallery_data=gallery_data) + + + + @app.route("/stop") + def stop(): + func = request.environ.get("werkzeug.server.shutdown") + if func is None: + raise RuntimeError("Not running with the Werkzeug Server") + func() + return "Server shutting down..." + + @app.route("/process", methods=["GET"]) + def process(): + param = request.args.get("param") + svg_file = file_uri_to_path(param) + if svg_file is not None: + print("Opening " + str(svg_file)) + + if str(svg_file).endswith(".emf") or str(svg_file).endswith(".wmf"): + subprocess.Popen([bfn,svg_file]) + return f"The parameter received is: {param}" + + with OpenWithEncoding(svg_file) as f: + file_content = f.read() + if DUP_KEY in file_content: + deembedsmade = False + while not (deembedsmade): + deembeds = os.path.join(temp_dir, "deembeds") + deembedsmade = os.path.exists(deembeds) + if not (deembedsmade): + os.mkdir(deembeds) + + tsvg = os.path.join( + deembeds, "tmp_" + str(len(os.listdir(deembeds))) + ".svg" + ) + svg = dh.svg_from_file(svg_file) + + for d in svg.descendants2(): + if ( + isinstance(d, inkex.TextElement) + and d.text is not None + and DUP_KEY in d.text + ): + dupid = d.text[len(DUP_KEY + ": ") :] + dup = svg.getElementById(dupid) + if dup is not None: + dup.delete() + g = d.getparent() + d.delete() + g.set("display", None) # office converts to att + g.cstyle["display"] = None + list(g)[0].set_id(dupid) + dh.ungroup(g) + + dh.overwrite_svg(svg, tsvg) + subprocess.Popen([bfn, tsvg]) + else: + subprocess.Popen([bfn, svg_file]) + + return f"The parameter received is: {param}" + + @app.route("/show_file", methods=["GET"]) + def show_file(): + param = request.args.get("param") + svg_file = file_uri_to_path(param) + if svg_file is not None: + print("Showing in file browser: " + str(svg_file)) + show_in_file_browser(str(svg_file)) + return f"The parameter received is: {param}" + + @app.route("/check_for_refresh") + def check_for_refresh(): + global refreshapp, lastupdate, openedgallery + openedgallery = True + if refreshapp: + refreshapp = False + lastupdate = time.time() + return jsonify(lastupdate=lastupdate) + + def run_flask(): + app.run(port=PORTNUMBER) + + thread = Thread(target=run_flask) + thread.start() + +temp_dir, temp_head = dh.shared_temp("gv") +temp_base = os.path.join(temp_dir,temp_head) +MAXTHREADS = 10 +conv_sema = threading.Semaphore(MAXTHREADS) + +# Opens a file with unknown encoding, trying utf-8 first +# chardet can be slow +class OpenWithEncoding: + def __init__(self, filename, mode="r"): + self.filename = filename + self.mode = mode + self.file = None + + def __enter__(self): + try: + self.file = open(self.filename, self.mode, encoding="utf-8") + except UnicodeDecodeError: + with open(self.filename, "rb") as f: + raw_data = f.read() + result = chardet.detect(raw_data) + encoding = result["encoding"] + + self.file = open(self.filename, self.mode, encoding=encoding) + + return self.file + + def __exit__(self, exc_type, exc_value, traceback): + if self.file is not None: + self.file.close() + return False # Don't suppress exceptions + +cthread_no = 0 +cthread_lock = threading.Lock() +class ConversionThread(threading.Thread): + # Converts an EMF/WMF to PNG to be used as a thumbnail + def __init__(self, filein, parent_watcher, fileout): + super().__init__() + self.file = filein + self.parent = parent_watcher # Reference to the parent class instance + self.done = False + self.fileout = fileout + + global cthread_no + with cthread_lock: + self.no = cthread_no + cthread_no += 1 + + def run(self): + fname = self.file.name + + # Read and hash the input file to check for duplicates + with open(fname, "rb") as file: + file_content = file.read() + hashed = hashlib.sha256(file_content).hexdigest() + + + # Check if the file has already been converted + if hashed not in converted_files: + print("Starting export of "+fname) + + # Generate a unique conversion path + conv_path = os.path.join(temp_dir, f"{temp_head}_conv{self.no}.png") + + # Remove existing output file if it exists + if os.path.exists(self.fileout): + os.remove(self.fileout) + + try: + from PIL import Image + with open(fname, "rb") as file: + with Image.open(file) as im: + width, height = im.size + new_width = 400 + + if fname.endswith('.wmf'): + DEFAULT_DPI = 72 + new_dpi = max(10,int(new_width / width * DEFAULT_DPI)) + im.load(dpi=new_dpi) + width, height = im.size + + new_height = int((new_width / width) * height) + if 'info' in im.__dict__ and "dpi" in im.info and isinstance(im.info["dpi"],tuple) and len(im.info["dpi"]) == 2: + # print(im.info['dpi']) + new_height = int((new_width / width * im.info["dpi"][0]/im.info["dpi"][1]) * height) + resized_image = im.resize((new_width, new_height), Image.LANCZOS) + resized_image.save(conv_path) + print('PIL export of '+fname + ' originally '+str(width)+' x '+str(height)) + except Exception as e: + print(f"Failed export: {e}") + args = [ + bfn, + "--export-area-drawing", + "--export-background", + "#ffffff", + "--export-background-opacity", + "1.0", + "--export-width", + "400", + "--export-filename", + conv_path, + fname, + ] + # Execute the conversion command + with conv_sema: + print('Inkscape export of '+fname) + dh.subprocess_repeat(args) + + # Move the converted file to the final destination + shutil.move(conv_path, self.fileout) + print("Finished export...") + + # Trigger a refresh and update the converted files dictionary + converted_files[hashed] = self.fileout + else: + # If already converted, copy the existing file + shutil.copy2(converted_files[hashed], self.fileout) + if os.path.exists(self.fileout): + self.file.thumbnail = self.fileout + trigger_refresh() + self.done = True + +class DisplayedFile(): + """ Represents a single file we are displaying """ + def __init__(self,val): + self.name = str(val); # actual file + if self.name.endswith(".emf"): + self.thumbnail = os.path.join(dh.si_dir,'pngs','converting_emf.svg') + elif self.name.endswith(".wmf"): + self.thumbnail = os.path.join(dh.si_dir,'pngs','converting_wmf.svg') + else: + self.thumbnail = self.name + self.name_uri = pathlib.Path(self.name).as_uri() + self.slidenum = None + self.islinked = False + self.embed = None + self.embed_uri = None + self.pagenum = None + + def __str__(self): + return self.name + + def __lt__(self, other): + if isinstance(other, DisplayedFile): + return self.name < other.name + return self.name < other # Fallback for comparing with strings + +wthread_no = 0 +wthread_lock = threading.Lock() +class Processor(threading.Thread): + """ Creates a gallery for a single selection, either a file or folder """ + def __init__(self, file_or_folder, opened=True): + threading.Thread.__init__(self) + self.fof = file_or_folder + self.isdir = not os.path.isfile(self.fof) + + self.open_at_load = opened + self.run_on_fof_done = False + + self.files = [] + self.header = self.fof + self.cthreads = [] # conversion threads + + global wthread_no + with wthread_lock: + self.no = wthread_no + wthread_no += 1 + + def create_fcn(self,path): + print(f"Created: {path}") + self.run_on_fof() + def mod_fcn(self,path): + print(f"Modified: {path}") + self.run_on_fof() + def delete_fcn(self,path): + print(f"Deleted: {path}") + # self.run_on_fof() + + def get_image_slidenums(self, dirin): + relsdir = os.path.join(dirin, "ppt", "slides", "_rels") + numslides = len(os.listdir(relsdir)) + slide_filenames = [] + for slide_num in range(1, numslides + 1): + tree = ET.parse( + os.path.join( + dirin, "ppt", "slides", "_rels", f"slide{slide_num}.xml.rels" + ) + ) + root = tree.getroot() + image_filenames = [] + for elem in root.iter( + "{http://schemas.openxmlformats.org/package/2006/relationships}Relationship" + ): + if ( + elem.attrib["Type"] + == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" + ): + image_filenames.append(elem.attrib["Target"]) + slide_filenames.append(image_filenames) + slide_lookup = {} + for index, filenames in enumerate(slide_filenames): + for filename in filenames: + slide_lookup[filename] = slide_lookup.get(filename, []) + [ + index + 1 + ] + return slide_lookup + + def get_linked_images_word(self,dirin): + rels_path = os.path.join(dirin, "word", "_rels", "document.xml.rels") + + # Parse the relationships file + tree = ET.parse(rels_path) + root = tree.getroot() + + linked_images = [] + for elem in root.iter("{http://schemas.openxmlformats.org/package/2006/relationships}Relationship"): + # Check if the relationship is an image and has an external TargetMode + if elem.attrib["Type"] == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image": + if elem.attrib.get("TargetMode") == "External": + linked_images.append(elem.attrib["Target"]) + + return linked_images + + def get_images_onenote(self,target_file,outputdir): + ''' Extracts OneNote files to the output directory ''' + pkg_dir = os.path.join(dh.si_dir,'packages') + if pkg_dir not in sys.path: + sys.path.append(pkg_dir) + from onenoteextractor.one import OneNoteExtractor + from pathlib import Path + with Path(target_file).open("rb") as infile: + data = infile.read() + document = OneNoteExtractor(data=data, password=None) + import struct + def is_emf(file_data: bytes) -> bool: + """Check if the file_data represents an EMF file by inspecting the header.""" + if len(file_data) < 88: + return False # EMF header should be at least 88 bytes + # Unpack the first 4 bytes to get the Record Type + record_type, = struct.unpack(' bool: + """Check if the file_data represents a WMF file by inspecting the header.""" + if len(file_data) < 4: + return False # WMF header should be at least 4 bytes + # Check for Placeable WMF magic number + if file_data.startswith(b'\xD7\xCD\xC6\x9A'): + return True + # For non-placeable WMF files, check the Type and Header Size + if len(file_data) < 18: # Minimum WMF header size + return False + try: + type_, header_size, version = struct.unpack(' bool: + """Check if the file_data represents a PNG file by inspecting the header.""" + return file_data.startswith(b'\x89PNG\r\n\x1a\n') + + def is_jpeg(file_data: bytes) -> bool: + """Check if the file_data represents a JPEG file by inspecting the header.""" + return file_data.startswith(b'\xFF\xD8\xFF') + for index, file_data in enumerate(document.extract_files()): + bn = Path(target_file).stem # Use stem to get filename without extension + if is_emf(file_data): + extension = '.emf' + elif is_wmf(file_data): + extension = '.wmf' + elif is_png(file_data): + extension = '.png' + elif is_jpeg(file_data): + extension = '.jpg' + else: + extension = '.bin' # Default extension for unknown types + target_path = Path(outputdir) / f"{bn}_{index}{extension}" + print(f"Writing extracted file to: {target_path}") + with target_path.open("wb") as outf: + outf.write(file_data) + + def run_on_file(self, contents): + # Unzip the ppt file to the temp directory, allowing for multiple + # attempts in case the file was not originally found (which can + # happen in cloud drives) + if self.fof.endswith(".pptx") or self.fof.endswith(".pptm"): + ftype = "ppt" + elif self.fof.endswith(".one"): + ftype = "onenote" + else: + ftype = "word" + + print(f'Unzipping {self.fof}') + if ftype == "onenote": + media_dir = os.path.join(contents, ftype) + os.mkdir(media_dir) + self.get_images_onenote(self.fof,media_dir) + else: + media_dir = os.path.join(contents, ftype, "media") + attempts = 0 + max_attempts = 3 + while attempts < max_attempts: + try: + with zipfile.ZipFile(self.fof, "r") as zip_ref: + zip_ref.extractall(contents) + break # Exit the loop if successful + except zipfile.BadZipFile: + attempts += 1 + if attempts == max_attempts: + self.run_on_fof_done = True + print(f'Could not unzip {self.fof} after {max_attempts} attempts.') + return + else: + print(f'Attempt {attempts} to unzip {self.fof} failed. Retrying...') + + self.files = [] + if os.path.exists(media_dir): + self.files += Processor.get_svgs(media_dir) + trigger_refresh() + + + if ftype == "ppt": + image_slides = self.get_image_slidenums(contents) + + # Add linked images to self.files + linked = [ + DisplayedFile(file_uri_to_path(k)) + for k in image_slides.keys() + if "file:" in k + ] + self.files += linked + slidenums = { + os.path.join(contents, "ppt", "media", os.path.basename(k)) + if "file:" not in k + else str(file_uri_to_path(k)): v + for k, v in image_slides.items() + } + + # Sort the files by slide number and make slidenums a corresponding list + # Duplicates filenames if on multiple slides + exp_files = [] + for file in self.files: + slides = slidenums.get(file.name, [float("inf")]) + for slide in slides: + exp_files.append((file,slide)) + if len(exp_files)>0: # Sort by slide and then name + self.files, slidenums = map(list, zip(*sorted(exp_files, key=lambda x: (x[1], x[0])))) + else: + self.files, slidenums = [], [] + for i, v in enumerate(slidenums): + self.files[i].slidenum = v if v != float("inf") else "?" + self.files[i].islinked = self.files[i] in linked + else: + if ftype=='word': + linked = [DisplayedFile(file_uri_to_path(k)) for k in self.get_linked_images_word(contents)] + for f in linked: + f.islinked = True + self.files += linked + trigger_refresh() + + subfiles = None + for ii, fv in enumerate(self.files): + ev = False + if fv.name.endswith(".svg") and os.path.exists(fv.name): + with OpenWithEncoding(fv.name) as f: + file_content = f.read() + if ORIG_KEY in file_content: + key = ORIG_KEY + r":\s*(.+?)<" + match = re.search(key, file_content) + if match: + orig_file = match.group(1) + orig_hash = None + if ( + ", hash: " in orig_file + ): # introduced hashing later than ORIG_KEY + orig_file, orig_hash = orig_file.split( + ", hash: " + ) + if os.path.exists(orig_file): + ev = os.path.abspath(orig_file) + else: + # Check subdirectories of the file's location in case it was moved + + def list_all_files(directory): + for dirpath, dirs, files in os.walk( + directory + ): + for filename in files: + yield os.path.join( + dirpath, filename + ) + + fndir = os.path.split(self.fof)[0] + subfiles = ( + list(list_all_files(fndir)) + if subfiles is None + else subfiles + ) + + for tryfile in subfiles: + if os.path.split(orig_file)[ + -1 + ] == os.path.split(tryfile)[-1] and ( + orig_hash is None + or hash_file(tryfile) == orig_hash + ): + ev = os.path.abspath(tryfile) + break + self.files[ii].embed=ev + self.files[ii].embed_uri = pathlib.Path(ev).as_uri() if ev else None + + def run_on_folder(self): + self.files = Processor.get_svgs(self.fof) + trigger_refresh() + + ii = 0 + while ii < len(self.files): + fn = self.files[ii].name + svg_pgs = [] + + # Check if the file is an SVG file + if fn.endswith(".svg"): + with OpenWithEncoding(fn) as f: + try: + contents = f.read() + except OSError: + raise(f'Could not open {fn}') + if re.search(r"<\s*inkscape:page[\s\S]*?>", contents): + svg = dh.svg_from_file(fn) + pgs = svg.cdocsize.pgs + haspgs = inkex.installed_haspages + # If the file has multiple pages, split it + if haspgs and len(pgs) > 0: + vbs = [svg.cdocsize.pxtouu(pg.bbpx) for pg in pgs] + for vb in vbs: + svg.set_viewbox(vb) + tnsvg = os.path.join(self.tndir, str(self.numtns) + ".svg") + self.numtns += 1 + dh.overwrite_svg(svg, tnsvg) + svg_pgs.append(tnsvg) + + # If thumbnails were created (multiple pages), update files and thumbnails lists + if len(svg_pgs) > 0: + nfiles = [DisplayedFile(fn) for t in svg_pgs] + for i, n in enumerate(nfiles): + n.thumbnail = svg_pgs[i] + n.pagenum = i+1 + self.files[ii:ii + 1] = nfiles + trigger_refresh() + ii += len(nfiles) + else: + ii += 1 + + @staticmethod + def get_svgs(dirin): + svg_filenames = [] + for file in os.listdir(dirin): + if should_display(file): + svg_filenames.append(DisplayedFile(os.path.join(dirin, file))) + svg_filenames.sort() + return svg_filenames + + def run_on_fof(self): + print("Running on file: " + self.fof) + + contents = os.path.join( + temp_dir, f"{temp_head}_cont{self.no}" + ) + if not (os.path.exists(contents)): + os.mkdir(contents) + + self.tndir = os.path.join(contents, "thumbnails") + if not os.path.exists(self.tndir): + os.makedirs(self.tndir) + self.numtns = len(os.listdir(self.tndir)) + + if not self.isdir: + self.run_on_file(contents) + else: + self.run_on_folder() + + for ii, f in enumerate(self.files): + if f.islinked and f.thumbnail.endswith(".svg") and not os.path.exists(self.files[ii].name): + f.thumbnail = os.path.join(dh.si_dir,'pngs','missing_svg.svg') + + self.convert_emfs() # start ConversionThreads + self.run_on_fof_done = True + trigger_refresh() + + def convert_emfs(self): + for ii, f in enumerate(self.files): + if f.name.endswith(".emf") or f.name.endswith(".wmf"): + tnpng = os.path.join(self.tndir, str(self.numtns) + ".png") + self.numtns += 1 + thread = ConversionThread(f, self, tnpng) + self.cthreads.append(thread) + thread.start() + + def run(self): + with app_lock: + if app is None: + Make_Flask_App() + time.sleep(1) + # wait to see if check_for_refresh called + global openedgallery + if not (openedgallery): + webbrowser.open("http://localhost:{}".format(str(PORTNUMBER))) + openedgallery = True + self.run_on_fof() + watcher.add_watch(self) + +def should_display(file): + """ Criteron for whether a file should be displayed in the gallery """ + valid_exts = ['svg','emf','wmf','png','gif','jpg','jpeg'] + return any(file.lower().endswith('.'+ext) for ext in valid_exts) + + +warnings.filterwarnings( + "ignore", message="Failed to import fsevents. Fall back to kqueue" +) +mydir = os.path.dirname(os.path.abspath(__file__)) +packages = os.path.join(mydir, "packages") +if packages not in sys.path: + sys.path.append(packages) +from watchdog.observers import Observer +from watchdog.events import FileSystemEventHandler +from collections import defaultdict +class Watcher(FileSystemEventHandler): + def __init__(self): + super().__init__() + self.observer = Observer() + self.dir_processors = defaultdict(list) # dirpath -> list of Processor + self.dir_refs = defaultdict(int) # dirpath -> number of watchers + self.dir_watches = {} # dirpath -> Watch object + self.debounce_timers = {} # (watcher, path) -> timer + self.file_mod_times = {} # full file path -> last mtime + self.observer.start() + + def add_watch(self, fp): + path = os.path.abspath(fp.fof) + dir_path = path if fp.isdir else os.path.dirname(path) + + # Initialize mod times since watchdog sometimes does modifier events + # that don't seem to be real + if fp.isdir: + cfiles = [os.path.join(fp.fof, f) for f in os.listdir(fp.fof)] + else: + cfiles = [fp.fof] + for f in cfiles: + if os.path.isfile(f) and self.is_target_file(f,fp): + mtime = self.get_mod_time(f) + if mtime: + self.file_mod_times[os.path.abspath(f)] = mtime + + if self.dir_refs[dir_path] == 0: + watch = self.observer.schedule(self, dir_path, recursive=False) + self.dir_watches[dir_path] = watch + print(f"Scheduled observer for {dir_path}") + + self.dir_processors[dir_path].append(fp) + self.dir_refs[dir_path] += 1 + + def remove_watch(self, fp): + path = os.path.abspath(fp.fof) + dir_path = path if fp.isdir else os.path.dirname(path) + + if fp in self.dir_processors[dir_path]: + self.dir_processors[dir_path].remove(fp) + self.dir_refs[dir_path] -= 1 + + if self.dir_refs[dir_path] <= 0: + print(f"Unscheduling observer for {dir_path}") + watch = self.dir_watches.pop(dir_path, None) + if watch: + self.observer.unschedule(watch) + self.dir_processors.pop(dir_path, None) + self.dir_refs.pop(dir_path, None) + + def stop(self): + self.observer.stop() + self.observer.join() + + @staticmethod + def get_mod_time(path): + try: + return os.path.getmtime(path) + except FileNotFoundError: + return None + + def is_target_file(self, file_path, watcher): + file_name = os.path.basename(file_path) + if not watcher.isdir: + return os.path.abspath(file_path) == os.path.abspath(watcher.fof) + return should_display(file_name) + + def handle_event(self, event): + if event.is_directory: + return + dir_path = os.path.dirname(event.src_path) + for watcher in self.dir_processors.get(dir_path, []): + if not self.is_target_file(event.src_path, watcher): + continue + key = (watcher, event.src_path) + + if key in self.debounce_timers: + self.debounce_timers[key].cancel() + self.debounce_timers[key] = threading.Timer( + 0.5, self.run_callback, [watcher, event] + ) + self.debounce_timers[key].start() + + + def run_callback(self, watcher, event): + if event.event_type == "created" and watcher.create_fcn: + watcher.create_fcn(event.src_path) + elif event.event_type == "modified" and watcher.mod_fcn: + watcher.mod_fcn(event.src_path) + elif event.event_type == "deleted" and watcher.delete_fcn: + watcher.delete_fcn(event.src_path) + + def on_created(self, event): + self.handle_event(event) + + def on_deleted(self, event): + self.file_mod_times.pop(event.src_path, None) + self.handle_event(event) + + def on_modified(self, event): + if event.is_directory: + return + new_mtime = self.get_mod_time(os.path.abspath(event.src_path)) + old_mtime = self.file_mod_times.get(os.path.abspath(event.src_path)) + + if new_mtime and new_mtime != old_mtime: + self.file_mod_times[event.src_path] = new_mtime + self.handle_event(event) +watcher = Watcher() + +converted_files = dict() +lastupdate = time.time() +processors = [] +openedgallery = False + +def process_selection(file, opened=True): + if os.path.isdir(file) and os.path.isfile(os.path.join(file, "Gallery.cfg")): + with open(os.path.join(file, "Gallery.cfg"), "r") as f: + lines = f.readlines() + lines = [line.strip() for line in lines] + for ii, ln in enumerate(lines): + process_selection(os.path.join(file, ln), True) + return + + for fp in processors: + if file == fp.fof: + processors.remove(fp) + watcher.remove_watch(fp) + print("About to start") + fp = Processor(file, opened=opened) + fp.win = win + processors.append(fp) + fp.start() + +def quitnow(): + requests.get( + "http://localhost:{}/stop".format(str(PORTNUMBER)) + ) # kill Flask app + + + # remove temp files + tmps = [] + for t in os.listdir(temp_dir): + tmp = os.path.join(temp_dir, t) + try: + one_day_ago = time.time() - 24 * 60 * 60 + if os.path.getmtime(tmp) < one_day_ago: + tmps.append(tmp) + except FileNotFoundError: # already deleted + pass + if tmp.startswith(temp_base): + tmps.append(tmp) + + for tmp in tmps: + if os.path.exists(tmp): + deleted = False + nattempts = 0 + while not deleted and nattempts < MAXATTEMPTS: + try: + if os.path.isdir(tmp): + shutil.rmtree(tmp) + else: + os.remove(tmp) + deleted = True + except PermissionError: + time.sleep(1) + nattempts += 1 + + for fp in processors: + watcher.remove_watch(fp) + + watcher.stop() + + pid = os.getpid() + import signal + + os.kill(pid, signal.SIGINT) # or signal.SIGTERM + +if guitype == "gtk": + import gi + + gi.require_version("Gtk", "3.0") + + class GalleryViewerServer(Gtk.Window): + def __init__(self): + Gtk.Window.__init__(self, title="Gallery Viewer") + self.set_default_size( + 400, -1 + ) # set width to 400 pixels, height can be automatic + self.set_position(Gtk.WindowPosition.CENTER) + + self.containing_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + self.containing_box.set_valign(Gtk.Align.CENTER) + self.containing_box.set_margin_top(20) + self.containing_box.set_margin_bottom(20) + + self.file_button = Gtk.Button(label="View contents of files (.pptx, .docx, .one)") + self.file_button.connect("clicked", self.on_file_button_clicked) + self.folder_button = Gtk.Button(label="View contents of folders") + self.folder_button.connect("clicked", self.on_folder_button_clicked) + self.clear_button = Gtk.Button(label="Clear selections") + self.clear_button.connect("clicked", self.clear_clicked) + self.gallery_button = Gtk.Button(label="Display gallery") + self.gallery_button.connect("clicked", self.gallery_button_clicked) + self.exit_button = Gtk.Button(label="Exit") + self.exit_button.connect("clicked", self.on_button_clicked) + + # Create a list store to hold the file information + self.liststore = Gtk.ListStore(str, str) + self.treeview = Gtk.TreeView(model=self.liststore) + renderer_text = Gtk.CellRendererText() + column_text = Gtk.TreeViewColumn("Name", renderer_text, text=0) + self.treeview.append_column(column_text) + renderer_text = Gtk.CellRendererText() + column_text = Gtk.TreeViewColumn("Location", renderer_text, text=1) + self.treeview.append_column(column_text) + self.scrolled_window_files = Gtk.ScrolledWindow() + self.scrolled_window_files.set_policy( + Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC + ) + self.scrolled_window_files.set_size_request(600, 200) + self.scrolled_window_files.set_vexpand(True) + self.scrolled_window_files.add(self.treeview) + + self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + # self.box.pack_start(self.containing_box, True, True, 0) + self.box.pack_start(self.scrolled_window_files, True, True, 0) + self.box.pack_start(self.file_button, False, False, 0) + self.box.pack_start(self.folder_button, False, False, 0) + self.box.pack_start(self.clear_button, False, False, 0) + self.box.pack_start(self.gallery_button, False, False, 0) + self.box.pack_start(self.exit_button, False, False, 0) + self.add(self.box) + + def print_text(self, text): + buffer = self.selected_file_label.get_buffer() + start, end = buffer.get_bounds() + if buffer.get_text(start, end, False) == "No file selected.": + buffer.set_text("") + buffer.insert(buffer.get_end_iter(), text + "\n") + end_iter = buffer.get_end_iter() + buffer.move_mark(buffer.get_insert(), end_iter) + self.selected_file_label.scroll_to_mark( + buffer.get_insert(), 0, True, 0, 0 + ) + + def on_button_clicked(self, widget): + self.destroy() + + def on_file_button_clicked(self, widget): + native = Gtk.FileChooserNative.new( + "Please choose one or more files", self, Gtk.FileChooserAction.OPEN, None, None + ) + native.set_select_multiple(True) + filter_ppt = Gtk.FileFilter() + filter_ppt.set_name("Office files") + filter_ppt.add_pattern("*.docx") + filter_ppt.add_pattern("*.pptx") + filter_ppt.add_pattern("*.pptm") + filter_ppt.add_pattern("*.one") + native.add_filter(filter_ppt) + response = native.run() + if response == Gtk.ResponseType.ACCEPT: + selected_files = native.get_filenames() + for selected_file in selected_files: + file_name = os.path.basename(selected_file) + file_dir = os.path.dirname(selected_file) + self.liststore.append([file_name, file_dir]) + process_selection(selected_file) + native.destroy() + + def on_folder_button_clicked(self, widget): + native = Gtk.FileChooserNative.new( + "Please choose one or more directories", + self, + Gtk.FileChooserAction.SELECT_FOLDER, + None, + None, + ) + native.set_select_multiple(True) + response = native.run() + if response == Gtk.ResponseType.ACCEPT: + selected_files = native.get_filenames() + for selected_file in selected_files: + file_name = os.path.basename(selected_file) + file_dir = os.path.dirname(selected_file) + self.liststore.append([file_name, file_dir]) + process_selection(selected_file) + + if os.path.exists(selected_file): + for fnm in os.listdir(selected_file): + if fnm.endswith('.docx') or fnm.endswith('.pptx') or fnm.endswith('.one'): + if not fnm.startswith('~$'): # temp files + file_name = fnm + file_dir = selected_file + self.liststore.append([file_name, file_dir]) + process_selection(os.path.join(file_dir,file_name)) + native.destroy() + + def gallery_button_clicked(self, widget): + webbrowser.open("http://localhost:{}".format(str(PORTNUMBER))) + + def clear_clicked(self, widget): + for fp in reversed(processors): + processors.remove(fp) + watcher.remove_watch(fp) + self.liststore.clear() + + win = GalleryViewerServer() + win.set_keep_above(True) + + # win.connect("destroy", quitnow) + def quit_and_close(self): + Gtk.main_quit() + quitnow() + + win.connect("destroy", quit_and_close) + win.show_all() + win.set_keep_above(False) + Gtk.main() +elif guitype == "tkinter": + root = tk.Tk() + root.title("Gallery Viewer") + root.attributes("-topmost", True) + root.wm_minsize(width=350, height=-1) + + def open_file(): + file = filedialog.askopenfilename() + file_label.config(text=file) + process_selection(file) + + def end_program(): + print("Quitting") + root.destroy() + quitnow() + + file_label = tk.Label(root, text="No file selected.") + file_label.pack() + select_button = tk.Button(root, text="Select File", command=open_file) + select_button.pack() + end_button = tk.Button(root, text="End Program", command=end_program) + end_button.pack() + root.protocol("WM_DELETE_WINDOW", end_program) + root.mainloop() + +print("Finishing") diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/gallery_viewer_template.html b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/gallery_viewer_template.html new file mode 100644 index 0000000..acc0a88 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/gallery_viewer_template.html @@ -0,0 +1,382 @@ + + + + + + Gallery Viewer + + + + + +

Gallery Viewer

+
+
+ + +
+ + + + + + \ No newline at end of file diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/homogenizer.inx b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/homogenizer.inx new file mode 100644 index 0000000..77cda49 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/homogenizer.inx @@ -0,0 +1,68 @@ + + + Homogenizer + burghoff.homogenizer + + + + + + true + true + + + true + + + + + + + + + + 8 + false + + + + true + true + + + + + + + + + 1 + + + false + + + + + + + + + + text + + + + + + diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/homogenizer.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/homogenizer.py new file mode 100644 index 0000000..c4928e4 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/homogenizer.py @@ -0,0 +1,396 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# Copyright (c) 2023 David Burghoff +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +import dhelpers as dh +import inkex +from inkex import TextElement, FlowRoot, FlowPara, Tspan, Transform, Group, FlowSpan +from inkex.text.cache import BaseElementCache +otp_support_tags = BaseElementCache.otp_support_tags +from inkex.text.utils import default_style_atts + +from applytransform_mod import fuseTransform +import math + +badels = ( + inkex.NamedView, + inkex.Defs, + inkex.Metadata, + inkex.ForeignObject, + inkex.SVGfont, + inkex.FontFace, + inkex.MissingGlyph, +) + +dispprofile = False + + +class Homogenizer(inkex.EffectExtension): + # def document_path(self): + # return 'test' + + def add_arguments(self, pars): + pars.add_argument("--tab", help="The selected UI-tab when OK was pressed") + pars.add_argument( + "--setfontsize", type=inkex.Boolean, default=False, help="Set font size?" + ) + pars.add_argument("--fontsize", type=float, default=8, help="New font size") + pars.add_argument( + "--fixtextdistortion", + type=inkex.Boolean, + default=False, + help="Fix distorted text?", + ) + pars.add_argument("--fontmodes", type=int, default=1, help="Font size options") + + pars.add_argument( + "--setfontfamily", + type=inkex.Boolean, + default=False, + help="Set font family?", + ) + pars.add_argument("--fontfamily", type=str, default="", help="New font family") + + # pars.add_argument("--setreplacement", type=inkex.Boolean, default=False,help="Replace missing fonts?") + # pars.add_argument("--replacement", type=str, default='', help="Missing fon replacement"); + + pars.add_argument( + "--setstroke", type=inkex.Boolean, default=False, help="Set stroke width?" + ) + pars.add_argument( + "--setstrokew", type=float, default=1, help="New stroke width" + ) + pars.add_argument( + "--strokemodes", type=int, default=1, help="Stroke width options" + ) + pars.add_argument( + "--clearclipmasks", type=inkex.Boolean, default=False, help="Clear clips and masks" + ) + pars.add_argument( + "--fusetransforms", + type=inkex.Boolean, + default=False, + help="Fuse transforms to paths?", + ) + pars.add_argument( + "--plotaware", + type=inkex.Boolean, + default=False, + help="Plot-aware text scaling?", + ) + + def effect(self): + if dispprofile: + import cProfile, pstats, io + from pstats import SortKey + + pr = cProfile.Profile() + pr.enable() + + setfontsize = self.options.setfontsize + # setfontsize = (self.options.fontmodes>1); + + fontsize = self.options.fontsize + setfontfamily = self.options.setfontfamily + fontfamily = self.options.fontfamily + setstroke = self.options.setstroke + setstrokew = self.options.setstrokew + fixtextdistortion = self.options.fixtextdistortion + + sel0 = [self.svg.selection[ii] for ii in range(len(self.svg.selection))] + # should work with both v1.0 and v1.1 + sel = [v for el in sel0 for v in el.descendants2()] + + itag = inkex.Image.ctag + if all([el.tag == itag for el in sel]): + inkex.utils.errormsg( + """Thanks for using Scientific Inkscape! + +It appears that you're attempting to homogenize a raster Image object. Please note that Inkscape is mainly for working with vector images, not raster images. Vector images preserve all of the information used to generate them, whereas raster images do not. Read about the difference here: +https://en.wikipedia.org/wiki/Vector_graphics + +Unfortunately, this means that there is not much the Homogenizer can do to edit raster images. If you want to edit a raster image, you will need to use a program like Photoshop or GIMP. + """ + ) + quit() + elif self.options.plotaware and any([not isinstance(k, Group) for k in sel0]): + inkex.utils.errormsg( + "Plot-aware scaling requires that every selected object be a grouped plot." + ) + return + + sela = [el for el in sel if not (isinstance(el, badels))] + sel = [ + el + for el in sel + if isinstance(el, (TextElement, Tspan, FlowRoot, FlowPara, FlowSpan)) + ] + + if setfontfamily or setfontsize or fixtextdistortion: + tels = [d for d in sel if isinstance(d, (TextElement, FlowRoot))] + if not self.options.plotaware: + bbs = dh.BB2(self.svg, tels, False) + else: + aels = [d for el in sel0 for d in el.descendants2()] + bbs = dh.BB2(self.svg, aels, False) + + if setfontsize: + # Get all font sizes and scale factors + onept = self.svg.cdocsize.unittouu("1pt") + szs = dict() + for el in tels: + cszs = [c.tfs / onept for ln in el.parsed_text.lns for c in ln.chrs] + if len(cszs) > 0: + szs[el] = max(cszs) + + # Determine scale and/or size + fixedscale = False + try: + if self.options.fontmodes == 3: + fixedscale = True + elif self.options.fontmodes == 4: + fixedscale = True + fontsize = fontsize / max(szs.values()) * 100 + elif self.options.fontmodes == 5: + from statistics import mean + + fontsize = mean(szs.values()) + elif self.options.fontmodes == 6: + from statistics import median + + fontsize = median(szs.values()) + elif self.options.fontmodes == 7: + fontsize = min(szs.values()) + elif self.options.fontmodes == 8: + fontsize = max(szs.values()) + except ValueError: + fontsize = 12 + + from inkex.text import parser + + for el in szs: + for d in reversed(el.descendants2()): + sty = d.cspecified_style + if el == d or "font-size" in sty: + dfs, sf, utdfs = dh.composed_width(d, "font-size") + if dfs==0: + continue + bshift = parser.TChar.get_baseline(sty, d.getparent()) + if bshift != 0 or "%" in sty.get("font-size", ""): + # Convert sub/superscripts into relative size + pfs, sf, _ = dh.composed_width(d.getparent(), "font-size") + d.cstyle["font-size"] = f"{dfs / pfs * 100:.2f}%" + else: + # Set absolute size + scl = ( + fontsize * onept / dfs + if not fixedscale + else fontsize / 100 + ) + nfs = utdfs * scl + nfs = f"{nfs:.2f}" if abs(nfs) > 1 else "{:.3g}".format(nfs) + d.cstyle["font-size"] = nfs.rstrip("0").rstrip(".") + "px" + + if fixtextdistortion: + # make a new transform that removes bad scaling and shearing (see General_affine_transformation.nb) + for el in sel: + ct = el.ccomposed_transform + detv = ct.a * ct.d - ct.b * ct.c + if detv!=0: + signdet = -1 * (detv < 0) + (detv >= 0) + sqrtdet = math.sqrt(abs(detv)) + magv = math.sqrt(ct.b**2 + ct.a**2) + ctnew = Transform( + [ + [ct.a * sqrtdet / magv, -ct.b * sqrtdet * signdet / magv, ct.e], + [ct.b * sqrtdet / magv, ct.a * sqrtdet * signdet / magv, ct.f], + ] + ) + dh.global_transform(el, (ctnew @ (-ct))) + + if setfontfamily: + from inkex.text.font_properties import inkscape_spec_to_css + sty = inkscape_spec_to_css(fontfamily) + if sty is None: + dh.idebug('Font seems to be invalid—check its spelling.') + import sys + sys.exit() + # If any type of Font Style is being set, reset the others to default + if any(k in sty for k in ["font-weight", "font-style", "font-stretch"]): + for k in ["font-weight", "font-style", "font-stretch"]: + sty.setdefault(k, default_style_atts[k]) + + for el in reversed(sel): + for k,v in sty.items(): + el.cstyle[k] = v + el.cstyle["-inkscape-font-specification"] = None + + from inkex.text import parser + + dh.character_fixer(tels) + + if setfontfamily or setfontsize or fixtextdistortion: + bbs2 = dh.BB2(self.svg, tels, True) + if not self.options.plotaware: + for el in sel: + myid = el.get_id() + if ( + isinstance(el, (TextElement, FlowRoot)) + and myid in bbs + and myid in bbs2 + ): + bb = bbs[el.get_id()] + bb2 = bbs2[el.get_id()] + tx = (bb2[0] + bb2[2] / 2) - (bb[0] + bb[2] / 2) + ty = (bb2[1] + bb2[3] / 2) - (bb[1] + bb[3] / 2) + trl = Transform("translate({0}, {1})".format(-tx, -ty)) + dh.global_transform(el, trl) + + else: + from scale_plots import ( + geometric_bbox, + Find_Plot_Area, + trtf, + appendInt, + ) + + gbbs = {elid: geometric_bbox(el, fbb).sbb for elid, fbb in bbs.items()} + for i0, g in enumerate(sel0): + pels = [k for k in g if k.get_id() in bbs] # plot elements list + vl, hl, lvel, lhel = Find_Plot_Area(pels, gbbs) + + if lvel is None or lhel is None: + lvel = None + lhel = None + # Display warning and proceed + numgroup = str(i0 + 1) + appendInt(i0 + 1) + inkex.utils.errormsg( + "A box-like plot area could not be automatically detected on the " + + numgroup + + " selected plot (group ID " + + g.get_id() + + ").\n\nDraw a box with a stroke to define the plot area." + + "\nAdjustment will still be performed, but the results may not be ideal." + ) + + bbp = dh.bbox(None) + # plot area + for el in pels: + if el.get_id() in [lvel, lhel]: + bbp = bbp.union(gbbs[el.get_id()]) + for el in g.descendants2(): + if el in tels: + bb1 = dh.bbox(bbs[el.get_id()]) + bb2 = dh.bbox(bbs2[el.get_id()]) + if bbp.isnull: + dx = bb1.xc - bb2.xc + dy = bb1.yc - bb2.yc + else: + # For elements outside the plot area, adjust position to maintain + # the scaled distance to the plot area + if bb1.xc < bbp.x1: + dx = (bbp.x1 - bb2.x2) - ( + bbp.x1 - bb1.x2 + ) * bb2.w / bb1.w + elif bb1.xc > bbp.x2: + dx = (bb1.x1 - bbp.x2) * bb2.w / bb1.w - ( + bb2.x1 - bbp.x2 + ) + else: + dx = bb1.xc - bb2.xc + if bb1.yc < bbp.y1: + dy = (bbp.y1 - bb2.y2) - ( + bbp.y1 - bb1.y2 + ) * bb2.h / bb1.h + elif bb1.yc > bbp.y2: + dy = (bb1.y1 - bbp.y2) * bb2.h / bb1.h - ( + bb2.y1 - bbp.y2 + ) + else: + dy = bb1.yc - bb2.yc + tr2 = trtf(dx, dy) + dh.global_transform(el, tr2) + + if setstroke: + szd = dict() + sfd = dict() + szs = [] + for el in sela: + sw, sf, _ = dh.composed_width(el, "stroke-width") + + elid = el.get_id() + szd[elid] = sw + sfd[elid] = sf + if sw is not None: + szs.append(sw) + + fixedscale = False + if self.options.strokemodes == 2: + setstrokew = self.svg.cdocsize.unittouu(str(setstrokew) + "px") + elif self.options.strokemodes == 3: + fixedscale = True + elif self.options.strokemodes == 5: + from statistics import mean + + setstrokew = mean(szs) + elif self.options.strokemodes == 6: + from statistics import median + + setstrokew = median(szs) + elif self.options.strokemodes == 7: + setstrokew = min(szs) + elif self.options.strokemodes == 8: + setstrokew = max(szs) + + for el in sela: + elid = el.get_id() + if not (szd[elid] is None): + if not (fixedscale): + newsize = setstrokew + else: + newsize = szd[elid] * (setstrokew / 100) + if sfd[elid]==0: + continue + el.cstyle["stroke-width"] = str(newsize / sfd[elid]) + "px" + + if self.options.fusetransforms: + for el in sela: + if el.tag in otp_support_tags: + # Fuse the composed transform onto the path + el.ctransform = el.ccomposed_transform + fuseTransform(el) + el.ctransform = -el.getparent().ccomposed_transform + + + if self.options.clearclipmasks: + for el in sela: + el.cstyle['clip-path'] = 'none' + el.cstyle['mask'] = 'none' + + if dispprofile: + pr.disable() + s = io.StringIO() + sortby = SortKey.CUMULATIVE + ps = pstats.Stats(pr, stream=s).sort_stats(sortby) + ps.print_stats() + dh.debug(s.getvalue()) + + +if __name__ == "__main__": + dh.Run_SI_Extension(Homogenizer(), "Homogenizer") diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/image_helpers.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/image_helpers.py new file mode 100644 index 0000000..5ed5a83 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/image_helpers.py @@ -0,0 +1,675 @@ +# Stuff copied from image_extract and image_embed +#!/usr/bin/env python +# coding=utf-8 +# +# Copyright (C) 2005,2007 Aaron Spike, aaron@ekips.org +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Extract embedded images. +""" + +from __future__ import unicode_literals + +import os +import dhelpers # noqa +import inkex +from inkex import Image + +try: + from base64 import decodebytes + from base64 import b64encode +except ImportError: + from base64 import decodestring as decodebytes + from base64 import b64encode + + +def mime_to_ext(mime): + """Return an extension based on the mime type""" + # Most extensions are automatic (i.e. extension is same as minor part of mime type) + part = mime.split("/", 1)[1].split("+")[0] + return "." + { + # These are the non-matching ones. + "svg+xml": ".svg", + "jpeg": ".jpg", + "icon": ".ico", + }.get(part, part) + + +def extract_image(node, save_to): + """Extract the node as if it were an image.""" + xlink = node.get("xlink:href") + if not xlink.startswith("data:"): + return # Not embedded image data + + # This call will raise AbortExtension if the document wasn't saved + # and the user is trying to extract them to a relative directory. + # save_to = self.absolute_href(self.options.filepath, default=None) + # Make the target directory if it doesn't exist yet. + if not os.path.isdir(save_to): + os.makedirs(save_to) + + try: + data = xlink[5:] + (mimetype, data) = data.split(";", 1) + (base, data) = data.split(",", 1) + except ValueError: + inkex.errormsg("Invalid image format found") + return + + if base != "base64": + inkex.errormsg("Can't decode encoding: {}".format(base)) + return + + file_ext = mime_to_ext(mimetype) + + pathwext = os.path.join(save_to, node.get("id") + file_ext) + if os.path.isfile(pathwext): + inkex.errormsg( + "Can't extract image, filename already used: {}".format(pathwext) + ) + return + + # self.msg('Image extracted to: {}'.format(pathwext)) + + with open(pathwext, "wb") as fhl: + fhl.write(decodebytes(data.encode("utf-8"))) + + # absolute for making in-mem cycles work + node.set("xlink:href", os.path.realpath(pathwext)) + + +""" +Embed images so they are base64 encoded data inside the svg. +""" + +from inkex.localization import inkex_gettext as _ + +try: + import urllib.request as urllib + import urllib.parse as urlparse + from base64 import encodebytes +except ImportError: + # python2 compatibility, remove when python3 only. + import urllib + import urlparse + from base64 import encodestring as encodebytes + + +def embed_image(node, svg_dir): + """Embed the data of the selected Image Tag element""" + xlink = node.get("xlink:href") + if xlink is not None and xlink[:5] == "data:": + # No need, data already embedded + return + if xlink is None: + inkex.errormsg( + _('Attribute "xlink:href" not set on node {}.'.format(node.get_id())) + ) + return + + url = urlparse.urlparse(xlink) + href = urllib.url2pathname(url.path) + + # Primary location always the filename itself, we allow this + # call to search the user's home folder too. + path = absolute_href2(href or "", svg_dir) + + # Backup directory where we can find the image + if not os.path.isfile(path): + path = node.get("sodipodi:absref", path) + + if not os.path.isfile(path): + inkex.errormsg(_('File not found "{}". Unable to embed image.').format(path)) + return + + with open(path, "rb") as handle: + # Don't read the whole file to check the header + file_type = get_type(path, handle.read(10)) + handle.seek(0) + + if file_type: + # Future: Change encodestring to encodebytes when python3 only + node.set( + "xlink:href", + "data:{};base64,{}".format( + file_type, encodebytes(handle.read()).decode("ascii") + ), + ) + node.pop("sodipodi:absref") + else: + inkex.errormsg( + _( + "%s is not of type image/png, image/jpeg, " + "image/bmp, image/gif, image/tiff, or image/x-icon" + ) + % path + ) + + +def embed_external_image(el, filename): + """Embed the data of the selected Image Tag element""" + if filename is not None: + with open(filename, "rb") as handle: + # Don't read the whole file to check the header + file_type = get_type(filename, handle.read(10)) + handle.seek(0) + + if file_type: + # Future: Change encodestring to encodebytes when python3 only + el.set( + "xlink:href", + "data:{};base64,{}".format( + file_type, encodebytes(handle.read()).decode("ascii") + ), + ) + el.pop("sodipodi:absref") + else: + inkex.errormsg( + _( + "%s is not of type image/png, image/jpeg, " + "image/bmp, image/gif, image/tiff, or image/x-icon" + ) + % filename + ) + + +# Check if image is linked or embedded. If linked, check if path is valid +def check_linked(node, svg_dir): + """Embed the data of the selected Image Tag element""" + xlink = node.get("xlink:href") + if xlink is not None and xlink[:5] == "data:": + return False, None + url = urlparse.urlparse(xlink) + href = urllib.url2pathname(url.path) + path = absolute_href2(href or "", svg_dir) + if not os.path.isfile(path): + path = node.get("sodipodi:absref", path) + fileexists = os.path.isfile(path) + if not (fileexists): + return True, None + else: + return True, path + + +# Gets the type of an image element +def get_image_type(node, svg_dir): + xlink = node.get("xlink:href") + + if not xlink.startswith("data:"): + # Linked image + xlink = node.get("xlink:href") + if xlink is not None and xlink[:5] == "data:": + # No need, data already embedded + return None + if xlink is None: + print(_('Attribute "xlink:href" not set on node {}.'.format(node.get_id()))) + return None + + url = urlparse.urlparse(xlink) + href = urllib.url2pathname(url.path) + + # Primary location always the filename itself, we allow this + # call to search the user's home folder too. + path = absolute_href2(href or "", svg_dir) + + # Backup directory where we can find the image + if not os.path.isfile(path): + path = node.get("sodipodi:absref", path) + + if not os.path.isfile(path): + print(_('File not found "{}". Unable to embed image.').format(path)) + return None + + with open(path, "rb") as handle: + # Don't read the whole file to check the header + file_type = get_type(path, handle.read(10)) + return file_type + else: + try: + data = xlink[5:] + (mimetype, data) = data.split(";", 1) + (base, data) = data.split(",", 1) + except ValueError: + print("Invalid image format found") + return None + + if base != "base64": + print("Can't decode encoding: {}".format(base)) + return None + return mimetype + + +def get_type(path, header): + """Basic magic header checker, returns mime type""" + for head, mime in ( + (b"\x89PNG", "image/png"), + (b"\xff\xd8", "image/jpeg"), + (b"BM", "image/bmp"), + (b"GIF87a", "image/gif"), + (b"GIF89a", "image/gif"), + (b"MM\x00\x2a", "image/tiff"), + (b"II\x2a\x00", "image/tiff"), + ): + if header.startswith(head): + return mime + + # ico files lack any magic... therefore we check the filename instead + for ext, mime in ( + # official IANA registered MIME is 'image/vnd.microsoft.icon' tho + (".ico", "image/x-icon"), + (".svg", "image/svg+xml"), + ): + if path.endswith(ext): + return mime + return None + + +# if __name__ == '__main__': +# EmbedImage().run() + + +# Modification to the built-in absolute_href function that doesn't require an +# extension class +def absolute_href2(filename, svg_dir, default="~/"): + """ + Process the filename such that it's turned into an absolute filename + with the working directory being the directory of the loaded svg. + + User's home folder is also resolved. So '~/a.png` will be `/home/bob/a.png` + + Default is a fallback working directory to use if the svg's filename is not + available, if you set default to None, then the user will be given errors if + there's no working directory available from Inkscape. + """ + filename = os.path.expanduser(filename) + if not os.path.isabs(filename): + filename = os.path.expanduser(filename) + if not os.path.isabs(filename): + filename = os.path.join(svg_dir, filename) + return os.path.realpath(os.path.expanduser(filename)) + + +# Stuff by David Burghoff +try: + from PIL import Image as ImagePIL + + hasPIL = True +except: + hasPIL = False + +# def remove_alpha(imin): +# background = ImagePIL.new('RGBA', imin.size, (255,255,255)) +# alpha_composite = ImagePIL.alpha_composite(background, imin) +# alpha_composite_3 = alpha_composite.convert('RGB') +# return alpha_composite_3 + + +# def remove_alpha(imin, background): +# # background = ImagePIL.new('RGBA', imin.size, (255,255,255)) +# alpha_composite = ImagePIL.alpha_composite(background, imin) +# alpha_composite_3 = alpha_composite.convert("RGB") +# return alpha_composite_3 + +# Convert and crop transparent image to JPG +# Requires the transparent version (imin) as well as the opaque version (opaqueimin) +# def to_jpeg(imin, opaqueimin, imout): +# with ImagePIL.open(imin) as im: +# with ImagePIL.open(opaqueimin) as oim: +# bbox = im.getbbox() +# # # Composite to remove transparent regions +# # compim = remove_alpha(im, imb) + +# # Crop to non-transparent region only +# # left,upper,right,lower (left & upper pixel is non-zero corner, right-1 & lower-1 is non-zero corner) +# if bbox is not None: +# oim = oim.crop(bbox) +# bbox = [ +# bbox[0] / im.size[0], +# bbox[1] / im.size[1], +# bbox[2] / im.size[0], +# bbox[3] / im.size[1], +# ] +# # normalize to original size +# oim.convert('RGB').save(imout) +# return imout, bbox + + +def to_jpeg(imin, imout): + with ImagePIL.open(imin) as im: + im.convert("RGB").save(imout) + + +def crop_image(imin): + with ImagePIL.open(imin) as im: + bbox = im.getbbox() + # left,upper,right,lower (left & upper pixel is non-zero corner, right-1 & lower-1 is non-zero corner) + if bbox is not None: + cropim = im.crop(bbox) + bbox = [ + bbox[0] / im.size[0], + bbox[1] / im.size[1], + bbox[2] / im.size[0], + bbox[3] / im.size[1], + ] + # normalized to original size + cropim.save(imin) + return imin, bbox + + +# Extract an embedded image +def extract_image_simple(node, save_to_base): + """Extract the node as if it were an image.""" + xlink = node.get("xlink:href") + data = xlink[5:] + try: + data = xlink[5:] + (mimetype, data) = data.split(";", 1) + (base, data) = data.split(",", 1) + except ValueError: + return None + file_ext = mime_to_ext(mimetype) + pathwext = save_to_base + file_ext + # inkex.utils.debug(pathwext) + with open(pathwext, "wb") as fhl: + fhl.write(decodebytes(data.encode("utf-8"))) + return pathwext + + +# Get the size of an embedded image +def embedded_size(node): + xlink = node.get("xlink:href") + try: + data = xlink[5:] + (mimetype, data) = data.split(";", 1) + (base, data) = data.split(",", 1) + return len(decodebytes(data.encode("utf-8"))) + except (ValueError, TypeError): + return None + + +# Get the data string of an embedded image with the alpha stripped out +# This allows images to be identified after conversion to PDF +def Stripped_Alpha_String(el): + import tempfile + + tf = tempfile.NamedTemporaryFile().name + fullpath = extract_image_simple(el, tf) + + with ImagePIL.open(fullpath) as im: + newfile = strip_ext(fullpath) + ".png" + + return str(im.size) + + # im.convert('RGB').save(newfile) + + # with open(newfile, "rb") as handle: + # # Don't read the whole file to check the header + # file_type = get_type(newfile, handle.read(10)) + # handle.seek(0) + + # if file_type: + # return "data:{};base64,{}".format( + # file_type, encodebytes(handle.read()).decode("ascii")) + # return None + + +def Make_Data_Image(datastr): + data = [ord(c) for c in datastr] + # inkex.utils.debug(data) + import numpy as np + + im = ImagePIL.fromarray(np.array([data], dtype="uint8")) + + import tempfile + + tf = tempfile.NamedTemporaryFile().name + newfile = tf + ".png" + im.save(newfile) + + with open(newfile, "rb") as handle: + # Don't read the whole file to check the header + file_type = get_type(newfile, handle.read(10)) + handle.seek(0) + + if file_type: + return "data:{};base64,{}".format( + file_type, encodebytes(handle.read()).decode("ascii") + ) + return None + + +def Read_Data_Image(imstr): + data = imstr[5:] + (mimetype, data) = data.split(";", 1) + (base, data) = data.split(",", 1) + import io + + im = ImagePIL.open(io.BytesIO(decodebytes(data.encode("utf-8")))) + + import numpy as np + + npa = np.asarray(im) + if len(npa.shape) == 3: + data = npa[:, :, 0] + else: + data = npa + return "".join([chr(v) for v in list(data.ravel())]) + + +import io + + +def str_to_ImagePIL(imstr): + try: + data = imstr[5:] + (mimetype, data) = data.split(";", 1) + (base, data) = data.split(",", 1) + im = ImagePIL.open(io.BytesIO(decodebytes(data.encode("utf-8")))) + return im + except: + return None + + +def ImagePIL_to_str(im): + try: + img_byte_arr = io.BytesIO() + im.save(img_byte_arr, format="png") + vals = img_byte_arr.getvalue() + file_type = get_type(None, vals[0:10]) + if file_type: + return "data:{};base64,{}".format( + file_type, encodebytes(vals).decode("ascii") + ) + except: + return None + + +# Get just the alpha channel of an image, which can be turned into a mask +# def make_alpha_mask(fin,maskout): +# from PIL import Image, ImageOps +# with Image.open(fin) as im: +# (r,g,b,a)=im.split() +# # (r,g,b)=Image.new('RGB',im.size,'black').split() +# # nim = Image.merge('RGBA',(r,g,b,ImageOps.invert(a))) +# # (r,g,b)=Image.new('RGB',im.size,'black').split() +# nim = Image.merge('L',(a,)) +# nim.save(maskout) + +# # Get just the alpha channel of an image, which can be turned into a mask +# def make_rgb(fin,rgbout): +# from PIL import Image, ImageOps +# with Image.open(fin) as im: +# (r,g,b,a)=im.split() +# # (r,g,b)=Image.new('RGB',im.size,'black').split() +# # nim = Image.merge('RGBA',(r,g,b,ImageOps.invert(a))) +# # (r,g,b)=Image.new('RGB',im.size,'black').split() +# nim = Image.merge('RGB',(r,g,b)) +# nim.save(rgbout) + + +# Strips image extensions +def strip_ext(fnin): + # strip existing extension + if fnin[-4:].lower() in [".png", ".gif", "jpg", "tif"]: + fnin = fnin[0:-4] + if fnin[-5:].lower() in ["jpeg", "tiff"]: + fnin = fnin[0:-5] + return fnin + + +# Extracts embedded images or returns the path of linked ones +def extract_img_file(el, svg_dir, newpath): + islinked, validpath = check_linked(el, svg_dir) + if islinked and validpath is not None: + impath = validpath + madenew = False + elif islinked and validpath is None: + impath = None + madenew = False + else: + # inkex.utils.debug(newpath) + extract = extract_image_simple(el, strip_ext(newpath)) + if extract is not None: + impath = extract + madenew = True + else: + impath = None + madenew = False + return impath, islinked + + +# For images with alpha=0 pixels, set the RGB of those pixels based on another +# image. This is usually the same image with a background and with other objects. +# For those pixels, alpha is then set to 1 (out of 255), which prevents the PDF +# renderer from replacing those pixels with black. This avoids the 'gray ring' +# issue that can happen on PDF exports. +def Set_Alpha0_RGB(img, imgref): + im1 = ImagePIL.open(img).convert("RGBA") + im2 = ImagePIL.open(imgref).convert("RGBA") + import numpy as np + + d1 = np.asarray(im1) + d2 = np.asarray(im2) + a = d1[:, :, 3] + nd = np.stack( + ( + np.where(a == 0, d2[:, :, 0], d1[:, :, 0]), + np.where(a == 0, d2[:, :, 1], d1[:, :, 1]), + np.where(a == 0, d2[:, :, 2], d1[:, :, 2]), + np.where(a == 0, 1 * np.ones_like(a), a), + ), + 2, + ) + ImagePIL.fromarray(nd).save(img) + # inkex.utils.debug(img) + anyalpha0 = np.where(a == 0, True, False).any() + return anyalpha0 + + +# Crop a list of images based on the transparency of the first one +# Returns the normalized bounding box, which we need later +def crop_images(ims_in): + bbox = None + with ImagePIL.open(ims_in[0]) as ref_im: + bbox = ref_im.getbbox() + nsz = ref_im.size + + if bbox is not None: + # left,upper,right,lower (left & upper pixel is non-zero corner, right-1 & lower-1 is non-zero corner) + nbbox = [ + bbox[0] / nsz[0], + bbox[1] / nsz[1], + bbox[2] / nsz[0], + bbox[3] / nsz[1], + ] # normalize to original size + for imf in ims_in: + with ImagePIL.open(imf) as im: + im.crop(bbox).save(imf) + return nbbox + else: + return None + + +# Get the absolute locations of all linked images when called by an extension +# Needed because the temp file has a different location from the actual one +def get_linked_locations(slf): + llocations = dict() + images = slf.svg.xpath("//svg:image") + for node in images: + xlink = node.get("xlink:href") + if xlink is not None and xlink[:5] != "data:": + try: + import urllib.request as urllib + import urllib.parse as urlparse + except ImportError: + # python2 compatibility, remove when python3 only. + import urllib + import urlparse + + url = urlparse.urlparse(xlink) + href = urllib.url2pathname(url.path) + + # Look relative to the *temporary* filename instead of the original filename. + try: # v1.2 forward + path = slf.absolute_href( + href or "", cwd=os.path.dirname(slf.options.input_file) + ) + except: # pre-v1.2 + # Primary location always the filename itself, we allow this + # call to search the user's home folder too. + path = slf.absolute_href(href or "") + + # Backup directory where we can find the image + if not os.path.isfile(path): + path = node.get("sodipodi:absref", path) + + if os.path.isfile(path): + llocations[node.get_id()] = path + else: + llocations[node.get_id()] = None + return llocations + + +# Get the absolute locations of all linked images when the absolute path is known +def get_linked_locations_file(fin, svg): + llocations = dict() + images = svg.xpath("//svg:image") + for node in images: + xlink = node.get("xlink:href") + if xlink is not None and xlink[:5] != "data:": + try: + import urllib.request as urllib + import urllib.parse as urlparse + except ImportError: + # python2 compatibility, remove when python3 only. + import urllib + import urlparse + + url = urlparse.urlparse(xlink) + href = urllib.url2pathname(url.path) + + path = absolute_href2(href or "", os.path.dirname(fin)) + + # Backup directory where we can find the image + if not os.path.isfile(path): + path = node.get("sodipodi:absref", path) + + if os.path.isfile(path): + llocations[node.get_id()] = path + else: + llocations[node.get_id()] = None + return llocations diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/__init__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/__init__.py new file mode 100644 index 0000000..fa049ea --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/__init__.py @@ -0,0 +1,32 @@ +# coding=utf-8 +""" +This describes the core API for the inkex core modules. + +This provides the basis from which you can develop your inkscape extension. +""" + +# pylint: disable=wildcard-import +import sys + +from .extensions import * +from .utils import AbortExtension, DependencyError, Boolean, errormsg +from .styles import * +from .paths import Path, CubicSuperPath # Path commands are not exported +from .colors import * +from .transforms import * +from .elements import * + +# legacy proxies +from .deprecated import Effect +from .deprecated import localize +from .deprecated import debug + +# legacy functions +from .deprecated import are_near_relative +from .deprecated import unittouu + +MIN_VERSION = (3, 7) +if sys.version_info < MIN_VERSION: + sys.exit("Inkscape extensions require Python 3.7 or greater.") + +__version__ = "1.3.0" # Version number for inkex; may differ from Inkscape version. diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/base.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/base.py new file mode 100644 index 0000000..14de8b8 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/base.py @@ -0,0 +1,562 @@ +# coding=utf-8 +# +# Copyright (c) 2018 - Martin Owens +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +The ultimate base functionality for every Inkscape extension. +""" + +import io +import os +import re +import sys +import copy + +from typing import ( + Dict, + List, + Tuple, + Type, + Optional, + Callable, + Any, + Union, + IO, + TYPE_CHECKING, + cast, +) + +from argparse import ArgumentParser, Namespace +from lxml import etree + +from .interfaces.IElement import IBaseElement, ISVGDocumentElement +from .utils import filename_arg, AbortExtension, ABORT_STATUS, errormsg, do_nothing +from .elements._parser import load_svg +from .elements._utils import NSS +from .localization import localize + + +class InkscapeExtension: + """ + The base class extension, provides argument parsing and basic + variable handling features. + """ + + multi_inx = False # Set to true if this class is used by multiple inx files. + extra_nss = {} # type: Dict[str, str] + + # Provide a unique value to allow detection of no argument specified + # for `output` parameter of `run()`, not even `None`; this has to be an io + # type for type checking purposes: + output_unspecified = io.StringIO("") + + def __init__(self): + # type: () -> None + NSS.update(self.extra_nss) + self.file_io = None # type: Optional[IO] + self.options = Namespace() + self.document = None # type: Union[None, bytes, str, etree.element] + self.arg_parser = ArgumentParser(description=self.__doc__) + + self.arg_parser.add_argument( + "input_file", + nargs="?", + metavar="INPUT_FILE", + type=filename_arg, + help="Filename of the input file (default is stdin)", + default=None, + ) + + self.arg_parser.add_argument( + "--output", + type=str, + default=None, + help="Optional output filename for saving the result (default is stdout).", + ) + + self.add_arguments(self.arg_parser) + + localize() + + def add_arguments(self, pars): + # type: (ArgumentParser) -> None + """Add any extra arguments to your extension handle, use: + + def add_arguments(self, pars): + pars.add_argument("--num-cool-things", type=int, default=3) + pars.add_argument("--pos-in-doc", type=str, default="doobry") + """ + # No extra arguments by default so super is not required + + def parse_arguments(self, args): + # type: (List[str]) -> None + """Parse the given arguments and set 'self.options'""" + self.options = self.arg_parser.parse_args(args) + + def arg_method(self, prefix="method"): + # type: (str) -> Callable[[str], Callable[[Any], Any]] + """Used by add_argument to match a tab selection with an object method + + pars.add_argument("--tab", type=self.arg_method(), default="foo") + ... + self.options.tab(arguments) + ... + .. code-block:: python + .. def method_foo(self, arguments): + .. # do something + """ + + def _inner(value): + name = f"""{prefix}_{value.strip('"').lower()}""".replace("-", "_") + try: + return getattr(self, name) + except AttributeError as error: + if name.startswith("_"): + return do_nothing + raise AbortExtension(f"Can not find method {name}") from error + + return _inner + + @staticmethod + def arg_number_ranges(): + """Parses a number descriptor. e.g: + ``1,2,4-5,7,9-`` is parsed to ``1, 2, 4, 5, 7, 9, 10, ..., lastvalue`` + + .. versionadded:: 1.2 + + Usage: + + .. code-block:: python + + # in add_arguments() + pars.add_argument("--pages", type=self.arg_number_ranges(), default=1-) + # later on, pages is then a list of ints + pages = self.options.pages(lastvalue) + + """ + + def _inner(value): + def method(pages, lastvalue, startvalue=1): + # replace ranges, such as -3, 10- with startvalue,2,3,10..lastvalue + pages = re.sub( + r"(\d+|)\s?-\s?(\d+|)", + lambda m: ",".join( + map( + str, + range( + int(m.group(1) or startvalue), + int(m.group(2) or lastvalue) + 1, + ), + ) + ) + if not (m.group(1) or m.group(2)) == "" + else "", + pages, + ) + + pages = map(int, re.findall(r"(\d+)", pages)) + pages = tuple({i for i in pages if i <= lastvalue}) + return pages + + return lambda lastvalue, startvalue=1: method( + value, lastvalue, startvalue=startvalue + ) + + return _inner + + @staticmethod + def arg_class(options: List[Type]) -> Callable[[str], Any]: + """Used by add_argument to match an option with a class + + Types to choose from are given by the options list + + .. versionadded:: 1.2 + + Usage: + + .. code-block:: python + + pars.add_argument("--class", type=self.arg_class([ClassA, ClassB]), + default="ClassA") + """ + + def _inner(value: str): + name = value.strip('"') + for i in options: + if name == i.__name__: + return i + raise AbortExtension(f"Can not find class {name}") + + return _inner + + def debug(self, msg): + # type: (str) -> None + """Write a debug message""" + errormsg(f"DEBUG<{type(self).__name__}> {msg}\n") + + @staticmethod + def msg(msg): + # type: (str) -> None + """Write a non-error message""" + errormsg(msg) + + def run(self, args=None, output=output_unspecified): + # type: (Optional[List[str]], Union[str, IO]) -> None + """Main entrypoint for any Inkscape Extension""" + try: + if args is None: + args = sys.argv[1:] + + self.parse_arguments(args) + if self.options.input_file is None: + self.options.input_file = sys.stdin + elif "DOCUMENT_PATH" not in os.environ: + os.environ["DOCUMENT_PATH"] = self.options.input_file + + self.bin_stdout = None + if self.options.output is None: + # If no output was specified, attempt to extract a binary + # output from stdout, and if that doesn't seem possible, + # punt and try whatever stream stdout is: + if output is InkscapeExtension.output_unspecified: + output = sys.stdout + if "b" not in getattr(output, "mode", "") and not isinstance( + output, (io.RawIOBase, io.BufferedIOBase) + ): + if hasattr(output, "buffer"): + output = output.buffer # type: ignore + elif hasattr(output, "fileno"): + self.bin_stdout = os.fdopen( + output.fileno(), "wb", closefd=False + ) + output = self.bin_stdout + self.options.output = output + + self.load_raw() + self.save_raw(self.effect()) + except AbortExtension as err: + errormsg(str(err)) + sys.exit(ABORT_STATUS) + finally: + self.clean_up() + + def load_raw(self): + # type: () -> None + """Load the input stream or filename, save everything to self""" + if isinstance(self.options.input_file, str): + # pylint: disable=consider-using-with + self.file_io = open(self.options.input_file, "rb") + document = self.load(self.file_io) + else: + document = self.load(self.options.input_file) + self.document = document + + def save_raw(self, ret): + # type: (Any) -> None + """Save to the output stream, use everything from self""" + if self.has_changed(ret): + if isinstance(self.options.output, str): + with open(self.options.output, "wb") as stream: + self.save(stream) + else: + if sys.platform == "win32" and not "PYTEST_CURRENT_TEST" in os.environ: + # When calling an extension from within Inkscape on Windows, + # Python thinks that the output stream is seekable + # (https://gitlab.com/inkscape/inkscape/-/issues/3273) + self.options.output.seekable = lambda self: False + + def seek_replacement(offset: int, whence: int = 0): + raise AttributeError( + "We can't seek in the stream passed by Inkscape on Windows" + ) + + def tell_replacement(): + raise AttributeError( + "We can't tell in the stream passed by Inkscape on Windows" + ) + + # Some libraries (e.g. ZipFile) don't query seekable, but check for an error + # on seek + self.options.output.seek = seek_replacement + self.options.output.tell = tell_replacement + self.save(self.options.output) + + def load(self, stream): + # type: (IO) -> str + """Takes the input stream and creates a document for parsing""" + raise NotImplementedError(f"No input handle for {self.name}") + + def save(self, stream): + # type: (IO) -> None + """Save the given document to the output file""" + raise NotImplementedError(f"No output handle for {self.name}") + + def effect(self): + # type: () -> Any + """Apply some effects on the document or local context""" + raise NotImplementedError(f"No effect handle for {self.name}") + + def has_changed(self, ret): # pylint: disable=no-self-use + # type: (Any) -> bool + """Return true if the output should be saved""" + return ret is not False + + def clean_up(self): + # type: () -> None + """Clean up any open handles and other items""" + if hasattr(self, "bin_stdout"): + if self.bin_stdout is not None: + self.bin_stdout.close() + if self.file_io is not None: + self.file_io.close() + + @classmethod + def svg_path(cls, default=None): + # type: (Optional[str]) -> Optional[str] + """ + Return the folder the svg is contained in. + Returns None if there is no file. + + .. versionchanged:: 1.1 + A default path can be given which is returned in case no path to the + SVG file can be determined. + """ + path = cls.document_path() + if path: + return os.path.dirname(path) + if default: + return default + return path # Return None or '' for context + + @classmethod + def ext_path(cls): + # type: () -> str + """Return the folder the extension script is in""" + return os.path.dirname(sys.modules[cls.__module__].__file__ or "") + + @classmethod + def get_resource(cls, name, abort_on_fail=True): + # type: (str, bool) -> str + """Return the full filename of the resource in the extension's dir + + .. versionadded:: 1.1""" + filename = cls.absolute_href(name, cwd=cls.ext_path()) + if abort_on_fail and not os.path.isfile(filename): + raise AbortExtension(f"Could not find resource file: {filename}") + return filename + + @classmethod + def document_path(cls): + # type: () -> Optional[str] + """Returns the saved location of the document + + * Normal return is a string containing the saved location + * Empty string means the document was never saved + * 'None' means this version of Inkscape doesn't support DOCUMENT_PATH + + DO NOT READ OR WRITE TO THE DOCUMENT FILENAME! + + * Inkscape may have not written the latest changes, leaving you reading old + data. + * Inkscape will not respect anything you write to the file, causing data loss. + + .. versionadded:: 1.1 + """ + return os.environ.get("DOCUMENT_PATH", None) + + @classmethod + def absolute_href(cls, filename, default="~/", cwd=None): + # type: (str, str, Optional[str]) -> str + """ + Process the filename such that it's turned into an absolute filename + with the working directory being the directory of the loaded svg. + + User's home folder is also resolved. So '~/a.png` will be `/home/bob/a.png` + + Default is a fallback working directory to use if the svg's filename is not + available. + + .. versionchanged:: 1.1 + If you set default to None, then the user will be given errors if + there's no working directory available from Inkscape. + """ + filename = os.path.expanduser(filename) + if not os.path.isabs(filename): + filename = os.path.expanduser(filename) + if not os.path.isabs(filename): + if cwd is None: + cwd = cls.svg_path(default) + if cwd is None: + raise AbortExtension( + "Can not use relative path, Inkscape isn't telling us the " + "current working directory." + ) + if cwd == "": + raise AbortExtension( + "The SVG must be saved before you can use relative paths." + ) + filename = os.path.join(cwd, filename) + return os.path.realpath(os.path.expanduser(filename)) + + @property + def name(self): + # type: () -> str + """Return a fixed name for this extension""" + return type(self).__name__ + + +if TYPE_CHECKING: + _Base = InkscapeExtension +else: + _Base = object + + +class TempDirMixin(_Base): # pylint: disable=abstract-method + """ + Provide a temporary directory for extensions to stash files. + """ + + dir_suffix = "" + dir_prefix = "inktmp" + + def __init__(self, *args, **kwargs): + self.tempdir = None + self._tempdir = None + super().__init__(*args, **kwargs) + + def load_raw(self): + # type: () -> None + """Create the temporary directory""" + # pylint: disable=import-outside-toplevel + from tempfile import TemporaryDirectory + + # Need to hold a reference to the Directory object or else it might get GC'd + self._tempdir = TemporaryDirectory( # pylint: disable=consider-using-with + prefix=self.dir_prefix, suffix=self.dir_suffix + ) + self.tempdir = os.path.realpath(self._tempdir.name) + super().load_raw() + + def clean_up(self): + # type: () -> None + """Delete the temporary directory""" + self.tempdir = None + # if the file does not exist, _tempdir is never set. + if self._tempdir is not None: + self._tempdir.cleanup() + super().clean_up() + + +class SvgInputMixin(_Base): # pylint: disable=too-few-public-methods, abstract-method + """ + Expects the file input to be an svg document and will parse it. + """ + + # Select all objects if none are selected + select_all: Tuple[Type[IBaseElement], ...] = () + + def __init__(self): + super().__init__() + + self.arg_parser.add_argument( + "--id", + action="append", + type=str, + dest="ids", + default=[], + help="id attribute of object to manipulate", + ) + + self.arg_parser.add_argument( + "--selected-nodes", + action="append", + type=str, + dest="selected_nodes", + default=[], + help="id:subpath:position of selected nodes, if any", + ) + + def load(self, stream): + # type: (IO) -> etree + """Load the stream as an svg xml etree and make a backup""" + document = load_svg(stream) + self.original_document = copy.deepcopy(document) + self.svg: ISVGDocumentElement = document.getroot() + self.svg.selection.set(*self.options.ids) + if not self.svg.selection and self.select_all: + self.svg.selection = self.svg.descendants().filter(*self.select_all) + return document + + +class SvgOutputMixin(_Base): # pylint: disable=too-few-public-methods, abstract-method + """ + Expects the output document to be an svg document and will write an etree xml. + + A template can be specified to kick off the svg document building process. + """ + + template = """ + """ + + @classmethod + def get_template(cls, **kwargs): + """ + Opens a template svg document for building, the kwargs + MUST include all the replacement values in the template, the + default template has 'width' and 'height' of the document. + """ + kwargs.setdefault("unit", "") + return load_svg(str(cls.template.format(**kwargs))) + + def save(self, stream): + # type: (IO) -> None + """Save the svg document to the given stream""" + if isinstance(self.document, (bytes, str)): + document = self.document + elif "Element" in type(self.document).__name__: + # isinstance can't be used here because etree is broken + doc = cast(etree, self.document) + document = doc.getroot().tostring() + else: + raise ValueError( + f"Unknown type of document: {type(self.document).__name__} can not" + + "save." + ) + + try: + stream.write(document) + except TypeError: + # we hope that this happens only when document needs to be encoded + stream.write(document.encode("utf-8")) # type: ignore + + +class SvgThroughMixin(SvgInputMixin, SvgOutputMixin): # pylint: disable=abstract-method + """ + Combine the input and output svg document handling (usually for effects). + """ + + def has_changed(self, ret): # pylint: disable=unused-argument + # type: (Any) -> bool + """Return true if the svg document has changed""" + original = etree.tostring(self.original_document) + result = etree.tostring(self.document) + return original != result diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/bezier.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/bezier.py new file mode 100644 index 0000000..976fdab --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/bezier.py @@ -0,0 +1,488 @@ +# coding=utf-8 +# +# Copyright (C) 2010 Nick Drobchenko, nick@cnc-club.ru +# Copyright (C) 2005 Aaron Spike, aaron@ekips.org +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# pylint: disable=invalid-name,too-many-locals +# +""" +Bezier calculations +""" + +import cmath +import math + +import numpy + +from .transforms import DirectedLineSegment +from .localization import inkex_gettext as _ + +# bez = ((bx0,by0),(bx1,by1),(bx2,by2),(bx3,by3)) + + +def pointdistance(point_a, point_b): + """The straight line distance between two points""" + return math.sqrt( + ((point_b[0] - point_a[0]) ** 2) + ((point_b[1] - point_a[1]) ** 2) + ) + + +def between_point(point_a, point_b, time=0.5): + """Returns the point between point a and point b""" + return point_a[0] + time * (point_b[0] - point_a[0]), point_a[1] + time * ( + point_b[1] - point_a[1] + ) + + +def percent_point(point_a, point_b, percent=50.0): + """Returns between_point but takes percent instead of 0.0-1.0""" + return between_point(point_a, point_b, percent / 100.0) + + +def root_wrapper(root_a, root_b, root_c, root_d): + """Get the Cubic function, moic formular of roots, simple root""" + if root_a: + # Monics formula, see + # http://en.wikipedia.org/wiki/Cubic_function#Monic_formula_of_roots + mono_a, mono_b, mono_c = (root_b / root_a, root_c / root_a, root_d / root_a) + m = 2.0 * mono_a**3 - 9.0 * mono_a * mono_b + 27.0 * mono_c + k = mono_a**2 - 3.0 * mono_b + n = m**2 - 4.0 * k**3 + w1 = -0.5 + 0.5 * cmath.sqrt(-3.0) + w2 = -0.5 - 0.5 * cmath.sqrt(-3.0) + if n < 0: + m1 = pow(complex((m + cmath.sqrt(n)) / 2), 1.0 / 3) + n1 = pow(complex((m - cmath.sqrt(n)) / 2), 1.0 / 3) + else: + if m + math.sqrt(n) < 0: + m1 = -pow(-(m + math.sqrt(n)) / 2, 1.0 / 3) + else: + m1 = pow((m + math.sqrt(n)) / 2, 1.0 / 3) + if m - math.sqrt(n) < 0: + n1 = -pow(-(m - math.sqrt(n)) / 2, 1.0 / 3) + else: + n1 = pow((m - math.sqrt(n)) / 2, 1.0 / 3) + return ( + -1.0 / 3 * (mono_a + m1 + n1), + -1.0 / 3 * (mono_a + w1 * m1 + w2 * n1), + -1.0 / 3 * (mono_a + w2 * m1 + w1 * n1), + ) + if root_b: + det = root_c**2.0 - 4.0 * root_b * root_d + if det: + return ( + (-root_c + cmath.sqrt(det)) / (2.0 * root_b), + (-root_c - cmath.sqrt(det)) / (2.0 * root_b), + ) + return (-root_c / (2.0 * root_b),) + if root_c: + return (1.0 * (-root_d / root_c),) + return () + + +def bezlenapprx(sp1, sp2): + """Return the aproximate length between two beziers""" + return ( + pointdistance(sp1[1], sp1[2]) + + pointdistance(sp1[2], sp2[0]) + + pointdistance(sp2[0], sp2[1]) + ) + + +def cspbezsplit(sp1, sp2, time=0.5): + """Split a cubic bezier at the time period""" + m1 = tpoint(sp1[1], sp1[2], time) + m2 = tpoint(sp1[2], sp2[0], time) + m3 = tpoint(sp2[0], sp2[1], time) + m4 = tpoint(m1, m2, time) + m5 = tpoint(m2, m3, time) + m = tpoint(m4, m5, time) + return [[sp1[0][:], sp1[1][:], m1], [m4, m, m5], [m3, sp2[1][:], sp2[2][:]]] + + +def cspbezsplitatlength(sp1, sp2, length=0.5, tolerance=0.001): + """Split a cubic bezier at length""" + bez = (sp1[1][:], sp1[2][:], sp2[0][:], sp2[1][:]) + time = beziertatlength(bez, length, tolerance) + return cspbezsplit(sp1, sp2, time) + + +def cspseglength(sp1, sp2, tolerance=0.001): + """Get cubic bezier segment length""" + bez = (sp1[1][:], sp1[2][:], sp2[0][:], sp2[1][:]) + return bezierlength(bez, tolerance) + + +def csplength(csp): + """Get cubic bezier length""" + total = 0 + lengths = [] + for sp in csp: + lengths.append([]) + for i in range(1, len(sp)): + l = cspseglength(sp[i - 1], sp[i]) + lengths[-1].append(l) + total += l + return lengths, total + + +def bezierparameterize(bez): + """Return the bezier parameter size + Converts the bezier parametrisation from the default form + P(t) = (1-t)³ P_1 + 3(1-t)²t P_2 + 3(1-t)t² P_3 + t³ x_4 + to the a form which can be differentiated more easily + P(t) = a t³ + b t² + c t + P0 + + Args: + bez (List[Tuple[float, float]]): the Bezier curve. The elements of the list the + coordinates of the points (in this order): Start point, Start control point, + End control point, End point. + + Returns: + Tuple[float, float, float, float, float, float, float, float]: + the values ax, ay, bx, by, cx, cy, x0, y0 + """ + ((bx0, by0), (bx1, by1), (bx2, by2), (bx3, by3)) = bez + # parametric bezier + x0 = bx0 + y0 = by0 + cx = 3 * (bx1 - x0) + bx = 3 * (bx2 - bx1) - cx + ax = bx3 - x0 - cx - bx + cy = 3 * (by1 - y0) + by = 3 * (by2 - by1) - cy + ay = by3 - y0 - cy - by + + return ax, ay, bx, by, cx, cy, x0, y0 + + +def linebezierintersect(arg_a, bez): + """Where a line and bezier intersect""" + ((lx1, ly1), (lx2, ly2)) = arg_a + # parametric line + dd = lx1 + cc = lx2 - lx1 + bb = ly1 + aa = ly2 - ly1 + + if aa: + coef1 = cc / aa + coef2 = 1 + else: + coef1 = 1 + coef2 = aa / cc + + ax, ay, bx, by, cx, cy, x0, y0 = bezierparameterize(bez) + # cubic intersection coefficients + a = coef1 * ay - coef2 * ax + b = coef1 * by - coef2 * bx + c = coef1 * cy - coef2 * cx + d = coef1 * (y0 - bb) - coef2 * (x0 - dd) + + roots = root_wrapper(a, b, c, d) + retval = [] + for i in roots: + if isinstance(i, complex) and i.imag == 0: + i = i.real + if not isinstance(i, complex) and 0 <= i <= 1: + retval.append(bezierpointatt(bez, i)) + return retval + + +def bezierpointatt(bez, t): + """Get coords at the given time point along a bezier curve""" + ax, ay, bx, by, cx, cy, x0, y0 = bezierparameterize(bez) + x = ax * (t**3) + bx * (t**2) + cx * t + x0 + y = ay * (t**3) + by * (t**2) + cy * t + y0 + return x, y + + +def bezierslopeatt(bez, t): + """Get slope at the given time point along a bezier curve + The slope is computed as (dx, dy) where dx = df_x(t)/dt and dy = df_y(t)/dt. + Note that for lines P1=P2 and P3=P4, so the slope at the end points is dx=dy=0 + (slope not defined). + + Args: + bez (List[Tuple[float, float]]): the Bezier curve. The elements of the list the + coordinates of the points (in this order): Start point, Start control point, + End control point, End point. + t (float): time in the interval [0, 1] + + Returns: + Tuple[float, float]: x and y increment + """ + ax, ay, bx, by, cx, cy, _, _ = bezierparameterize(bez) + dx = 3 * ax * (t**2) + 2 * bx * t + cx + dy = 3 * ay * (t**2) + 2 * by * t + cy + return dx, dy + + +def beziertatslope(bez, d): + """Reverse; get time from slope along a bezier curve""" + ax, ay, bx, by, cx, cy, _, _ = bezierparameterize(bez) + (dy, dx) = d + # quadratic coefficients of slope formula + if dx: + slope = 1.0 * (dy / dx) + a = 3 * ay - 3 * ax * slope + b = 2 * by - 2 * bx * slope + c = cy - cx * slope + elif dy: + slope = 1.0 * (dx / dy) + a = 3 * ax - 3 * ay * slope + b = 2 * bx - 2 * by * slope + c = cx - cy * slope + else: + return [] + + roots = root_wrapper(0, a, b, c) + retval = [] + for i in roots: + if isinstance(i, complex) and i.imag == 0: + i = i.real + if not isinstance(i, complex) and 0 <= i <= 1: + retval.append(i) + return retval + + +def tpoint(p1, p2, t): + """Linearly interpolate between p1 and p2. + + t = 0.0 returns p1, t = 1.0 returns p2. + + :return: Interpolated point + :rtype: tuple + + :param p1: First point as sequence of two floats + :param p2: Second point as sequence of two floats + :param t: Number between 0.0 and 1.0 + :type t: float + """ + x1, y1 = p1 + x2, y2 = p2 + return x1 + t * (x2 - x1), y1 + t * (y2 - y1) + + +def beziersplitatt(bez, t): + """Split bezier at given time""" + ((bx0, by0), (bx1, by1), (bx2, by2), (bx3, by3)) = bez + m1 = tpoint((bx0, by0), (bx1, by1), t) + m2 = tpoint((bx1, by1), (bx2, by2), t) + m3 = tpoint((bx2, by2), (bx3, by3), t) + m4 = tpoint(m1, m2, t) + m5 = tpoint(m2, m3, t) + m = tpoint(m4, m5, t) + + return ((bx0, by0), m1, m4, m), (m, m5, m3, (bx3, by3)) + + +def addifclose(bez, l, error=0.001): + """Gravesen, Add if the line is closed, in-place addition to array l""" + box = 0 + for i in range(1, 4): + box += pointdistance(bez[i - 1], bez[i]) + chord = pointdistance(bez[0], bez[3]) + if (box - chord) > error: + first, second = beziersplitatt(bez, 0.5) + addifclose(first, l, error) + addifclose(second, l, error) + else: + l[0] += (box / 2.0) + (chord / 2.0) + + +# balfax, balfbx, balfcx, balfay, balfby, balfcy = 0, 0, 0, 0, 0, 0 + + +def balf(t, args): + """Bezier Arc Length Function""" + ax, bx, cx, ay, by, cy = args + retval = (ax * (t**2) + bx * t + cx) ** 2 + (ay * (t**2) + by * t + cy) ** 2 + return math.sqrt(retval) + + +def simpson(start, end, maxiter, tolerance, bezier_args): + """Calculate the length of a bezier curve using Simpson's algorithm: + http://steve.hollasch.net/cgindex/curves/cbezarclen.html + + Args: + start (int): Start time (between 0 and 1) + end (int): End time (between start time and 1) + maxiter (int): Maximum number of iterations. If not a power of 2, the algorithm + will behave like the value is set to the next power of 2. + tolerance (float): maximum error ratio + bezier_args (list): arguments as computed by bezierparametrize() + + Returns: + float: the appoximate length of the bezier curve + """ + + n = 2 + multiplier = (end - start) / 6.0 + endsum = balf(start, bezier_args) + balf(end, bezier_args) + interval = (end - start) / 2.0 + asum = 0.0 + bsum = balf(start + interval, bezier_args) + est1 = multiplier * (endsum + (2.0 * asum) + (4.0 * bsum)) + est0 = 2.0 * est1 + # print(multiplier, endsum, interval, asum, bsum, est1, est0) + while n < maxiter and abs(est1 - est0) > tolerance: + n *= 2 + multiplier /= 2.0 + interval /= 2.0 + asum += bsum + bsum = 0.0 + est0 = est1 + for i in range(1, n, 2): + bsum += balf(start + (i * interval), bezier_args) + est1 = multiplier * (endsum + (2.0 * asum) + (4.0 * bsum)) + # print(multiplier, endsum, interval, asum, bsum, est1, est0) + return est1 + + +def bezierlength(bez, tolerance=0.001, time=1.0): + """Get length of bezier curve""" + ax, ay, bx, by, cx, cy, _, _ = bezierparameterize(bez) + return simpson(0.0, time, 4096, tolerance, [3 * ax, 2 * bx, cx, 3 * ay, 2 * by, cy]) + + +def beziertatlength(bez, l=0.5, tolerance=0.001): + """Get bezier curve time at the length specified""" + curlen = bezierlength(bez, tolerance, 1.0) + time = 1.0 + tdiv = time + targetlen = l * curlen + diff = curlen - targetlen + while abs(diff) > tolerance: + tdiv /= 2.0 + if diff < 0: + time += tdiv + else: + time -= tdiv + curlen = bezierlength(bez, tolerance, time) + diff = curlen - targetlen + return time + + +def maxdist(bez): + """Get maximum distance within bezier curve""" + seg = DirectedLineSegment(bez[0], bez[3]) + return max(seg.distance_to_point(*bez[1]), seg.distance_to_point(*bez[2])) + + +def cspsubdiv(csp, flat): + """Sub-divide cubic sub-paths""" + for sp in csp: + subdiv(sp, flat) + + +def subdiv(sp, flat, i=1): + """sub divide bezier curve""" + while i < len(sp): + p0 = sp[i - 1][1] + p1 = sp[i - 1][2] + p2 = sp[i][0] + p3 = sp[i][1] + + bez = (p0, p1, p2, p3) + mdist = maxdist(bez) + if mdist <= flat: + i += 1 + else: + one, two = beziersplitatt(bez, 0.5) + sp[i - 1][2] = one[1] + sp[i][0] = two[2] + p = [one[2], one[3], two[1]] + sp[i:1] = [p] + + +def csparea(csp): + """Get area in cubic sub-path""" + MAT_AREA = numpy.array( + [[0, 2, 1, -3], [-2, 0, 1, 1], [-1, -1, 0, 2], [3, -1, -2, 0]] + ) + area = 0.0 + for sp in csp: + if len(sp) < 2: + continue + for x, coord in enumerate(sp): # calculate polygon area + area += 0.5 * sp[x - 1][1][0] * (coord[1][1] - sp[x - 2][1][1]) + for i in range(1, len(sp)): # add contribution from cubic Bezier + vec_x = numpy.array( + [sp[i - 1][1][0], sp[i - 1][2][0], sp[i][0][0], sp[i][1][0]] + ) + vec_y = numpy.array( + [sp[i - 1][1][1], sp[i - 1][2][1], sp[i][0][1], sp[i][1][1]] + ) + vex = numpy.matmul(vec_x, MAT_AREA) + area += 0.15 * numpy.matmul(vex, vec_y.T) + return -area + + +def cspcofm(csp): + """Get cubic sub-path coefficient""" + MAT_COFM_0 = numpy.array( + [[0, 35, 10, -45], [-35, 0, 12, 23], [-10, -12, 0, 22], [45, -23, -22, 0]] + ) + + MAT_COFM_1 = numpy.array( + [[0, 15, 3, -18], [-15, 0, 9, 6], [-3, -9, 0, 12], [18, -6, -12, 0]] + ) + + MAT_COFM_2 = numpy.array( + [[0, 12, 6, -18], [-12, 0, 9, 3], [-6, -9, 0, 15], [18, -3, -15, 0]] + ) + + MAT_COFM_3 = numpy.array( + [[0, 22, 23, -45], [-22, 0, 12, 10], [-23, -12, 0, 35], [45, -10, -35, 0]] + ) + area = csparea(csp) + xc = 0.0 + yc = 0.0 + if abs(area) < 1.0e-8: + raise ValueError(_("Area is zero, cannot calculate Center of Mass")) + for sp in csp: + for x, coord in enumerate(sp): # calculate polygon moment + xc += ( + sp[x - 1][1][1] + * (sp[x - 2][1][0] - coord[1][0]) + * (sp[x - 2][1][0] + sp[x - 1][1][0] + coord[1][0]) + / 6 + ) + yc += ( + sp[x - 1][1][0] + * (coord[1][1] - sp[x - 2][1][1]) + * (sp[x - 2][1][1] + sp[x - 1][1][1] + coord[1][1]) + / 6 + ) + for i in range(1, len(sp)): # add contribution from cubic Bezier + vec_x = numpy.array( + [sp[i - 1][1][0], sp[i - 1][2][0], sp[i][0][0], sp[i][1][0]] + ) + vec_y = numpy.array( + [sp[i - 1][1][1], sp[i - 1][2][1], sp[i][0][1], sp[i][1][1]] + ) + + def _mul(MAT, vec_x=vec_x, vec_y=vec_y): + return numpy.matmul(numpy.matmul(vec_x, MAT), vec_y.T) + + vec_t = numpy.array( + [_mul(MAT_COFM_0), _mul(MAT_COFM_1), _mul(MAT_COFM_2), _mul(MAT_COFM_3)] + ) + xc += numpy.matmul(vec_x, vec_t.T) / 280 + yc += numpy.matmul(vec_y, vec_t.T) / 280 + return -xc / area, -yc / area diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/colors.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/colors.py new file mode 100644 index 0000000..637522f --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/colors.py @@ -0,0 +1,535 @@ +# coding=utf-8 +# +# Copyright (C) 2006 Jos Hirth, kaioa.com +# Copyright (C) 2007 Aaron C. Spike +# Copyright (C) 2009 Monash University +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Basic color controls +""" + + +# All the names that get added to the inkex API itself. +__all__ = ("Color", "ColorError", "ColorIdError") + +SVG_COLOR = { + "aliceblue": "#f0f8ff", + "antiquewhite": "#faebd7", + "aqua": "#00ffff", + "aquamarine": "#7fffd4", + "azure": "#f0ffff", + "beige": "#f5f5dc", + "bisque": "#ffe4c4", + "black": "#000000", + "blanchedalmond": "#ffebcd", + "blue": "#0000ff", + "blueviolet": "#8a2be2", + "brown": "#a52a2a", + "burlywood": "#deb887", + "cadetblue": "#5f9ea0", + "chartreuse": "#7fff00", + "chocolate": "#d2691e", + "coral": "#ff7f50", + "cornflowerblue": "#6495ed", + "cornsilk": "#fff8dc", + "crimson": "#dc143c", + "cyan": "#00ffff", + "darkblue": "#00008b", + "darkcyan": "#008b8b", + "darkgoldenrod": "#b8860b", + "darkgray": "#a9a9a9", + "darkgreen": "#006400", + "darkgrey": "#a9a9a9", + "darkkhaki": "#bdb76b", + "darkmagenta": "#8b008b", + "darkolivegreen": "#556b2f", + "darkorange": "#ff8c00", + "darkorchid": "#9932cc", + "darkred": "#8b0000", + "darksalmon": "#e9967a", + "darkseagreen": "#8fbc8f", + "darkslateblue": "#483d8b", + "darkslategray": "#2f4f4f", + "darkslategrey": "#2f4f4f", + "darkturquoise": "#00ced1", + "darkviolet": "#9400d3", + "deeppink": "#ff1493", + "deepskyblue": "#00bfff", + "dimgray": "#696969", + "dimgrey": "#696969", + "dodgerblue": "#1e90ff", + "firebrick": "#b22222", + "floralwhite": "#fffaf0", + "forestgreen": "#228b22", + "fuchsia": "#ff00ff", + "gainsboro": "#dcdcdc", + "ghostwhite": "#f8f8ff", + "gold": "#ffd700", + "goldenrod": "#daa520", + "gray": "#808080", + "grey": "#808080", + "green": "#008000", + "greenyellow": "#adff2f", + "honeydew": "#f0fff0", + "hotpink": "#ff69b4", + "indianred": "#cd5c5c", + "indigo": "#4b0082", + "ivory": "#fffff0", + "khaki": "#f0e68c", + "lavender": "#e6e6fa", + "lavenderblush": "#fff0f5", + "lawngreen": "#7cfc00", + "lemonchiffon": "#fffacd", + "lightblue": "#add8e6", + "lightcoral": "#f08080", + "lightcyan": "#e0ffff", + "lightgoldenrodyellow": "#fafad2", + "lightgray": "#d3d3d3", + "lightgreen": "#90ee90", + "lightgrey": "#d3d3d3", + "lightpink": "#ffb6c1", + "lightsalmon": "#ffa07a", + "lightseagreen": "#20b2aa", + "lightskyblue": "#87cefa", + "lightslategray": "#778899", + "lightslategrey": "#778899", + "lightsteelblue": "#b0c4de", + "lightyellow": "#ffffe0", + "lime": "#00ff00", + "limegreen": "#32cd32", + "linen": "#faf0e6", + "magenta": "#ff00ff", + "maroon": "#800000", + "mediumaquamarine": "#66cdaa", + "mediumblue": "#0000cd", + "mediumorchid": "#ba55d3", + "mediumpurple": "#9370db", + "mediumseagreen": "#3cb371", + "mediumslateblue": "#7b68ee", + "mediumspringgreen": "#00fa9a", + "mediumturquoise": "#48d1cc", + "mediumvioletred": "#c71585", + "midnightblue": "#191970", + "mintcream": "#f5fffa", + "mistyrose": "#ffe4e1", + "moccasin": "#ffe4b5", + "navajowhite": "#ffdead", + "navy": "#000080", + "oldlace": "#fdf5e6", + "olive": "#808000", + "olivedrab": "#6b8e23", + "orange": "#ffa500", + "orangered": "#ff4500", + "orchid": "#da70d6", + "palegoldenrod": "#eee8aa", + "palegreen": "#98fb98", + "paleturquoise": "#afeeee", + "palevioletred": "#db7093", + "papayawhip": "#ffefd5", + "peachpuff": "#ffdab9", + "peru": "#cd853f", + "pink": "#ffc0cb", + "plum": "#dda0dd", + "powderblue": "#b0e0e6", + "purple": "#800080", + "rebeccapurple": "#663399", + "red": "#ff0000", + "rosybrown": "#bc8f8f", + "royalblue": "#4169e1", + "saddlebrown": "#8b4513", + "salmon": "#fa8072", + "sandybrown": "#f4a460", + "seagreen": "#2e8b57", + "seashell": "#fff5ee", + "sienna": "#a0522d", + "silver": "#c0c0c0", + "skyblue": "#87ceeb", + "slateblue": "#6a5acd", + "slategray": "#708090", + "slategrey": "#708090", + "snow": "#fffafa", + "springgreen": "#00ff7f", + "steelblue": "#4682b4", + "tan": "#d2b48c", + "teal": "#008080", + "thistle": "#d8bfd8", + "tomato": "#ff6347", + "turquoise": "#40e0d0", + "violet": "#ee82ee", + "wheat": "#f5deb3", + "white": "#ffffff", + "whitesmoke": "#f5f5f5", + "yellow": "#ffff00", + "yellowgreen": "#9acd32", + "none": None, +} +COLOR_SVG = {value: name for name, value in SVG_COLOR.items()} + + +def is_color(color): + """Determine if it is a color that we can use. If not, leave it unchanged.""" + try: + return bool(Color(color)) + except ColorError: + return False + + +def constrain(minim, value, maxim, channel): + """Returns the value so long as it is between min and max values""" + if channel == "h": # Hue + return value % maxim # Wrap around hue value + return min([maxim, max([minim, value])]) + + +class ColorError(KeyError): + """Specific color parsing error""" + + +class ColorIdError(ColorError): + """Special color error for gradient and color stop ids""" + + +class Color(list): + """An RGB array for the color + + Can be constructed from valid CSS color attributes, as well as + tuple/list + color space. Percentage values are supported. + + .. versionchanged:: 1.2 + Clarification with respect to values denoting unity: For RGB color channels, + "1.0", 1.0 and "100%" are treated as 255, while "1" and 1 are treated as 1. + + """ + + red = property( + lambda self: self.to_rgb()[0], lambda self, value: self._set(0, value) + ) + green = property( + lambda self: self.to_rgb()[1], lambda self, value: self._set(1, value) + ) + blue = property( + lambda self: self.to_rgb()[2], lambda self, value: self._set(2, value) + ) + alpha = property( + lambda self: self.to_rgba()[3], + lambda self, value: self._set(3, value, ("rgba",)), + ) + hue = property( + lambda self: self.to_hsl()[0], lambda self, value: self._set(0, value, ("hsl",)) + ) + saturation = property( + lambda self: self.to_hsl()[1], lambda self, value: self._set(1, value, ("hsl",)) + ) + lightness = property( + lambda self: self.to_hsl()[2], lambda self, value: self._set(2, value, ("hsl",)) + ) + + def __init__(self, color=None, space="rgb"): + super().__init__() + if isinstance(color, Color): + space, color = color.space, list(color) + + if isinstance(color, str): + # String from xml or css attributes + space, color = self.parse_str(color.strip()) + + if isinstance(color, int): + # Number from arg parser colour value + space, color = self.parse_int(color) + + # Empty list means 'none', or no color + if color is None: + color = [] + + if not isinstance(color, (list, tuple)): + raise ColorError("Not a known a color value") + + self.space = space + try: + for val in color: + self.append(val) + except ValueError as error: + raise ColorError("Bad color list") from error + + def __hash__(self): + """Allow colors to be hashable""" + return tuple(self.to_rgba()).__hash__() + + def _set(self, index, value, spaces=("rgb", "rgba")): + """Set the color value in place, limits setter to specific color space""" + # Named colors are just rgb, so dump name memory + if self.space == "named": + self.space = "rgb" + if not self.space in spaces: + if index == 3 and self.space == "rgb": + # Special, add alpha, don't convert back to rgb + self.space = "rgba" + self.append(constrain(0.0, float(value), 1.0, "a")) + return + # Set in other colour space and convert back and forth + target = self.to(spaces[0]) + target[index] = constrain(0, int(value), 255, spaces[0][index]) + self[:] = target.to(self.space) + return + self[index] = constrain(0, int(value), 255, spaces[0][index]) + + def append(self, val): + """Append a value to the local list""" + if len(self) == len(self.space): + raise ValueError("Can't add any more values to color.") + + if isinstance(val, str): + val = val.strip() + if val.endswith("%"): + val = float(val.strip("%")) / 100 + elif "." in val: + val = float(val) + else: + val = int(val) + + end_type = int + if len(self) == 3: # Alpha value + val = min([1.0, val]) + end_type = float + elif isinstance(val, float) and val <= 1.0: + val *= 255 + + if isinstance(val, (int, float)): + super().append(max(end_type(val), 0)) + + @staticmethod + def parse_str(color): + """Creates a rgb int array""" + # Handle pre-defined svg color values + if color and color.lower() in SVG_COLOR: + return "named", Color.parse_str(SVG_COLOR[color.lower()])[1] + + if color is None: + return "rgb", None + + if color.startswith("url("): + raise ColorIdError("Color references other element id, e.g. a gradient") + + # Next handle short colors (css: #abc -> #aabbcc) + if color.startswith("#"): + # Remove any icc or ilab directives + # FUTURE: We could use icc or ilab information + col = color.split(" ")[0] + if len(col) == 4: + # pylint: disable=consider-using-f-string + col = "#{1}{1}{2}{2}{3}{3}".format(*col) + + # Convert hex to integers + try: + return "rgb", (int(col[1:3], 16), int(col[3:5], 16), int(col[5:], 16)) + except ValueError as error: + raise ColorError(f"Bad RGB hex color value {col}") from error + + # Handle other css color values + elif "(" in color and ")" in color: + space, values = color.lower().strip().strip(")").split("(") + return space, values.split(",") + + try: + return Color.parse_int(int(color)) + except ValueError: + pass + + raise ColorError(f"Unknown color format: {color}") + + @staticmethod + def parse_int(color): + """Creates an rgb or rgba from a long int""" + space = "rgb" + color = [ + ((color >> 24) & 255), # red + ((color >> 16) & 255), # green + ((color >> 8) & 255), # blue + ((color & 255) / 255.0), # opacity + ] + if color[-1] == 1.0: + color.pop() + else: + space = "rgba" + return space, color + + def __str__(self): + """int array to #rrggbb""" + # pylint: disable=consider-using-f-string + if not self: + return "none" + if self.space == "named": + rgbhex = "#{0:02x}{1:02x}{2:02x}".format(*self) + if rgbhex in COLOR_SVG: + return COLOR_SVG[rgbhex] + self.space = "rgb" + if self.space == "rgb": + return "#{0:02x}{1:02x}{2:02x}".format(*self) + if self.space == "rgba": + if self[3] == 1.0: + return "rgb({:g}, {:g}, {:g})".format(*self[:3]) + return "rgba({:g}, {:g}, {:g}, {:g})".format(*self) + if self.space == "hsl": + return "hsl({0:g}, {1:g}, {2:g})".format(*self) + raise ColorError(f"Can't print colour space '{self.space}'") + + def __int__(self): + """int array to large integer""" + if not self: + return -1 + color = self.to_rgba() + return ( + (color[0] << 24) + + (color[1] << 16) + + (color[2] << 8) + + (int(color[3] * 255)) + ) + + def to(self, space): # pylint: disable=invalid-name + """Dynamic caller for to_hsl, to_rgb, etc""" + return getattr(self, "to_" + space)() + + def to_hsl(self): + """Turn this color into a Hue/Saturation/Lightness colour space""" + if not self and self.space in ("rgb", "named"): + return self.to_rgb().to_hsl() + if self.space == "hsl": + return self + if self.space in ("named"): + return self.to_rgb().to_hsl() + if self.space == "rgb": + return Color(rgb_to_hsl(*self.to_floats()), space="hsl") + raise ColorError(f"Unknown color conversion {self.space}->hsl") + + def to_rgb(self): + """Turn this color into a Red/Green/Blue colour space""" + if not self and self.space in ("rgb", "named"): + return Color([0, 0, 0]) + if self.space == "rgb": + return self + if self.space in ("rgba", "named"): + return Color(self[:3], space="rgb") + if self.space == "hsl": + return Color(hsl_to_rgb(*self.to_floats()), space="rgb") + raise ColorError(f"Unknown color conversion {self.space}->rgb") + + def to_rgba(self, alpha=1.0): + """Turn this color isn't an RGB with Alpha colour space""" + if self.space == "rgba": + return self + return Color(self.to_rgb() + [alpha], "rgba") + + def to_floats(self): + """Returns the colour values as percentage floats (0.0 - 1.0)""" + return [val / 255.0 for val in self] + + def to_named(self): + """Convert this color to a named color if possible""" + if not self: + return Color() + return Color(COLOR_SVG.get(str(self), str(self))) + + def interpolate(self, other, fraction): + """Interpolate two colours by the given fraction + + .. versionadded:: 1.1""" + from .tween import ColorInterpolator # pylint: disable=import-outside-toplevel + + return ColorInterpolator(self, other).interpolate(fraction) + + @staticmethod + def isnone(x): + """Checks if a given color is none + + .. versionadded:: 1.2""" + + if x is None or (isinstance(x, str) and x.lower() == "none"): + return True + return False + + @staticmethod + def iscolor(x, accept_none=False): + """Checks if a given value can be parsed as a color + + .. versionadded:: 1.2""" + if isinstance(x, str) and (accept_none or not (Color.isnone(x))): + try: + Color(x) + return True + except ColorError: + pass + if isinstance(x, Color): + return True + return False + + +def rgb_to_hsl(red, green, blue): + """RGB to HSL colour conversion""" + rgb_max = max(red, green, blue) + rgb_min = min(red, green, blue) + delta = rgb_max - rgb_min + hsl = [0.0, 0.0, (rgb_max + rgb_min) / 2.0] + if delta != 0: + if hsl[2] <= 0.5: + hsl[1] = delta / (rgb_max + rgb_min) + else: + hsl[1] = delta / (2 - rgb_max - rgb_min) + + if red == rgb_max: + hsl[0] = (green - blue) / delta + elif green == rgb_max: + hsl[0] = 2.0 + (blue - red) / delta + elif blue == rgb_max: + hsl[0] = 4.0 + (red - green) / delta + + hsl[0] /= 6.0 + if hsl[0] < 0: + hsl[0] += 1 + if hsl[0] > 1: + hsl[0] -= 1 + return hsl + + +def hsl_to_rgb(hue, sat, light): + """HSL to RGB Color Conversion""" + if sat == 0: + return [light, light, light] # Gray + + if light < 0.5: + val2 = light * (1 + sat) + else: + val2 = light + sat - light * sat + val1 = 2 * light - val2 + return [ + _hue_to_rgb(val1, val2, hue * 6 + 2.0), + _hue_to_rgb(val1, val2, hue * 6), + _hue_to_rgb(val1, val2, hue * 6 - 2.0), + ] + + +def _hue_to_rgb(val1, val2, hue): + if hue < 0: + hue += 6.0 + if hue > 6: + hue -= 6.0 + if hue < 1: + return val1 + (val2 - val1) * hue + if hue < 3: + return val2 + if hue < 4: + return val1 + (val2 - val1) * (4 - hue) + return val1 diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/command.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/command.py new file mode 100644 index 0000000..6bb7292 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/command.py @@ -0,0 +1,347 @@ +# coding=utf-8 +# +# Copyright (C) 2019 Martin Owens +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. +# +""" +This API provides methods for calling Inkscape to execute a given +Inkscape command. This may be needed for various compiling options +(e.g., png), running other extensions or performing other options only +available via the shell API. + +Best practice is to avoid using this API except when absolutely necessary, +since it is resource-intensive to invoke a new Inkscape instance. + +However, in any circumstance when it is necessary to call Inkscape, it +is strongly recommended that you do so through this API, rather than calling +it yourself, to take advantage of the security settings and testing functions. + +""" + +import os +import re +import sys +from shutil import which as warlock + +from subprocess import Popen, PIPE +from tempfile import TemporaryDirectory +from typing import List +from lxml.etree import ElementTree + +from .elements import SvgDocumentElement + +INKSCAPE_EXECUTABLE_NAME = os.environ.get("INKSCAPE_COMMAND") +if INKSCAPE_EXECUTABLE_NAME is None: + if sys.platform == "win32": + # prefer inkscape.exe over inkscape.com which spawns a command window + INKSCAPE_EXECUTABLE_NAME = "inkscape.exe" + else: + INKSCAPE_EXECUTABLE_NAME = "inkscape" + + +class CommandNotFound(IOError): + """Command is not found""" + + +class ProgramRunError(ValueError): + """A specialized ValueError that is raised when a call to an external command fails. + It stores additional information about a failed call to an external program. + + If only the ``program`` parameter is given, it is interpreted as the error message. + Otherwise, the error message is compiled from all constructor parameters.""" + + program: str + """The absolute path to the called executable""" + + returncode: int + """Return code of the program call""" + + stderr: str + """stderr stream output of the call""" + + stdout: str + """stdout stream output of the call""" + + arguments: List + """Arguments of the call""" + + def __init__(self, program, returncode=None, stderr=None, stdout=None, args=None): + self.program = program + self.returncode = returncode + self.stderr = stderr + self.stdout = stdout + self.arguments = args + super().__init__(str(self)) + + def __str__(self): + if self.returncode is None: + return self.program + return ( + f"Return Code: {self.returncode}: {self.stderr}\n{self.stdout}" + f"\nargs: {self.args}" + ) + + +def which(program): + """ + Attempt different methods of trying to find if the program exists. + """ + if os.path.isabs(program) and os.path.isfile(program): + return program + # On Windows, shutil.which may give preference to .py files in the current directory + # (such as pdflatex.py), e.g. if .PY is in pathext, because the current directory is + # prepended to PATH. This can be suppressed by explicitly appending the current + # directory. + + try: + if sys.platform == "win32": + prog = warlock(program, path=os.environ["PATH"] + ";" + os.curdir) + if prog: + return prog + except ImportError: + pass + + try: + # Python3 only version of which + prog = warlock(program) + if prog: + return prog + except ImportError: + pass # python2 + + # There may be other methods for doing a `which` command for other + # operating systems; These should go here as they are discovered. + + raise CommandNotFound(f"Can not find the command: '{program}'") + + +def write_svg(svg, *filename): + """Writes an svg to the given filename""" + filename = os.path.join(*filename) + if os.path.isfile(filename): + return filename + with open(filename, "wb") as fhl: + if isinstance(svg, SvgDocumentElement): + svg = ElementTree(svg) + if hasattr(svg, "write"): + # XML document + svg.write(fhl) + elif isinstance(svg, bytes): + fhl.write(svg) + else: + raise ValueError("Not sure what type of SVG data this is.") + return filename + + +def to_arg(arg, oldie=False): + """Convert a python argument to a command line argument""" + if isinstance(arg, (tuple, list)): + (arg, val) = arg + arg = "-" + arg + if len(arg) > 2 and not oldie: + arg = "-" + arg + if val is True: + return arg + if val is False: + return None + return f"{arg}={str(val)}" + return str(arg) + + +def to_args(prog, *positionals, **arguments): + """Compile arguments and keyword arguments into a list of strings which Popen will + understand. + + :param prog: + Program executable prepended to the output. + :type first: ``str`` + + :Arguments: + * (``str``) -- String added as given + * (``tuple``) -- Ordered version of Keyword Arguments, see below + + :Keyword Arguments: + * *name* (``str``) -- + Becomes ``--name="val"`` + * *name* (``bool``) -- + Becomes ``--name`` + * *name* (``list``) -- + Becomes ``--name="val1"`` ... + * *n* (``str``) -- + Becomes ``-n=val`` + * *n* (``bool``) -- + Becomes ``-n`` + + :return: Returns a list of compiled arguments ready for Popen. + :rtype: ``list[str]`` + """ + args = [prog] + oldie = arguments.pop("oldie", False) + for arg, value in arguments.items(): + arg = arg.replace("_", "-").strip() + + if isinstance(value, tuple): + value = list(value) + elif not isinstance(value, list): + value = [value] + + for val in value: + args.append(to_arg((arg, val), oldie)) + + args += [to_arg(pos, oldie) for pos in positionals if pos is not None] + # Filter out empty non-arguments + return [arg for arg in args if arg is not None] + + +def to_args_sorted(prog, *positionals, **arguments): + """same as :func:`to_args`, but keyword arguments are sorted beforehand + + .. versionadded:: 1.2""" + return to_args(prog, *positionals, **dict(sorted(arguments.items()))) + + +def _call(program, *args, **kwargs): + stdin = kwargs.pop("stdin", None) + if isinstance(stdin, str): + stdin = stdin.encode("utf-8") + inpipe = PIPE if stdin else None + + args = to_args(which(program), *args, **kwargs) + + kwargs = {} + if sys.platform == "win32": + kwargs["creationflags"] = 0x08000000 # create no console window + + with Popen( + args, + shell=False, # Never have shell=True + stdin=inpipe, # StdIn not used (yet) + stdout=PIPE, # Grab any output (return it) + stderr=PIPE, # Take all errors, just incase + **kwargs, + ) as process: + (stdout, stderr) = process.communicate(input=stdin) + if process.returncode == 0: + return stdout + raise ProgramRunError(program, process.returncode, stderr, stdout, args) + + +def call(program, *args, **kwargs): + """ + Generic caller to open any program and return its stdout:: + + stdout = call('executable', arg1, arg2, dash_dash_arg='foo', d=True, ...) + + Will raise :class:`ProgramRunError` if return code is not 0. + + Keyword arguments: + return_binary: Should stdout return raw bytes (default: False) + + .. versionadded:: 1.1 + stdin: The string or bytes containing the stdin (default: None) + + All other arguments converted using :func:`to_args` function. + """ + # We use this long input because it's less likely to conflict with --binary= + binary = kwargs.pop("return_binary", False) + stdout = _call(program, *args, **kwargs) + # Convert binary to string when we wish to have strings we do this here + # so the mock tests will also run the conversion (always returns bytes) + if not binary and isinstance(stdout, bytes): + return stdout.decode(sys.stdout.encoding or "utf-8") + return stdout + + +def inkscape(svg_file, *args, **kwargs): + """ + Call Inkscape with the given svg_file and the given arguments, see call(). + + Returns the stdout of the call. + + .. versionchanged:: 1.3 + If the "actions" kwargs parameter is passed, it is checked whether the length of + the action string might lead to issues with the Windows CLI call character + limit. In this case, Inkscape is called in `--shell` + mode and the actions are fed in via stdin. This avoids violating the character + limit for command line arguments on Windows, which results in errors like this: + `[WinError 206] The filename or extension is too long`. + This workaround is also possible when calling Inkscape with long arguments + to `--export-id` and `--query-id`, by converting the call to the appropriate + action sequence. The stdout is cleaned to resemble non-interactive mode. + """ + os.environ["SELF_CALL"] = "true" + actions = kwargs.get("actions", None) + strip_stdout = False + # Keep some safe margin to the 8191 character limit. + if actions is not None and len(actions) > 7000: + args = args + ("--shell",) + kwargs["stdin"] = actions + kwargs.pop("actions") + strip_stdout = True + stdout = call(INKSCAPE_EXECUTABLE_NAME, svg_file, *args, **kwargs) + if strip_stdout: + split = re.split(r"\n> ", stdout) + if len(split) > 1: + if "\n" in split[1]: + stdout = "\n".join(split[1].split("\n")[1:]) + else: + stdout = "" + return stdout + + +def inkscape_command(svg, select=None, actions=None, *args, **kwargs): + """ + Executes Inkscape batch actions with the given input and returns a new . + + inkscape_command('', [select=...], [actions=...], [...]) + """ + with TemporaryDirectory(prefix="inkscape-command") as tmpdir: + svg_file = write_svg(svg, tmpdir, "input.svg") + select = ("select", select) if select else None + inkscape( + svg_file, + select, + batch_process=True, + export_overwrite=True, + actions=actions, + *args, + **kwargs, + ) + with open(svg_file, "rb") as fhl: + return fhl.read() + + +def take_snapshot(svg, dirname, name="snapshot", ext="png", dpi=96, **kwargs): + """ + Take a snapshot of the given svg file. + + Resulting filename is yielded back, after generator finishes, the + file is deleted so you must deal with the file inside the for loop. + """ + svg_file = write_svg(svg, dirname, name + ".svg") + ext_file = os.path.join(dirname, name + "." + str(ext).lower()) + inkscape( + svg_file, export_dpi=dpi, export_filename=ext_file, export_type=ext, **kwargs + ) + return ext_file + + +def is_inkscape_available(): + """Return true if the Inkscape executable is available.""" + try: + return bool(which(INKSCAPE_EXECUTABLE_NAME)) + except CommandNotFound: + return False diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/css.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/css.py new file mode 100644 index 0000000..ebb9234 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/css.py @@ -0,0 +1,61 @@ +# coding=utf-8 +# +# Copyright (C) 2021 - Jonathan Neuhauser +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +"""Toplevel CSS utils that do not depend on other inkex functionality + +.. versionadded:: 1.2 + Previously a part of :py:mod:`inkex.styles`""" + + +import re +import cssselect + + +class ConditionalRule: + """A single css rule + + .. versionchanged:: 1.2 + The CSS rule is now processed using cssselect.""" + + step_to_xpath = [ + # namespace addition + (re.compile(r"(::|\/)([a-z]+)(?=\W)(?!-)"), r"\1svg:\2"), + ] + + def __init__(self, rule): + self.rule = rule.strip() + self.selector = cssselect.parse(self.rule)[0] + + def __str__(self): + return self.rule + + def to_xpath(self): + """Attempt to convert the rule into a simplified xpath""" + # the space in the end is needed for the negative lookbehind in the regex, will + # be removed on return + ret = cssselect.HTMLTranslator().selector_to_xpath(self.selector) + " " + for matcher, replacer in self.step_to_xpath: + ret = matcher.sub(replacer, ret) + return ret.strip() + + def get_specificity(self): + """gets the css specificity of this selector + + .. versionadded:: 1.2""" + return self.selector.specificity() diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/README.rst b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/README.rst new file mode 100644 index 0000000..df3e2dc --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/README.rst @@ -0,0 +1,4 @@ +# coding=utf-8This directory contains compatibility layers for all the `simple` modules, such as `simplepath` and `simplestyle` + +This directory IS NOT a module path, to denote this we are using a dash in the name and there is no '__init__.py' + diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/bezmisc.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/bezmisc.py new file mode 100644 index 0000000..92b63f6 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/bezmisc.py @@ -0,0 +1,46 @@ +# coding=utf-8 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# pylint: disable=invalid-name,unused-argument +"""Deprecated bezmisc API""" + +from inkex.deprecated import deprecate +from inkex import bezier + +bezierparameterize = deprecate(bezier.bezierparameterize) +linebezierintersect = deprecate(bezier.linebezierintersect) +bezierpointatt = deprecate(bezier.bezierpointatt) +bezierslopeatt = deprecate(bezier.bezierslopeatt) +beziertatslope = deprecate(bezier.beziertatslope) +tpoint = deprecate(bezier.tpoint) +beziersplitatt = deprecate(bezier.beziersplitatt) +pointdistance = deprecate(bezier.pointdistance) +Gravesen_addifclose = deprecate(bezier.addifclose) +balf = deprecate(bezier.balf) +bezierlengthSimpson = deprecate(bezier.bezierlength) +beziertatlength = deprecate(bezier.beziertatlength) +bezierlength = bezierlengthSimpson + + +@deprecate +def Simpson(func, a, b, n_limit, tolerance): + """bezier.simpson(a, b, n_limit, tolerance, balf_arguments)""" + raise AttributeError( + """Because bezmisc.Simpson used global variables, it's not possible to + call the replacement code automatically. In fact it's unlikely you were + using the code or functionality you think you were since it's a highly + broken way of writing python.""" + ) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/cspsubdiv.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/cspsubdiv.py new file mode 100644 index 0000000..91b2237 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/cspsubdiv.py @@ -0,0 +1,25 @@ +# coding=utf-8 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# pylint: disable=invalid-name +"""Deprecated cspsubdiv API""" + +from inkex.deprecated import deprecate +from inkex import bezier + +maxdist = deprecate(bezier.maxdist) +cspsubdiv = deprecate(bezier.cspsubdiv) +subdiv = deprecate(bezier.subdiv) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/cubicsuperpath.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/cubicsuperpath.py new file mode 100644 index 0000000..cb6f124 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/cubicsuperpath.py @@ -0,0 +1,52 @@ +# coding=utf-8 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# pylint: disable=invalid-name +"""Deprecated cubic super path API""" + +from inkex.deprecated import deprecate +from inkex import paths + + +@deprecate +def ArcToPath(p1, params): + return paths.arc_to_path(p1, params) + + +@deprecate +def CubicSuperPath(simplepath): + return paths.Path(simplepath).to_superpath() + + +@deprecate +def unCubicSuperPath(csp): + return paths.CubicSuperPath(csp).to_path().to_arrays() + + +@deprecate +def parsePath(d): + return paths.CubicSuperPath(paths.Path(d)) + + +@deprecate +def formatPath(p): + return str(paths.Path(unCubicSuperPath(p))) + + +matprod = deprecate(paths.matprod) +rotmat = deprecate(paths.rotmat) +applymat = deprecate(paths.applymat) +norm = deprecate(paths.norm) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/ffgeom.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/ffgeom.py new file mode 100644 index 0000000..2feb3bd --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/ffgeom.py @@ -0,0 +1,92 @@ +# coding=utf-8 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# pylint: disable=invalid-name,missing-docstring +"""Deprecated ffgeom API""" + +from collections import namedtuple + +from inkex.deprecated import deprecate +from inkex.transforms import DirectedLineSegment as NewSeg + +try: + NaN = float("NaN") +except ValueError: + PosInf = 1e300000 + NaN = PosInf / PosInf + + +class Point(namedtuple("Point", "x y")): + __slots__ = () + + def __getitem__(self, key): + if isinstance(key, str): + key = "xy".index(key) + return super(Point, self).__getitem__(key) + + +class Segment(NewSeg): + @deprecate + def __init__(self, e0, e1): + """inkex.transforms.Segment(((x1, y1), (x2, y2)))""" + if isinstance(e0, dict): + e0 = (e0["x"], e0["y"]) + if isinstance(e1, dict): + e1 = (e1["x"], e1["y"]) + super(Segment, self).__init__((e0, e1)) + + def __getitem__(self, key): + if key: + return {"x": self.x.maximum, "y": self.y.maximum} + return {"x": self.x.minimum, "y": self.y.minimum} + + delta_x = lambda self: self.width + delta_y = lambda self: self.height + run = delta_x + rise = delta_y + + def distanceToPoint(self, p): + return self.distance_to_point(p["x"], p["y"]) + + def perpDistanceToPoint(self, p): + return self.perp_distance(p["x"], p["y"]) + + def angle(self): + return super(Segment, self).angle + + def length(self): + return super(Segment, self).length + + def pointAtLength(self, length): + return self.point_at_length(length) + + def pointAtRatio(self, ratio): + return self.point_at_ratio(ratio) + + def createParallel(self, p): + self.parallel(p["x"], p["y"]) + + +@deprecate +def intersectSegments(s1, s2): + """transforms.Segment(s1).intersect(s2)""" + return Point(*s1.intersect(s2)) + + +@deprecate +def dot(s1, s2): + """transforms.Segment(s1).dot(s2)""" + return s1.dot(s2) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/run_command.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/run_command.py new file mode 100644 index 0000000..84f4a4b --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/run_command.py @@ -0,0 +1,79 @@ +# coding=utf-8 +# +# Copyright (C) 2008 Stephen Silver +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +# +""" +Deprecated module for running SVG-generating commands in Inkscape extensions +""" +import os +import sys +import tempfile +from subprocess import Popen, PIPE + +from inkex.deprecated import deprecate + + +def run(command_format, prog_name): + """inkex.commands.call(...)""" + svgfile = tempfile.mktemp(".svg") + command = command_format % svgfile + msg = None + # ps2pdf may attempt to write to the current directory, which may not + # be writeable, so we switch to the temp directory first. + try: + os.chdir(tempfile.gettempdir()) + except IOError: + pass + + try: + proc = Popen(command, shell=True, stdout=PIPE, stderr=PIPE) + return_code = proc.wait() + out = proc.stdout.read() + err = proc.stderr.read() + + if msg is None: + if return_code: + msg = "{} failed:\n{}\n{}\n".format(prog_name, out, err) + elif err: + sys.stderr.write( + "{} executed but logged the following error:\n{}\n{}\n".format( + prog_name, out, err + ) + ) + except Exception as inst: + msg = "Error attempting to run {}: {}".format(prog_name, str(inst)) + + # If successful, copy the output file to stdout. + if msg is None: + if os.name == "nt": # make stdout work in binary on Windows + import msvcrt + + msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) + try: + with open(svgfile, "rb") as fhl: + sys.stdout.write(fhl.read().decode(sys.stdout.encoding)) + except IOError as inst: + msg = "Error reading temporary file: {}".format(str(inst)) + + try: + # Clean up. + os.remove(svgfile) + except (IOError, OSError): + pass + + # Output error message (if any) and exit. + return msg diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/simplepath.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/simplepath.py new file mode 100644 index 0000000..6eaaf3b --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/simplepath.py @@ -0,0 +1,68 @@ +# coding=utf-8 +# COPYRIGHT +# +# pylint: disable=invalid-name +# +""" +Depreicated simplepath replacements with documentation +""" + +import math +from inkex.deprecated import deprecate, DeprecatedDict +from inkex.transforms import Transform +from inkex.paths import Path + +pathdefs = DeprecatedDict( + { + "M": ["L", 2, [float, float], ["x", "y"]], + "L": ["L", 2, [float, float], ["x", "y"]], + "H": ["H", 1, [float], ["x"]], + "V": ["V", 1, [float], ["y"]], + "C": [ + "C", + 6, + [float, float, float, float, float, float], + ["x", "y", "x", "y", "x", "y"], + ], + "S": ["S", 4, [float, float, float, float], ["x", "y", "x", "y"]], + "Q": ["Q", 4, [float, float, float, float], ["x", "y", "x", "y"]], + "T": ["T", 2, [float, float], ["x", "y"]], + "A": [ + "A", + 7, + [float, float, float, int, int, float, float], + ["r", "r", "a", 0, "s", "x", "y"], + ], + "Z": ["L", 0, [], []], + } +) + + +@deprecate +def parsePath(d): + """element.path.to_arrays()""" + return Path(d).to_arrays() + + +@deprecate +def formatPath(a): + """str(element.path) or str(Path(array))""" + return str(Path(a)) + + +@deprecate +def translatePath(p, x, y): + """Path(array).translate(x, y)""" + p[:] = Path(p).translate(x, y).to_arrays() + + +@deprecate +def scalePath(p, x, y): + """Path(array).scale(x, y)""" + p[:] = Path(p).scale(x, y).to_arrays() + + +@deprecate +def rotatePath(p, a, cx=0, cy=0): + """Path(array).rotate(angle_degrees, (center_x, center_y))""" + p[:] = Path(p).rotate(math.degrees(a), (cx, cy)).to_arrays() diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/simplestyle.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/simplestyle.py new file mode 100644 index 0000000..cab6d9d --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/simplestyle.py @@ -0,0 +1,55 @@ +# coding=utf-8 +# COPYRIGHT +"""DOCSTRING""" + +import inkex +from inkex.colors import SVG_COLOR as svgcolors +from inkex.deprecated import deprecate + + +@deprecate +def parseStyle(s): + """dict(inkex.Style.parse_str(s))""" + return dict(inkex.Style.parse_str(s)) + + +@deprecate +def formatStyle(a): + """str(inkex.Style(a))""" + return str(inkex.Style(a)) + + +@deprecate +def isColor(c): + """inkex.colors.is_color(c)""" + return inkex.colors.is_color(c) + + +@deprecate +def parseColor(c): + """inkex.Color(c).to_rgb()""" + return tuple(inkex.Color(c).to_rgb()) + + +@deprecate +def formatColoria(a): + """str(inkex.Color(a))""" + return str(inkex.Color(a)) + + +@deprecate +def formatColorfa(a): + """str(inkex.Color(a))""" + return str(inkex.Color(a)) + + +@deprecate +def formatColor3i(r, g, b): + """str(inkex.Color((r, g, b)))""" + return str(inkex.Color((r, g, b))) + + +@deprecate +def formatColor3f(r, g, b): + """str(inkex.Color((r, g, b)))""" + return str(inkex.Color((r, g, b))) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/simpletransform.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/simpletransform.py new file mode 100644 index 0000000..f408cd0 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated-simple/simpletransform.py @@ -0,0 +1,122 @@ +# coding=utf-8 +# +# pylint: disable=invalid-name +# +""" +Depreicated simpletransform replacements with documentation +""" + +import warnings + +from inkex.deprecated import deprecate +from inkex.transforms import Transform, BoundingBox, cubic_extrema +from inkex.paths import Path + +import inkex, cubicsuperpath + + +def _lists(mat): + return [list(row) for row in mat] + + +@deprecate +def parseTransform(transf, mat=None): + """Transform(str).matrix""" + t = Transform(transf) + if mat is not None: + t = Transform(mat) @ t + return _lists(t.matrix) + + +@deprecate +def formatTransform(mat): + """str(Transform(mat))""" + if len(mat) == 3: + warnings.warn("3x3 matrices not suported") + mat = mat[:2] + return str(Transform(mat)) + + +@deprecate +def invertTransform(mat): + """-Transform(mat)""" + return _lists((-Transform(mat)).matrix) + + +@deprecate +def composeTransform(mat1, mat2): + """Transform(M1) * Transform(M2)""" + return _lists((Transform(mat1) @ Transform(mat2)).matrix) + + +@deprecate +def composeParents(node, mat): + """elem.composed_transform() or elem.transform * Transform(mat)""" + return (node.transform @ Transform(mat)).matrix + + +@deprecate +def applyTransformToNode(mat, node): + """elem.transform = Transform(mat) * elem.transform""" + node.transform = Transform(mat) @ node.transform + + +@deprecate +def applyTransformToPoint(mat, pt): + """Transform(mat).apply_to_point(pt)""" + pt2 = Transform(mat).apply_to_point(pt) + # Apply in place as original method was modifying arrays in place. + # but don't do this in your code! This is not good code design. + pt[0] = pt2[0] + pt[1] = pt2[1] + + +@deprecate +def applyTransformToPath(mat, path): + """Path(path).transform(mat)""" + return Path(path).transform(Transform(mat)).to_arrays() + + +@deprecate +def fuseTransform(node): + """node.apply_transform()""" + return node.apply_transform() + + +@deprecate +def boxunion(b1, b2): + """list(BoundingBox(b1) + BoundingBox(b2))""" + bbox = BoundingBox(b1[:2], b1[2:]) + BoundingBox(b2[:2], b2[2:]) + return bbox.x.minimum, bbox.x.maximum, bbox.y.minimum, bbox.y.maximum + + +@deprecate +def roughBBox(path): + """list(Path(path)).bounding_box())""" + bbox = Path(path).bounding_box() + return bbox.x.minimum, bbox.x.maximum, bbox.y.minimum, bbox.y.maximum + + +@deprecate +def refinedBBox(path): + """list(Path(path)).bounding_box())""" + bbox = Path(path).bounding_box() + return bbox.x.minimum, bbox.x.maximum, bbox.y.minimum, bbox.y.maximum + + +@deprecate +def cubicExtrema(y0, y1, y2, y3): + """from inkex.transforms import cubic_extrema""" + return cubic_extrema(y0, y1, y2, y3) + + +@deprecate +def computeBBox(aList, mat=[[1, 0, 0], [0, 1, 0]]): + """sum([node.bounding_box() for node in aList])""" + return sum([node.bounding_box() for node in aList], None) + + +@deprecate +def computePointInNode(pt, node, mat=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]): + """(-Transform(node.transform * mat)).apply_to_point(pt)""" + return (-Transform(node.transform * mat)).apply_to_point(pt) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated/__init__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated/__init__.py new file mode 100644 index 0000000..180a1c2 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated/__init__.py @@ -0,0 +1,3 @@ +from .main import * +from .meta import deprecate, _deprecated +from .deprecatedeffect import DeprecatedEffect, Effect diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated/deprecatedeffect.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated/deprecatedeffect.py new file mode 100644 index 0000000..ee13670 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated/deprecatedeffect.py @@ -0,0 +1,313 @@ +# coding=utf-8 +# +# Copyright (C) 2018 - Martin Owens +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Deprecation functionality for the pre-1.0 Inkex main effect class. +""" +# +# We ignore a lot of pylint warnings here: +# +# pylint: disable=invalid-name,unused-argument,missing-docstring,too-many-public-methods +# + +import sys +import argparse +from argparse import ArgumentParser + +from .. import utils +from .. import base +from ..base import SvgThroughMixin, InkscapeExtension +from ..localization import inkex_gettext as _ +from .meta import _deprecated + + +class DeprecatedEffect: + """An Inkscape effect, takes SVG in and outputs SVG, providing a deprecated layer""" + + options = argparse.Namespace() + + def __init__(self): + super().__init__() + self._doc_ids = None + self._args = None + + # These are things we reference in the deprecated code, they are provided + # by the new effects code, but we want to keep this as a Mixin so these + # items will keep pylint happy and let use check our code as we write. + if not hasattr(self, "svg"): + from ..elements import SvgDocumentElement + + self.svg = SvgDocumentElement() + if not hasattr(self, "arg_parser"): + self.arg_parser = ArgumentParser() + if not hasattr(self, "run"): + self.run = self.affect + + @classmethod + def _deprecated( + cls, name, msg=_("{} is deprecated and should be removed"), stack=3 + ): + """Give the user a warning about their extension using a deprecated API""" + _deprecated( + msg.format("Effect." + name, cls=cls.__module__ + "." + cls.__name__), + stack=stack, + ) + + @property + def OptionParser(self): + self._deprecated( + "OptionParser", + _( + "{} or `optparse` has been deprecated and replaced with `argparser`. " + "You must change `self.OptionParser.add_option` to " + "`self.arg_parser.add_argument`; the arguments are similar." + ), + ) + return self + + def add_option(self, *args, **kw): + # Convert type string into type method as needed + if "type" in kw: + kw["type"] = { + "string": str, + "int": int, + "float": float, + "inkbool": utils.Boolean, + }.get(kw["type"]) + if kw.get("action", None) == "store": + # Default store action not required, removed. + kw.pop("action") + args = [arg for arg in args if arg != ""] + self.arg_parser.add_argument(*args, **kw) + + def effect(self): + self._deprecated( + "effect", + _( + "{} method is now a required method. It should " + "be created on {cls}, even if it does nothing." + ), + ) + + @property + def current_layer(self): + self._deprecated( + "current_layer", + _( + "{} is now a method in the SvgDocumentElement class. " + "Use `self.svg.get_current_layer()` instead." + ), + ) + return self.svg.get_current_layer() + + @property + def view_center(self): + self._deprecated( + "view_center", + _( + "{} is now a method in the SvgDocumentElement class. " + "Use `self.svg.get_center_position()` instead." + ), + ) + return self.svg.namedview.center + + @property + def selected(self): + self._deprecated( + "selected", + _( + "{} is now a dict in the SvgDocumentElement class. " + "Use `self.svg.selected`." + ), + ) + return {elem.get("id"): elem for elem in self.svg.selected} + + @property + def doc_ids(self): + self._deprecated( + "doc_ids", + _( + "{} is now a method in the SvgDocumentElement class. " + "Use `self.svg.get_ids()` instead." + ), + ) + if self._doc_ids is None: + self._doc_ids = dict.fromkeys(self.svg.get_ids()) + return self._doc_ids + + def getdocids(self): + self._deprecated( + "getdocids", _("Use `self.svg.get_ids()` instead of {} and `doc_ids`.") + ) + self._doc_ids = None + self.svg.ids.clear() + + def getselected(self): + self._deprecated("getselected", _("{} has been removed")) + + def getElementById(self, eid): + self._deprecated( + "getElementById", + _( + "{} is now a method in the SvgDocumentElement class. " + "Use `self.svg.getElementById(eid)` instead." + ), + ) + return self.svg.getElementById(eid) + + def xpathSingle(self, xpath): + self._deprecated( + "xpathSingle", + _( + "{} is now a new method in the SvgDocumentElement class. " + "Use `self.svg.getElement(path)` instead." + ), + ) + return self.svg.getElement(xpath) + + def getParentNode(self, node): + self._deprecated( + "getParentNode", + _("{} is no longer in use. Use the lxml `.getparent()` method instead."), + ) + return node.getparent() + + def getNamedView(self): + self._deprecated( + "getNamedView", + _( + "{} is now a property of the SvgDocumentElement class. " + "Use `self.svg.namedview` to access this element." + ), + ) + return self.svg.namedview + + def createGuide(self, posX, posY, angle): + from ..elements import Guide + + self._deprecated( + "createGuide", + _( + "{} is now a method of the namedview element object. " + "Use `self.svg.namedview.add(Guide().move_to(x, y, a))` instead." + ), + ) + return self.svg.namedview.add(Guide().move_to(posX, posY, angle)) + + def affect( + self, args=sys.argv[1:], output=True + ): # pylint: disable=dangerous-default-value + # We need a list as the default value to preserve backwards compatibility + self._deprecated( + "affect", _("{} is now `Effect.run()`. The `output` argument has changed.") + ) + self._args = args[-1:] + return self.run(args=args) + + @property + def args(self): + self._deprecated("args", _("self.args[-1] is now self.options.input_file.")) + return self._args + + @property + def svg_file(self): + self._deprecated("svg_file", _("self.svg_file is now self.options.input_file.")) + return self.options.input_file + + def save_raw(self, ret): + # Derived class may implement "output()" + # Attention: 'cubify.py' implements __getattr__ -> hasattr(self, 'output') + # returns True + if hasattr(self.__class__, "output"): + self._deprecated("output", "Use `save()` or `save_raw()` instead.", stack=5) + return getattr(self, "output")() + return base.InkscapeExtension.save_raw(self, ret) + + def uniqueId(self, old_id, make_new_id=True): + self._deprecated( + "uniqueId", + _( + "{} is now a method in the SvgDocumentElement class. " + " Use `self.svg.get_unique_id(old_id)` instead." + ), + ) + return self.svg.get_unique_id(old_id) + + def getDocumentWidth(self): + self._deprecated( + "getDocumentWidth", + _( + "{} is now a property of the SvgDocumentElement class. " + "Use `self.svg.width` instead." + ), + ) + return self.svg.get("width") + + def getDocumentHeight(self): + self._deprecated( + "getDocumentHeight", + _( + "{} is now a property of the SvgDocumentElement class. " + "Use `self.svg.height` instead." + ), + ) + return self.svg.get("height") + + def getDocumentUnit(self): + self._deprecated( + "getDocumentUnit", + _( + "{} is now a property of the SvgDocumentElement class. " + "Use `self.svg.unit` instead." + ), + ) + return self.svg.unit + + def unittouu(self, string): + self._deprecated( + "unittouu", + _( + "{} is now a method in the SvgDocumentElement class. " + "Use `self.svg.unittouu(str)` instead." + ), + ) + return self.svg.unittouu(string) + + def uutounit(self, val, unit): + self._deprecated( + "uutounit", + _( + "{} is now a method in the SvgDocumentElement class. " + "Use `self.svg.uutounit(value, unit)` instead." + ), + ) + return self.svg.uutounit(val, unit) + + def addDocumentUnit(self, value): + self._deprecated( + "addDocumentUnit", + _( + "{} is now a method in the SvgDocumentElement class. " + "Use `self.svg.add_unit(value)` instead." + ), + ) + return self.svg.add_unit(value) + + +class Effect(SvgThroughMixin, DeprecatedEffect, InkscapeExtension): + """An Inkscape effect, takes SVG in and outputs SVG""" diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated/main.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated/main.py new file mode 100644 index 0000000..a747bda --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated/main.py @@ -0,0 +1,178 @@ +# coding=utf-8 +# +# Copyright (C) 2018 - Martin Owens +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Provide some documentation to existing extensions about why they're failing. +""" +# +# We ignore a lot of pylint warnings here: +# +# pylint: disable=invalid-name,unused-argument,missing-docstring,too-many-public-methods +# + +import os +import sys +import warnings +import argparse + +from ..transforms import Transform +from .. import utils +from .. import units +from ..elements._base import BaseElement, ShapeElement +from ..elements._selected import ElementList +from .meta import deprecate, _deprecated + +warnings.simplefilter("default") +# To load each of the deprecated sub-modules (the ones without a namespace) +# we will add the directory to our pythonpath so older scripts can find them + +INKEX_DIR = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) +SIMPLE_DIR = os.path.join(INKEX_DIR, "deprecated-simple") + +if os.path.isdir(SIMPLE_DIR): + sys.path.append(SIMPLE_DIR) + + +class DeprecatedDict(dict): + @deprecate + def __getitem__(self, key): + return super().__getitem__(key) + + @deprecate + def __iter__(self): + return super().__iter__() + + +# legacy inkex members + + +class lazyproxy: + """Proxy, use as decorator on a function with provides the wrapped object. + The decorated function is called when a member is accessed on the proxy. + """ + + def __init__(self, getwrapped): + """ + :param getwrapped: Callable which returns the wrapped object + """ + self._getwrapped = getwrapped + + def __getattr__(self, name): + return getattr(self._getwrapped(), name) + + def __call__(self, *args, **kwargs): + return self._getwrapped()(*args, **kwargs) + + +@lazyproxy +def localize(): + _deprecated("inkex.localize was moved to inkex.localization.localize.", stack=3) + from ..localization import localize as wrapped + + return wrapped + + +def are_near_relative(a, b, eps): + _deprecated( + "inkex.are_near_relative was moved to " "inkex.units.are_near_relative", stack=2 + ) + return units.are_near_relative(a, b, eps) + + +def debug(what): + _deprecated("inkex.debug was moved to inkex.utils.debug.", stack=2) + return utils.debug(what) + + +# legacy inkex members <= 0.48.x + + +def unittouu(string): + _deprecated( + "inkex.unittouu is now a method in the SvgDocumentElement class. " + "Use `self.svg.unittouu(str)` instead.", + stack=2, + ) + return units.convert_unit(string, "px") + + +# optparse.Values.ensure_value + + +def ensure_value(self, attr, value): + _deprecated("Effect().options.ensure_value was removed.", stack=2) + if getattr(self, attr, None) is None: + setattr(self, attr, value) + return getattr(self, attr) + + +argparse.Namespace.ensure_value = ensure_value # type: ignore + + +@deprecate +def zSort(inNode, idList): + """self.svg.get_z_selected()""" + sortedList = [] + theid = inNode.get("id") + if theid in idList: + sortedList.append(theid) + for child in inNode: + if len(sortedList) == len(idList): + break + sortedList += zSort(child, idList) + return sortedList + + +# This can't be handled as a mixin class because of circular importing. +def description(self, value): + """Use elem.desc = value""" + self.desc = value + + +BaseElement.description = deprecate(description, "1.1") + + +def composed_style(element: ShapeElement): + """Calculate the final styles applied to this element + This function has been deprecated in favor of BaseElement.specified_style()""" + return element.specified_style() + + +ShapeElement.composed_style = deprecate(composed_style, "1.2") + + +def paint_order(selection: ElementList): + """Use :func:`rendering_order`""" + return selection.rendering_order() + + +ElementList.paint_order = deprecate(paint_order, "1.2") # type: ignore + + +def transform_imul(self, matrix): + """Use @= operator instead""" + return self.__imatmul__(matrix) + + +def transform_mul(self, matrix): + """Use @ operator instead""" + return self.__matmul__(matrix) + + +Transform.__imul__ = deprecate(transform_imul, "1.2") # type: ignore +Transform.__mul__ = deprecate(transform_mul, "1.2") # type: ignore diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated/meta.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated/meta.py new file mode 100644 index 0000000..cebd93c --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/deprecated/meta.py @@ -0,0 +1,109 @@ +# coding=utf-8 +# +# Copyright (C) 2018 - Martin Owens +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Deprecation functionality which does not require imports from Inkex. +""" + +import os +import traceback +import warnings +from typing import Optional + +try: + DEPRECATION_LEVEL = int(os.environ.get("INKEX_DEPRECATION_LEVEL", 1)) +except ValueError: + DEPRECATION_LEVEL = 1 + + +def _deprecated(msg, stack=2, level=DEPRECATION_LEVEL): + """Internal method for raising a deprecation warning""" + if level > 1: + msg += " ; ".join(traceback.format_stack()) + if level: + warnings.warn(msg, category=DeprecationWarning, stacklevel=stack + 1) + + +def deprecate(func, version: Optional[str] = None): + r"""Function decorator for deprecation functions which have a one-liner + equivalent in the new API. The one-liner has to passed as a string + to the decorator. + + >>> @deprecate + >>> def someOldFunction(*args): + >>> '''Example replacement code someNewFunction('foo', ...)''' + >>> someNewFunction('foo', *args) + + Or if the args API is the same: + + >>> someOldFunction = deprecate(someNewFunction) + + """ + + def _inner(*args, **kwargs): + _deprecated(f"{func.__module__}.{func.__name__} -> {func.__doc__}", stack=2) + return func(*args, **kwargs) + + _inner.__name__ = func.__name__ + if func.__doc__: + if version is None: + _inner.__doc__ = "Deprecated -> " + func.__doc__ + else: + _inner.__doc__ = f"""{func.__doc__}\n\n.. deprecated:: {version}\n""" + return _inner + + +class DeprecatedSvgMixin: + """Mixin which adds deprecated API elements to the SvgDocumentElement""" + + @property + def selected(self): + """svg.selection""" + return self.selection + + @deprecate + def set_selected(self, *ids): + r"""svg.selection.set(\*ids)""" + return self.selection.set(*ids) + + @deprecate + def get_z_selected(self): + """svg.selection.rendering_order()""" + return self.selection.rendering_order() + + @deprecate + def get_selected(self, *types): + r"""svg.selection.filter(\*types).values()""" + return self.selection.filter(*types).values() + + @deprecate + def get_selected_or_all(self, *types): + """Set select_all = True in extension class""" + if not self.selection: + self.selection.set_all() + return self.selection.filter(*types) + + @deprecate + def get_selected_bbox(self): + """selection.bounding_box()""" + return self.selection.bounding_box() + + @deprecate + def get_first_selected(self, *types): + r"""selection.filter(\*types).first() or [0] if you'd like an error""" + return self.selection.filter(*types).first() diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/__init__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/__init__.py new file mode 100644 index 0000000..d426ff6 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/__init__.py @@ -0,0 +1,56 @@ +""" +Element based interface provides the bulk of features that allow you to +interact directly with the SVG xml interface. + +See the documentation for each of the elements for details on how it works. +""" + +from ._utils import addNS, NSS +from ._parser import SVG_PARSER, load_svg +from ._base import ShapeElement, BaseElement +from ._svg import SvgDocumentElement +from ._groups import Group, Layer, Anchor, Marker, ClipPath +from ._polygons import PathElement, Polyline, Polygon, Line, Rectangle, Circle, Ellipse +from ._text import ( + FlowRegion, + FlowRoot, + FlowPara, + FlowDiv, + FlowSpan, + TextElement, + TextPath, + Tspan, + SVGfont, + FontFace, + Glyph, + MissingGlyph, +) +from ._use import Symbol, Use +from ._meta import ( + Defs, + StyleElement, + Script, + Desc, + Title, + NamedView, + Guide, + Metadata, + ForeignObject, + Switch, + Grid, + Page, +) +from ._filters import ( + Filter, + Pattern, + Mask, + Gradient, + LinearGradient, + RadialGradient, + PathEffect, + Stop, + MeshGradient, + MeshRow, + MeshPatch, +) +from ._image import Image diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_base.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_base.py new file mode 100644 index 0000000..4f8048c --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_base.py @@ -0,0 +1,811 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) 2020 Martin Owens +# Sergei Izmailov +# Thomas Holder +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# pylint: disable=arguments-differ +""" +Provide extra utility to each svg element type specific to its type. + +This is useful for having a common interface for each element which can +give path, transform, and property access easily. +""" +from __future__ import annotations + +from copy import deepcopy +from typing import Any, Tuple, Optional, overload, TypeVar, List +from lxml import etree +import re + +from ..interfaces.IElement import IBaseElement, ISVGDocumentElement + +from ..base import SvgOutputMixin +from ..paths import Path +from ..styles import Style, Classes +from ..transforms import Transform, BoundingBox +from ..utils import FragmentError +from ..units import convert_unit, render_unit, parse_unit +from ._utils import ChildToProperty, NSS, addNS, removeNS, splitNS +from ..properties import BaseStyleValue, ShorthandValue, all_properties +from ._selected import ElementList +from ._parser import NodeBasedLookup, SVG_PARSER + +T = TypeVar("T", bound="BaseElement") # pylint: disable=invalid-name + + +class BaseElement(IBaseElement): + """Provide automatic namespaces to all calls""" + + # pylint: disable=too-many-public-methods + + def __init_subclass__(cls): + if cls.tag_name: + NodeBasedLookup.register_class(cls) + + @classmethod + def is_class_element( # pylint: disable=unused-argument + cls, elem: etree.Element + ) -> bool: + """Hook to do more restrictive check in addition to (ns,tag) match + + .. versionadded:: 1.2 + The function has been made public.""" + return True + + tag_name = "" + + @property + def TAG(self): # pylint: disable=invalid-name + """Return the tag_name without NS""" + if not self.tag_name: + return removeNS(super().tag)[-1] + return removeNS(self.tag_name)[-1] + + @classmethod + def new(cls, *children, **attrs): + """Create a new element, converting attrs values to strings.""" + obj = cls(*children) + obj.update(**attrs) + return obj + + NAMESPACE = property(lambda self: splitNS(self.tag_name)[0]) + """Get namespace of element""" + + PARSER = SVG_PARSER + """A reference to the :attr:`inkex.elements._parser.SVG_PARSER`""" + WRAPPED_ATTRS = ( + # (prop_name, [optional: attr_name], cls) + ("transform", Transform), + ("style", Style), + ("classes", "class", Classes), + ) # type: Tuple[Tuple[Any, ...], ...] + """A list of attributes that are automatically converted to objects.""" + + # We do this because python2 and python3 have different ways + # of combining two dictionaries that are incompatible. + # This allows us to update these with inheritance. + @property + def wrapped_attrs(self): + """Map attributes to property name and wrapper class""" + return {row[-2]: (row[0], row[-1]) for row in self.WRAPPED_ATTRS} + + @property + def wrapped_props(self): + """Map properties to attribute name and wrapper class""" + return {row[0]: (row[-2], row[-1]) for row in self.WRAPPED_ATTRS} + + typename = property(lambda self: type(self).__name__) + """Type name of the element""" + xml_path = property(lambda self: self.getroottree().getpath(self)) + """XPath representation of the element in its tree + + .. versionadded:: 1.1""" + desc = ChildToProperty("svg:desc", prepend=True) + """The element's long-form description (for accessibility purposes) + + .. versionadded:: 1.1""" + title = ChildToProperty("svg:title", prepend=True) + """The element's short-form description (for accessibility purposes) + + .. versionadded:: 1.1""" + + def __getattr__(self, name): + """Get the attribute, but load it if it is not available yet""" + if name in self.wrapped_props: + (attr, cls) = self.wrapped_props[name] + + # The reason we do this here and not in _init is because lxml + # is inconsistant about when elements are initialised. + # So we make this a lazy property. + def _set_attr(new_item): + if new_item: + self.set(attr, str(new_item)) + else: + self.attrib.pop(attr, None) # pylint: disable=no-member + + # pylint: disable=no-member + value = cls(self.attrib.get(attr, None), callback=_set_attr) + if name == "style": + value.element = self + setattr(self, name, value) + return value + raise AttributeError(f"Can't find attribute {self.typename}.{name}") + + def __setattr__(self, name, value): + """Set the attribute, update it if needed""" + if name in self.wrapped_props: + (attr, cls) = self.wrapped_props[name] + # Don't call self.set or self.get (infinate loop) + if value: + if not isinstance(value, cls): + value = cls(value) + self.attrib[attr] = str(value) + else: + self.attrib.pop(attr, None) # pylint: disable=no-member + else: + super().__setattr__(name, value) + + def get(self, attr, default=None): + """Get element attribute named, with addNS support.""" + if attr in self.wrapped_attrs: + (prop, _) = self.wrapped_attrs[attr] + value = getattr(self, prop, None) + # We check the boolean nature of the value, because empty + # transformations and style attributes are equiv to not-existing + ret = str(value) if value else (default or None) + return ret + return super().get(addNS(attr), default) + + def set(self, attr, value): + """Set element attribute named, with addNS support""" + if attr in self.wrapped_attrs: + # Always keep the local wrapped class up to date. + (prop, cls) = self.wrapped_attrs[attr] + setattr(self, prop, cls(value)) + value = getattr(self, prop) + if not value: + return + if value is None: + self.attrib.pop(addNS(attr), None) # pylint: disable=no-member + else: + value = str(value) + super().set(addNS(attr), value) + + def update(self, **kwargs): + """ + Update element attributes using keyword arguments + + Note: double underscore is used as namespace separator, + i.e. "namespace__attr" argument name will be treated as "namespace:attr" + + :param kwargs: dict with name=value pairs + :return: self + """ + for name, value in kwargs.items(): + self.set(name, value) + return self + + def pop(self, attr, default=None): + """Delete/remove the element attribute named, with addNS support.""" + if attr in self.wrapped_attrs: + # Always keep the local wrapped class up to date. + (prop, cls) = self.wrapped_attrs[attr] + value = getattr(self, prop) + setattr(self, prop, cls(None)) + return value + return self.attrib.pop(addNS(attr), default) # pylint: disable=no-member + + @overload + def add( + self, child1: BaseElement, child2: BaseElement, *children: BaseElement + ) -> Tuple[BaseElement]: + ... + + @overload + def add(self, child: T) -> T: + ... + + def add(self, *children): + """ + Like append, but will do multiple children and will return + children or only child + """ + for child in children: + self.append(child) + return children if len(children) != 1 else children[0] + + def tostring(self): + """Return this element as it would appear in an svg document""" + # This kind of hack is pure maddness, but etree provides very little + # in the way of fragment printing, prefering to always output valid xml + + svg = SvgOutputMixin.get_template(width=0, height=0).getroot() + svg.append(self.copy()) + return svg.tostring().split(b">\n ", 1)[-1][:-6] + + def set_random_id( + self, + prefix: Optional[str] = None, + size: Optional[int] = None, + backlinks: bool = False, + blacklist: Optional[List[str]] = None, + ): + """Sets the id attribute if it is not already set. + + The id consists of a prefix and an appended random integer of length size. + Args: + prefix (str, optional): the prefix of the new ID. Defaults to the tag name. + size (Optional[int], optional): number of digits of the second part of the + id. If None, the length is chosen based on the amount of existing + objects. Defaults to None. + + .. versionchanged:: 1.2 + The default of this value has been changed from 4 to None. + backlinks (bool, optional): Whether to update the links in existing objects + that reference this element. Defaults to False. + blacklist (List[str], optional): An additional list of ids that are not + allowed to be used. This is useful when bulk inserting objects. + Defaults to None. + + .. versionadded:: 1.2 + """ + prefix = str(self) if prefix is None else prefix + self.set_id( + self.root.get_unique_id(prefix, size=size, blacklist=blacklist), + backlinks=backlinks, + ) + + def set_random_ids( + self, + prefix: Optional[str] = None, + levels: int = -1, + backlinks: bool = False, + blacklist: Optional[List[str]] = None, + ): + """Same as set_random_id, but will apply also to children + + The id consists of a prefix and an appended random integer of length size. + Args: + prefix (str, optional): the prefix of the new ID. Defaults to the tag name. + levels (int, optional): the depth of the tree traversion, if negative, no + limit is imposed. Defaults to -1. + backlinks (bool, optional): Whether to update the links in existing objects + that reference this element. Defaults to False. + blacklist (List[str], optional): An additional list of ids that are not + allowed to be used. This is useful when bulk inserting objects. + Defaults to None. + + .. versionadded:: 1.2 + """ + self.set_random_id(prefix=prefix, backlinks=backlinks, blacklist=blacklist) + if levels != 0: + for child in self: + if hasattr(child, "set_random_ids"): + child.set_random_ids( + prefix=prefix, levels=levels - 1, backlinks=backlinks + ) + + eid = property(lambda self: self.get_id()) + """Property to access the element's id; will set a new unique id if not set.""" + + def get_id(self, as_url=0) -> str: + """Get the id for the element, will set a new unique id if not set. + + as_url - If set to 1, returns #{id} as a string + If set to 2, returns url(#{id}) as a string + + Args: + as_url (int, optional): + - If set to 1, returns #{id} as a string + - If set to 2, returns url(#{id}) as a string. + + Defaults to 0. + + .. versionadded:: 1.1 + + Returns: + str: formatted id + """ + if "id" not in self.attrib: + self.set_random_id(self.TAG) + eid = self.get("id") + if as_url > 0: + eid = "#" + eid + if as_url > 1: + eid = f"url({eid})" + return eid + + def set_id(self, new_id, backlinks=False): + """Set the id and update backlinks to xlink and style urls if needed""" + old_id = self.get("id", None) + self.set("id", new_id) + if backlinks and old_id: + for elem in self.root.getElementsByHref(old_id): + elem.href = self + for attr in ["clip-path", "mask"]: + for elem in self.root.getElementsByHref(old_id, attribute=attr): + elem.set(attr, self.get_id(2)) + for elem in self.root.getElementsByStyleUrl(old_id): + elem.style.update_urls(old_id, new_id) + + @property + def root(self): + """Get the root document element from any element descendent""" + root, parent = self, self + while parent is not None: + root, parent = parent, parent.getparent() + + if not isinstance(root, ISVGDocumentElement): + raise FragmentError("Element fragment does not have a document root!") + return root + + def get_or_create(self, xpath, nodeclass=None, prepend=False): + """Get or create the given xpath, pre/append new node if not found. + + .. versionchanged:: 1.1 + The ``nodeclass`` attribute is optional; if not given, it is looked up + using :func:`~inkex.elements._parser.NodeBasedLookup.find_class`""" + node = self.findone(xpath) + if node is None: + if nodeclass is None: + nodeclass = NodeBasedLookup.find_class(xpath) + node = nodeclass() + if prepend: + self.insert(0, node) + else: + self.append(node) + return node + + def descendants(self): + """Walks the element tree and yields all elements, parent first + + .. versionchanged:: 1.1 + The ``*types`` attribute was removed + + """ + + return ElementList( + self.root, + [ + element + for element in self.iter() + if isinstance(element, (BaseElement, str)) + ], + ) + + def ancestors(self, elem=None, stop_at=()): + """ + Walk the parents and yield all the ancestor elements, parent first + + Args: + elem (BaseElement, optional): If provided, it will stop at the last common + ancestor. Defaults to None. + + .. versionadded:: 1.1 + + stop_at (tuple, optional): If provided, it will stop at the first parent + that is in this list. Defaults to (). + + .. versionadded:: 1.1 + + Returns: + ElementList: list of ancestors + """ + + return ElementList(self.root, self._ancestors(elem=elem, stop_at=stop_at)) + + def _ancestors(self, elem, stop_at): + if isinstance(elem, BaseElement): + stop_at = list(elem.ancestors()) + for parent in self.iterancestors(): + yield parent + if parent in stop_at: + break + + def backlinks(self, *types): + """Get elements which link back to this element, like ancestors but via + xlinks""" + if not types or isinstance(self, types): + yield self + my_id = self.get("id") + if my_id is not None: + elems = list(self.root.getElementsByHref(my_id)) + list( + self.root.getElementsByStyleUrl(my_id) + ) + for elem in elems: + if hasattr(elem, "backlinks"): + for child in elem.backlinks(*types): + yield child + + def xpath(self, pattern, namespaces=NSS): # pylint: disable=dangerous-default-value + """Wrap xpath call and add svg namespaces""" + return super().xpath(pattern, namespaces=namespaces) + + def findall( + self, pattern, namespaces=NSS + ): # pylint: disable=dangerous-default-value + """Wrap findall call and add svg namespaces""" + return super().findall(pattern, namespaces=namespaces) + + def findone(self, xpath): + """Gets a single element from the given xpath or returns None""" + el_list = self.xpath(xpath) + return el_list[0] if el_list else None + + def delete(self): + """Delete this node from it's parent node""" + if self.getparent() is not None: + self.getparent().remove(self) + + def remove_all(self, *types): + """Remove all children or child types + + .. versionadded:: 1.1""" + types = tuple(NodeBasedLookup.find_class(t) for t in types) + for child in self: + if not types or isinstance(child, types): + self.remove(child) + + def replace_with(self, elem): + """Replace this element with the given element""" + self.addnext(elem) + if not elem.get("id") and self.get("id"): + elem.set("id", self.get("id")) + if not elem.label and self.label: + elem.label = self.label + self.delete() + return elem + + def copy(self): + """Make a copy of the element and return it""" + elem = deepcopy(self) + elem.set("id", None) + return elem + + def duplicate(self): + """Like copy(), but the copy stays in the tree and sets a random id on the + duplicate. + + .. versionchanged:: 1.2 + A random id is also set on all the duplicate's descendants""" + elem = self.copy() + self.addnext(elem) + elem.set_random_ids() + return elem + + def __str__(self): + # We would do more here, but lxml is VERY unpleseant when it comes to + # namespaces, basically over printing details and providing no + # supression mechanisms to turn off xml's over engineering. + return str(self.tag).split("}", maxsplit=1)[-1] + + @property + def href(self): + """Returns the referred-to element if available + + .. versionchanged:: 1.1 + A setter for href was added.""" + ref = self.get("href") or self.get("xlink:href") + if not ref: + return None + return self.root.getElementById(ref.strip("#")) + + @href.setter + def href(self, elem): + """Set the href object""" + if isinstance(elem, BaseElement): + elem = elem.get_id() + if self.get("href"): + self.set("href", "#" + elem) + else: + self.set("xlink:href", "#" + elem) + + @property + def label(self): + """Returns the inkscape label""" + return self.get("inkscape:label", None) + + @label.setter + def label(self, value): + """Sets the inkscape label""" + self.set("inkscape:label", str(value)) + + def is_sensitive(self): + """Return true if this element is sensitive in inkscape + + .. versionadded:: 1.1""" + return self.get("sodipodi:insensitive", None) != "true" + + def set_sensitive(self, sensitive=True): + """Set the sensitivity of the element/layer + + .. versionadded:: 1.1""" + # Sensitive requires None instead of 'false' + self.set("sodipodi:insensitive", ["true", None][sensitive]) + + @property + def unit(self): + """Return the unit being used by the owning document, cached + + .. versionadded:: 1.1""" + try: + return self.root.unit + except FragmentError: + return "px" # Don't cache. + + @staticmethod + def to_dimensional(value, to_unit="px"): + """Convert a value given in user units (px) the given unit type + + .. versionadded:: 1.2""" + return convert_unit(value, to_unit) + + @staticmethod + def to_dimensionless(value): + """Convert a length value into user units (px) + + .. versionadded:: 1.2""" + return convert_unit(value, "px") + + def uutounit(self, value, to_unit="px"): + """Convert a unit value to a given unit. If the value does not have a unit, + "Document" units are assumed. "Document units" are an Inkscape-specific concept. + For most use-cases, :func:`to_dimensional` is more appropriate. + + .. versionadded:: 1.1""" + return convert_unit(value, to_unit, default=self.unit) + + def unittouu(self, value): + """Convert a unit value into document units. "Document unit" is an + Inkscape-specific concept. For most use-cases, :func:`viewport_to_unit` (when + the size of an object given in viewport units is needed) or + :func:`to_dimensionless` (when the equivalent value without unit is needed) is + more appropriate. + + .. versionadded:: 1.1""" + return convert_unit(value, self.unit) + + def unit_to_viewport(self, value, unit="px"): + """Converts a length value to viewport units, as defined by the width/height + element on the root (i.e. applies the equivalent transform of the viewport) + + .. versionadded:: 1.2""" + return self.to_dimensional( + self.to_dimensionless(value) * self.root.equivalent_transform_scale, unit + ) + + def viewport_to_unit(self, value, unit="px"): + """Converts a length given on the viewport to the specified unit in the user + coordinate system + + .. versionadded:: 1.2""" + return self.to_dimensional( + self.to_dimensionless(value) / self.root.equivalent_transform_scale, unit + ) + + def add_unit(self, value): + """Add document unit when no unit is specified in the string. + + .. versionadded:: 1.1""" + return render_unit(value, self.unit) + + def cascaded_style(self): + """Returns the cascaded style of an element (all rules that apply the element + itself), based on the stylesheets, the presentation attributes and the inline + style using the respective specificity of the style. + + see https://www.w3.org/TR/CSS22/cascade.html#cascading-order + + .. versionadded:: 1.2 + + Returns: + Style: the cascaded style + + """ + return Style.cascaded_style(self) + + def specified_style(self): + """Returns the specified style of an element, i.e. the cascaded style + + inheritance, see https://www.w3.org/TR/CSS22/cascade.html#specified-value. + + Returns: + Style: the specified style + + .. versionadded:: 1.2 + """ + return Style.specified_style(self) + + def presentation_style(self): + """Return presentation attributes of an element as style + + .. versionadded:: 1.2""" + style = Style() + for key in self.keys(): + if ( + key in all_properties + and all_properties[key][2] + and not issubclass(all_properties[key][0], ShorthandValue) + ): + # Shorthands cannot be set by presentation attributes + result = BaseStyleValue.factory_errorhandled( + key=key, value=self.attrib[key] + ) + if result is not None: # parsing error + style[key] = result[1] + return style + + def composed_transform(self, other=None): + """Calculate every transform down to the other element + if none specified the transform is to the root document element + """ + parent = self.getparent() + if parent is not other and isinstance(parent, BaseElement): + return parent.composed_transform(other) @ self.transform + return self.transform + + +NodeBasedLookup.default = BaseElement + + +class ShapeElement(BaseElement): + """Elements which have a visible representation on the canvas""" + + @property + def path(self): + """Gets the outline or path of the element, this may be a simple bounding box""" + return Path(self.get_path()) + + @path.setter + def path(self, path): + self.set_path(path) + + @property + def clip(self): + """Gets the clip path element (if any). May be set through CSS. + + .. versionadded:: 1.1""" + ref = self.get("clip-path") + if not ref: + return self.specified_style()("clip-path") + return self.root.getElementById(ref) + + @clip.setter + def clip(self, elem): + self.set("clip-path", elem.get_id(as_url=2)) + + def get_path(self) -> Path: + """Generate a path for this object which can inform the bounding box""" + raise NotImplementedError( + f"Path should be provided by svg elem {self.typename}." + ) + + def set_path(self, path): + """Set the path for this object (if possible)""" + raise AttributeError( + f"Path can not be set on this element: {self.typename} <- {path}." + ) + + def to_path_element(self): + """Replace this element with a path element""" + from ._polygons import PathElement + + elem = PathElement() + elem.path = self.path + elem.style = self.effective_style() + elem.transform = self.transform + return elem + + def effective_style(self): + """Without parent styles, what is the effective style is""" + return self.style + + def bounding_box(self, transform=None): + # type: (Optional[Transform]) -> Optional[BoundingBox] + """BoundingBox of the shape + + .. versionchanged:: 1.1 + result adjusted for element's clip path if applicable.""" + shape_box = self.shape_box(transform) + clip = self.clip + if clip is None or shape_box is None: + return shape_box + return shape_box & clip.bounding_box(Transform(transform) @ self.transform) + + def shape_box(self, transform=None): + # type: (Optional[Transform]) -> Optional[BoundingBox] + """BoundingBox of the unclipped shape + + .. versionadded:: 1.1 + Previous :func:`bounding_box` function, returning the bounding box + without computing the effect of a possible clip.""" + path = self.path.to_absolute() + if transform is True: + path = path.transform(self.composed_transform()) + else: + path = path.transform(self.transform) + if transform: # apply extra transformation + path = path.transform(transform) + return path.bounding_box() + + def is_visible(self): + """Returns false if this object is invisible + + .. versionchanged:: 1.3 + rely on cascaded_style() to include CSS and presentation attributes + include `visibility` attribute with check for inherit + include ancestors + + .. versionadded:: 1.1""" + return self._is_visible() + + def _is_visible(self, inherit_visibility=True): + # iterate over self and ancestors + for element in [self] + list(self.ancestors()): + get_style = element.cascaded_style().get + # case display:none + if get_style("display", "inline") == "none": + return False + # case opacity:0 + if not float(get_style("opacity", 1.0)): + return False + # only check if childs visibility is inherited + if inherit_visibility: + # case visibility:hidden + if get_style("visibility", "inherit") in ( + "hidden", + "collapse", + ): + return False + # case visibility: not inherit + elif get_style("visibility", "inherit") != "inherit": + inherit_visibility = False + + return True + + def get_line_height_uu(self): + """Returns the specified value of line-height, in user units + + .. versionadded:: 1.1""" + style = self.specified_style() + font_size = style("font-size") # already in uu + line_height = style("line-height") + parsed = parse_unit(line_height) + if parsed is None: + return font_size * 1.2 + if parsed[1] == "%": + return font_size * parsed[0] * 0.01 + return self.to_dimensionless(line_height) + + +class ViewboxMixin: + """Mixin for elements with viewboxes, such as , """ + + def parse_viewbox(self, vbox: Optional[str]) -> Optional[List[float]]: + """Parses a viewbox. If an error occurs during parsing, + (0, 0, 0, 0) is returned. If the viewbox is None, None is returned. + + .. versionadded:: 1.3""" + if vbox is not None and isinstance(vbox, str): + try: + result = [float(unit) for unit in re.split(r",\s*|\s+", vbox)] + except ValueError: + result = [] + if len(result) != 4: + result = [0, 0, 0, 0] + return result + return None diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_filters.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_filters.py new file mode 100644 index 0000000..8744f6d --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_filters.py @@ -0,0 +1,516 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) 2020 Martin Owens +# Sergei Izmailov +# Thomas Holder +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# pylint: disable=arguments-differ +""" +Element interface for patterns, filters, gradients and path effects. +""" +from __future__ import annotations +from typing import List, Tuple, TYPE_CHECKING, Optional + +from lxml import etree + +from ..utils import parse_percent + +from ..transforms import Transform + +from ..styles import Style + +from ._utils import addNS +from ._base import BaseElement, ViewboxMixin +from ._groups import GroupBase +from ..units import convert_unit + + +if TYPE_CHECKING: + from ._svg import SvgDocumentElement + + +class Filter(BaseElement): + """A filter (usually in defs)""" + + tag_name = "filter" + + def add_primitive(self, fe_type, **args): + """Create a filter primitive with the given arguments""" + elem = etree.SubElement(self, addNS(fe_type, "svg")) + elem.update(**args) + return elem + + class Primitive(BaseElement): + """Any filter primitive""" + + class Blend(Primitive): + """Blend Filter element""" + + tag_name = "feBlend" + + class ColorMatrix(Primitive): + """ColorMatrix Filter element""" + + tag_name = "feColorMatrix" + + class ComponentTransfer(Primitive): + """ComponentTransfer Filter element""" + + tag_name = "feComponentTransfer" + + class Composite(Primitive): + """Composite Filter element""" + + tag_name = "feComposite" + + class ConvolveMatrix(Primitive): + """ConvolveMatrix Filter element""" + + tag_name = "feConvolveMatrix" + + class DiffuseLighting(Primitive): + """DiffuseLightning Filter element""" + + tag_name = "feDiffuseLighting" + + class DisplacementMap(Primitive): + """Flood Filter element""" + + tag_name = "feDisplacementMap" + + class Flood(Primitive): + """DiffuseLightning Filter element""" + + tag_name = "feFlood" + + class GaussianBlur(Primitive): + """GaussianBlur Filter element""" + + tag_name = "feGaussianBlur" + + class Image(Primitive): + """Image Filter element""" + + tag_name = "feImage" + + class Merge(Primitive): + """Merge Filter element""" + + tag_name = "feMerge" + + class Morphology(Primitive): + """Morphology Filter element""" + + tag_name = "feMorphology" + + class Offset(Primitive): + """Offset Filter element""" + + tag_name = "feOffset" + + class SpecularLighting(Primitive): + """SpecularLighting Filter element""" + + tag_name = "feSpecularLighting" + + class Tile(Primitive): + """Tile Filter element""" + + tag_name = "feTile" + + class Turbulence(Primitive): + """Turbulence Filter element""" + + tag_name = "feTurbulence" + + +class Stop(BaseElement): + """Gradient stop + + .. versionadded:: 1.1""" + + tag_name = "stop" + + @property + def offset(self) -> float: + """The offset of the gradient stop""" + value = self.get("offset", default="0") + return parse_percent(value) + + @offset.setter + def offset(self, number): + self.set("offset", number) + + def interpolate(self, other, fraction): + """Interpolate gradient stops""" + from ..tween import StopInterpolator + + return StopInterpolator(self, other).interpolate(fraction) + + +class Pattern(BaseElement, ViewboxMixin): + """Pattern element which is used in the def to control repeating fills""" + + tag_name = "pattern" + WRAPPED_ATTRS = BaseElement.WRAPPED_ATTRS + (("patternTransform", Transform),) + + def get_fallback(self, prop, default="0"): + val = self.get(prop, None) + if val is None: + if isinstance(self.href, Pattern): + return getattr(self.href, prop) + val = default + return val + + x = property(lambda self: self.get_fallback("x")) + y = property(lambda self: self.get_fallback("y")) + width = property(lambda self: self.get_fallback("width")) + height = property(lambda self: self.get_fallback("height")) + patternUnits = property( + lambda self: self.get_fallback("patternUnits", "objectBoundingBox") + ) + + def get_viewbox(self) -> Optional[List[float]]: + """Get the viewbox of the pattern, falling back to the href's viewbox + + .. versionadded:: 1.3""" + vbox = self.get("viewBox", None) + if vbox is None: + if isinstance(self.href, Pattern): + return self.href.get_viewbox() + return self.parse_viewbox(vbox) + + def get_effective_parent(self, depth=0, maxDepth=10): + """If a pattern has no children, but a href, it uses the children from the href. + Avoids infinite recursion. + + .. versionadded:: 1.3""" + if ( + len(self) == 0 + and self.href is not None + and isinstance(self.href, Pattern) + and depth < maxDepth + ): + return self.href.get_effective_parent(depth + 1, maxDepth) + return self + + +class Mask(GroupBase): + """A structural object that serves as opacity mask + + .. versionadded:: 1.3""" + + tag_name = "mask" + + def get_fallback(self, prop, default="0"): + return self.to_dimensionless(self.get(prop, default)) + + x = property(lambda self: self.get_fallback("x")) + y = property(lambda self: self.get_fallback("y")) + width = property(lambda self: self.get_fallback("width")) + height = property(lambda self: self.get_fallback("height")) + maskUnits = property(lambda self: self.get("maskUnits", "objectBoundingBox")) + + +class Gradient(BaseElement): + """A gradient instruction usually in the defs.""" + + WRAPPED_ATTRS = BaseElement.WRAPPED_ATTRS + (("gradientTransform", Transform),) + """Additional to the :attr:`~inkex.elements._base.BaseElement.WRAPPED_ATTRS` of + :class:`~inkex.elements._base.BaseElement`, ``gradientTransform`` is wrapped.""" + + orientation_attributes = () # type: Tuple[str, ...] + """ + .. versionadded:: 1.1 + """ + + @property + def stops(self): + """Return an ordered list of own or linked stop nodes + + .. versionadded:: 1.1""" + gradcolor = ( + self.href + if isinstance(self.href, (LinearGradient, RadialGradient)) + else self + ) + return [child for child in gradcolor if isinstance(child, Stop)] + + @property + def stop_offsets(self): + # type: () -> List[float] + """Return a list of own or linked stop offsets + + .. versionadded:: 1.1""" + return [child.offset for child in self.stops] + + @property + def stop_styles(self): # type: () -> List[Style] + """Return a list of own or linked offset styles + + .. versionadded:: 1.1""" + return [child.style for child in self.stops] + + def remove_orientation(self): + """Remove all orientation attributes from this element + + .. versionadded:: 1.1""" + for attr in self.orientation_attributes: + self.pop(attr) + + def interpolate( + self, + other: LinearGradient, + fraction: float, + svg: Optional[SvgDocumentElement] = None, + ): + """Interpolate with another gradient. + + .. versionadded:: 1.1""" + from ..tween import GradientInterpolator + + return GradientInterpolator(self, other, svg).interpolate(fraction) + + def stops_and_orientation(self): + """Return a copy of all the stops in this gradient + + .. versionadded:: 1.1""" + stops = self.copy() + stops.remove_orientation() + orientation = self.copy() + orientation.remove_all(Stop) + return stops, orientation + + def get_percentage_parsed_unit(self, attribute, value, svg=None): + """Parses an attribute of a gradient, respecting percentage values of + "userSpaceOnUse" as percentages of document size. See + https://www.w3.org/TR/SVG2/pservers.html#LinearGradientAttributes for details + + .. versionadded:: 1.3""" + if isinstance(value, (float, int)): + return value + value = value.strip() + if len(value) > 0 and value[-1] == "%": + try: + value = float(value.strip()[0:-1]) / 100.0 + gradientunits = self.get("gradientUnits", "objectBoundingBox") + if gradientunits == "userSpaceOnUse": + if svg is None: + raise ValueError("Need root SVG to determine percentage value") + bbox = svg.get_page_bbox() + if attribute in ("cx", "fx", "x1", "x2"): + return bbox.width * value + if attribute in ("cy", "fy", "y1", "y2"): + return bbox.height * value + if attribute in ("r"): + return bbox.diagonal_length * value + if gradientunits == "objectBoundingBox": + return value + except ValueError: + value = None + return convert_unit(value, "px") + + def _get_or_href(self, attr, default, svg=None): + val = self.get(attr) + if val is None: + if type(self.href) is type(self): + return getattr(self.href, attr)() + val = default + return self.get_percentage_parsed_unit(attr, val, svg) + + +class LinearGradient(Gradient): + """LinearGradient element""" + + tag_name = "linearGradient" + orientation_attributes = ("x1", "y1", "x2", "y2") + """ + .. versionadded:: 1.1 + """ + + def apply_transform(self): # type: () -> None + """Apply transform to orientation points and set it to identity. + .. versionadded:: 1.1 + """ + trans = self.pop("gradientTransform") + pt1 = ( + self.to_dimensionless(self.get("x1")), + self.to_dimensionless(self.get("y1")), + ) + pt2 = ( + self.to_dimensionless(self.get("x2")), + self.to_dimensionless(self.get("y2")), + ) + p1t = trans.apply_to_point(pt1) + p2t = trans.apply_to_point(pt2) + self.update( + x1=self.to_dimensionless(p1t[0]), + y1=self.to_dimensionless(p1t[1]), + x2=self.to_dimensionless(p2t[0]), + y2=self.to_dimensionless(p2t[1]), + ) + + def x1(self, svg=None): + """Get the x1 attribute + + .. versionadded:: 1.3""" + return self._get_or_href("x1", "0%", svg) + + def x2(self, svg=None): + """Get the x2 attribute + + .. versionadded:: 1.3""" + return self._get_or_href("x2", "100%", svg) + + def y1(self, svg=None): + """Get the y1 attribute + + .. versionadded:: 1.3""" + return self._get_or_href("y1", "0%", svg) + + def y2(self, svg=None): + """Get the y2 attribute + + .. versionadded:: 1.3""" + return self._get_or_href("y2", "0%", svg) + + +class RadialGradient(Gradient): + """RadialGradient element""" + + tag_name = "radialGradient" + orientation_attributes = ("cx", "cy", "fx", "fy", "r") + """ + .. versionadded:: 1.1 + """ + + def apply_transform(self): # type: () -> None + """Apply transform to orientation points and set it to identity. + + .. versionadded:: 1.1 + """ + trans = self.pop("gradientTransform") + pt1 = ( + self.to_dimensionless(self.get("cx")), + self.to_dimensionless(self.get("cy")), + ) + pt2 = ( + self.to_dimensionless(self.get("fx")), + self.to_dimensionless(self.get("fy")), + ) + p1t = trans.apply_to_point(pt1) + p2t = trans.apply_to_point(pt2) + self.update( + cx=self.to_dimensionless(p1t[0]), + cy=self.to_dimensionless(p1t[1]), + fx=self.to_dimensionless(p2t[0]), + fy=self.to_dimensionless(p2t[1]), + ) + + def cx(self, svg=None): + """Get the effective cx (horizontal center) attribute in user units + + .. versionadded:: 1.3""" + return self._get_or_href("cx", "50%", svg) + + def cy(self, svg=None): + """Get the effective cy (vertical center) attribute in user units + + .. versionadded:: 1.3""" + return self._get_or_href("cy", "50%", svg) + + def fx(self, svg=None): + """Get the effective fx (horizontal focal point) attribute in user units + + .. versionadded:: 1.3""" + return self._get_or_href("fx", self.cx(svg), svg) + + def fy(self, svg=None): + """Get the effective fx (vertical focal point) attribute in user units + + .. versionadded:: 1.3""" + return self._get_or_href("fy", self.cy(svg), svg) + + def r(self, svg=None): + """Get the effective r (gradient radius) attribute in user units + + .. versionadded:: 1.3""" + return self._get_or_href("r", "50%", svg) + + +class PathEffect(BaseElement): + """Inkscape LPE element""" + + tag_name = "inkscape:path-effect" + + +class MeshGradient(Gradient): + """Usable MeshGradient XML base class + + .. versionadded:: 1.1""" + + tag_name = "meshgradient" + + @classmethod + def new_mesh(cls, pos=None, rows=1, cols=1, autocollect=True): + """Return skeleton of 1x1 meshgradient definition.""" + # initial point + if pos is None or len(pos) != 2: + pos = [0.0, 0.0] + # create nested elements for rows x cols mesh + meshgradient = cls() + for _ in range(rows): + meshrow: BaseElement = meshgradient.add(MeshRow()) + for _ in range(cols): + meshrow.append(MeshPatch()) + # set meshgradient attributes + meshgradient.set("gradientUnits", "userSpaceOnUse") + meshgradient.set("x", pos[0]) + meshgradient.set("y", pos[1]) + if autocollect: + meshgradient.set("inkscape:collect", "always") + return meshgradient + + +class MeshRow(BaseElement): + """Each row of a mesh gradient + + .. versionadded:: 1.1""" + + tag_name = "meshrow" + + +class MeshPatch(BaseElement): + """Each column or 'patch' in a mesh gradient + + .. versionadded:: 1.1""" + + tag_name = "meshpatch" + + def stops(self, edges, colors): + """Add or edit meshpatch stops with path and stop-color.""" + # iterate stops based on number of edges (path data) + for i, edge in enumerate(edges): + if i < len(self): + stop = self[i] + else: + stop = self.add(Stop()) + + # set edge path data + stop.set("path", str(edge)) + # set stop color + stop.style["stop-color"] = str(colors[i % 2]) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_groups.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_groups.py new file mode 100644 index 0000000..e72620c --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_groups.py @@ -0,0 +1,159 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) 2020 Martin Owens +# Sergei Izmailov +# Ryan Jarvis +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# pylint: disable=arguments-differ +""" +Interface for all group based elements such as Groups, Use, Markers etc. +""" + +from lxml import etree # pylint: disable=unused-import + +from ..paths import Path +from ..transforms import Transform + +from ._utils import addNS +from ._base import ShapeElement, ViewboxMixin +from ._polygons import PathElement + +try: + from typing import Optional, List # pylint: disable=unused-import +except ImportError: + pass + + +class GroupBase(ShapeElement): + """Base Group element""" + + def get_path(self): + ret = Path() + for child in self: + if isinstance(child, ShapeElement): + ret += child.path.transform(child.transform) + return ret + + def shape_box(self, transform=None): + bbox = None + effective_transform = Transform(transform) @ self.transform + for child in self: + if isinstance(child, ShapeElement): + child_bbox = child.bounding_box(transform=effective_transform) + if child_bbox is not None: + bbox += child_bbox + return bbox + + def bake_transforms_recursively(self, apply_to_paths=True): + """Bake transforms, i.e. each leaf node has the effective transform (starting + from this group) set, and parent transforms are removed. + + .. versionadded:: 1.4 + + Args: + apply_to_paths (bool, optional): For path elements, the + path data is transformed with its effective transform. Nodes and handles + will have the same position as before, but visual appearance of the + stroke may change (stroke-width is not touched). Defaults to True. + """ + # pylint: disable=attribute-defined-outside-init + self.transform: Transform + for element in self: + if isinstance(element, PathElement) and apply_to_paths: + element.path = element.path.transform(self.transform) + else: + element.transform = self.transform @ element.transform + if isinstance(element, GroupBase): + element.bake_transforms_recursively(apply_to_paths) + self.transform = None + + +class Group(GroupBase): + """Any group element (layer or regular group)""" + + tag_name = "g" + + @classmethod + def new(cls, label, *children, **attrs): + attrs["inkscape:label"] = label + return super().new(*children, **attrs) + + def effective_style(self): + """A blend of each child's style mixed together (last child wins)""" + style = self.style + for child in self: + style.update(child.effective_style()) + return style + + @property + def groupmode(self): + """Return the type of group this is""" + return self.get("inkscape:groupmode", "group") + + +class Layer(Group): + """Inkscape extension of svg:g""" + + def _init(self): + self.set("inkscape:groupmode", "layer") + + @classmethod + def is_class_element(cls, elem): + # type: (etree.Element) -> bool + return elem.attrib.get(addNS("inkscape:groupmode"), None) == "layer" + + +class Anchor(GroupBase): + """An anchor or link tag""" + + tag_name = "a" + + @classmethod + def new(cls, href, *children, **attrs): + attrs["xlink:href"] = href + return super().new(*children, **attrs) + + +class ClipPath(GroupBase): + """A path used to clip objects""" + + tag_name = "clipPath" + + +class Marker(GroupBase, ViewboxMixin): + """The element defines the graphic that is to be used for drawing + arrowheads or polymarkers on a given , , or + element.""" + + tag_name = "marker" + + def get_viewbox(self) -> List[float]: + """Returns the viewbox of the Marker, falling back to + [0 0 markerWidth markerHeight] + + .. versionadded:: 1.3""" + vbox = self.get("viewBox", None) + result = self.parse_viewbox(vbox) + if result is None: + # use viewport, https://www.w3.org/TR/SVG11/painting.html#MarkerElement + return [ + 0, + 0, + self.to_dimensionless(self.get("markerWidth")), + self.to_dimensionless(self.get("markerHeight")), + ] + return result diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_image.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_image.py new file mode 100644 index 0000000..9294d73 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_image.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) 2020 - Martin Owens +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Image element interface. +""" + +from ._polygons import RectangleBase + + +class Image(RectangleBase): + """Provide a useful extension for image elements""" + + tag_name = "image" diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_meta.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_meta.py new file mode 100644 index 0000000..eceb2c1 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_meta.py @@ -0,0 +1,466 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) 2020 Martin Owens +# Maren Hachmann +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# pylint: disable=arguments-differ +""" +Provide extra utility to each svg element type specific to its type. + +This is useful for having a common interface for each element which can +give path, transform, and property access easily. +""" + +from __future__ import annotations +import math + +from typing import List, Optional + +from lxml import etree + +from inkex.deprecated.meta import deprecate + +from ..styles import StyleSheet +from ..transforms import BoundingBox, Vector2d, VectorLike, DirectedLineSegment + +from ._base import BaseElement + + +class Defs(BaseElement): + """A header defs element, one per document""" + + tag_name = "defs" + + +class StyleElement(BaseElement): + """A CSS style element containing multiple style definitions""" + + tag_name = "style" + + def set_text(self, content): + """Sets the style content text as a CDATA section""" + self.text = etree.CDATA(str(content)) + + def stylesheet(self): + """Return the StyleSheet() object for the style tag""" + return StyleSheet(self.text, callback=self.set_text) + + +class Script(BaseElement): + """A javascript tag in SVG""" + + tag_name = "script" + + def set_text(self, content): + """Sets the style content text as a CDATA section""" + self.text = etree.CDATA(str(content)) + + +class Desc(BaseElement): + """Description element""" + + tag_name = "desc" + + +class Title(BaseElement): + """Title element""" + + tag_name = "title" + + +class NamedView(BaseElement): + """The NamedView element is Inkscape specific metadata about the file""" + + tag_name = "sodipodi:namedview" + + current_layer = property(lambda self: self.get("inkscape:current-layer")) + + @property + def center(self): + """Returns view_center in terms of document units""" + return Vector2d( + self.root.viewport_to_unit(self.get("inkscape:cx") or 0), + self.root.viewport_to_unit(self.get("inkscape:cy") or 0), + ) + + def get_guides(self): + """Returns a list of guides""" + return self.findall("sodipodi:guide") + + def add_guide(self, position, orient=True, name=None) -> Guide: + """Creates a new guide in this namedview + + .. versionadded:: 1.3 + + Args: + position: a float containing the y position for ``orient is True``, or + the x position for ``orient is False``. The position is specified in the + post-1.0 coordinate system, i.e. y=0 is at the top left of the viewbox, + positive y axis pointing down. + + Alternatively, the position may be given as Tuple (or VectorLike) + orient: True for horizontal, False for Vertical + + alternatively: Tuple / Vector specifying x and y coordinates of the + normal vector of the guide, or the (clockwise) angle between the + horizontal axis and the guide. Defaults to True (horizontal) + name: label of the guide + + Returns: + the created guide""" + elem = self.add(Guide()) + + if orient is True: + elem.set_position(0, position, (0, -1)) + elif orient is False: + elem.set_position(position, self.root.viewbox_height, (1, 0)) + else: + pos = Vector2d(position) + elem.set_position(pos.x, pos.y, orient) + if name: + elem.set("inkscape:label", str(name)) + return elem + + @deprecate + def new_guide(self, position, orient=True, name=None): + """ + .. deprecated:: 1.3 + Use :func:`add_guide` instead. + + Creates a new guide in this namedview + + Args: + position: a float containing the y position for ``orient is True``, or + the x position for ``orient is False`` + + .. versionchanged:: 1.2 + Alternatively, the position may be given as Tuple (or VectorLike) + orient: True for horizontal, False for Vertical + + .. versionchanged:: 1.2 + Tuple / Vector specifying x and y coordinates of the normal vector + of the guide. + name: label of the guide + + Returns: + the created guide""" + if orient is True: + elem = Guide().move_to(0, position, (0, 1)) + elif orient is False: + elem = Guide().move_to(position, 0, (1, 0)) + else: + elem = Guide().move_to(*position, orient) + if name: + elem.set("inkscape:label", str(name)) + return self.add(elem) + + @deprecate + def new_unique_guide( + self, position: VectorLike, orientation: VectorLike + ) -> Optional[Guide]: + """ + .. deprecated:: 1.3 + Use :func:`add_unique_guide` instead. + + Add a guide iif there is no guide that looks the same. + + .. versionadded:: 1.2 + + """ + elem = Guide().move_to(position[0], position[1], orientation) + return self.add(elem) if self.get_similar_guide(elem) is None else None + + def add_unique_guide( + self, position: VectorLike, orientation: VectorLike + ) -> Optional[Guide]: + """Add a guide iif there is no guide that looks the same. + + .. versionadded:: 1.3 + + Args: + position: Position as Tuple / Vector + orientation: Tuple / Vector specifying x and y coordinates of the normal + vector of the guide. + name: label of the guide + """ + elem = self.add(Guide()).set_position(position[0], position[1], orientation) + if self.get_similar_guide(elem) is not None: + self.remove(elem) + return None + return elem + + def get_similar_guide(self, other: Guide) -> Optional[Guide]: + """Check if the namedview contains a guide that looks identical to one + defined by (position, orientation) and is not identity (same element) as the + first one. If such a guide exists, return it; otherwise, return None. + + .. versionadded:: 1.2""" + for guide in self.get_guides(): + if Guide.guides_coincident(guide, other) and guide != other: + return guide + return None + + def _get_pages(self) -> List[Page]: + """Returns all page elements""" + return self.findall("inkscape:page") + + def _equivalent_page(self) -> Page: + """Returns an unrooted page based on the viewbox dimensions""" + return Page.new(self.root.viewbox_width, self.root.viewbox_height, 0, 0) + + def get_pages(self) -> List[Page]: + """Returns a list of pages within the document. For single page documents, + a detached page element with dimensions according to the viewbox will be + returned. + + .. versionadded:: 1.2 + + .. versionchanged:: 1.3 + For single-page documents, this function now returns the viewbox + dimensions. + """ + pages = self._get_pages() + if len(pages) < 2: + return [self._equivalent_page()] + return pages + + def new_page(self, x, y, width, height, label=None): + """Creates a new page in this namedview. Always add pages through this + function to ensure that single-page documents are treated correctly. + + .. versionadded:: 1.2 + + .. versionchanged:: 1.3 + If none exists, a page element with the viewbox dimensions will be + inserted before the new page.""" + if len(self._get_pages()) == 0: + self.add(self._equivalent_page()) + elem = Page(width=width, height=height, x=x, y=y) + if label: + elem.set("inkscape:label", str(label)) + return self.add(elem) + + +class Guide(BaseElement): + """An inkscape guide""" + + tag_name = "sodipodi:guide" + + @property + def orientation(self) -> Vector2d: + """Vector normal to the guide, in the pre-1.0 coordinate system (y axis upwards) + + .. versionadded:: 1.2""" + return Vector2d(self.get("orientation"), fallback=(1, 0)) + + @property + def angle(self) -> float: + """(Clockwise) angle between the guide and the horizontal axis in degrees + (i.e. what Inkscape 1.2+ shows as "Angle" in the guide properties) + + .. versionadded:: 1.3""" + return math.degrees(math.atan2(*self.orientation)) + + is_horizontal = property( + lambda self: self.orientation[0] == 0 and self.orientation[1] != 0 + ) + is_vertical = property( + lambda self: self.orientation[0] != 0 and self.orientation[1] == 0 + ) + + @property + def raw_position(self) -> Vector2d: + """Position of the guide handle. The y coordinate is flipped and relative + to the bottom of the viewbox, this is a remnant of the pre-1.0 coordinate system + """ + return Vector2d(self.get("position"), fallback=(0, 0)) + + def point(self): + """Use raw_position or position instead""" + return self.raw_position + + point = property(deprecate(point)) # type: ignore + + @property + def position(self) -> Vector2d: + """Position of the guide handle in normal coordinates, i.e. (0,0) is at + the top left corner of the viewbox, positive y axis pointing downwards. + + This function can only be used for guides which are attached to a root + svg element.""" + pos = self.raw_position + return Vector2d(pos.x, self.root.viewbox_height - pos.y) + + @classmethod + def new(cls, pos_x, pos_y, angle, **attrs): + guide = super().new(**attrs) + guide.set_position(pos_x, pos_y, angle=angle) + return guide + + def set_position(self, pos_x, pos_y, angle=None): + """ + Move this guide to the given x,y position and optionally set its orientation. + The coordinate system used is the post-1.0 coordinate system (origin in the + top left corner, y axis pointing down), which also defines the sense of + rotation. + + The guide must be rooted for this function to be used. Preferably, use + :func:`inkex.elements._meta.add_guide` to create a new guide. + + .. versionadded:: 1.3 + + Args: + pos_x (Union[str, int, float]): x position of the guide's reference point + pos_y (Union[str, int, float]): y position of the guide's reference point + angle (Union[str, float, int, tuple, list], optional): Angle may be a + string, float or integer, which will set the clockwise angle between the + horizontal axis and the guide. + + Alternatively, it may be a pair of numbers (tuple) which will be set + as normal vector. + + If not given at all, the orientation remains unchanged. + Defaults to None. + + Returns: + Guide: the modified guide + """ + pos_y = self.root.viewbox_height - float(pos_y) + self.set("position", f"{float(pos_x):g},{float(pos_y):g}") + if isinstance(angle, str): + if "," not in angle: + angle = float(angle) + + if isinstance(angle, (float, int)): + # Generate orientation from angle + angle = (math.sin(math.radians(angle)), -math.cos(math.radians(angle))) + + if isinstance(angle, (tuple, list)) and len(angle) == 2: + angle = ",".join(f"{i:g}" for i in [angle[0], -angle[1]]) + + if angle is not None: + self.set("orientation", angle) + return self + + @deprecate + def move_to(self, pos_x, pos_y, angle=None): + """ + .. deprecated:: 1.3 + Use :func:`set_position` instead. + + Move this guide to the given x,y position, + + Angle may be a float or integer, which will change the orientation. Alternately, + it may be a pair of numbers (tuple) which will set the orientation directly. + If not given at all, the orientation remains unchanged. + """ + self.set("position", f"{float(pos_x):g},{float(pos_y):g}") + if isinstance(angle, str): + if "," not in angle: + angle = float(angle) + + if isinstance(angle, (float, int)): + # Generate orientation from angle + angle = (math.sin(math.radians(angle)), -math.cos(math.radians(angle))) + + if isinstance(angle, (tuple, list)) and len(angle) == 2: + angle = ",".join(f"{i:g}" for i in angle) + + if angle is not None: + self.set("orientation", angle) + return self + + @staticmethod + def guides_coincident(guide1, guide2): + """Check if two guides defined by (position, orientation) and (opos, oor) look + identical (i.e. the position lies on the other guide AND the guide is + (anti)parallel to the other guide). + + .. versionadded:: 1.2""" + # normalize orientations first + orientation = guide1.orientation / guide1.orientation.length + oor = guide2.orientation / guide2.orientation.length + + position = guide1.raw_position + opos = guide2.raw_position + + return ( + DirectedLineSegment( + position, position + Vector2d(orientation[1], -orientation[0]) + ).perp_distance(*opos) + < 1e-6 + and abs(abs(orientation[1] * oor[0]) - abs(orientation[0] * oor[1])) < 1e-6 + ) + + +class Metadata(BaseElement): + """Inkscape Metadata element""" + + tag_name = "metadata" + + +class ForeignObject(BaseElement): + """SVG foreignObject element""" + + tag_name = "foreignObject" + + +class Switch(BaseElement): + """A switch element""" + + tag_name = "switch" + + +class Grid(BaseElement): + """A namedview grid child""" + + tag_name = "inkscape:grid" + + +class Page(BaseElement): + """A namedview page child + + .. versionadded:: 1.2""" + + tag_name = "inkscape:page" + + width = property(lambda self: self.to_dimensionless(self.get("width") or 0)) + height = property(lambda self: self.to_dimensionless(self.get("height") or 0)) + x = property(lambda self: self.to_dimensionless(self.get("x") or 0)) + y = property(lambda self: self.to_dimensionless(self.get("y") or 0)) + + @classmethod + def new(cls, width, height, x, y): + """Creates a new page element in the namedview""" + page = super().new() + page.move_to(x, y) + page.set("width", width) + page.set("height", height) + return page + + def move_to(self, x, y): + """Move this page to the given x,y position""" + self.set("x", f"{float(x):g}") + self.set("y", f"{float(y):g}") + return self + + @property + def bounding_box(self) -> BoundingBox: + """Returns the bounding box of the page.""" + return BoundingBox( + (self.x, self.x + self.width), (self.y, self.y + self.height) + ) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_parser.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_parser.py new file mode 100644 index 0000000..ffe4e08 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_parser.py @@ -0,0 +1,118 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) 2020 Martin Owens +# Sergei Izmailov +# Thomas Holder +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +"""Utilities for parsing SVG documents. + +.. versionadded:: 1.2 + Separated out from :py:mod:`inkex.elements._base`""" + +from collections import defaultdict +from typing import DefaultDict, List, Any, Type + +from lxml import etree + +from ..interfaces.IElement import IBaseElement + +from ._utils import splitNS +from ..utils import errormsg +from ..localization import inkex_gettext as _ + + +class NodeBasedLookup(etree.PythonElementClassLookup): + """ + We choose what kind of Elements we should return for each element, providing useful + SVG based API to our extensions system. + """ + + default: Type[IBaseElement] + + # (ns,tag) -> list(cls) ; ascending priority + lookup_table = defaultdict(list) # type: DefaultDict[str, List[Any]] + + @classmethod + def register_class(cls, klass): + """Register the given class using it's attached tag name""" + cls.lookup_table[splitNS(klass.tag_name)].append(klass) + + @classmethod + def find_class(cls, xpath): + """Find the class for this type of element defined by an xpath + + .. versionadded:: 1.1""" + if isinstance(xpath, type): + return xpath + for kls in cls.lookup_table[splitNS(xpath.split("/")[-1])]: + # TODO: We could create a apply the xpath attrs to the test element + # to narrow the search, but this does everything we need right now. + test_element = kls() + if kls.is_class_element(test_element): + return kls + raise KeyError(f"Could not find svg tag for '{xpath}'") + + def lookup(self, doc, element): # pylint: disable=unused-argument + """Lookup called by lxml when assigning elements their object class""" + try: + for kls in reversed(self.lookup_table[splitNS(element.tag)]): + if kls.is_class_element(element): # pylint: disable=protected-access + return kls + except TypeError: + # Handle non-element proxies case + # The documentation implies that it's not possible + # Didn't found a reliable way to check whether proxy corresponds to element + # or not + # Look like lxml issue to me. + # The troubling element is "" + return None + return NodeBasedLookup.default + + +SVG_PARSER = etree.XMLParser(huge_tree=True, strip_cdata=False, recover=True) +SVG_PARSER.set_element_class_lookup(NodeBasedLookup()) + + +def load_svg(stream): + """Load SVG file using the SVG_PARSER""" + if (isinstance(stream, str) and stream.lstrip().startswith("<")) or ( + isinstance(stream, bytes) and stream.lstrip().startswith(b"<") + ): + parsed = etree.ElementTree(etree.fromstring(stream, parser=SVG_PARSER)) + else: + parsed = etree.parse(stream, parser=SVG_PARSER) + if len(SVG_PARSER.error_log) > 0: + errormsg( + _( + "A parsing error occurred, which means you are likely working with " + "a non-conformant SVG file. The following errors were found:\n" + ) + ) + for __, element in enumerate(SVG_PARSER.error_log): + errormsg( + _("{}. Line {}, column {}").format( + element.message, element.line, element.column + ) + ) + errormsg( + _( + "\nProcessing will continue; however we encourage you to fix your" + " file manually." + ) + ) + return parsed diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_polygons.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_polygons.py new file mode 100644 index 0000000..04ea9aa --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_polygons.py @@ -0,0 +1,509 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) 2020 Martin Owens +# Sergei Izmailov +# Thomas Holder +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# pylint: disable=arguments-differ +""" +Interface for all shapes/polygons such as lines, paths, rectangles, circles etc. +""" + +from math import cos, pi, sin +from typing import Optional, Tuple +from ..paths import Arc, Curve, Move, Path, ZoneClose +from ..paths import Line as PathLine +from ..transforms import Transform, ImmutableVector2d, Vector2d +from ..bezier import pointdistance + +from ._utils import addNS +from ._base import ShapeElement + + +class PathElementBase(ShapeElement): + """Base element for path based shapes""" + + get_path = lambda self: Path(self.get("d")) + + @classmethod + def new(cls, path, **attrs): + return super().new(d=Path(path), **attrs) + + def set_path(self, path): + """Set the given data as a path as the 'd' attribute""" + self.set("d", str(Path(path))) + + def apply_transform(self): + """Apply the internal transformation to this node and delete""" + if "transform" in self.attrib: + self.path = self.path.transform(self.transform) + self.set("transform", Transform()) + + @property + def original_path(self): + """Returns the original path if this is a LPE, or the path if not""" + return Path(self.get("inkscape:original-d", self.path)) + + @original_path.setter + def original_path(self, path): + if addNS("inkscape:original-d") in self.attrib: + self.set("inkscape:original-d", str(Path(path))) + else: + self.path = path + + +class PathElement(PathElementBase): + """Provide a useful extension for path elements""" + + tag_name = "path" + + @staticmethod + def _arcpath( + cx: float, + cy: float, + rx: float, + ry: float, + start: float, + end: float, + arctype: str, + ) -> Optional[Path]: + """Compute the path for an arc defined by Inkscape-specific attributes. + + For details on arguments, see :func:`arc`. + + .. versionadded:: 1.2""" + if abs(rx) < 1e-8 or abs(ry) < 1e-8: + return None + incr = end - start + if incr < 0: + incr += 2 * pi + numsegs = min(1 + int(incr * 2.0 / pi), 4) + incr = incr / numsegs + + computed = Path() + computed.append(Move(cos(start), sin(start))) + for seg in range(1, numsegs + 1): + computed.append( + Arc(1, 1, 0, 0, 1, cos(start + seg * incr), sin(start + seg * incr)) + ) + if abs(incr * numsegs - 2 * pi) > 1e-8 and ( + arctype in ("slice", "") + ): # slice is default + computed.append(PathLine(0, 0)) + if arctype != "arc": + computed.append(ZoneClose()) + computed.transform( + Transform().add_translate(cx, cy).add_scale(rx, ry), inplace=True + ) + return computed.to_relative() + + @classmethod + def arc( + cls, center, rx, ry=None, arctype="", pathonly=False, **kw + ): # pylint: disable=invalid-name + """Generates a sodipodi elliptical arc (special type). Also computes the path + that Inkscape uses under the hood. + All data may be given as parseable strings or using numeric data types. + + Args: + center (tuple-like): Coordinates of the star/polygon center as tuple or + Vector2d + rx (Union[float, str]): Radius in x direction + ry (Union[float, str], optional): Radius in y direction. If not given, + ry=rx. Defaults to None. + arctype (str, optional): "arc", "chord" or "slice". Defaults to "", i.e. + "slice". + + .. versionadded:: 1.2 + Previously set to "arc" as fixed value + pathonly (bool, optional): Whether to create the path without + Inkscape-specific attributes. Defaults to False. + + .. versionadded:: 1.2 + Keyword args: + start (Union[float, str]): start angle in radians + end (Union[float, str]): end angle in radians + open (str): whether the path should be open (true/false). Not used in + Inkscape > 1.1 + + Returns: + PathElement : the created star/polygon + """ + others = [(name, kw.pop(name, None)) for name in ("start", "end", "open")] + elem = cls(**kw) + elem.set("sodipodi:cx", center[0]) + elem.set("sodipodi:cy", center[1]) + elem.set("sodipodi:rx", rx) + elem.set("sodipodi:ry", ry or rx) + elem.set("sodipodi:type", "arc") + if arctype != "": + elem.set("sodipodi:arc-type", arctype) + for name, value in others: + if value is not None: + elem.set("sodipodi:" + name, str(value).lower()) + + path = cls._arcpath( + float(center[0]), + float(center[1]), + float(rx), + float(ry or rx), + float(elem.get("sodipodi:start", 0)), + float(elem.get("sodipodi:end", 2 * pi)), + arctype, + ) + if pathonly: + elem = cls(**kw) + if path is not None: + elem.path = path + return elem + + @staticmethod + def _starpath( + c: Tuple[float, float], + sides: int, + r: Tuple[float, float], # pylint: disable=invalid-name + arg: Tuple[float, float], + rounded: float, + flatsided: bool, + ): + """Helper method to generate the path for an Inkscape star/ polygon; randomized + is ignored. + + For details on arguments, see :func:`star`. + + .. versionadded:: 1.2""" + + def _star_get_xy(point, index): + cur_arg = arg[point] + 2 * pi / sides * (index % sides) + return Vector2d(*c) + r[point] * Vector2d(cos(cur_arg), sin(cur_arg)) + + def _rot90_rel(origin, other): + """Returns a unit length vector at 90 deg from origin to other""" + return ( + 1 + / pointdistance(other, origin) + * Vector2d(other.y - origin.y, other.x - origin.x) + ) + + def _star_get_curvepoint(point, index, is_prev: bool): + index = index % sides + orig = _star_get_xy(point, index) + previ = (index - 1 + sides) % sides + nexti = (index + 1) % sides + # neighbors of the current point depend on polygon or star + prev = ( + _star_get_xy(point, previ) + if flatsided + else _star_get_xy(1 - point, index if point == 1 else previ) + ) + nextp = ( + _star_get_xy(point, nexti) + if flatsided + else _star_get_xy(1 - point, index if point == 0 else nexti) + ) + mid = 0.5 * (prev + nextp) + # direction of bezier handles + rot = _rot90_rel(orig, mid + 100000 * _rot90_rel(mid, nextp)) + ret = ( + rounded + * rot + * ( + -1 * pointdistance(prev, orig) + if is_prev + else pointdistance(nextp, orig) + ) + ) + return orig + ret + + pointy = abs(rounded) < 1e-4 + result = Path() + result.append(Move(*_star_get_xy(0, 0))) + for i in range(0, sides): + # draw to point type 1 for stars + if not flatsided: + if pointy: + result.append(PathLine(*_star_get_xy(1, i))) + else: + result.append( + Curve( + *_star_get_curvepoint(0, i, False), + *_star_get_curvepoint(1, i, True), + *_star_get_xy(1, i), + ) + ) + # draw to point type 0 for both stars and rectangles + if pointy and i < sides - 1: + result.append(PathLine(*_star_get_xy(0, i + 1))) + if not pointy: + if not flatsided: + result.append( + Curve( + *_star_get_curvepoint(1, i, False), + *_star_get_curvepoint(0, i + 1, True), + *_star_get_xy(0, i + 1), + ) + ) + else: + result.append( + Curve( + *_star_get_curvepoint(0, i, False), + *_star_get_curvepoint(0, i + 1, True), + *_star_get_xy(0, i + 1), + ) + ) + + result.append(ZoneClose()) + return result.to_relative() + + @classmethod + def star( + cls, + center, + radii, + sides=5, + rounded=0, + args=(0, 0), + flatsided=False, + pathonly=False, + ): + """Generate a sodipodi star / polygon. Also computes the path that Inkscape uses + under the hood. The arguments for center, radii, sides, rounded and args can be + given as strings or as numeric data. + + .. versionadded:: 1.1 + + Args: + center (Tuple-like): Coordinates of the star/polygon center as tuple or + Vector2d + radii (tuple): Radii of the control points, i.e. their distances from the + center. The control points are specified in polar coordinates. Only the + first control point is used for polygons. + sides (int, optional): Number of sides / tips of the polygon / star. + Defaults to 5. + rounded (int, optional): Controls the rounding radius of the polygon / star. + For `rounded=0`, only straight lines are used. Defaults to 0. + args (tuple, optional): Angle between horizontal axis and control points. + Defaults to (0,0). + + .. versionadded:: 1.2 + Previously fixed to (0.85, 1.3) + flatsided (bool, optional): True for polygons, False for stars. + Defaults to False. + + .. versionadded:: 1.2 + pathonly (bool, optional): Whether to create the path without + Inkscape-specific attributes. Defaults to False. + + .. versionadded:: 1.2 + + Returns: + PathElement : the created star/polygon + """ + elem = cls() + elem.set("sodipodi:cx", center[0]) + elem.set("sodipodi:cy", center[1]) + elem.set("sodipodi:r1", radii[0]) + elem.set("sodipodi:r2", radii[1]) + elem.set("sodipodi:arg1", args[0]) + elem.set("sodipodi:arg2", args[1]) + elem.set("sodipodi:sides", max(sides, 3) if flatsided else max(sides, 2)) + elem.set("inkscape:rounded", rounded) + elem.set("inkscape:flatsided", str(flatsided).lower()) + elem.set("sodipodi:type", "star") + + path = cls._starpath( + (float(center[0]), float(center[1])), + int(sides), + (float(radii[0]), float(radii[1])), + (float(args[0]), float(args[1])), + float(rounded), + flatsided, + ) + if pathonly: + elem = cls() + # inkex.errormsg(path) + if path is not None: + elem.path = path + + return elem + + +class Polyline(ShapeElement): + """Like a path, but made up of straight line segments only""" + + tag_name = "polyline" + + def get_path(self): + return Path("M" + self.get("points")) + + def set_path(self, path): + points = [f"{x:g},{y:g}" for x, y in Path(path).end_points] + self.set("points", " ".join(points)) + + +class Polygon(ShapeElement): + """A closed polyline""" + + tag_name = "polygon" + get_path = lambda self: Path("M" + self.get("points") + " Z") + + +class Line(ShapeElement): + """A line segment connecting two points""" + + tag_name = "line" + x1 = property(lambda self: self.to_dimensionless(self.get("x1", 0))) + y1 = property(lambda self: self.to_dimensionless(self.get("y1", 0))) + x2 = property(lambda self: self.to_dimensionless(self.get("x2", 0))) + y2 = property(lambda self: self.to_dimensionless(self.get("y2", 0))) + get_path = lambda self: Path(f"M{self.x1},{self.y1} L{self.x2},{self.y2}") + + @classmethod + def new(cls, start, end, **attrs): + start = Vector2d(start) + end = Vector2d(end) + return super().new(x1=start.x, y1=start.y, x2=end.x, y2=end.y, **attrs) + + +class RectangleBase(ShapeElement): + """Provide a useful extension for rectangle elements""" + + left = property(lambda self: self.to_dimensionless(self.get("x", "0"))) + top = property(lambda self: self.to_dimensionless(self.get("y", "0"))) + right = property(lambda self: self.left + self.width) + bottom = property(lambda self: self.top + self.height) + width = property(lambda self: self.to_dimensionless(self.get("width", "0"))) + height = property(lambda self: self.to_dimensionless(self.get("height", "0"))) + rx = property( + lambda self: self.to_dimensionless(self.get("rx", self.get("ry", 0.0))) + ) + ry = property( + lambda self: self.to_dimensionless(self.get("ry", self.get("rx", 0.0))) + ) # pylint: disable=invalid-name + + def get_path(self): + """Calculate the path as the box around the rect""" + if self.rx or self.ry: + # pylint: disable=invalid-name + rx = min(self.rx if self.rx > 0 else self.ry, self.width / 2) + ry = min(self.ry if self.ry > 0 else self.rx, self.height / 2) + cpts = [self.left + rx, self.right - rx, self.top + ry, self.bottom - ry] + return ( + f"M {cpts[0]},{self.top}" + f"L {cpts[1]},{self.top} " + f"A {rx},{ry} 0 0 1 {self.right},{cpts[2]}" + f"L {self.right},{cpts[3]} " + f"A {rx},{ry} 0 0 1 {cpts[1]},{self.bottom}" + f"L {cpts[0]},{self.bottom} " + f"A {rx},{ry} 0 0 1 {self.left},{cpts[3]}" + f"L {self.left},{cpts[2]} " + f"A {rx},{ry} 0 0 1 {cpts[0]},{self.top} z" + ) + + return f"M {self.left},{self.top} h{self.width}v{self.height}h{-self.width} z" + + +class Rectangle(RectangleBase): + """Provide a useful extension for rectangle elements""" + + tag_name = "rect" + + @classmethod + def new(cls, left, top, width, height, **attrs): + return super().new(x=left, y=top, width=width, height=height, **attrs) + + +class EllipseBase(ShapeElement): + """Absorbs common part of Circle and Ellipse classes""" + + def get_path(self): + """Calculate the arc path of this circle""" + rx, ry = self.rxry() + cx, y = self.center.x, self.center.y - ry + return ( + "M {cx},{y} " + "a {rx},{ry} 0 1 0 {rx}, {ry} " + "a {rx},{ry} 0 0 0 -{rx}, -{ry} z" + ).format(cx=cx, y=y, rx=rx, ry=ry) + + @property + def center(self): + """Return center of circle/ellipse""" + return ImmutableVector2d( + self.to_dimensionless(self.get("cx", "0")), + self.to_dimensionless(self.get("cy", "0")), + ) + + @center.setter + def center(self, value): + value = Vector2d(value) + self.set("cx", value.x) + self.set("cy", value.y) + + def rxry(self): + # type: () -> Vector2d + """Helper function""" + raise NotImplementedError() + + @classmethod + def new(cls, center, radius, **attrs): + circle = super().new(**attrs) + circle.center = center + circle.radius = radius + return circle + + +class Circle(EllipseBase): + """Provide a useful extension for circle elements""" + + tag_name = "circle" + + @property + def radius(self) -> float: + """Return radius of circle""" + return self.to_dimensionless(self.get("r", "0")) + + @radius.setter + def radius(self, value): + self.set("r", self.to_dimensionless(value)) + + def rxry(self): + r = self.radius + return Vector2d(r, r) + + +class Ellipse(EllipseBase): + """Provide a similar extension to the Circle interface for ellipses""" + + tag_name = "ellipse" + + @property + def radius(self) -> ImmutableVector2d: + """Return radii of ellipse""" + return ImmutableVector2d( + self.to_dimensionless(self.get("rx", "0")), + self.to_dimensionless(self.get("ry", "0")), + ) + + @radius.setter + def radius(self, value): + value = Vector2d(value) + self.set("rx", str(value.x)) + self.set("ry", str(value.y)) + + def rxry(self): + return self.radius diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_selected.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_selected.py new file mode 100644 index 0000000..356486b --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_selected.py @@ -0,0 +1,236 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) 2020 Martin Owens +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc.,Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +When elements are selected, these structures provide an advanced API. + +.. versionadded:: 1.1 +""" + +from collections import OrderedDict +from typing import Any, overload, Union, Optional + +from ..interfaces.IElement import IBaseElement +from ._utils import natural_sort_key +from ..localization import inkex_gettext +from ..utils import AbortExtension + + +class ElementList(OrderedDict): + """ + A list of elements, selected by id, iterator or xpath + + This may look like a dictionary, but it is really a list of elements. + The default iterator is the element objects themselves (not keys) and it is + possible to key elements by their numerical index. + + It is also possible to look up items by their id and the element object itself. + """ + + def __init__(self, svg, _iter=None): + self.svg = svg + self.ids = OrderedDict() + super().__init__() + if _iter is not None: + self.set(*list(_iter)) + + def __iter__(self): + return self.values().__iter__() + + def __getitem__(self, key): + return super().__getitem__(self._to_key(key)) + + def __contains__(self, key): + return super().__contains__(self._to_key(key)) + + def __setitem__(self, orig_key, elem): + if orig_key != elem and orig_key != elem.get("id"): + raise ValueError(f"Refusing to set bad key in ElementList {orig_key}") + if isinstance(elem, str): + key = elem + elem = self.svg.getElementById(elem, literal=True) + if elem is None: + return + if isinstance(elem, IBaseElement): + # Selection is a list of elements to select + key = elem.xml_path + element_id = elem.get("id") + if element_id is not None: + self.ids[element_id] = key + super().__setitem__(key, elem) + else: + kind = type(elem).__name__ + raise ValueError(f"Unknown element type: {kind}") + + @overload + def _to_key(self, key: None, default: Any) -> Any: + ... + + @overload + def _to_key(self, key: Union[int, IBaseElement, str], default: Any) -> str: + ... + + def _to_key(self, key, default=None) -> str: + """Takes a key (id, element, etc) and returns an xml_path key""" + + if self and key is None: + key = default + if isinstance(key, int): + return list(self.keys())[key] + if isinstance(key, IBaseElement): + return key.xml_path + if isinstance(key, str) and key[0] != "/": + return self.ids.get(key, key) + return key + + def clear(self): + """Also clear ids""" + self.ids.clear() + super().clear() + + def set(self, *ids): + """ + Sets the currently selected elements to these ids, any existing + selection is cleared. + + Arguments a list of element ids, element objects or + a single xpath expression starting with ``//``. + + All element objects must have an id to be correctly set. + + >>> selection.set("rect123", "path456", "text789") + >>> selection.set(elem1, elem2, elem3) + >>> selection.set("//rect") + """ + self.clear() + self.add(*ids) + + def pop(self, key=None): + """Remove the key item or remove the last item selected""" + item = super().pop(self._to_key(key, default=-1)) + self.ids.pop(item.get("id")) + return item + + def add(self, *ids): + """Like set() but does not clear first""" + # Allow selecting of xpath elements directly + if len(ids) == 1 and isinstance(ids[0], str) and ids[0].startswith("//"): + ids = self.svg.xpath(ids[0]) + + for elem in ids: + self[elem] = elem # This doesn't matter + + def rendering_order(self): + """Get the selected elements by z-order (stacking order), ordered from bottom to + top + + .. versionadded:: 1.2 + :func:`paint_order` has been renamed to :func:`rendering_order`""" + new_list = ElementList(self.svg) + # the elements are stored with their xpath index, so a natural sort order + # '3' < '20' < '100' has to be applied + new_list.set( + *[ + elem + for _, elem in sorted( + self.items(), key=lambda x: natural_sort_key(x[0]) + ) + ] + ) + return new_list + + def filter(self, *types): + """Filter selected elements of the given type, returns a new SelectedElements + object""" + return ElementList( + self.svg, [e for e in self if not types or isinstance(e, types)] + ) + + def filter_nonzero(self, *types, error_msg: Optional[str] = None): + """Filter selected elements of the given type, returns a new SelectedElements + object. If the selection is empty, abort the extension. + + .. versionadded:: 1.2 + + :param error_msg: e + :type error_msg: str, optional + + Args: + *types (Type) : type(s) to filter the selection by + error_msg (str, optional): error message that is displayed if the selection + is empty, defaults to + ``_("Please select at least one element of type(s) {}")``. + Defaults to None. + + Raises: + AbortExtension: if the selection is empty + + Returns: + ElementList: filtered selection + """ + filtered = self.filter(*types) + if not filtered: + if error_msg is None: + error_msg = inkex_gettext( + "Please select at least one element of the following type(s): {}" + ).format(", ".join([type.__name__ for type in types])) + raise AbortExtension(error_msg) + return filtered + + def get(self, *types): + """Like filter, but will enter each element searching for any child of the given + types""" + + def _recurse(elem): + if not types or isinstance(elem, types): + yield elem + for child in elem: + yield from _recurse(child) + + return ElementList( + self.svg, + [ + r + for e in self + for r in _recurse(e) + if isinstance(r, (IBaseElement, str)) + ], + ) + + def id_dict(self): + """For compatibility, return regular dictionary of id -> element pairs""" + return {eid: self[xid] for eid, xid in self.ids.items()} + + def bounding_box(self): + """ + Gets a :class:`inkex.transforms.BoundingBox` object for the selected items. + + Text objects have a bounding box without width or height that only + reflects the coordinate of their anchor. If a text object is a part of + the selection's boundary, the bounding box may be inaccurate. + + When no object is selected or when the object's location cannot be + determined (e.g. empty group or layer), all coordinates will be None. + """ + return sum([elem.bounding_box() for elem in self], None) + + def first(self): + """Returns the first item in the selected list""" + for elem in self: + return elem + return None diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_svg.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_svg.py new file mode 100644 index 0000000..85d9604 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_svg.py @@ -0,0 +1,415 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) 2020 Martin Owens +# Thomas Holder +# Sergei Izmailov +# Windell Oskay +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# pylint: disable=attribute-defined-outside-init +# +""" +Provide a way to load lxml attributes with an svg API on top. +""" + +import random +import math +import re + +from lxml import etree + +from ..css import ConditionalRule +from ..interfaces.IElement import ISVGDocumentElement + +from ..deprecated.meta import DeprecatedSvgMixin, deprecate +from ..units import discover_unit, parse_unit +from ._selected import ElementList +from ..transforms import BoundingBox +from ..styles import StyleSheets + +from ._base import BaseElement, ViewboxMixin +from ._meta import StyleElement, NamedView +from ._utils import registerNS + +from typing import Optional, List, Tuple + +if False: # pylint: disable=using-constant-test + import typing # pylint: disable=unused-import + + +class SvgDocumentElement( + DeprecatedSvgMixin, ISVGDocumentElement, BaseElement, ViewboxMixin +): + """Provide access to the document level svg functionality""" + + # pylint: disable=too-many-public-methods + tag_name = "svg" + + selection: ElementList + """The selection as passed by Inkscape (readonly)""" + + def _init(self): + self.current_layer = None + self.view_center = (0.0, 0.0) + self.selection = ElementList(self) + self.ids = {} + + def tostring(self): + """Convert document to string""" + return etree.tostring(etree.ElementTree(self)) + + def get_ids(self): + """Returns a set of unique document ids""" + if not self.ids: + self.ids = set(self.xpath("//@id")) + return self.ids + + def get_unique_id( + self, + prefix: str, + size: Optional[int] = None, + blacklist: Optional[List[str]] = None, + ): + """Generate a new id from an existing old_id + + The id consists of a prefix and an appended random integer with size digits. + + If size is not given, it is determined automatically from the length of + existing ids, i.e. those in the document plus those in the blacklist. + + Args: + prefix (str): the prefix of the new ID. + size (Optional[int], optional): number of digits of the second part of the + id. If None, the length is chosen based on the amount of existing + objects. Defaults to None. + + .. versionchanged:: 1.1 + The default of this parameter has been changed from 4 to None. + blacklist (Optional[Iterable[str]], optional): An additional iterable of ids + that are not allowed to be used. This is useful when bulk inserting + objects. + Defaults to None. + + .. versionadded:: 1.2 + + Returns: + _type_: _description_ + """ + ids = self.get_ids() + if size is None: + size = max(math.ceil(math.log10(len(ids) or 1000)) + 1, 4) + if blacklist is not None: + ids.update(blacklist) + new_id = None + _from = 10**size - 1 + _to = 10**size + while new_id is None or new_id in ids: + # Do not use randint because py2/3 incompatibility + new_id = prefix + str(int(random.random() * _from - _to) + _to) + self.ids.add(new_id) + return new_id + + def get_page_bbox(self, page=None) -> BoundingBox: + """Gets the page dimensions as a bbox. For single-page documents, the viewbox + dimensions are returned. + + Args: + page (int, optional): Page number. Defaults to the first page. + + .. versionadded:: 1.3 + + Raises: + IndexError: if the page number provided does not exist in the document. + + Returns: + BoundingBox: the bounding box of the page + """ + if page is None: + page = 0 + pages = self.namedview.get_pages() + if 0 <= page < len(pages): + return pages[page].bounding_box + raise IndexError("Invalid page number") + + def get_current_layer(self): + """Returns the currently selected layer""" + layer = self.getElementById(self.namedview.current_layer, "svg:g") + if layer is None: + return self + return layer + + def add_namespace(self, prefix, url): + """Adds an xml namespace to the xml parser with the desired prefix. + + If the prefix or url are already in use with different values, this + function will raise an error. Remove any attributes or elements using + this namespace before calling this function in order to rename it. + + .. versionadded:: 1.3 + """ + if self.nsmap.get(prefix, None) == url: + registerNS(prefix, url) + return + + # Attempt to clean any existing namespaces + if prefix in self.nsmap or url in self.nsmap.values(): + nskeep = [k for k, v in self.nsmap.items() if k != prefix and v != url] + etree.cleanup_namespaces(self, keep_ns_prefixes=nskeep) + if prefix in self.nsmap: + raise KeyError("ns prefix already used with a different url") + if url in self.nsmap.values(): + raise ValueError("ns url already used with a different prefix") + + # These are globals, but both will overwrite previous uses. + registerNS(prefix, url) + etree.register_namespace(prefix, url) + + # Set and unset an attribute to add the namespace to this root element. + self.set(f"{prefix}:temp", "1") + self.set(f"{prefix}:temp", None) + + def getElement(self, xpath): # pylint: disable=invalid-name + """Gets a single element from the given xpath or returns None""" + return self.findone(xpath) + + def getElementById( + self, eid: str, elm="*", literal=False + ): # pylint: disable=invalid-name + """Get an element in this svg document by it's ID attribute. + + Args: + eid (str): element id + elm (str, optional): element type, including namespace, e.g. ``svg:path``. + Defaults to "*". + literal (bool, optional): If ``False``, ``#url()`` is stripped from ``eid``. + Defaults to False. + + .. versionadded:: 1.1 + + Returns: + Union[BaseElement, None]: found element + """ + if eid is not None and not literal: + eid = eid.strip()[4:-1] if eid.startswith("url(") else eid + eid = eid.lstrip("#") + return self.getElement(f'//{elm}[@id="{eid}"]') + + def getElementByName(self, name, elm="*"): # pylint: disable=invalid-name + """Get an element by it's inkscape:label (aka name)""" + return self.getElement(f'//{elm}[@inkscape:label="{name}"]') + + def getElementsByClass(self, class_name): # pylint: disable=invalid-name + """Get elements by it's class name""" + + return self.xpath(ConditionalRule(f".{class_name}").to_xpath()) + + def getElementsByHref( + self, eid: str, attribute="href" + ): # pylint: disable=invalid-name + """Get elements that reference the element with id eid. + + Args: + eid (str): _description_ + attribute (str, optional): Attribute to look for. + Valid choices: "href", "xlink:href", "mask", "clip-path". + Defaults to "href". + + .. versionadded:: 1.2 + + attribute set to "href" or "xlink:href" handles both cases. + .. versionchanged:: 1.3 + + Returns: + Any: list of elements + """ + if attribute == "href" or attribute == "xlink:href": + return self.xpath(f'//*[@href|@xlink:href="#{eid}"]') + elif attribute == "mask": + return self.xpath(f'//*[@mask="url(#{eid})"]') + elif attribute == "clip-path": + return self.xpath(f'//*[@clip-path="url(#{eid})"]') + + def getElementsByStyleUrl(self, eid, style=None): # pylint: disable=invalid-name + """Get elements by a style attribute url""" + url = f"url(#{eid})" + if style is not None: + url = style + ":" + url + return self.xpath(f'//*[contains(@style,"{url}")]') + + @property + def name(self): + """Returns the Document Name""" + return self.get("sodipodi:docname", "") + + @property + def namedview(self) -> NamedView: + """Return the sp namedview meta information element""" + return self.get_or_create("//sodipodi:namedview", prepend=True) + + @property + def metadata(self): + """Return the svg metadata meta element container""" + return self.get_or_create("//svg:metadata", prepend=True) + + @property + def defs(self): + """Return the svg defs meta element container""" + return self.get_or_create("//svg:defs", prepend=True) + + def get_viewbox(self) -> List[float]: + """Parse and return the document's viewBox attribute""" + return self.parse_viewbox(self.get("viewBox", "0")) or [0, 0, 0, 0] + + @property + def viewbox_width(self) -> float: # getDocumentWidth(self): + """Returns the width of the `user coordinate system + `_ in user units, i.e. + the width of the viewbox, as defined in the SVG file. If no viewbox is defined, + the value of the width attribute is returned. If the height is not defined, + returns 0. + + .. versionadded:: 1.2""" + return self.get_viewbox()[2] or self.viewport_width + + @property + def viewport_width(self) -> float: + """Returns the width of the `viewport coordinate system + `_ in user units, i.e. the + width attribute of the svg element converted to px + + .. versionadded:: 1.2""" + return self.to_dimensionless(self.get("width")) or self.get_viewbox()[2] + + @property + def viewbox_height(self) -> float: # getDocumentHeight(self): + """Returns the height of the `user coordinate system + `_ in user units, i.e. the + height of the viewbox, as defined in the SVG file. If no viewbox is defined, the + value of the height attribute is returned. If the height is not defined, + returns 0. + + .. versionadded:: 1.2""" + return self.get_viewbox()[3] or self.viewport_height + + @property + def viewport_height(self) -> float: + """Returns the width of the `viewport coordinate system + `_ in user units, i.e. the + height attribute of the svg element converted to px + + .. versionadded:: 1.2""" + return self.to_dimensionless(self.get("height")) or self.get_viewbox()[3] + + @property + def scale(self): + """Returns the ratio between the viewBox width and the page width. + + .. versionchanged:: 1.2 + Previously, the scale as shown by the document properties was computed, + but the computation of this in core Inkscape changed in Inkscape 1.2, so + this was moved to :attr:`inkscape_scale`.""" + return self._base_scale() + + @property + def inkscape_scale(self): + """Returns the ratio between the viewBox width (in width/height units) and the + page width, which is displayed as "scale" in the Inkscape document + properties. + + .. versionadded:: 1.2""" + + viewbox_unit = ( + parse_unit(self.get("width")) or parse_unit(self.get("height")) or (0, "px") + )[1] + return self._base_scale(viewbox_unit) + + def _base_scale(self, unit="px"): + """Returns what Inkscape shows as "user units per `unit`" + + .. versionadded:: 1.2""" + try: + scale_x = ( + self.to_dimensional(self.viewport_width, unit) / self.viewbox_width + ) + scale_y = ( + self.to_dimensional(self.viewport_height, unit) / self.viewbox_height + ) + value = max([scale_x, scale_y]) + return 1.0 if value == 0 else value + except (ValueError, ZeroDivisionError): + return 1.0 + + @property + def equivalent_transform_scale(self) -> float: + """Return the scale of the equivalent transform of the svg tag, as defined by + https://www.w3.org/TR/SVG2/coords.html#ComputingAViewportsTransform + (highly simplified) + + .. versionadded:: 1.2""" + return self.scale + + @property + def unit(self): + """Returns the unit used for in the SVG document. + In the case the SVG document lacks an attribute that explicitly + defines what units are used for SVG coordinates, it tries to calculate + the unit from the SVG width and viewBox attributes. + Defaults to 'px' units.""" + if not hasattr(self, "_unit"): + self._unit = "px" # Default is px + viewbox = self.get_viewbox() + if viewbox and set(viewbox) != {0}: + self._unit = discover_unit(self.get("width"), viewbox[2], default="px") + return self._unit + + @property + def document_unit(self): + """Returns the display unit (Inkscape-specific attribute) of the document + + .. versionadded:: 1.2""" + return self.namedview.get("inkscape:document-units", "px") + + @property + def stylesheets(self): + """Get all the stylesheets, bound together to one, (for reading)""" + sheets = StyleSheets(self) + for node in self.xpath("//svg:style"): + sheets.append(node.stylesheet()) + return sheets + + @property + def stylesheet(self): + """Return the first stylesheet or create one if needed (for writing)""" + for sheet in self.stylesheets: + return sheet + + style_node = StyleElement() + self.defs.append(style_node) + return style_node.stylesheet() + + +def width(self): + """Use :func:`viewport_width` instead""" + return self.viewport_width + + +def height(self): + """Use :func:`viewport_height` instead""" + return self.viewport_height + + +SvgDocumentElement.width = property(deprecate(width, "1.2")) +SvgDocumentElement.height = property(deprecate(height, "1.2")) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_text.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_text.py new file mode 100644 index 0000000..8fc1756 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_text.py @@ -0,0 +1,202 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) 2020 Martin Owens +# Thomas Holder +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# pylint: disable=arguments-differ +""" +Provide text based element classes interface. + +Because text is not rendered at all, no information about a text's path +size or actual location can be generated yet. +""" +from __future__ import annotations + +from tempfile import TemporaryDirectory + +from ..interfaces.IElement import BaseElementProtocol +from ..paths import Path +from ..transforms import Transform, BoundingBox +from ..command import inkscape, write_svg +from ._base import BaseElement, ShapeElement +from ._polygons import PathElementBase + + +class TextBBMixin: # pylint: disable=too-few-public-methods + """Mixin to query the bounding box from Inkscape + + .. versionadded:: 1.2""" + + def get_inkscape_bbox(self: BaseElementProtocol) -> BoundingBox: + """Query the bbbox of a single object. This calls the Inkscape command, + so it is rather slow to use in a loop.""" + with TemporaryDirectory(prefix="inkscape-command") as tmpdir: + svg_file = write_svg(self.root, tmpdir, "input.svg") + out = inkscape(svg_file, "-X", "-Y", "-W", "-H", query_id=self.get_id()) + out = list(map(self.root.viewport_to_unit, out.splitlines())) + if len(out) != 4: + raise ValueError("Error: Bounding box computation failed") + return BoundingBox.new_xywh(*out) + + +class FlowRegion(ShapeElement): + """SVG Flow Region (SVG 2.0)""" + + tag_name = "flowRegion" + + def get_path(self): + # This ignores flowRegionExcludes + return sum([child.path for child in self], Path()) + + +class FlowRoot(ShapeElement, TextBBMixin): + """SVG Flow Root (SVG 2.0)""" + + tag_name = "flowRoot" + + @property + def region(self): + """Return the first flowRegion in this flowRoot""" + return self.findone("svg:flowRegion") + + def get_path(self): + region = self.region + return region.get_path() if region is not None else Path() + + +class FlowPara(ShapeElement): + """SVG Flow Paragraph (SVG 2.0)""" + + tag_name = "flowPara" + + def get_path(self): + # XXX: These empty paths mean the bbox for text elements will be nothing. + return Path() + + +class FlowDiv(ShapeElement): + """SVG Flow Div (SVG 2.0)""" + + tag_name = "flowDiv" + + def get_path(self): + # XXX: These empty paths mean the bbox for text elements will be nothing. + return Path() + + +class FlowSpan(ShapeElement): + """SVG Flow Span (SVG 2.0)""" + + tag_name = "flowSpan" + + def get_path(self): + # XXX: These empty paths mean the bbox for text elements will be nothing. + return Path() + + +class TextElement(ShapeElement, TextBBMixin): + """A Text element""" + + tag_name = "text" + x = property(lambda self: self.to_dimensionless(self.get("x", 0))) + y = property(lambda self: self.to_dimensionless(self.get("y", 0))) + + def get_path(self): + return Path() + + def tspans(self): + """Returns all children that are tspan elements""" + return self.findall("svg:tspan") + + def get_text(self, sep="\n"): + """Return the text content including tspans""" + nodes = [self] + list(self.tspans()) + return sep.join([elem.text for elem in nodes if elem.text is not None]) + + def shape_box(self, transform=None): + """ + Returns a horrible bounding box that just contains the coord points + of the text without width or height (which is impossible to calculate) + """ + effective_transform = Transform(transform) @ self.transform + x, y = effective_transform.apply_to_point((self.x, self.y)) + bbox = BoundingBox(x, y) + for tspan in self.tspans(): + bbox += tspan.bounding_box(effective_transform) + return bbox + + +class TextPath(ShapeElement, TextBBMixin): + """A textPath element""" + + tag_name = "textPath" + + def get_path(self): + return Path() + + +class Tspan(ShapeElement, TextBBMixin): + """A tspan text element""" + + tag_name = "tspan" + x = property(lambda self: self.to_dimensionless(self.get("x", 0))) + y = property(lambda self: self.to_dimensionless(self.get("y", 0))) + + @classmethod + def superscript(cls, text): + """Adds a superscript tspan element""" + return cls(text, style="font-size:65%;baseline-shift:super") + + def get_path(self): + return Path() + + def shape_box(self, transform=None): + """ + Returns a horrible bounding box that just contains the coord points + of the text without width or height (which is impossible to calculate) + """ + effective_transform = Transform(transform) @ self.transform + x1, y1 = effective_transform.apply_to_point((self.x, self.y)) + fontsize = self.to_dimensionless(self.style.get("font-size", "12px")) + x2 = self.x + 0 # XXX This is impossible to calculate! + y2 = self.y + float(fontsize) + x2, y2 = effective_transform.apply_to_point((x2, y2)) + return BoundingBox((x1, x2), (y1, y2)) + + +class SVGfont(BaseElement): + """An svg font element""" + + tag_name = "font" + + +class FontFace(BaseElement): + """An svg font font-face element""" + + tag_name = "font-face" + + +class Glyph(PathElementBase): + """An svg font glyph element""" + + tag_name = "glyph" + + +class MissingGlyph(BaseElement): + """An svg font missing-glyph element""" + + tag_name = "missing-glyph" diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_use.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_use.py new file mode 100644 index 0000000..52b7050 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_use.py @@ -0,0 +1,89 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) 2020 Martin Owens +# Thomas Holder +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Interface for the Use and Symbol elements +""" + +from ..transforms import Transform + +from ._groups import Group, GroupBase +from ._base import ShapeElement + + +class Symbol(GroupBase): + """SVG symbol element""" + + tag_name = "symbol" + + +class Use(ShapeElement): + """A 'use' element that links to another in the document""" + + tag_name = "use" + + @classmethod + def new(cls, elem, x, y, **attrs): # pylint: disable=arguments-differ + ret = super().new(x=x, y=y, **attrs) + ret.href = elem + return ret + + def get_path(self): + """Returns the path of the cloned href plus any transformation + + .. versionchanged:: 1.3 + include transform of the referenced element + """ + path = self.href.path + path = path.transform(self.href.transform) + return path + + def effective_style(self): + """Href's style plus this object's own styles""" + style = self.href.effective_style() + style.update(self.style) + return style + + def unlink(self): + """Unlink this clone, replacing it with a copy of the original""" + copy = self.href.copy() + if isinstance(copy, Symbol): + group = Group(**copy.attrib) + group.extend(copy) + copy = group + copy.transform = self.transform @ copy.transform + copy.transform.add_translate( + self.to_dimensionless(self.get("x", 0)), + self.to_dimensionless(self.get("y", 0)), + ) + copy.style = self.style + copy.style + # Preserve the id of the clone to not break links that link the + # As we replace exactly one element by exactly one, this should be safe. + old_id = self.get_id() + self.replace_with(copy) + copy.set_random_ids() + copy.set_id(old_id) + return copy + + def shape_box(self, transform=None): + """BoundingBox of the unclipped shape + + .. versionadded:: 1.1""" + effective_transform = Transform(transform) @ self.transform + return self.href.bounding_box(effective_transform) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_utils.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_utils.py new file mode 100644 index 0000000..bc72c6b --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/elements/_utils.py @@ -0,0 +1,152 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) 2021 Martin Owens +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Useful utilities specifically for elements (that aren't base classes) + +.. versionadded:: 1.1 + Most of the methods in this module were moved from inkex.utils. +""" + +from collections import defaultdict +import re + +# a dictionary of all of the xmlns prefixes in a standard inkscape doc +NSS = { + "sodipodi": "http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd", + "cc": "http://creativecommons.org/ns#", + "ccOLD": "http://web.resource.org/cc/", + "svg": "http://www.w3.org/2000/svg", + "dc": "http://purl.org/dc/elements/1.1/", + "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "inkscape": "http://www.inkscape.org/namespaces/inkscape", + "xlink": "http://www.w3.org/1999/xlink", + "xml": "http://www.w3.org/XML/1998/namespace", +} +SSN = dict((b, a) for (a, b) in NSS.items()) + + +def registerNS(prefix, url): + """Register the given prefix as a namespace url.""" + NSS[prefix] = url + SSN[url] = prefix + + +def addNS(tag, ns=None, namespaces=NSS): # pylint: disable=invalid-name + """Add a known namespace to a name for use with lxml""" + if tag.startswith("{") and ns: + _, tag = removeNS(tag) + if not tag.startswith("{"): + tag = tag.replace("__", ":") + if ":" in tag: + (ns, tag) = tag.rsplit(":", 1) + ns = namespaces.get(ns, None) or ns + if ns is not None: + return f"{{{ns}}}{tag}" + return tag + + +def removeNS( + name, reverse_namespaces=SSN, default="svg" +): # pylint: disable=invalid-name + """The reverse of addNS, finds any namespace and returns tuple (ns, tag)""" + if name[0] == "{": + (url, tag) = name[1:].split("}", 1) + return reverse_namespaces.get(url, default), tag + if ":" in name: + return name.rsplit(":", 1) + return default, name + + +def splitNS(name, namespaces=NSS): # pylint: disable=invalid-name + """Like removeNS, but returns a url instead of a prefix""" + (prefix, tag) = removeNS(name) + return (namespaces[prefix], tag) + + +def natural_sort_key(key, _nsre=re.compile("([0-9]+)")): + """Helper for a natural sort, see + https://stackoverflow.com/a/16090640/3298143""" + return [int(text) if text.isdigit() else text.lower() for text in _nsre.split(key)] + + +class ChildToProperty(property): + """Use when you have a singleton child element who's text + content is the canonical value for the property""" + + def __init__(self, tag, prepend=False): + super().__init__() + self.tag = tag + self.prepend = prepend + + def __get__(self, obj, klass=None): + elem = obj.findone(self.tag) + return elem.text if elem is not None else None + + def __set__(self, obj, value): + elem = obj.get_or_create(self.tag, prepend=self.prepend) + elem.text = value + + def __delete__(self, obj): + obj.remove_all(self.tag) + + @property + def __doc__(self): + return f"Get, set or delete the {self.tag} property." + + +class CloningVat: + """ + When modifying defs, sometimes we want to know if every backlink would have + needed changing, or it was just some of them. + + This tracks the def elements, their promises and creates clones if needed. + """ + + def __init__(self, svg): + self.svg = svg + self.tracks = defaultdict(set) + self.set_ids = defaultdict(list) + + def track(self, elem, parent, set_id=None, **kwargs): + """Track the element and connected parent""" + elem_id = elem.get("id") + parent_id = parent.get("id") + self.tracks[elem_id].add(parent_id) + self.set_ids[elem_id].append((set_id, kwargs)) + + def process(self, process, types=(), make_clones=True, **kwargs): + """ + Process each tracked item if the backlinks match the parents + + Optionally make clones, process the clone and set the new id. + """ + for elem_id in list(self.tracks): + parents = self.tracks[elem_id] + elem = self.svg.getElementById(elem_id) + backlinks = {blk.get("id") for blk in elem.backlinks(*types)} + if backlinks == parents: + # No need to clone, we're processing on-behalf of all parents + process(elem, **kwargs) + elif make_clones: + clone = elem.copy() + elem.getparent().append(clone) + clone.set_random_id() + for update, upkw in self.set_ids.get(elem_id, ()): + update(elem.get("id"), clone.get("id"), **upkw) + process(clone, **kwargs) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/extensions.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/extensions.py new file mode 100644 index 0000000..4c2752b --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/extensions.py @@ -0,0 +1,534 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2018 Martin Owens +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +A helper module for creating Inkscape effect extensions + +This provides the basic generic types of extensions which most writers should +use in their code. See below for the different types. +""" + +import os +import re +import sys +import types +from abc import ABC + +from .utils import errormsg, Boolean +from .colors import Color, ColorError +from .elements import ( + load_svg, + BaseElement, + ShapeElement, + Group, + Layer, + Grid, + TextElement, + FlowPara, + FlowDiv, + Pattern, +) +from .elements._utils import CloningVat +from .base import ( + InkscapeExtension, + SvgThroughMixin, + SvgInputMixin, + SvgOutputMixin, + TempDirMixin, +) +from .transforms import Transform +from .elements import LinearGradient, RadialGradient +from .command import write_svg, inkscape, ProgramRunError +from .utils import errormsg +from .localization import inkex_gettext as _ + +# All the names that get added to the inkex API itself. +__all__ = ( + "EffectExtension", + "GenerateExtension", + "InputExtension", + "OutputExtension", + "RasterOutputExtension", + "CallExtension", + "TemplateExtension", + "ColorExtension", + "TextExtension", +) + +stdout = sys.stdout + + +class EffectExtension(SvgThroughMixin, InkscapeExtension, ABC): + """ + Takes the SVG from Inkscape, modifies the selection or the document + and returns an SVG to Inkscape. + """ + + +class OutputExtension(SvgInputMixin, TempDirMixin, InkscapeExtension): + """ + Takes the SVG from Inkscape and outputs it to something that's not an SVG. + + Used in functions for `Save As` + """ + + def effect(self): + """Effect isn't needed for a lot of Output extensions""" + + def save(self, stream): + """But save certainly is, we give a more exact message here""" + raise NotImplementedError("Output extensions require a save(stream) method!") + + def preprocess(self, types_to_path=None, unlink_clones=True): + """Preprocess the SVG into an export-friendly document by converting + certain objects to path beforehand. + + Args: + types_to_path (List[str], optional): List of element types to convert to + path. Defaults to all text elements and all non-path shape elements. + unlink_clones (bool, optional): If clones should be unlinked. Defaults to + True. + + Returns: + _type_: _description_ + """ + if types_to_path is None: + types_to_path = [ + "flowRoot", + "rect", + "circle", + "ellipse", + "line", + "polyline", + "polygon", + "text", + ] + actions = ["unlock-all"] + if "flowRoot" in types_to_path: + # Flow roots contain rectangles inside them, so they need to be + # converted to paths separately from other shapes + actions += [ + "select-by-element:flowRoot", + "object-to-path", + "select-clear", + ] + types_to_path.remove("flowRoot") + + # Now convert all non-paths to paths + actions += ["select-by-element:" + i for i in types_to_path] + actions += ["object-to-path", "select-clear"] + # unlink clones + if unlink_clones: + actions += ["select-by-element:use", "object-unlink-clones"] + # save and overwrite + actions += ["export-overwrite", "export-do"] + + infile = os.path.join(self.tempdir, "input.svg") + write_svg(self.document, infile) + try: + inkscape(infile, actions=";".join(actions)) + except ProgramRunError as err: + errormsg(_("An error occurred during document preparation")) + errormsg(err.stderr.decode("utf-8")) + + with open(infile, "r") as stream: + self.document = load_svg(stream) + self.svg = self.document.getroot() + + +class RasterOutputExtension(InkscapeExtension): + """ + Takes a PNG from Inkscape and outputs it to another raster format. + + .. versionadded:: 1.1 + """ + + def __init__(self): + super().__init__() + self.img = None + + def load(self, stream): + from PIL import Image + + # disable the PIL decompression bomb DOS attack check. + Image.MAX_IMAGE_PIXELS = None + + self.img = Image.open(stream) + + def effect(self): + """Not needed since image isn't being changed""" + + def save(self, stream): + """Implement raster image saving here from PIL""" + raise NotImplementedError("Raster Output extension requires a save method!") + + +class InputExtension(SvgOutputMixin, InkscapeExtension): + """ + Takes any type of file as input and outputs SVG which Inkscape can read. + + Used in functions for `Open` + """ + + def effect(self): + """Effect isn't needed for a lot of Input extensions""" + + def load(self, stream): + """But load certainly is, we give a more exact message here""" + raise NotImplementedError("Input extensions require a load(stream) method!") + + +class CallExtension(TempDirMixin, InputExtension): + """Call an external program to get the output""" + + input_ext = "svg" + output_ext = "svg" + + def load(self, stream): + pass # Not called (load_raw instead) + + def load_raw(self): + # Don't call InputExtension.load_raw + TempDirMixin.load_raw(self) + input_file = self.options.input_file + + if not isinstance(input_file, str): + data = input_file.read() + input_file = os.path.join(self.tempdir, "input." + self.input_ext) + with open(input_file, "wb") as fhl: + fhl.write(data) + + output_file = os.path.join(self.tempdir, "output." + self.output_ext) + document = self.call(input_file, output_file) or output_file + if isinstance(document, str): + if not os.path.isfile(document): + raise IOError(f"Can't find generated document: {document}") + + if self.output_ext == "svg": + with open(document, "r", encoding="utf-8") as fhl: + document = fhl.read() + if "<" in document: + document = load_svg(document.encode("utf-8")) + else: + with open(document, "rb") as fhl: + document = fhl.read() + + self.document = document + + def call(self, input_file, output_file): + """Call whatever programs are needed to get the desired result.""" + raise NotImplementedError("Call extensions require a call(in, out) method!") + + +class GenerateExtension(EffectExtension): + """ + Does not need any SVG, but instead just outputs an SVG fragment which is + inserted into Inkscape, centered on the selection. + """ + + container_label = "" + container_layer = False + + def generate(self): + """ + Return an SVG fragment to be inserted into the selected layer of the document + OR yield multiple elements which will be grouped into a container group + element which will be given an automatic label and transformation. + """ + raise NotImplementedError("Generate extensions must provide generate()") + + def container_transform(self): + """ + Generate the transformation for the container group, the default is + to return the center position of the svg document or view port. + """ + (pos_x, pos_y) = self.svg.namedview.center + if pos_x is None: + pos_x = 0 + if pos_y is None: + pos_y = 0 + return Transform(translate=(pos_x, pos_y)) + + def create_container(self): + """ + Return the container the generated elements will go into. + + Default is a new layer or current layer depending on the :attr:`container_layer` + flag. + + .. versionadded:: 1.1 + """ + container = (Layer if self.container_layer else Group).new(self.container_label) + if self.container_layer: + self.svg.append(container) + else: + container.transform = self.container_transform() + parent = self.svg.get_current_layer() + try: + parent_transform = parent.composed_transform() + except AttributeError: + pass + else: + container.transform = -parent_transform @ container.transform + parent.append(container) + return container + + def effect(self): + layer = self.svg.get_current_layer() + fragment = self.generate() + if isinstance(fragment, types.GeneratorType): + container = self.create_container() + for child in fragment: + if isinstance(child, BaseElement): + container.append(child) + elif isinstance(fragment, BaseElement): + layer.append(fragment) + else: + errormsg("Nothing was generated\n") + + +class TemplateExtension(EffectExtension): + """ + Provide a standard way of creating templates. + """ + + size_rex = re.compile(r"([\d.]*)(\w\w)?x([\d.]*)(\w\w)?") + template_id = "SVGRoot" + + def __init__(self): + self.svg = None + super().__init__() + # Arguments added on after add_arguments so it can be overloaded cleanly. + self.arg_parser.add_argument("--size", type=self.arg_size(), dest="size") + self.arg_parser.add_argument("--width", type=int, default=800) + self.arg_parser.add_argument("--height", type=int, default=600) + self.arg_parser.add_argument("--orientation", default=None) + self.arg_parser.add_argument("--unit", default="px") + self.arg_parser.add_argument("--grid", type=Boolean) + # self.svg = None + + def get_template(self, **kwargs): + """Can be over-ridden with custom svg loading here""" + return self.document + + def arg_size(self, unit="px"): + """Argument is a string of the form X[unit]xY[unit], default units apply + when missing""" + + def _inner(value): + try: + value = float(value) + return (value, unit, value, unit) + except ValueError: + pass + match = self.size_rex.match(str(value)) + if match is not None: + size = match.groups() + return ( + float(size[0]), + size[1] or unit, + float(size[2]), + size[3] or unit, + ) + return None + + return _inner + + def get_size(self): + """Get the size of the new template (defaults to size options)""" + size = self.options.size + if self.options.size is None: + size = ( + self.options.width, + self.options.unit, + self.options.height, + self.options.unit, + ) + if ( + self.options.orientation == "horizontal" + and size[0] < size[2] + or self.options.orientation == "vertical" + and size[0] > size[2] + ): + size = size[2:4] + size[0:2] + return size + + def effect(self): + """Creates a template, do not over-ride""" + (width, width_unit, height, height_unit) = self.get_size() + width_px = int(self.svg.uutounit(width, "px")) + height_px = int(self.svg.uutounit(height, "px")) + + self.document = self.get_template() + self.svg = self.document.getroot() + self.svg.set("id", self.template_id) + self.svg.set("width", str(width) + width_unit) + self.svg.set("height", str(height) + height_unit) + self.svg.set("viewBox", f"0 0 {width} {height}") + self.set_namedview(width_px, height_px, width_unit) + + def set_namedview(self, width, height, unit): + """Setup the document namedview""" + self.svg.namedview.set("inkscape:document-units", unit) + self.svg.namedview.set("inkscape:zoom", "0.25") + self.svg.namedview.set("inkscape:cx", str(width / 2.0)) + self.svg.namedview.set("inkscape:cy", str(height / 2.0)) + if self.options.grid: + self.svg.namedview.set("showgrid", "true") + self.svg.namedview.add(Grid(type="xygrid")) + + +class ColorExtension(EffectExtension): + """ + A standard way to modify colours in an svg document. + """ + + process_none = False # should we call modify_color for the "none" color. + select_all = (ShapeElement,) + pass_rgba = False + """ + If true, color and opacity are processed together (as RGBA color) + by :func:`modify_color`. + + If false (default), they are processed independently by `modify_color` and + `modify_opacity`. + + .. versionadded:: 1.2 + """ + + def __init__(self): + super().__init__() + self._renamed = {} + + def effect(self): + # Limiting to shapes ignores Gradients (and other things) from the select_all + # this prevents defs from being processed twice. + self._renamed = {} + gradients = CloningVat(self.svg) + for elem in self.svg.selection.get(ShapeElement): + self.process_element(elem, gradients) + gradients.process(self.process_elements, types=(ShapeElement,)) + + def process_elements(self, elem): + """Process multiple elements (gradients)""" + for child in elem.descendants(): + self.process_element(child) + + def process_element(self, elem, gradients=None): + """Process one of the selected elements""" + style = elem.specified_style() + # Colours first + for name in ( + elem.style.associated_props if self.pass_rgba else elem.style.color_props + ): + if name not in style: + continue # we don't want to process default values + try: + value = style(name) + except ColorError: + continue # bad color value, don't touch. + if isinstance(value, Color): + col = Color(value) + if self.pass_rgba: + col = col.to_rgba( + alpha=elem.style(elem.style.associated_props[name]) + ) + rgba_result = self._modify_color(name, col) + elem.style.set_color(rgba_result, name) + + if isinstance(value, (LinearGradient, RadialGradient, Pattern)): + gradients.track(value, elem, self._ref_cloned, style=style, name=name) + if value.href is not None: + gradients.track(value.href, elem, self._xlink_cloned, linker=value) + # Then opacities (usually does nothing) + if self.pass_rgba: + return + for name in elem.style.opacity_props: + value = style(name) + result = self.modify_opacity(name, value) + if result not in (value, 1): # only modify if not equal to old or default + elem.style[name] = result + + def _ref_cloned(self, old_id, new_id, style, name): + self._renamed[old_id] = new_id + style[name] = f"url(#{new_id})" + + def _xlink_cloned(self, old_id, new_id, linker): # pylint: disable=unused-argument + lid = linker.get("id") + linker = self.svg.getElementById(self._renamed.get(lid, lid)) + linker.href = new_id + + def _modify_color(self, name, color): + """Pre-process color value to filter out bad colors""" + if color or self.process_none: + return self.modify_color(name, color) + return color + + def modify_color(self, name, color): + """Replace this method with your colour modifier method""" + raise NotImplementedError("Provide a modify_color method.") + + def modify_opacity( + self, name, opacity + ): # pylint: disable=no-self-use, unused-argument + """Optional opacity modification""" + return opacity + + +class TextExtension(EffectExtension): + """ + A base effect for changing text in a document. + """ + + newline = True + newpar = True + + def effect(self): + nodes = self.svg.selection or {None: self.document.getroot()} + for elem in nodes.values(): + self.process_element(elem) + + def process_element(self, node): + """Reverse the node text""" + if node.get("sodipodi:role") == "line": + self.newline = True + elif isinstance(node, (TextElement, FlowPara, FlowDiv)): + self.newline = True + self.newpar = True + + if node.text is not None: + node.text = self.process_chardata(node.text) + self.newline = False + self.newpar = False + + for child in node: + self.process_element(child) + + if node.tail is not None: + node.tail = self.process_chardata(node.tail) + + def process_chardata(self, text): + """Replaceable chardata method for processing the text""" + return "".join(map(self.map_char, text)) + + @staticmethod + def map_char(char): + """Replaceable map_char method for processing each letter""" + raise NotImplementedError( + "Please provide a process_chardata or map_char static method." + ) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/README.md b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/README.md new file mode 100644 index 0000000..fede673 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/README.md @@ -0,0 +1,13 @@ +# What is inkex.gui + +This module is a Gtk based GUI creator. It helps extensions launch their own user interfaces and can help make sure those interfaces will work on all platforms that Inkscape ships with. + +# How do I use it + +You can create custom user interfaces by using the [Gnome Glade builder program](https://gitlab.gnome.org/GNOME/glade). Once you have a layout of all the widgets you want, you then make a GtkApp and Window classes inside your Python program, when the GtkApp is run, the windows will be shown to the user and all signals specified for the widgets will call functions on your window class. + +Please see the existing code for examples of how to do this. + +# This is a fork + +This code was originally part of the package `gtkme` which contained some parts we didn't want to ship—such as Ubuntu indicators and internet pixmaps. To avoid conflicts, our stripped down version of the `gtkme` module is renamed and placed inside of Inkscape's `inkex` module. diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/__init__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/__init__.py new file mode 100644 index 0000000..0f9ac69 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/__init__.py @@ -0,0 +1,58 @@ +# +# Copyright 2011-2022 Martin Owens +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# +# pylint: disable=wrong-import-position +""" +This is a wrapper layer to make interacting with Gtk a little less painful. +The main issues with Gtk is that it expects an awful lot of the developer, +code which is repeated over and over and patterns which every single developer +will use are not given easy to use convenience functions. + +This makes Gtk programming WET, unattractive and error prone. This module steps +inbetween and adds in all those missing bits. It's not meant to replace Gtk and +certainly it's possible to use Gtk and threading directly. + +.. versionadded:: 1.2 +""" + +import os +import sys +import logging +import threading + +from ..utils import DependencyError + +try: + import gi + + gi.require_version("Gtk", "3.0") + + # Importing while covering stderr because pygobject has broken + # warnings support and will force import warnings on our users. + tmp, sys.stderr = sys.stderr, None # type: ignore + from gi.repository import Gtk, GLib + + sys.stderr = tmp # type: ignore +except ImportError: # pragma: no cover + raise DependencyError( + "You are missing the required libraries for Gtk." + " Please report this problem to the Inkscape developers." + ) + +from .app import GtkApp +from .window import Window, ChildWindow, FakeWidget +from .listview import TreeView, IconView, ViewColumn, ViewSort, Separator +from .pixmap import PixmapManager diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/app.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/app.py new file mode 100644 index 0000000..ba6fbf1 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/app.py @@ -0,0 +1,176 @@ +# coding=utf-8 +# +# Copyright 2011-2022 Martin Owens +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# +""" +Gtk Application base classes, providing a way to load a GtkBuilder +with a specific glade/ui file containing windows, and building +a usable pythonic interface from them. +""" +import os +import signal +import logging + +from gi.repository import Gtk, GLib + + +class GtkApp: + """ + This wraps gtk builder and allows for some extra functionality with + windows, especially the management of gtk main loops. + + Args: + start_loop (bool, optional): If set to true will start a new gtk main loop. + Defaults to False. + start_gui (bool, optional): Used as local propertes if unset and passed to + primary window when loaded. Defaults to True. + """ + + @property + def prefix(self): + """Folder prefix added to ui_dir""" + return self.kwargs.get("prefix", "") + + @property + def windows(self): + """Returns a list of windows for this app""" + return self.kwargs.get("windows", []) + + @property + def ui_dir(self): + """This is often the local directory""" + return self.kwargs.get("ui_dir", "./") + + @property + def ui_file(self): + """If a single file is used for multiple windows""" + return self.kwargs.get("ui_file", None) + + @property + def app_name(self): + """Set this variable in your class""" + try: + return self.kwargs["app_name"] + except KeyError: + raise NotImplementedError( + "App name is not set, pass in or set 'app_name' in class." + ) + + @property + def window(self): + """Return the primary window""" + return self._primary + + def __init__(self, start_loop=False, start_gui=True, **kwargs): + """Creates a new GtkApp.""" + self.kwargs = kwargs + self._loaded = {} + self._initial = {} + self._primary = None + + self.main_loop = GLib.main_depth() + + # Start with creating all the defined windows. + if start_gui: + self.init_gui() + # Start up a gtk main loop when requested + if start_loop: + self.run() + + def run(self): + """Run the gtk mainloop with ctrl+C and keyboard interrupt additions""" + if not Gtk.init_check()[0]: # pragma: no cover + raise RuntimeError( + "Gtk failed to start." " Make sure $DISPLAY variable is set.\n" + ) + try: + # Add a signal to force quit on Ctrl+C (just like the old days) + signal.signal(signal.SIGINT, signal.SIG_DFL) + Gtk.main() + except KeyboardInterrupt: # pragma: no cover + logging.info("User Interrupted") + logging.debug("Exiting %s", self.app_name) + + def get_ui_file(self, window): + """Load any given gtk builder file from a standard location.""" + paths = [ + os.path.join(self.ui_dir, self.prefix, f"{window}.ui"), + os.path.join(self.ui_dir, self.prefix, f"{self.ui_file}.ui"), + ] + for path in paths: + if os.path.isfile(path): + return path + raise FileNotFoundError(f"Gtk Builder file is missing: {paths}") + + def init_gui(self): + """Initialise all of our windows and load their signals""" + if self.windows: + for cls in self.windows: + window = cls + logging.debug("Adding window %s to GtkApp", window.name) + self._initial[window.name] = window + for window in self._initial.values(): + if window.primary: + if not self._primary: + self._primary = self.load_window(window.name) + if not self.windows or not self._primary: + raise KeyError(f"No primary window found for '{self.app_name}' app.") + + def load_window(self, name, *args, **kwargs): + """Load a specific window from our group of windows""" + window = self.proto_window(name) + window.init(*args, **kwargs) + return window + + def load_window_extract(self, name, **kwargs): + """Load a child window as a widget container""" + window = self.proto_window(name) + window.load_widgets(**kwargs) + return window.extract() + + def proto_window(self, name): + """ + Loads a Glade window as a window without initialisation, used for + extracting widgets from windows without loading them as windows. + """ + logging.debug("Loading '%s' from %s", name, self._initial) + if name in self._initial: + # Create a new instance of this window + window = self._initial[name](self) + # Save the window object linked against the gtk window instance + self._loaded[window.wid] = window + return window + raise KeyError(f"Can't load window '{name}', class not found.") + + def remove_window(self, window): + """Remove the window from the list and exit if none remain""" + if window.wid in self._loaded: + self._loaded.pop(window.wid) + else: + logging.warning("Missing window '%s' on exit.", window.name) + logging.debug("Loaded windows: %s", self._loaded) + if not self._loaded: + self.exit() + + def exit(self): + """Exit our gtk application and kill gtk main if we have to""" + if self.main_loop < GLib.main_depth(): + # Quit Gtk loop if we started one. + tag = self._primary.name if self._primary else "program" + logging.debug("Quit '%s' Main Loop.", tag) + Gtk.main_quit() + # You have to return in order for the loop to exit + return 0 diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/asyncme.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/asyncme.py new file mode 100644 index 0000000..d12ec5d --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/asyncme.py @@ -0,0 +1,329 @@ +# +# Copyright 2015 Ian Denhardt +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# +"""Convenience library for concurrency + +GUI apps frequently need concurrency, for example to avoid blocking UI while +doing some long running computation. This module provides helpers for doing +this kind of thing. + +The functions/methods here which spawn callables asynchronously +don't supply a direct way to provide arguments. Instead, the user is +expected to use a lambda, e.g:: + + holding(lck, lambda: do_stuff(1,2,3, x='hello')) + +This is because the calling function may have additional arguments which +could obscure the user's ability to pass arguments expected by the called +function. For example, in the call:: + + holding(lck, lambda: run_task(blocking=True), blocking=False) + +the blocking argument to holding might otherwise conflict with the +blocking argument to run_task. +""" +import time +import threading +from datetime import datetime, timedelta + +from functools import wraps +from typing import Any, Tuple +from gi.repository import Gdk, GLib + + +class Future: + """A deferred result + + A `Future` is a result-to-be; it can be used to deliver a result + asynchronously. Typical usage: + + >>> def background_task(task): + ... ret = Future() + ... def _task(x): + ... return x - 4 + 2 + ... thread = threading.Thread(target=lambda: ret.run(lambda: _task(7))) + ... thread.start() + ... return ret + >>> # Do other stuff + >>> print(ret.wait()) + 5 + + :func:`run` will also propagate exceptions; see its docstring for details. + """ + + def __init__(self): + self._lock = threading.Lock() + self._value = None + self._exception = None + self._lock.acquire() + + def is_ready(self): + """Return whether the result is ready""" + result = self._lock.acquire(False) + if result: + self._lock.release() + return result + + def wait(self): + """Wait for the result. + + `wait` blocks until the result is ready (either :func:`result` or + :func:`exception` has been called), and then returns it (in the case + of :func:`result`), or raises it (in the case of :func:`exception`). + """ + with self._lock: + if self._exception is None: + return self._value + else: + raise self._exception # pylint: disable=raising-bad-type + + def result(self, value): + """Supply the result as a return value. + + ``value`` is the result to supply; it will be returned when + :func:`wait` is called. + """ + self._value = value + self._lock.release() + + def exception(self, err): + """Supply an exception as the result. + + Args: + err (Exception): an exception, which will be raised when :func:`wait` + is called. + """ + self._exception = err + self._lock.release() + + def run(self, task): + """Calls task(), and supplies the result. + + If ``task`` raises an exception, pass it to :func:`exception`. + Otherwise, pass the return value to :func:`result`. + """ + try: + self.result(task()) + except Exception as err: # pylint: disable=broad-except + self.exception(err) + + +class DebouncedSyncVar: + """A synchronized variable, which debounces its value + + :class:`DebouncedSyncVar` supports three operations: put, replace, and get. + get will only retrieve a value once it has "settled," i.e. at least + a certain amount of time has passed since the last time the value + was modified. + """ + + def __init__(self, delay_seconds=0): + """Create a new dsv with the supplied delay, and no initial value.""" + self._cv = threading.Condition() + self._delay = timedelta(seconds=delay_seconds) + + self._deadline = None + self._value = None + + self._have_value = False + + def set_delay(self, delay_seconds): + """Set the delay in seconds of the debounce.""" + with self._cv: + self._delay = timedelta(seconds=delay_seconds) + + def get(self, blocking=True, remove=True) -> Tuple[Any, bool]: + """Retrieve a value. + + Args: + blocking (bool, optional): if True, block until (1) the dsv has a value + and (2) the value has been unchanged for an amount of time greater + than or equal to the dsv's delay. Otherwise, if these conditions + are not met, return ``(None, False)`` immediately. Defaults to True. + remove (bool, optional): if True, remove the value when returning it. + Otherwise, leave it where it is.. Defaults to True. + + Returns: + Tuple[Any, bool]: Tuple (value, ok). ``value`` is the value of the variable + (if successful, see above), and ok indicates whether or not a value was + successfully retrieved. + """ + while True: + with self._cv: + # If there's no value, either wait for one or return + # failure. + while not self._have_value: + if blocking: + self._cv.wait() + else: + return None, False # pragma: no cover + + now = datetime.now() + deadline = self._deadline + value = self._value + if deadline <= now: + # Okay, we're good. Remove the value if necessary, and + # return it. + if remove: + self._have_value = False + self._value = None + self._cv.notify() + return value, True + + # Deadline hasn't passed yet. Either wait or return failure. + if blocking: + time.sleep((deadline - now).total_seconds()) + else: + return None, False # pragma: no cover + + def replace(self, value): + """Replace the current value of the dsv (if any) with ``value``. + + replace never blocks (except briefly to acquire the lock). It does not + wait for any unit of time to pass (though it does reset the timer on + completion), nor does it wait for the dsv's value to appear or + disappear. + """ + with self._cv: + self._replace(value) + + def put(self, value): + """Set the dsv's value to ``value``. + + If the dsv already has a value, this blocks until the value is removed. + Upon completion, this resets the timer. + """ + with self._cv: + while self._have_value: + self._cv.wait() + self._replace(value) + + def _replace(self, value): + self._have_value = True + self._value = value + self._deadline = datetime.now() + self._delay + self._cv.notify() + + +def spawn_thread(func): + """Call ``func()`` in a separate thread + + Returns the corresponding :class:`threading.Thread` object. + """ + thread = threading.Thread(target=func) + thread.start() + return thread + + +def in_mainloop(func): + """Run f() in the gtk main loop + + Returns a :class:`Future` object which can be used to retrieve the return + value of the function call. + + :func:`in_mainloop` exists because Gtk isn't threadsafe, and therefore cannot be + manipulated except in the thread running the Gtk main loop. :func:`in_mainloop` + can be used by other threads to manipulate Gtk safely. + """ + future = Future() + + def handler(*_args, **_kwargs): + """Function to be called in the future""" + future.run(func) + + Gdk.threads_add_idle(0, handler, None) + return future + + +def mainloop_only(f): + """A decorator which forces a function to only be run in Gtk's main loop. + + Invoking a decorated function as ``f(*args, **kwargs)`` is equivalent to + using the undecorated function (from a thread other than the one running + the Gtk main loop) as:: + + in_mainloop(lambda: f(*args, **kwargs)).wait() + + :func:`mainloop_only` should be used to decorate functions which are unsafe + to run outside of the Gtk main loop. + """ + + @wraps(f) + def wrapper(*args, **kwargs): + if GLib.main_depth(): + # Already in a mainloop, so just run it. + return f(*args, **kwargs) + return in_mainloop(lambda: f(*args, **kwargs)).wait() + + return wrapper + + +def holding(lock, task, blocking=True): + """Run task() while holding ``lock``. + + Args: + blocking (bool, optional): if True, wait for the lock before running. + Otherwise, if the lock is busy, return None immediately, and don't + spawn `task`. Defaults to True. + + Returns: + Union[Future, None]: The return value is a future which can be used to retrieve + the result of running task (or None if the task was not run). + """ + if not lock.acquire(False): + return None + ret = Future() + + def _target(): + ret.run(task) + if ret._exception: # pragma: no cover + ret.wait() + lock.release() + + threading.Thread(target=_target).start() + return ret + + +def run_or_wait(func): + """A decorator which runs the function using :func:`holding` + + This function creates a single lock for this function and + waits for the lock to release before returning. + + See :func:`holding` above, with ``blocking=True`` + """ + lock = threading.Lock() + + def _inner(*args, **kwargs): + return holding(lock, lambda: func(*args, **kwargs), blocking=True) + + return _inner + + +def run_or_none(func): + """A decorator which runs the function using :func:`holding` + + This function creates a single lock for this function and + returns None if the process is already running (locked) + + See :func:`holding` above with ``blocking=True`` + """ + lock = threading.Lock() + + def _inner(*args, **kwargs): + return holding(lock, lambda: func(*args, **kwargs), blocking=False) + + return _inner diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/listview.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/listview.py new file mode 100644 index 0000000..56939e7 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/listview.py @@ -0,0 +1,562 @@ +# +# Copyright 2011-2022 Martin Owens +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# +""" +Wraps the gtk treeview and iconview in something a little nicer. +""" + +import logging + +from typing import Tuple, Type, Optional +from gi.repository import Gtk, Gdk, GObject, GdkPixbuf, Pango + +from .pixmap import PixmapManager, SizeFilter + +GOBJ = GObject.TYPE_PYOBJECT + + +def default(item, attr, d=None): + """Python logic to choose an attribute, call it if required and return""" + if hasattr(item, attr): + prop = getattr(item, attr) + if callable(prop): + prop = prop() + return prop + return d + + +def cmp(a, b): + """Compare two objects""" + return (a > b) - (a < b) + + +def item_property(name, d=None): + def inside(item): + return default(item, name, d) + + return inside + + +def label(obj): + if isinstance(obj, tuple): + return " or ".join([label(o) for o in obj]) + if not isinstance(obj, type): + obj = type(obj) + return obj.__name__ + + +class BaseView: + """Controls for tree and icon views, a base class""" + + widget_type: Optional[Type[Gtk.Widget]] = None + + def __init__(self, widget, liststore=None, **kwargs): + if not isinstance(widget, self.widget_type): + lbl1 = label(self.widget_type) + lbl2 = label(widget) + raise TypeError(f"Wrong widget type: Expected {lbl1} got {lbl2}") + + self.selected_signal = kwargs.get("selected", None) + self._iids = [] + self._list = widget + self.args = kwargs + self.selected = None + self._data = None + self.no_dupes = True + self._model = self.create_model(liststore or widget.get_model()) + self._list.set_model(self._model) + self.setup() + + self._list.connect(self.changed_signal, self.item_selected_signal) + + def get_model(self): + """Returns the current data store model""" + return self._model + + def create_model(self, liststore): + """Setup the model and list""" + if not isinstance(liststore, (Gtk.ListStore, Gtk.TreeStore)): + lbl = label(liststore) + raise TypeError(f"Expected List or TreeStore, got {lbl}") + return liststore + + def refresh(self): + """Attempt to refresh the listview""" + self._list.queue_draw() + + def setup(self): + """Setup columns, views, sorting etc""" + pass + + def get_item_id(self, item): + """ + Return an id set against this item. + + If item.get_id() is set then duplicates will be ignored. + """ + if hasattr(item, "get_id"): + return item.get_id() + return None + + def replace(self, new_item, item_iter=None): + """Replace all items, or a single item with object""" + if item_iter: + self.remove_item(item_iter) + self.add_item(new_item) + else: + self.clear() + self._data = new_item + self.add_item(new_item) + + def item_selected(self, item=None, *others): + """Base method result, called as an item is selected""" + if self.selected != item: + self.selected = item + if self.selected_signal and item: + self.selected_signal(item) + + def remove_item(self, item=None): + """Remove an item from this view""" + return self._model.remove(self.get_iter(item)) + + def check_item_id(self, item): + """Item id is recorded to guard against duplicates""" + iid = self.get_item_id(item) + if iid in self._iids and self.no_dupes: + raise ValueError(f"Will not add duplicate row {iid}") + if iid: + self._iids.append(iid) + + def __iter__(self): + ret = [] + + def collect_all(store, treepath, treeiter): + ret.append((self.get_item(treeiter), treepath, treeiter)) + + self._model.foreach(collect_all) + return ret.__iter__() + + def set_sensitive(self, sen=True): + """Proxy the GTK property for sensitivity""" + self._list.set_sensitive(sen) + + def clear(self): + """Clear all items from this treeview""" + self._iids = [] + self._model.clear() + + def item_double_clicked(self, *items): + """What happens when you double click an item""" + return items # Nothing + + def get_item(self, item_iter): + """Return the object of attention from an iter""" + return self._model[self.get_iter(item_iter)][0] + + def get_iter(self, item, path=False): + """Return the iter given the item""" + if isinstance(item, Gtk.TreePath): + return item if path else self._model.get_iter(item) + if isinstance(item, Gtk.TreeIter): + return self._model.get_path(item) if path else item + for src_item, src_path, src_iter in self: + if item == src_item: + return src_path if path else src_iter + return None + + +class TreeView(BaseView): + """Controls and operates a tree view.""" + + column_size = 16 + widget_type = Gtk.TreeView + changed_signal = "cursor_changed" + + def setup(self): + """Setup the treeview""" + self._sel = self._list.get_selection() + self._sel.set_mode(Gtk.SelectionMode.MULTIPLE) + self._list.connect("button-press-event", self.item_selected_signal) + # Separators should do something + self._list.set_row_separator_func(TreeView.is_separator, None) + super().setup() + + @staticmethod + def is_separator(model, item_iter, data): + """Internal function for seperator checking""" + return isinstance(model.get_value(item_iter, 0), Separator) + + def get_selected_items(self): + """Return a list of selected item objects""" + return [self.get_item(row) for row in self._sel.get_selected_rows()[1]] + + def set_selected_items(self, *items): + """Select the given items""" + self._sel.unselect_all() + for item in items: + path_item = self.get_iter(item, path=True) + if path_item is not None: + self._sel.select_path(path_item) + + def is_selected(self, item): + """Return true if the item is selected""" + return self._sel.iter_is_selected(self.get_iter(item)) + + def add(self, target, parent=None): + """Add all items from the target to the treeview""" + for item in target: + self.add_item(item, parent=parent) + + def add_item(self, item, parent=None): + """Add a single item image to the control, returns the TreePath""" + if item is not None: + self.check_item_id(item) + return self._add_item([item], self.get_iter(parent)) + raise ValueError("Item can not be None.") + + def _add_item(self, item, parent): + return self.get_iter(self._model.append(parent, item), path=True) + + def item_selected_signal(self, *args, **kwargs): + """Signal for selecting an item""" + return self.item_selected(*self.get_selected_items()) + + def item_button_clicked(self, _, event): + """Signal for mouse button click""" + if event is None or event.type == Gdk.EventType._2BUTTON_PRESS: + self.item_double_clicked(*self.get_selected_items()) + + def expand_item(self, item, expand=True): + """Expand one of our nodes""" + self._list.expand_row(self.get_iter(item, path=True), expand) + + def create_model(self, liststore=None): + """Set up an icon view for showing gallery images""" + if liststore is None: + liststore = Gtk.TreeStore(GOBJ) + return super().create_model(liststore) + + def create_column(self, name, expand=True): + """ + Create and pack a new column to this list. + + name - Label in the column header + expand - Should the column expand + """ + return ViewColumn(self._list, name, expand=expand) + + def create_sort(self, *args, **kwargs): + """ + Create and attach a sorting view to this list. + + see ViewSort arguments for details. + """ + return ViewSort(self._list, *args, **kwargs) + + +class ComboBox(TreeView): + """Controls and operates a combo box list.""" + + widget_type = Gtk.ComboBox + changed_signal = "changed" + + def setup(self): + pass + + def get_selected_item(self): + """Return the selected item of this combo box""" + return self.get_item(self._list.get_active_iter()) + + def set_selected_item(self, item): + """Set the given item as the selected item""" + self._list.set_active_iter(self.get_iter(item)) + + def is_selected(self, item): + """Returns true if this item is the selected item""" + return self.get_selected_item() == item + + def get_selected_items(self): + """Return a list of selected items (one)""" + return [self.get_selected_item()] + + +class IconView(BaseView): + """Allows a simpler IconView for DBus List Objects""" + + widget_type = Gtk.IconView + changed_signal = "selection-changed" + + def __init__(self, widget, pixmaps, *args, **kwargs): + super().__init__(widget, *args, **kwargs) + self.pixmaps = pixmaps + + def set_selected_item(self, item): + """Sets the selected item to this item""" + path = self.get_iter(item, path=True) + if path: + self._list.set_cursor(path, None, False) + + def get_selected_items(self): + """Return the seleced item""" + return [self.get_item(path) for path in self._list.get_selected_items()] + + def create_model(self, liststore): + """Setup the icon view control and model""" + if not liststore: + liststore = Gtk.ListStore(GOBJ, str, GdkPixbuf.Pixbuf) + return super().create_model(liststore) + + def setup(self): + """Setup the columns for the iconview""" + self._list.set_markup_column(1) + self._list.set_pixbuf_column(2) + super().setup() + + def add(self, target): + """Add all items from the target to the iconview""" + for item in target: + self.add_item(item) + + def add_item(self, item): + """Add a single item image to the control""" + if item is not None: + self.check_item_id(item) + return self._add_item(item) + raise ValueError("Item can not be None.") + + def get_markup(self, item): + """Default text return for markup.""" + return default(item, "name", str(item)) + + def get_icon(self, item): + """Default icon return, pixbuf or gnome theme name""" + return default(item, "icon", None) + + def _get_icon(self, item): + return self.pixmaps.get(self.get_icon(item), item=item) + + def _add_item(self, item): + """ + Each item's properties must be stuffed into the ListStore directly + or the IconView won't see them, but only if on auto. + """ + if not isinstance(item, (tuple, list)): + item = [item, self.get_markup(item), self._get_icon(item)] + return self._model.append(item) + + def item_selected_signal(self, *args, **kwargs): + """Item has been selected""" + return self.item_selected(*self.get_selected_items()) + + +class ViewSort(object): + """ + A sorting function for use is ListViews + + ascending - Boolean which direction to sort + contains - Contains this string + data - A string or function to get data from each item. + exact - Compare to this exact string instead. + """ + + def __init__(self, widget, data=None, ascending=False, exact=None, contains=None): + self.tree = None + self.data = data + self.asc = ascending + self.comp = exact.lower() if exact else None + self.cont = contains + self.tree = widget + self.resort() + + def get_data(self, model, list_iter): + """Generate sortable data from the item""" + item = model.get_value(list_iter, 0) + if isinstance(self.data, str): + value = getattr(item, self.data) + elif callable(self.data): + value = self.data(item) + return value + + def sort_func(self, model, iter1, iter2, data): + """Called by Gtk to sort items""" + value1 = self.get_data(model, iter1) + value2 = self.get_data(model, iter2) + if value1 == None or value2 == None: + return 0 + if self.comp: + if cmp(self.comp, value1.lower()) == 0: + return 1 + elif cmp(self.comp, value2.lower()) == 0: + return -1 + return 0 + elif self.cont: + if self.cont in value1.lower(): + return 1 + elif self.cont in value2.lower(): + return -1 + return 0 + if value1 < value2: + return 1 + if value2 < value1: + return -1 + return 0 + + def resort(self): + model = self.tree.get_model() + model.set_sort_func(0, self.sort_func, None) + if self.asc: + model.set_sort_column_id(0, Gtk.SortType.ASCENDING) + else: + model.set_sort_column_id(0, Gtk.SortType.DESCENDING) + + +class ViewColumn(object): + """ + Add a column to a gtk treeview. + + name - The column name used as a label. + expand - Set column expansion. + """ + + def __init__(self, widget, name, expand=False): + if isinstance(widget, Gtk.TreeView): + column = Gtk.TreeViewColumn((name)) + column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) + column.set_expand(expand) + self._column = column + widget.append_column(self._column) + else: + # Deal with possible drop down lists + self._column = widget + + def add_renderer(self, renderer, func, expand=True): + """Set a custom renderer""" + self._column.pack_start(renderer, expand) + self._column.set_cell_data_func(renderer, func, None) + return renderer + + def add_image_renderer(self, icon, pad=0, pixmaps=None, size=None): + """ + Set the image renderer + + icon - The function that returns the image to be dsplayed. + pad - The amount of padding around the image. + pixmaps - The pixmap manager to use to get images. + size - Restrict the images to this size. + """ + # Manager where icons will be pulled from + filters = [SizeFilter] if size else [] + pixmaps = pixmaps or PixmapManager( + "", pixmap_dir="./", filters=filters, size=size + ) + + renderer = Gtk.CellRendererPixbuf() + renderer.set_property("ypad", pad) + renderer.set_property("xpad", pad) + func = self.image_func(icon or self.default_icon, pixmaps) + return self.add_renderer(renderer, func, expand=False) + + def add_text_renderer(self, text, wrap=None, template=None): + """ + Set the text renderer. + + text - the function that returns the text to be displayed. + wrap - The wrapping setting for this renderer. + template - A standard template used for this text markup. + """ + + renderer = Gtk.CellRendererText() + if wrap is not None: + renderer.props.wrap_width = wrap + renderer.props.wrap_mode = Pango.WrapMode.WORD + + renderer.props.background_set = True + renderer.props.foreground_set = True + + func = self.text_func(text or self.default_text, template) + return self.add_renderer(renderer, func, expand=True) + + @classmethod + def clean(cls, text, markup=False): + """Clean text of any pango markup confusing chars""" + if text is None: + text = "" + if isinstance(text, (str, int, float)): + if markup: + text = str(text).replace("<", "<").replace(">", ">") + return str(text).replace("&", "&") + elif isinstance(text, dict): + return dict([(k, cls.clean(v)) for k, v in text.items()]) + elif isinstance(text, (list, tuple)): + return tuple([cls.clean(value) for value in text]) + raise TypeError("Unknown value type for text: %s" % str(type(text))) + + def get_callout(self, call, default=None): + """Returns the right kind of method""" + if isinstance(call, str): + call = item_property(call, default) + return call + + def text_func(self, call, template=None): + """Wrap up our text functionality""" + callout = self.get_callout(call) + + def internal(column, cell, model, item_iter, data): + if TreeView.is_separator(model, item_iter, data): + return + item = model.get_value(item_iter, 0) + markup = template is not None + text = callout(item) + if isinstance(template, str): + text = template.format(self.clean(text, markup=True)) + else: + text = self.clean(text) + cell.set_property("markup", str(text)) + + return internal + + def image_func(self, call, pixmaps=None): + """Wrap, wrap wrap the func""" + callout = self.get_callout(call) + + def internal(column, cell, model, item_iter, data): + if TreeView.is_separator(model, item_iter, data): + return + item = model.get_value(item_iter, 0) + icon = callout(item) + # The or blank asks for the default icon from the pixmaps + if isinstance(icon or "", str) and pixmaps: + # Expect a Gnome theme icon + icon = pixmaps.get(icon) + elif icon: + icon = pixmaps.apply_filters(icon) + + cell.set_property("pixbuf", icon) + cell.set_property("visible", True) + + return internal + + def default_text(self, item): + """Default text return for markup.""" + return default(item, "name", str(item)) + + def default_icon(self, item): + """Default icon return, pixbuf or gnome theme name""" + return default(item, "icon", None) + + +class Separator: + """Reprisentation of a separator in a list""" diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/pixmap.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/pixmap.py new file mode 100644 index 0000000..02f4ce8 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/pixmap.py @@ -0,0 +1,346 @@ +# +# Copyright 2011-2022 Martin Owens +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# +""" +Provides wrappers for pixmap access. +""" + +import os +import logging + +from typing import List +from collections.abc import Iterable +from gi.repository import Gtk, GLib, GdkPixbuf + +ICON_THEME = Gtk.IconTheme.get_default() +BILINEAR = GdkPixbuf.InterpType.BILINEAR +HYPER = GdkPixbuf.InterpType.HYPER + +SIZE_ASPECT = 0 +SIZE_ASPECT_GROW = 1 +SIZE_ASPECT_CROP = 2 +SIZE_STRETCH = 3 + + +class PixmapLoadError(ValueError): + """Failed to load a pixmap""" + + +class PixmapFilter: # pylint: disable=too-few-public-methods + """Base class for filtering the pixmaps in a manager's output. + + required - List of values required for this filter. + + Use: + + class Foo(PixmapManager): + filters = [ PixmapFilterFoo ] + + """ + + required: List[str] = [] + optional: List[str] = [] + + def __init__(self, **kwargs): + self.enabled = True + for key in self.required: + if key not in kwargs: + self.enabled = False + else: + setattr(self, key, kwargs[key]) + + for key in self.optional: + if key in kwargs: + setattr(self, key, kwargs[key]) + + def filter(self, img, **kwargs): + """Run filter, replace this methodwith your own""" + raise NotImplementedError( + "Please add 'filter' method to your PixmapFilter class %s." + % type(self).__name__ + ) + + @staticmethod + def to_size(dat): + """Tries to calculate a size that will work for the data""" + if isinstance(dat, (int, float)): + return (dat, dat) + if isinstance(dat, Iterable) and len(dat) >= 2: + return (dat[0], dat[1]) + return None + + +class OverlayFilter(PixmapFilter): + """Adds an overlay to output images, overlay can be any name that + the owning pixmap manager can find. + + overlay : Name of overlay image + position : Location of the image: + 0 - Full size (1 to 1 overlay, default) + (x,y) - Percentage from one end to the other position 0-1 + alpha : Blending alpha, 0 - 255 + + """ + + optional = ["position", "overlay", "alpha"] + + def __init__(self, *args, **kwargs): + self.position = (0, 0) + self.overlay = None + self.alpha = 255 + super().__init__(*args, **kwargs) + self.pad_x, self.pad_y = self.to_size(self.position) + + def get_overlay(self, **kwargs): + if "manager" not in kwargs: + raise ValueError("PixmapManager must be provided when adding an overlay.") + return kwargs["manager"].get( + kwargs.get("overlay", None) or self.overlay, no_overlay=True + ) + + def filter(self, img, no_overlay=False, **kwargs): + # Recursion protection + if no_overlay: + return img + + overlay = self.get_overlay(**kwargs) + if overlay: + img = img.copy() + + (x, y, width, height) = self.set_position(overlay, img) + overlay.composite( + img, x, y, width, height, x, y, 1, 1, BILINEAR, self.alpha + ) + return img + + def set_position(self, overlay, img): + """Sets the position of img on the given width and height""" + img_w, img_h = img.get_width(), img.get_height() + ovl_w, ovl_h = overlay.get_width(), overlay.get_height() + return ( + max([0, (img_w - ovl_w) * self.pad_x]), + max([0, (img_h - ovl_h) * self.pad_y]), + min([ovl_w, img_w]), + min([ovl_h, img_h]), + ) + + +class SizeFilter(PixmapFilter): + """Resizes images to a certain size: + + resize_mode - Way in which the size is calculated + 0 - Best Aspect, don't grow + 1 - Best Aspect, grow + 2 - Cropped Aspect + 3 - Stretch + """ + + required = ["size"] + optional = ["resize_mode"] + + def __init__(self, *args, **kwargs): + self.size = None + self.resize_mode = SIZE_ASPECT + super().__init__(*args, **kwargs) + self.img_w, self.img_h = self.to_size(self.size) or (0, 0) + + def aspect(self, img_w, img_h): + """Get the aspect ratio of the image resized""" + if self.resize_mode == SIZE_STRETCH: + return (self.img_w, self.img_h) + + if ( + self.resize_mode == SIZE_ASPECT + and img_w < self.img_w + and img_h < self.img_h + ): + return (img_w, img_h) + (pcw, pch) = (self.img_w / img_w, self.img_h / img_h) + factor = ( + max(pcw, pch) if self.resize_mode == SIZE_ASPECT_CROP else min(pcw, pch) + ) + return (int(img_w * factor), int(img_h * factor)) + + def filter(self, img, **kwargs): + if self.size is not None: + (width, height) = self.aspect(img.get_width(), img.get_height()) + return img.scale_simple(width, height, HYPER) + return img + + +class PadFilter(SizeFilter): + """Add padding to the image to make it a standard size""" + + optional = ["padding"] + + def __init__(self, *args, **kwargs): + self.size = None + self.padding = 0.5 + super().__init__(*args, **kwargs) + self.pad_x, self.pad_y = self.to_size(self.padding) + + def filter(self, img, **kwargs): + (width, height) = (img.get_width(), img.get_height()) + if width < self.img_w or height < self.img_h: + target = GdkPixbuf.Pixbuf.new( + img.get_colorspace(), + True, + img.get_bits_per_sample(), + max([width, self.img_w]), + max([height, self.img_h]), + ) + target.fill(0x0) # Transparent black + + x = (target.get_width() - width) * self.pad_x + y = (target.get_height() - height) * self.pad_y + + img.composite(target, x, y, width, height, x, y, 1, 1, BILINEAR, 255) + return target + return img + + +class PixmapManager: + """Manage a set of cached pixmaps, returns the default image + if it can't find one or the missing image if that's available.""" + + missing_image = "image-missing" + default_image = "application-default-icon" + icon_theme = ICON_THEME + theme_size = 32 + filters: List[type] = [] + pixmap_dir = None + + def __init__(self, location="", **kwargs): + self.location = location + if self.pixmap_dir and not os.path.isabs(location): + self.location = os.path.join(self.pixmap_dir, location) + + self.loader_size = PixmapFilter.to_size(kwargs.pop("load_size", None)) + + # Add any instance specified filters first + self._filters = [] + for item in kwargs.get("filters", []) + self.filters: + if isinstance(item, PixmapFilter): + self._filters.append(item) + elif callable(item): + # Now add any class specified filters with optional kwargs + self._filters.append(item(**kwargs)) + + self.cache = {} + self.get_pixmap(self.default_image) + + def get(self, *args, **kwargs): + """Get a pixmap of any kind""" + return self.get_pixmap(*args, **kwargs) + + def get_missing_image(self): + """Get a missing image when other images aren't found""" + return self.get(self.missing_image) + + @staticmethod + def data_is_file(data): + """Test the file to see if it's a filename or not""" + return isinstance(data, str) and " +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# +""" +Structures for consistant testing of Gtk GUI programs. +""" + +import sys +from gi.repository import Gtk, GLib + + +class MainLoopProtection: + """ + This protection class provides a way to launch the Gtk mainloop in a test + friendly way. + + Exception handling hooks provide a way to see errors that happen + inside the main loop, raising them back to the caller. + A full timeout in seconds stops the gtk mainloop from operating + beyond a set time, acting as a kill switch in the event something + has gone horribly wrong. + + Use: + with MainLoopProtection(timeout=10s): + app.run() + """ + + def __init__(self, timeout=10): + self.timeout = timeout * 1000 + self._hooked = None + self._old_excepthook = None + + def __enter__(self): + # replace sys.excepthook with our own and remember hooked raised error + self._old_excepthook = sys.excepthook + sys.excepthook = self.excepthook + # Remove mainloop by force if it doesn't die within 10 seconds + self._timeout = GLib.timeout_add(self.timeout, self.idle_exit) + + def __exit__(self, exc, value, traceback): # pragma: no cover + """Put the except handler back, cancel the timer and raise if needed""" + if self._old_excepthook: + sys.excepthook = self._old_excepthook + # Remove the timeout, so we don't accidentally kill later mainloops + if self._timeout: + GLib.source_remove(self._timeout) + # Raise an exception if one happened during the test run + if self._hooked: + exc, value, traceback = self._hooked + if value and traceback: + raise value.with_traceback(traceback) + + def idle_exit(self): # pragma: no cover + """Try to going to kill any running mainloop.""" + GLib.idle_add(Gtk.main_quit) + + def excepthook(self, ex_type, ex_value, traceback): # pragma: no cover + """Catch errors thrown by the Gtk mainloop""" + self.idle_exit() + # Remember the exception data for raising inside the test context + if ex_value is not None: + self._hooked = [ex_type, ex_value, traceback] + # Fallback and double print the exception (remove if double printing is problematic) + return self._old_excepthook(ex_type, ex_value, traceback) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/window.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/window.py new file mode 100644 index 0000000..a5c1ef6 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/gui/window.py @@ -0,0 +1,201 @@ +# +# Copyright 2012-2022 Martin Owens +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# +# pylint: disable=too-many-instance-attributes +""" +Wraps the gtk windows with something a little nicer. +""" +import logging + +from gi.repository import Gtk + +PROPS = { + "Box": ["expand", "fill", "padding", "pack-type"], + "Grid": ["top-attach", "left-attach", "height", "width"], + "Table": ["top-attach", "left-attach", "bottom-attach", "right-attach"], +} + + +def protect(cls, *methods): + """Simple check for protecting an inherrited class from having + certain methods over-ridden""" + if not isinstance(cls, type): + cls = type(cls) + for method in methods: + if method in cls.__dict__: # pragma: no cover + raise RuntimeError( + f"{cls.__name__} in {cls.__module__} has" f" protected def {method}()" + ) + + +class Window: + """ + This wraps gtk windows and allows for having parent windows + + name = 'name-of-the-window' + + Should the window be the first loaded and end gtk when closed: + + primary = True/False + """ + + primary = True + name = None + + def __init__(self, gapp): + self.gapp = gapp + self.dead = False + self.parent = None + self.args = () + ui_file = gapp.get_ui_file(self.name) + + # Setup the gtk app connection + self.w_tree = Gtk.Builder() + self.widget = self.w_tree.get_object + self.w_tree.set_translation_domain(gapp.app_name) + self.w_tree.add_from_file(ui_file) + + # Setup the gtk builder window + self.window = self.widget(self.name) + if not self.window: # pragma: no cover + raise KeyError(f"Missing window widget '{self.name}' from '{ui_file}'") + + # Give us a window id to track this window + self.wid = str(hash(self.window)) + + def extract(self): + """Extract this window's container for use in other apps""" + for child in self.window.get_children(): + self.window.remove(child) + return child + + def init(self, parent=None, **kwargs): + """Initialise the window within the GtkApp""" + if "replace" not in kwargs: + protect(self, "destroy", "exit", "load_window", "proto_window") + self.args = kwargs + # Set object defaults + self.parent = parent + + self.w_tree.connect_signals(self) + + # These are some generic convience signals + self.window.connect("destroy", self.exit) + + # If we have a parent window, then we expect not to quit + if self.parent: + self.window.set_transient_for(self.parent) + self.parent.set_sensitive(False) + + # We may have some more gtk widgets to setup + self.load_widgets(**self.args) + self.window.show() + + def load_window(self, name, *args, **kwargs): + """Load child window, automatically sets parent""" + kwargs["parent"] = self.window + return self.gapp.load_window(name, *args, **kwargs) + + def load_widgets(self): + """Child class should use this to create widgets""" + + def destroy(self, widget=None): # pylint: disable=unused-argument + """Destroy the window""" + logging.debug("Destroying Window '%s'", self.name) + self.window.destroy() + # We don't need to call self.exit(), handeled by window event. + + def pre_exit(self): + """Internal method for what to do when the window has died""" + + def exit(self, widget=None): + """Called when the window needs to exit.""" + # Is the signal called by the window or by something else? + if not widget or not isinstance(widget, Gtk.Window): + self.destroy() + # Clean up any required processes + self.pre_exit() + if self.parent: + # We assume the parent didn't load another gtk loop + self.parent.set_sensitive(True) + # Exit our entire app if this is the primary window + # Or just remove from parent window list, which may still exit. + if self.primary: + logging.debug("Exiting the application") + self.gapp.exit() + else: + logging.debug("Removing Window %s from parent", self.name) + self.gapp.remove_window(self) + # Now finish up what ever is left to do now the window is dead. + self.dead = True + self.post_exit() + return widget + + def post_exit(self): + """Called after we've killed the window""" + + def if_widget(self, name): + """ + Attempt to get the widget from gtk, but if not return a fake that won't + cause any trouble if we don't further check if it's real. + """ + return self.widget(name) or FakeWidget(name) + + def replace(self, old, new): + """Replace the old widget with the new widget""" + if isinstance(old, str): + old = self.widget(old) + if isinstance(new, str): + new = self.widget(new) + target = old.get_parent() + source = new.get_parent() + if target is not None: + if source is not None: + source.remove(new) + target.remove(old) + target.add(new) + + @staticmethod + def get_widget_name(obj): + """Return the widget's name in the builder file""" + return Gtk.Buildable.get_name(obj) + + +class ChildWindow(Window): + """ + Base class for child window objects, these child windows are typically + window objects in the same gtk builder file as their parents. If you just want + to make a window that interacts with a parent window, use the normal + Window class and call with the optional parent attribute. + """ + + primary = False + + +class FakeWidget: + """A fake widget class that can take calls""" + + def __init__(self, name): + self._name = name + + def __getattr__(self, name): + def _fake(*args, **kwargs): + logging.info("Calling fake method: %s:%s", args, kwargs) + + return _fake + + def __bool__(self): + return False diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/interfaces/IElement.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/interfaces/IElement.py new file mode 100644 index 0000000..3e9df53 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/interfaces/IElement.py @@ -0,0 +1,39 @@ +"""Element abstractions for type comparisons without circular imports + +.. versionadded:: 1.2""" + +from __future__ import annotations + +from abc import ABC, abstractmethod + +import sys +from lxml import etree + +if sys.version_info >= (3, 8): + from typing import Protocol +else: + from typing_extensions import Protocol + + +class IBaseElement(ABC, etree.ElementBase): + """Abstraction for BaseElement to avoid circular imports""" + + @abstractmethod + def get_id(self, as_url=0): + """Returns the element ID. If not set, generates a unique ID.""" + raise NotImplementedError + + +class BaseElementProtocol(Protocol): + """Abstraction for BaseElement, to be used as typehint in mixin classes""" + + def get_id(self, as_url=0) -> str: + """Returns the element ID. If not set, generates a unique ID.""" + + @property + def root(self) -> ISVGDocumentElement: + """Returns the element's root.""" + + +class ISVGDocumentElement(IBaseElement): + """Abstraction for SVGDocumentElement""" diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/interfaces/__init__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/interfaces/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/inx.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/inx.py new file mode 100644 index 0000000..2360bc6 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/inx.py @@ -0,0 +1,244 @@ +# coding=utf-8 +# +# Copyright (C) 2018 Martin Owens +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Parsing inx files for checking and generating. +""" + +import os +from inspect import isclass +from importlib import util +from lxml import etree + +from .base import InkscapeExtension +from .utils import Boolean + +NSS = { + "inx": "http://www.inkscape.org/namespace/inkscape/extension", + "inkscape": "http://www.inkscape.org/namespaces/inkscape", +} +SSN = {b: a for (a, b) in NSS.items()} + + +class InxLookup(etree.CustomElementClassLookup): + """Custom inx xml file lookup""" + + def lookup( + self, node_type, document, namespace, name + ): # pylint: disable=unused-argument + if name == "param": + return ParamElement + return InxElement + + +INX_PARSER = etree.XMLParser() +INX_PARSER.set_element_class_lookup(InxLookup()) + + +class InxFile: + """Open an INX file and provide useful functions""" + + name = property(lambda self: self.xml.get_text("name")) + ident = property(lambda self: self.xml.get_text("id")) + slug = property(lambda self: self.ident.split(".")[-1].title().replace("_", "")) + kind = property(lambda self: self.metadata["type"]) + warnings = property(lambda self: sorted(list(set(self.xml.warnings)))) + + def __init__(self, filename): + if isinstance(filename, str) and "<" in filename: + filename = filename.encode("utf8") + if isinstance(filename, bytes) and b"<" in filename: + self.filename = None + self.doc = etree.ElementTree(etree.fromstring(filename, parser=INX_PARSER)) + else: + self.filename = os.path.basename(filename) + self.doc = etree.parse(filename, parser=INX_PARSER) + self.xml = self.doc.getroot() + self.xml.warnings = [] + + def __repr__(self): + return f"" + + @property + def script(self): + """Returns information about the called script""" + command = self.xml.find_one("script/command") + if command is None: + return {} + return { + "interpreter": command.get("interpreter", None), + "location": command.get("location", None), + "script": command.text, + } + + @property + def extension_class(self): + """Attempt to get the extension class""" + script = self.script.get("script", None) + if script is not None: + name = script[:-3].replace("/", ".") + spec = util.spec_from_file_location(name, script) + mod = util.module_from_spec(spec) + spec.loader.exec_module(mod) + for value in mod.__dict__.values(): + if ( + "Base" not in name + and isclass(value) + and value.__module__ == name + and issubclass(value, InkscapeExtension) + ): + return value + return None + + @property + def metadata(self): + """Returns information about what type of extension this is""" + effect = self.xml.find_one("effect") + output = self.xml.find_one("output") + inputs = self.xml.find_one("input") + data = {} + if effect is not None: + template = self.xml.find_one("inkscape:templateinfo") + if template is not None: + data["type"] = "template" + data["desc"] = self.xml.get_text( + "templateinfo/shortdesc", nss="inkscape" + ) + data["author"] = self.xml.get_text( + "templateinfo/author", nss="inkscape" + ) + else: + data["type"] = "effect" + data["preview"] = Boolean(effect.get("needs-live-preview", "true")) + data["objects"] = effect.get_text("object-type", "all") + elif inputs is not None: + data["type"] = "input" + data["extension"] = inputs.get_text("extension") + data["mimetype"] = inputs.get_text("mimetype") + data["tooltip"] = inputs.get_text("filetypetooltip") + data["name"] = inputs.get_text("filetypename") + elif output is not None: + data["type"] = "output" + data["dataloss"] = Boolean(output.get_text("dataloss", "false")) + data["extension"] = output.get_text("extension") + data["mimetype"] = output.get_text("mimetype") + data["tooltip"] = output.get_text("filetypetooltip") + data["name"] = output.get_text("filetypename") + return data + + @property + def menu(self): + """Return the menu this effect ends up in""" + + def _recurse_menu(parent): + for child in parent.xpath("submenu"): + yield child.get("name") + for subchild in _recurse_menu(child): + yield subchild + break # Not more than one menu chain? + + menu = self.xml.find_one("effect/effects-menu") + return list(_recurse_menu(menu)) + [self.name] + + @property + def params(self): + """Get all params at all levels""" + # Returns any params at any levels + return list(self.xml.xpath("//param")) + + +class InxElement(etree.ElementBase): + """Any element in an inx file + + .. versionadded:: 1.1""" + + def set_warning(self, msg): + """Set a warning for slightly incorrect inx contents""" + root = self.get_root() + if hasattr(root, "warnings"): + root.warnings.append(msg) + + def get_root(self): + """Get the root document element from any element descendent""" + if self.getparent() is not None: + return self.getparent().get_root() + return self + + def get_default_prefix(self): + """Set default xml namespace prefix. If none is defined, set warning""" + tag = self.get_root().tag + if "}" in tag: + (url, tag) = tag[1:].split("}", 1) + return SSN.get(url, "inx") + self.set_warning("No inx xml prefix.") + return None # no default prefix + + def apply_nss(self, xpath, nss=None): + """Add prefixes to any xpath string""" + if nss is None: + nss = self.get_default_prefix() + + def _process(seg): + if ":" in seg or not seg or not nss: + return seg + return f"{nss}:{seg}" + + return "/".join([_process(seg) for seg in xpath.split("/")]) + + def xpath(self, xpath, nss=None): + """Namespace specific xpath searches + + .. versionadded:: 1.1""" + return super().xpath(self.apply_nss(xpath, nss=nss), namespaces=NSS) + + def find_one(self, name, nss=None): + """Return the first element matching the given name + + .. versionadded:: 1.1""" + for elem in self.xpath(name, nss=nss): + return elem + return None + + def get_text(self, name, default=None, nss=None): + """Get text content agnostically""" + for pref in ("", "_"): + elem = self.find_one(pref + name, nss=nss) + if elem is not None and elem.text: + if pref == "_": + self.set_warning(f"Use of old translation scheme: <_{name}...>") + return elem.text + return default + + +class ParamElement(InxElement): + """ + A param in an inx file. + """ + + name = property(lambda self: self.get("name")) + param_type = property(lambda self: self.get("type", "string")) + + @property + def options(self): + """Return a list of option values""" + if self.param_type == "notebook": + return [option.get("name") for option in self.xpath("page")] + return [option.get("value") for option in self.xpath("option")] + + def __repr__(self): + return f"" diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/localization.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/localization.py new file mode 100644 index 0000000..7de6c57 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/localization.py @@ -0,0 +1,117 @@ +# coding=utf-8 +# +# Copyright (C) 2010 Nick Drobchenko, nick@cnc-club.ru +# Copyright (C) 2005 Aaron Spike, aaron@ekips.org +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Allow extensions to translate messages. +""" + +import gettext +import os, sys + +# Get gettext domain and matching locale directory for translation of extensions strings +# (both environment variables are set by Inkscape) +GETTEXT_DOMAIN = os.environ.get("INKEX_GETTEXT_DOMAIN") +GETTEXT_DIRECTORY = os.environ.get("INKEX_GETTEXT_DIRECTORY") + +# INKSCAPE_LOCALEDIR can be used to override the default locale directory Inkscape uses +INKSCAPE_LOCALEDIR = os.environ.get("INKSCAPE_LOCALEDIR") + + +def localize(domain=GETTEXT_DOMAIN, localedir=GETTEXT_DIRECTORY): + """Configure gettext and install _() function into builtins namespace for easy + access""" + + # Do not enable translation if GETTEXT_DOMAIN is unset. + # This is the case when translationdomain="none", but also when no catalog was + # found. + # Install a NullTranslation just to be sure + # (so we do not get errors about undefined '_') + if domain is None: + gettext.NullTranslations().install() + return + + # Use the default system locale by default, + # but prefer LANGUAGE environment variable + # (which is set by Inkscape according to UI language) + languages = None + + trans = gettext.translation(domain, localedir, languages, fallback=True) + trans.install() + + +def inkex_localize(): + """ + Return internal Translations instance for translation of the inkex module itself + Those will always use the 'inkscape' domain and attempt to lookup the same catalog + Inkscape uses + """ + + domain = "inkscape" + localedir = INKSCAPE_LOCALEDIR + languages = None + + return gettext.translation(domain, localedir, languages, fallback=True) + + +inkex_gettext = inkex_localize().gettext # pylint: disable=invalid-name +""" +Shortcut for gettext. Import as:: + + from inkex.localize import inkex_gettext as _ + +""" + +inkex_ngettext = inkex_localize().ngettext +""" +Shortcut for ngettext + + .. versionadded:: 1.2 +""" + + +def inkex_fgettext(message, *args, **kwargs): + """ + Shortcut for gettext and subsequent formatting. Import as:: + + from inkex.localize import inkex_fgettext as _f + + The positionals and keyword arguments are passed to ``str.format()``. + + The call to xgettext must contain:: + + --keyword=_f + """ + return inkex_gettext(message).format(*args, **kwargs) + + +if sys.version_info >= (3, 8): + inkex_pgettext = inkex_localize().pgettext + """ + Gettext with context. Import as:: + + from inkex.localize import inkex_pgettext as pgettext + + Both parameters **must** be string literals. The call to xgettext must contain:: + + --keyword=pgettext:1c,2 + + .. versionadded:: 1.2 + """ +else: + inkex_pgettext = lambda context, message: message diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/paths.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/paths.py new file mode 100644 index 0000000..ba4a525 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/paths.py @@ -0,0 +1,2035 @@ +# coding=utf-8 +# +# Copyright (C) 2018 Martin Owens +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +functions for digesting paths +""" +from __future__ import annotations + +import re +import copy +import abc + +from math import atan2, cos, pi, sin, sqrt, acos, tan +from typing import ( + Any, + Type, + Dict, + Optional, + Union, + Tuple, + List, + Generator, + TypeVar, +) +from .transforms import ( + Transform, + BoundingBox, + Vector2d, + cubic_extrema, + quadratic_extrema, +) +from .utils import classproperty, strargs + + +Pathlike = TypeVar("Pathlike", bound="PathCommand") +AbsolutePathlike = TypeVar("AbsolutePathlike", bound="AbsolutePathCommand") + +# All the names that get added to the inkex API itself. +__all__ = ( + "Path", + "CubicSuperPath", + "PathCommand", + "AbsolutePathCommand", + "RelativePathCommand", + # Path commands: + "Line", + "line", + "Move", + "move", + "ZoneClose", + "zoneClose", + "Horz", + "horz", + "Vert", + "vert", + "Curve", + "curve", + "Smooth", + "smooth", + "Quadratic", + "quadratic", + "TepidQuadratic", + "tepidQuadratic", + "Arc", + "arc", + # errors + "InvalidPath", +) + +LEX_REX = re.compile(r"([MLHVCSQTAZmlhvcsqtaz])([^MLHVCSQTAZmlhvcsqtaz]*)") +NONE = lambda obj: obj is not None + + +class InvalidPath(ValueError): + """Raised when given an invalid path string""" + + +class PathCommand(abc.ABC): + """ + Base class of all path commands + """ + + # Number of arguments that follow this path commands letter + nargs = -1 + + @classproperty # From python 3.9 on, just combine @classmethod and @property + def name(cls): # pylint: disable=no-self-argument + """The full name of the segment (i.e. Line, Arc, etc)""" + return cls.__name__ # pylint: disable=no-member + + @classproperty + def letter(cls): # pylint: disable=no-self-argument + """The single letter representation of this command (i.e. L, A, etc)""" + return cls.name[0] + + @classproperty + def next_command(self): + """The implicit next command. This is for automatic chains where the next + command isn't given, just a bunch on numbers which we automatically parse.""" + return self + + @property + def is_relative(self): # type: () -> bool + """Whether the command is defined in relative coordinates, i.e. relative to + the previous endpoint (lower case path command letter)""" + raise NotImplementedError + + @property + def is_absolute(self): # type: () -> bool + """Whether the command is defined in absolute coordinates (upper case path + command letter)""" + raise NotImplementedError + + def to_relative(self, prev): # type: (Vector2d) -> RelativePathCommand + """Return absolute counterpart for absolute commands or copy for relative""" + raise NotImplementedError + + def to_absolute(self, prev): # type: (Vector2d) -> AbsolutePathCommand + """Return relative counterpart for relative commands or copy for absolute""" + raise NotImplementedError + + def reverse(self, first, prev): + """Reverse path command + + .. versionadded:: 1.1""" + + def to_non_shorthand(self, prev, prev_control): # pylint: disable=unused-argument + # type: (Vector2d, Vector2d) -> AbsolutePathCommand + """Return an absolute non-shorthand command + + .. versionadded:: 1.1""" + return self.to_absolute(prev) + + # The precision of the numbers when converting to string + number_template = "{:.6g}" + + # Maps single letter path command to corresponding class + # (filled at the bottom of file, when all classes already defined) + _letter_to_class = {} # type: Dict[str, Type[Any]] + + @staticmethod + def letter_to_class(letter): + """Returns class for given path command letter""" + return PathCommand._letter_to_class[letter] + + @property + def args(self): # type: () -> List[float] + """Returns path command arguments as tuple of floats""" + raise NotImplementedError() + + def control_points( + self, first: Vector2d, prev: Vector2d, prev_prev: Vector2d + ) -> Union[List[Vector2d], Generator[Vector2d, None, None]]: + """Returns list of path command control points""" + raise NotImplementedError + + @classmethod + def _argt(cls, sep): + return sep.join([cls.number_template] * cls.nargs) + + def __str__(self): + return f"{self.letter} {self._argt(' ').format(*self.args)}".strip() + + def __repr__(self): + # pylint: disable=consider-using-f-string + return "{{}}({})".format(self._argt(", ")).format(self.name, *self.args) + + def __eq__(self, other): + previous = Vector2d() + if type(self) == type(other): # pylint: disable=unidiomatic-typecheck + return self.args == other.args + if isinstance(other, tuple): + return self.args == other + if not isinstance(other, PathCommand): + raise ValueError("Can't compare types") + try: + if self.is_relative == other.is_relative: + return self.to_curve(previous) == other.to_curve(previous) + except ValueError: + pass + return False + + def end_point(self, first, prev): # type: (Vector2d, Vector2d) -> Vector2d + """Returns last control point of path command""" + raise NotImplementedError() + + def update_bounding_box( + self, first: Vector2d, last_two_points: List[Vector2d], bbox: BoundingBox + ): + # pylint: disable=unused-argument + """Enlarges given bbox to contain path element. + + Args: + first (Vector2d): first point of path. Required to calculate Z segment + last_two_points (List[Vector2d]): list with last two control points in abs + coords. + bbox (BoundingBox): bounding box to update + """ + + raise NotImplementedError(f"Bounding box is not implemented for {self.name}") + + def to_curve(self, prev, prev_prev=Vector2d()): + # type: (Vector2d, Vector2d) -> Curve + """Convert command to :py:class:`Curve` + + Curve().to_curve() returns a copy + """ + raise NotImplementedError(f"To curve not supported for {self.name}") + + def to_curves(self, prev, prev_prev=Vector2d()): + # type: (Vector2d, Vector2d) -> List[Curve] + """Convert command to list of :py:class:`Curve` commands""" + return [self.to_curve(prev, prev_prev)] + + def to_line(self, prev): + # type: (Vector2d) -> Line + """Converts this segment to a line (copies if already a line)""" + return Line(*self.end_point(Vector2d(), prev)) + + +class RelativePathCommand(PathCommand): + """ + Abstract base class for relative path commands. + + Implements most of methods of :py:class:`PathCommand` through + conversion to :py:class:`AbsolutePathCommand` + """ + + @property + def is_relative(self): + return True + + @property + def is_absolute(self): + return False + + def control_points( + self, first: Vector2d, prev: Vector2d, prev_prev: Vector2d + ) -> Union[List[Vector2d], Generator[Vector2d, None, None]]: + return self.to_absolute(prev).control_points(first, prev, prev_prev) + + def to_relative(self, prev): + # type: (Pathlike, Vector2d) -> Pathlike + return self.__class__(*self.args) + + def update_bounding_box(self, first, last_two_points, bbox): + self.to_absolute(last_two_points[-1]).update_bounding_box( + first, last_two_points, bbox + ) + + def end_point(self, first, prev): + # type: (Vector2d, Vector2d) -> Vector2d + return self.to_absolute(prev).end_point(first, prev) + + def to_curve(self, prev, prev_prev=Vector2d()): + # type: (Vector2d, Vector2d) -> Curve + return self.to_absolute(prev).to_curve(prev, prev_prev) + + def to_curves(self, prev, prev_prev=Vector2d()): + # type: (Vector2d, Vector2d) -> List[Curve] + return self.to_absolute(prev).to_curves(prev, prev_prev) + + +class AbsolutePathCommand(PathCommand): + """Absolute path command. Unlike :py:class:`RelativePathCommand` can be transformed + directly.""" + + @property + def is_relative(self): + return False + + @property + def is_absolute(self): + return True + + def to_absolute( + self, prev + ): # type: (AbsolutePathlike, Vector2d) -> AbsolutePathlike + return self.__class__(*self.args) + + def transform( + self, transform + ): # type: (AbsolutePathlike, Transform) -> AbsolutePathlike + """Returns new transformed segment + + :param transform: a transformation to apply + """ + raise NotImplementedError() + + def rotate( + self, degrees, center + ): # type: (AbsolutePathlike, float, Vector2d) -> AbsolutePathlike + """ + Returns new transformed segment + + :param degrees: rotation angle in degrees + :param center: invariant point of rotation + """ + return self.transform(Transform(rotate=(degrees, center[0], center[1]))) + + def translate(self, dr): # type: (AbsolutePathlike, Vector2d) -> AbsolutePathlike + """Translate or scale this path command by dr""" + return self.transform(Transform(translate=dr)) + + def scale( + self, factor + ): # type: (AbsolutePathlike, Union[float, Tuple[float,float]]) -> AbsolutePathlike + """Returns new transformed segment + + :param factor: scale or (scale_x, scale_y) + """ + return self.transform(Transform(scale=factor)) + + +class Line(AbsolutePathCommand): + """Line segment""" + + nargs = 2 + + @property + def args(self): + return self.x, self.y + + def __init__(self, x, y): + self.x = x + self.y = y + + def update_bounding_box(self, first, last_two_points, bbox): + bbox += BoundingBox( + (last_two_points[-1].x, self.x), (last_two_points[-1].y, self.y) + ) + + def control_points(self, first, prev, prev_prev): + # type: (Vector2d, Vector2d, Vector2d) -> Generator[Vector2d, None, None] + yield Vector2d(self.x, self.y) + + def to_relative(self, prev): + # type: (Vector2d) -> line + return line(self.x - prev.x, self.y - prev.y) + + def transform(self, transform): + # type: (Line, Transform) -> Line + return Line(*transform.apply_to_point((self.x, self.y))) + + def end_point(self, first, prev): + # type: (Vector2d, Vector2d) -> Vector2d + return Vector2d(self.x, self.y) + + def to_curve(self, prev, prev_prev=Vector2d()): + # type: (Vector2d, Optional[Vector2d]) -> Curve + return Curve(prev.x, prev.y, self.x, self.y, self.x, self.y) + + def reverse(self, first, prev): + return Line(prev.x, prev.y) + + +class line(RelativePathCommand): # pylint: disable=invalid-name + """Relative line segment""" + + nargs = 2 + + @property + def args(self): + return self.dx, self.dy + + def __init__(self, dx, dy): + self.dx = dx + self.dy = dy + + def to_absolute(self, prev): # type: (Vector2d) -> Line + return Line(prev.x + self.dx, prev.y + self.dy) + + def reverse(self, first, prev): + return line(-self.dx, -self.dy) + + +class Move(AbsolutePathCommand): + """Move pen segment without a line""" + + nargs = 2 + next_command = Line + + @property + def args(self): + return self.x, self.y + + def __init__(self, x, y): + self.x = x + self.y = y + + def update_bounding_box(self, first, last_two_points, bbox): + bbox += BoundingBox(self.x, self.y) + + def control_points(self, first, prev, prev_prev): + # type: (Vector2d, Vector2d, Vector2d) -> Generator[Vector2d, None, None] + yield Vector2d(self.x, self.y) + + def to_relative(self, prev): + # type: (Vector2d) -> move + return move(self.x - prev.x, self.y - prev.y) + + def transform(self, transform): + # type: (Transform) -> Move + return Move(*transform.apply_to_point((self.x, self.y))) + + def end_point(self, first, prev): + # type: (Vector2d, Vector2d) -> Vector2d + return Vector2d(self.x, self.y) + + def to_curve(self, prev, prev_prev=Vector2d()): + # type: (Vector2d, Optional[Vector2d]) -> Curve + raise ValueError("Move segments can not be changed into curves.") + + def reverse(self, first, prev): + return Move(prev.x, prev.y) + + +class move(RelativePathCommand): # pylint: disable=invalid-name + """Relative move segment""" + + nargs = 2 + next_command = line + + @property + def args(self): + return self.dx, self.dy + + def __init__(self, dx, dy): + self.dx = dx + self.dy = dy + + def to_absolute(self, prev): # type: (Vector2d) -> Move + return Move(prev.x + self.dx, prev.y + self.dy) + + def reverse(self, first, prev): + return move(prev.x - first.x, prev.y - first.y) + + +class ZoneClose(AbsolutePathCommand): + """Close segment to finish a path""" + + nargs = 0 + next_command = Move + + @property + def args(self): + return () + + def update_bounding_box(self, first, last_two_points, bbox): + pass + + def transform(self, transform): + # type: (Transform) -> ZoneClose + return ZoneClose() + + def control_points(self, first, prev, prev_prev): + # type: (Vector2d, Vector2d, Vector2d) -> Generator[Vector2d, None, None] + yield first + + def to_relative(self, prev): + # type: (Vector2d) -> zoneClose + return zoneClose() + + def end_point(self, first, prev): + # type: (Vector2d, Vector2d) -> Vector2d + return first + + def to_curve(self, prev, prev_prev=Vector2d()): + # type: (Vector2d, Optional[Vector2d]) -> Curve + raise ValueError("ZoneClose segments can not be changed into curves.") + + def reverse(self, first, prev): + return Line(prev.x, prev.y) + + +class zoneClose(RelativePathCommand): # pylint: disable=invalid-name + """Same as above (svg says no difference)""" + + nargs = 0 + next_command = Move + + @property + def args(self): + return () + + def to_absolute(self, prev): + return ZoneClose() + + def reverse(self, first, prev): + return line(prev.x - first.x, prev.y - first.y) + + +class Horz(AbsolutePathCommand): + """Horizontal Line segment""" + + nargs = 1 + + @property + def args(self): + return (self.x,) + + def __init__(self, x): + self.x = x + + def update_bounding_box(self, first, last_two_points, bbox): + bbox += BoundingBox((last_two_points[-1].x, self.x), last_two_points[-1].y) + + def control_points(self, first, prev, prev_prev): + # type: (Vector2d, Vector2d, Vector2d) -> Generator[Vector2d, None, None] + yield Vector2d(self.x, prev.y) + + def to_relative(self, prev): + # type: (Vector2d) -> horz + return horz(self.x - prev.x) + + def to_non_shorthand(self, prev, prev_control): + # type: (Vector2d, Vector2d) -> Line + return self.to_line(prev) + + def transform(self, transform): + # type: (Pathlike, Transform) -> Pathlike + raise ValueError("Horizontal lines can't be transformed directly.") + + def end_point(self, first, prev): + # type: (Vector2d, Vector2d) -> Vector2d + return Vector2d(self.x, prev.y) + + def to_curve(self, prev, prev_prev=Vector2d()): + # type: (Vector2d, Optional[Vector2d]) -> Curve + """Convert a horizontal line into a curve""" + return self.to_line(prev).to_curve(prev) + + def to_line(self, prev): + # type: (Vector2d) -> Line + """Return this path command as a Line instead""" + return Line(self.x, prev.y) + + def reverse(self, first, prev): + return Horz(prev.x) + + +class horz(RelativePathCommand): # pylint: disable=invalid-name + """Relative horz line segment""" + + nargs = 1 + + @property + def args(self): + return (self.dx,) + + def __init__(self, dx): + self.dx = dx + + def to_absolute(self, prev): # type: (Vector2d) -> Horz + return Horz(prev.x + self.dx) + + def to_non_shorthand(self, prev, prev_control): + # type: (Vector2d, Vector2d) -> Line + return self.to_line(prev) + + def to_line(self, prev): # type: (Vector2d) -> Line + """Return this path command as a Line instead""" + return Line(prev.x + self.dx, prev.y) + + def reverse(self, first, prev): + return horz(-self.dx) + + +class Vert(AbsolutePathCommand): + """Vertical Line segment""" + + nargs = 1 + + @property + def args(self): + return (self.y,) + + def __init__(self, y): + self.y = y + + def update_bounding_box(self, first, last_two_points, bbox): + bbox += BoundingBox(last_two_points[-1].x, (last_two_points[-1].y, self.y)) + + def transform(self, transform): # type: (Pathlike, Transform) -> Pathlike + raise ValueError("Vertical lines can't be transformed directly.") + + def control_points(self, first, prev, prev_prev): + # type: (Vector2d, Vector2d, Vector2d) -> Generator[Vector2d, None, None] + yield Vector2d(prev.x, self.y) + + def to_non_shorthand(self, prev, prev_control): + # type: (Vector2d, Vector2d) -> Line + return self.to_line(prev) + + def to_relative(self, prev): + # type: (Vector2d) -> vert + return vert(self.y - prev.y) + + def end_point(self, first, prev): + # type: (Vector2d, Vector2d) -> Vector2d + return Vector2d(prev.x, self.y) + + def to_line(self, prev): + # type: (Vector2d) -> Line + """Return this path command as a line instead""" + return Line(prev.x, self.y) + + def to_curve( + self, prev, prev_prev=Vector2d() + ): # type: (Vector2d, Optional[Vector2d]) -> Curve + """Convert a horizontal line into a curve""" + return self.to_line(prev).to_curve(prev) + + def reverse(self, first, prev): + return Vert(prev.y) + + +class vert(RelativePathCommand): # pylint: disable=invalid-name + """Relative vertical line segment""" + + nargs = 1 + + @property + def args(self): + return (self.dy,) + + def __init__(self, dy): + self.dy = dy + + def to_absolute(self, prev): # type: (Vector2d) -> Vert + return Vert(prev.y + self.dy) + + def to_non_shorthand(self, prev, prev_control): + # type: (Vector2d, Vector2d) -> Line + return self.to_line(prev) + + def to_line(self, prev): # type: (Vector2d) -> Line + """Return this path command as a line instead""" + return Line(prev.x, prev.y + self.dy) + + def reverse(self, first, prev): + return vert(-self.dy) + + +class Curve(AbsolutePathCommand): + """Absolute Curved Line segment""" + + nargs = 6 + + @property + def args(self): + return self.x2, self.y2, self.x3, self.y3, self.x4, self.y4 + + def __init__(self, x2, y2, x3, y3, x4, y4): # pylint: disable=too-many-arguments + self.x2 = x2 + self.y2 = y2 + + self.x3 = x3 + self.y3 = y3 + + self.x4 = x4 + self.y4 = y4 + + def update_bounding_box(self, first, last_two_points, bbox): + x1, x2, x3, x4 = last_two_points[-1].x, self.x2, self.x3, self.x4 + y1, y2, y3, y4 = last_two_points[-1].y, self.y2, self.y3, self.y4 + + if not (x1 in bbox.x and x2 in bbox.x and x3 in bbox.x and x4 in bbox.x): + bbox.x += cubic_extrema(x1, x2, x3, x4) + + if not (y1 in bbox.y and y2 in bbox.y and y3 in bbox.y and y4 in bbox.y): + bbox.y += cubic_extrema(y1, y2, y3, y4) + + def transform(self, transform): + # type: (Transform) -> Curve + x2, y2 = transform.apply_to_point((self.x2, self.y2)) + x3, y3 = transform.apply_to_point((self.x3, self.y3)) + x4, y4 = transform.apply_to_point((self.x4, self.y4)) + return Curve(x2, y2, x3, y3, x4, y4) + + def control_points(self, first, prev, prev_prev): + # type: (Vector2d, Vector2d, Vector2d) -> Generator[Vector2d, None, None] + yield Vector2d(self.x2, self.y2) + yield Vector2d(self.x3, self.y3) + yield Vector2d(self.x4, self.y4) + + def to_relative(self, prev): # type: (Vector2d) -> curve + return curve( + self.x2 - prev.x, + self.y2 - prev.y, + self.x3 - prev.x, + self.y3 - prev.y, + self.x4 - prev.x, + self.y4 - prev.y, + ) + + def end_point(self, first, prev): + return Vector2d(self.x4, self.y4) + + def to_curve( + self, prev, prev_prev=Vector2d() + ): # type: (Vector2d, Optional[Vector2d]) -> Curve + """No conversion needed, pass-through, returns self""" + return Curve(*self.args) + + def to_bez(self): + """Returns the list of coords for SuperPath""" + return [list(self.args[:2]), list(self.args[2:4]), list(self.args[4:6])] + + def reverse(self, first, prev): + return Curve(self.x3, self.y3, self.x2, self.y2, prev.x, prev.y) + + +class curve(RelativePathCommand): # pylint: disable=invalid-name + """Relative curved line segment""" + + nargs = 6 + + @property + def args(self): + return self.dx2, self.dy2, self.dx3, self.dy3, self.dx4, self.dy4 + + def __init__( + self, dx2, dy2, dx3, dy3, dx4, dy4 + ): # pylint: disable=too-many-arguments + self.dx2 = dx2 + self.dy2 = dy2 + + self.dx3 = dx3 + self.dy3 = dy3 + + self.dx4 = dx4 + self.dy4 = dy4 + + def to_absolute(self, prev): # type: (Vector2d) -> Curve + return Curve( + self.dx2 + prev.x, + self.dy2 + prev.y, + self.dx3 + prev.x, + self.dy3 + prev.y, + self.dx4 + prev.x, + self.dy4 + prev.y, + ) + + def reverse(self, first, prev): + return curve( + -self.dx4 + self.dx3, + -self.dy4 + self.dy3, + -self.dx4 + self.dx2, + -self.dy4 + self.dy2, + -self.dx4, + -self.dy4, + ) + + +class Smooth(AbsolutePathCommand): + """Absolute Smoothed Curved Line segment""" + + nargs = 4 + + @property + def args(self): + return self.x3, self.y3, self.x4, self.y4 + + def __init__(self, x3, y3, x4, y4): + self.x3 = x3 + self.y3 = y3 + + self.x4 = x4 + self.y4 = y4 + + def update_bounding_box(self, first, last_two_points, bbox): + self.to_curve(last_two_points[-1], last_two_points[-2]).update_bounding_box( + first, last_two_points, bbox + ) + + def control_points(self, first, prev, prev_prev): + # type: (Vector2d, Vector2d, Vector2d) -> Generator[Vector2d, None, None] + + x1, x2, x3, x4 = prev_prev.x, prev.x, self.x3, self.x4 + y1, y2, y3, y4 = prev_prev.y, prev.y, self.y3, self.y4 + + # infer reflected point + x2 = 2 * x2 - x1 + y2 = 2 * y2 - y1 + + yield Vector2d(x2, y2) + yield Vector2d(x3, y3) + yield Vector2d(x4, y4) + + def to_non_shorthand(self, prev, prev_control): + # type: (Vector2d, Vector2d) -> Curve + return self.to_curve(prev, prev_control) + + def to_relative(self, prev): # type: (Vector2d) -> smooth + return smooth( + self.x3 - prev.x, self.y3 - prev.y, self.x4 - prev.x, self.y4 - prev.y + ) + + def transform(self, transform): + # type: (Transform) -> Smooth + x3, y3 = transform.apply_to_point((self.x3, self.y3)) + x4, y4 = transform.apply_to_point((self.x4, self.y4)) + return Smooth(x3, y3, x4, y4) + + def end_point(self, first, prev): + return Vector2d(self.x4, self.y4) + + def to_curve(self, prev, prev_prev=Vector2d()): + # type: (Vector2d, Vector2d) -> Curve + """ + Convert this Smooth curve to a regular curve by creating a mirror + set of nodes based on the previous node. Previous should be a curve. + """ + (x2, y2), (x3, y3), (x4, y4) = self.control_points(prev, prev, prev_prev) + return Curve(x2, y2, x3, y3, x4, y4) + + def reverse(self, first, prev): + return Smooth(self.x3, self.y3, prev.x, prev.y) + + +class smooth(RelativePathCommand): # pylint: disable=invalid-name + """Relative smoothed curved line segment""" + + nargs = 4 + + @property + def args(self): + return self.dx3, self.dy3, self.dx4, self.dy4 + + def __init__(self, dx3, dy3, dx4, dy4): + self.dx3 = dx3 + self.dy3 = dy3 + + self.dx4 = dx4 + self.dy4 = dy4 + + def to_absolute(self, prev): # type: (Vector2d) -> Smooth + return Smooth( + self.dx3 + prev.x, self.dy3 + prev.y, self.dx4 + prev.x, self.dy4 + prev.y + ) + + def to_non_shorthand(self, prev, prev_control): + # type: (Vector2d, Vector2d) -> Curve + return self.to_absolute(prev).to_non_shorthand(prev, prev_control) + + def reverse(self, first, prev): + return smooth(-self.dx4 + self.dx3, -self.dy4 + self.dy3, -self.dx4, -self.dy4) + + +class Quadratic(AbsolutePathCommand): + """Absolute Quadratic Curved Line segment""" + + nargs = 4 + + @property + def args(self): + return self.x2, self.y2, self.x3, self.y3 + + def __init__(self, x2, y2, x3, y3): + self.x2 = x2 + self.y2 = y2 + + self.x3 = x3 + self.y3 = y3 + + def update_bounding_box(self, first, last_two_points, bbox): + x1, x2, x3 = last_two_points[-1].x, self.x2, self.x3 + y1, y2, y3 = last_two_points[-1].y, self.y2, self.y3 + + if not (x1 in bbox.x and x2 in bbox.x and x3 in bbox.x): + bbox.x += quadratic_extrema(x1, x2, x3) + + if not (y1 in bbox.y and y2 in bbox.y and y3 in bbox.y): + bbox.y += quadratic_extrema(y1, y2, y3) + + def control_points(self, first, prev, prev_prev): + # type: (Vector2d, Vector2d, Vector2d) -> Generator[Vector2d, None, None] + yield Vector2d(self.x2, self.y2) + yield Vector2d(self.x3, self.y3) + + def to_relative(self, prev): + # type: (Vector2d) -> quadratic + return quadratic( + self.x2 - prev.x, self.y2 - prev.y, self.x3 - prev.x, self.y3 - prev.y + ) + + def transform(self, transform): + # type: (Transform) -> Quadratic + x2, y2 = transform.apply_to_point((self.x2, self.y2)) + x3, y3 = transform.apply_to_point((self.x3, self.y3)) + return Quadratic(x2, y2, x3, y3) + + def end_point(self, first, prev): + # type: (Vector2d, Vector2d) -> Vector2d + return Vector2d(self.x3, self.y3) + + def to_curve(self, prev, prev_prev=Vector2d()): + # type: (Vector2d, Vector2d) -> Curve + """Attempt to convert a quadratic to a curve""" + prev = Vector2d(prev) + x1 = 1.0 / 3 * prev.x + 2.0 / 3 * self.x2 + x2 = 2.0 / 3 * self.x2 + 1.0 / 3 * self.x3 + y1 = 1.0 / 3 * prev.y + 2.0 / 3 * self.y2 + y2 = 2.0 / 3 * self.y2 + 1.0 / 3 * self.y3 + return Curve(x1, y1, x2, y2, self.x3, self.y3) + + def reverse(self, first, prev): + return Quadratic(self.x2, self.y2, prev.x, prev.y) + + +class quadratic(RelativePathCommand): # pylint: disable=invalid-name + """Relative quadratic line segment""" + + nargs = 4 + + @property + def args(self): + return self.dx2, self.dy2, self.dx3, self.dy3 + + def __init__(self, dx2, dy2, dx3, dy3): + self.dx2 = dx2 + self.dx3 = dx3 + self.dy2 = dy2 + self.dy3 = dy3 + + def to_absolute(self, prev): # type: (Vector2d) -> Quadratic + return Quadratic( + self.dx2 + prev.x, self.dy2 + prev.y, self.dx3 + prev.x, self.dy3 + prev.y + ) + + def reverse(self, first, prev): + return quadratic( + -self.dx3 + self.dx2, -self.dy3 + self.dy2, -self.dx3, -self.dy3 + ) + + +class TepidQuadratic(AbsolutePathCommand): + """Continued Quadratic Line segment""" + + nargs = 2 + + @property + def args(self): + return self.x3, self.y3 + + def __init__(self, x3, y3): + self.x3 = x3 + self.y3 = y3 + + def update_bounding_box(self, first, last_two_points, bbox): + self.to_quadratic(last_two_points[-1], last_two_points[-2]).update_bounding_box( + first, last_two_points, bbox + ) + + def control_points(self, first, prev, prev_prev): + # type: (Vector2d, Vector2d, Vector2d) -> Generator[Vector2d, None, None] + + x1, x2, x3 = prev_prev.x, prev.x, self.x3 + y1, y2, y3 = prev_prev.y, prev.y, self.y3 + + # infer reflected point + x2 = 2 * x2 - x1 + y2 = 2 * y2 - y1 + + yield Vector2d(x2, y2) + yield Vector2d(x3, y3) + + def to_non_shorthand(self, prev, prev_control): + # type: (Vector2d, Vector2d) -> AbsolutePathCommand + return self.to_quadratic(prev, prev_control) + + def to_relative(self, prev): # type: (Vector2d) -> tepidQuadratic + return tepidQuadratic(self.x3 - prev.x, self.y3 - prev.y) + + def transform(self, transform): + # type: (Transform) -> TepidQuadratic + x3, y3 = transform.apply_to_point((self.x3, self.y3)) + return TepidQuadratic(x3, y3) + + def end_point(self, first, prev): + # type: (Vector2d, Vector2d) -> Vector2d + return Vector2d(self.x3, self.y3) + + def to_curve(self, prev, prev_prev=Vector2d()): + # type: (Vector2d, Vector2d) -> Curve + return self.to_quadratic(prev, prev_prev).to_curve(prev) + + def to_quadratic(self, prev, prev_prev): + # type: (Vector2d, Vector2d) -> Quadratic + """ + Convert this continued quadratic into a full quadratic + """ + (x2, y2), (x3, y3) = self.control_points(prev, prev, prev_prev) + return Quadratic(x2, y2, x3, y3) + + def reverse(self, first, prev): + return TepidQuadratic(prev.x, prev.y) + + +class tepidQuadratic(RelativePathCommand): # pylint: disable=invalid-name + """Relative continued quadratic line segment""" + + nargs = 2 + + @property + def args(self): + return self.dx3, self.dy3 + + def __init__(self, dx3, dy3): + self.dx3 = dx3 + self.dy3 = dy3 + + def to_absolute(self, prev): + # type: (Vector2d) -> TepidQuadratic + return TepidQuadratic(self.dx3 + prev.x, self.dy3 + prev.y) + + def to_non_shorthand(self, prev, prev_control): + # type: (Vector2d, Vector2d) -> AbsolutePathCommand + return self.to_absolute(prev).to_non_shorthand(prev, prev_control) + + def reverse(self, first, prev): + return tepidQuadratic(-self.dx3, -self.dy3) + + +class Arc(AbsolutePathCommand): + """Special Arc segment""" + + nargs = 7 + + @property + def args(self): + return ( + self.rx, + self.ry, + self.x_axis_rotation, + self.large_arc, + self.sweep, + self.x, + self.y, + ) + + def __init__( + self, rx, ry, x_axis_rotation, large_arc, sweep, x, y + ): # pylint: disable=too-many-arguments + self.rx = rx + self.ry = ry + self.x_axis_rotation = x_axis_rotation + self.large_arc = large_arc + self.sweep = sweep + self.x = x + self.y = y + + def update_bounding_box(self, first, last_two_points, bbox): + prev = last_two_points[-1] + for seg in self.to_curves(prev=prev): + seg.update_bounding_box(first, [None, prev], bbox) + prev = seg.end_point(first, prev) + + def control_points(self, first, prev, prev_prev): + # type: (Vector2d, Vector2d, Vector2d) -> Generator[Vector2d, None, None] + yield Vector2d(self.x, self.y) + + def to_curves(self, prev, prev_prev=Vector2d()): + # type: (Vector2d, Vector2d) -> List[Curve] + """Convert this arc into bezier curves""" + path = CubicSuperPath([arc_to_path(list(prev), self.args)]).to_path( + curves_only=True + ) + # Ignore the first move command from to_path() + return list(path)[1:] + + def transform(self, transform): + # type: (Transform) -> Arc + # pylint: disable=invalid-name, too-many-locals + x_, y_ = transform.apply_to_point((self.x, self.y)) + + T = transform # type: Transform + if self.x_axis_rotation != 0: + T = T @ Transform(rotate=self.x_axis_rotation) + a, c, b, d, _, _ = list(T.to_hexad()) + # T = | a b | + # | c d | + + detT = a * d - b * c + detT2 = detT**2 + + rx = float(self.rx) + ry = float(self.ry) + + if rx == 0.0 or ry == 0.0 or detT2 == 0.0: + # invalid Arc parameters + # transform only last point + return Arc( + self.rx, + self.ry, + self.x_axis_rotation, + self.large_arc, + self.sweep, + x_, + y_, + ) + + A = (d**2 / rx**2 + c**2 / ry**2) / detT2 + B = -(d * b / rx**2 + c * a / ry**2) / detT2 + D = (b**2 / rx**2 + a**2 / ry**2) / detT2 + + theta = atan2(-2 * B, D - A) / 2 + theta_deg = theta * 180.0 / pi + DA = D - A + l2 = 4 * B**2 + DA**2 + + if l2 == 0: + delta = 0.0 + else: + delta = 0.5 * (-(DA**2) - 4 * B**2) / sqrt(l2) + + half = (A + D) / 2 + + rx_ = 1.0 / sqrt(half + delta) + ry_ = 1.0 / sqrt(half - delta) + + x_, y_ = transform.apply_to_point((self.x, self.y)) + + if detT > 0: + sweep = self.sweep + else: + sweep = 0 if self.sweep > 0 else 1 + + return Arc(rx_, ry_, theta_deg, self.large_arc, sweep, x_, y_) + + def to_relative(self, prev): + # type: (Vector2d) -> arc + return arc( + self.rx, + self.ry, + self.x_axis_rotation, + self.large_arc, + self.sweep, + self.x - prev.x, + self.y - prev.y, + ) + + def end_point(self, first, prev): + # type: (Vector2d, Vector2d) -> Vector2d + return Vector2d(self.x, self.y) + + def reverse(self, first, prev): + return Arc( + self.rx, + self.ry, + self.x_axis_rotation, + self.large_arc, + 1 - self.sweep, + prev.x, + prev.y, + ) + + +class arc(RelativePathCommand): # pylint: disable=invalid-name + """Relative Arc line segment""" + + nargs = 7 + + @property + def args(self): + return ( + self.rx, + self.ry, + self.x_axis_rotation, + self.large_arc, + self.sweep, + self.dx, + self.dy, + ) + + def __init__( + self, rx, ry, x_axis_rotation, large_arc, sweep, dx, dy + ): # pylint: disable=too-many-arguments + self.rx = rx + self.ry = ry + self.x_axis_rotation = x_axis_rotation + self.large_arc = large_arc + self.sweep = sweep + self.dx = dx + self.dy = dy + + def to_absolute(self, prev): # type: (Vector2d) -> "Arc" + x1, y1 = prev + return Arc( + self.rx, + self.ry, + self.x_axis_rotation, + self.large_arc, + self.sweep, + self.dx + x1, + self.dy + y1, + ) + + def reverse(self, first, prev): + return arc( + self.rx, + self.ry, + self.x_axis_rotation, + self.large_arc, + 1 - self.sweep, + -self.dx, + -self.dy, + ) + + +PathCommand._letter_to_class = { # pylint: disable=protected-access + "M": Move, + "L": Line, + "V": Vert, + "H": Horz, + "A": Arc, + "C": Curve, + "S": Smooth, + "Z": ZoneClose, + "Q": Quadratic, + "T": TepidQuadratic, + "m": move, + "l": line, + "v": vert, + "h": horz, + "a": arc, + "c": curve, + "s": smooth, + "z": zoneClose, + "q": quadratic, + "t": tepidQuadratic, +} + + +class Path(list): + """A list of segment commands which combine to draw a shape""" + + class PathCommandProxy: + """ + A handy class for Path traverse and coordinate access + + Reduces number of arguments in user code compared to bare + :class:`PathCommand` methods + """ + + def __init__( + self, command, first_point, previous_end_point, prev2_control_point + ): + self.command = command # type: PathCommand + self.first_point = first_point # type: Vector2d + self.previous_end_point = previous_end_point # type: Vector2d + self.prev2_control_point = prev2_control_point # type: Vector2d + + @property + def name(self): + """The full name of the segment (i.e. Line, Arc, etc)""" + return self.command.name + + @property + def letter(self): + """The single letter representation of this command (i.e. L, A, etc)""" + return self.command.letter + + @property + def next_command(self): + """The implicit next command.""" + return self.command.next_command + + @property + def is_relative(self): + """Whether the command is defined in relative coordinates, i.e. relative to + the previous endpoint (lower case path command letter)""" + return self.command.is_relative + + @property + def is_absolute(self): + """Whether the command is defined in absolute coordinates (upper case path + command letter)""" + return self.command.is_absolute + + @property + def args(self): + """Returns path command arguments as tuple of floats""" + return self.command.args + + @property + def control_points(self): + """Returns list of path command control points""" + return self.command.control_points( + self.first_point, self.previous_end_point, self.prev2_control_point + ) + + @property + def end_point(self): + """Returns last control point of path command""" + return self.command.end_point(self.first_point, self.previous_end_point) + + def reverse(self): + """Reverse path command""" + return self.command.reverse(self.end_point, self.previous_end_point) + + def to_curve(self): + """Convert command to :py:class:`Curve` + Curve().to_curve() returns a copy + """ + return self.command.to_curve( + self.previous_end_point, self.prev2_control_point + ) + + def to_curves(self): + """Convert command to list of :py:class:`Curve` commands""" + return self.command.to_curves( + self.previous_end_point, self.prev2_control_point + ) + + def to_absolute(self): + """Return relative counterpart for relative commands or copy for absolute""" + return self.command.to_absolute(self.previous_end_point) + + def __str__(self): + return str(self.command) + + def __repr__(self): + return "<" + self.__class__.__name__ + ">" + repr(self.command) + + def __init__(self, path_d=None): + super().__init__() + if isinstance(path_d, str): + # Returns a generator returning PathCommand objects + path_d = self.parse_string(path_d) + elif isinstance(path_d, CubicSuperPath): + path_d = path_d.to_path() + + for item in path_d or (): + if isinstance(item, PathCommand): + self.append(item) + elif isinstance(item, (list, tuple)) and len(item) == 2: + if isinstance(item[1], (list, tuple)): + self.append(PathCommand.letter_to_class(item[0])(*item[1])) + else: + self.append(Line(*item)) + else: + raise TypeError( + f"Bad path type: {type(path_d).__name__}" + f"({type(item).__name__}, ...): {item}" + ) + + @classmethod + def parse_string(cls, path_d): + """Parse a path string and generate segment objects""" + for cmd, numbers in LEX_REX.findall(path_d): + args = list(strargs(numbers)) + cmd = PathCommand.letter_to_class(cmd) + i = 0 + while i < len(args) or cmd.nargs == 0: + if len(args[i : i + cmd.nargs]) != cmd.nargs: + return + seg = cmd(*args[i : i + cmd.nargs]) + i += cmd.nargs + cmd = seg.next_command + yield seg + + def bounding_box(self): + # type: () -> Optional[BoundingBox] + """Return bounding box of the Path""" + if not self: + return None + iterator = self.proxy_iterator() + proxy = next(iterator) + bbox = BoundingBox(proxy.first_point.x, proxy.first_point.y) + try: + while True: + proxy = next(iterator) + proxy.command.update_bounding_box( + proxy.first_point, + [ + proxy.prev2_control_point, + proxy.previous_end_point, + ], + bbox, + ) + except StopIteration: + return bbox + + def append(self, cmd): + """Append a command to this path including any chained commands""" + if isinstance(cmd, list): + self.extend(cmd) + elif isinstance(cmd, PathCommand): + super().append(cmd) + + def translate(self, x, y, inplace=False): # pylint: disable=invalid-name + """Move all coords in this path by the given amount""" + return self.transform(Transform(translate=(x, y)), inplace=inplace) + + def scale(self, x, y, inplace=False): # pylint: disable=invalid-name + """Scale all coords in this path by the given amounts""" + return self.transform(Transform(scale=(x, y)), inplace=inplace) + + def rotate(self, deg, center=None, inplace=False): + """Rotate the path around the given point""" + if center is None: + # Default center is center of bbox + bbox = self.bounding_box() + if bbox: + center = bbox.center + else: + center = Vector2d() + center = Vector2d(center) + return self.transform( + Transform(rotate=(deg, center.x, center.y)), inplace=inplace + ) + + @property + def control_points(self): + """Returns all control points of the Path""" + prev = Vector2d() + prev_prev = Vector2d() + first = Vector2d() + + for seg in self: # type: PathCommand + cpts = list(seg.control_points(first, prev, prev_prev)) + if isinstance(seg, (zoneClose, ZoneClose, move, Move)): + first = cpts[-1] + for cpt in cpts: + prev_prev = prev + prev = cpt + yield cpt + + @property + def end_points(self): + """Returns all endpoints of all path commands (i.e. the nodes)""" + prev = Vector2d() + first = Vector2d() + + for seg in self: # type: PathCommand + end_point = seg.end_point(first, prev) + if isinstance(seg, (zoneClose, ZoneClose, move, Move)): + first = end_point + prev = end_point + yield end_point + + def transform(self, transform, inplace=False): + """Convert to new path""" + result = Path() + previous = Vector2d() + previous_new = Vector2d() + start_zone = True + first = Vector2d() + first_new = Vector2d() + + for i, seg in enumerate(self): # type: PathCommand + if start_zone: + first = seg.end_point(first, previous) + + if isinstance(seg, (horz, Horz, Vert, vert)): + seg = seg.to_line(previous) + + if seg.is_relative: + new_seg = ( + seg.to_absolute(previous) + .transform(transform) + .to_relative(previous_new) + ) + else: + new_seg = seg.transform(transform) + + if start_zone: + first_new = new_seg.end_point(first_new, previous_new) + + if inplace: + self[i] = new_seg + else: + result.append(new_seg) + previous = seg.end_point(first, previous) + previous_new = new_seg.end_point(first_new, previous_new) + start_zone = isinstance(seg, (zoneClose, ZoneClose)) + if inplace: + return self + return result + + def reverse(self): + """Returns a reversed path""" + result = Path() + *_, first = self.end_points + closer = None + + # Go through the path in reverse order + for index, prcom in reversed(list(enumerate(self.proxy_iterator()))): + if isinstance(prcom.command, (Move, move, ZoneClose, zoneClose)): + if closer is not None: + if len(result) > 0 and isinstance( + result[-1], (Line, line, Vert, vert, Horz, horz) + ): + result.pop() # We can replace simple lines with Z + result.append(closer) # replace with same type (rel or abs) + if isinstance(prcom.command, (ZoneClose, zoneClose)): + closer = prcom.command + else: + closer = None + + if index == 0: + if prcom.letter == "M": + result.insert(0, Move(first.x, first.y)) + elif prcom.letter == "m": + result.insert(0, move(first.x, first.y)) + else: + result.append(prcom.reverse()) + + return result + + def break_apart(self) -> List[Path]: + """Breaks apart a path into its subpaths + + .. versionadded:: 1.3""" + result = [Path()] + current = result[0] + + for cmnd in self.proxy_iterator(): + if cmnd.letter.lower() == "m": + current = Path() + result.append(current) + current.append(Move(*cmnd.end_point)) + else: + current.append(cmnd.command) + # Remove all subpaths that are empty or only contain move commands + return [ + i + for i in result + if len(i) != 0 and not all(j.letter.lower() == "m" for j in i) + ] + + def close(self): + """Attempt to close the last path segment""" + if self and not isinstance(self[-1], (zoneClose, ZoneClose)): + self.append(ZoneClose()) + + def proxy_iterator(self): + """ + Yields :py:class:`AugmentedPathIterator` + + :rtype: Iterator[ Path.PathCommandProxy ] + """ + + previous = Vector2d() + prev_prev = Vector2d() + first = Vector2d() + + for seg in self: # type: PathCommand# + if isinstance(seg, (zoneClose, ZoneClose, move, Move)): + first = seg.end_point(first, previous) + yield Path.PathCommandProxy(seg, first, previous, prev_prev) + if isinstance( + seg, + ( + curve, + tepidQuadratic, + quadratic, + smooth, + Curve, + TepidQuadratic, + Quadratic, + Smooth, + ), + ): + prev_prev = list(seg.control_points(first, previous, prev_prev))[-2] + previous = seg.end_point(first, previous) + + def to_absolute(self): + """Convert this path to use only absolute coordinates""" + return self._to_absolute(True) + + def to_non_shorthand(self): + # type: () -> Path + """Convert this path to use only absolute non-shorthand coordinates + + .. versionadded:: 1.1""" + return self._to_absolute(False) + + def _to_absolute(self, shorthand: bool) -> Path: + """Make entire Path absolute. + + Args: + shorthand (bool): If false, then convert all shorthand commands to + non-shorthand. + + Returns: + Path: the input path, converted to absolute coordinates. + """ + + abspath = Path() + + previous = Vector2d() + first = Vector2d() + + for seg in self: # type: PathCommand + if isinstance(seg, (move, Move)): + first = seg.end_point(first, previous) + + if shorthand: + abspath.append(seg.to_absolute(previous)) + else: + if abspath and isinstance(abspath[-1], (Curve, Quadratic)): + prev_control = list( + abspath[-1].control_points(Vector2d(), Vector2d(), Vector2d()) + )[-2] + else: + prev_control = previous + + abspath.append(seg.to_non_shorthand(previous, prev_control)) + + previous = seg.end_point(first, previous) + + return abspath + + def to_relative(self): + """Convert this path to use only relative coordinates""" + abspath = Path() + + previous = Vector2d() + first = Vector2d() + + for seg in self: # type: PathCommand + if isinstance(seg, (move, Move)): + first = seg.end_point(first, previous) + + abspath.append(seg.to_relative(previous)) + previous = seg.end_point(first, previous) + + return abspath + + def __str__(self): + return " ".join([str(seg) for seg in self]) + + def __add__(self, other): + acopy = copy.deepcopy(self) + if isinstance(other, str): + other = Path(other) + if isinstance(other, list): + acopy.extend(other) + return acopy + + def to_arrays(self): + """Returns path in format of parsePath output, returning arrays of absolute + command data + + .. deprecated:: 1.0 + This is compatibility function for older API. Should not be used in new code + + """ + return [[seg.letter, list(seg.args)] for seg in self.to_non_shorthand()] + + def to_superpath(self): + """Convert this path into a cubic super path""" + return CubicSuperPath(self) + + def copy(self): + """Make a copy""" + return copy.deepcopy(self) + + +class CubicSuperPath(list): + """ + A conversion of a path into a predictable list of cubic curves which + can be operated on as a list of simplified instructions. + + When converting back into a path, all lines, arcs etc will be converted + to curve instructions. + + Structure is held as [SubPath[(point_a, bezier, point_b), ...]], ...] + """ + + def __init__(self, items): + super().__init__() + self._closed = True + self._prev = Vector2d() + self._prev_prev = Vector2d() + + if isinstance(items, str): + items = Path(items) + + if isinstance(items, Path): + items = items.to_absolute() + + for item in items: + self.append(item) + + def __str__(self): + return str(self.to_path()) + + def append(self, item, force_shift=False): + """Accept multiple different formats for the data + + .. versionchanged:: 1.2 + ``force_shift`` parameter has been added + """ + if isinstance(item, list) and len(item) == 2 and isinstance(item[0], str): + item = PathCommand.letter_to_class(item[0])(*item[1]) + coordinate_shift = True + if isinstance(item, list) and len(item) == 3 and not force_shift: + coordinate_shift = False + is_quadratic = False + if isinstance(item, PathCommand): + if isinstance(item, Move): + if self._closed is False: + super().append([]) + item = [list(item.args), list(item.args), list(item.args)] + elif isinstance(item, ZoneClose) and self and self[-1]: + # This duplicates the first segment to 'close' the path, it's appended + # directly because we don't want to last coord to change for the final + # segment. + self[-1].append( + [self[-1][0][0][:], self[-1][0][1][:], self[-1][0][2][:]] + ) + # Then adds a new subpath for the next shape (if any) + self._closed = True + self._prev.assign(self._first) + return + elif isinstance(item, Arc): + # Arcs are made up of three curves (approximated) + for arc_curve in item.to_curves(self._prev, self._prev_prev): + x2, y2, x3, y3, x4, y4 = arc_curve.args + self.append([[x2, y2], [x3, y3], [x4, y4]], force_shift=True) + self._prev_prev.assign(x3, y3) + return + else: + is_quadratic = isinstance( + item, (Quadratic, TepidQuadratic, quadratic, tepidQuadratic) + ) + if isinstance(item, (Horz, Vert)): + item = item.to_line(self._prev) + prp = self._prev_prev + if is_quadratic: + self._prev_prev = list( + item.control_points(self._first, self._prev, prp) + )[-2:-1][0] + item = item.to_curve(self._prev, prp) + + if isinstance(item, Curve): + # Curves are cut into three tuples for the super path. + item = item.to_bez() + + if not isinstance(item, list): + raise ValueError(f"Unknown super curve item type: {item}") + + if len(item) != 3 or not all(len(bit) == 2 for bit in item): + # The item is already a subpath (usually from some other process) + if len(item[0]) == 3 and all(len(bit) == 2 for bit in item[0]): + super().append(self._clean(item)) + self._prev_prev = Vector2d(self[-1][-1][0]) + self._prev = Vector2d(self[-1][-1][1]) + return + raise ValueError(f"Unknown super curve list format: {item}") + + if self._closed: + # Closed means that the previous segment is closed so we need a new one + # We always append to the last open segment. CSP starts out closed. + self._closed = False + super().append([]) + + if coordinate_shift: + if self[-1]: + # The last tuple is replaced, it's the coords of where the next segment + # will land. + self[-1][-1][-1] = item[0][:] + # The last coord is duplicated, but is expected to be replaced + self[-1].append(item[1:] + copy.deepcopy(item)[-1:]) + else: + # Item is already a csp segment and has already been shifted. + self[-1].append(copy.deepcopy(item)) + + self._prev = Vector2d(self[-1][-1][1]) + if not is_quadratic: + self._prev_prev = Vector2d(self[-1][-1][0]) + + def _clean(self, lst): + """Recursively clean lists so they have the same type""" + if isinstance(lst, (tuple, list)): + return [self._clean(child) for child in lst] + return lst + + @property + def _first(self): + try: + return Vector2d(self[-1][0][0]) + except IndexError: + return Vector2d() + + def to_path(self, curves_only=False, rtol=1e-5, atol=1e-8): + """Convert the super path back to an svg path + + Arguments: see :func:`to_segments` for parameters""" + return Path(list(self.to_segments(curves_only, rtol, atol))) + + def to_segments(self, curves_only=False, rtol=1e-5, atol=1e-8): + """Generate a set of segments for this cubic super path + + Arguments: + curves_only (bool, optional): If False, curves that can be represented + by Lineto / ZoneClose commands, will be. Defaults to False. + rtol (float, optional): relative tolerance, passed to :func:`is_line` and + :func:`inkex.transforms.ImmutableVector2d.is_close` for checking if a + line can be replaced by a ZoneClose command. Defaults to 1e-5. + + .. versionadded:: 1.2 + atol: absolute tolerance, passed to :func:`is_line` and + :func:`inkex.transforms.ImmutableVector2d.is_close`. Defaults to 1e-8. + + .. versionadded:: 1.2""" + for subpath in self: + previous = [] + for segment in subpath: + if not previous: + yield Move(*segment[1][:]) + elif self.is_line(previous, segment, rtol, atol) and not curves_only: + if segment is subpath[-1] and Vector2d(segment[1]).is_close( + subpath[0][1], rtol, atol + ): + yield ZoneClose() + else: + yield Line(*segment[1][:]) + else: + yield Curve(*(previous[2][:] + segment[0][:] + segment[1][:])) + previous = segment + + def transform(self, transform): + """Apply a transformation matrix to this super path""" + return self.to_path().transform(transform).to_superpath() + + @staticmethod + def is_on(pt_a, pt_b, pt_c, tol=1e-8): + """Checks if point pt_a is on the line between points pt_b and pt_c + + .. versionadded:: 1.2""" + return CubicSuperPath.collinear(pt_a, pt_b, pt_c, tol) and ( + CubicSuperPath.within(pt_a[0], pt_b[0], pt_c[0]) + if pt_a[0] != pt_b[0] + else CubicSuperPath.within(pt_a[1], pt_b[1], pt_c[1]) + ) + + @staticmethod + def collinear(pt_a, pt_b, pt_c, tol=1e-8): + """Checks if points pt_a, pt_b, pt_c lie on the same line, + i.e. that the cross product (b-a) x (c-a) < tol + + .. versionadded:: 1.2""" + return ( + abs( + (pt_b[0] - pt_a[0]) * (pt_c[1] - pt_a[1]) + - (pt_c[0] - pt_a[0]) * (pt_b[1] - pt_a[1]) + ) + < tol + ) + + @staticmethod + def within(val_b, val_a, val_c): + """Checks if float val_b is between val_a and val_c + + .. versionadded:: 1.2""" + return val_a <= val_b <= val_c or val_c <= val_b <= val_a + + @staticmethod + def is_line(previous, segment, rtol=1e-5, atol=1e-8): + """Check whether csp segment (two points) can be expressed as a line has retracted handles or the handles + can be retracted without loss of information (i.e. both handles lie on the + line) + + .. versionchanged:: 1.2 + Previously, it was only checked if both control points have retracted + handles. Now it is also checked if the handles can be retracted without + (visible) loss of information (i.e. both handles lie on the line connecting + the nodes). + + Arguments: + previous: first node in superpath notation + segment: second node in superpath notation + rtol (float, optional): relative tolerance, passed to + :func:`inkex.transforms.ImmutableVector2d.is_close` for checking handle + retraction. Defaults to 1e-5. + + .. versionadded:: 1.2 + atol (float, optional): absolute tolerance, passed to + :func:`inkex.transforms.ImmutableVector2d.is_close` for checking handle + retraction and + :func:`inkex.paths.CubicSuperPath.is_on` for checking if all points + (nodes + handles) lie on a line. Defaults to 1e-8. + + .. versionadded:: 1.2 + """ + + retracted = Vector2d(previous[1]).is_close( + previous[2], rtol, atol + ) and Vector2d(segment[0]).is_close(segment[1], rtol, atol) + + if retracted: + return True + + # Can both handles be retracted without loss of information? + # Definitely the case if the handles lie on the same line as the two nodes and + # in the correct order + # E.g. cspbezsplitatlength outputs non-retracted handles when splitting a + # straight line + return CubicSuperPath.is_on( + segment[0], segment[1], previous[2], atol + ) and CubicSuperPath.is_on(previous[2], previous[1], segment[0], atol) + + +def arc_to_path(point, params): + """Approximates an arc with cubic bezier segments. + + Arguments: + point: Starting point (absolute coords) + params: Arcs parameters as per + https://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands + + Returns a list of triplets of points : + [control_point_before, node, control_point_after] + (first and last returned triplets are [p1, p1, *] and [*, p2, p2]) + """ + + # pylint: disable=invalid-name, too-many-locals + A = point[:] + rx, ry, teta, longflag, sweepflag, x2, y2 = params[:] + teta = teta * pi / 180.0 + B = [x2, y2] + # Degenerate ellipse + if rx == 0 or ry == 0 or A == B: + return [[A[:], A[:], A[:]], [B[:], B[:], B[:]]] + + # turn coordinates so that the ellipse morph into a *unit circle* (not 0-centered) + mat = matprod((rotmat(teta), [[1.0 / rx, 0.0], [0.0, 1.0 / ry]], rotmat(-teta))) + applymat(mat, A) + applymat(mat, B) + + k = [-(B[1] - A[1]), B[0] - A[0]] + d = k[0] * k[0] + k[1] * k[1] + k[0] /= sqrt(d) + k[1] /= sqrt(d) + d = sqrt(max(0, 1 - d / 4.0)) + # k is the unit normal to AB vector, pointing to center O + # d is distance from center to AB segment (distance from O to the midpoint of AB) + # for the last line, remember this is a unit circle, and kd vector is ortogonal to + # AB (Pythagorean thm) + + if longflag == sweepflag: + # top-right ellipse in SVG example + # https://www.w3.org/TR/SVG/images/paths/arcs02.svg + d *= -1 + + O = [(B[0] + A[0]) / 2.0 + d * k[0], (B[1] + A[1]) / 2.0 + d * k[1]] + OA = [A[0] - O[0], A[1] - O[1]] + OB = [B[0] - O[0], B[1] - O[1]] + start = acos(OA[0] / norm(OA)) + if OA[1] < 0: + start *= -1 + end = acos(OB[0] / norm(OB)) + if OB[1] < 0: + end *= -1 + # start and end are the angles from center of the circle to A and to B respectively + + if sweepflag and start > end: + end += 2 * pi + if (not sweepflag) and start < end: + end -= 2 * pi + + NbSectors = int(abs(start - end) * 2 / pi) + 1 + dTeta = (end - start) / NbSectors + v = 4 * tan(dTeta / 4.0) / 3.0 + # I would use v = tan(dTeta/2)*4*(sqrt(2)-1)/3 ? + p = [] + for i in range(0, NbSectors + 1, 1): + angle = start + i * dTeta + v1 = [ + O[0] + cos(angle) - (-v) * sin(angle), + O[1] + sin(angle) + (-v) * cos(angle), + ] + pt = [O[0] + cos(angle), O[1] + sin(angle)] + v2 = [O[0] + cos(angle) - v * sin(angle), O[1] + sin(angle) + v * cos(angle)] + p.append([v1, pt, v2]) + p[0][0] = p[0][1][:] + p[-1][2] = p[-1][1][:] + + # go back to the original coordinate system + mat = matprod((rotmat(teta), [[rx, 0], [0, ry]], rotmat(-teta))) + for pts in p: + applymat(mat, pts[0]) + applymat(mat, pts[1]) + applymat(mat, pts[2]) + return p + + +def matprod(mlist): + """Get the product of the mat""" + prod = mlist[0] + for mat in mlist[1:]: + a00 = prod[0][0] * mat[0][0] + prod[0][1] * mat[1][0] + a01 = prod[0][0] * mat[0][1] + prod[0][1] * mat[1][1] + a10 = prod[1][0] * mat[0][0] + prod[1][1] * mat[1][0] + a11 = prod[1][0] * mat[0][1] + prod[1][1] * mat[1][1] + prod = [[a00, a01], [a10, a11]] + return prod + + +def rotmat(teta): + """Rotate the mat""" + return [[cos(teta), -sin(teta)], [sin(teta), cos(teta)]] + + +def applymat(mat, point): + """Apply the given mat""" + x = mat[0][0] * point[0] + mat[0][1] * point[1] + y = mat[1][0] * point[0] + mat[1][1] * point[1] + point[0] = x + point[1] = y + + +def norm(point): + """Normalise""" + return sqrt(point[0] * point[0] + point[1] * point[1]) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/ports.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/ports.py new file mode 100644 index 0000000..7595231 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/ports.py @@ -0,0 +1,105 @@ +# coding=utf-8 +# +# Copyright (C) 2019 Martin Owens +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Common access to serial and other computer ports. +""" + +import os +import sys +import time +from .utils import DependencyError, AbortExtension + +try: + import serial + from serial.tools import list_ports +except ImportError: + serial = None + + +class Serial: + """ + Attempt to get access to the computer's serial port. + + with Serial(port_name, ...) as com: + com.write(...) + + Provides access to the debug/testing ports which are pretend ports + able to accept the same input but allow for debugging. + """ + + def __init__(self, port, baud=9600, timeout=0.1, **options): + self.test = port == "[test]" + if self.test: + import pty # This does not work on windows #pylint: disable=import-outside-toplevel + + self.controller, self.peripheral = pty.openpty() + port = os.ttyname(self.peripheral) + + self.has_serial() + self.com = serial.Serial() + self.com.port = port + self.com.baudrate = int(baud) + self.com.timeout = timeout + self.set_options(**options) + + def set_options(self, stop=1, size=8, flow=None, parity=None): + """Set further options on the serial port""" + size = {5: "five", 6: "six", 7: "seven", 8: "eight"}.get(size, size) + stop = {"onepointfive": 1.5}.get(stop.lower(), stop) + stop = {1: "one", 1.5: "one_point_five", 2: "two"}.get(stop, stop) + self.com.bytesize = getattr(serial, str(str(size).upper()) + "BITS") + self.com.stopbits = getattr(serial, "STOPBITS_" + str(stop).upper()) + self.com.parity = getattr(serial, "PARITY_" + str(parity).upper()) + # set flow control + self.com.xonxoff = flow == "xonxoff" + self.com.rtscts = flow in ("rtscts", "dsrdtrrtscts") + self.com.dsrdtr = flow == "dsrdtrrtscts" + + def __enter__(self): + try: + # try to establish connection + self.com.open() + except serial.SerialException as error: + raise AbortExtension( + "Could not open serial port. Please check your device" + " is running, connected and the settings are correct" + ) from error + return self.com + + def __exit__(self, exc, value, traceback): + if not traceback and self.test: + output = " " * 1024 + while len(output) == 1024: + time.sleep(0.01) + output = os.read(self.controller, 1024) + sys.stderr.write(output.decode("utf8")) + # self.com.read(2) + self.com.close() + + @staticmethod + def has_serial(): + """Late importing of pySerial module""" + if serial is None: + raise DependencyError("pySerial is required to open serial ports.") + + @staticmethod + def list_ports(): + """Return a list of available serial ports""" + Serial.has_serial() # Cause DependencyError error + return [hw.name for hw in list_ports.comports(True)] diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/properties.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/properties.py new file mode 100644 index 0000000..0ec0ab6 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/properties.py @@ -0,0 +1,850 @@ +# coding=utf-8 +# +# Copyright (C) 2021 Jonathan Neuhauser, jonathan.neuhauser@outlook.com +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Property management and parsing, CSS cascading, default value storage + +.. versionadded:: 1.2 + +.. data:: all_properties + + A list of all properties, their parser class, and additional information + such as whether they are inheritable or can be given as presentation attributes +""" + +from abc import ABC, abstractmethod + +import re +from typing import Tuple, Dict, Type, Union, List, Optional +from .interfaces.IElement import IBaseElement, ISVGDocumentElement + +from .units import parse_unit, convert_unit + +from .colors import Color, ColorError + + +class BaseStyleValue: + """A class encapsuling a single CSS declaration / presentation_attribute""" + + def __init__(self, declaration=None, attr_name=None, value=None, important=False): + self.attr_name: str + self.value: str + self.important: bool + if declaration is not None and ":" in declaration: + ( + self.attr_name, + self.value, + self.important, + ) = BaseStyleValue.parse_declaration(declaration) + elif attr_name is not None: + self.attr_name = attr_name.strip().lower() + if isinstance(value, str): + self.value = value.strip() + else: + # maybe its already parsed? then set it + self.value = self.unparse_value(value) + self.important = important + _ = self.parse_value() # check that we can parse this value + + @classmethod + def parse_declaration(cls, declaration: str) -> Tuple[str, str, bool]: + """Parse a single css declaration + + Args: + declaration (str): a css declaration such as: + ``fill: #000 !important;``. The trailing semicolon may be ommitted. + + Raises: + ValueError: Unable to parse the declaration + + Returns: + Tuple[str, str, bool]: a tuple with key, value and importance + """ + if declaration != "" and ":" in declaration: + declaration = declaration.replace(";", "") + (name, value) = declaration.split(":", 1) + # check whether this is an important declaration + important = False + if "!important" in value: + value = value.replace("!important", "") + important = True + return (name.strip().lower(), value.strip(), important) + raise ValueError("Invalid declaration") + + def parse_value(self, element=None): + """Get parsed property value with resolved urls, color, etc. + + Args: + element (BaseElement): the SVG element to which this style is applied to + currently used for resolving gradients / masks, could be used for + computing percentage attributes or calc() attributes [optional] + + Returns: + object: parsed property value + """ + if self.value == "inherit": + if self.attr_name in all_properties: + return self._parse_value(all_properties[self.attr_name][1], element) + return None + return self._parse_value(self.value, element) + + def _parse_value( # pylint: disable=unused-argument, no-self-use + self, value: str, element=None + ) -> object: + """internal parse method, to be overwritten by derived classes + + Args: + value (str): unparsed value + element (BaseElement): the SVG element to which this style is applied to + [optional] + + Returns: + object: the parsed value + """ + return value + + def unparse_value(self, value: object) -> str: + """ "Unparses" an object, i.e. converts an object back to an attribute. + If the result is invalid, i.e. can't be parsed, an exception is raised. + + Args: + value (object): the object to be unparsed + + Returns: + str: the attribute value + """ + result = self._unparse_value(value) + self._parse_value(result) # check if value can be parsed (value is valid) + return result + + def _unparse_value(self, value: object) -> str: # pylint: disable=no-self-use + return str(value) + + @property + def declaration(self) -> str: + """The css declaration corresponding to the StyleValue object + + Returns: + str: the css declaration, such as "fill: #000 !important;" + """ + return ( + self.attr_name + + ":" + + self.value + + (" !important" if self.important else "") + ) + + @classmethod + def factory( + cls, + declaration: Optional[str] = None, + attr_name: Optional[str] = None, + value: Optional[object] = None, + important: Optional[bool] = False, + ): + """Create an attribute + + Args: + declaration (str, optional): the CSS declaration to parse. Defaults to None. + attr_name (str, optional): the attribute name. Defaults to None. + value (object, optional): the attribute value. Defaults to None. + important (bool, optional): whether the attribute is marked !important. + Defaults to False. + + Raises: + Errors may also be raised on parsing, so make sure to handle them + + Returns: + BaseStyleValue: the parsed style + """ + if declaration is not None and ":" in declaration: + attr_name, value, important = BaseStyleValue.parse_declaration(declaration) + elif attr_name is not None and value is not None: + attr_name = attr_name.strip().lower() + if isinstance(value, str): + value = value.strip() + + if attr_name in all_properties: + valuetype = all_properties[attr_name][0] + return valuetype(declaration, attr_name, value, important) + return BaseStyleValue(declaration, attr_name, value, important) + + def __eq__(self, other): + if not (isinstance(other, BaseStyleValue)): + return False + if self.declaration != other.declaration: + return False + return True + + @staticmethod + def factory_errorhandled(element=None, declaration="", key="", value=""): + """Error handling for the factory method: if something goes wrong during + parsing, ignore the attribute + + Args: + element (BaseElement, optional): The element this declaration is affecting, + for finding gradients ect. Defaults to None. + declaration (str, optional): the CSS declaration to parse. Defaults to "". + key (str, optional): the attribute name. Defaults to "". + value (str, optional): the attribute value. Defaults to "". + + Returns: + BaseStyleValue: The parsed style + """ + try: + value = BaseStyleValue.factory( + declaration=declaration, attr_name=key, value=value + ) + key = value.attr_name + # Try to parse the attribute + _ = value.parse_value(element) + return (key, value) + except ValueError: + # something went wrong during parsing, e.g. a bad attribute format + # or an attribute referencing a missing gradient + # -> ignore this declaration + pass + except ColorError: + # The color parsing methods have their own error type + pass + + +class AlphaValue(BaseStyleValue): + """Stores an alpha value (such as opacity), which may be specified as + as percentage or absolute value. + + Reference: https://www.w3.org/TR/css-color/#typedef-alpha-value""" + + def _parse_value(self, value: str, element=None): + if value[-1] == "%": # percentage + parsed_value = float(value[:-1]) * 0.01 + else: + parsed_value = float(value) + if parsed_value < 0: + return 0 + if parsed_value > 1: + return 1 + return parsed_value + + def _unparse_value(self, value: object) -> str: + if isinstance(value, (float, int)): + if value < 0: + return "0" + if value > 1: + return "1" + return str(value) + raise ValueError("Value must be number") + + +class ColorValue(BaseStyleValue): + """Stores a color value + + Reference: https://drafts.csswg.org/css-color-3/#valuea-def-color""" + + def _parse_value(self, value: str, element=None): + if value == "currentColor": + if element is not None: + style = element.specified_style() + return style("color") + return None + return Color(value) + + +# https://www.w3.org/TR/css3-values/#url-value +# matches anything inside url() enclosed with single/double quotes +# (technically a fragment url) or no quotes at all +URLREGEX = r"url\(\s*('.*?'|\".*?\"|[^\"'].*?)\s*\)" + + +def match_url_and_return_element(string: str, svg): + """Parses a string containing an url, e.g. "url(#rect1234)", + looks up the element in the svg document and returns it. + + Args: + string (str): the string to parse + svg (SvgDocumentElement): document referenced in the URL + + Raises: + ValueError: if the string has invalid format + ValueError: if the referenced element is not found + + Returns: + BaseElement: the referenced element + """ + regex = re.compile(URLREGEX) + match = regex.match(string) + if match: + url = match.group(1) + paint_server = svg.getElementById(url) + return paint_server + raise ValueError("invalid URL format") + + +class URLNoneValue(BaseStyleValue): + """Stores a value that is either none or an url, such as markers or masks. + + Reference: https://www.w3.org/TR/SVG2/painting.html#VertexMarkerProperties""" + + def _parse_value(self, value: str, element=None): + if value == "none": + return None + if value[0:4] == "url(": + if element is not None and self.element_has_root(element): + return match_url_and_return_element(value, element.root) + return None + raise ValueError("Invalid property value") + + def _unparse_value(self, value: object): + if isinstance(value, IBaseElement): + return f"url(#{value.get_id()})" + return super()._unparse_value(value) + + @staticmethod + def element_has_root(element) -> bool: + "Checks if an element has a root, i.e. if element.root will fail" + + return not ( + element.getparent() is None and not isinstance(element, ISVGDocumentElement) + ) + + +class PaintValue(ColorValue, URLNoneValue): + """Stores a paint value (such as fill and stroke), which may be specified + as color, or url. + + Reference: https://www.w3.org/TR/SVG2/painting.html#SpecifyingPaint""" + + def _parse_value(self, value: str, element=None): + if value == "none": + return None + if value in ["context-fill", "context-stroke"]: + return value + if value == "currentColor": + return super()._parse_value(value, element) + if value[0:4] == "url(": + # First part: fragment url + # second part: a fallback color if the url is not found. Colors start with + # a letter or a # + regex = re.compile(URLREGEX + r"\s*([#\w].*?)?$") + match = regex.match(value) + if match: + url = match.group(1) + if element is not None and self.element_has_root(element): + paint_server = element.root.getElementById(url) + else: + return None + if paint_server is not None: + return paint_server + if match.group(2) is None: + raise ValueError("Paint server not found") + return Color(match.group(2)) + return Color(value) + + def _unparse_value(self, value: object): + if value is None: + return "none" + return super()._unparse_value(value) + + +class EnumValue(BaseStyleValue): + """Stores a value that can only have a finite set of options""" + + def __init__(self, declaration=None, attr_name=None, value=None, important=False): + self.valueset = all_properties[attr_name][4] + super().__init__(declaration, attr_name, value, important) + + def _parse_value(self, value: str, element=None): + if value in self.valueset: + return value + raise ValueError( + f"Value '{value}' is invalid for the property {self.attr_name}. " + + f"Allowed values are: {self.valueset + ['inherit']}" + ) + + +class ShorthandValue(BaseStyleValue, ABC): + """Stores a value that sets other values (e.g. the font shorthand)""" + + def apply_shorthand(self, style): + """Applies a shorthand attribute to its style, respecting the + importance state of the individual attributes. + + Args: + style (Style): the style that the shorthand attribute is contained in, + and that the shorthand attribute will be applied on + """ + if self.attr_name not in style: + return + + dct = self.get_shorthand_changes() + importance = self.important + + # they are ordered in the order of adding the style elements. + current_keys = list(style.keys()) + for curkey in dct: + perform = False + if curkey not in current_keys: + # this is the easiest case, just set the element and the importance + perform = True + else: + if importance != style.get_importance(curkey): + # different importance, result independent of position + perform = importance + else: + # only apply if style overwrites previous with same importance + perform = current_keys.index(curkey) < current_keys.index( + self.attr_name + ) + + if perform: + style[curkey] = dct[curkey] + style.set_importance(curkey, importance) + style.pop(self.attr_name) + + @abstractmethod + def get_shorthand_changes(self) -> Dict[str, str]: + """calculates the value of affected attributes for this shorthand + + Returns: + Dict[str, str]: a dictionary containing the new values of the + affected attributes + """ + + +class FontValue(ShorthandValue): + """Logic for the shorthand font property""" + + def get_shorthand_changes(self): + keys = [ + "font-style", + "font-variant", + "font-weight", + "font-stretch", + "font-size", + "line-height", + "font-family", + ] + options = { + key: all_properties[key][4] + for key in keys + if isinstance(all_properties[key][4], list) + } + # Font stretch can be specified in percent, but for the + # shorthand, only a keyword value is allowed + options["font-stretch"] = ( + "normal", + "ultra-condensed", + "extra-condensed", + "condensed", + "semi-condensed", + "semi-expanded", + "expanded", + "extra-expanded", + "ultra-expanded", + ) + result = {key: all_properties[key][1] for key in keys} + + tokens = [i for i in self.value.split() if i != ""] + + if len(tokens) == 0: + return {} # shorthand not set, nothing to do + + while not (len(tokens) == 0): + cur = tokens[0] + if cur in options["font-style"]: + result["font-style"] = cur + elif cur in options["font-variant"]: + result["font-variant"] = cur + elif cur in options["font-weight"]: + result["font-weight"] = cur + elif cur in options["font-stretch"]: + result["font-stretch"] = cur + else: + if "/" in cur: + result["font-size"], result["line-height"] = cur.split("/") + else: + result["font-size"] = cur + result["font-family"] = " ".join(tokens[1:]) + break + tokens = tokens[1:] # remove first element + return result + + +class TextDecorationValue(ShorthandValue): + """Logic for the shorthand font property + + .. versionadded:: 1.3""" + + def get_shorthand_changes(self): + options = { + "text-decoration-" + key: all_properties["text-decoration-" + key][4] + for key in ("line", "style", "color") + if isinstance(all_properties["text-decoration-" + key][4], list) + } + result = { + "text-decoration-style": all_properties["text-decoration-style"][1], + "text-decoration-color": "currentcolor", + "text-decoration-line": [], + } + + tokens = [i for i in self.value.split() if i != ""] + + if len(tokens) == 0: + return {} # shorthand not set, nothing to do + + for cur in tokens: + if cur in ["underline", "overline", "line-through", "blink"]: + result["text-decoration-line"] += [cur] + elif cur in options["text-decoration-style"]: + result["text-decoration-style"] = cur + else: + result["text-decoration-color"] = cur + + if len(result["text-decoration-line"]) == 0: + result["text-decoration-line"] = all_properties["text-decoration-line"][4] + else: + # Text-decoration-line can have multiple values. + result["text-decoration-line"] = " ".join(result["text-decoration-line"]) + + return result + + +class MarkerShorthandValue(ShorthandValue, URLNoneValue): + """Logic for the marker shorthand property""" + + def get_shorthand_changes(self): + if self.value == "": + return {} # shorthand not set, nothing to do + return {k: self.value for k in ["marker-start", "marker-end", "marker-mid"]} + + def _parse_value(self, value: str, element=None): + # Make sure the parsing routine doesn't choke on an empty shorthand + if value == "": + return "" + return super()._parse_value(value, element) + + +class FontSizeValue(BaseStyleValue): + """Logic for the font-size property""" + + def _parse_value(self, value: str, element=None): + if element is None: + return value # no additional logic in this case + try: + return element.to_dimensionless(value) + except ValueError: # unable to parse font size, e.g. font-size:normal + return element.to_dimensionless("12") + + +class StrokeDasharrayValue(BaseStyleValue): + """Logic for the stroke-dasharray property""" + + def _parse_value(self, value: str, element=None): + dashes = re.findall(r"[^,\s]+", value) + if len(dashes) == 0 or value == "none": + return None # no dasharray applied + if not any(parse_unit(i) is None for i in dashes): + dashes = [convert_unit(i, "px") for i in dashes] + else: + return None + if any(i < 0 for i in dashes): + return None # one negative value makes the dasharray invalid + if len(dashes) % 2 == 1: + dashes = 2 * dashes + return dashes + + def _unparse_value(self, value: object) -> str: + if value is None: + return "none" + if isinstance(value, list): + return " ".join(map(str, value)) + return str(value) + + +# keys: attributes, right side: +# - Subclass of BaseStyleValue used for instantiating +# - default value +# - is presentation attribute +# - inherited +# - additional information, such as valid enum values +# For properties which have no special implementation yet: +# "(BaseStyleValue, , , None)" + +# Source for this list: https://www.w3.org/TR/SVG2/styling.html#PresentationAttributes + + +all_properties: Dict[ + str, Tuple[Type[BaseStyleValue], str, bool, bool, Union[List[str], None]] +] = { + "alignment-baseline": ( + EnumValue, + "baseline", + True, + False, + [ + "baseline", + "text-bottom", + "alphabetic", + "ideographic", + "middle", + "central", + "mathematical", + "text-top", + ], + ), + "baseline-shift": (BaseStyleValue, "0", True, False, None), + "clip": (BaseStyleValue, "auto", True, False, None), + "clip-path": (URLNoneValue, "none", True, False, None), + "clip-rule": (EnumValue, "nonzero", True, True, ["nonzero", "evenodd"]), + # only used for currentColor, which is not yet implemented + "color": (PaintValue, "black", True, True, None), + "color-interpolation": ( + EnumValue, + "sRGB", + True, + True, + ["sRGB", "auto", "linearRGB"], + ), + "color-interpolation-filters": ( + EnumValue, + "linearRGB", + True, + True, + ["auto", "sRGB", "linearRGB"], + ), + "color-rendering": ( + EnumValue, + "auto", + True, + True, + ["auto", "optimizeSpeed", "optimizeQuality"], + ), + "cursor": (BaseStyleValue, "auto", True, True, None), + "direction": (EnumValue, "ltr", True, True, ["ltr", "rtl"]), + "display": ( + EnumValue, + "inline", + True, + False, + [ + "inline", + "block", + "list-item", + "inline-block", + "table", + "inline-table", + "table-row-group", + "table-header-group", + "table-footer-group", + "table-row", + "table-column-group", + "table-column", + "table-cell", + "table-caption", + "none", + ], + ), # every value except none is rendered normally + "dominant-baseline": ( + EnumValue, + "auto", + True, + True, + [ + "auto", + "text-bottom", + "alphabetic", + "ideographic", + "middle", + "central", + "mathematical", + "hanging", + "text-top", + ], + ), + "fill": ( + PaintValue, + "black", + True, + True, + None, + ), # the normal fill, not the one + "fill-opacity": (AlphaValue, "1", True, True, None), + "fill-rule": (EnumValue, "nonzero", True, True, ["nonzero", "evenodd"]), + "filter": (URLNoneValue, "none", True, False, None), + "flood-color": (PaintValue, "black", True, False, None), + "flood-opacity": (AlphaValue, "1", True, False, None), + "font": (FontValue, "", True, False, None), + "font-family": (BaseStyleValue, "sans-serif", True, True, None), + "font-size": (FontSizeValue, "medium", True, True, None), + "font-size-adjust": (BaseStyleValue, "none", True, True, None), + "font-stretch": (BaseStyleValue, "normal", True, True, None), + "font-style": (EnumValue, "normal", True, True, ["normal", "italic", "oblique"]), + # a lot more values and subproperties in SVG2 / CSS-Fonts3 + "font-variant": (EnumValue, "normal", True, True, ["normal", "small-caps"]), + "font-weight": ( + EnumValue, + "normal", + True, + True, + ["normal", "bold"] + [str(i) for i in range(100, 901, 100)], + ), + "glyph-orientation-horizontal": (BaseStyleValue, "0deg", True, True, None), + "glyph-orientation-vertical": (BaseStyleValue, "auto", True, True, None), + "inline-size": (BaseStyleValue, "0", False, False, None), + "image-rendering": ( + EnumValue, + "auto", + True, + True, + ["auto", "optimizeQuality", "optimizeSpeed"], + ), + "letter-spacing": (BaseStyleValue, "normal", True, True, None), + "lighting-color": (ColorValue, "normal", True, False, None), + "line-height": (BaseStyleValue, "normal", False, True, None), + "marker": (MarkerShorthandValue, "", True, True, None), + "marker-end": (URLNoneValue, "none", True, True, None), + "marker-mid": (URLNoneValue, "none", True, True, None), + "marker-start": (URLNoneValue, "none", True, True, None), + # is a shorthand for a lot of mask-related properties which Inkscape doesn't support + "mask": (URLNoneValue, "none", True, False, None), + "opacity": (AlphaValue, "1", True, False, None), + "overflow": ( + EnumValue, + "visible", + True, + False, + ["visible", "hidden", "scroll", "auto"], + ), + "paint-order": (BaseStyleValue, "normal", True, False, None), + "pointer-events": ( + EnumValue, + "visiblePainted", + True, + True, + [ + "bounding-box", + "visiblePainted", + "visibleFill", + "visibleStroke", + "visible", + "painted", + "fill", + "stroke", + "all", + "none", + ], + ), + "shape-inside": (URLNoneValue, "none", False, False, None), + "shape-rendering": ( + EnumValue, + "visiblePainted", + True, + True, + ["auto", "optimizeSpeed", "crispEdges", "geometricPrecision"], + ), + "stop-color": (ColorValue, "black", True, False, None), + "stop-opacity": (AlphaValue, "1", True, False, None), + "stroke": (PaintValue, "none", True, True, None), + "stroke-dasharray": (StrokeDasharrayValue, "none", True, True, None), + "stroke-dashoffset": (BaseStyleValue, "0", True, True, None), + "stroke-linecap": (EnumValue, "butt", True, True, ["butt", "round", "square"]), + "stroke-linejoin": ( + EnumValue, + "miter", + True, + True, + ["miter", "miter-clip", "round", "bevel", "arcs"], + ), + "stroke-miterlimit": (BaseStyleValue, "4", True, True, None), + "stroke-opacity": (AlphaValue, "1", True, True, None), + "stroke-width": (BaseStyleValue, "1", True, True, None), + "text-align": ( + BaseStyleValue, + "start", + True, + True, + None, + ), # only HTML property, but used by some unit tests + "text-anchor": (EnumValue, "start", True, True, ["start", "middle", "end"]), + # shorthand for text-decoration-line, *-style, *-color + "text-decoration": (TextDecorationValue, "", True, True, None), + # multiple enum values are allowed + "text-decoration-line": (BaseStyleValue, "none", False, False, None), + "text-decoration-style": ( + EnumValue, + "solid", + False, + False, + ["solid", "double", "dotted", "dashed", "wavy"], + ), + # This currently cannot be a ColorValue because currentcolor and other special + # colors are not supported by the Color class + "text-decoration-color": (BaseStyleValue, "currentcolor", False, False, None), + "text-overflow": (EnumValue, "clip", True, False, ["clip", "ellipsis"]), + "text-rendering": ( + EnumValue, + "auto", + True, + True, + ["auto", "optimizeSpeed", "optimizeLegibility", "geometricPrecision"], + ), + "unicode-bidi": ( + EnumValue, + "normal", + True, + False, + [ + "normal", + "embed", + "isolate", + "bidi-override", + "isolate-override", + "plaintext", + ], + ), + "vector-effect": (BaseStyleValue, "none", True, False, None), + "vertical-align": (BaseStyleValue, "baseline", False, False, None), + "visibility": (EnumValue, "visible", True, True, ["visible", "hidden", "collapse"]), + "white-space": ( + EnumValue, + "normal", + True, + True, + ["normal", "pre", "nowrap", "pre-wrap", "break-spaces", "pre-line"], + ), + "word-spacing": (BaseStyleValue, "normal", True, True, None), + # including obsolete SVG 1.1 values + "writing-mode": ( + EnumValue, + "horizontal-tb", + True, + True, + [ + "horizontal-tb", + "vertical-rl", + "vertical-lr", + "lr", + "lr-tb", + "rl", + "rl-tb", + "tb", + "tb-rl", + ], + ), + "-inkscape-font-specification": (BaseStyleValue, "sans-serif", False, True, None), +} diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/styles.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/styles.py new file mode 100644 index 0000000..8f6b04b --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/styles.py @@ -0,0 +1,636 @@ +# coding=utf-8 +# +# Copyright (C) 2005 Aaron Spike, aaron@ekips.org +# 2019-2020 Martin Owens +# 2021 Jonathan Neuhauser, jonathan.neuhauser@outlook.com +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Functions for handling styles and embedded css +""" + +import re +import sys +from collections import OrderedDict +from typing import MutableMapping, Union, Iterable, TYPE_CHECKING + +from .interfaces.IElement import IBaseElement + +from .colors import Color +from .properties import BaseStyleValue, all_properties, ShorthandValue +from .css import ConditionalRule + +from .utils import FragmentError + +if TYPE_CHECKING: + from .elements._svg import SvgDocumentElement + + +class Classes(list): + """A list of classes applied to an element (used in css and js)""" + + def __init__(self, classes=None, callback=None): + self.callback = None + if isinstance(classes, str): + classes = classes.split() + super().__init__(classes or ()) + self.callback = callback + + def __str__(self): + return " ".join(self) + + def _callback(self): + if self.callback is not None: + self.callback(self) + + def __setitem__(self, index, value): + super().__setitem__(index, value) + self._callback() + + def append(self, value): + value = str(value) + if value not in self: + super().append(value) + self._callback() + + def remove(self, value): + value = str(value) + if value in self: + super().remove(value) + self._callback() + + def toggle(self, value): + """If exists, remove it, if not, add it""" + value = str(value) + if value in self: + return self.remove(value) + return self.append(value) + + +class Style(OrderedDict, MutableMapping[str, Union[str, BaseStyleValue]]): + """A list of style directives + + .. versionchanged:: 1.2 + The Style API now allows for access to parsed / processed styles via the + :func:`call` method. + + .. automethod:: __call__ + .. automethod:: __getitem__ + .. automethod:: __setitem__ + """ + + color_props = ("stroke", "fill", "stop-color", "flood-color", "lighting-color") + opacity_props = ("stroke-opacity", "fill-opacity", "opacity", "stop-opacity") + unit_props = "stroke-width" + """Dictionary of attributes with units. + + ..versionadded:: 1.2 + """ + associated_props = { + "fill": "fill-opacity", + "stroke": "stroke-opacity", + "stop-color": "stop-opacity", + } + """Dictionary of association between color and opacity attributes. + + .. versionadded:: 1.2 + """ + + def __init__(self, style=None, callback=None, element=None, **kw): + self.element = element + # This callback is set twice because this is 'pre-initial' data (no callback) + self.callback = None + # Either a string style or kwargs (with dashes as underscores). + style = style or [(k.replace("_", "-"), v) for k, v in kw.items()] + if isinstance(style, str): + style = self._parse_str(style) + # Order raw dictionaries so tests can be made reliable + if isinstance(style, dict) and not isinstance(style, OrderedDict): + style = [(name, style[name]) for name in sorted(style)] + # Should accept dict, Style, parsed string, list etc. + super().__init__(style) + # Now after the initial data, the callback makes sense. + self.callback = callback + + @staticmethod + def _parse_str(style: str, element=None) -> Iterable[BaseStyleValue]: + """Create a dictionary from the value of a CSS rule (such as an inline style or + from an embedded style sheet), including its !important state, parsing the value + if possible. + + Args: + style: the content of a CSS rule to parse + element: the element this style is working on (can be the root SVG, is used + for parsing gradients etc.) + + Yields: + :class:`~inkex.properties.BaseStyleValue`: the parsed attribute + """ + for declaration in style.split(";"): + if ":" in declaration: + result = BaseStyleValue.factory_errorhandled( + element, declaration=declaration.strip() + ) + if result is not None: + yield result + + @staticmethod + def parse_str(style: str, element=None): + """Parse a style passed as string""" + return Style(style, element=element) + + def __str__(self): + """Format an inline style attribute from a dictionary""" + return self.to_str() + + def to_str(self, sep=";"): + """Convert to string using a custom delimiter""" + return sep.join([self.get_store(key).declaration for key in self]) + + def __add__(self, other): + """Add two styles together to get a third, composing them""" + ret = self.copy() + ret.update(Style(other)) + return ret + + def __iadd__(self, other): + """Add style to this style, the same as ``style.update(dict)``""" + self.update(other) + return self + + def __sub__(self, other): + """Remove keys and return copy""" + ret = self.copy() + ret.__isub__(other) + return ret + + def __isub__(self, other): + """Remove keys from this style, list of keys or other style dictionary""" + for key in other: + self.pop(key, None) + return self + + def __ne__(self, other): + return not self.__eq__(other) + + def copy(self): + """Create a copy of the style. + + .. versionadded:: 1.2""" + ret = Style({}, element=self.element) + for key, value in super().items(): + ret[key] = value + return ret + + def update(self, other): + """Update, while respecting ``!important`` declarations.""" + if not isinstance(other, Style): + other = Style(other) + # only update + if isinstance(other, Style): + for key in other.keys(): + if not (self.get_importance(key) and not other.get_importance(key)): + self[key] = other.get_store(key) + + if self.callback is not None: + self.callback(self) + + def add_inherited(self, parent): + """Creates a new Style containing all parent styles with importance "!important" + and current styles with importance "!important" + + .. versionadded:: 1.2 + + Args: + parent: the parent style that will be merged into this one (will not be + altered) + + Returns: + Style: the merged Style object + """ + ret = self.copy() + ret.apply_shorthands() # parent should already have its shortcuts applied + + if not (isinstance(parent, Style)): + return ret + + for key in parent.keys(): + apply = False + if key in all_properties and all_properties[key][3]: + # only set parent value if value is not set or parent importance is + # higher + if key not in ret: + apply = True + elif self.get_importance(key) != parent.get_importance(key): + apply = parent.get_importance(key) + if key in ret and ret[key] == "inherit": + apply = True + if apply: + ret[key] = parent[key] + return ret + + def apply_shorthands(self): + """Apply all shorthands in this style.""" + for element in list(self.values()): + if isinstance(element, ShorthandValue): + element.apply_shorthand(self) + + def __delitem__(self, key): + super().__delitem__(key) + if self.callback is not None: + self.callback(self) + + def pop(self, key, default=None): + super().pop(key, default) + # On Python < 3.11, pop internally calls __delitem__. + # This does not happen in 3.11. To avoid + # calling the callback twice, we need to check the Python version. + if sys.version_info >= (3, 11): + if self.callback is not None: + self.callback(self) + + def __setitem__(self, key, value): + """Sets a style value. + + .. versionchanged:: 1.2 + ``value`` can now also be non-string objects such as a Gradient. + + Args: + key (str): the attribute name + value (Any): + + - a :class:`BaseStyleValue` + - a string with the value + - any other object. The :class:`~inkex.properties.BaseStyleValue` + subclass of the provided key will attempt to create a string out of + the passed value. + Raises: + ValueError: when ``value`` is a :class:`~inkex.properties.BaseStyleValue` + for a different attribute than `key` + Error: Other exceptions may be raised when converting non-string objects.""" + if not isinstance(value, BaseStyleValue) or value is None: + # try to convert the value using the factory + value = BaseStyleValue.factory(attr_name=key, value=value) + # check if the set attribute is valid + _ = value.parse_value(self.element) + elif key != value.attr_name: + raise ValueError( + """You're trying to save a value into a style attribute, but the + provided key is different from the attribute name given in the value""" + ) + super().__setitem__(key, value) + if self.callback is not None: + self.callback(self) + + def __getitem__(self, key): + """Returns the unparsed value of the element (minus a possible ``!important``) + + .. versionchanged:: 1.2 + ``!important`` is removed from the value. + """ + return self.get_store(key).value + + def get(self, key, default=None): + if key in self: + return self.__getitem__(key) + return default + + def get_store(self, key): + """Gets the :class:`~inkex.properties.BaseStyleValue` of this key, since the + other interfaces - :func:`__getitem__` and :func:`__call__` - return the + original and parsed value, respectively. + + .. versionadded:: 1.2 + + Args: + key (str): the attribute name + + Returns: + BaseStyleValue: the BaseStyleValue struct of this attribute + """ + return super().__getitem__(key) + + def __call__(self, key, element=None, default=None): + """Return the parsed value of a style. Optionally, an element can be passed + that will be used to find gradient definitions etc. + + .. versionadded:: 1.2""" + # check if there are shorthand properties defined. If so, apply them to a copy + copy = self + for value in super().values(): + if isinstance(value, ShorthandValue): + copy = self.copy() + copy.apply_shorthands() + if key in copy: + return copy.get_store(key).parse_value(element or self.element) + # style is not set, return the default value + if key in all_properties or default is not None: + defvalue = BaseStyleValue.factory( + attr_name=key, value=default or all_properties[key][1] + ) + return ( + defvalue.parse_value() + ) # default values are independent of the element + raise KeyError("Unknown attribute") + + def __eq__(self, other): + if not isinstance(other, Style): + other = Style(other) + if self.keys() != other.keys(): + return False + for arg in set(self) | set(other): + if self.get_store(arg) != other.get_store(arg): + return False + return True + + def items(self): + """The styles's parsed items + + .. versionadded:: 1.2""" + for key, value in super().items(): + yield key, value.value + + def get_importance(self, key, default=False): + """Returns whether the declaration with ``key`` is marked as ``!important`` + + .. versionadded:: 1.2""" + if key in self: + return super().__getitem__(key).important + return default + + def set_importance(self, key, importance): + """Sets the ``!important`` state of a declaration with key ``key`` + + .. versionadded:: 1.2""" + if key in self: + super().__getitem__(key).important = importance + else: + raise KeyError() + if self.callback is not None: + self.callback(self) + + def get_color(self, name="fill"): + """Get the color AND opacity as one Color object""" + color = Color(self.get(name, "none")) + return color.to_rgba(self.get(name + "-opacity", 1.0)) + + def set_color(self, color, name="fill"): + """Sets the given color AND opacity as rgba to the fill or stroke style + properties.""" + color = Color(color) + if color.space == "rgba" and name in Style.associated_props: + self[Style.associated_props[name]] = color.alpha + self[name] = color.to_rgb() + else: + self[name] = color + + def update_urls(self, old_id, new_id): + """Find urls in this style and replace them with the new id""" + for name, value in self.items(): + if value == f"url(#{old_id})": + self[name] = f"url(#{new_id})" + + def interpolate(self, other, fraction): + # type: (Style, Style, float) -> Style + """Interpolate all properties. + + .. versionadded:: 1.1""" + from .tween import StyleInterpolator + from inkex.elements import PathElement + + if self.element is None: + self.element = PathElement(style=str(self)) + if other.element is None: + other.element = PathElement(style=str(other)) + return StyleInterpolator(self.element, other.element).interpolate(fraction) + + @classmethod + def cascaded_style(cls, element): + """Returns the cascaded style of an element (all rules that apply the element + itself), based on the stylesheets, the presentation attributes and the inline + style using the respective specificity of the style + + see https://www.w3.org/TR/CSS22/cascade.html#cascading-order + + .. versionadded:: 1.2 + + Args: + element (BaseElement): the element that the cascaded style will be + computed for + + Returns: + Style: the cascaded style + """ + try: + styles = list(element.root.stylesheets.lookup_specificity(element.get_id())) + except FragmentError: + styles = [] + + # presentation attributes have specificity 0, + # see https://www.w3.org/TR/SVG/styling.html#PresentationAttributes + styles.append([element.presentation_style(), (0, 0, 0)]) + + # would be (1, 0, 0, 0), but then we'd have to extend every entry + styles.append([element.style, (float("inf"), 0, 0)]) + + # sort styles by specificity (ascending, so when overwriting it's correct) + styles = sorted(styles, key=lambda item: item[1]) + + result = styles[0][0].copy() + for style, _ in styles[1:]: + result.update(style) + result.element = element + return result + + @classmethod + def specified_style(cls, element): + """Returns the specified style of an element, i.e. the cascaded style + + inheritance, see https://www.w3.org/TR/CSS22/cascade.html#specified-value + + .. versionadded:: 1.2 + + Args: + element (BaseElement): the element that the specified style will be computed + for + + Returns: + Style: the specified style + """ + + # We currently dont treat the case where parent=absolute value and + # element=relative value, i.e. specified = relative * absolute. + cascaded = Style.cascaded_style(element) + + parent = element.getparent() + + if parent is not None and isinstance(parent, IBaseElement): + cascaded = Style.add_inherited(cascaded, parent.specified_style()) + cascaded.element = element + return cascaded # doesn't have a parent + + +class StyleSheets(list): + """ + Special mechanism which contains all the stylesheets for an svg document + while also caching lookups for specific elements. + + This caching is needed because data can't be attached to elements as they are + re-created on the fly by lxml so lookups have to be centralised. + """ + + def __init__(self, svg=None): + super().__init__() + self.svg = svg + + def lookup(self, element_id, svg=None): + """ + Find all styles for this element. + """ + # This is aweful, but required because we can't know for sure + # what might have changed in the xml tree. + if svg is None: + svg = self.svg + for sheet in self: + for style in sheet.lookup(element_id, svg=svg): + yield style + + def lookup_specificity(self, element_id, svg=None): + """ + Find all styles for this element and return the specificity of the match. + + .. versionadded:: 1.2 + """ + # This is aweful, but required because we can't know for sure + # what might have changed in the xml tree. + if svg is None: + svg = self.svg + for sheet in self: + for style in sheet.lookup_specificity(element_id, svg=svg): + yield style + + +class StyleSheet(list): + """ + A style sheet, usually the CDATA contents of a style tag, but also + a css file used with a css. Will yield multiple Style() classes. + """ + + comment_strip = re.compile(r"(\/\/.*?\n)|(\/\*.*?\*\/|@import .*;)") + + def __init__(self, content=None, callback=None): + super().__init__() + self.callback = None + # Remove comments + content = self.comment_strip.sub("", (content or "")) + # Parse rules + for block in content.split("}"): + if block: + self.append(block) + self.callback = callback + + def __str__(self): + return "\n" + "\n".join([str(style) for style in self]) + "\n" + + def _callback(self, style=None): # pylint: disable=unused-argument + if self.callback is not None: + self.callback(self) + + def add(self, rule, style): + """Append a rule and style combo to this stylesheet""" + self.append( + ConditionalStyle(rules=rule, style=str(style), callback=self._callback) + ) + + def append(self, other): + """Make sure callback is called when updating""" + if isinstance(other, str): + if "{" not in other: + return # Warning? + rules, style = other.strip("}").split("{", 1) + if rules.strip().startswith("@"): # ignore @font-face and @import + return + other = ConditionalStyle( + rules=rules, style=style.strip(), callback=self._callback + ) + super().append(other) + self._callback() + + def lookup(self, element_id, svg): + """Lookup the element_id against all the styles in this sheet""" + for style in self: + for elem in svg.xpath(style.to_xpath()): + if elem.get("id", None) == element_id: + yield style + + def lookup_specificity(self, element_id, svg): + """Lookup the element_id against all the styles in this sheet + and return the specificity of the match + + Args: + element_id (str): the id of the element that styles are being queried for + svg (SvgDocumentElement): The document that contains both element and the + styles + + Yields: + Tuple[ConditionalStyle, Tuple[int, int, int]]: all matched styles and the + specificity of the match + """ + for style in self: + for rule, spec in zip(style.to_xpaths(), style.get_specificities()): + for elem in svg.xpath(rule): + if elem.get("id", None) == element_id: + yield (style, spec) + + +class ConditionalStyle(Style): + """ + Just like a Style object, but includes one or more + conditional rules which places this style in a stylesheet + rather than being an attribute style. + """ + + def __init__(self, rules="*", style=None, callback=None, **kwargs): + super().__init__(style=style, callback=callback, **kwargs) + self.rules = [ConditionalRule(rule) for rule in rules.split(",")] + + def __str__(self): + """Return this style as a css entry with class""" + content = self.to_str(";\n ") + rules = ",\n".join(str(rule) for rule in self.rules) + if content: + return f"{rules} {{\n {content};\n}}" + return f"{rules} {{}}" + + def to_xpath(self): + """Convert all rules to an xpath""" + # This can be converted to cssselect.CSSSelector (lxml.cssselect) later if we + # have coverage problems. The main reason we're not is that cssselect is doing + # exactly this xpath transform and provides no extra functionality for reverse + # lookups. + return "|".join(self.to_xpaths()) + + def to_xpaths(self): + """Gets a list of xpaths for all rules of this ConditionalStyle + + .. versionadded:: 1.2""" + return [rule.to_xpath() for rule in self.rules] + + def get_specificities(self): + """Gets an iterator of the specificity of all rules in this ConditionalStyle + + .. versionadded:: 1.2""" + for rule in self.rules: + yield rule.get_specificity() diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/__init__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/__init__.py new file mode 100644 index 0000000..4c3d4fa --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/__init__.py @@ -0,0 +1,454 @@ +# coding=utf-8 +# +# Copyright (C) 2018-2019 Martin Owens +# 2019 Thomas Holder +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. +# +""" +Testing module. See :ref:`unittests` for details. +""" + +import os +import re +import sys +import shutil +import tempfile +import hashlib +import random +import uuid +import io +from typing import List, Union, Tuple, Type, TYPE_CHECKING + +from io import BytesIO, StringIO +import xml.etree.ElementTree as xml + +from unittest import TestCase as BaseCase +from inkex.base import InkscapeExtension + +from .. import Transform, load_svg, SvgDocumentElement +from ..utils import to_bytes +from .xmldiff import xmldiff +from .mock import MockCommandMixin, Capture + +if TYPE_CHECKING: + from .filters import Compare + +COMPARE_DELETE, COMPARE_CHECK, COMPARE_WRITE, COMPARE_OVERWRITE = range(4) + + +class NoExtension(InkscapeExtension): # pylint: disable=too-few-public-methods + """Test case must specify 'self.effect_class' to assertEffect.""" + + def __init__(self, *args, **kwargs): # pylint: disable=super-init-not-called + raise NotImplementedError(self.__doc__) + + def run(self, args=None, output=None): + """Fake run""" + + +class TestCase(MockCommandMixin, BaseCase): + """ + Base class for all effects tests, provides access to data_files and + test_without_parameters + """ + + effect_class = NoExtension # type: Type[InkscapeExtension] + effect_name = property(lambda self: self.effect_class.__module__) + + # If set to true, the output is not expected to be the stdout SVG document, but + # rather text or a message sent to the stderr, this is highly weird. But sometimes + # happens. + stderr_output = False + stdout_protect = True + stderr_protect = True + + def __init__(self, *args, **kw): + super().__init__(*args, **kw) + self._temp_dir = None + self._effect = None + + def setUp(self): # pylint: disable=invalid-name + """Make sure every test is seeded the same way""" + self._effect = None + super().setUp() + random.seed(0x35F) + + def tearDown(self): + super().tearDown() + if self._temp_dir and os.path.isdir(self._temp_dir): + shutil.rmtree(self._temp_dir) + + @classmethod + def __file__(cls): + """Create a __file__ property which acts much like the module version""" + return os.path.abspath(sys.modules[cls.__module__].__file__) + + @classmethod + def _testdir(cls): + """Get's the folder where the test exists (so data can be found)""" + return os.path.dirname(cls.__file__()) + + @classmethod + def rootdir(cls): + """Return the full path to the extensions directory""" + return os.path.dirname(cls._testdir()) + + @classmethod + def datadir(cls): + """Get the data directory (can be over-ridden if needed)""" + return os.path.join(cls._testdir(), "data") + + @property + def tempdir(self): + """Generate a temporary location to store files""" + if self._temp_dir is None: + self._temp_dir = os.path.realpath(tempfile.mkdtemp(prefix="inkex-tests-")) + if not os.path.isdir(self._temp_dir): + raise IOError("The temporary directory has disappeared!") + return self._temp_dir + + def temp_file( + self, prefix="file-", template="{prefix}{name}{suffix}", suffix=".tmp" + ): + """Generate the filename of a temporary file""" + filename = template.format(prefix=prefix, suffix=suffix, name=uuid.uuid4().hex) + return os.path.join(self.tempdir, filename) + + @classmethod + def data_file(cls, filename, *parts, check_exists=True): + """Provide a data file from a filename, can accept directories as arguments. + + .. versionchanged:: 1.2 + ``check_exists`` parameter added""" + if os.path.isabs(filename): + # Absolute root was passed in, so we trust that (it might be a tempdir) + full_path = os.path.join(filename, *parts) + else: + # Otherwise we assume it's relative to the test data dir. + full_path = os.path.join(cls.datadir(), filename, *parts) + + if not os.path.isfile(full_path) and check_exists: + raise IOError(f"Can't find test data file: {full_path}") + return full_path + + @property + def empty_svg(self): + """Returns a common minimal svg file""" + return self.data_file("svg", "default-inkscape-SVG.svg") + + def assertAlmostTuple( + self, found, expected, precision=8, msg="" + ): # pylint: disable=invalid-name + """ + Floating point results may vary with computer architecture; use + assertAlmostEqual to allow a tolerance in the result. + """ + self.assertEqual(len(found), len(expected), msg) + for fon, exp in zip(found, expected): + self.assertAlmostEqual(fon, exp, precision, msg) + + def assertEffectEmpty(self, effect, **kwargs): # pylint: disable=invalid-name + """Assert calling effect without any arguments""" + self.assertEffect(effect=effect, **kwargs) + + def assertEffect(self, *filename, **kwargs): # pylint: disable=invalid-name + """Assert an effect, capturing the output to stdout. + + filename should point to a starting svg document, default is empty_svg + """ + if filename: + data_file = self.data_file(*filename) + else: + data_file = self.empty_svg + + os.environ["DOCUMENT_PATH"] = data_file + args = [data_file] + list(kwargs.pop("args", [])) + args += [f"--{kw[0]}={kw[1]}" for kw in kwargs.items()] + + effect = kwargs.pop("effect", self.effect_class)() + + # Output is redirected to this string io buffer + if self.stderr_output: + with Capture("stderr") as stderr: + effect.run(args, output=BytesIO()) + effect.test_output = stderr + else: + output = BytesIO() + with Capture( + "stdout", kwargs.get("stdout_protect", self.stdout_protect) + ) as stdout: + with Capture( + "stderr", kwargs.get("stderr_protect", self.stderr_protect) + ) as stderr: + effect.run(args, output=output) + self.assertEqual( + "", stdout.getvalue(), "Extra print statements detected" + ) + self.assertEqual( + "", stderr.getvalue(), "Extra error or warnings detected" + ) + effect.test_output = output + + if os.environ.get("FAIL_ON_DEPRECATION", False): + warnings = getattr(effect, "warned_about", set()) + effect.warned_about = set() # reset for next test + self.assertFalse(warnings, "Deprecated API is still being used!") + + return effect + + # pylint: disable=invalid-name + def assertDeepAlmostEqual(self, first, second, places=None, msg=None, delta=None): + """Asserts that two objects, possible nested lists, are almost equal.""" + if delta is None and places is None: + places = 7 + if isinstance(first, (list, tuple)): + assert len(first) == len(second) + for f, s in zip(first, second): + self.assertDeepAlmostEqual(f, s, places, msg, delta) + else: + self.assertAlmostEqual(first, second, places, msg, delta) + + def assertTransformEqual(self, lhs, rhs, places=7): + """Assert that two transform expressions evaluate to the same + transformation matrix. + + .. versionadded:: 1.1 + """ + self.assertAlmostTuple( + tuple(Transform(lhs).to_hexad()), tuple(Transform(rhs).to_hexad()), places + ) + + # pylint: enable=invalid-name + + @property + def effect(self): + """Generate an effect object""" + if self._effect is None: + self._effect = self.effect_class() + return self._effect + + def import_string(self, string, *args) -> SvgDocumentElement: + """Runs a string through an import extension, with optional arguments + provided as "--arg=value" arguments""" + stream = io.BytesIO(string.encode()) + reader = self.effect_class() + out = io.BytesIO() + reader.parse_arguments([*args]) + reader.options.input_file = stream + reader.options.output = out + reader.load_raw() + reader.save_raw(reader.effect()) + out.seek(0) + decoded = out.read().decode("utf-8") + document = load_svg(decoded) + return document + + +class InkscapeExtensionTestMixin: + """Automatically setup self.effect for each test and test with an empty svg""" + + def setUp(self): # pylint: disable=invalid-name + """Check if there is an effect_class set and create self.effect if it is""" + super().setUp() + if self.effect_class is None: + self.skipTest("self.effect_class is not defined for this this test") + + def test_default_settings(self): + """Extension works with empty svg file""" + self.effect.run([self.empty_svg]) + + +class ComparisonMixin: + """ + Add comparison tests to any existing test suite. + """ + + compare_file: Union[List[str], Tuple[str], str] = "svg/shapes.svg" + """This input svg file sent to the extension (if any)""" + + compare_filters = [] # type: List[Compare] + """The ways in which the output is filtered for comparision (see filters.py)""" + + compare_filter_save = False + """If true, the filtered output will be saved and only applied to the + extension output (and not to the reference file)""" + + comparisons = [ + (), + ("--id=p1", "--id=r3"), + ] + """A list of comparison runs, each entry will cause the extension to be run.""" + + compare_file_extension = "svg" + + @property + def _compare_file_extension(self): + """The default extension to use when outputting check files in COMPARE_CHECK + mode.""" + if self.stderr_output: + return "txt" + return self.compare_file_extension + + def test_all_comparisons(self): + """Testing all comparisons""" + if not isinstance(self.compare_file, (list, tuple)): + self._test_comparisons(self.compare_file) + else: + for compare_file in self.compare_file: + self._test_comparisons( + compare_file, addout=os.path.basename(compare_file) + ) + + def _test_comparisons(self, compare_file, addout=None): + for args in self.comparisons: + self.assertCompare( + compare_file, + self.get_compare_cmpfile(args, addout), + args, + ) + + def assertCompare( + self, infile, cmpfile, args, outfile=None + ): # pylint: disable=invalid-name + """ + Compare the output of a previous run against this one. + + Args: + infile: The filename of the pre-processed svg (or other type of file) + cmpfile: The filename of the data we expect to get, if not set + the filename will be generated from the effect name and kwargs. + args: All the arguments to be passed to the effect run + outfile: Optional, instead of returning a regular output, this extension + dumps it's output to this filename instead. + + """ + compare_mode = int(os.environ.get("EXPORT_COMPARE", COMPARE_DELETE)) + + effect = self.assertEffect(infile, args=args) + + if cmpfile is None: + cmpfile = self.get_compare_cmpfile(args) + + if not os.path.isfile(cmpfile) and compare_mode == COMPARE_DELETE: + raise IOError( + f"Comparison file {cmpfile} not found, set EXPORT_COMPARE=1 to create " + "it." + ) + + if outfile: + if not os.path.isabs(outfile): + outfile = os.path.join(self.tempdir, outfile) + self.assertTrue( + os.path.isfile(outfile), f"No output file created! {outfile}" + ) + with open(outfile, "rb") as fhl: + data_a = fhl.read() + else: + data_a = effect.test_output.getvalue() + + write_output = None + if compare_mode == COMPARE_CHECK: + _file = cmpfile[:-4] if cmpfile.endswith(".out") else cmpfile + write_output = f"{_file}.{self._compare_file_extension}" + elif ( + compare_mode == COMPARE_WRITE and not os.path.isfile(cmpfile) + ) or compare_mode == COMPARE_OVERWRITE: + write_output = cmpfile + + try: + if write_output and not os.path.isfile(cmpfile): + raise AssertionError(f"Check the output: {write_output}") + with open(cmpfile, "rb") as fhl: + data_b = self._apply_compare_filters(fhl.read(), False) + self._base_compare(data_a, data_b, compare_mode) + except AssertionError: + if write_output: + if isinstance(data_a, str): + data_a = data_a.encode("utf-8") + with open(write_output, "wb") as fhl: + fhl.write(self._apply_compare_filters(data_a, True)) + print(f"Written output: {write_output}") + # This only reruns if the original test failed. + # The idea here is to make sure the new output file is "stable" + # Because some tests can produce random changes and we don't + # want test authors to be too reassured by a simple write. + if write_output == cmpfile: + effect = self.assertEffect(infile, args=args) + self._base_compare(data_a, cmpfile, COMPARE_CHECK) + if not write_output == cmpfile: + raise + + def _base_compare(self, data_a, data_b, compare_mode): + data_a = self._apply_compare_filters(data_a) + + if ( + isinstance(data_a, bytes) + and isinstance(data_b, bytes) + and data_a.startswith(b"<") + and data_b.startswith(b"<") + ): + # Late importing + diff_xml, delta = xmldiff(data_a, data_b) + if not delta and compare_mode == COMPARE_DELETE: + print( + "The XML is different, you can save the output using the " + "EXPORT_COMPARE envionment variable. Set it to 1 to save a file " + "you can check, set it to 3 to overwrite this comparison, setting " + "the new data as the correct one.\n" + ) + diff = "SVG Differences\n\n" + if os.environ.get("XML_DIFF", False): + diff = "<- " + diff_xml + else: + for x, (value_a, value_b) in enumerate(delta): + try: + # Take advantage of better text diff in testcase's own asserts. + self.assertEqual(value_a, value_b) + except AssertionError as err: + diff += f" {x}. {str(err)}\n" + self.assertTrue(delta, diff) + else: + # compare any content (non svg) + self.assertEqual(data_a, data_b) + + def _apply_compare_filters(self, data, is_saving=None): + data = to_bytes(data) + # Applying filters flips depending if we are saving the filtered content + # to disk, or filtering during the test run. This is because some filters + # are destructive others are useful for diagnostics. + if is_saving is self.compare_filter_save or is_saving is None: + for cfilter in self.compare_filters: + data = cfilter(data) + return data + + def get_compare_cmpfile(self, args, addout=None): + """Generate an output file for the arguments given""" + if addout is not None: + args = list(args) + [str(addout)] + opstr = ( + "__".join(args) + .replace(self.tempdir, "TMP_DIR") + .replace(self.datadir(), "DAT_DIR") + ) + opstr = re.sub(r"[^\w-]", "__", opstr) + if opstr: + if len(opstr) > 127: + # avoid filename-too-long error + opstr = hashlib.md5(opstr.encode("latin1")).hexdigest() + opstr = "__" + opstr + return self.data_file( + "refs", f"{self.effect_name}{opstr}.out", check_exists=False + ) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/decorators.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/decorators.py new file mode 100644 index 0000000..f27e638 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/decorators.py @@ -0,0 +1,9 @@ +""" +Useful decorators for tests. +""" +import pytest +from inkex.command import is_inkscape_available + +requires_inkscape = pytest.mark.skipif( # pylint: disable=invalid-name + not is_inkscape_available(), reason="Test requires inkscape, but it's not available" +) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/filters.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/filters.py new file mode 100644 index 0000000..281adfc --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/filters.py @@ -0,0 +1,180 @@ +# +# Copyright (C) 2019 Thomas Holder +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# pylint: disable=too-few-public-methods +# +""" +Comparison filters for use with the ComparisonMixin. + +Each filter should be initialised in the list of +filters that are being used. + +.. code-block:: python + + compare_filters = [ + CompareNumericFuzzy(), + CompareOrderIndependentLines(option=yes), + ] + +""" + +import re +from ..utils import to_bytes + + +class Compare: + """ + Comparison base class, this acts as a passthrough unless + the filter staticmethod is overwritten. + """ + + def __init__(self, **options): + self.options = options + + def __call__(self, content): + return self.filter(content) + + @staticmethod + def filter(contents): + """Replace this filter method with your own filtering""" + return contents + + +class CompareNumericFuzzy(Compare): + """ + Turn all numbers into shorter standard formats + + 1.2345678 -> 1.2346 + 1.2300 -> 1.23, 50.0000 -> 50.0 + 50.0 -> 50 + """ + + @staticmethod + def filter(contents): + func = lambda m: b"%.3f" % (float(m.group(0))) + contents = re.sub(rb"\d+\.\d+(e[+-]\d+)?", func, contents) + contents = re.sub(rb"(\d\.\d+?)0+\b", rb"\1", contents) + contents = re.sub(rb"(\d)\.0+(?=\D|\b)", rb"\1", contents) + return contents + + +class CompareWithoutIds(Compare): + """Remove all ids from the svg""" + + @staticmethod + def filter(contents): + return re.sub(rb' id="([^"]*)"', b"", contents) + + +class CompareWithPathSpace(Compare): + """Make sure that path segment commands have spaces around them""" + + @staticmethod + def filter(contents): + def func(match): + """We've found a path command, process it""" + new = re.sub(rb"\s*([LZMHVCSQTAatqscvhmzl])\s*", rb" \1 ", match.group(1)) + return b' d="' + new.replace(b",", b" ") + b'"' + + return re.sub(rb' d="([^"]*)"', func, contents) + + +class CompareSize(Compare): + """Compare the length of the contents instead of the contents""" + + @staticmethod + def filter(contents): + return len(contents) + + +class CompareOrderIndependentBytes(Compare): + """Take all the bytes and sort them""" + + @staticmethod + def filter(contents): + return b"".join([bytes(i) for i in sorted(contents)]) + + +class CompareOrderIndependentLines(Compare): + """Take all the lines and sort them""" + + @staticmethod + def filter(contents): + return b"\n".join(sorted(contents.splitlines())) + + +class CompareOrderIndependentStyle(Compare): + """Take all styles and sort the results""" + + @staticmethod + def filter(contents): + contents = CompareNumericFuzzy.filter(contents) + + def func(match): + """Search and replace function for sorting""" + sty = b";".join(sorted(match.group(1).split(b";"))) + return b'style="%s"' % (sty,) + + return re.sub(rb'style="([^"]*)"', func, contents) + + +class CompareOrderIndependentStyleAndPath(Compare): + """Take all styles and paths and sort them both""" + + @staticmethod + def filter(contents): + contents = CompareOrderIndependentStyle.filter(contents) + + def func(match): + """Search and replace function for sorting""" + path = b"X".join(sorted(re.split(rb"[A-Z]", match.group(1)))) + return b'd="%s"' % (path,) + + return re.sub(rb'\bd="([^"]*)"', func, contents) + + +class CompareOrderIndependentTags(Compare): + """Sorts all the XML tags""" + + @staticmethod + def filter(contents): + return b"\n".join(sorted(re.split(rb">\s*<", contents))) + + +class CompareReplacement(Compare): + """Replace pieces to make output more comparable + + .. versionadded:: 1.1""" + + def __init__(self, *replacements): + self.deltas = replacements + super().__init__() + + def filter(self, contents): + contents = to_bytes(contents) + for _from, _to in self.deltas: + contents = contents.replace(to_bytes(_from), to_bytes(_to)) + return contents + + +class WindowsTextCompat(CompareReplacement): + """Normalize newlines so tests comparing plain text work + + .. versionadded:: 1.2""" + + def __init__(self): + super().__init__(("\r\n", "\n")) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/inkscape.extension.rng b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/inkscape.extension.rng new file mode 100644 index 0000000..1cb77de --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/inkscape.extension.rng @@ -0,0 +1,577 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + file + executable + extension + + + + + + + + + + + + + + + + + + + + python + perl + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + path + extensions + inx + absolute + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + all + g + path + rect + text + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + header + url + + + + + + + default + preserve + + + + + + + + + + + + + + + + + + + + + + + + + + + + expand + + + + + + + + + + + + + + + + + + + + + + + + + + int + + + + + + + + + + + + + + full + + + + + + + + + + float + + + + + + + + + + + + + + + + + + + full + + + + + + + bool + + + + + + color + + + + + colorbutton + + + + + + + + + + + + string + + + + + + + + + + multiline + + + + + + + + + + + path + + + + + file + files + folder + folders + file_new + folder_new + + + + + + + + + + + + + optiongroup + + + + + combo + radio + + + + + + + + + + + + + + + + + + + + + + + + notebook + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + + + + + + + yes + no + + + + diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/inkscape.extension.schema b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/inkscape.extension.schema new file mode 100644 index 0000000..63cb97b --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/inkscape.extension.schema @@ -0,0 +1,9 @@ + + + + + + Warning: @value values should be unique for a given option. + + + diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/inx.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/inx.py new file mode 100644 index 0000000..20cc345 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/inx.py @@ -0,0 +1,162 @@ +#!/usr/bin/env python3 +# coding=utf-8 +""" +Test elements extra logic from svg xml lxml custom classes. +""" +import os +from importlib import resources + +from lxml import etree + +from ..utils import PY3 +from ..inx import InxFile + +INTERNAL_ARGS = ("help", "output", "id", "selected-nodes") +ARG_TYPES = { + "Boolean": "bool", + "Color": "color", + "str": "string", + "int": "int", + "float": "float", +} + + +class InxMixin: + """Tools for Testing INX files, use as a mixin class: + + class MyTests(InxMixin, TestCase): + def test_inx_file(self): + self.assertInxIsGood("some_inx_file.inx") + """ + + def assertInxIsGood(self, inx_file): # pylint: disable=invalid-name + """Test the inx file for consistancy and correctness""" + self.assertTrue(PY3, "INX files can only be tested in python3") + + inx = InxFile(inx_file) + if "help" in inx.ident or inx.script.get("interpreter", None) != "python": + return + cls = inx.extension_class + # Check class can be matched in python file + self.assertTrue(cls, f"Can not find class for {inx.filename}") + # Check name is reasonable for the class + if not cls.multi_inx: + self.assertEqual( + cls.__name__, + inx.slug, + f"Name of extension class {cls.__module__}.{cls.__name__} " + f"is different from ident {inx.slug}", + ) + self.assertParams(inx, cls) + + def assertParams(self, inx, cls): # pylint: disable=invalid-name + """Confirm the params in the inx match the python script + + .. versionchanged:: 1.2 + Also checks that the default values are identical""" + params = {param.name: self.parse_param(param) for param in inx.params} + args = dict(self.introspect_arg_parser(cls().arg_parser)) + mismatch_a = list(set(params) ^ set(args) & set(params)) + mismatch_b = list(set(args) ^ set(params) & set(args)) + self.assertFalse( + mismatch_a, f"{inx.filename}: Inx params missing from arg parser" + ) + self.assertFalse( + mismatch_b, f"{inx.filename}: Script args missing from inx xml" + ) + + for param in args: + if params[param]["type"] and args[param]["type"]: + self.assertEqual( + params[param]["type"], + args[param]["type"], + f"Type is not the same for {inx.filename}:param:{param}", + ) + inxdefault = params[param]["default"] + argsdefault = args[param]["default"] + if inxdefault and argsdefault: + # for booleans, the inx is lowercase and the param is uppercase + if params[param]["type"] == "bool": + argsdefault = str(argsdefault).lower() + elif params[param]["type"] not in ["string", None, "color"] or args[ + param + ]["type"] in ["int", "float"]: + # try to parse the inx value to compare numbers to numbers + inxdefault = float(inxdefault) + if args[param]["type"] == "color" or callable(args[param]["default"]): + # skip color, method types + continue + self.assertEqual( + argsdefault, + inxdefault, + f"Default value is not the same for {inx.filename}:param:{param}", + ) + + def introspect_arg_parser(self, arg_parser): + """Pull apart the arg parser to find out what we have in it""" + for ( + action + ) in arg_parser._optionals._actions: # pylint: disable=protected-access + for opt in action.option_strings: + # Ignore params internal to inkscape (thus not in the inx) + if opt.startswith("--") and opt[2:] not in INTERNAL_ARGS: + yield (opt[2:], self.introspect_action(action)) + + @staticmethod + def introspect_action(action): + """Pull apart a single action to get at the juicy insides""" + return { + "type": ARG_TYPES.get((action.type or str).__name__, "string"), + "default": action.default, + "choices": action.choices, + "help": action.help, + } + + @staticmethod + def parse_param(param): + """Pull apart the param element in the inx file""" + if param.param_type in ("optiongroup", "notebook"): + options = param.options + return { + "type": None, + "choices": options, + "default": options and options[0] or None, + } + param_type = param.param_type + if param.param_type in ("path",): + param_type = "string" + return { + "type": param_type, + "default": param.text, + "choices": None, + } + + def assertInxSchemaValid(self, inx_file): # pylint: disable=invalid-name + """Validate inx file schema.""" + self.assertTrue(INX_SCHEMAS, "no schema files found") + with open(inx_file, "rb") as fp: + inx_doc = etree.parse(fp) + + for schema_name, schema in INX_SCHEMAS.items(): + with self.subTest(schema_file=schema_name): + schema.assert_(inx_doc) + + +def _load_inx_schemas(): + _SCHEMA_CLASSES = { + ".rng": etree.RelaxNG, + ".schema": etree.Schematron, # "pre-ISO-Schematron" + } + + for name in resources.contents(__package__): + _, ext = os.path.splitext(name) + schema_class = _SCHEMA_CLASSES.get(ext) + if schema_class is None: + continue + + with resources.open_binary(__package__, name) as fp: + schema_doc = etree.parse(fp) + yield name, schema_class(schema_doc) + + +INX_SCHEMAS = dict(_load_inx_schemas()) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/mock.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/mock.py new file mode 100644 index 0000000..de5e569 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/mock.py @@ -0,0 +1,463 @@ +# coding=utf-8 +# +# Copyright (C) 2018 Martin Owens +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. +# +# pylint: disable=protected-access,too-few-public-methods +""" +Any mocking utilities required by testing. Mocking is when you need the test +to exercise a piece of code, but that code may or does call on something +outside of the target code that either takes too long to run, isn't available +during the test running process or simply shouldn't be running at all. +""" + +import io +import os +import sys +import logging +import hashlib +import tempfile +from typing import List, Tuple, Any + +from email.mime.application import MIMEApplication +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText +from email.parser import Parser as EmailParser + +import inkex.command + + +FIXED_BOUNDARY = "--CALLDATA--//--CALLDATA--" + + +class Capture: + """Capture stdout or stderr. Used as `with Capture('stdout') as stream:`""" + + def __init__(self, io_name="stdout", swap=True): + self.io_name = io_name + self.original = getattr(sys, io_name) + self.stream = io.StringIO() + self.swap = swap + + def __enter__(self): + if self.swap: + setattr(sys, self.io_name, self.stream) + return self.stream + + def __exit__(self, exc, value, traceback): + if exc is not None and self.swap: + # Dump content back to original if there was an error. + self.original.write(self.stream.getvalue()) + setattr(sys, self.io_name, self.original) + + +class ManualVerbosity: + """Change the verbosity of the test suite manually""" + + result = property(lambda self: self.test._current_result) + + def __init__(self, test, okay=True, dots=False): + self.test = test + self.okay = okay + self.dots = dots + + def flip( + self, exc_type=None, exc_val=None, exc_tb=None + ): # pylint: disable=unused-argument + """Swap the stored verbosity with the original""" + self.okay, self.result.showAll = self.result.showAll, self.okay + self.dots, self.result.dots = self.result.dots, self.okay + + __enter__ = flip + __exit__ = flip + + +class MockMixin: + """ + Add mocking ability to any test base class, will set up mock on setUp + and remove it on tearDown. + + Mocks are stored in an array attached to the test class (not instance!) which + ensures that mocks can only ever be setUp once and can never be reset over + themselves. (just in case this looks weird at first glance) + + class SomeTest(MockingMixin, TestBase): + mocks = [(sys, 'exit', NoSystemExit("Nope!")] + """ + + mocks = [] # type: List[Tuple[Any, str, Any]] + + def setUpMock(self, owner, name, new): # pylint: disable=invalid-name + """Setup the mock here, taking name and function and returning (name, old)""" + old = getattr(owner, name) + if isinstance(new, str): + if hasattr(self, new): + new = getattr(self, new) + if isinstance(new, Exception): + + def _error_function(*args2, **kw2): # pylint: disable=unused-argument + raise type(new)(str(new)) + + setattr(owner, name, _error_function) + elif new is None or isinstance(new, (str, int, float, list, tuple)): + + def _value_function(*args, **kw): # pylint: disable=unused-argument + return new + + setattr(owner, name, _value_function) + else: + setattr(owner, name, new) + # When we start, mocks contains length 3 tuples, when we're finished, it + # contains length 4, this stops remocking and reunmocking from taking place. + return (owner, name, old, False) + + def setUp(self): # pylint: disable=invalid-name + """For each mock instruction, set it up and store the return""" + super().setUp() + for x, mock in enumerate(self.mocks): + if len(mock) == 4: + logging.error( + "Mock was already set up, so it wasn't cleared previously!" + ) + continue + self.mocks[x] = self.setUpMock(*mock) + + def tearDown(self): # pylint: disable=invalid-name + """For each returned stored, tear it down and restore mock instruction""" + super().tearDown() + try: + for x, (owner, name, old, _) in enumerate(self.mocks): + self.mocks[x] = (owner, name, getattr(owner, name)) + setattr(owner, name, old) + except ValueError: + logging.warning("Was never mocked, did something go wrong?") + + def old_call(self, name): + """Get the original caller""" + for arg in self.mocks: + if arg[1] == name: + return arg[2] + return lambda: None + + +class MockCommandMixin(MockMixin): + """ + Replace all the command functions with testable replacements. + + This stops the pipeline and people without the programs, running into problems. + """ + + mocks = [ + (inkex.command, "_call", "mock_call"), + (tempfile, "mkdtemp", "record_tempdir"), + ] + recorded_tempdirs = [] # type:List[str] + + def setUp(self): # pylint: disable=invalid-name + super().setUp() + # This is a the daftest thing I've ever seen, when in the middle + # of a mock, the 'self' variable magically turns from a FooTest + # into a TestCase, this makes it impossible to find the datadir. + from . import TestCase + + TestCase._mockdatadir = self.datadir() + + @classmethod + def cmddir(cls): + """Returns the location of all the mocked command results""" + from . import TestCase + + return os.path.join(TestCase._mockdatadir, "cmd") + + def record_tempdir(self, *args, **kwargs): + """Record any attempts to make tempdirs""" + newdir = self.old_call("mkdtemp")(*args, **kwargs) + self.recorded_tempdirs.append(os.path.realpath(newdir)) + return newdir + + def clean_paths(self, data, files): + """Clean a string of any files or tempdirs""" + + def replace(indata, replaced, replacement): + if isinstance(indata, str): + indata = indata.replace(replaced, replacement) + else: + indata = [i.replace(replaced, replacement) for i in indata] + return indata + + try: + for fdir in self.recorded_tempdirs: + data = replace(data, fdir + os.sep, "./") + data = replace(data, fdir, ".") + files = replace(files, fdir + os.sep, "./") + files = replace(files, fdir, ".") + for fname in files: + data = replace(data, fname, os.path.basename(fname)) + except (UnicodeDecodeError, TypeError): + pass + return data + + def get_all_tempfiles(self): + """Returns a set() of all files currently in any of the tempdirs""" + ret = set([]) + for fdir in self.recorded_tempdirs: + if not os.path.isdir(fdir): + continue + for fname in os.listdir(fdir): + if fname in (".", ".."): + continue + path = os.path.join(fdir, fname) + # We store the modified time so if a program modifies + # the input file in-place, it will look different. + ret.add(path + f";{os.path.getmtime(path)}") + + return ret + + def ignore_command_mock(self, program, arglst, path): + """Return true if the mock is ignored""" + if self and program and arglst: + env = os.environ.get("NO_MOCK_COMMANDS", 0) + if (not os.path.exists(path) and int(env) == 1) or int(env) == 2: + return True + return False + + def mock_call(self, program, *args, **kwargs): + """ + Replacement for the inkex.command.call() function, instead of calling + an external program, will compile all arguments into a hash and use the + hash to find a command result. + """ + # Remove stdin first because it needs to NOT be in the Arguments list. + stdin = kwargs.pop("stdin", None) + args = list(args) + + # We use email + msg = MIMEMultipart(boundary=FIXED_BOUNDARY) + msg["Program"] = MockCommandMixin.get_program_name(program) + + # Gather any output files and add any input files to msg, args and kwargs + # may be modified to strip out filename directories (which change) + inputs, outputs = self.add_call_files(msg, args, kwargs) + + arglst = inkex.command.to_args_sorted(program, *args, **kwargs)[1:] + arglst = self.clean_paths(arglst, inputs + outputs) + argstr = " ".join(arglst) + msg["Arguments"] = argstr.strip() + + if stdin is not None: + # The stdin is counted as the msg body + cleanin = ( + self.clean_paths(stdin, inputs + outputs) + .replace("\r\n", "\n") + .replace(".\\", "./") + ) + msg.attach(MIMEText(cleanin, "plain", "utf-8")) + + keystr = msg.as_string() + # On Windows, output is separated by CRLF + keystr = keystr.replace("\r\n", "\n") + # There is a difference between python2 and python3 output + keystr = keystr.replace("\n\n", "\n") + keystr = keystr.replace("\n ", " ") + if "verb" in keystr: + # Verbs seperated by colons cause diff in py2/3 + keystr = keystr.replace("; ", ";") + # Generate a unique key for this call based on _all_ it's inputs + key = hashlib.md5(keystr.encode("utf-8")).hexdigest() + + if self.ignore_command_mock( + program, arglst, self.get_call_filename(program, key, create=True) + ): + # Call original code. This is so programmers can run the test suite + # against the external programs too, to see how their fair. + if stdin is not None: + kwargs["stdin"] = stdin + + before = self.get_all_tempfiles() + stdout = self.old_call("_call")(program, *args, **kwargs) + outputs += list(self.get_all_tempfiles() - before) + # Remove the modified time from the call + outputs = [out.rsplit(";", 1)[0] for out in outputs] + + # After the program has run, we collect any file outputs and store + # them, then store any stdout or stderr created during the run. + # A developer can then use this to build new test cases. + reply = MIMEMultipart(boundary=FIXED_BOUNDARY) + reply["Program"] = MockCommandMixin.get_program_name(program) + reply["Arguments"] = argstr + self.save_call(program, key, stdout, outputs, reply) + self.save_key(program, key, keystr, "key") + return stdout + + try: + return self.load_call(program, key, outputs) + except IOError as err: + self.save_key(program, key, keystr, "bad-key") + raise IOError( + f"Problem loading call: {program}/{key} use the environment variable " + "NO_MOCK_COMMANDS=1 to call out to the external program and generate " + f"the mock call file for call {program} {argstr}." + ) from err + + def add_call_files(self, msg, args, kwargs): + """ + Gather all files, adding input files to the msg (for hashing) and + output files to the returned files list (for outputting in debug) + """ + # Gather all possible string arguments together. + loargs = sorted(kwargs.items(), key=lambda i: i[0]) + values = [] + for arg in args: + if isinstance(arg, (tuple, list)): + loargs.append(arg) + else: + values.append(str(arg)) + + for _, value in loargs: + if isinstance(value, (tuple, list)): + for val in value: + if val is not True: + values.append(str(val)) + elif value is not True: + values.append(str(value)) + + # See if any of the strings could be filenames, either going to be + # or are existing files on the disk. + files = [[], []] + for value in values: + if os.path.isfile(value): # Input file + files[0].append(value) + self.add_call_file(msg, value) + elif os.path.isdir(os.path.dirname(value)): # Output file + files[1].append(value) + return files + + def add_call_file(self, msg, filename): + """Add a single file to the given mime message""" + fname = os.path.basename(filename) + with open(filename, "rb") as fhl: + if filename.endswith(".svg"): + value = self.clean_paths(fhl.read().decode("utf8"), []) + else: + value = fhl.read() + try: + value = value.decode() + except UnicodeDecodeError: + pass # do not attempt to process binary files further + if isinstance(value, str): + value = value.replace("\r\n", "\n").replace(".\\", "./") + part = MIMEApplication(value, Name=fname) + # After the file is closed + part["Content-Disposition"] = "attachment" + part["Filename"] = fname + msg.attach(part) + + def get_call_filename(self, program, key, create=False): + """ + Get the filename for the call testing information. + """ + path = self.get_call_path(program, create=create) + fname = os.path.join(path, key + ".msg") + if not create and not os.path.isfile(fname): + raise IOError(f"Attempted to find call test data {key}") + return fname + + @staticmethod + def get_program_name(program): + """Takes a program and returns a program name""" + if program == inkex.command.INKSCAPE_EXECUTABLE_NAME: + return "inkscape" + return program + + def get_call_path(self, program, create=True): + """Get where this program would store it's test data""" + command_dir = os.path.join( + self.cmddir(), MockCommandMixin.get_program_name(program) + ) + if not os.path.isdir(command_dir): + if create: + os.makedirs(command_dir) + else: + raise IOError( + "A test is attempting to use an external program in a test:" + f" {program}; but there is not a command data directory which " + f"should contain the results of the command here: {command_dir}" + ) + return command_dir + + def load_call(self, program, key, files): + """ + Load the given call + """ + fname = self.get_call_filename(program, key, create=False) + with open(fname, "rb") as fhl: + msg = EmailParser().parsestr(fhl.read().decode("utf-8")) + + stdout = None + for part in msg.walk(): + if "attachment" in part.get("Content-Disposition", ""): + base_name = part["Filename"] + for out_file in files: + if out_file.endswith(base_name): + with open(out_file, "wb") as fhl: + fhl.write(part.get_payload(decode=True)) + part = None + if part is not None: + # Was not caught by any normal outputs, so we will + # save the file to EVERY tempdir in the hopes of + # hitting on of them. + for fdir in self.recorded_tempdirs: + if os.path.isdir(fdir): + with open(os.path.join(fdir, base_name), "wb") as fhl: + fhl.write(part.get_payload(decode=True)) + elif part.get_content_type() == "text/plain": + stdout = part.get_payload(decode=True) + + return stdout + + def save_call( + self, program, key, stdout, files, msg, ext="output" + ): # pylint: disable=too-many-arguments + """ + Saves the results from the call into a debug output file, the resulting files + should be a Mime msg file format with each attachment being one of the input + files as well as any stdin and arguments used in the call. + """ + if stdout is not None and stdout.strip(): + # The stdout is counted as the msg body here + msg.attach(MIMEText(stdout.decode("utf-8"), "plain", "utf-8")) + + for fname in set(files): + if os.path.isfile(fname): + # print("SAVING FILE INTO MSG: {}".format(fname)) + self.add_call_file(msg, fname) + else: + part = MIMEText("Missing File", "plain", "utf-8") + part.add_header("Filename", os.path.basename(fname)) + msg.attach(part) + fname = self.get_call_filename(program, key, create=True) + "." + ext + + with open(fname, "wb") as fhl: + fhl.write(msg.as_string().encode("utf-8")) + if int(os.environ.get("NO_MOCK_COMMANDS", 0)) == 1: + print(f"Saved mock call as {fname}, remove .{ext}") + + def save_key(self, program, key, keystr, ext="key"): + """Save the key file if we are debugging the key data""" + if os.environ.get("DEBUG_KEY"): + fname = self.get_call_filename(program, key, create=True) + "." + ext + with open(fname, "wb") as fhl: + fhl.write(keystr.encode("utf-8")) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/svg.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/svg.py new file mode 100644 index 0000000..c601c81 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/svg.py @@ -0,0 +1,55 @@ +# coding=utf-8 +# +# Copyright (C) 2018 Martin Owens +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. +# +""" +SVG specific utilities for tests. +""" + +from lxml import etree + +from inkex import SVG_PARSER + + +def svg(svg_attrs=""): + """Returns xml etree based on a simple SVG element. + + svg_attrs: A string containing attributes to add to the + root element of a minimal SVG document. + """ + return etree.fromstring( + str.encode( + '' + f"" + ), + parser=SVG_PARSER, + ) + + +def svg_unit_scaled(width_unit): + """Same as svg, but takes a width unit (top-level transform) for the new document. + + The transform is the ratio between the SVG width and the viewBox width. + """ + return svg(f'width="1{width_unit}" viewBox="0 0 1 1"') + + +def svg_file(filename): + """Parse an svg file and return it's document root""" + with open(filename, "r", encoding="utf-8") as fhl: + doc = etree.parse(fhl, parser=SVG_PARSER) + return doc.getroot() diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/test_inx_file.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/test_inx_file.py new file mode 100644 index 0000000..bce8e20 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/test_inx_file.py @@ -0,0 +1,63 @@ +"""Check .inx file(s). + +This is meant to be run an executable module, e.g. + + python -m inkex.tester.test_inx_file *.inx + +""" +import argparse +import sys +import unittest +from typing import List + +from .inx import InxMixin + + +class InxTestCase(InxMixin, unittest.TestCase): + inx_files: List[str] = [] + + def test_inx_file_parameters(self): + for inx_file in self.inx_files: + with self.subTest(inx_file=inx_file): + self.assertInxIsGood(inx_file) + + def test_inx_file_schema(self): + for inx_file in self.inx_files: + with self.subTest(inx_file=inx_file): + self.assertInxSchemaValid(inx_file) + + +def main(args=None): + """Check .inx file(s)""" + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "-v", + "--verbose", + dest="verbosity", + action="store_const", + const=2, + help="Verbose output", + ) + parser.add_argument( + "-q", + "--quiet", + dest="verbosity", + action="store_const", + const=0, + help="Quiet output", + ) + parser.add_argument( + "inx_files", metavar="INX-FILE", nargs="+", help="An .inx file to check" + ) + args = parser.parse_args(args, namespace=argparse.Namespace(verbosity=1)) + + InxTestCase.inx_files = args.inx_files + runner = unittest.TextTestRunner(verbosity=args.verbosity) + + suite = unittest.defaultTestLoader.loadTestsFromTestCase(InxTestCase) + result = runner.run(suite) + sys.exit(not result.wasSuccessful()) + + +if __name__ == "__main__": + main() diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/word.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/word.py new file mode 100644 index 0000000..bf395d7 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/word.py @@ -0,0 +1,42 @@ +# coding=utf-8 +# +# Unknown author +# +""" +Generate words for testing. +""" + +import string +import random + + +def word_generator(text_length): + """ + Generate a word of text_length size + """ + word = "" + + for _ in range(0, text_length): + word += random.choice( + string.ascii_lowercase + + string.ascii_uppercase + + string.digits + + string.punctuation + ) + + return word + + +def sentencecase(word): + """Make a word standace case""" + word_new = "" + lower_letters = list(string.ascii_lowercase) + first = True + for letter in word: + if letter in lower_letters and first is True: + word_new += letter.upper() + first = False + else: + word_new += letter + + return word_new diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/xmldiff.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/xmldiff.py new file mode 100644 index 0000000..1864530 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tester/xmldiff.py @@ -0,0 +1,124 @@ +# +# Copyright 2011 (c) Ian Bicking +# 2019 (c) Martin Owens +# +# Taken from http://formencode.org under the GPL compatible PSF License. +# Modified to produce more output as a diff. +# +""" +Allow two xml files/lxml etrees to be compared, returning their differences. +""" +import xml.etree.ElementTree as xml +from io import BytesIO + +from inkex.paths import Path + + +def text_compare(test1, test2): + """ + Compare two text strings while allowing for '*' to match + anything on either lhs or rhs. + """ + if not test1 and not test2: + return True + if test1 == "*" or test2 == "*": + return True + return (test1 or "").strip() == (test2 or "").strip() + + +class DeltaLogger(list): + """A record keeper of the delta between two svg files""" + + def append_tag(self, tag_a, tag_b): + """Record a tag difference""" + if tag_a: + tag_a = f"<{tag_a}.../>" + if tag_b: + tag_b = f"<{tag_b}.../>" + self.append((tag_a, tag_b)) + + def append_attr(self, attr, value_a, value_b): + """Record an attribute difference""" + + def _prep(val): + if val: + if attr == "d": + return [attr] + Path(val).to_arrays() + return (attr, val) + return val + + # Only append a difference if the preprocessed values are different. + # This solves the issue that -0 != 0 in path data. + prep_a = _prep(value_a) + prep_b = _prep(value_b) + if prep_a != prep_b: + self.append((prep_a, prep_b)) + + def append_text(self, text_a, text_b): + """Record a text difference""" + self.append((text_a, text_b)) + + def __bool__(self): + """Returns True if there's no log, i.e. the delta is clean""" + return not self.__len__() + + __nonzero__ = __bool__ + + def __repr__(self): + if self: + return "No differences detected" + return f"{len(self)} xml differences" + + +def to_xml(data): + """Convert string or bytes to xml parsed root node""" + if isinstance(data, str): + data = data.encode("utf8") + if isinstance(data, bytes): + return xml.parse(BytesIO(data)).getroot() + return data + + +def xmldiff(data1, data2): + """Create an xml difference, will modify the first xml structure with a diff""" + xml1, xml2 = to_xml(data1), to_xml(data2) + delta = DeltaLogger() + _xmldiff(xml1, xml2, delta) + return xml.tostring(xml1).decode("utf-8"), delta + + +def _xmldiff(xml1, xml2, delta): + if xml1.tag != xml2.tag: + xml1.tag = f"{xml1.tag}XXX{xml2.tag}" + delta.append_tag(xml1.tag, xml2.tag) + for name, value in xml1.attrib.items(): + if name not in xml2.attrib: + delta.append_attr(name, xml1.attrib[name], None) + xml1.attrib[name] += "XXX" + elif xml2.attrib.get(name) != value: + delta.append_attr(name, xml1.attrib.get(name), xml2.attrib.get(name)) + xml1.attrib[name] = f"{xml1.attrib.get(name)}XXX{xml2.attrib.get(name)}" + for name, value in xml2.attrib.items(): + if name not in xml1.attrib: + delta.append_attr(name, None, value) + xml1.attrib[name] = "XXX" + value + if not text_compare(xml1.text, xml2.text): + delta.append_text(xml1.text, xml2.text) + xml1.text = f"{xml1.text}XXX{xml2.text}" + if not text_compare(xml1.tail, xml2.tail): + delta.append_text(xml1.tail, xml2.tail) + xml1.tail = f"{xml1.tail}XXX{xml2.tail}" + + # Get children and pad with nulls + children_a = list(xml1) + children_b = list(xml2) + children_a += [None] * (len(children_b) - len(children_a)) + children_b += [None] * (len(children_a) - len(children_b)) + + for child_a, child_b in zip(children_a, children_b): + if child_a is None: # child_b exists + delta.append_tag(child_b.tag, None) + elif child_b is None: # child_a exists + delta.append_tag(None, child_a.tag) + else: + _xmldiff(child_a, child_b, delta) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/__init__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/__init__.py new file mode 100644 index 0000000..3520752 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/__init__.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python +# coding=utf-8 +# +# Copyright (c) 2023 David Burghoff +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +""" +This submodule gives all TextElements and FlowRoots the parsed_text property, +which is a cached instance of ParsedText. To use, simply run + + import text + +Following this, text properties will be available at el.parsed_text. For more +details, see parser.py. To check if it is working properly, run the +following on some text: + + el.parsed_text.Make_Highlights('char') + +Rectangles should appear surrounding the logical extents of each character. + +Before parsing is done, a character table must be generated to determine the properties +of all the characters present. This is done automatically by the first invocation of +.parsed_text, which automatically analyzes the whole document and adds it to the SVG. +If you are only parsing a few text elements, this can be sped up by calling +svg.make_char_table(els). On the rare occasions this fails, a command call may +be performed as a fallback. +""" + +# Give inkex an inkex.text submodule that refers to this directory +import sys +import os +import inspect +import inkex + +if not hasattr(inkex, "text"): + import importlib + + mydir = os.path.dirname(os.path.abspath(__file__)) + myloc, myname = os.path.split(mydir) + oldpath = sys.path + sys.path.append(myloc) + inkex.text = importlib.import_module(myname) + sys.modules["inkex.text"] = inkex.text + sys.path = oldpath + +# Gives inkex elements some additional cached attributes, for further speedups +import inkex.text.cache # pylint: disable=wrong-import-position + + +def add_cache(base, derived): + """ + Adds the cache capabilities from a derived class to a base class by dynamically + attaching methods, properties, and data descriptors that are unique to the derived + class to the base class. + """ + predfn = ( + lambda x: isinstance(x, property) + or inspect.isfunction(x) + or inspect.isdatadescriptor(x) + ) + base_m = dict(inspect.getmembers(base, predicate=predfn)) + for name, memb in inspect.getmembers(derived, predicate=predfn): + if memb not in base_m.values(): + setattr(base, name, memb) + + +add_cache(inkex.BaseElement, inkex.text.cache.BaseElementCache) +add_cache(inkex.SvgDocumentElement, inkex.text.cache.SvgDocumentElementCache) +add_cache(inkex.Style, inkex.text.cache.StyleCache) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/cache.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/cache.py new file mode 100644 index 0000000..48f0fce --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/cache.py @@ -0,0 +1,1302 @@ +# coding=utf-8 + +# Copyright (c) 2023 David Burghoff +# Martin Owens +# Sergei Izmailov +# Thomas Holder +# Jonathan Neuhauser + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +A collection of functions that provide caching of certain Inkex properties. +Most provide the same functionality as the regular properties, +but with a 'c' in front of the name. For example, + Style: cstyle, cspecified_style, ccascaded_style + Transform: ctransform, ccomposed_transform + Miscellaneous: croot, cdefs, ctag +Most are invalidated by setting to None (except ctransform, which is set to identity). +xpath calls are avoided at all costs. + +Also gives SvgDocumentElements some dictionaries that are used to speed up +various lookups: + svg.iddict: elements by their ID + svg.cssdict: CSS styles by ID + +Lastly, several core Inkex functions are overwritten with versions that +use the cache. For example, getElementById uses svg.iddict to avoid xpath +calls. +""" + +import re +from typing import Optional, List +import inkex +from inkex import Style +from inkex import BaseElement, SvgDocumentElement +from inkex.text.parser import ParsedText, CharacterTable +from text.utils import shapetags, tags, ipx, list2 # pylint: disable=import-error +import lxml + +EBget = lxml.etree.ElementBase.get +EBset = lxml.etree.ElementBase.set + + +def get_link_fcn(elem, typestr, svg=None, llget=False): + """ + Function that references URLs, returning the referenced element + Returns None if it does not exist or is invalid + Accepts both elements and styles as inputs + """ + if llget: + urlv = EBget(elem, typestr) + # fine for 'clip-path' & 'mask' + else: + urlv = elem.get(typestr) + if urlv is not None: + if svg is None: + svg = elem.croot # need to specify svg for Styles but not BaseElements + if svg is None: + return None + if typestr == "xlink:href": + urlel = svg.getElementById(urlv[1:]) + elif urlv.startswith("url"): + urlel = svg.getElementById(urlv[5:-1]) + else: + urlel = None + return urlel + return None + + +BE_set_id = BaseElement.set_id + +# Fast empty Style initialization +if len(Style().__dict__) == 0: + + def empty_style(): + """Instantiates an empty Style object.""" + return Style.__new__(Style) +else: + bstyle_dict = Style().__dict__ + + def empty_style(): + """Instantiates an empty Style object.""" + ret = Style.__new__(Style) + ret.__dict__ = bstyle_dict + return ret + + +# pylint:disable=attribute-defined-outside-init +class BaseElementCache(BaseElement): + """Adds caching of style and transformation properties of base elements.""" + + get_link = get_link_fcn + + class CStyle(Style): + """ + Cached style attribute that invalidates the cached cascaded / specified + style whenever the style is changed. Always use this when setting styles. + """ + + # Delete key when value set to None + def __init__(self, val, elem): + self.elem = elem + self.init = True + super().__init__(val) + self.init = False + + def __setitem__(self, *args): + # Allows for multiple inputs using + # __setitem__(key1, value1, key2, value2, ...) + if self.init: + # OrderedDict sets items during initialization, use super() + super().__setitem__(args[0], args[1]) + else: + changedvalue = False + for i in range(0, len(args), 2): + key = args[i] + value = args[i + 1] + if value is None: + if key in self: + del self[key] + changedvalue = True + else: + if key not in self or self[key] != value: + super().__setitem__(key, value) + changedvalue = True + if changedvalue: + self.elem.cstyle = self + + + class CStyleDescriptor: + """Descriptor for caching and managing style changes.""" + + def __get__(self, elem, owner): + if not hasattr(elem, "_cstyle") and elem is not None: + elem._cstyle = BaseElementCache.CStyle(EBget(elem, "style"), elem) + return elem._cstyle + + def __set__(self, elem, value): + if value: + vstr = str(value) + EBset(elem, "style", vstr) + else: + if "style" in elem.attrib: + del elem.attrib["style"] + + if not isinstance(value, BaseElementCache.CStyle): + if isinstance(value, Style): + # Cast to CStyle without reinitializing + value.__class__ = BaseElementCache.CStyle + value.elem = elem + value.init = False + else: + value = BaseElementCache.CStyle(value, elem) + elem._cstyle = value + elem.ccascaded_style = None + elem.cspecified_style = None + + cstyle = CStyleDescriptor() + + # Cached specified style property + cstytags = shapetags | {SvgDocumentElement.ctag} + + def get_cspecified_style(self): + """Returns the cached specified style, calculating it if not cached.""" + if not (hasattr(self, "_cspecified_style")): + parent = self.getparent() + if parent is not None and parent.tag in BaseElementCache.cstytags: + ret = parent.cspecified_style + self.ccascaded_style + else: + ret = self.ccascaded_style + if "font" in ret: + ret = ret + BaseElementCache.font_shorthand(ret["font"]) + self._cspecified_style = ret + return self._cspecified_style + + def set_cspecified_style(self, svi): + """Invalidates the cached specified style.""" + if svi is None: + try: + delattr(self, "_cspecified_style") + for k in list(self): + k.cspecified_style = None # invalidate children + except AttributeError: + pass + + cspecified_style = property(get_cspecified_style, set_cspecified_style) + + shorthand_font_pattern = re.compile( + r'^(?:(italic|oblique|normal)\s+)?' # font-style + r'(?:(small-caps)\s+)?' # font-variant + r'(?:(bold|bolder|lighter|\d{3})\s+)?' # font-weight + r'(?:(ultra-condensed|extra-condensed|condensed|semi-condensed|normal|semi-expanded|expanded|extra-expanded|ultra-expanded)\s+)?' # font-stretch + r'([0-9]+(?:\.[0-9]+)?(?:px|pt|em|rem|%)?)' # font-size (with optional decimal) + r'(?:/([0-9]+(?:\.[0-9]+)?(?:px|pt|em|rem|%)?))?' # optional line-height + r'\s+' # one or more spaces + r'(.+)$' # the rest is font-family + ) + + @staticmethod + def font_shorthand(fontstr): + """ Parses a font shorthand into relevant properties """ + match = BaseElementCache.shorthand_font_pattern.match(fontstr) + if match: + font_style, font_variant, font_weight, font_stretch, font_size, line_height, font_family = match.groups() + font_data = { + "font-style": font_style, + "font-variant": font_variant, + "font-weight": font_weight, + "font-stretch": font_stretch, + "font-size": font_size, + "line-height": line_height, + "font-family": font_family.strip() if font_family else None, + } + ret = {k: v for k, v in font_data.items() if v is not None} + else: + ret = dict() # Invalid or unsupported font string + return ret + + # Cached cascaded style property + svgpres = { + "alignment-baseline", + "baseline-shift", + "clip", + "clip-path", + "clip-rule", + "color", + "color-interpolation", + "color-interpolation-filters", + "color-profile", + "color-rendering", + "cursor", + "direction", + "display", + "dominant-baseline", + "enable-background", + "fill", + "fill-opacity", + "fill-rule", + "filter", + "flood-color", + "flood-opacity", + "font-family", + "font-size", + "font-size-adjust", + "font-stretch", + "font-style", + "font-variant", + "font-weight", + "glyph-orientation-horizontal", + "glyph-orientation-vertical", + "image-rendering", + "kerning", + "letter-spacing", + "lighting-color", + "marker-end", + "marker-mid", + "marker-start", + "mask", + "opacity", + "overflow", + "pointer-events", + "shape-rendering", + "stop-color", + "stop-opacity", + "stroke", + "stroke-dasharray", + "stroke-dashoffset", + "stroke-linecap", + "stroke-linejoin", + "stroke-miterlimit", + "stroke-opacity", + "stroke-width", + "text-anchor", + "text-decoration", + "text-rendering", + "transform", + "transform-origin", + "unicode-bidi", + "vector-effect", + "visibility", + "word-spacing", + "writing-mode", + } + excludes = {"clip", "clip-path", "mask", "transform", "transform-origin"} + style_atts = svgpres - excludes + + # raw dict update + dict_update = Style.__bases__[0].update # type: ignore + + def get_cascaded_style(self): + """Returns the cached cascaded (CSS) style, calculating it if not cached.""" + if not (hasattr(self, "_ccascaded_style")): + # Local style (in "style" attribute) + locsty = self.cstyle + # CSS style (from stylesheet) + csssty = getattr(self.croot, "cssdict", dict()).get(self.get_id()) + # Attribute style (from attributes other than "style") + attsty = empty_style() + BaseElementCache.dict_update( + attsty, + ( + { + a: EBget(self, a) + for a in self.attrib + if a in BaseElementCache.style_atts + } + ), + ) + + if csssty is None: + ret = attsty + locsty + else: + # Any style specified locally takes priority, followed by CSS, + # followed by any attributes that the element has + ret = attsty.add3(csssty, locsty) + self._ccascaded_style = ret + return self._ccascaded_style + + def set_ccascaded_style(self, svi): + """Invalidates the cached cascaded style.""" + if svi is None: + try: + delattr(self, "_ccascaded_style") + except AttributeError: + pass + + ccascaded_style = property(get_cascaded_style, set_ccascaded_style) + + def get_ccomposed_transform(self): + """ + Cached composed_transform, which can be invalidated by changes to + transform of any ancestor. + """ + if not (hasattr(self, "_ccomposed_transform")): + myp = self.getparent() + if myp is None: + self._ccomposed_transform = self.ctransform + else: + self._ccomposed_transform = myp.ccomposed_transform @ self.ctransform + return self._ccomposed_transform + + def set_ccomposed_transform(self, svi): + """Invalidates the cached composed transform.""" + if svi is None and hasattr(self, "_ccomposed_transform"): + delattr(self, "_ccomposed_transform") # invalidate + for k in list2(self): + k.ccomposed_transform = None # invalidate descendants + + ccomposed_transform = property(get_ccomposed_transform, set_ccomposed_transform) + + def get_ctransform(self): + """ + Cached transform property + Note: Can be None + """ + if not (hasattr(self, "_ctransform")): + self._ctransform = self.transform + return self._ctransform + + def set_ctransform(self, newt): + """Sets and caches a new transform, invalidating composed transforms.""" + self.transform = newt + self._ctransform = newt + self.ccomposed_transform = None + + ctransform = property(get_ctransform, set_ctransform) + + rect_tag = inkex.Rectangle.ctag + round_tags = tags((inkex.Circle, inkex.Ellipse)) + line_tag = inkex.Line.ctag + path_tag = inkex.PathElement.ctag + + def get_path2(self): + """ + Cached get_path, modified to correctly calculate path for rectangles + and ellipses. Caches Path of an object (set elem.cpath to None to reset) + """ + if not hasattr(self, "_cpath"): + # mostly from inkex.elements._polygons + if self.tag == BaseElementCache.path_tag: + ret = inkex.Path(self.get("d")) + elif self.tag == BaseElementCache.rect_tag: + left = ipx(self.get("x", "0")) + top = ipx(self.get("y", "0")) + width = ipx(self.get("width", "0")) + height = ipx(self.get("height", "0")) + rx = ipx(self.get("rx", self.get("ry", "0"))) + ry = ipx(self.get("ry", self.get("rx", "0"))) + right = left + width + bottom = top + height + + # Calculate the path as the box around the rect + if rx or ry: + rx = min(rx if rx > 0 else ry, width / 2) + ry = min(ry if ry > 0 else rx, height / 2) + cpts = [left + rx, right - rx, top + ry, bottom - ry] + return inkex.Path( + f"M {cpts[0]},{top}" + f"L {cpts[1]},{top} " + f"A {rx},{ry} 0 0 1 {right},{cpts[2]}" + f"L {right},{cpts[3]} " + f"A {rx},{ry} 0 0 1 {cpts[1]},{bottom}" + f"L {cpts[0]},{bottom} " + f"A {rx},{ry} 0 0 1 {left},{cpts[3]}" + f"L {left},{cpts[2]} " + f"A {rx},{ry} 0 0 1 {cpts[0]},{top} z" + ) + + return inkex.Path(f"M {left},{top} h{width}v{height}h{-width} z") + + elif self.tag in BaseElementCache.round_tags: + cx = ipx(self.get("cx", "0")) + cy = ipx(self.get("cy", "0")) + if isinstance(self, (inkex.Ellipse)): + rx = ipx(self.get("rx", "0")) + ry = ipx(self.get("ry", "0")) + else: # circle + rx = ipx(self.get("r", "0")) + ry = ipx(self.get("r", "0")) + ret = inkex.Path( + ( + "M {cx},{y} " + "a {rx},{ry} 0 1 0 {rx}, {ry} " + "a {rx},{ry} 0 0 0 -{rx}, -{ry} z" + ).format(cx=cx, y=cy - ry, rx=rx, ry=ry) + ) + + elif self.tag == BaseElementCache.line_tag: # updated in v1.2 + x1 = ipx(self.get("x1", "0")) + y1 = ipx(self.get("y1", "0")) + x2 = ipx(self.get("x2", "0")) + y2 = ipx(self.get("y2", "0")) + ret = inkex.Path(f"M{x1},{y1} L{x2},{y2}") + else: + ret = self.get_path() + if isinstance(ret, str): + ret = inkex.Path(ret) + self._cpath = ret + + return self._cpath + + def set_cpath_fcn(self, svi): + """Invalidates the cached path.""" + if svi is None and hasattr(self, "_cpath"): + delattr(self, "_cpath") # invalidate + + cpath = property(get_path2, set_cpath_fcn) + cpath_support = ( + inkex.Rectangle, + inkex.Ellipse, + inkex.Circle, + inkex.Polygon, + inkex.Polyline, + inkex.Line, + inkex.PathElement, + ) + + otp_support = cpath_support + otp_support_tags = tags(cpath_support) + otp_support_prop = property(lambda x: BaseElementCache.otp_support_tags) + ptag = inkex.PathElement.ctag + + def object_to_path(self): + """ + Converts specified elements to paths if supported. Adjusts the 'd' + attribute and changes the element tag to a path. + Only operates on elements within the `otp_support_tags` list. + """ + if ( + self.tag in BaseElementCache.otp_support_tags + and not self.tag == BaseElementCache.ptag + ): + self.set("d", str(self.cpath)) # do this first so cpath is correct + self.tag = BaseElementCache.ptag + + # Cached root property + svgtag = SvgDocumentElement.ctag + + def get_croot(self): + """Returns the cached root of the SVG document.""" + try: + return self._croot + except AttributeError: + if self.getparent() is not None: + self._croot = self.getparent().croot + elif self.tag == BaseElementCache.svgtag: + self._croot = self + else: + self._croot = None + return self._croot + + def set_croot(self, svi): + """Sets the cached root of the SVG document.""" + self._croot = svi + + croot = property(get_croot, set_croot) + + # Version of set_random_id that uses cached root + def set_random_id( + self, + prefix: Optional[str] = None, + size: Optional[int] = None, + backlinks: bool = False, + blacklist: Optional[List[str]] = None, + ): + """Assigns a unique ID to the element, using the cached root.""" + prefix = str(self) if prefix is None else prefix + self.set_id( + self.croot.get_unique_id(prefix, size=size, blacklist=blacklist), + backlinks=backlinks, + ) + + def get_id(self, as_url=0): + """ + Version of get_id that uses the low-level get + """ + if "id" not in self.attrib: + self.set_random_id(self.TAG) + eid = EBget(self, "id") + if as_url > 0: + eid = "#" + eid + if as_url > 1: + eid = f"url({eid})" + return eid + + def set_id(self, new_id, backlinks=False): + """Set the id and update backlinks to xlink and style urls if needed""" + if self.croot is not None: + self.croot.iddict[new_id] = self + BE_set_id(self, new_id, backlinks=backlinks) + + comment_tag = lxml.etree.Comment("").tag + + def descendants2(self, return_tails=False): + """ + A version of descendants that also returns a list of elements whose tails + precede each element. (This is helpful for parsing text.) + """ + if not return_tails: + return [self] + [ + d + for d in self.iterdescendants() + if d.tag != BaseElementCache.comment_tag + ] + descendants = [self] + precedingtails = [[]] + endsat = [(self, None)] + for ddv in self.iterdescendants(): + if not (ddv.tag == BaseElementCache.comment_tag): + precedingtails.append([]) + while endsat[-1][1] == ddv: + precedingtails[-1].append(endsat.pop()[0]) + nsib = ddv.getnext() + if nsib is None: + endsat.append((ddv, endsat[-1][1])) + else: + endsat.append((ddv, nsib)) + descendants.append(ddv) + + precedingtails.append([]) + while len(endsat) > 0: + precedingtails[-1].append(endsat.pop()[0]) + return descendants, precedingtails + + def ancestors2(self, includeme=False, stopbefore=None, stopafter=None): + """Version of ancestors that can stop before/after encountering an element""" + anc = [] + cel = self if includeme else self.getparent() + while cel is not None and cel != stopbefore: + anc.append(cel) + if cel == stopafter: + break + cel = cel.getparent() + return anc + + ## Bookkeeping functions + # When BaseElements are deleted, created, or moved, the caches need to be + # updated or invalidated. These functions do that while preserving the original + # base functionality + + # Deletion + BE_delete = inkex.BaseElement.delete + + def delete(self, deleteup=False): + """Deletes the element and optionally cleans up empty parent groups.""" + svg = self.croot + for ddv in reversed(self.descendants2()): + did = ddv.get_id() + if svg is not None: + try: + svg.ids.remove(did) + except (KeyError, AttributeError): + pass + svg.iddict.remove(ddv) + ddv.croot = None + if hasattr(svg, "_cd2"): + svg.cdescendants2.delel(self) + + if deleteup: + # If set, remove empty ancestor groups + myp = self.getparent() + BaseElementCache.BE_delete(self) + if myp is not None and len(myp) == 0: + BaseElementCache.delete(myp, True) + else: + BaseElementCache.BE_delete(self) + + # Insertion + # BE_insert = inkex.BaseElement.insert + BE_insert = lxml.etree.ElementBase.insert + + def insert(self, index, elem): + """Inserts an element at a specified index, managing caching.""" + oldroot = elem.croot + newroot = self.croot + + BaseElementCache.BE_insert(self, index, elem) + elem.ccascaded_style = None + elem.cspecified_style = None + elem.ccomposed_transform = None + + if EBget(elem, "id") is None: + # Make sure all elements have an ID (most assigned here) + elem.croot = newroot + if newroot is not None: + newroot.iddict.add(elem) # generates an ID if needed + for k in list2(elem): + elem.append(k) # update children + elif oldroot != newroot: + # When the root is changing, remove from old dicts and add to new + css = None + if oldroot is not None: + oldroot.iddict.remove(elem) + css = oldroot.cssdict.pop(elem.get_id(), None) + elem.croot = newroot + if newroot is not None: + newroot.iddict.add(elem) # generates an ID if needed + if css is not None: + newroot.cssdict[elem.get_id()] = css + for k in list2(elem): + elem.append(k) # update children + + # Appending + # BE_append = inkex.BaseElement.append + BE_append = lxml.etree.ElementBase.append + + def append(self, elem): + """Appends an element, managing caching and ID conflicts.""" + oldroot = elem.croot + newroot = self.croot + + BaseElementCache.BE_append(self, elem) + elem.ccascaded_style = None + elem.cspecified_style = None + elem.ccomposed_transform = None + + if EBget(elem, "id") is None: + # Make sure all elements have an ID (most assigned here) + elem.croot = newroot + if newroot is not None: + newroot.iddict.add(elem) # generates an ID if needed + for k in list2(elem): + elem.append(k) # update children + elif oldroot != newroot: + # When the root is changing, remove from old dicts and add to new + css = None + if oldroot is not None: + oldroot.iddict.remove(elem) + css = oldroot.cssdict.pop(elem.get_id(), None) + elem.croot = newroot + if newroot is not None: + newroot.iddict.add(elem) # generates an ID if needed + if css is not None: + newroot.cssdict[elem.get_id()] = css + for k in list2(elem): + elem.append(k) # update children + + # addnext + # BE_addnext = inkex.BaseElement.addnext + BE_addnext = lxml.etree.ElementBase.addnext + + def addnext(self, elem): + """Adds an element next to the specified element, managing caching.""" + oldroot = elem.croot + newroot = self.croot + + BaseElementCache.BE_addnext(self, elem) + elem.ccascaded_style = None + elem.cspecified_style = None + elem.ccomposed_transform = None + + if EBget(elem, "id") is None: + # Make sure all elements have an ID (most assigned here) + elem.croot = newroot + if newroot is not None: + newroot.iddict.add(elem) # generates an ID if needed + for k in list2(elem): + elem.append(k) # update children + elif oldroot != newroot: + # When the root is changing, remove from old dicts and add to new + css = None + if oldroot is not None: + oldroot.iddict.remove(elem) + css = oldroot.cssdict.pop(elem.get_id(), None) + elem.croot = newroot + if newroot is not None: + newroot.iddict.add(elem) # generates an ID if needed + if css is not None: + newroot.cssdict[elem.get_id()] = css + for k in list2(elem): + elem.append(k) # update children + + # Duplication + clipmasktags = {inkex.addNS("mask", "svg"), inkex.ClipPath.ctag} + + def duplicate(self): + """Creates a duplicate of the element, managing ID and caching.""" + eltail = self.tail + if eltail is not None: + self.tail = None + dup = self.copy() + + # After copying, duplicates have the original ID. Remove prior to insertion + origids = dict() + for dupd in dup.descendants2(): + origids[dupd] = dupd.pop("id", None) + dupd.croot = self.croot # set now for speed + + self.addnext(dup) + if eltail is not None: + self.tail = eltail + # Fix tail bug: https://gitlab.com/inkscape/extensions/-/issues/480 + + css = self.croot.cssdict + newids = { + EBget(k, "id"): css.get(origids[k]) + for k in dup.descendants2() + if origids[k] in css + } + dup.croot.cssdict.update(newids) + + if dup.tag in BaseElementCache.clipmasktags: + # Clip duplications can cause weird issues if they are not appended + # to the end of Defs + dup.croot.cdefs.append(dup) + return dup + + def get_parsed_text(self): + """Add parsed_text property to text, which is used to get the + properties of text""" + if not (hasattr(self, "_parsed_text")): + self._parsed_text = ParsedText(self, self.croot.char_table) + return self._parsed_text + + def set_parsed_text(self, svi): + """Invalidates the cached parsed text.""" + if hasattr(self, "_parsed_text") and svi is None: + delattr(self, "_parsed_text") + + parsed_text = property(get_parsed_text, set_parsed_text) + + +class SvgDocumentElementCache(SvgDocumentElement): + """Adds caching for SVG document elements.""" + + def cdefs_func(self): + """Cached def directly under root""" + if not (hasattr(self, "_cdefs")): + for k in list(self): + if isinstance(k, (inkex.Defs)): + self._cdefs = k + return self._cdefs + defel = inkex.Defs() + self.insert(0, defel) + self._cdefs = defel + return self._cdefs + + cdefs = property(cdefs_func) + + styletag = inkex.addNS("style", "svg") + + def crootsty_func(self): + """Cached style element directly under root""" + if not hasattr(self, "_crootsty"): + rootstys = [ + sty for sty in list(self) if sty.tag == SvgDocumentElementCache.styletag + ] + if len(rootstys) == 0: + self._crootsty = inkex.StyleElement() + self.insert(0, self._crootsty) + else: + self._crootsty = rootstys[0] + return self._crootsty + + crootsty = property(crootsty_func) + + def get_ids(self): + """Version of get_ids that uses iddict""" + return set(self.iddict.keys()) + + def get_unique_id( + self, + prefix: str, + size: Optional[int] = None, + blacklist: Optional[List[str]] = None, + ): + """Version of get_unique_id that removes randomness by keeping a + running count""" + new_id = None + cnt = self.iddict.prefixcounter.get(prefix, 0) + if blacklist is None: + while new_id is None or new_id in self.iddict: + new_id = prefix + str(cnt) + cnt += 1 + else: + while new_id is None or new_id in self.iddict or new_id in blacklist: + new_id = prefix + str(cnt) + cnt += 1 + self.iddict.prefixcounter[prefix] = cnt + return new_id + + # Repeated getElementById lookups can be slow, so instead create a cached + # iddict property. When an element is created that may be needed later, + # it should be added using self.iddict.add. + urlpat = re.compile(r"^url\(#(.*)\)$|^#") + + def getElementById(self, eid: str, elm="*", literal=False): + """Returns an element by ID using cached data for efficiency.""" + if eid is not None and not literal: + eid = SvgDocumentElementCache.urlpat.sub(r"\1", eid.strip()) + return self.iddict.get(eid) + + class IDDict(dict): + """Keeps track of the IDs in a document""" + + def __init__(self, svg): + super().__init__() + self.svg = svg + self.prefixcounter = dict() + toassign = [] + for elem in svg.descendants2(): + if "id" in elem.attrib: + self[EBget(elem, "id")] = elem + else: + toassign.append(elem) + elem.croot = svg # do now to speed up later + for elem in toassign: + # Reduced version of get_unique_id_fcn + # Cannot call it since it relies on iddict + prefix = elem.TAG + new_id = None + cnt = self.prefixcounter.get(prefix, 0) + while new_id is None or new_id in self: + new_id = prefix + str(cnt) + cnt += 1 + self.prefixcounter[prefix] = cnt + # Reduced version of set_id + self[new_id] = elem + BE_set_id(elem, new_id) + + def add(self, elem): + """Add an element to the ID dict""" + elid = ( + elem.get_id() + ) # fine since elem should have a croot to get called here + if elid in self and not self[elid] == elem: + # Make a new id when there's a conflict + elem.set_random_id(elem.TAG) + elid = elem.get_id() + self[elid] = elem + + @property + def descendants(self): + """all svg descendants, not necessarily in order""" + return list(self.values()) + + def remove(self, elem): + """Remove from ID dict""" + elid = elem.get_id() + if elid in self: + del self[elid] + + @property + def iddict(self): + """Returns the ID dictionary that caches all elements by ID.""" + if not (hasattr(self, "_iddict")): + self._iddict = SvgDocumentElementCache.IDDict(self) + return self._iddict + + estyle = Style() # keep separate in case Style was overridden + + # Check if v1.4 or later + hasmatches = hasattr(inkex.styles.ConditionalStyle, "matches") + + class CSSDict(dict): + """A dict that keeps track of the CSS style for each element""" + + def __init__(self, svg): + self.svg = svg + + # For certain xpaths such as classes, we can avoid xpath calls + # by checking the class attributes on a document's descendants directly. + # This is much faster for large documents. + hasall = False + simpleclasses = dict() + simpleids = dict() + patcls = re.compile(r"\.([-\w]+)") + patid = re.compile(r"#(\w+)") + + for sheet in svg.stylesheets: + for style in sheet: + rules = tuple(str(r) for r in style.rules) + # inkex.utils.debug(rules) + if rules == ("*",): + hasall = True + elif all(patcls.match(r) for r in rules): + # all rules are classes + simpleclasses[rules] = [patcls.sub(r"\1", r) for r in rules] + elif all(patid.match(r) for r in rules): + # all rules are ids + simpleids[rules] = [patid.sub(r"\1", r) for r in rules] + + # Now, we make a dictionary of rules / xpaths we can do easily + knownrules = dict() + if hasall or len(simpleclasses) > 0: + dds = svg.iddict.descendants + if hasall: + knownrules[("*",)] = dds + cvs = [EBget(d, "class") for d in dds] + c2s = [(i, c) for (i, c) in enumerate(cvs) if c is not None] + cmatches = dict() + for i, clsval in c2s: + for c in clsval.split(" "): + cmatches[c] = cmatches.get(c, []) + [dds[i]] + kxp2 = { + rules: list( + dict.fromkeys( + [d for c in clslist if c in cmatches for d in cmatches[c]] + ) + ) + for rules, clslist in simpleclasses.items() + } + knownrules.update(kxp2) + + for rules, ids in simpleids.items(): + knownrules[rules] = [] + for idv in ids: + idel = svg.getElementById(idv) + if idel is not None: + knownrules[rules].append(idel) + + # Now run any necessary xpaths and get the element styles + super().__init__() + for sheet in svg.croot.stylesheets: + for style in sheet: + try: + # els = svg.xpath(style.to_xpath()) # original code + rules = tuple(str(r) for r in style.rules) + stylev = Style(style) + if rules in knownrules: + els = knownrules[rules] + else: + if SvgDocumentElementCache.hasmatches: + els = style.all_matches(svg) + else: + els = svg.xpath(style.to_xpath()) + + if len(stylev) > 0: + idvs = [ + EBget(elem, "id", None) + for elem in els + if "id" in elem.attrib + ] + newstys = { + elid: stylev + if elid not in self + else self[elid] + stylev + for elid in idvs + } + # Technically we should copy stylev, but as long as + # styles in cssdict are only used in + # get_cascaded_style, this is fine since that + # function adds (creating copies) + self.update(newstys) + except (lxml.etree.XPathEvalError,): + pass + + def dupe_entry(self, oldid, newid): + """Duplicate entry in cssdict""" + csssty = self.get(oldid) + if csssty is not None: + self[newid] = csssty + + def get_cssdict(self): + """Returns the CSS dictionary that caches styles by element ID.""" + try: + return self._cssdict + except AttributeError: + self._cssdict = SvgDocumentElementCache.CSSDict(self) + return self._cssdict + + cssdict = property(get_cssdict) + + def document_size(self): + """Calculates and caches the size of the SVG document in various units.""" + if not (hasattr(self, "_cdocsize")): + rvb = self.get_viewbox() + wstr = self.get("width") + hstr = self.get("height") + + if rvb == [0, 0, 0, 0]: + wval = ipx(wstr) if '%' not in wstr else 300 + hval = ipx(hstr) if '%' not in hstr else 150 + vbx = [0, 0, wval, hval] + else: + vbx = [float(v) for v in rvb] # just in case + + # Get document width and height in pixels + wvl, wun = ( + inkex.units.parse_unit(wstr) if wstr is not None else (vbx[2], "px") + ) + hvl, hun = ( + inkex.units.parse_unit(hstr) if hstr is not None else (vbx[3], "px") + ) + + def parse_preserve_aspect_ratio(par_str): + align, meet_or_slice = "xMidYMid", "meet" # defaults + valigns = [ + "xMinYMin", + "xMidYMin", + "xMaxYMin", + "xMinYMid", + "xMidYMid", + "xMaxYMid", + "xMinYMax", + "xMidYMax", + "xMaxYMax", + "none", + ] + vmoss = ["meet", "slice"] + if par_str: + values = par_str.split(" ") + if len(values) == 1: + if values[0] in valigns: + align = values[0] + elif values[0] in vmoss: + meet_or_slice = values[0] + elif len(values) == 2: + if values[0] in valigns and values[1] in vmoss: + align = values[0] + meet_or_slice = values[1] + return align, meet_or_slice + + align, meet_or_slice = parse_preserve_aspect_ratio( + self.get("preserveAspectRatio") + ) + + xfr = ( + inkex.units.convert_unit(str(wvl) + " " + wun, "px") / vbx[2] + if wun != "%" + else wvl / 100 + ) # width of uu in px pre-stretch + yfr = ( + inkex.units.convert_unit(str(hvl) + " " + hun, "px") / vbx[3] + if hun != "%" + else hvl / 100 + ) # height of uu in px pre-stretch + if align != "none": + mfr = min(xfr, yfr) if meet_or_slice == "meet" else max(xfr, yfr) + xmf = {"xMin": 0, "xMid": 0.5, "xMax": 1}[align[0:4]] + ymf = {"YMin": 0, "YMid": 0.5, "YMax": 1}[align[4:]] + vbx[0], vbx[2] = ( + vbx[0] + vbx[2] * (1 - xfr / mfr) * xmf, + vbx[2] / mfr * (xfr if wun != "%" else 1), + ) + vbx[1], vbx[3] = ( + vbx[1] + vbx[3] * (1 - yfr / mfr) * ymf, + vbx[3] / mfr * (yfr if hun != "%" else 1), + ) + if wun == "%": + wvl, wun = vbx[2] * mfr, "px" + if hun == "%": + hvl, hun = vbx[3] * mfr, "px" + else: + if wun == "%": + wvl, wun, vbx[2] = vbx[2], "px", vbx[2] / xfr + if hun == "%": + hvl, hun, vbx[3] = vbx[3], "px", vbx[3] / yfr + + wpx = inkex.units.convert_unit( + str(wvl) + " " + wun, "px" + ) # document width in px + hpx = inkex.units.convert_unit( + str(hvl) + " " + hun, "px" + ) # document height in px + uuw = wpx / vbx[2] # uu width in px (px/uu) + uuh = hpx / vbx[3] # uu height in px (px/uu) + uupx = uuw if abs(uuw - uuh) < 0.001 else None # uu size in px (px/uu) + # should match Scale in Document Properties + + # Get Pages + nvs = [elem for elem in list(self) if isinstance(elem, inkex.NamedView)] + pgs = [ + elem + for nv in nvs + for elem in list(nv) + if elem.tag == inkex.addNS("page", "inkscape") + ] + for pgv in pgs: + pgv.bbuu = [ + ipx(pgv.get("x")), + ipx(pgv.get("y")), + ipx(pgv.get("width")), + ipx(pgv.get("height")), + ] + pgv.bbpx = [ + pgv.bbuu[0] * xfr, + pgv.bbuu[1] * yfr, + pgv.bbuu[2] * xfr, + pgv.bbuu[3] * yfr, + ] + + class DocSize: + """Contains the properties relating to document size""" + + def __init__( + self, + effvb, + uuw, + uuh, + uupx, + wunit, + hunit, + wpx, + hpx, + xfr, + yfr, + pgs, + ): + self.effvb = effvb + self.uuw = uuw + self.uuh = uuh + self.uupx = uupx + self.wunit = wunit + self.hunit = hunit + self.wpx = wpx + self.hpx = hpx + self.rawxf = xfr + self.rawyf = yfr + self.pgs = pgs + + def uutopx(self, x): + """Converts a bounding box specified in uu to pixels""" + ret = [ + (x[0] - self.effvb[0]) * self.uuw, + (x[1] - self.effvb[1]) * self.uuh, + x[2] * self.uuw, + x[3] * self.uuh, + ] + return ret + + def pxtouu(self, x): + """Converts a bounding box specified in pixels to uu""" + ret = [ + x[0] / self.uuw + self.effvb[0], + x[1] / self.uuh + self.effvb[1], + x[2] / self.uuw, + x[3] / self.uuh, + ] + return ret + + def unittouu(self, x): + """Converts any unit into uu""" + return ( + inkex.units.convert_unit(x, "px") / self.uupx + if self.uupx is not None + else None + ) + + def uutopxpgs(self, x): + """Version that applies to Pages""" + return [ + x[0] * self.rawxf, + x[1] * self.rawyf, + x[2] * self.rawxf, + x[3] * self.rawyf, + ] + + def pxtouupgs(self, x): + """Version that applies to Pages""" + return [ + x[0] / self.rawxf, + x[1] / self.rawyf, + x[2] / self.rawxf, + x[3] / self.rawyf, + ] + + self._cdocsize = DocSize( + vbx, uuw, uuh, uupx, wun, hun, wpx, hpx, xfr, yfr, pgs + ) + return self._cdocsize + + def set_cdocsize(self, svi): + """Invalidates the cached document size.""" + if svi is None and hasattr(self, "_cdocsize"): # invalidate + delattr(self, "_cdocsize") + + cdocsize = property(document_size, set_cdocsize) + + def set_viewbox(self, newvb): + """Sets a new viewbox for the SVG, updating dimensions appropriately.""" + uuw, uuh, wunit, hunit = ( + self.cdocsize.uuw, + self.cdocsize.uuh, + self.cdocsize.wunit, + self.cdocsize.hunit, + ) + self.set( + "width", + str(inkex.units.convert_unit(str(newvb[2] * uuw) + "px", wunit)) + wunit, + ) + self.set( + "height", + str(inkex.units.convert_unit(str(newvb[3] * uuh) + "px", hunit)) + hunit, + ) + self.set("viewBox", " ".join([str(v) for v in newvb])) + self.cdocsize = None + + def standardize_viewbox(self): + """Converts viewbox to pixels, removing any non-uniform scaling appropriately""" + pgbbs = [pgv.bbpx for pgv in self.cdocsize.pgs] + self.set("viewBox", " ".join([str(v) for v in self.cdocsize.effvb])) + self.set("width", str(self.cdocsize.wpx)) + self.set("height", str(self.cdocsize.hpx)) + + # Update Pages appropriately + self.cdocsize = None + for i, pgv in enumerate(self.cdocsize.pgs): + newbbuu = self.cdocsize.pxtouupgs(pgbbs[i]) + pgv.set("x", str(newbbuu[0])) + pgv.set("y", str(newbbuu[1])) + pgv.set("width", str(newbbuu[2])) + pgv.set("height", str(newbbuu[3])) + + # Add char_table property to SVGs, which are used to collect all of the + # properties of fonts in the document. Alternatively, calling make_char_table + # on a subset of elements will cause only those elements to be included. + + def make_char_table(self, els=None): + """ + Can be called with els argument to examine list of elements only + (otherwise use entire SVG) + """ + ttags = tags((inkex.TextElement, inkex.FlowRoot)) + if els is None: + tels = [d for d in self.iddict.descendants if d.tag in ttags] + else: + tels = [d for d in els if d.tag in ttags] + if not (hasattr(self, "_char_table")) or any( + t not in getattr(self, "_char_table").els for t in tels + ): + self._char_table = CharacterTable(tels) + + def get_char_table(self): + """Returns the cached character table, creating it if necessary.""" + if not (hasattr(self, "_char_table")): + self.make_char_table() + return self._char_table + + def set_char_table(self, svi): + """Invalidates the cached character table.""" + if svi is None and hasattr(self, "_char_table"): + delattr(self, "_char_table") + + char_table = property(get_char_table, set_char_table) + + +class StyleCache(Style): + """Caches and manages style data with enhanced functionality.""" + + get_link = get_link_fcn + + def __hash__(self): + """Generates a hash based on the style items.""" + return hash(tuple(self.items())) # type: ignore + + # Adds three styles + def add3_fcn(self, y, z): + """Adds three style objects together.""" + return self + y + z + + add3 = add3_fcn if not hasattr(Style, "add3") else getattr(Style, "add3") diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/font_properties.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/font_properties.py new file mode 100644 index 0000000..10f2a66 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/font_properties.py @@ -0,0 +1,1317 @@ +# coding=utf-8 +# +# Copyright (c) 2023 David Burghoff +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +""" +Some functions for getting the properties of fonts and characters. +Three libraries are used: + fontconfig: Used for discovering fonts based on the CSS (SVG) style. This + uses Inkscape's libfontconfig, so it always matches what Inkscape + does. + fonttools: Gets font properties once discovered (from font's filename) + Pango: Used to render test characters (included with GTK) + Sets up a blank GTK window and renders Pango text, reusing + the same layout for all rendering. +""" + +import os +import warnings +import sys +import re +import ctypes +from unittest.mock import patch +from functools import lru_cache +import inkex +from inkex.text.utils import default_style_atts +from inkex import Style + +# The fontconfig library is used to select a font given its CSS specs +# This library should work starting with v1.0 + +# Due to the way fontconfig is structured, we have to patch +# ctypes's LoadLibrary to help it find libfontconfig +original_load_library = ctypes.cdll.LoadLibrary + + +def custom_load_library(name): + """ + Custom function to load a library based on the platform. + """ + if name in ["libfontconfig.so.1", "libfreetype.so.6"]: + libname = { + "linux": { + "libfreetype.so.6": "libfreetype.so.6", + "libfontconfig.so.1": "libfontconfig.so.1", + }, + "openbsd6": { + "libfreetype.so.6": "libfreetype.so.28", + "libfontconfig.so.1": "libfontconfig.so.11", + }, + "darwin": { + "libfreetype.so.6": "libfreetype.6.dylib", + "libfontconfig.so.1": "libfontconfig.1.dylib", + }, + "win32": { + "libfreetype.so.6": "libfreetype-6.dll", + "libfontconfig.so.1": "libfontconfig-1.dll", + }, + }[sys.platform][name] + + if "SI_FC_DIR" in os.environ: + fpath = os.path.abspath(os.path.join(os.environ["SI_FC_DIR"], libname)) + ret = original_load_library(fpath) + else: + try: + ret = original_load_library(libname) + except FileNotFoundError: + biloc = inkex.inkscape_system_info.binary_location # type: ignore + blocdir = os.path.dirname(biloc) + fpath = os.path.abspath(os.path.join(blocdir, libname)) + ret = original_load_library(fpath) + return ret + if name == "libc.so.6": + # Do not need to load, return a blank class consistent with fontconfig + libc = type("libc", (object,), {"free": staticmethod(lambda ptr: None)})() + libc.free.argtypes = (ctypes.c_void_p,) + return libc + return original_load_library(name) + + +with patch("ctypes.cdll.LoadLibrary", side_effect=custom_load_library): + import fontconfig as fc # pylint: disable=import-error + + FC = fc.FC + + +def isnumeric(strv): + """ + Check if a string can be converted to a number + """ + try: + float(strv) + return True + except ValueError: + return False + + +def interpolate_dict(dictv, x, defaultval): + """ + Interpolate an input over the numerical values of a dict + Supports both string and int inputs and outputs + If the dict's values are enums, pick the nearest value + """ + # Check for exact match first + if x in dictv: + return dictv[x] + + # Interpolate numerical values + if isnumeric(x): + input_value = int(x) + numerical_keys = sorted([int(k) for k in dictv.keys() if isnumeric(k)]) + for k, val in dictv.items(): + if isnumeric(k): + ktype = type(k) # int or str + vtype = type(val) # int or str + + if vtype not in [int, float, str]: # enums + # Pick the nearest entry + intd = {int(k): v for k, v in dictv.items() if isnumeric(k)} + return intd[min(intd.keys(), key=lambda x: abs(x - int(x)))] + break + if input_value <= numerical_keys[0]: + return dictv[ktype(numerical_keys[0])] + if input_value >= numerical_keys[-1]: + return dictv[ktype(numerical_keys[-1])] + for i in range(len(numerical_keys) - 1): + if numerical_keys[i] <= input_value <= numerical_keys[i + 1]: + lower_key = numerical_keys[i] + upper_key = numerical_keys[i + 1] + lower_value = float(dictv[ktype(lower_key)]) + upper_value = float(dictv[ktype(upper_key)]) + ratio = (input_value - lower_key) / (upper_key - lower_key) + interpolated_value = lower_value + ratio * (upper_value - lower_value) + if vtype in [int, float]: + return interpolated_value + return f"{interpolated_value:g}" + return defaultval + + +# Windows doesn't have the XDG_DATA_HOME directory set, which is +# needed for /etc/fonts.conf to find the user fonts directory: +# fonts +# Needed for fontconfig +# Set it based on the location of preferences.xml +if sys.platform == "win32": + if os.environ.get("XDG_DATA_HOME") is None: + os.environ["XDG_DATA_HOME"] = os.path.dirname( + inkex.inkscape_system_info.preferences # type: ignore + ) + + +class FontConfig: + """ + Class to handle FontConfig functionalities. + """ + + def __init__(self): + self.truefonts = dict() # css + self.truefontsfc = dict() # fontconfig + self.truefontsfn = dict() # fullnames + self.truefontsft = dict() # fonttools + self.fontcharsets = dict() + self.disable_lcctype() + self.conf = fc.Config.get_current() + self._font_list = None + self._font_list_css = None + + def disable_lcctype(self): + """ + Disables LC_CTYPE to suppress Mac warnings. + """ + self.lcctype = os.environ.get("LC_CTYPE") + if self.lcctype is not None and sys.platform == "darwin": + del os.environ["LC_CTYPE"] # suppress Mac warning + + def enable_lcctype(self): + """ + Enables LC_CTYPE if it was previously disabled. + """ + if self.lcctype is not None and sys.platform == "darwin": + os.environ["LC_CTYPE"] = self.lcctype + + def get_true_font(self, fontsty): + """Use fontconfig to get the true font that most text will be rendered as""" + if fontsty not in self.truefonts: + found = self.font_match(fontsty) + truefont = FontConfig.fcfont_to_css(found) + self.truefonts[fontsty] = truefont + self.truefontsfc[fontsty] = found + self.fontcharsets[truefont] = found.get(fc.PROP.CHARSET, 0)[0] + return self.truefonts[fontsty] + + def get_true_font_fullname(self, fontsty): + """Use fontconfig to get the Face name for a font style""" + if fontsty not in self.truefontsfn: + if fontsty not in self.truefontsfc: + self.get_true_font(fontsty) + self.truefontsfn[fontsty] = self.truefontsfc[fontsty].get( + fc.PROP.FULLNAME, 0 + )[0] + return self.truefontsfn[fontsty] + + def get_true_font_by_char(self, fontsty, chars): + """ + Sometimes, a font will not have every character and a different one is + substituted. (For example, many fonts do not have the ⎣ character.) + Gets the true font by character + """ + if fontsty not in self.truefonts: + # font_match is more reliable at matching Inkscape than font_sort + self.get_true_font(fontsty) + truefont = self.truefonts[fontsty] + cd1 = {k: truefont for k in chars if ord(k) in self.fontcharsets[truefont]} + + if len(cd1) < len(chars): + found = self.font_sort(fontsty) + for fnt in found: + truefont = FontConfig.fcfont_to_css(fnt) + if truefont not in self.fontcharsets: + self.fontcharsets[truefont] = fnt.get(fc.PROP.CHARSET, 0)[0] + cset = self.fontcharsets[truefont] + cd2 = {k: truefont for k in chars if ord(k) in cset and k not in cd1} + cd1.update(cd2) + if len(cd1) == len(chars): + break + if len(cd1) < len(chars): + cd1.update({c: None for c in chars if c not in cd1}) + return cd1 + + @lru_cache(maxsize=None) + def font_match(self, fontsty): + """ + fc fonts matching a given reduced font style + """ + pat = FontConfig.css_to_fcpattern(fontsty) + self.conf.substitute(pat, FC.MatchPattern) + pat.default_substitute() + ret, _ = self.conf.font_match(pat) + return ret + + @lru_cache(maxsize=None) + def font_sort(self, fontsty): + """ + List of fc fonts closest to a given reduced font style + """ + pat = FontConfig.css_to_fcpattern(fontsty) + self.conf.substitute(pat, FC.MatchPattern) + pat.default_substitute() + ret, _, _ = self.conf.font_sort(pat, trim=True, want_coverage=False) + return ret + + def get_fonttools_font(self, fontsty): + """ + Get a FontTools font instance based on the reduced style. + """ + if fontsty not in self.truefontsft: + if fontsty not in self.truefontsfc: + self.get_true_font(fontsty) + found = self.truefontsfc[fontsty] + self.truefontsft[fontsty] = FontToolsFontInstance(found) + return self.truefontsft[fontsty] + + @staticmethod + def css_to_fcpattern(sty): + """Convert a style dictionary to an fc search pattern""" + pat = fc.Pattern.name_parse( + re.escape(sty["font-family"].replace("'", "").replace('"', "")) + ) + pat.add( + fc.PROP.WIDTH, + C.CSSSTR_FCWDT.get(sty.get("font-stretch"), FC.WIDTH_NORMAL), + ) + pat.add( + fc.PROP.WEIGHT, + interpolate_dict(C.CSSWGT_FCWGT, sty.get("font-weight"), FC.WEIGHT_NORMAL), + ) + pat.add( + fc.PROP.SLANT, C.CSSSTY_FCSLN.get(sty.get("font-style"), FC.SLANT_ROMAN) + ) + return pat + + @staticmethod + def fcfont_to_css(fnt): + """Convert an fc font to a Style""" + # For CSS, enclose font family in single quotes + # Needed for fonts like Modern No. 20 with periods in the family + fcfam = fnt.get(fc.PROP.FAMILY, 0)[0] + fcwgt = fnt.get(fc.PROP.WEIGHT, 0)[0] + fcsln = fnt.get(fc.PROP.SLANT, 0)[0] + fcwdt = fnt.get(fc.PROP.WIDTH, 0)[0] + if any(isinstance(v, tuple) for v in [fcfam, fcwgt, fcsln, fcwdt]): + return None + return Style( + [ + ("font-family", "'" + fcfam.strip("'") + "'"), + ("font-weight", interpolate_dict(C.FCWGT_CSSWGT, fcwgt, None)), + ("font-style", C.FCSLN_CSSSTY[fcsln]), + ("font-stretch", nearest_val(C.FCWDT_CSSSTR, fcwdt)), + ] + ) + + @property + def font_list(self): + """ + Finds all fonts known to FontConfig + Note that this does not appear to be completely comprehensive currently + A few fonts are missing, such as HoloLens MDL2 Assets Bold on Windows + These fonts can still be found using get_true_font + """ + if self._font_list is None: + pattern = fc.Pattern.create() # blank pattern + properties = ["family", "weight", "slant", "width", "style", "file"] + # style is a nice name for the weight/slant/width combo + # e.g., Arial Narrow Bold + self._font_list = self.conf.font_list(pattern, properties) + self._font_list = sorted( + self._font_list, key=lambda x: x.get("family", 0)[0] + ) # Sort by family + return self._font_list + + @property + def font_list_css(self): + """Finds all fonts known to FontConfig in css form""" + if self._font_list_css is None: + self._font_list_css = [FontConfig.fcfont_to_css(f) for f in self.font_list] + return self._font_list_css + + +fcfg = FontConfig() +fontatt = ["font-family", "font-weight", "font-style", "font-stretch"] +dfltatt = [(k, default_style_atts[k]) for k in fontatt] + + +@lru_cache(maxsize=None) +def font_style(sty): + """ + Given a CSS style, return a style that has the four attributes + that matter for font selection + Note that Inkscape may not draw this font if it is not present on the system. + The family can have multiple comma-separated values, used for fallback + """ + sty2 = Style(dfltatt) + sty2.update({k: v for k, v in sty.items() if k in fontatt}) + sty2["font-family"] = ",".join( + ["'" + v.strip('"').strip("'") + "'" for v in sty2["font-family"].split(",")] + ) + return sty2 + + +@lru_cache(maxsize=None) +def true_style(sty): + """ + Given a CSS style, return a style with the actual font that + fontconfig selected. This is the actual font that Inkscape will draw. + """ + sty2 = font_style(sty) + tfnt = fcfg.get_true_font(sty2) + return tfnt + + +def nearest_val(dictv, inputval): + """Return the value of a dict whose key is closest to the input value""" + return dictv[min(dictv.keys(), key=lambda x: abs(x - inputval))] + + +# Attempt to import the Pango bindings for the gi repository +with warnings.catch_warnings(): + # Ignore ImportWarning for Gtk/Pango + warnings.simplefilter("ignore") + + HASPANGO = False + HASPANGOFT2 = False + pangoenv = os.environ.get("USEPANGO", "") + if pangoenv != "False": + try: + if sys.platform == "win32": + # Windows may not have all of the typelibs needed for PangoFT2 + # Add the typelibs subdirectory as a fallback option + bloc = inkex.inkscape_system_info.binary_location # type: ignore + girepo = os.path.join( + os.path.dirname(os.path.dirname(bloc)), + "lib", + "girepository-1.0", + ) # Inkscape's GI repository + if os.path.isdir(girepo): + tlibs = [ + "fontconfig-2.0.typelib", + "PangoFc-1.0.typelib", + "PangoFT2-1.0.typelib", + "freetype2-2.0.typelib", + ] + # If any typelibs are missing, try adding the typelibs subdirectory + if any( + not (os.path.exists(os.path.join(girepo, t))) for t in tlibs + ): + tlibsub = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "typelibs" + ) + for newpath in [girepo, tlibsub]: + # gi looks in the order specified in GI_TYPELIB_PATH + cval = os.environ.get("GI_TYPELIB_PATH", "") + if cval == "": + os.environ["GI_TYPELIB_PATH"] = newpath + elif newpath not in cval: + os.environ["GI_TYPELIB_PATH"] = ( + cval + os.pathsep + newpath + ) + + import gi + + gi.require_version("Gtk", "3.0") + from gi.repository import Pango + + try: + HASPANGO = hasattr(Pango, "Variant") and hasattr( + Pango.Variant, "NORMAL" + ) + except ValueError: + HASPANGO = False + except ImportError: + HASPANGO = False + + if HASPANGO: + try: + # May require some typelibs we do not have + gi.require_version("PangoFT2", "1.0") + from gi.repository import PangoFT2 + + HASPANGOFT2 = True + except ValueError: + HASPANGOFT2 = False + from gi.repository import Gdk + +if pangoenv in ["True", "False"]: + os.environ["HASPANGO"] = str(HASPANGO) + os.environ["HASPANGOFT2"] = str(HASPANGOFT2) + with open("env_vars.txt", "w") as f: + f.write(f"HASPANGO={os.environ['HASPANGO']}") + f.write(f"\nHASPANGOFT2={os.environ['HASPANGOFT2']}") + + +class PangoRenderer: + """ + Class to handle Pango rendering functionalities. + """ + + def __init__(self): + self.pangosize = 1024 * 4 + # size of text to render. 1024 is good + + with warnings.catch_warnings(): + # Ignore ImportWarning + warnings.filterwarnings("ignore", category=ImportWarning) + if HASPANGOFT2: + self.ctx = Pango.Context.new() + self.ctx.set_font_map(PangoFT2.FontMap.new()) + else: + self.ctx = Gdk.pango_context_get() + self.pangolayout = Pango.Layout(self.ctx) + self.pufd = Pango.units_from_double + self.putd = Pango.units_to_double + self.scale = Pango.SCALE + self._families = None + self._faces = None + self._face_descriptions = None + self._face_strings = None + self._face_css = None + + @staticmethod + def css_attribute_to_pango(sty, key): + """ + Convert CSS style attributes to Pango attributes. + """ + val = sty.get(key) + if key == "font-weight": + return C.CSSWGT_PWGT.get(val, Pango.Weight.NORMAL) + if key == "font-style": + return C.CSSSTY_PSTY.get(val, Pango.Style.NORMAL) + if key == "font-stretch": + return C.CSSSTR_PSTR.get(val, Pango.Stretch.NORMAL) + if key == "font-variant": + return C.CSSVAR_PVAR.get(val, Pango.Variant.NORMAL) + return None + + @staticmethod + def css_to_pango_description(sty): + """ + Convert CSS style to Pango FontDescription. + """ + fdesc = Pango.FontDescription(sty["font-family"].strip("'").strip('"') + ",") + # The comma above is very important for font-families like Rockwell Condensed. + # Without it, Pango will interpret it as the Condensed font-stretch of the + # Rockwell font-family, rather than the Rockwell Condensed font-family. + fdesc.set_weight( + interpolate_dict(C.CSSWGT_PWGT, sty.get("font-weight"), Pango.Weight.NORMAL) + ) + fdesc.set_variant( + C.CSSVAR_PVAR.get(sty.get("font-variant"), Pango.Variant.NORMAL) + ) + fdesc.set_style(C.CSSSTY_PSTY.get(sty.get("font-style"), Pango.Style.NORMAL)) + fdesc.set_stretch( + C.CSSSTR_PSTR.get(sty.get("font-stretch"), Pango.Stretch.NORMAL) + ) + return fdesc + + @staticmethod + def pango_to_fc(pstretch, pweight, pstyle): + """ + Convert Pango attributes to FontConfig attributes. + """ + fcwidth = C.PSTR_FCWDT[pstretch] + fcweight = C.PWGT_FCWGT[pweight] + fcslant = C.PSTY_FCSLN[pstyle] + return fcwidth, fcweight, fcslant + + @staticmethod + def pango_to_css(pdescription): + """ + Convert Pango FontDescription to CSS Style. + """ + fdesc = pdescription + cstr = [k for k, v in C.CSSSTR_PSTR.items() if v == fdesc.get_stretch()] + fwgt = fdesc.get_weight() + if fwgt not in C.CSSWGT_PWGT.values(): + cwgt = [str(int(fwgt))] + else: + cwgt = [ + k + for k, v in C.CSSWGT_PWGT.items() + if v == fdesc.get_weight() and isnumeric(k) + ] + csty = [k for k, v in C.CSSSTY_PSTY.items() if v == fdesc.get_style()] + + sty = (("font-family", fdesc.get_family()),) + if len(cwgt) > 0: + sty += (("font-weight", cwgt[0]),) + if len(csty) > 0: + sty += (("font-style", csty[0]),) + if len(cstr) > 0: + sty += (("font-stretch", cstr[0]),) + return Style(sty) + + @property + def families(self): + """List all font families available in Pango context.""" + if self._families is None: + families = self.ctx.get_font_map().list_families() + self._families = sorted( + families, key=lambda x: x.get_name() + ) # Sort families alphabetically + return self._families + + @property + def faces(self): + """List all font faces available in Pango context.""" + if self._faces is None: + self._faces = [fc for fm in self.families for fc in fm.list_faces()] + return self._faces + + @property + def face_descriptions(self): + """List all font face descriptions available in Pango context.""" + if self._face_descriptions is None: + self._face_descriptions = [fc.describe() for fc in self.faces] + return self._face_descriptions + + @property + def face_strings(self): + """List all font face strings available in Pango context.""" + if self._face_strings is None: + self._face_strings = [fd.to_string() for fd in self.face_descriptions] + return self._face_strings + + @property + def face_css(self): + """List all font face CSS styles available in Pango context.""" + if self._face_css is None: + self._face_css = [ + PangoRenderer.pango_to_css(fd) for fd in self.face_descriptions + ] + return self._face_css + + @staticmethod + def fc_match_pango(family, pstretch, pweight, pstyle): + """Look up a font by its Pango properties""" + pat = fc.Pattern.name_parse(re.escape(family.replace("'", "").replace('"', ""))) + fcwidth, fcweight, fcslant = PangoRenderer.pango_to_fc( + pstretch, pweight, pstyle + ) + pat.add(fc.PROP.WIDTH, fcwidth) + pat.add(fc.PROP.WEIGHT, fcweight) + pat.add(fc.PROP.SLANT, fcslant) + + fcfg.conf.substitute(pat, FC.MatchPattern) + pat.default_substitute() + found, _ = fcfg.conf.font_match(pat) + return found + + def set_text_style(self, sty): + """Set the text style for rendering based on the provided style""" + fdesc = PangoRenderer.css_to_pango_description(sty) + fdesc.set_absolute_size(self.pufd(self.pangosize)) + fnt = self.ctx.get_font_map().load_font(self.ctx, fdesc) + + success = fnt is not None + if success: + self.pangolayout.set_font_description(fdesc) + metrics = fnt.get_metrics() + metrics = [ + self.putd(v) / self.pangosize + for v in [ + metrics.get_height(), + metrics.get_ascent(), + metrics.get_descent(), + ] + ] + return success, metrics + return success, None + + def render_text(self, texttorender): + """Render text using Pango layout.""" + self.pangolayout.set_text(texttorender, -1) + + def process_extents(self, ext, ascent): + """ + Scale extents and return extents as standard bboxes + (0:logical, 1:ink, 2: ink relative to anchor/baseline) + """ + logr = ext.logical_rect + logr = [ + self.putd(v) / self.pangosize + for v in [logr.x, logr.y, logr.width, logr.height] + ] + inkr = ext.ink_rect + inkr = [ + self.putd(v) / self.pangosize + for v in [inkr.x, inkr.y, inkr.width, inkr.height] + ] + ir_rel = [inkr[0] - logr[0], inkr[1] - logr[1] - ascent, inkr[2], inkr[3]] + return logr, inkr, ir_rel + + def get_character_extents(self, ascent, needexts): + """ + Iterate through the layout to get the logical width of each character + If there is differential kerning applied, it is applied to the + width of the first character. For example, the 'V' in 'Voltage' + will be thinner due to the 'o' that follows. + Units: relative to font size + """ + loi = self.pangolayout.get_iter() + wds = [] + i = -1 + lastpos = True + unwrapper = 0 + moved = True + while moved: + cext = loi.get_cluster_extents() + i += 1 + if needexts[i] == "1": + ext = self.process_extents(cext, ascent) + if ext[0][0] < 0 and lastpos: + unwrapper += 2**32 / (self.scale * self.pangosize) + lastpos = ext[0][0] >= 0 + ext[0][0] += unwrapper # account for 32-bit overflow + ext[1][0] += unwrapper + wds.append(ext) + else: + wds.append(None) + moved = loi.next_char() + + numunknown = self.pangolayout.get_unknown_glyphs_count() + return wds, numunknown + + +# pylint:disable=import-outside-toplevel +class FontToolsFontInstance: + """ + Class to handle FontTools font instances. + Note that this is rarely used (only if Pango fails, or for getting the + ascent for text flows). The imports are fairly time-consuming, so + they are only performed conditionally. + """ + + def __init__(self, fcfont): + self.font = FontToolsFontInstance.font_from_fc(fcfont) + self.head = self.font["head"] + self.os2 = self.font["OS/2"] if "OS/2" in self.font else None + self.find_font_metrics() + self.cmap = None + self.hmtx = None + self.kern = None + self.gsub = None + self.glyf = None + self.glyph_names = None + self.ligatures = None + + @staticmethod + def font_from_fc(found): + """Find a FontTools font from a FontConfig font.""" + fname = found.get(fc.PROP.FILE, 0)[0] + + from fontTools.ttLib import TTFont, TTLibFileIsCollectionError # pylint: disable=no-name-in-module + import logging + + logging.getLogger("fontTools").setLevel(logging.ERROR) + try: + font = TTFont(fname) + + # If font has variants, get them + if "fvar" in font: + fcwgt = found.get(fc.PROP.WEIGHT, 0)[0] + fcsln = found.get(fc.PROP.SLANT, 0)[0] + fcwdt = found.get(fc.PROP.WIDTH, 0)[0] + location = dict() + for axis in font["fvar"].axes: + if axis.axisTag == "wght": + location["wght"] = nearest_val(C.FCWGT_OS2WGT, fcwgt) + elif axis.axisTag == "wdth": + location["wdth"] = fcwdt + if len(location) > 0: + from fontTools.varLib import mutator + + font = mutator.instantiateVariableFont(font, location) + + except TTLibFileIsCollectionError: + # is TT collection + fcfam = found.get(fc.PROP.FAMILY, 0)[0] + fcwgt = found.get(fc.PROP.WEIGHT, 0)[0] + fcsln = found.get(fc.PROP.SLANT, 0)[0] + fcwdt = found.get(fc.PROP.WIDTH, 0)[0] + + from fontTools.ttLib import TTCollection + + collection = TTCollection(fname) + num_fonts = len(collection) + collection.close() + num_match = [] + for i in range(num_fonts): + tfont = TTFont(fname, fontNumber=i) + font_weight = tfont["OS/2"].usWeightClass + font_width = tfont["OS/2"].usWidthClass + + subfamily = tfont["name"].getName(2, 3, 1, 1033) + subfamily = ( + subfamily.toUnicode() if subfamily is not None else "Unknown" + ) + font_italic = ( + (tfont["OS/2"].fsSelection & 1) != 0 + or "italic" in subfamily.lower() + or "oblique" in subfamily.lower() + ) + + # nameID=1: font family name + familymatch = any( + fcfam in n.toUnicode() for n in tfont["name"].names if n.nameID == 1 + ) + widthmatch = C.OS2WDT_FCWDT[font_width] == fcwdt + weightmatch = ( + interpolate_dict(C.OS2WGT_FCWGT, font_weight, None) == fcwgt + ) + slantmatch = ( + font_italic and fcsln in [FC.SLANT_ITALIC, FC.SLANT_OBLIQUE] + ) or (not font_italic and fcsln == FC.SLANT_ROMAN) + num_match.append( + sum([weightmatch, widthmatch, slantmatch, familymatch]) + ) + if num_match[-1] == 4: + font = tfont + break + if max(num_match) < 4: + # Did not find a perfect match + font = [ + TTFont(fname, fontNumber=i) + for i in range(num_fonts) + if num_match[i] == max(num_match) + ][0] + return font + + def find_font_metrics(self): + """ + A modified version of Inkscape's find_font_metrics + https://gitlab.com/inkscape/inkscape/-/blob/master/src/libnrtype/font-instance.cpp#L267 + Uses FontTools, which is Pythonic + """ + font = self.font + units_per_em = self.head.unitsPerEm + os2 = self.os2 + if os2: + self._ascent = abs(os2.sTypoAscender / units_per_em) + self._descent = abs(os2.sTypoDescender / units_per_em) + else: + self._ascent = abs(font["hhea"].ascent / units_per_em) + self._descent = abs(font["hhea"].descent / units_per_em) + self._ascent_max = abs(font["hhea"].ascent / units_per_em) + self._descent_max = abs(font["hhea"].descent / units_per_em) + self._design_units = units_per_em + emv = self._ascent + self._descent + if emv > 0.0: + self._ascent /= emv + self._descent /= emv + + if os2 and os2.version >= 0x0002 and os2.version != 0xFFFF: + self._xheight = abs(os2.sxHeight / units_per_em) + else: + glyph_set = font.getGlyphSet() + self._xheight = ( + abs(glyph_set["x"].height / units_per_em) + if "x" in glyph_set and glyph_set["x"].height is not None + else 0.5 + ) + self._baselines = [0] * 8 + self.sp_css_baseline_ideographic = 0 + self.sp_css_baseline_hanging = 1 + self.sp_css_baseline_mathematical = 2 + self.sp_css_baseline_central = 3 + self.sp_css_baseline_middle = 4 + self.sp_css_baseline_text_beforeedge = 5 + self.sp_css_baseline_text_after_edge = 6 + self.sp_css_baseline_alphabetic = 7 + self._baselines[self.sp_css_baseline_ideographic] = -self._descent + self._baselines[self.sp_css_baseline_hanging] = 0.8 * self._ascent + self._baselines[self.sp_css_baseline_mathematical] = 0.8 * self._xheight + self._baselines[self.sp_css_baseline_central] = 0.5 - self._descent + self._baselines[self.sp_css_baseline_middle] = 0.5 * self._xheight + self._baselines[self.sp_css_baseline_text_beforeedge] = self._ascent + self._baselines[self.sp_css_baseline_text_after_edge] = -self._descent + + # Get capital height + if os2 and hasattr(os2, "sCapHeight") and os2.sCapHeight not in [0, None]: + self.cap_height = os2.sCapHeight / units_per_em + elif "glyf" in font and "I" in font.getGlyphNames(): + glyf_table = font["glyf"] + i_glyph = glyf_table["I"] + self.cap_height = (i_glyph.yMax - 0 * i_glyph.yMin) / units_per_em + else: + self.cap_height = 1 + + def get_char_advances(self, chars, pchars): + """Get the advance width and bounding boxes of characters.""" + units_per_em = self.head.unitsPerEm + if self.cmap is None: + self.cmap = self.font.getBestCmap() + if self.hmtx is None: + self.hmtx = self.font["hmtx"] + if self.kern is None: + self.kern = self.font["kern"] if "kern" in self.font else None + if self.gsub is None: + self.gsub = self.font["GSUB"] if "GSUB" in self.font else None + if self.glyf is None: + self.glyf = self.font["glyf"] if "glyf" in self.font else None + if self.glyph_names is None: + self.glyph_names = self.font.getGlyphNames() + + if self.cmap is None: + # Certain symbol fonts don't have a cmap table + self.cmap = dict() + for table in self.font["cmap"].tables: + if table.isUnicode(): + for codepoint, name in table.cmap.items(): + self.cmap[codepoint] = name + self.cmap[codepoint - 15 * 4096] = name + + advs = dict() + bbs = dict() + for c in chars: + glyph1 = self.cmap.get(ord(c)) + if glyph1 is not None: + if glyph1 in self.hmtx.metrics: + advance_width, _ = self.hmtx.metrics[glyph1] + advs[c] = advance_width / units_per_em + + try: + glyph = self.glyf[glyph1] + bbx = [ + glyph.xMin, + -glyph.yMax, + glyph.xMax - glyph.xMin, + glyph.yMax - glyph.yMin, + ] + bbs[c] = [v / units_per_em for v in bbx] + except (AttributeError, TypeError): + bbs[c] = [0, 0, 0, 0] + else: + advs[c] = None + + # Get ligature table (made with LLM help) + # Reference: https://learn.microsoft.com/en-us/typography/opentype/spec/gsub + if self.ligatures is None: + if self.gsub: + gsub_table = self.gsub.table + self.ligatures = dict() + + # Helper function to check if a feature tag is in the list + def has_feature_tag(feature_tag, lookup_index): + for feature in gsub_table.FeatureList.FeatureRecord: + if feature.FeatureTag == feature_tag: + if lookup_index in feature.Feature.LookupListIndex: + return True + return False + + for lookup_index, lookup in enumerate(gsub_table.LookupList.Lookup): + for subtable in lookup.SubTable: + if lookup.LookupType == 7: # Extension substitutions + ext_subtable = subtable.ExtSubTable + lookup_type = ext_subtable.LookupType + else: + ext_subtable = subtable + lookup_type = lookup.LookupType + + if lookup_type == 4: # Ligature substitutions + # Check if the lookup is for discretionary ligatures + if has_feature_tag("liga", lookup_index): + for ( + first_glyph, + ligature_set, + ) in ext_subtable.ligatures.items(): + for ligature in ligature_set: + component_glyphs = [ + first_glyph + ] + ligature.Component + ligature_glyph = ligature.LigGlyph + self.ligatures[tuple(component_glyphs)] = ( + ligature_glyph + ) + + else: + self.ligatures = dict() + + dadvs = dict() + for c in pchars: + glyph2 = self.cmap.get(ord(c)) + for pchar in pchars[c]: + glyph1 = self.cmap.get(ord(pchar)) + kerning_value = None + if (glyph1, glyph2) in self.ligatures: + ligglyph = self.ligatures[(glyph1, glyph2)] + awlig, _ = self.hmtx.metrics[ligglyph] + aw1, _ = self.hmtx.metrics[glyph1] + aw2, _ = self.hmtx.metrics[glyph2] + kerning_value = awlig - aw1 - aw2 + else: + if self.kern is not None: + for subtable in self.kern.kernTables: + kerning_value = subtable.kernTable.get((glyph1, glyph2)) + if kerning_value is not None: + break + if kerning_value is None: + kerning_value = 0 + dadvs[(pchar, c)] = kerning_value / units_per_em + return advs, dadvs, bbs + + +# pylint:enable=import-outside-toplevel + + +class Conversions: + """ + Conversions between CSS, FontConfig, Pango, and OS2 font attributes + CSS: font-weight, font-style, font-stretch + FontConfig: weight, slant, width + Pango: weight, style, stretch + OS2: weight, width, + + Inkscape conventions in libnrtype/font-factory.cpp + https://gitlab.com/inkscape/inkscape/-/blob/master/src/libnrtype/font-factory.cpp + """ + + # CSS to fontconfig + # For weights, Inkscape ignores anything commented out below + # See ink_font_description_from_style in libnrtype/font-factory.cpp + # And yet Semi-Light seems to work anyway + CSSWGT_FCWGT = { + # 'thin' : FC.WEIGHT_THIN, + # 'ultralight': FC.WEIGHT_EXTRALIGHT, + # 'light' : FC.WEIGHT_LIGHT, + # 'semilight' : FC.WEIGHT_SEMILIGHT, + # 'book' : FC.WEIGHT_BOOK, + "normal": FC.WEIGHT_NORMAL, + # 'medium' : FC.WEIGHT_MEDIUM, + # 'semibold' : FC.WEIGHT_SEMIBOLD, + "bold": FC.WEIGHT_BOLD, + # 'ultrabold' : FC.WEIGHT_ULTRABOLD, + # 'heavy' : FC.WEIGHT_HEAVY, + # 'ultraheavy': FC.WEIGHT_ULTRABLACK, + "100": FC.WEIGHT_THIN, + "200": FC.WEIGHT_EXTRALIGHT, + "300": FC.WEIGHT_LIGHT, + "350": FC.WEIGHT_SEMILIGHT, + # '380' : FC.WEIGHT_BOOK, + "400": FC.WEIGHT_NORMAL, + "500": FC.WEIGHT_MEDIUM, + "600": FC.WEIGHT_SEMIBOLD, + "700": FC.WEIGHT_BOLD, + "800": FC.WEIGHT_ULTRABOLD, + "900": FC.WEIGHT_HEAVY, + # '1000' : FC.WEIGHT_ULTRABLACK + } + + CSSSTY_FCSLN = { + "normal": FC.SLANT_ROMAN, + "italic": FC.SLANT_ITALIC, + "oblique": FC.SLANT_OBLIQUE, + } + + CSSSTR_FCWDT = { + "ultra-condensed": FC.WIDTH_ULTRACONDENSED, + "extra-condensed": FC.WIDTH_EXTRACONDENSED, + "condensed": FC.WIDTH_CONDENSED, + "semi-condensed": FC.WIDTH_SEMICONDENSED, + "normal": FC.WIDTH_NORMAL, + "semi-expanded": FC.WIDTH_SEMIEXPANDED, + "expanded": FC.WIDTH_EXPANDED, + "extra-expanded": FC.WIDTH_EXTRAEXPANDED, + "ultra-expanded": FC.WIDTH_ULTRAEXPANDED, + } + + # Fontconfig to CSS + # Semi-Light, Book, and Ultra-Black are mapped to Light, Normal, Heavy + # See FontFactory::GetUIStyles in libnrtype/font-factory.cpp + # Despite this, Semi-Light seems to be valid + FCWGT_CSSWGT = { + FC.WEIGHT_THIN: "100", + FC.WEIGHT_EXTRALIGHT: "200", + FC.WEIGHT_LIGHT: "300", + FC.WEIGHT_SEMILIGHT: "350", + # FC.WEIGHT_BOOK : '380', + FC.WEIGHT_BOOK: "400", + FC.WEIGHT_NORMAL: "400", + FC.WEIGHT_MEDIUM: "500", + FC.WEIGHT_SEMIBOLD: "600", + FC.WEIGHT_BOLD: "700", + FC.WEIGHT_ULTRABOLD: "800", + FC.WEIGHT_HEAVY: "900", + # FC.WEIGHT_ULTRABLACK : '1000', + FC.WEIGHT_ULTRABLACK: "900", + } + FCSLN_CSSSTY = { + FC.SLANT_ROMAN: "normal", + FC.SLANT_ITALIC: "italic", + FC.SLANT_OBLIQUE: "oblique", + } + FCWDT_CSSSTR = { + FC.WIDTH_ULTRACONDENSED: "ultra-condensed", + FC.WIDTH_EXTRACONDENSED: "extra-condensed", + FC.WIDTH_CONDENSED: "condensed", + FC.WIDTH_SEMICONDENSED: "semi-condensed", + FC.WIDTH_NORMAL: "normal", + FC.WIDTH_SEMIEXPANDED: "semi-expanded", + FC.WIDTH_EXPANDED: "expanded", + FC.WIDTH_EXTRAEXPANDED: "extra-expanded", + FC.WIDTH_ULTRAEXPANDED: "ultra-expanded", + } + + # Pango style string description to CSS + # Needed for matching the name of styles shown in Inkscape + PWGTSTR_CSSWGT = { + "Ultra-Light": "200", + "Light": "300", + "Semi-Light": "350", + "Medium": "500", + "Semi-Bold": "600", + "Bold": "bold", + "Ultra-Bold": "800", + "Heavy": "900", + "Normal": "normal", + "Book": "380", + "Thin": "100", + "Ultra-Heavy": "1000", + } + PSTRSTR_CSSSTR = { + "Ultra-Condensed": "ultra-condensed", + "Extra-Condensed": "extra-condensed", + "Condensed": "condensed", + "Semi-Condensed": "semi-condensed", + "Normal": "normal", + "Semi-Expanded": "semi-expanded", + "Expanded": "expanded", + "Extra-Expanded": "extra-expanded", + "Ultra-Expanded": "ultra-expanded", + } + PSTYSTR_CSSSTY = { + "Italic": "italic", + "Oblique": "oblique", + "Normal": "normal", + } + + # FC to OS2 and OS2 to FC + FCWGT_OS2WGT = { + FC.WEIGHT_THIN: 100, + FC.WEIGHT_EXTRALIGHT: 200, + FC.WEIGHT_LIGHT: 300, + FC.WEIGHT_SEMILIGHT: 350, + FC.WEIGHT_BOOK: 380, + FC.WEIGHT_NORMAL: 400, + FC.WEIGHT_MEDIUM: 500, + FC.WEIGHT_SEMIBOLD: 600, + FC.WEIGHT_BOLD: 700, + FC.WEIGHT_ULTRABOLD: 800, + FC.WEIGHT_HEAVY: 900, + FC.WEIGHT_ULTRABLACK: 1000, + } + OS2WDT_FCWDT = { + 1: FC.WIDTH_ULTRACONDENSED, + 2: FC.WIDTH_EXTRACONDENSED, + 3: FC.WIDTH_CONDENSED, + 4: FC.WIDTH_SEMICONDENSED, + 5: FC.WIDTH_NORMAL, + 6: FC.WIDTH_SEMIEXPANDED, + 7: FC.WIDTH_EXPANDED, + 8: FC.WIDTH_EXTRAEXPANDED, + 9: FC.WIDTH_ULTRAEXPANDED, + } + OS2WGT_FCWGT = { + 100: FC.WEIGHT_THIN, + 200: FC.WEIGHT_EXTRALIGHT, + 300: FC.WEIGHT_LIGHT, + 350: FC.WEIGHT_SEMILIGHT, + 380: FC.WEIGHT_BOOK, + 400: FC.WEIGHT_NORMAL, + 500: FC.WEIGHT_MEDIUM, + 600: FC.WEIGHT_SEMIBOLD, + 700: FC.WEIGHT_BOLD, + 800: FC.WEIGHT_ULTRABOLD, + 900: FC.WEIGHT_HEAVY, + 1000: FC.WEIGHT_ULTRABLACK, + } + + if HASPANGO: + # Pango to fontconfig + PWGT_FCWGT = { + Pango.Weight.THIN: FC.WEIGHT_THIN, + Pango.Weight.ULTRALIGHT: FC.WEIGHT_ULTRALIGHT, + Pango.Weight.ULTRALIGHT: FC.WEIGHT_EXTRALIGHT, + Pango.Weight.LIGHT: FC.WEIGHT_LIGHT, + Pango.Weight.SEMILIGHT: FC.WEIGHT_DEMILIGHT, + Pango.Weight.SEMILIGHT: FC.WEIGHT_SEMILIGHT, + Pango.Weight.BOOK: FC.WEIGHT_BOOK, + Pango.Weight.NORMAL: FC.WEIGHT_REGULAR, + Pango.Weight.NORMAL: FC.WEIGHT_NORMAL, + Pango.Weight.MEDIUM: FC.WEIGHT_MEDIUM, + Pango.Weight.SEMIBOLD: FC.WEIGHT_DEMIBOLD, + Pango.Weight.SEMIBOLD: FC.WEIGHT_SEMIBOLD, + Pango.Weight.BOLD: FC.WEIGHT_BOLD, + Pango.Weight.ULTRABOLD: FC.WEIGHT_EXTRABOLD, + Pango.Weight.ULTRABOLD: FC.WEIGHT_ULTRABOLD, + Pango.Weight.HEAVY: FC.WEIGHT_BLACK, + Pango.Weight.HEAVY: FC.WEIGHT_HEAVY, + Pango.Weight.ULTRAHEAVY: FC.WEIGHT_EXTRABLACK, + Pango.Weight.ULTRAHEAVY: FC.WEIGHT_ULTRABLACK, + } + + PSTY_FCSLN = { + Pango.Style.NORMAL: FC.SLANT_ROMAN, + Pango.Style.ITALIC: FC.SLANT_ITALIC, + Pango.Style.OBLIQUE: FC.SLANT_OBLIQUE, + } + + PSTR_FCWDT = { + Pango.Stretch.ULTRA_CONDENSED: FC.WIDTH_ULTRACONDENSED, + Pango.Stretch.EXTRA_CONDENSED: FC.WIDTH_EXTRACONDENSED, + Pango.Stretch.CONDENSED: FC.WIDTH_CONDENSED, + Pango.Stretch.SEMI_CONDENSED: FC.WIDTH_SEMICONDENSED, + Pango.Stretch.NORMAL: FC.WIDTH_NORMAL, + Pango.Stretch.SEMI_EXPANDED: FC.WIDTH_SEMIEXPANDED, + Pango.Stretch.EXPANDED: FC.WIDTH_EXPANDED, + Pango.Stretch.EXTRA_EXPANDED: FC.WIDTH_EXTRAEXPANDED, + Pango.Stretch.ULTRA_EXPANDED: FC.WIDTH_ULTRAEXPANDED, + } + + # CSS to Pango + CSSVAR_PVAR = { + "normal": Pango.Variant.NORMAL, + "small-caps": Pango.Variant.SMALL_CAPS, + } + + CSSSTY_PSTY = { + "normal": Pango.Style.NORMAL, + "italic": Pango.Style.ITALIC, + "oblique": Pango.Style.OBLIQUE, + } + # For weights, Inkscape ignores anything commented out below + # See ink_font_description_from_style in libnrtype/font-factory.cpp + CSSWGT_PWGT = { + # 'thin' : Pango.Weight.THIN, + # 'ultralight' : Pango.Weight.ULTRALIGHT, + # 'light' : Pango.Weight.LIGHT, + "semilight": Pango.Weight.SEMILIGHT, + # 'book' : Pango.Weight.BOOK, + "normal": Pango.Weight.NORMAL, + # 'medium' : Pango.Weight.MEDIUM, + # 'semibold' : Pango.Weight.SEMIBOLD, + "bold": Pango.Weight.BOLD, + # 'ultrabold' : Pango.Weight.ULTRABOLD, + # 'heavy' : Pango.Weight.HEAVY, + # 'ultraheavy' : Pango.Weight.ULTRAHEAVY, + "100": Pango.Weight.THIN, + "200": Pango.Weight.ULTRALIGHT, + "300": Pango.Weight.LIGHT, + "350": Pango.Weight.SEMILIGHT, + # '380' : Pango.Weight.BOOK, + "400": Pango.Weight.NORMAL, + "500": Pango.Weight.MEDIUM, + "600": Pango.Weight.SEMIBOLD, + "700": Pango.Weight.BOLD, + "800": Pango.Weight.ULTRABOLD, + "900": Pango.Weight.HEAVY, + # '1000' : Pango.Weight.ULTRAHEAVY + } + CSSSTR_PSTR = { + "ultra-condensed": Pango.Stretch.ULTRA_CONDENSED, + "extra-condensed": Pango.Stretch.EXTRA_CONDENSED, + "condensed": Pango.Stretch.CONDENSED, + "semi-condensed": Pango.Stretch.SEMI_CONDENSED, + "normal": Pango.Stretch.NORMAL, + "semi-expanded": Pango.Stretch.SEMI_EXPANDED, + "expanded": Pango.Stretch.EXPANDED, + "extra-expanded": Pango.Stretch.EXTRA_EXPANDED, + "ultra-expanded": Pango.Stretch.ULTRA_EXPANDED, + } + + +C = Conversions # pylint: disable=invalid-name + + +def inkscape_spec_to_css(fstr, usepango=False): + """ + Look up a CSS style based on its Inkscape font specification, which is + similar (identical?) to the Pango description's string representation. + This function is meant to be forgiving, allowing a user to vary punctuation + and capitalization, and tries to find a match in the system's families. + It does NOT require Pango. + """ + + def clean_str(strin): + ret = re.sub(r"[^\w\s]", "", strin) + ret = re.sub(r"\s+", " ", ret) + return ret.strip().lower() + + cstr = clean_str(fstr) + if usepango and HASPANGO: + fullfams = [fm.get_name() for fm in PangoRenderer().families] + else: + fullfams = [f.get("family", 0)[0] for f in fcfg.font_list] + fullfams += ["Serif", "Sans", "System-ui", "Monospace"] # from Inkscape + + # Split the input into words and find the longest match to an installed + # family at the beginning or end of the string + fmnames = [clean_str(f) for f in fullfams] + words = cstr.split() + longest_match = "" + match_length = 0 + match_type = None # 'prefix' or 'suffix' + # Check for the longest prefix match + for i in range(1, len(words) + 1): + current_match = " ".join(words[:i]) + if current_match in fmnames and len(current_match) > len(longest_match): + longest_match = current_match + match_length = i + match_type = "prefix" + # Check for the longest suffix match + for i in range(1, len(words) + 1): + current_match = " ".join(words[-i:]) + if current_match in fmnames and len(current_match) > len(longest_match): + longest_match = current_match + match_length = i + match_type = "suffix" + if longest_match: + fam = fullfams[fmnames.index(longest_match)] + if match_type == "prefix": + stylews = words[match_length:] + elif match_type == "suffix": + stylews = words[:-match_length] + if not stylews: + stylews = None + else: + fam = None + stylews = words + + sty = {} + if fam: + sty["font-family"] = fam + if stylews: + pwgtstrs = {clean_str(k): v for k, v in C.PWGTSTR_CSSWGT.items()} + pstrstrs = {clean_str(k): v for k, v in C.PSTRSTR_CSSSTR.items()} + pstystrs = {clean_str(k): v for k, v in C.PSTYSTR_CSSSTY.items()} + for wrd in stylews: + understood = False + if wrd in pwgtstrs: + sty["font-weight"] = pwgtstrs[wrd] + understood = True + elif "weight" in wrd: + sty["font-weight"] = re.search(r"weight(\d+)", wrd).group(1) + understood = True + if wrd in pstystrs: + sty["font-style"] = pstystrs[wrd] + understood = True + if wrd in pstrstrs: + sty["font-stretch"] = pstrstrs[wrd] + understood = True + if not understood: + return None + sty = {key: sty[key] for key in fontatt if key in sty} # order + return sty diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/parser.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/parser.py new file mode 100644 index 0000000..2ad362e --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/parser.py @@ -0,0 +1,4097 @@ +# coding=utf-8 +# +# Copyright (c) 2023 David Burghoff +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +""" +text.parser module parses text in a document according to the way Inkscape +handles it. In short, every TextElement or FlowRoot is parsed into a ParsedText. +Each ParsedText contains a collection of tlines, representing one line of text. +Each TLine contains a collection of tchars, representing a single character. +Characters are also grouped into tchunks, which represent chunks of characters +sharing an anchor (usually from manually-kerned text). + +These functions allow text metrics and bounding boxes to be calculated without +binary calls to Inkscape. It can calculate both the ink bounding box (i.e., where +characters' ink is) as well as the extent bounding box (i.e, its logical location). +The extent of a character is defined as extending between cursor positions in the +x-direction and between the baseline and capital height in the y-direction. + +Some examples: +- el.parsed_text.get_full_inkbbox(): gets the untransformed bounding box of the + whole element +- el.parsed_text.get_char_extents(): gets all characters' untransformed extents +- el.parse_text.lns[0].chrs[0].pts_ut: the untransformed points of the extent of the + first character of the first line +- el.parse_text.lns[0].chrs[0].pts_t : the transformed points of the extent of the + first character of the first line + +To check if things are working properly, you can run the make_highlights() function, +which draws rectangles that tell you where the extents / bboxes are. For example, +- el.parsed_text.make_highlights('char') : shows the extent of each character +- el.parsed_text.make_highlights('fullink') : shows the bbox of the whole element +""" + +import itertools +import math +from copy import copy +import threading +import lxml +import numpy as np +import inkex +from inkex import ( + TextElement, + Tspan, + Transform, + Style, + FlowRoot, + FlowRegion, + FlowPara, + FlowSpan, +) +from inkex.text.utils import ( + uniquetol, + composed_width, + composed_lineheight, + default_style_atts, + isrectangle, + ipx, + bbox, +) +from inkex.text.font_properties import ( + PangoRenderer, + HASPANGO, + fcfg, + font_style, + true_style, +) +from inkex.utils import debug + +DIFF_ADVANCES = True # generate a differential advances table for each font? +TEXTSIZE = 100 # size of rendered text +DEPATHOLOGIZE = True # clean up pathological atts not normally made by Inkscape + +EBget = lxml.etree.ElementBase.get +EBset = lxml.etree.ElementBase.set + +TEtag, TStag, FRtag = TextElement.ctag, Tspan.ctag, FlowRoot.ctag +TEFRtags = {TEtag, FRtag} +TEtags = {TEtag, TStag} +FRtags = {FRtag, FlowRegion.ctag, FlowPara.ctag, FlowSpan.ctag} + +LOCK = threading.Lock() + + +class ParsedTextList(list): + """ + A list of parsed text whose coordinates are computed + vectorially using numpy. Normally they are calculated as they are needed, + but this is inefficient when dealing with thousands of manually-kerned + characters (e.g., from PDFs). + """ + + def __init__(self, els): + """Initializes ParsedTextList with a list of elements.""" + super().__init__([el.parsed_text for el in els]) + + def precalcs(self): + """ + Calculate parsed_bb, parsed_pts_ut, parsed_pts_t for all chunks + simultaneously + """ + tws = [chk for ptxt in self for line in ptxt.lns for chk in line.chks] + nchrs = sum(chk.ncs for chk in tws) + + # Preallocate arrays + dadv, cwd, dxeff, dy, bshft, caph, unsp, anfr = np.zeros( + (8, nchrs), dtype=float + ) + fidx, lidx, widx = np.zeros((3, nchrs)).astype(int) + + unsp = np.array([chk.unrenderedspace for chk in tws], dtype=float) + anfr = np.array([chk.line.anchfrac for chk in tws], dtype=float) + chkx = np.array([chk.x for chk in tws], dtype=float) + chky = np.array([chk.y for chk in tws], dtype=float) + m00, m01, m02, m10, m11, m12 = ( + np.array([chk.transform.matrix[i][j] for chk in tws], dtype=float) + for i in (0, 1) + for j in (0, 1, 2) + ) + lx2, rx2, by2, ty2 = np.zeros((4, len(tws))).astype(float) + + # Collect values for dadv, cwd, dxeff, dy, bshft, and caph + idx = 0 + for j, chk in enumerate(tws): + if DIFF_ADVANCES: + for i in range(1, chk.ncs): + dadv[idx + i] = chk.chrs[i].dadvs(chk.chrs[i - 1].c, chk.chrs[i].c)*(chk.dxeff[i]==0) + + for i in range(chk.ncs): + cwd[idx + i] = chk.cwd[i] + dxeff[idx + i] = chk.dxeff[i] + dy[idx + i] = chk.dy[i] + bshft[idx + i] = chk.bshft[i] + caph[idx + i] = chk.caph[i] + fidx[idx : idx + chk.ncs] = idx + lidx[idx : idx + chk.ncs] = idx + chk.ncs - 1 + widx[idx : idx + chk.ncs] = j + idx += chk.ncs + + # Calculate wds, cstop, and cstrt + wds = cwd + dxeff + dadv + cstop = np.array(list(itertools.accumulate(wds)), dtype=float) + cstop += wds[fidx] - cstop[fidx] + cstrt = cstop - cwd + + # # Calculate adyl + adyl = np.array(list(itertools.accumulate(dy)), dtype=float) + adyl += dy[fidx] - adyl[fidx] + + # Calculate chkw, offx, lftx, and rgtx + offx = -anfr[widx] * (cstop[lidx] - unsp[widx] * cwd[lidx]) + lftx = chkx[widx] + cstrt + offx + rgtx = chkx[widx] + cstop + offx + btmy = chky[widx] + adyl - bshft + topy = btmy - caph + + idx_ncs = np.cumsum([0] + [chk.ncs for chk in tws]) + starts = idx_ncs[:-1] + subtract_ufunc = np.frompyfunc(lambda a, b: a - b, 2, 1) + lx_minus_dxeff = subtract_ufunc(lftx, dxeff) + lx2 = np.minimum.reduceat(lx_minus_dxeff, starts) + rx2 = lx2 + cstop[idx_ncs[1:] - 1] + by2 = np.maximum.reduceat(btmy, starts) + ty2 = np.minimum.reduceat(topy, starts) + + cpts_ut = [ + np.hstack((lftx[:, np.newaxis], btmy[:, np.newaxis])), + np.hstack((lftx[:, np.newaxis], topy[:, np.newaxis])), + np.hstack((rgtx[:, np.newaxis], topy[:, np.newaxis])), + np.hstack((rgtx[:, np.newaxis], btmy[:, np.newaxis])), + ] + mat = ((m00[widx], m01[widx], m02[widx]), (m10[widx], m11[widx], m12[widx])) + cpts_t = [ + np.vstack(vmult(mat, lftx, btmy)).T, + np.vstack(vmult(mat, lftx, topy)).T, + np.vstack(vmult(mat, rgtx, topy)).T, + np.vstack(vmult(mat, rgtx, btmy)).T, + ] + pts_ut = [ + np.vstack((lx2, by2)), + np.vstack((lx2, ty2)), + np.vstack((rx2, ty2)), + np.vstack((rx2, by2)), + ] + mat = ((m00, m01, m02), (m10, m11, m12)) + pts_t = [ + np.vstack(vmult(mat, lx2, by2)), + np.vstack(vmult(mat, lx2, ty2)), + np.vstack(vmult(mat, rx2, ty2)), + np.vstack(vmult(mat, rx2, by2)), + ] + + # pylint:disable=protected-access + # Split outputs into lists of column vectors + # maxerr = float('-inf') + for i, chk in enumerate(tws): + # Extract the slices of the relevant arrays for this TChunk + lxw = lftx[idx_ncs[i] : idx_ncs[i + 1], np.newaxis] + rxw = rgtx[idx_ncs[i] : idx_ncs[i + 1], np.newaxis] + byw = btmy[idx_ncs[i] : idx_ncs[i + 1], np.newaxis] + tyw = topy[idx_ncs[i] : idx_ncs[i + 1], np.newaxis] + + chk._charpos = (lxw, rxw, byw, tyw, lx2[i], rx2[i], by2[i], ty2[i]) + chk._cpts_ut = [cpv[idx_ncs[i] : idx_ncs[i + 1], :] for cpv in cpts_ut] + chk._cpts_t = [cpv[idx_ncs[i] : idx_ncs[i + 1], :] for cpv in cpts_t] + chk._pts_ut = [ + (float(pts_ut[0][0][i]), float(pts_ut[0][1][i])), + (float(pts_ut[1][0][i]), float(pts_ut[1][1][i])), + (float(pts_ut[2][0][i]), float(pts_ut[2][1][i])), + (float(pts_ut[3][0][i]), float(pts_ut[3][1][i])), + ] + chk._pts_t = [ + (float(pts_t[0][0][i]), float(pts_t[0][1][i])), + (float(pts_t[1][0][i]), float(pts_t[1][1][i])), + (float(pts_t[2][0][i]), float(pts_t[2][1][i])), + (float(pts_t[3][0][i]), float(pts_t[3][1][i])), + ] + + for j, c in enumerate(chk.chrs): + c.parsed_pts_ut = [ + (float(chk._cpts_ut[0][j][0]), float(chk._cpts_ut[0][j][1])), + (float(chk._cpts_ut[1][j][0]), float(chk._cpts_ut[1][j][1])), + (float(chk._cpts_ut[2][j][0]), float(chk._cpts_ut[2][j][1])), + (float(chk._cpts_ut[3][j][0]), float(chk._cpts_ut[3][j][1])), + ] + c.parsed_pts_t = [ + (float(chk._cpts_t[0][j][0]), float(chk._cpts_t[0][j][1])), + (float(chk._cpts_t[1][j][0]), float(chk._cpts_t[1][j][1])), + (float(chk._cpts_t[2][j][0]), float(chk._cpts_t[2][j][1])), + (float(chk._cpts_t[3][j][0]), float(chk._cpts_t[3][j][1])), + ] + # pylint:enable=protected-access + + def make_next_chain(self): + for pt in self: + pt.make_next_chain() + + +def vmult(mat, x, y): + """Multiplies mat times (x;y) in a way compatible with vectorization""" + return ( + mat[0][0] * x + mat[0][1] * y + mat[0][2], + mat[1][0] * x + mat[1][1] * y + mat[1][2], + ) + + +def vmultinv(mat, x, y): + """Performs inverse matrix multiplication with vectors.""" + det = mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0] + inv_det = 1 / det + sxv = x - mat[0][2] + syv = y - mat[1][2] + return ( + (mat[1][1] * sxv - mat[0][1] * syv) * inv_det, + (mat[0][0] * syv - mat[1][0] * sxv) * inv_det, + ) + + +class ParsedText: + """A text element that has been parsed into a list of lines""" + + def __init__(self, elem, ctable): + """Initializes ParsedText with an element and a character table.""" + self.ctable = ctable + self.textel = elem + + sty = elem.cspecified_style + self.isflow = ( + elem.tag == FRtag + or (elem.croot is not None and sty.get_link("shape-inside", elem.croot) is not None) + or ipx(sty.get("inline-size")) + ) + self._tree = None + self.dchange, self.writtendx, self.writtendy = [None] * 3 + self.achange = False + if DEPATHOLOGIZE: + remove_position_overflows(elem) + if self.isflow: + self.parse_lines_flow() + else: + self.parse_lines() + self.finish_lines() + + tlvllns = [ + line for line in self.lns if line.tlvlno is not None and line.tlvlno > 0 + ] + # top-level lines after 1st + self.isinkscape = ( + all(line.sprl for line in tlvllns) + and len(tlvllns) > 0 + and all( + line.style.get("-inkscape-font-specification") is not None + for line in self.lns + ) + ) + # probably made in Inkscape + self.ismlinkscape = self.isinkscape and len(self.lns) > 1 + # multi-line Inkscape + + def duplicate(self): + """Duplicates a PT and its text without reparsing""" + ret = copy(self) + ret.textel = self.textel.duplicate() + ret.tree = None + cmemo = dict(zip(self.tree.dds, ret.tree.dds)) + + ret.lns = [] + for line in self.lns: + if len(line.chrs) == 0: + continue + ret_ln = line.copy(cmemo) + ret_ln.ptxt = ret + ret.lns.append(ret_ln) + + # nextw et al. could be from any line, update after copying + for ret_ln in ret.lns: + for ret_w in ret_ln.chks: + ret_w.nextw = cmemo.get(ret_w.nextw) + ret_w.prevw = cmemo.get(ret_w.prevw) + ret_w.prevsametspan = cmemo.get(ret_w.prevsametspan) + return ret + + def txt(self): + """Returns the text content of the parsed lines.""" + return [line.txt() for line in self.lns] + + def reparse(self): + """Reparses the text element.""" + self.__init__(self.textel, self.ctable) + + @property + def chrs(self): + """Returns a list of characters in the parsed lines.""" + return [c for line in self.lns for c in line.chrs] + + def parse_lines(self, srcsonly=False): + """ + Every text element in an SVG can be thought of as a group of lines. + A line is a collection of text that gets its position from a single + source element. This position may be directly set, continued from a + previous line, or inherited from a previous line. + """ + elem = self.textel + # First we get the tree structure of the text and do all our gets + dds, pts, pdict = self.tree.dds, self.tree.ptails, self.tree.pdict + + numd = len(dds) + kids = list(elem) + text = [ddv.text for ddv in dds] + ptail = [[tel.tail for tel in ptv] for ptv in pts] # preceding tails + + # Next we find the top-level sodipodi:role lines + xvs = [ParsedText.get_xy(ddv, "x") for ddv in dds] + yvs = [ParsedText.get_xy(ddv, "y") for ddv in dds] + dxvs = [ParsedText.get_xy(ddv, "dx") for ddv in dds] + dyvs = [ParsedText.get_xy(ddv, "dy") for ddv in dds] + nsprl = {ddv:ddv.get("sodipodi:role")=='line' for ddv in dds} + + # Find effective sprls (ones that are not disabled) + esprl = [False]*len(dds) + for i, ddv in enumerate(dds): + esprl[i] = nsprl[ddv] and len(xvs[i]) == 1 and len(yvs[i]) == 1 and dds[i] in kids + + # If I don't have text and any descendants have position, disables spr:l + if esprl[i] and (text[i] == "" or text[i] is None): + dstop = [j for j in range(len(pts)) if dds[i] in pts[j]][0] + # should exist + for ddi in range(i + 1, dstop): + if xvs[ddi][0] is not None or yvs[ddi][0] is not None: + if text[ddi] is not None and text[ddi] != "": + esprl[i] = False + + if DEPATHOLOGIZE and not srcsonly: + # Prune any sodipodi:roles that are inactive + for ii, d in enumerate(dds): + if not esprl[ii] and nsprl[d]: + d.set('sodipodi:role',None) + nsprl[d] = False + + # Figure out which effective sprls are top-level + types = [None] * len(dds) + for i,ddv in enumerate(dds): + if not esprl[i]: + types[i] = NORMAL + elif len(ptail[i]) > 0 and ptail[i][-1] is not None: + types[i] = PRECEDEDSPRL + elif dds[i] == kids[0] and text[0] is not None: # and len(text[0])>0: + # 2022.08.17: I am not sure if the len(text[0])==0 condition + # should be included. Inkscape prunes text='', so not relevant + # most of the time. It does seem to make a difference though. + types[i] = PRECEDEDSPRL + else: + types[i] = TLVLSPRL + + # Position has a property of bidirectional inheritance. A tspan can inherit + # position from its parent or its descendant unless there is text in between. + # Down-inheritance requires that text be present + # Aborts if a sprl is encountered + def inherits_from(iin): + jmax = iin + while ( + jmax < numd - 1 + and text[jmax] in ["", None] + and pdict[dds[jmax + 1]] == dds[jmax] + and not (esprl[jmax + 1]) + ): + jmax += 1 + if jmax < numd - 1 and text[jmax] in ["", None]: + jmax = iin + + jmin = iin + while ( + jmin > 0 + and text[jmin - 1] in ["", None] + and dds[jmin - 1] == pdict[dds[jmin]] + and not (esprl[jmin - 1]) + ): + jmin -= 1 + return jmin, jmax # includes endpoints + + def inherit_none(iin, xyt): + if xyt[iin][0] is None: + imin, imax = inherits_from(iin) + vld = [i for i in range(imin, imax + 1) if xyt[i][0] is not None] + if len(vld) > 0: + if any(i <= iin for i in vld): + vld = [i for i in vld if i <= iin] + # inherit up if possible + dist = [abs(i - iin) for i in vld] + j = [vld[i] for i in range(len(vld)) if dist[i] == min(dist)][0] + return xyt[j], dds[j] + return xyt[iin], dds[iin] + + # For positions that are None, inherit from ancestor/descendants if possible + ixs, iys = xvs[:], yvs[:] + xsrcs, ysrcs = dds[:], dds[:] + + for i in [i for i in range(0, len(dds)) if ixs[i][0] is None]: + ixs[i], xsrcs[i] = inherit_none(i, xvs) + for i in [i for i in range(0, len(dds)) if iys[i][0] is None]: + iys[i], ysrcs[i] = inherit_none(i, yvs) + + if ixs[0][0] is None: + ixs[0] = [0] # at least the parent needs a position + if iys[0][0] is None: + iys[0] = [0] + + # Finally, walk the text tree generating lines + lns = [] + if not srcsonly: + self.lns = [] + sprl_inherits = None + for ddi, typ, tel, sel, txt in self.tree.dgenerator(): + newsprl = typ == TYP_TEXT and types[ddi] == TLVLSPRL + + if (txt is not None and len(txt) > 0) or newsprl: + sty = sel.cspecified_style + ctf = sel.ccomposed_transform + fsz, scf, utfs = composed_width(sel, "font-size") + + if newsprl: + lht = max( + composed_lineheight(sel), composed_lineheight(sel.getparent()) + ) + + # Make a new line if we're sprl or if we have a new x or y + makeline = len(lns) == 0 + makeline |= typ == TYP_TEXT and ( + newsprl + or ( + types[ddi] == NORMAL + and (ixs[ddi][0] is not None or iys[ddi][0] is not None) + ) + ) + if makeline: + edi = ddi + if typ == TYP_TAIL: + edi = dds.index(sel) + xvl = ixs[edi] + xsrc = xsrcs[edi] + yvl = iys[edi] + ysrc = ysrcs[edi] + if newsprl: + if len(lns) == 0: + xvl = [ixs[0][0]] + xsrc = xsrcs[0] + yvl = [iys[0][0]] + ysrc = ysrcs[0] + else: + xvl = [sprl_inherits.x[0]] + xsrc = sprl_inherits.xsrc + yvl = [sprl_inherits.y[0] + lht / scf] + ysrc = sprl_inherits.ysrc + issprl = True + continuex = False + continuey = False + else: + continuex = False + issprl = False + if xvl[0] is None: + if len(lns) > 0: + xvl = lns[-1].x[:] + xsrc = lns[-1].xsrc + else: + xvl = ixs[0][:] + xsrc = xsrcs[0] + continuex = True + continuey = False + if yvl[0] is None: + if len(lns) > 0: + yvl = lns[-1].y[:] + ysrc = lns[-1].ysrc + else: + yvl = iys[0][:] + ysrc = ysrcs[0] + continuey = True + + if srcsonly: # quit and return srcs of first line + return xsrc, ysrc + + tlvlno = None + if ddi < numd and dds[ddi] in kids: + tlvlno = kids.index(dds[ddi]) + elif edi == 0: + tlvlno = 0 + + anch = sty.get("text-anchor") + if len(lns) > 0 and not nsprl[sel] and edi>0: + if lns[-1].anchor is not None: + anch = lns[ + -1 + ].anchor # non-spr lines inherit the previous line's anchor + if anch is None: + anch = "start" + txtdir = sty.get("direction") + if txtdir is not None: + if txtdir == "rtl": + if anch == "start": + anch = "end" + elif anch == "end": + anch = "start" + + sprlabove = [] + cel = dds[edi] + while cel != elem: + if nsprl[cel]: + sprlabove.append(cel) + cel = pdict[cel] + + lns.append( + TLine( + self, + xvl, + yvl, + xsrc, + ysrc, + issprl, + sprlabove, + anch, + ctf, + tlvlno, + sty, + continuex, + continuey, + ) + ) + + if newsprl or len(lns) == 1: + sprl_inherits = lns[-1] + + fsty = font_style(sty) + tsty = true_style(fsty) + if txt is not None: + if typ==TYP_TEXT: + dxv = dxvs[ddi] + dyv = dyvs[ddi] + if dxv[0] is None: + dxv = [0]*len(txt) + else: + dxv = dxv + [0]*(len(txt)-len(dxv)) + if dyv[0] is None: + dyv = [0]*len(txt) + else: + dyv = dyv + [0]*(len(txt)-len(dyv)) + else: + dxv = [0]*len(txt) + dyv = [0]*len(txt) + + + for j, c in enumerate(txt): + csty = self.font_picker(txt, j, fsty, tsty) + prop = self.ctable.get_prop(c, csty) + _ = TChar( + c, + fsz, + utfs, + prop, + sty, + csty, + CLoc(tel, typ, j), + lns[-1], dxv[j], dyv[j] + ) + + if j == 0: + lsp0 = lns[-1].chrs[-1].lsp + bshft0 = lns[-1].chrs[-1].bshft + else: + lns[-1].chrs[-1].lsp = lsp0 + lns[-1].chrs[-1].bshft = bshft0 + + self.lns = lns + + def finish_lines(self): + """Finalizes the parsed lines by calculating deltas and chunks.""" + if self.lns is not None: + self.writtendx = any(c.dx != 0 for c in self.chrs) + self.writtendy = any(c.dy != 0 for c in self.chrs) + + for line in self.lns: + line.ptxt = self + line.parse_chunks() + + for line in reversed(self.lns): + if len(line.chrs) == 0: + self.lns.remove(line) + # prune empty lines + + def make_next_chain(self): + """ For manual kerning removal, assign next and previous chunks """ + yvs = [ + line.y[0] for line in self.lns if line.y is not None and len(line.y) > 0 + ] + tol = 0.001 + for unqy in uniquetol(yvs, tol): + samey = [ + self.lns[i] + for i in range(len(self.lns)) + if abs(yvs[i] - unqy) < tol + ] + sameyws = [chk for line in samey for chk in line.chks] + xvs = [0.5*(chk.pts_ut[0][0] + chk.pts_ut[3][0]) for line in samey for chk in line.chks] + sws = [ + x for _, x in sorted(zip(xvs, sameyws), key=lambda pair: pair[0]) + ] # chunks sorted in ascending x + for i in range(1, len(sws)): + # Account for space import bug where space has same position as prior char + if sws[i - 1].txt==' ' and abs(sws[i - 1].pts_ut[0][0]-sws[i].pts_ut[0][0])<.01*sws[i - 1].spw: + sws[i-1:i+1] = [sws[i],sws[i-1]] + for i in range(1, len(sws)): + sws[i - 1].nextw = sws[i] + sws[i].prevw = sws[i - 1] + sws[i].prevsametspan = ( + sws[i - 1].chrs[-1].loc.sel == sws[i].chrs[0].loc.sel + ) + + def font_picker(self, txt, j, fsty, tsty): + """Determine what font Inkscape will render a character as""" + if txt[j] != " ": + # Most of the time we want the true style of the text. When this is + # determined by Pango measurement, this practically always matches + # Inkscape's font selection + return tsty + # If the character is a space and the surrounding characters are + # missing from the true style, Pango will replace the space with a + # space from the missing characters' font + lbc = next((txt[i] for i in range(j - 1, -1, -1) if txt[i].strip()), None) + fac = next((txt[i] for i in range(j + 1, len(txt)) if txt[i].strip()), None) + if ( + lbc is not None + and fac is not None + and self.ctable.cstys[fsty][lbc] == self.ctable.cstys[fsty][fac] + ): + return self.ctable.cstys[fsty][lbc] + if lbc is None and fac is not None: + return self.ctable.cstys[fsty][fac] + if fac is None and lbc is not None: + return self.ctable.cstys[fsty][lbc] + return tsty + # Good fonts to check: + # MS Outlook : missing most characters, but has a space + # Marlett : charset doesn't have a space character, but somehow Pango + # is finding one different from the one provided by + # fontconfig's font_sort fallback + + def strip_sodipodi_role_line(self): + """Strip every sodipodi:role line from an element without changing + positions""" + if any(ddv.get("sodipodi:role") == "line" for ddv in self.tree.dds): + # Store old positions + oxs = [c.pts_ut[0][0] for line in self.lns for c in line.chrs] + oys = [c.pts_ut[0][1] for line in self.lns for c in line.chrs] + odxs = [c.dx for line in self.lns for c in line.chrs] + odys = [c.dy for line in self.lns for c in line.chrs] + _ = [ddv.set("sodipodi:role", None) for ddv in self.tree.dds] + + pput = [c.parsed_pts_ut for line in self.lns for c in line.chrs] + ppt = [c.parsed_pts_t for line in self.lns for c in line.chrs] + + deleteempty(self.textel) + self.reparse() + ii = 0; + for line in self.lns: + for c in line.chrs: + c.parsed_pts_ut = pput[ii] + c.parsed_pts_t = ppt[ii] + ii += 1 + + # Correct the position of the first character + chrs = [c for line in self.lns for c in line.chrs] + for i, line in enumerate(self.lns): + myi = chrs.index(line.chrs[0]) + dx = oxs[myi] - chrs[myi].pts_ut[0][0] + dy = oys[myi] - chrs[myi].pts_ut[0][1] + if abs(dx) > 0.001 or abs(dy) > 0.001: + newxv = [x + dx for x in line.x] + newyv = [y + dy for y in line.y] + if line.continuex or line.continuey: + if line.chrs[0].loc.typ == TYP_TAIL: + # wrap in a trivial Tspan so we can set x and y + line.chrs[0].add_style( + {"baseline-shift": "0%"}, setdefault=False + ) + line.xsrc = line.chrs[0].loc.elem + line.ysrc = line.chrs[0].loc.elem + line.continuex = False + line.continuey = False + line.write_xy(newx=newxv, newy=newyv) + + # Fix non-first dxs + ndxs = [c.dx for line in self.lns for c in line.chrs] + ndys = [c.dy for line in self.lns for c in line.chrs] + for i, c in enumerate(chrs): + if c.lnindex > 0: + if abs(odxs[i] - ndxs[i]) > 0.001 or abs(odys[i] - ndys[i]) > 0.001: + c.dx = odxs[i] + c.dy = odys[i] + self.write_dxdy() + for line in self.lns: + for chk in line.chks: + chk.charpos = None + + def strip_text_baseline_shift(self): + """Remove baseline-shift if applied to the whole element""" + if "baseline-shift" in self.textel.cspecified_style: + if len(self.lns) > 0 and len(self.lns[0].chrs) > 0: + lny = self.lns[0].y[:] + bsv = self.lns[0].chrs[0].bshft + self.textel.cstyle["baseline-shift"] = None + self.reparse() + newy = [y - bsv for y in lny] + self.lns[0].write_xy(newy=newy) + + @staticmethod + def get_xy(elem, xyt): + """Gets the x or y coordinate values from an element.""" + val = EBget(elem, xyt) # fine for 'x','y','dx','dy' + if not val: + return [None] # None forces inheritance + return [None if x == "none" else ipx(x) for x in val.split()] + + def write_dxdy(self): + """ + After dx/dy has changed, call this to write them to the text element + For simplicity, this is best done at the ParsedText level all at once + """ + if self.dchange: + # Group characters by location + cs_loc = {(d,typ):[] for d in self.textel.descendants2() for typ in [TYP_TEXT,TYP_TAIL]} + for ln in self.lns: + for c in ln.chrs: + cs_loc[c.loc.elem,c.loc.typ].append(c) + + for (d, typ), cd in cs_loc.items(): + dx = [c.dx for c in cd] + dy = [c.dy for c in cd] + + dxset = trim_list(dx,0) + dyset = trim_list(dy,0) + + if typ==TYP_TAIL and (dxset is not None or dyset is not None): + d = wrap_string(d,typ) + self.tree = None # invalidate + typ = TYP_TEXT + for c in cd: + c.loc = CLoc(d,TYP_TEXT,c.loc.ind) + + if typ==TYP_TEXT: + xyset(d,"dx",dxset) + xyset(d,"dy",dyset) + + for chk in [chk for line in self.lns for chk in line.chks]: + chk.charpos = None + + self.writtendx = any(c.dx != 0 for c in self.chrs) + self.writtendy = any(c.dy != 0 for c in self.chrs) + self.dchange = False + + def write_axay(self): + """ + After dx/dy has changed, call this to write them to the text element + For simplicity, this is best done at the ParsedText level all at once + """ + if self.achange: + # Group characters by location + cs_loc = {(d,typ):[] for d in self.textel.descendants2() for typ in [TYP_TEXT,TYP_TAIL]} + for ln in self.lns: + for c in ln.chrs: + cs_loc[c.loc.elem,c.loc.typ].append(c) + + for (d, typ), cd in cs_loc.items(): + ax = [c.ax for c in cd] + ay = [c.ay for c in cd] + + axset = trim_list(ax,None) + ayset = trim_list(ay,None) + if ayset is not None and all(ayset[0]==ayv for ayv in ayset): + ayset = ayset[0:1] + + if typ==TYP_TAIL and (axset is not None or ayset is not None): + d = wrap_string(d,typ) + self.tree = None # invalidate + typ = TYP_TEXT + for c in cd: + c.loc = CLoc(d,TYP_TEXT,c.loc.ind) + + if typ==TYP_TEXT: + # When an x/y ends in Nones they can be trimmed off, but when + # they have internal Nones the string must be split + if (axset is not None and None in axset) or (ayset is not None and None in ayset): + span = inkex.Tspan if d.tag in TEtags else inkex.FlowSpan + sx = [i+1 for i,v in enumerate(axset[:-1]) if v is None and axset[i+1] is not None] + sy = [i+1 for i,v in enumerate(ayset[:-1]) if v is None and ayset[i+1] is not None] + sidx = sorted(sx+sy) + ranges = [(sidx[i-1] if i > 0 else 0, sidx[i] if i < len(sidx) else len(cd)) for i in range(len(sidx) + 1)] + txt = d.text + d.text = None + for k,(r1,r2) in enumerate(reversed(ranges)): + t = span() if k 0: + cel = line.chrs[0].loc.elem + while cel != elem and cel.getparent() != elem: + cel = cel.getparent() + tlvl = cel + + xyset(tlvl.getparent(), "x", line.x) + xyset(tlvl.getparent(), "y", line.y) + + tlvl.set("sodipodi:role", "line") + # reenable sodipodi so we can insert returns + + if self.writtendx or self.writtendy: + for i, chrv in enumerate(self.lns[0].chrs): + chrv.dx = olddx[i] + chrv.dy = olddy[i] + self.dchange = True + # may have deleted spr lines + + # For single lines, reset line-height to default + changed_styles = dict() + if len(self.lns) == 1: + for ddv in elem.descendants2(): + if "line-height" in ddv.cstyle: + changed_styles[ddv] = ddv.cstyle + del changed_styles[ddv]["line-height"] + + if len(self.chrs) > 0: + # Clear all fonts and only apply to relevant Tspans + + for ddv in elem.descendants2(): + sty = changed_styles.get(ddv, ddv.cstyle) + for key in [ + "font-family", + "font-stretch", + "font-weight", + "font-style", + "-inkscape-font-specification", + ]: + if key in sty: + del sty[key] + changed_styles[ddv] = sty + + for c in self.chrs: + sty = changed_styles.get(c.loc.sel, c.loc.sel.cstyle) + sty.update(c.fsty) + changed_styles[c.loc.sel] = sty + + # Put the first char's font at top since that's what Inkscape displays + # sty = Style(tuple(elem.cstyle.items())) + sty = changed_styles.get(elem, elem.cstyle) + sty.update(self.chrs[0].fsty) + changed_styles[elem] = sty + + # Try to set nominal font size to max value + # (value used by line-height, what Inkscape reports, etc.) + fs_origins = set() + for c in self.chrs: + cel = c.loc.sel + fs_origins.add(cel) + celstyle = changed_styles.get(cel, cel.cstyle) + while ( + ("font-size" in celstyle and "%" in str(celstyle["font-size"])) + or ("font-size" not in celstyle) + ) and cel is not elem: + cel = cel.getparent() + fs_origins.add(cel) + celstyle = changed_styles.get(cel, cel.cstyle) + if elem not in fs_origins and ( + len(self.lns) == 1 or all(not line.sprl for line in self.lns[1:]) + ): + sty = changed_styles.get(elem, elem.cstyle) + maxsize = max([c.utfs for c in self.chrs]) + if "font-size" not in sty or sty["font-size"] != maxsize: + sty["font-size"] = str(max([c.utfs for c in self.chrs])) + changed_styles[elem] = sty + for k, val in changed_styles.items(): + k.cstyle = val + + def split_off_chunks(self, chks): + """Splits off specified chunks of text into a new element.""" + return self.split_off_characters([c for chk in chks for c in chk.chrs]) + + def split_off_characters(self, chrs): + """Splits off specified characters into a new element.""" + npt = self.duplicate() + newtxt = npt.textel + + # Record position + cs1 = [c for ln in self.lns for c in ln.chrs] + cs2 = [c for ln in npt.lns for c in ln.chrs] + dmemo = dict(zip(cs1,cs2)) + + ps1 = {c:c.pts_ut[0] for c in cs1} + ps2 = {c:c.pts_ut[0] for c in cs2} + ds = {c:(c.dx,c.dy) for c in cs2} + fc = dmemo[chrs[0]] + + + # chars' line index + iln = self.lns.index(chrs[0].line) + ciis = [c.lnindex for c in chrs] # indexs of charsin line + + fusex = self.lns[iln].continuex or ciis[0] > 0 or ds[fc][0] != 0 + fusey = self.lns[iln].continuey or ciis[0] > 0 or ds[fc][1] != 0 + if fusex: + anfr = self.lns[iln].anchfrac + oldx = chrs[0].pts_ut[0][0] * (1 - anfr) + chrs[-1].pts_ut[3][0] * anfr + if fusey: + oldy = chrs[0].chk.y + ds[fc][1] + + for c in reversed(chrs): + c.delc(updatedelta=False) + + # Delete the other lines/chars in the copy + for il2 in reversed(range(len(npt.lns))): + if il2 != iln: + npt.lns[il2].dell() + else: + nln = npt.lns[il2] + for j in reversed(range(len(nln.chrs))): + if j not in ciis: + nln.chrs[j].delc(updatedelta=False) + + # Deletion of text can cause the srcs to be wrong. + # Reparse to find whereit is now + nln.xsrc, nln.ysrc = npt.parse_lines(srcsonly=True) + nln.write_xy(newx=nln.x, newy=nln.y) + nln.disablesodipodi(force=True) + if len(self.lns) > 0: + self.lns[0].xsrc, self.lns[0].ysrc = self.parse_lines(srcsonly=True) + self.lns[0].write_xy(newx=self.lns[0].x, newy=self.lns[0].y) + + if fusex: + nln.continuex = False + nln.write_xy(newx=[oldx]) + ds[fc] = (0,ds[fc][1]) + if fusey: + nln.continuey = False + nln.write_xy(newy=[oldy]) + ds[fc] = (ds[fc][0],0) + + + for ln in npt.lns: + for c in ln.chrs: + c.dx = ds[c][0] + c.dy = ds[c][1] + npt.write_dxdy() + + # In case there are some errors, correct with deltas + for pt, ps in [(self,ps1), (npt,ps2)]: + for ln in pt.lns: + for chk in ln.chks: + Deltax = [c.pts_ut[0][0] - ps[c][0] for c in chk.chrs] + Deltay = [c.pts_ut[0][1] - ps[c][1] for c in chk.chrs] + + if any(abs(d) > 0.001 for d in Deltax + Deltay): + for i in range(len(Deltax)): + if i == 0: + if ln.anchfrac == 0: + dx = Deltax[0] + dy = Deltay[0] + elif ln.anchfrac == 0.5: + dx = Deltax[0] + Deltax[-1] + dy = Deltay[0] + Deltay[-1] + else: + dx = 0 + dy = 0 + # right aligned: would not be able to compute + else: + dx = Deltax[i] - Deltax[i - 1] + dy = Deltay[i] - Deltay[i - 1] + chk.chrs[i].dx -= dx + chk.chrs[i].dy -= dy + pt.write_dxdy() + + newtxt._parsed_text = npt + return newtxt + + def delete_empty(self): + """Deletes empty elements from the doc. Generally this is done last""" + ocs_pts = [c.pts_t for c in self.chrs] + ocs_dx = [c.dx for c in self.chrs] + ocs_dy = [c.dy for c in self.chrs] + dltd = deleteempty(self.textel) + if dltd: + self.tree = None + self.reparse() + # Correct the position of the first character + chrs = [c for line in self.lns for c in line.chrs] + for i, line in enumerate(self.lns): + myi = chrs.index(line.chrs[0]) + dxt = ocs_pts[myi][0][0] - chrs[myi].pts_t[0][0] + dyt = ocs_pts[myi][0][1] - chrs[myi].pts_t[0][1] + + if abs(dxt) > 0.001 or abs(dyt) > 0.001: + oldpos = vmultinv(chrs[myi].line.transform.matrix, ocs_pts[myi][0][0], ocs_pts[myi][0][1]) + dltax = oldpos[0] - chrs[myi].pts_ut[0][0] + dltay = oldpos[1] - chrs[myi].pts_ut[0][1] + newxv = [x + dltax for x in line.x] + newyv = [y + dltay for y in line.y] + + if line.continuex or line.continuey: + if line.chrs[0].loc.typ == TYP_TAIL: + # wrap in a trivial Tspan so we can set x and y + line.chrs[0].add_style( + {"baseline-shift": "0%"}, setdefault=False + ) + line.xsrc = line.chrs[0].loc.elem + line.ysrc = line.chrs[0].loc.elem + line.continuex = False + line.continuey = False + line.write_xy(newx=newxv, newy=newyv) + + # Fix non-first dxs + ndxs = [c.dx for line in self.lns for c in line.chrs] + ndys = [c.dy for line in self.lns for c in line.chrs] + for i, c in enumerate(chrs): + if c.lnindex > 0: + if abs(ocs_dx[i] - ndxs[i]) > 0.001 or abs(ocs_dy[i] - ndys[i]) > 0.001: + c.dx = ocs_dx[i] + c.dy = ocs_dy[i] + self.write_dxdy() + for line in self.lns: + for chk in line.chks: + chk.charpos = None + + def fuse_fonts(self): + """ + For exporting, one usually wants to replace fonts with the actual font + that each character is rendered as. + + Other SVG renderers may only be able to use the font face name (i.e., + the fullname in fontconfig, which is the same name reported as Face in + Text and Font), so we make this the family name and add the true + family as a backup (with appropriate weight, width, and slant). + + For example, the ultra-bold variation of Arial has a face name of + Arial Black, while in Inkscape its CSS name is Arial Heavy. Therefore, + we would change its font-family to 'Arial Black','Arial'. + """ + # Collect all the fonts and how they are rendered + cstys = self.ctable.cstys + newfams = [] + for line in self.lns: + for c in line.chrs: + newfam = (c.fsty, c, c.loc.sel) + if c.c in cstys[c.fsty] and cstys[c.fsty][c.c] is not None: + csty = cstys[c.fsty][c.c] + fullname = fcfg.get_true_font_fullname(csty) + fontfam = csty["font-family"].strip("'") + fusefam = "'" + fullname + "','" + fontfam + "'" + fusesty = Style( + { + k: v if k != "font-family" else fusefam + for k, v in csty.items() + } + ) + if not c.fsty == fusesty: + newfam = (fusesty, c, c.loc.sel) + + newfams.append(newfam) + + # Make a dictionary whose keys are the elements whose styles we + # want to modify and whose values are (the new family, a list of characters) + # In descending order of the number of characters + torepl = {} + for csty, c, sel in newfams: + torepl.setdefault(sel, []).append((csty, c)) + for sel, value in torepl.items(): + count_dict = {} + for csty, c in value: + count_dict.setdefault(csty, []).append(c) + new_value = [] + for k, val in count_dict.items(): + new_tup = (k, val) + new_value.append(new_tup) + new_value.sort(key=lambda x: len(x[1]), reverse=True) + torepl[sel] = new_value + + # Replace fonts + for elem, rlst in torepl.items(): + # For the most common family, set the element style itself + if not font_style(elem.ccascaded_style) == rlst[0][0]: + elem.cstyle = elem.ccascaded_style + for k, val in rlst[0][0].items(): + elem.cstyle[k] = val + elem.cstyle["-inkscape-font-specification"] = None + for c in rlst[0][1]: + c.sty = elem.cstyle + # For less common, need to wrap in a new Tspan + for r in rlst[1:]: + for c in r[1]: + c.add_style( + { + "font-family": r[0]["font-family"], + "font-weight": r[0]["font-weight"], + "font-style": r[0]["font-style"], + "font-stretch": r[0]["font-stretch"], + "baseline-shift": "0%", + }, + setdefault=False, + ) + + def flow_to_text(self): + """Converts flowed text into normal text, returning the text els.""" + if self.isflow: + newtxts = [] + for line in reversed(self.lns): + nany = any(math.isnan(yvl) for yvl in line.y) + + anch = line.anchor + algn = {"start": "start", "middle": "center", "end": "end"}[anch] + + origx = None + if len(line.chrs) > 0: + origx = line.chrs[0].pts_ut[0][0] + + newtxt = self.split_off_characters(line.chrs) + if newtxt.tag == FRtag: + for ddv in newtxt.descendants2(): + if ddv.tag == FRtag: + ddv.tag = TextElement.ctag + elif isinstance(ddv, (FlowPara, FlowSpan)): + ddv.tag = TStag + elif isinstance(ddv, inkex.FlowRegion): + ddv.delete() + else: + newtxt.cstyle["shape-inside"] = None + newtxt.cstyle["inline-size"] = None + for k in list(newtxt): + k.cstyle["text-align"] = algn + k.cstyle["text-anchor"] = anch + + if nany: + newtxt.delete() + else: + deleteempty(newtxt) + npt = newtxt.parsed_text + if ( + origx is not None + and len(npt.lns) > 0 + and len(npt.lns[0].chrs) > 0 + ): + npt.reparse() + newx = [ + xvl + origx - npt.lns[0].chrs[0].pts_ut[0][0] + for xvl in npt.lns[0].x + ] + npt.lns[0].write_xy(newx) + newtxts.append(newtxt) + + self.textel.delete() + return newtxts + return [] + + # For debugging: make a rectange at all of the line's chunks' nominal extents + HIGHLIGHT_STYLE = "fill:#007575;fill-opacity:0.4675" # mimic selection + + def make_highlights(self, htype): + """Creates rectangles to highlight extents or bounding boxes.""" + if htype == "char": + exts = self.get_char_extents() + elif htype == "charink": + exts = self.get_char_inkbbox() + elif htype == "fullink": + exts = [self.get_full_inkbbox()] + elif htype == "chunk": + exts = self.get_chunk_extents() + elif htype == "line": + exts = self.get_line_extents() + elif htype == "chunkink": + exts = self.get_chunk_ink() + elif htype == "lineink": + exts = self.get_line_ink() + else: # 'all' + exts = [self.get_full_extent()] + for i, ext in enumerate(exts): + r = inkex.Rectangle() + r.set("x", ext.x1) + r.set("y", ext.y1) + r.set("height", ext.h) + r.set("width", ext.w) + r.set("transform", self.textel.ccomposed_transform) + sty = ( + ParsedText.HIGHLIGHT_STYLE + if i % 2 == 0 + else ParsedText.HIGHLIGHT_STYLE.replace("0.4675", "0.5675") + ) + r.set("style", sty) + self.textel.croot.append(r) + + def differential_to_absolute_kerning(self): + """ Converts any differential kerning to absolute kerning """ + if not self.isflow and any(c.dx!=0 for c in self.chrs): + for ln in self.lns: + ln.disablesodipodi() + for i,w in enumerate(ln.chks): + pts = [c.pts_ut for c in w.chrs] + for j, c in enumerate(w.chrs): + if c.dx != 0: + # Get last char in chunk without a dx + lc = next((j + idx for idx, c in enumerate(w.chrs[j+1:]) if c.dx != 0), len(w.chrs) - 1) + c.ax = pts[j][0][0] * (1 - ln.anchfrac) + pts[lc][3][0] * ln.anchfrac + c.dx = 0 + else: + c.ax = w.x if j==0 else None + + if c.dy !=0: + c.ay = pts[j][0][1] + c.dy = 0 + else: + c.ay = w.y if j==0 else None + self.write_dxdy() + self.write_axay() + + ptsut = [c.parsed_pts_ut for c in self.chrs] + ptst = [c.parsed_pts_t for c in self.chrs] + self.reparse() + for i, c in enumerate(self.chrs): + c.parsed_pts_ut = ptsut[i] + c.parsed_pts_t = ptst[i] + + # Bounding box functions + def get_char_inkbbox(self): + """Gets the untransformed bounding boxes of all characters' ink.""" + exts = [] + if self.lns is not None and len(self.lns) > 0 and self.lns[0].xsrc is not None: + for line in self.lns: + for chk in line.chks: + for c in chk.chrs: + pt1 = c.pts_ut_ink[0] + pt2 = c.pts_ut_ink[2] + if not math.isnan(pt1[1]): + exts.append(bbox((pt1, pt2))) + return exts + + def get_full_inkbbox(self): + """Gets the untransformed bounding box of the whole element.""" + ext = bbox(None) + if self.lns is not None and len(self.lns) > 0 and self.lns[0].xsrc is not None: + for line in self.lns: + for chk in line.chks: + for c in chk.chrs: + pt1 = c.pts_ut_ink[0] + pt2 = c.pts_ut_ink[2] + ext = ext.union(bbox((pt1, pt2))) + return ext + + # Extent functions + def get_char_extents(self): + """Gets the untransformed extent of each character.""" + exts = [] + if self.lns is not None and len(self.lns) > 0 and self.lns[0].xsrc is not None: + for line in self.lns: + for chk in line.chks: + for c in chk.chrs: + pt1 = c.pts_ut[0] + pt2 = c.pts_ut[2] + if not math.isnan(pt1[1]): + exts.append(bbox((pt1, pt2))) + return exts + + def get_chunk_extents(self): + """Gets the untransformed extent of each chunk.""" + exts = [] + if self.lns is not None and len(self.lns) > 0 and self.lns[0].xsrc is not None: + for line in self.lns: + for chk in line.chks: + pt1 = chk.pts_ut[0] + pt2 = chk.pts_ut[2] + if not math.isnan(pt1[1]): + exts.append(bbox((pt1, pt2))) + return exts + + def get_line_extents(self): + """Gets the untransformed extent of each line.""" + exts = [] + if self.lns is not None and len(self.lns) > 0 and self.lns[0].xsrc is not None: + for line in self.lns: + extln = bbox(None) + for chk in line.chks: + pt1 = chk.pts_ut[0] + pt2 = chk.pts_ut[2] + if not math.isnan(pt1[1]): + extln = extln.union(bbox((pt1, pt2))) + if not (extln.isnull): + exts.append(extln) + return exts + + def get_chunk_ink(self): + """Gets the untransformed extent of each chunk's ink.""" + exts = [] + if self.lns is not None and len(self.lns) > 0 and self.lns[0].xsrc is not None: + for line in self.lns: + for chk in line.chks: + ext = bbox(None) + for c in chk.chrs: + pt1 = c.pts_ut_ink[0] + pt2 = c.pts_ut_ink[2] + ext = ext.union(bbox((pt1, pt2))) + exts.append(ext) + return exts + + def get_line_ink(self): + """Gets the untransformed extent of each line's ink.""" + exts = [] + if self.lns is not None and len(self.lns) > 0 and self.lns[0].xsrc is not None: + for line in self.lns: + ext = bbox(None) + for c in line.chrs: + pt1 = c.pts_ut_ink[0] + pt2 = c.pts_ut_ink[2] + ext = ext.union(bbox((pt1, pt2))) + exts.append(ext) + return exts + + def get_full_extent(self, parsed=False): + """ + Gets the untransformed extent of the whole element. + parsed=True gets original prior to any mods + """ + ext = bbox(None) + if self.lns is not None and len(self.lns) > 0 and self.lns[0].xsrc is not None: + for line in self.lns: + for chk in line.chks: + for c in chk.chrs: + pts = ( + c.parsed_pts_ut + if parsed and c.parsed_pts_ut is not None + else c.pts_ut + ) + pt1 = pts[0] + pt2 = pts[2] + if not math.isnan(pt1[1]): + ext = ext.union(bbox((pt1, pt2))) + return ext + + @property + def tree(self): + """Returns the text tree of the element.""" + if self._tree is None: + self._tree = TextTree(self.textel) + return self._tree + + @tree.setter + def tree(self, val): + """Sets the text tree of the element.""" + if val is None: + self._tree = None + + def parse_lines_flow(self): + """ + Parses lines of flowed text. + For non-rectangular flow regions, uses svgpathtools to find where + lines are drawn (this is imported conditionally). + """ + self.lns = [] + sty = self.textel.cspecified_style + isflowroot = self.textel.tag == FRtag + isshapeins = ( + self.textel.tag == TEtag + and sty.get_link("shape-inside", self.textel.croot) is not None + ) + isz = ipx(sty.get("inline-size")) + isinlinesz = self.textel.tag == TEtag and isz + # Inkscape ignores 0 and invalid inline-size + + # Determine the flow region + otp_support = self.textel.otp_support_prop + if isshapeins: + frgn = sty.get_link("shape-inside", self.textel.croot) + dfr = frgn.duplicate() + + # Fuse transform to path + dfr.object_to_path() + dfr.set("d", str(dfr.cpath.transform(dfr.ctransform))) + dfr.cpath = None + dfr.ctransform = None + + # shape transform fused on path (not composed transform though) + self.textel.append(dfr) + region = dfr + # Find the bbox of the FlowRegion + elif isflowroot: + for ddv in self.textel.descendants2(): + if isinstance(ddv, FlowRegion): + pths = [p for p in ddv.descendants2() if p.tag in otp_support] + if len(pths) > 0: + region = pths[0] + elif isinlinesz: + # Make a Rectangle and treat it as the flow region + r = inkex.Rectangle() + _, ysrc = self.parse_lines(srcsonly=True) + iszx = self.textel.get("x") + iszy = self.textel.get("y", ysrc.get("y")) + + afr = get_anchorfrac(sty.get("text-anchor")) + r.set("x", -isz * afr) # pylint:disable=invalid-unary-operand-type + r.set("y", 0) + r.set("height", isz) + r.set("width", isz) + self.textel.croot.append(r) + region = r + + padding = ipx(self.textel.cspecified_style.get("shape-padding", "0")) + isrect = isrectangle(region, includingtransform=False) + + usesvt = not isrect and region.tag in otp_support and padding == 0 + if not isrect and not usesvt: + # Flow region we cannot yet handle, parse as normal text + # This works as long as the SVG1.1 fallback is being used + self.isflow = False + return self.parse_lines() + if usesvt: + region.object_to_path() + import svgpathtools as spt # pylint: disable=import-error, import-outside-toplevel + + sptregion = spt.parse_path(region.get("d")) + if not sptregion.isclosed(): + end = sptregion[-1].end + start = sptregion[0].start + sptregion.append(spt.Line(end, start)) + sptregion.closed = True + + bbx = region.cpath.bounding_box() + bbx = [bbx.left, bbx.top, bbx.width, bbx.height] + if not padding == 0: + bbx = [ + bbx[0] + padding, + bbx[1] + padding, + bbx[2] - 2 * padding, + bbx[3] - 2 * padding, + ] + + # Delete duplicate + if isshapeins: + dfr.delete() + elif isinlinesz: + r.delete() + + def height_above_below_baseline(elem): + lht = composed_lineheight(elem) + lsty = true_style(elem.cspecified_style) + fsz, scf, _ = composed_width(elem, "font-size") + + absp = (0.5000 * (lht / fsz - 1) + CharacterTable.flowy(lsty)) * ( + fsz / scf + ) # spacing above baseline + bbsp = (0.5000 * (lht / fsz - 1) + 1 - CharacterTable.flowy(lsty)) * ( + fsz / scf + ) # spacing below baseline + rawfs = fsz / scf + return absp, bbsp, rawfs + + # Get the properties of the FlowRoot + rabsp, rbbsp, rfs = height_above_below_baseline(self.textel) + rpct = ( + "line-height" in self.textel.cspecified_style + and "%" in self.textel.cspecified_style["line-height"] + ) + if rpct: + pctage = float(self.textel.cspecified_style["line-height"].strip("%")) + + # Group characters into lines + lns = [] + fparas = [ + k for k in list(self.textel) if isinstance(k, FlowPara) + ] # top-level FlowParas + for ddi, typ, tel, sel, txt in self.tree.dgenerator(): + if txt is not None and len(txt) > 0: + if isflowroot: + lnno = [ + i + for i, fpv in enumerate(fparas) + if fpv in tel.ancestors2(includeme=True) + ] + if len(lnno) == 0: + lnno = 0 + else: + lnno = lnno[0] + # tails of a FlowPara belong to the next line + if tel == fparas[lnno] and typ == TYP_TAIL: + lnno += 1 + else: + # Note: Tspans don't do anything in SVG2 flows + lnno = 0 + + # Determine above- and below-baseline lineheight + sty = sel.cspecified_style + ctf = sel.ccomposed_transform + fsz, scf, utfs = composed_width(sel, "font-size") + absp, bbsp, mrfs = height_above_below_baseline(sel) + lsty = true_style(sel.cspecified_style) + fabsp = max(rabsp, absp) + fbbsp = max(rbbsp, bbsp) + + # Inkscape has a bug when the FlowRoot has a line-height + # specified as a percentage and the FlowPara doesn't have one + # specified. Account for this + anc = sel.ancestors2(includeme=True, stopbefore=self.textel) + if rpct and all("line-height" not in a.cstyle for a in anc): + if rbbsp > bbsp: + fbbsp += (CharacterTable.flowy(lsty) - 0.5) * (rfs - mrfs) + if absp > rabsp: + fabsp -= (0.5 * (pctage / 100)) * (mrfs - rfs) + fbbsp -= ( + 0.5 * (pctage / 100) - (CharacterTable.flowy(lsty) - 0.5) + ) * (mrfs - rfs) + + if lnno >= len(lns): + algn = sty.get("text-align", "start") + anch = sty.get("text-anchor", "start") + if not algn == "start" and anch == "start": + anch = {"start": "start", "center": "middle", "end": "end"}[ + algn + ] + cln = TLine( + self, + [0], + [0], + self.textel, + self.textel, + False, + [], + anch, + ctf, + None, + sty, + False, + False, + ) + lns.append(cln) + cln.broken = False + cln.effabsp = fabsp + cln.effbbsp = fbbsp + else: + cln = lns[lnno] + + if typ==TYP_TEXT: + dxv = ParsedText.get_xy(self.tree.dds[ddi],'dx') + dyv = ParsedText.get_xy(self.tree.dds[ddi],'dy') + if dxv[0] is None: + dxv = [0]*len(txt) + else: + dxv = dxv + [0]*(len(txt)-len(dxv)) + if dyv[0] is None: + dyv = [0]*len(txt) + else: + dyv = dyv + [0]*(len(txt)-len(dyv)) + else: + dxv = [0]*len(txt) + dyv = [0]*len(txt) + + fsty = font_style(sty) + tsty = true_style(fsty) + for j, c in enumerate(txt): + csty = self.font_picker(txt, j, fsty, tsty) + prop = self.ctable.get_prop(c, csty) + tchr = TChar( + c, fsz, utfs, prop, sty, csty, CLoc(tel, typ, j), cln, dxv[j], dyv[j] + ) + tchr.lhs = (fabsp, fbbsp) + if j == 0: + lsp0 = tchr.lsp + bshft0 = tchr.bshft + else: + tchr.lsp = lsp0 + tchr.bshft = bshft0 + self.lns = lns + self.finish_lines() + self.fparaafter = False + + # Figure out where to break lines + # Currently only works for rectangular flows + i = 0 + breakcs = " -—!}|/?" + lncs = [line.chrs for line in lns] + blns = [] + lchr = None + y = 0 + while i < len(lncs): + if len(lncs[i]) > 0: + fchr = lncs[i][0] + + lht = None + getxintervals = True + while getxintervals: + getxintervals = False + if lht is None: + lht = fchr.line.effabsp + fchr.line.effbbsp + + # Determine x intervals where we can draw text + if not usesvt: + # For rectangles this is just the bounding box + xlims = [(bbx[0], bbx[2])] + else: + # For other flows this is where at least 90% of the line + # is unobstructed by the path + # Start by finding intervals where the y=10% and 90% points + # of the baseline intersect with the flow region + ln10 = spt.Line( + bbx[0] + (bbx[1] + y + lht * 0.1) * 1j, + bbx[0] + bbx[2] + (bbx[1] + y + lht * 0.1) * 1j, + ) + ln90 = spt.Line( + bbx[0] + (bbx[1] + y + lht * 0.9) * 1j, + bbx[0] + bbx[2] + (bbx[1] + y + lht * 0.9) * 1j, + ) + isc10 = sptregion.intersect(ln10) + isc90 = sptregion.intersect(ln90) + pts10 = sorted( + [ + sptregion.point(T1).real + for (T1, seg1, t1), (T2, seg2, t2) in isc10 + ] + ) + pts90 = sorted( + [ + sptregion.point(T1).real + for (T1, seg1, t1), (T2, seg2, t2) in isc90 + ] + ) + intervals = [] + for j in range(int(len(pts10) / 2)): + int10 = (pts10[2 * j], pts10[2 * j + 1]) + for k in range(int(len(pts90) / 2)): + int90 = (pts90[2 * k], pts90[2 * k + 1]) + intrsc = ( + max(int10[0], int90[0]), + min(int10[1], int90[1]), + ) + if intrsc[1] > intrsc[0]: + intervals.append(intrsc) + + # Use the tangent line at the 10 and 90% points to find the + # points where the line is at least 90% unobstructed + tol = lht * 1e-6 + + def tangent_line(pos): + pnt = sptregion.point(pos) + drv = sptregion.derivative(pos) + if not drv.real == 0: + slp = drv.imag / drv.real + intcp = pnt.imag - drv.imag / drv.real * pnt.real + else: + slp = drv.imag / tol + intcp = pnt.imag - drv.imag / tol * pnt.real + return slp, intcp + + def intersection_belowabove(pos, below=True): + pnt = sptregion.point(pos) + vrtl = spt.Line( + pnt.real + (bbx[1]) * 1j, + pnt.real + (bbx[1] + bbx[3]) * 1j, + ) + try: + intrsct = sptregion.intersect(vrtl) + except AssertionError: + return None, None + yvs = sorted( + [ + sptregion.point(T1b).imag + for (T1b, seg1b, t1b), (T2b, seg2b, t2b) in intrsct + ] + ) + if below: + yvs = [yvl for yvl in yvs if yvl > pnt.imag + tol] + ret = yvs[0] if len(yvs) > 0 else None + else: + yvs = [yvl for yvl in yvs if yvl < pnt.imag - tol] + ret = yvs[-1] if len(yvs) > 0 else None + rett = ( + [ + T1b + for (T1b, seg1b, t1b), (T2b, seg2b, t2b) in intrsct + if sptregion.point(T1b).imag == ret + ][0] + if ret is not None + else None + ) + return ret, rett + + def bounding_lines(p_top, p_btm): + if len(p_top) > 0: + p_top = p_top[0] + (mtop, btop) = tangent_line(p_top) + ry, r_pos = intersection_belowabove(p_top, below=True) + if ry is None or ry > bbx[1] + y + lht: + (mbtm, bbtm) = (0, bbx[1] + y + lht) + else: + (mbtm, bbtm) = tangent_line(r_pos) + else: + p_btm = p_btm[0] + (mbtm, bbtm) = tangent_line(p_btm) + ry, r_pos = intersection_belowabove(p_btm, below=False) + if ry is None or ry < bbx[1] + y: + (mtop, btop) = (0, bbx[1] + y) + else: + (mtop, btop) = tangent_line(r_pos) + return mtop, btop, mbtm, bbtm + + ints2 = [] + for inta, intb in intervals: + t10a = [ + T1 + for (T1, seg1, t1), (T2, seg2, t2) in isc10 + if sptregion.point(T1).real == inta + ] + t90a = [ + T1 + for (T1, seg1, t1), (T2, seg2, t2) in isc90 + if sptregion.point(T1).real == inta + ] + t10b = [ + T1 + for (T1, seg1, t1), (T2, seg2, t2) in isc10 + if sptregion.point(T1).real == intb + ] + t90b = [ + T1 + for (T1, seg1, t1), (T2, seg2, t2) in isc90 + if sptregion.point(T1).real == intb + ] + + mtopa, btopa, mbtma, bbtma = bounding_lines(t10a, t90a) + mtopb, btopb, mbtmb, bbtmb = bounding_lines(t10b, t90b) + + dya = (mbtma * inta + bbtma) - (mtopa * inta + btopa) + if dya < 0.9 * lht - tol: + xp9a = ( + (0.9 * lht - (bbtma - btopa)) / (mbtma - mtopa) + if mbtma != mtopa + else None + ) + xp9a = xp9a if xp9a >= inta else None + else: + xp9a = inta + + dyb = (mbtmb * intb + bbtmb) - (mtopb * intb + btopb) + if dyb < 0.9 * lht - tol: + xp9b = ( + (0.9 * lht - (bbtmb - btopb)) / (mbtmb - mtopb) + if mbtmb != mtopb + else None + ) + xp9b = xp9b if xp9b <= intb else None + else: + xp9b = intb + + if xp9a is not None and xp9b is not None and xp9b >= xp9a: + ints2.append((xp9a, xp9b)) + xlims = [(intv[0], intv[1] - intv[0]) for intv in ints2] + + # Intersection diagnostics + # for p in pts10: + # c = dh.new_element(inkex.Circle, self.textel) + # c.set('cx',str(p)) + # c.set('cy',str(bbx[1]+y+lht*0.1)) + # c.set('r',str(fchr.utfs/10)) + # c.set('style','fill:#000000;stroke:none') + # self.textel.croot.append(c) + # c.ctransform = self.textel.ccomposed_transform + # for p in pts90: + # c = dh.new_element(inkex.Circle, self.textel) + # c.set('cx',str(p)) + # c.set('cy',str(bbx[1]+y+lht*0.9)) + # c.set('r',str(fchr.utfs/10)) + # c.set('style','fill:#000000;stroke:none') + # self.textel.croot.append(c) + # c.ctransform = self.textel.ccomposed_transform + + # For every interval, find what text we can insert and where + # we should make breaks + breaks = [] + for xlim in xlims: + breakaft = None + hardbreak = False + strt = 0 if len(breaks) == 0 else breaks[-1] + 1 + csleft = lncs[i][strt:] + for j, c in enumerate(csleft): + if j == 0: + fcrun = c + if not isflowroot and c.c == "\n": + breakaft = j + hardbreak = True + break + if c.pts_ut[3][0] - fcrun.pts_ut[0][0] > xlim[1]: + spcs = [cv for cv in csleft[:j] if cv.c in breakcs] + # inkex.utils.debug('Break on '+str((c.c,j))) + if c.c == " ": + breakaft = j + # inkex.utils.debug('Break overflow space') + elif len(spcs) > 0: + breakaft = [ + k + for k, cv in enumerate(csleft) + if spcs[-1] == cv + ][0] + # inkex.utils.debug('Break chunk') + elif ( + xlim[1] > 4 * (c.line.effabsp + c.line.effbbsp) + and j > 0 + ): + # When the flowregion width is > 4*line height, + # allow intraword break + # https://gitlab.com/inkscape/inkscape/-/blob/master/src/libnrtype/Layout-TNG-Compute.cpp#L1989 + breakaft = j - 1 + # inkex.utils.debug('Break intraword') + else: + # Break whole line and hope that the next + # line is wider + breakaft = -1 + # inkex.utils.debug('Break whole line') + break + if breakaft is not None: + c.line.broken = True + breaks.append(breakaft + strt) + if hardbreak: + break + else: + break + if len(xlims) == 0: + breaks = [-1] + + # Use break points to split the line, pushing text after the + # last break to the next line + if not breaks: + splitcs = [lncs[i]] + else: + splitcs = [] + prev_index = -1 + for index in breaks: + splitcs.append(lncs[i][prev_index + 1 : index + 1]) + prev_index = index + splitcs.append(lncs[i][prev_index + 1 :]) + nextcs = None + if len(splitcs) > 1: + nextcs = splitcs.pop(-1) # push to next line + mycs = [item for sublist in splitcs[:-1] for item in sublist] + + allcs = [c for s in splitcs for c in s] + maxabsp = ( + max([c.lhs[0] for c in allcs]) + if len(allcs) > 0 + else fchr.line.effabsp + ) + maxbbsp = ( + max([c.lhs[1] for c in allcs]) + if len(allcs) > 0 + else fchr.line.effbbsp + ) + if not lht == maxabsp + maxbbsp: + lht = maxabsp + maxbbsp + getxintervals = True + + if nextcs is not None: + lncs = lncs[0:i] + [mycs, nextcs] + lncs[i + 1 :] + y += maxabsp + for j, chrs in enumerate(splitcs): + line = fchr.line + cln = TLine( + self, + [0], + [0], + self.textel, + self.textel, + False, + [], + line.anchor, + line.transform, + None, + line.style, + False, + False, + ) + cln.broken = line.broken + cln.effabsp = maxabsp + cln.effbbsp = maxbbsp + blns.append(cln) + for c in chrs: + lchr = TChar( + c.c, + c.tfs, + c.utfs, + c.prop, + c._sty, + c.tsty, + c.loc, + cln, c._dx, c._dy + ) + + if len(chrs) > 0: + anfr = cln.anchfrac + x = ( + xlims[j][0] * (1 - anfr) + + (xlims[j][0] + xlims[j][1]) * anfr + ) + if i == 0 and isinlinesz and iszy is not None: + y += ipx(iszy) - cln.effabsp + if isinlinesz and iszx is not None: + x += ipx(iszx) + cln.x = [x] + cln.y = [bbx[1] + y] + y += maxbbsp + + if y - 0.1 * (maxabsp + maxbbsp) > bbx[3] and not isinlinesz: + # When we reached the end of the flow region, add the remaining + # characters to a line that is given a NaN y position + cln.chrs = [c for lnc in lncs[i:] for c in lnc] + for j, c in enumerate(cln.chrs): + c.line = cln + c.lnindex = j + cln.y = [float("nan")] + break + + i += 1 + if i > 1000: + # inkex.utils.debug('Infinite loop') + break + + # Determine if any FlowParas follow the last character + # (Needed for unrenderedspace determination) + if lchr is not None: + dds = self.textel.descendants2() + j = dds.index(lchr.loc.elem) + if j < len(dds) - 1: + self.fparaafter = any(isinstance(ddv, FlowPara) for ddv in dds[j + 1 :]) + self.lns = blns + + +TYP_TEXT = 1 +TYP_TAIL = 0 + +NORMAL = 0 +PRECEDEDSPRL = 1 +TLVLSPRL = 2 + +class TextTree: + """ + Descendant tree class for text, with a generator for iterating through blocks of + text. Generator returns the current descendant index, typ (TYP_TAIL or TYP_TEXT), + descendant element, element from which it gets its style, and text string. + When starting at subel, only gets the tree subset corresponding to that element. + Note: If there is no text/tail, returns None for that block. + """ + + def __init__(self, elem): + """Initializes the text tree of an element.""" + dds, pts = elem.descendants2(True) + self.dds = dds + self.ptails = pts + self.pdict = {ddv: ddv.getparent() for ddv in dds} + + def dgenerator(self, subel=None): + """Yields descendants and their text in the tree.""" + if subel is None: + starti = 0 + stopi = len(self.dds) + subel = self.dds[0] + else: + starti = self.dds.index(subel) + stopi = [i for i, ptail in enumerate(self.ptails) if subel in ptail][0] + + for ddi, typ in TextTree.ttgenerator(len(self.dds), starti, stopi): + srcs = self.ptails[ddi] if typ == TYP_TAIL else [self.dds[ddi]] + for src in srcs: + if ( + typ == TYP_TAIL and src == subel + ): # finish at my own tail (do not yield it) + return + txt = src.tail if typ == TYP_TAIL else src.text + sel = ( + self.pdict[src] if typ == TYP_TAIL else src + ) # tails get style from parent + yield ddi, typ, src, sel, txt + + @staticmethod + def ttgenerator(numd, starti=0, stopi=None): + """ + A generator for crawling through a general text descendant tree + Returns the current descendant index and typ (TYP_TAIL for tail, + TYP_TEXT for text) + """ + ddi = starti + if stopi is None: + stopi = numd + typ = TYP_TAIL + while True: + if typ == TYP_TEXT: + ddi += 1 + typ = TYP_TAIL + else: + typ = TYP_TEXT + if ddi == stopi and typ == TYP_TEXT: + return + yield ddi, typ + + +def get_anchorfrac(anch): + """Gets the anchor fraction based on the text anchor.""" + anch_frac = {"start": 0, "middle": 0.5, "end": 1} + return anch_frac.get(anch, 0) + + +class TLine: + """ + A single line, which represents a list of characters. Typically a top-level + Tspan or TextElement. This is further subdivided into a list of chunks. + """ + + __slots__ = ( + "_xv", + "_yv", + "sprl", + "sprlabove", + "anchor", + "anchfrac", + "chrs", + "chks", + "transform", + "xsrc", + "ysrc", + "tlvlno", + "style", + "continuex", + "continuey", + "ptxt", + "splits", + "sws", + "effabsp", + "effbbsp", + "broken", + ) + + def __init__( + self, + ptxt, + x, + y, + xsrc, + ysrc, + sprl, + sprlabove, + anch, + xform, + tlvlno, + sty, + continuex, + continuey, + ): + """Initializes TLine with given parameters.""" + self._xv = x + self._yv = y + self.sprl = sprl + # is this line truly a sodipodi:role line + self.sprlabove = sprlabove + # nominal value of spr (sprl may actually be disabled) + self.anchor = anch + self.anchfrac = get_anchorfrac(anch) + self.chrs = [] + self.chks = [] + if xform is None: + self.transform = Transform([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]) + else: + self.transform = xform + self.xsrc = xsrc + # element from which we derive our x value + self.ysrc = ysrc + # element from which we derive our x value + self.tlvlno = tlvlno + # which number Tspan I am if I'm top-level (otherwise None) + self.style = sty + # self.elem = elem; + self.continuex = continuex + # when enabled, x of a line is the endpoint of the previous line + self.continuey = continuey + # when enabled, y of a line is the endpoint of the previous line + self.ptxt = ptxt + # Flow-specific + self.broken = None # text is broken + self.effabsp = None # above-baseline space + self.effbbsp = None # below-baseline space + ptxt.lns.append(self) + + def copy(self, memo): + """Creates a copy of the TLine instance.""" + ret = TLine.__new__(TLine) + memo[self] = ret + + ret._xv = self._xv[:] + ret._yv = self._yv[:] + ret.sprl = self.sprl + ret.sprlabove = [memo[sa] for sa in self.sprlabove] + ret.anchor = self.anchor + ret.anchfrac = self.anchfrac + ret.chrs = [c.copy(memo) for c in self.chrs] + ret.chks = [chk.copy(memo) for chk in self.chks] + ret.transform = self.transform + ret.xsrc = memo[self.xsrc] + ret.ysrc = memo[self.ysrc] + ret.tlvlno = self.tlvlno + ret.style = self.style + ret.continuex = self.continuex + ret.continuey = self.continuey + ret.ptxt = self.ptxt + ret.broken = self.broken + ret.effabsp = self.effabsp # above-baseline space + ret.effbbsp = self.effbbsp # below-baseline space + + return ret + + @property + def angle(self): + """Returns the transform angle in degrees.""" + return math.atan2(self.transform.c, self.transform.d) * 180 / math.pi + + def get_x(self): + """Returns the x property value.""" + if not self.continuex: + return self._xv + if self.ptxt is None: + return [0] + i = self.ptxt.lns.index(self) + if i > 0 and len(self.ptxt.lns[i - 1].chks) > 0: + anfr = self.anchfrac + xanch = (1 + anfr) * self.ptxt.lns[i - 1].chks[-1].pts_ut[3][ + 0 + ] - anfr * self.ptxt.lns[i - 1].chks[-1].pts_ut[0][0] + return [xanch] + return [0] + + def set_x(self, xvi): + """Sets the x property value.""" + self._xv = xvi + + x = property(get_x, set_x) + + def get_y(self): + """Returns the y property value.""" + if not self.continuey: + return self._yv + if self.ptxt is None: + return [0] + i = self.ptxt.lns.index(self) + if i > 0 and len(self.ptxt.lns[i - 1].chks) > 0: + anfr = self.anchfrac + yanch = (1 + anfr) * self.ptxt.lns[i - 1].chks[-1].pts_ut[3][ + 1 + ] - anfr * self.ptxt.lns[i - 1].chks[-1].pts_ut[0][1] + return [yanch] + return [0] + + def set_y(self, yvi): + """Sets the y property value.""" + self._yv = yvi + + y = property(get_y, set_y) + # anchorfrac = property(lambda self: get_anchorfrac(self.anchor)) + + def insertc(self, c, i): + """Inserts a character below a specified position.""" + for ch2 in self.chrs[i:]: + ch2.lnindex += 1 + c.lnindex = i + self.chrs = self.chrs[0:i] + [c] + self.chrs[i:] + c.line = self + + def addw(self, chk): + """Adds a complete chunk to the line.""" + self.chks.append(chk) + + def parse_chunks(self): + """ + Parses the line into chunks based on characters. + Parsing a line into chunks is the final step that should be called once + the line parser has gotten all the characters. + """ + chk = None + self.chks = [] + for i in range(len(self.chrs)): + if i == 0: + chk = TChunk(i, self.x[0], self.y[0], self) + # open new chunk + elif (i < len(self.x) and self.x[i] is not None) or (i < len(self.y) and self.y[i] is not None): # None means keep the same chunk + self.addw(chk) # close previous chunk + chk = TChunk(i, self.x[min(i,len(self.x)-1)], self.y[min(i,len(self.y)-1)], self) + # open new chunk + else: + chk.addc(i) + # add to existing chunk + if chk is not None: + self.addw(chk) + + def dell(self): + """Deletes the whole line.""" + self.write_xy(self.x[:1]) + for _, c in enumerate(reversed(self.chrs)): + if c.loc.typ == TYP_TEXT: + c.loc.elem.text = ( + c.loc.elem.text[: c.loc.ind] + c.loc.elem.text[c.loc.ind + 1 :] + ) + else: + c.loc.elem.tail = ( + c.loc.elem.tail[: c.loc.ind] + c.loc.elem.tail[c.loc.ind + 1 :] + ) + self.ptxt.write_dxdy() + + if self in self.ptxt.lns: + self.ptxt.lns.remove(self) + + def txt(self): + """Returns the concatenated text of all characters.""" + return "".join([c.c for c in self.chrs]) + + def change_alignment(self, newanch): + """Changes the alignment of the line without affecting character position.""" + if newanch != self.anchor: + sibsrc = [ + line + for line in self.ptxt.lns + if line.xsrc == self.xsrc or line.ysrc == self.ysrc + ] + for line in reversed(sibsrc): + line.disablesodipodi() + # Disable sprl for all lines sharing our src, including us + # Note that it's impossible to change one line without affecting + # the others + + for chk in self.chks: + minx = min([chk.pts_ut[i][0] for i in range(4)]) + maxx = max([chk.pts_ut[i][0] for i in range(4)]) + + if chk.unrenderedspace and self.chrs[-1] in chk.chrs: + maxx -= chk.chrs[-1].cwd + + anfr = get_anchorfrac(newanch) + newx = (1 - anfr) * minx + anfr * maxx + + if len(chk.chrs) > 0: + newxv = self.x + newxv[chk.chrs[0].lnindex] = newx + self.write_xy(newxv) + alignd = {"start": "start", "middle": "center", "end": "end"} + chk.chrs[0].loc.elem.cstyle.__setitem__( + "text-anchor", newanch, "text-align", alignd[newanch] + ) + self.continuex = False + + self.anchor = newanch + self.anchfrac = anfr + chk.charpos = None # invalidate chunk positions + + def disablesodipodi(self, force=False): + """Disables sodipodi:role=line.""" + if len(self.sprlabove) > 0 or force: + if len(self.chrs) > 0: + newsrc = self.chrs[0].loc.elem # disabling snaps src to first char + if self.chrs[0].loc.typ == TYP_TAIL: + newsrc = self.chrs[0].loc.elem.getparent() + newsrc.set("sodipodi:role", None) + + self.sprlabove = [] + self.xsrc = newsrc + self.ysrc = newsrc + xyset(self.xsrc, "x", self.x) # fuse position to new source + xyset(self.ysrc, "y", self.y) + self.sprl = False + + def write_xy(self, newx=None, newy=None): + """ + Changes the position of the line in the document. + Update the line's position in the document, accounting for inheritance + Never change x/y directly, always call this function + """ + if newx is not None: + sibsrc = [line for line in self.ptxt.lns if line.xsrc == self.xsrc] + if len(sibsrc) > 1: + for line in reversed(sibsrc): + line.disablesodipodi() # Disable sprl when lines share an xsrc + + while len(newx) > 1 and newx[-1] is None: + newx.pop() + oldx = self._xv if not self.continuex else self.x + self._xv = newx + xyset(self.xsrc, "x", newx) + + if ( + len(oldx) > 1 and len(newx) == 1 and len(self.sprlabove) > 0 + ): # would re-enable sprl + self.disablesodipodi() + + if newy is not None: + sibsrc = [line for line in self.ptxt.lns if line.ysrc == self.ysrc] + if len(sibsrc) > 1: + for line in reversed(sibsrc): + line.disablesodipodi() # Disable sprl when lines share a ysrc + + while len(newy) > 1 and newy[-1] is None: + newx.pop() + oldy = self._yv if not self.continuey else self.y + self._yv = newy + xyset(self.ysrc, "y", newy) + + if ( + len(oldy) > 1 and len(newy) == 1 and len(self.sprlabove) > 0 + ): # would re-enable sprl + self.disablesodipodi() + + def split(self,i): + if i>=len(self.chrs): + return + self.ptxt.split_off_characters(self.chrs[i:]) + +class TChunk: + """Represents a chunk, a group of characters with the same assigned anchor.""" + + __slots__ = ( + "chrs", + "windex", + "iis", + "ncs", + "_xv", + "_yv", + # "scf", + "line", + "transform", + "nextw", + "prevw", + "prevsametspan", + "_pts_ut", + "_pts_t", + "_bb", + "_dxeff", + "_charpos", + "_cpts_ut", + "_cpts_t", + "txt", + "lsp", + "dxeff", + "cwd", + "dy", + "caph", + "bshft", + "mw", + "merges", + "mergetypes", + "merged", + "wtypes", + "bb_big", + ) + + def __init__(self, i, x, y, line): + """Initializes TChunk with given parameters.""" + c = line.chrs[i] + self.chrs = [c] + c.windex = 0 + self.iis = [i] + # character index in chunk + self.ncs = len(self.iis) + self._xv = x + self._yv = y + # all letters have the same scale + self.line = line + self.transform = line.transform + c.chk = self + self.nextw = self.prevw = self.prevsametspan = None + self._pts_ut = self._pts_t = self._bb = None + self._dxeff = self._charpos = None + self._cpts_ut = None + self._cpts_t = None + + # Character attribute lists + self.txt = c.c + self.lsp = [c.lsp] + self.dxeff = [c.dx, c.lsp] + # Effective dx (with letter-spacing). Note that letter-spacing adds space + # after the char, so dxeff ends up being longer than the number of chars by 1 + self.cwd = [c.cwd] + self.dy = [c.dy] + self.caph = [c.caph] + self.bshft = [c.bshft] + + def copy(self, memo): + """Creates a copy of the TChunk instance.""" + ret = TChunk.__new__(TChunk) + memo[self] = ret + + # pylint:disable=protected-access + ret.ncs = self.ncs + ret._xv = self._xv + ret._yv = self._yv + ret.transform = self.transform + ret.nextw = self.nextw + ret.prevw = self.prevw + ret.prevsametspan = self.prevsametspan + ret._pts_ut = self._pts_ut + ret._pts_t = self._pts_t + ret._bb = self._bb + ret._dxeff = self._dxeff + ret._charpos = self._charpos + ret._cpts_ut = self._cpts_ut + ret._cpts_t = self._cpts_t + ret.txt = self.txt + ret.lsp = self.lsp[:] + ret.dxeff = self.dxeff[:] + ret.cwd = self.cwd[:] + ret.dy = self.dy[:] + ret.caph = self.caph[:] + ret.bshft = self.bshft[:] + # pylint:enable=protected-access + + ret.chrs = list( + map(memo.get, self.chrs, self.chrs) + ) # faster than [memo.get(c) for c in self.chrs] + for ret_c in ret.chrs: + ret_c.chk = ret + ret.iis = self.iis[:] + ret.line = memo[self.line] + return ret + + def addc(self, i): + """Adds an existing character to a chunk based on line index.""" + c = self.line.chrs[i] + c.chk = None # avoid problems in character properties + self.chrs.append(c) + self.cchange() + self.iis.append(i) + self.ncs = len(self.iis) + c.windex = self.ncs - 1 + + self.txt += c.c + self.lsp.append(c.lsp) + self.dxeff[-1] += c.dx + self.dxeff.append(c.lsp) + self.cwd.append(c.cwd) + self.dy.append(c.dy) + self.caph.append(c.caph) + self.bshft.append(c.bshft) + c.chk = self + + def removec(self, c): + """Removes a character from a chunk based on chunk index.""" + i = c.windex + for ch2 in self.chrs[i + 1 :]: + ch2.windex -= 1 + c.windex = None + c.chk = None + self.chrs = del2(self.chrs, i) + self.iis.pop(i) + self.ncs = len(self.iis) + self.cchange() + + self.txt = del2(self.txt, i) + self.lsp.pop(i) + self.dxeff.pop(i) + self.dxeff[i] = (self.chrs[i].dx if i < self.ncs else 0) + ( + self.chrs[i - 1].lsp if i > 0 else 0 + ) + self.cwd.pop(i) + self.dy.pop(i) + self.caph.pop(i) + self.bshft.pop(i) + + if len(self.chrs) == 0: # chunk now empty + self.del_chk() + + def cchange(self): + """ + Callback for character addition/deletion. Used to invalidate cached + properties + """ + self.charpos = None + + if self.line.ptxt.writtendx or self.line.ptxt.writtendy: + self.line.ptxt.dchange = True + + @property + def x(self): + """Get effective x value""" + if self.line and self.ncs > 0: + lnx = self.line._xv if not self.line.continuex else self.line.x + # checking for continuex early eliminates most unnecessary calls + i = self.iis[0] # first char + return lnx[i] if i < len(lnx) else lnx[-1] + return 0 + + @property + def y(self): + """Get effective y value""" + if self.line and self.ncs > 0: + lny = self.line._yv if not self.line.continuey else self.line.y + # checking for continuex early eliminates most unnecessary calls + i = self.iis[0] # first char + return lny[i] if i < len(lny) else lny[-1] + return 0 + + @property + def scf(self): + """Get scale of first character""" + return self.chrs[0].scf if self.ncs>0 else None + + def del_chk(self,updatedelta=True): + """Deletes the chunk from the line.""" + for c in reversed(self.chrs): + c.delc(updatedelta=updatedelta) + if self in self.line.chks: + self.line.chks.remove(self) + + def appendc(self, ncv, ncprop, ndx, ndy, totail=None): + """Generates a new character and adds it to the end of the chunk.""" + # Add to document + lchr = self.chrs[-1] + # last character + if totail is None: + myi = lchr.loc.ind + 1 + # insert after last character + if lchr.loc.typ == TYP_TEXT: + lchr.loc.elem.text = ( + lchr.loc.elem.text[0:myi] + ncv + lchr.loc.elem.text[myi:] + ) + else: + lchr.loc.elem.tail = ( + lchr.loc.elem.tail[0:myi] + ncv + lchr.loc.elem.tail[myi:] + ) + else: + if totail.tail is None: + totail.tail = ncv + else: + totail.tail = ncv + totail.tail + + # Make new character as a copy of the last one of the current chunk + c = copy(lchr) + c.chk = None # so we don't have problems during style setting + c.c = ncv + c.prop = ncprop + c.cwd = ncprop.charw * c.utfs + c.dx = ndx + c.dy = ndy + + if totail is None: + c.loc = CLoc(c.loc.elem, c.loc.typ, c.loc.ind + 1) # updated location + else: + c.loc = CLoc(totail, TYP_TAIL, 0) + c.sty = c.loc.sel.cspecified_style + + # Add to line + myi = lchr.lnindex + 1 # insert after last character + if len(self.line.x) > 0: + newx = self.line.x[0:myi] + [None] + self.line.x[myi:] + newx = newx[0 : len(self.line.chrs) + 1] + self.line.write_xy(newx) + + self.line.insertc(c, myi) + for i in range(myi + 1, len(self.line.chrs)): + # need to increment index of subsequent objects with the same parent + cha = self.line.chrs[i] + if cha.loc.typ == c.loc.typ and cha.loc.elem == c.loc.elem: + cha.loc.ind += 1 + if cha.chk is not None: + cha.chk.iis[cha.windex] += 1 + # Add to chunk, recalculate properties + self.addc(myi) + + # Adding a character causes the chunk to move if it's center- or right-justified + # Need to fix this by adjusting position + deltax = -self.line.anchfrac * self.line.chrs[myi].cwd + if deltax != 0: + newx = self.line.x + newx[self.chrs[0].lnindex] -= deltax + self.line.write_xy(newx) + + self.line.ptxt.write_dxdy() + + def append_chk(self, nchk, stype, maxspaces=None): + """ + Adds a new chunk (possibly from another line) into the current one. + Equivalent to typing it in + """ + if len(nchk.chrs) > 0: + # Calculate the number of spaces we need to keep the position constant + # (still need to adjust for anchors) + _, br1, _, bl2 = self.get_ut_pts(nchk) + lchr = self.chrs[-1] + # last character + numsp = (bl2[0] - br1[0]) / (lchr.spw) + numsp = max(0, round(numsp)) + if maxspaces is not None: + numsp = min(numsp, maxspaces) + + for _ in range(numsp): + self.appendc( + " ", lchr.line.ptxt.ctable.get_prop(" ", lchr.tsty), -lchr.lsp, 0 + ) + + fchr = nchk.chrs[0] + prevc = self.chrs[-1] + for c in nchk.chrs: + mydx = (c != fchr) * c.dx - prevc.lsp * (c == fchr) + # use dx to remove lsp from the previous c + c.delc() + + ntype = copy(stype) + otype = c.sty.get("baseline-shift") + if otype in ["super", "sub"] and stype == "normal": + ntype = otype + + # Nested tspans should be appended to the end of tails + totail = None + if self.chrs[-1].loc.sel != self.chrs[0].loc.sel: + cel = self.chrs[-1].loc.sel + while ( + cel is not None + and cel.getparent() != self.chrs[0].loc.sel + and cel.getparent() != self.line.ptxt.textel + ): + cel = cel.getparent() + totail = cel + + self.appendc(c.c, c.prop, mydx, c.dy, totail=totail) + newc = self.chrs[-1] + + # Make sure items on tails have right font size + if totail is not None: + fsz, scf, utfs = composed_width(totail.getparent(), "font-size") + newc.utfs = utfs + newc.tfs = fsz + newc.cwd = newc.prop.charw * utfs + newc.caph = newc.prop.caph * utfs + newc.spw = newc.prop.spacew * utfs + newc.chk.cwd[newc.windex] = newc.cwd + newc.chk.caph[newc.windex] = newc.caph + + newc.parsed_pts_ut = [ + vmultinv(self.transform.matrix, p[0], p[1]) for p in c.parsed_pts_t + ] + newc.parsed_pts_t = c.parsed_pts_t + + # Update the style + newsty = None + if c.sty != newc.sty or ntype in ["super", "sub"] or abs(c.scf - newc.scf)>1e-4: + newsty = c.sty + if ntype in ["super", "sub"]: + # newsty = c.sty + # Nativize super/subscripts + newsty["baseline-shift"] = ( + "super" if ntype == "super" else "sub" + ) + newsty["font-size"] = "65%" + # Leave size unchanged + # nsz = round((c.spw*c.scf)/(newc.spw*newc.scf)*100) + # newsty['font-size'] = str(nsz)+'%'; + + # Leave baseline unchanged (works) + # shft = round(-(bl2.y-br1.y)/self.tfs*100*self.scf); + # newsty['baseline-shift']= str(shft)+'%'; + elif abs(c.scf - newc.scf)>1e-4: + # Prevent accidental font size changes when differently + # transformed + nsz = round((c.spw * c.scf) / (newc.spw * newc.scf) * 100) + # newsty['font-size'] = str(nsz)+'%'; + newsty["font-size"] = ( + f"{format(nsz, '.2f').rstrip('0').rstrip('.')}%" + ) + + if newsty is not None: + newc.add_style(newsty, newfs=True) + prevc = newc + + def get_ut_pts(self, chk2, current_pts=False): + """Gets the coordinates of another chunk in my coordinate system.""" + if current_pts: + c1uts = [c.pts_ut for c in self.chrs] + c2uts = [c.pts_ut for c in chk2.chrs] + c2ts = [c.pts_t for c in chk2.chrs] + else: + c1uts = [c.parsed_pts_ut for c in self.chrs] + c2uts = [c.parsed_pts_ut for c in chk2.chrs] + c2ts = [c.parsed_pts_t for c in chk2.chrs] + + minv = float("inf") + chri = None + + for i in range(len(chk2.chrs)): + if c2uts[i] is not None: + if c2uts[i][0][0] < minv: + minv = c2uts[i][0][0] + chri = i + + bl2 = vmultinv(self.transform.matrix, c2ts[chri][0][0], c2ts[chri][0][1]) + tl2 = vmultinv(self.transform.matrix, c2ts[chri][1][0], c2ts[chri][1][1]) + + maxv = float("-inf") + chri = None + for i in range(len(self.chrs)): + if c1uts[i] is not None: + if c1uts[i][3][0] > maxv: + maxv = c1uts[i][3][0] + chri = i + + tr1 = c1uts[chri][2] + br1 = c1uts[chri][3] + return tr1, br1, tl2, bl2 + + def fix_merged_position(self): + """ + Adjusts the position of merged text to account for small changes in + chunk position that occur. This depends on alignment, so it is + generally done after the final justification is set. + """ + gcs = [c for c in self.chrs if c.c != " "] + if len(gcs) > 0: + omaxx = max([c.parsed_pts_ut[3][0] for c in gcs]) + ominx = min([c.parsed_pts_ut[0][0] for c in gcs]) + newptsut = [c.pts_ut for c in gcs] + nmaxx = max([p[3][0] for p in newptsut]) + nminx = min([p[0][0] for p in newptsut]) + + anfr = self.line.anchfrac + deltaanch = (nminx * (1 - anfr) + nmaxx * anfr) - ( + ominx * (1 - anfr) + omaxx * anfr + ) + # how much the final anchor moved + if deltaanch != 0: + newx = self.line.x + newx[self.chrs[0].lnindex] -= deltaanch + self.line.write_xy(newx) + self.charpos = None + self.line.ptxt.write_dxdy() + + def get_fs(self): + """Returns the font size of the chunk.""" + return maxnone([c.tfs for c in self.chrs]) + + tfs = property(get_fs) + + @property + def spw(self): + """Returns the space width of the chunk.""" + return maxnone([c.spw for c in self.chrs]) + + def get_mch(self): + """Returns the maximum character height of the chunk.""" + return maxnone(self.caph) + + mch = property(get_mch) + + @property + def angle(self): + """Returns the angle of the chunk.""" + return self.line.angle + + @property + def unrenderedspace(self): + """ + Returns True if the last character of a multichar line is a space + and is not rendered. + """ + lastspc = ( + self.ncs > 1 + and self.chrs[-1] == self.line.chrs[-1] + and self.chrs[-1].c in [" ", "\u00a0"] + ) + if not self.line.ptxt.isflow: + return lastspc + if lastspc: + # For flows, is rendered when not the last line and line isn't broken + lastln = ( + self.line.ptxt.lns[-1] == self.line and not self.line.ptxt.fparaafter + ) + return lastln or self.line.broken + return False + + @property + def charpos(self): + """ + Returns the character positions relative to the left side of the chunk. + """ + if self._charpos is None: + dadv = [0] * self.ncs + if DIFF_ADVANCES: + for i in range(1, self.ncs): + dadv[i] = self.chrs[i].dadvs(self.chrs[i - 1].c, self.chrs[i].c)*(self.dxeff[i]==0) + # default to 0 for chars of different style + # any dx value overrides differential advances + + chks = [self.cwd[i] + self.dxeff[i] + dadv[i] for i in range(self.ncs)] + cstop = list(itertools.accumulate(chks)) + # cumulative width up to and including the ith char + cstrt = [cstop[i] - self.cwd[i] for i in range(self.ncs)] + + cstrt = np.array(cstrt, dtype=float) + cstop = np.array(cstop, dtype=float) + + chkw = cstop[-1] + offx = -self.line.anchfrac * ( + chkw - self.unrenderedspace * self.chrs[-1].cwd + ) + # offset of the left side of the chunk from the anchor + chkx = self.x + chky = self.y + + lftx = (chkx + cstrt + offx)[:, np.newaxis] + rgtx = (chkx + cstop + offx)[:, np.newaxis] + + adyl = list(itertools.accumulate(self.dy)) + btmy = np.array( + [chky + dy - bs for dy, bs in zip(adyl, self.bshft)], dtype=float + )[:, np.newaxis] + topy = np.array( + [ + chky + dy - bs - caph + for dy, caph, bs in zip(adyl, self.caph, self.bshft) + ], + dtype=float, + )[:, np.newaxis] + + lx2 = float(min(lftx - self.dxeff[0]).squeeze()) + rx2 = float(lx2 + chkw) + by2 = float(max(btmy).squeeze()) + ty2 = float(min(topy).squeeze()) + + self._charpos = (lftx, rgtx, btmy, topy, lx2, rx2, by2, ty2) + + return self._charpos + + @charpos.setter + def charpos(self, svi): + """Sets the character positions and invalidates dependent properties.""" + if svi is None: # invalidate self and dependees + self._charpos = None + self.pts_ut = None + self.cpts_ut = None + self.cpts_t = None + + @property + def pts_ut(self): + """Returns the untransformed bounding box of the chunk.""" + if self._pts_ut is None: + (_, _, _, _, lx2, rx2, by2, ty2) = self.charpos + self._pts_ut = [ + (lx2, by2), + (lx2, ty2), + (rx2, ty2), + (rx2, by2), + ] + return self._pts_ut + + @pts_ut.setter + def pts_ut(self, _): + """Sets the untransformed bounding box and invalidates dependent properties.""" + if _ is None and self._pts_ut is not None: # invalidate self and dependees + self._pts_ut = None + self.pts_t = None + # self.cpts_ut = None + + @property + def pts_t(self): + """Returns the transformed bounding box of the chunk.""" + if self._pts_t is None: + self._pts_t = [ + vmult(self.transform.matrix, p[0], p[1]) for p in self.pts_ut + ] + return self._pts_t + + @pts_t.setter + def pts_t(self, _): + """Sets the transformed bounding box and invalidates dependent properties.""" + if _ is None and self._pts_t is not None: # invalidate self and dependees + self._pts_t = None + self.bbx = None + # self.cpts_t = None + + @property + def bbx(self): + """Returns the bounding box of the chunk.""" + if self._bb is None: + ptt = self.pts_t + min_x = min(ptt[0][0], ptt[1][0], ptt[2][0], ptt[3][0]) + min_y = min(ptt[0][1], ptt[1][1], ptt[2][1], ptt[3][1]) + max_x = max(ptt[0][0], ptt[1][0], ptt[2][0], ptt[3][0]) + max_y = max(ptt[0][1], ptt[1][1], ptt[2][1], ptt[3][1]) + self._bb = bbox([min_x, min_y, max_x - min_x, max_y - min_y]) + return self._bb + + @bbx.setter + def bbx(self, bbi): + """Sets the bounding box and invalidates dependent properties.""" + if bbi is None: # invalidate + self._bb = None + + @property + def cpts_ut(self): + """Returns the untransformed bounding box of characters.""" + if self._cpts_ut is None: + (lftx, rgtx, btmy, topy, _, _, _, _) = self.charpos + n_rows = lftx.shape[0] + self._cpts_ut = [ + tuple((coord[i][0], val[i][0]) for i in range(n_rows)) + for coord, val in zip( + (lftx, lftx, rgtx, rgtx), (btmy, topy, topy, btmy) + ) + ] + + return self._cpts_ut + + @cpts_ut.setter + def cpts_ut(self, svi): + """Sets the untransformed bounding box of characters and invalidates + dependent properties.""" + if svi is None: + self._cpts_ut = None + + @property + def cpts_t(self): + """Returns the transformed bounding box of characters.""" + if self._cpts_t is None: + (lftx, rgtx, btmy, topy, _, _, _, _) = self.charpos + nch = len(lftx) + pts = np.array( + [ + (coord[i][0], val[i][0], 1) + for coord, val in zip( + (lftx, lftx, rgtx, rgtx), (btmy, topy, topy, btmy) + ) + for i in range(nch) + ], + dtype=float, + ) + mat = np.array(self.transform.matrix + ((0, 0, 1),), dtype=float) + + tps = np.dot(mat, pts.T).T + self._cpts_t = [ + tps[0:nch, 0:2], + tps[nch : 2 * nch, 0:2], + tps[2 * nch : 3 * nch, 0:2], + tps[3 * nch : 4 * nch, 0:2], + ] + + return self._cpts_t + + @cpts_t.setter + def cpts_t(self, svi): + """Sets the transformed bounding box of characters and invalidates + dependent properties.""" + if svi is None: + self._cpts_t = None + + +class TChar: + """Represents a single character and its style.""" + + def __init__(self, c, tfs, utfs, prop, sty, tsty, loc, line, dx, dy): + """Initializes TChar with given parameters.""" + self.c = c + self.tfs = tfs + # transformed font size (uu) + self.utfs = utfs + # untransformed font size + self.prop = prop + # properties of a 1 uu character + self.cwd = prop.charw * utfs + # ut character width + self._sty = sty + # actual style + self.tsty = tsty + # true font style + self.fsty = font_style(sty) + # font style + self.loc = loc + # true location: [parent, TYP_TEXT or TYP_TAIL, index] + self.caph = prop.caph * utfs + # cap height (height of flat capitals like T) + self.spw = prop.spacew * utfs + # space width for style + self.line = line + line.chrs.append(self) + self.lnindex = len(line.chrs) - 1 + # my line + self.chk = None + # my chunk (to be assigned) + self.windex = None # index in chunk + # 'normal','super', or 'sub' (to be assigned) + self._dx = dx + self._dy = dy + self._ax = None + self._ay = None + self.dadvs = lambda cL, cR: prop.dadvs.get((cL, cR), 0) * utfs + self.parsed_pts_t = None + self.parsed_pts_ut = None + # for merging later + self._lsp = TChar.lspfunc(self.sty) + self._bshft = TChar.bshftfunc(self.sty, self.loc.sel) + # letter spacing + self.lhs = None + # flow line-heights + + def copy(self, memo=None): + """Creates a copy of the TChar instance.""" + if memo is None: + memo = dict() + ret = TChar.__new__(TChar) + memo[self] = ret + ret.__dict__.update(self.__dict__) + ret.loc = CLoc( + memo.get(self.loc.elem, self.loc.elem), self.loc.typ, self.loc.ind + ) + ret.line = memo.get(self.line, self.line) + return ret + + @property + def dx(self): + """Returns the dx property.""" + return self._dx + + @dx.setter + def dx(self, dxi): + """Sets the dx property and invalidates dependent properties.""" + if self._dx != dxi: + self._dx = dxi + if self.chk is not None: + self.chk.charpos = None # invalidate + i = self.windex + chk = self.chk + chk.dxeff[i] = (chk.chrs[i].dx if i < chk.ncs else 0) + ( + chk.chrs[i - 1].lsp if i > 0 else 0 + ) + self.line.ptxt.dchange = True + + @property + def dy(self): + """Returns the dy property.""" + return self._dy + + @dy.setter + def dy(self, dxi): + """Sets the dy property and invalidates dependent properties.""" + if self._dy != dxi: + self._dy = dxi + if self.chk is not None: + self.chk.dy[self.windex] = dxi + self.line.ptxt.dchange = True + + @property + def ax(self): + """Returns the ax property.""" + return self._ax + + @ax.setter + def ax(self, axi): + """Sets the ax property and invalidates dependent properties.""" + if self._ax != axi: + self._ax = axi + self.line.ptxt.achange = True + + @property + def ay(self): + """Returns the ay property.""" + return self._ay + + @ay.setter + def ay(self, axi): + """Sets the dy property and invalidates dependent properties.""" + if self._ay != axi: + self._ay = axi + self.line.ptxt.achange = True + + @property + def sty(self): + """Returns the style of the character.""" + # Character style + return self._sty + + @sty.setter + def sty(self, styi): + """Sets the style of the character and updates dependent properties.""" + self._sty = styi + self.lsp = TChar.lspfunc(self._sty) + self.bshft = TChar.bshftfunc(self._sty, self.loc.sel) + + self.fsty = font_style(styi) + self.tsty = true_style(styi) + + @staticmethod + def lspfunc(styv): + """Returns the letter spacing for the given style.""" + if "letter-spacing" in styv: + lspv = styv.get("letter-spacing") + if "em" in lspv: # em is basically the font size + fs2 = styv.get("font-size") + if fs2 is None: + fs2 = "12px" + lspv = float(lspv.strip("em")) * ipx(fs2) + else: + lspv = ipx(lspv) or 0 + else: + lspv = 0 + return lspv + + @property + def lsp(self): + """Returns the letter spacing of the character.""" + return self._lsp + + @lsp.setter + def lsp(self, sval): + """Sets the letter spacing and invalidates dependent properties.""" + if sval != self._lsp: + self._lsp = sval + if self.chk is not None: + self.chk.charpos = None + i = self.windex + chk = self.chk + chk.lsp[i] = sval + chk.dxeff[i + 1] = (chk.chrs[i + 1].dx if i < chk.ncs - 1 else 0) + ( + chk.chrs[i].lsp if i < chk.ncs else 0 + ) + + @staticmethod + def bshftfunc(styv, strtel): + """Calculates the baseline shift for the given style.""" + if "baseline-shift" in styv: + # Find all ancestors with baseline-shift + bsancs = [] + cel = strtel + while cel is not None and "baseline-shift" in cel.cspecified_style: + bsancs.append(cel) + cel = cel.getparent() + + # Starting from the most distant ancestor, calculate relative + # baseline shifts (i.e., how much each element is raised/lowered + # from the last block of text) + relbs = [] + for att in reversed(bsancs): + if "baseline-shift" in att.cstyle: + relbs.append(TChar.get_baseline(att.cstyle, att.getparent())) + else: + # When an element has a baseline-shift from inheritance + # but no baseline-shift is specified, implicitly gets the + # sum of the previous values + relbs.append(sum(relbs)) + bshft = sum(relbs) + else: + bshft = 0 + return bshft + + # Character baseline shift + @property + def bshft(self): + """Returns the baseline shift of the character.""" + return self._bshft + + @bshft.setter + def bshft(self, sval): + """Sets the baseline shift and invalidates dependent properties.""" + if sval != self._bshft: + self._bshft = sval + if self.chk is not None: + self.chk.charpos = None + self.chk.bshft[self.windex] = sval + + @staticmethod + def get_baseline(styin, fsel): + """Gets the baseline shift value based on style and font size.""" + bshft = styin.get("baseline-shift", "0") + if bshft == "super": + bshft = "40%" + elif bshft == "sub": + bshft = "-20%" + if "%" in bshft: # relative to parent + fs2, sf2, _ = composed_width(fsel, "font-size") + bshft = fs2 / sf2 * float(bshft.strip("%")) / 100 + else: + bshft = ipx(bshft) or 0 + return bshft + + @property + def scf(self): + """Returns the scale from the utfs to tfs.""" + return self.tfs / self.utfs + + def __str__(self): + return str((self.c,self.loc.elem.get_id(), self.loc.typ, self.loc.ind)) + + def delc(self,updatedelta=True): + """Deletes the character from the document and its chunk/line.""" + # Deleting a character causes the chunk to move if it's center- or + # right-justified. Adjust position to fix + lncs = self.line.chrs + myi = self.lnindex # index in line + + # Differential kerning affect on character width + dko1 = dko2 = dkn = 0 + if myi < len(lncs) - 1: + dko2 = self.dadvs(lncs[myi].c, lncs[myi + 1].c) # old from right + if myi > 0: + dkn = self.dadvs(lncs[myi - 1].c, lncs[myi + 1].c) # new + if myi > 0: + dko1 = self.dadvs(lncs[myi - 1].c, lncs[myi].c) # old from left + tdk = dko1 + dko2 - dkn + + cwo = self.cwd + tdk + self._dx + self.lsp * (self.windex != 0) + if self.chk.unrenderedspace and self.chk.chrs[-1] == self: + if len(self.chk.chrs) > 1 and self.chk.chrs[-2].c != " ": + cwo = tdk + # Deletion will not affect position + # Weirdly dkerning from unrendered spaces still counts + + if self == self.chk.chrs[0]: # from beginning of line + deltax = (self.line.anchfrac - 1) * cwo + else: # assume end of line + deltax = self.line.anchfrac * cwo + + lnx = self.line.x + changedx = False + if deltax != 0: + chkidx = self.line.chks.index(self.chk) + if chkidx < len(lnx) and lnx[chkidx] is not None: + lnx[chkidx] -= deltax + changedx = True + + # Delete from document + if self.loc.typ == TYP_TEXT: + self.loc.elem.text = ( + self.loc.elem.text[: self.loc.ind] + + self.loc.elem.text[self.loc.ind + 1 :] + ) + else: + self.loc.elem.tail = ( + self.loc.elem.tail[: self.loc.ind] + + self.loc.elem.tail[self.loc.ind + 1 :] + ) + + if len(lnx) > 1 and myi < len(lnx): + if myi < len(lnx) - 1 and lnx[myi] is not None and lnx[myi + 1] is None: + newx = ( + lnx[: myi + 1] + lnx[myi + 2 :] + ) # next x is None, delete that instead + elif myi == len(lnx) - 1 and len(lncs) > len(lnx): + newx = lnx # last x, characters still follow + else: + newx = lnx[:myi] + lnx[myi + 1 :] + + lnx = newx[: len(lncs) - 1] + # we haven't deleted the char yet, so make it len-1 long + changedx = True + if changedx: + self.line.write_xy(lnx) + + # Delete from line + _ = [ + setattr(ca.loc, "ind", ca.loc.ind - 1) + for ca in lncs[myi + 1 :] + if ca.loc.typ == self.loc.typ and ca.loc.elem == self.loc.elem + ] + _ = [ + ca.chk.iis.__setitem__(ca.windex, ca.chk.iis[ca.windex] - 1) + for ca in lncs[myi + 1 :] + if ca.chk is not None + ] + _ = [setattr(c, "lnindex", c.lnindex - 1) for c in self.line.chrs[myi + 1 :]] + + lncs[myi].lnindex = None + self.line.chrs = lncs[:myi] + lncs[myi + 1 :] + + if len(self.line.chrs) == 0: # line now empty, can delete + self.line.dell() + + # Remove from chunk + self.chk.removec(self) + + # Update the dx/dy value in the ParsedText + if updatedelta: + self.line.ptxt.write_dxdy() + + def add_style(self, sty, setdefault=True, newfs=False): + """Adds a style to the character by wrapping it in a new Tspan.""" + span = Tspan if self.line.ptxt.textel.tag == TEtag else inkex.FlowSpan + t = span() + t.text = self.c + + prt = self.loc.elem + if self.loc.typ == TYP_TEXT: + tbefore = prt.text[0 : self.loc.ind] + tafter = prt.text[self.loc.ind + 1 :] + prt.text = tbefore + prt.insert(0, t) + t.tail = tafter + else: + tbefore = prt.tail[0 : self.loc.ind] + tafter = prt.tail[self.loc.ind + 1 :] + prt.tail = tbefore + grp = prt.getparent() + # parent is a Tspan, so insert it into the grandparent + grp.insert(grp.index(prt) + 1, t) + # after the parent + + t.tail = tafter + + self.line.ptxt.tree = None # invalidate + + myi = self.lnindex + for i in range( + myi + 1, len(self.line.chrs) + ): # for characters after, update location + cha = self.line.chrs[i] + if cha.loc.elem == self.loc.elem and cha.loc.typ == self.loc.typ: + cha.loc = CLoc(t, TYP_TAIL, i - myi - 1) + self.loc = CLoc(t, TYP_TEXT, 0) # update my own location + + # When the specified style has something new span doesn't, are inheriting and + # need to explicitly assign the default value + styset = Style(sty) + newspfd = t.cspecified_style + for att in newspfd: + if att not in styset and setdefault: + styset[att] = default_style_atts.get(att) + + t.cstyle = styset + self.sty = styset + if newfs: + fsz, scf, _ = composed_width(self.loc.sel, "font-size") + self.utfs = fsz / scf + self.tfs = fsz + self.cwd = self.prop.charw * self.utfs + self.chk.cwd[self.windex] = self.cwd + self.caph = self.prop.caph * self.utfs + self.chk.caph[self.windex] = self.caph + self.chk.charpos = None + + @property + def pts_ut(self): + """Returns the untransformed bounding box of the character.""" + myi = self.windex + cput = self.chk.cpts_ut + ret_pts_ut = [ + (cput[0][myi][0], cput[0][myi][1]), + (cput[1][myi][0], cput[1][myi][1]), + (cput[2][myi][0], cput[2][myi][1]), + (cput[3][myi][0], cput[3][myi][1]), + ] + return ret_pts_ut + + @property + def pts_t(self): + """Returns the transformed bounding box of the character.""" + myi = self.windex + cpt = self.chk.cpts_t + ret_pts_t = [ + (cpt[0][myi][0], cpt[0][myi][1]), + (cpt[1][myi][0], cpt[1][myi][1]), + (cpt[2][myi][0], cpt[2][myi][1]), + (cpt[3][myi][0], cpt[3][myi][1]), + ] + return ret_pts_t + + @property + def pts_ut_ink(self): + """Returns the untransformed ink bounding box of the character.""" + put = self.pts_ut + nwd = self.prop.inkbb[2] * self.utfs + nht = self.prop.inkbb[3] * self.utfs + x = put[0][0] + self.prop.inkbb[0] * self.utfs + y = put[0][1] + self.prop.inkbb[1] * self.utfs + nht + return [(x, y), (x, y - nht), (x + nwd, y - nht), (x + nwd, y)] + + +def del2(x, ind): + """deletes an index from a list""" + return x[:ind] + x[ind + 1 :] + + +def extendind(x, ind, val, default=None): + """indexes a matrix, extending it if necessary""" + if ind >= len(x): + x += [default] * (ind + 1 - len(x)) + x[ind] = val + return x + + +def sortnone(x): + """sorts an x skipping Nones""" + rem = list(range(len(x))) + minxrem = min([x[r] for r in rem if x[r] is not None]) + i = min([r for r in rem if x[r] == minxrem]) + sord = [i] + rem.remove(i) + while len(rem) > 0: + if i == len(x) - 1 or x[i + 1] is not None: + minxrem = min([x[r] for r in rem if x[r] is not None]) + i = min([r for r in rem if x[r] == minxrem]) + sord += [i] + else: + i += 1 + rem.remove(i) + return sord + + +class CProp: + """ + A class representing the properties of a single character + It is meant to be immutable...do not modify attributes + """ + + __slots__ = ("char", "charw", "spacew", "caph", "dadvs", "inkbb") + + def __init__(self, char, cwd, spw, caph, dadvs, inkbb): + """Initializes CProp with given parameters.""" + self.char = char + self.charw = cwd + # character width + self.spacew = spw + # space width + self.caph = caph + # cap height + self.dadvs = dadvs + # table of how much extra width a preceding character adds to me + self.inkbb = inkbb + + def __mul__(self, scl): + """Scales the character properties by a given factor.""" + dadv2 = {k: val * scl for k, val in self.dadvs.items()} + inkbb2 = [val * scl for val in self.inkbb] + return CProp( + self.char, + self.charw * scl, + self.spacew * scl, + self.caph * scl, + dadv2, + inkbb2, + ) + + @property + def __dict__(self): + """Returns a dictionary of character properties.""" + return { + "char": self.char, + "charw": self.charw, + "spacew": self.spacew, + "caph": self.caph, + "inkbb": self.inkbb, + } + + +class CLoc: + """Represents the location of a single character in the SVG.""" + + __slots__ = ("elem", "typ", "ind", "sel") + + def __init__(self, elem, typ, ind): + """Initializes CLoc with given parameters.""" + self.elem = elem + # the element it belongs to + self.typ = typ + # TYP_TEXT or TYP_TAIL + self.ind = ind + # its index + self.sel = elem if typ == TYP_TEXT else elem.getparent() + # where style comes from + + def copy(self, memo): + """Creates a copy of the CLoc instance.""" + ret = CLoc.__new__(CLoc) + memo[self] = ret + + ret.elem = memo[self.elem] + ret.typ = self.typ + ret.ind = self.ind + ret.sel = memo[self.sel] + return ret + + def __eq__(self, other): + """Checks equality with another CLoc instance.""" + return ( + self.elem == other.elem and self.typ == other.typ and self.ind == other.ind + ) + + def __hash__(self): + """Returns the hash value of the CLoc instance.""" + return hash((self.elem, self.typ, self.ind)) + + +class CharacterTable: + """Represents the properties of a collection of characters.""" + + def __init__(self, els): + """Initializes CharacterTable with a list of elements.""" + self.els = els + self.root = els[0].croot if len(els) > 0 else None + self.tstyset, self.pchrset, self.fstyset, self.cstys = ( + CharacterTable.collect_characters(els) + ) + + # HASPANGO = False; os.environ["HASPANGO"]='False' + if HASPANGO: + # Prefer to measure with Pango if we have it (faster, more accurate) + self.ctable = self.measure_characters() + else: + # Can also extract directly using fonttools, which is pure Python + self.ctable = self.extract_characters() + + self.mults = dict() + self._ftable = None + + @staticmethod + def collect_characters(els): + """Finds all the characters in a list of elements.""" + fstyset = dict() # set of characters in a given font style + txtfsty = [] + for elem in els: + tree = TextTree(elem) + for _, _, _, sel, txt in tree.dgenerator(): + if txt is not None and len(txt) > 0: + sty = sel.cspecified_style + fsty = font_style(sty) + fstyset.setdefault(fsty, set()).update(txt + " ") + txtfsty.append((txt, fsty)) + + cstys = dict() # cstys[fsty][c] looks up a character's true style + tstyset = dict() # set of characters in a given true style + for fsty, chrs in fstyset.items(): + tfbc = fcfg.get_true_font_by_char(fsty, chrs) + cstys[fsty] = tfbc + tstyset.setdefault(true_style(fsty), set()).update(chrs) + for c, csty in tfbc.items(): + cstys.setdefault(csty, dict()).__setitem__(c, csty) + tstyset.setdefault(csty, set()).update({c, " "}) + + pchrset = dict() + # set of characters that precede a char in a true style + # used to apply differential kerning + for txt, fsty in txtfsty: + for j in range(1, len(txt)): + csty = cstys[fsty][txt[j]] + pchrset.setdefault(csty, dict()) + if csty == cstys[fsty][txt[j - 1]]: + pchrset[csty].setdefault(txt[j], set()).update({txt[j - 1], " "}) + + return tstyset, pchrset, fstyset, cstys + + def extract_characters(self): + """ + Direct extraction of character metrics from the font file using fonttools + fonttools is pure Python, so this usually works + """ + badchars = {"\n", "\r"} + ret = dict() + for sty, chrs in self.tstyset.items(): + if sty is not None: + bdcs = {c for c in chrs if c in badchars} # unusual chars + gcs = {c for c in chrs if c not in badchars} + chrfs = fcfg.get_true_font_by_char(sty, gcs) + fntcs = dict() # font: corresponding characters + for k, val in chrfs.items(): + fntcs.setdefault(val, []).append(k) + + if None in fntcs: # unrendered characters are bad + bdcs.update(fntcs[None]) + gcs = gcs - set(fntcs[None]) + del fntcs[None] + + ret[sty] = dict() + for fnt, chs in fntcs.items(): + ftfnt = fcfg.get_fonttools_font(fnt) + if sty in self.pchrset: + pct2 = { + k: val for k, val in self.pchrset[sty].items() if k in chs + } + else: + pct2 = dict() + advs, dadv, inkbbs = ftfnt.get_char_advances(chs, pct2) + for c in chs: + cwd = advs[c] + caph = ftfnt.cap_height + # dr = 0 + inkbb = inkbbs[c] + ret[sty][c] = CProp(c, cwd, None, caph, dadv, inkbb) + spc = ret[sty][" "] + for c in ret[sty]: + ret[sty][c].spacew = spc.charw + ret[sty][c].caph = spc.caph + for bdc in bdcs: + ret[sty][bdc] = CProp( + bdc, 0, spc.charw, spc.caph, dict(), [0, 0, 0, 0] + ) + else: + ret[sty] = dict() + for c in self.tstyset[None]: + ret[sty][c] = CProp(c, 0, 0, 0, dict(), [0, 0, 0, 0]) + return ret + + def measure_characters(self): + """ + Uses Pango to measure character properties by rendering them on an unseen + context. Requires GTK Python bindings, generally present in Inkscape 1.1 and + later. If Pango is absent, extract_characters will be called instead. + + Generates prefixed, suffixed copies of each string, compares them to a blank + version without any character. This measures the logical advance, i.e., the + width including intercharacter space. Width corresponds to a character with + a composed font size of 1 uu. + """ + cnt = 0 + pstrings = dict() + + def make_string(c, sty): + nonlocal cnt + cnt += 1 + pstrings["text" + str(cnt)] = (c, sty) + return "text" + str(cnt) + + class StringInfo: + """Stores metadata on strings""" + + def __init__(self, strval, strid, dadv, bareid=None): + self.strval = strval + self.strid = strid + self.dadv = dadv + self.bareid = bareid + + badchars = {"\n": " ", "\r": " "} + + def effc(c): + return badchars.get(c, c) + + ixes = dict() + validtstyset = { + sty: chrs for sty, chrs in self.tstyset.items() if sty is not None + } + for sty in validtstyset: + chrs = [chr(c) for c in fcfg.fontcharsets[sty]] + if "=" in chrs: + bufc = "=" + elif "M" in chrs: + bufc = "M" + else: + bufc = min([ch for ch in chrs if ord(ch) >= ord("A")], key=ord) + prefix = "I" + bufc + suffix = bufc + "I" + # Use an equals sign to eliminate differential kerning effects + # (characters like '=' rarely have differential kerning), then I for + # capital height. + + empty = prefix + suffix + pistr = prefix + "pI" + suffix + # Add 'pI' as test characters. 'p' provides the font's descender + # (how much the tail descends), and 'I' gives cap height + # (how tall capital letters are). + ixes[sty] = (prefix, suffix, empty, pistr) + + ctbl = dict() + bareids = [] + for sty, chrs in validtstyset.items(): + prefix, suffix, empty, pistr = ixes[sty] + ctbl[sty] = dict() + for myc in chrs: + t = make_string(prefix + effc(myc) + suffix, sty) + tbare = make_string(effc(myc), sty) + bareids.append(tbare) + dadv = dict() + if DIFF_ADVANCES: + for pchr in chrs: + if ( + sty in self.pchrset + and myc in self.pchrset[sty] + and pchr in self.pchrset[sty][myc] + ): + tpc = make_string( + prefix + effc(pchr) + effc(myc) + suffix, sty + ) + # precede by all chars of the same style + dadv[pchr] = tpc + ctbl[sty][myc] = StringInfo(myc, t, dadv, tbare) + + ctbl[sty][pistr] = StringInfo(pistr, make_string(pistr, sty), dict()) + ctbl[sty][empty] = StringInfo(empty, make_string(empty, sty), dict()) + + # Pango querying doesn't multithread well + lock = threading.Lock() + lock.acquire() + try: + pngr = PangoRenderer() + nbb = dict() + for sty in ctbl: + joinch = " " + mystrs = [val[0] for k, val in pstrings.items() if val[1] == sty] + myids = [k for k, val in pstrings.items() if val[1] == sty] + + success, metrics = pngr.set_text_style(sty) + if not (success): + lock.release() + return self.extract_characters() + joinedstr = joinch.join(mystrs) + joinch + prefix + + # We need to render all the characters, but we don't + # need all of their extents. For most of them we just + # need the first character, unless the following string + # has length 1 (and may be differently differentially kerned) + modw = [ + any( + len(mystrs[i]) == 1 + for i in range(i, i + 2) + if 0 <= i < len(mystrs) + ) + for i in range(len(mystrs)) + ] + needexts = [ + "1" + if len(s) == 1 + else "1" + "0" * (len(s) - 2) + ("1" if modw[i] else "0") + for i, s in enumerate(mystrs) + ] + needexts2 = "0".join(needexts) + "1" + "1" * len(prefix) + pngr.render_text(joinedstr) + exts, _ = pngr.get_character_extents(metrics[1], needexts2) + + spw = exts[-len(prefix) - 1][0][2] + cnt = 0 + x = 0 + for i, mystr in enumerate(mystrs): + if modw[i]: + altw = ( + exts[cnt + len(mystr) - 1][0][0] + + exts[cnt + len(mystr) - 1][0][2] + - exts[cnt][0][0] + ) + else: + altw = ( + exts[cnt + len(mystr) + 1][0][0] - exts[cnt][0][0] - spw + ) + wdt = altw + + firstch = exts[cnt] + (xbr, ybr, wbr, hbr) = tuple(firstch[2]) + if myids[i] not in bareids: + xbr = x + wbr = wdt + # use logical width + + nbb[myids[i]] = [val * TEXTSIZE for val in [xbr, ybr, wbr, hbr]] + cnt += len(mystr) + len(joinch) + x += wdt + finally: + lock.release() + + dadv = dict() + for sty, chd in ctbl.items(): + prefix, suffix, empty, pistr = ixes[sty] + for i in chd: + chd[i].bbx = bbox(nbb[chd[i].strid]) + if DIFF_ADVANCES: + precwidth = dict() + for j in chd[i].dadv: + precwidth[j] = bbox(nbb[chd[i].dadv[j]]).w + # width including the preceding character and extra kerning + chd[i].precwidth = precwidth + + if DIFF_ADVANCES: + dadv[sty] = dict() + for i in chd: + mcw = chd[i].bbx.w - chd[empty].bbx.w # my character width + for j in chd[i].precwidth: + pcw = chd[j].bbx.w - chd[empty].bbx.w # preceding char width + bcw = chd[i].precwidth[j] - chd[empty].bbx.w # both char widths + dadv[sty][j, chd[i].strval] = bcw - pcw - mcw + # preceding char, then next char + + for sty, chd in ctbl.items(): + prefix, suffix, empty, pistr = ixes[sty] + blnkwd = chd[empty].bbx.w + spw = chd[" "].bbx.w - blnkwd # space width + caph = -chd[empty].bbx.y1 + # cap height is the top of I (relative to baseline) + + dadvscl = dict() + if DIFF_ADVANCES: + for k in dadv[sty]: + dadvscl[k] = dadv[sty][k] / TEXTSIZE + + for i in chd: + cwd = chd[i].bbx.w - blnkwd + # character width (full, including extra space on each side) + if chd[i].bareid in nbb: + inkbb = nbb[chd[i].bareid] + else: + # whitespace: make zero-width + inkbb = [chd[i].bbx.x1, chd[i].bbx.y1, 0, 0] + + if chd[i].strval in badchars: + cwd = 0 + chd[i] = CProp( + chd[i].strval, + cwd / TEXTSIZE, + spw / TEXTSIZE, + caph / TEXTSIZE, + dadvscl, + [val / TEXTSIZE for val in inkbb], + ) + if None in self.tstyset: + ctbl[None] = dict() + for c in self.tstyset[None]: + ctbl[None][c] = CProp(c, 0, 0, 0, dict(), [0, 0, 0, 0]) + return ctbl + + def __str__(self): + ret = "" + for sty in self.ctable: + ret += str(sty) + "\n" + val = None + for c, val in self.ctable[sty].items(): + ret += " " + c + " : " + str(vars(val)) + "\n" + if val is not None: + ret += " " + str(val.dadvs) + return ret + + @staticmethod + def flowy(sty): + """Returns the font's ascent value for the given style.""" + return fcfg.get_fonttools_font(sty)._ascent + + def get_prop(self, char, sty): + """Returns the properties of a character for a given style.""" + try: + return self.ctable[sty][char] + except KeyError as excp: + reset_msg = ( + "This probably means that new text was generated and the SVG's " + "character table is outdated. Reset it by setting" + ) + reset_action = "self.svg.char_table = None" + frequency_msg = ( + "(This can take a long time, so best practice is to do this as few " + "times as is possible.)" + ) + if sty not in self.ctable: + debug("No style matches found!") + debug(reset_msg) + debug(" " + reset_action) + debug(frequency_msg) + debug("\nCharacter: " + char) + debug("Style: " + str(sty)) + debug("Existing styles: " + str(list(self.ctable.keys()))) + else: + debug("No character matches!") + debug(reset_msg) + debug(" " + reset_action) + debug(frequency_msg) + debug("\nCharacter: " + char) + debug("Style: " + str(sty)) + debug("Existing chars: " + str(list(self.ctable[sty].keys()))) + raise KeyError from excp + + def get_prop_mult(self, char, sty, scl): + """Returns the scaled properties of a character for a given style.""" + try: + return self.mults[(char, sty, scl)] + except KeyError: + self.mults[(char, sty, scl)] = self.get_prop(char, sty) * scl + return self.mults[(char, sty, scl)] + + +def wstrip(txt): + """strip whitespaces""" + return txt.translate({ord(c): None for c in " \n\t\r"}) + + +def deleteempty(elem): + """ + Recursively delete empty elements + Tspans are deleted if they're totally empty, TextElements are deleted + if they contain only whitespace + """ + anydeleted = False + for k in list(elem): + dcsndt = deleteempty(k) + anydeleted |= dcsndt + txt = elem.text + tail = elem.tail + if ( + (txt is None or len(txt) == 0) + and (tail is None or len(tail) == 0) + and len(elem) == 0 + ): + elem.delete() + anydeleted = True + # delete anything empty + elif elem.tag == TEtag: + if all( + (dcsndt.text is None or len(wstrip(dcsndt.text)) == 0) + and (dcsndt.tail is None or len(wstrip(dcsndt.tail)) == 0) + for dcsndt in elem.descendants2() + ): + elem.delete() + anydeleted = True + # delete any text elements that are just white space + return anydeleted + + +def maxnone(x): + """Returns the maximum value of a list, or None if the list is empty.""" + if len(x) > 0: + return max(x) + return None + + +def xyset(elem, xyt, val): + """ + A fast setter for 'x', 'y', 'dx', and 'dy' that uses lxml's set directly and + converts arrays to a string + """ + if not (val): + elem.attrib.pop(xyt, None) # pylint: disable=no-member + else: + EBset(elem, xyt, ' '.join('%s' % v for v in val)) + +def remove_position_overflows(el): + """ + Normally Inkscape only produces multiple position attributes (x,y,dx,dy) on a + tspan corresponding to the number of characters. It does support more than this, + but that is a somewhat pathological case that makes editing difficult. + Removing this prior to parsing simplifies the logic needed. + """ + xyvs = {(d, patt) : ParsedText.get_xy(d, patt) for d in el.descendants2() for patt in ['x','y','dx','dy']} + anyoverflow = False + ttree = [v for v in TextTree(el).dgenerator()] + for ddi0, typ0, src0, sel0, txt0 in ttree: + if typ0==TYP_TEXT: + for patt in ['x','y','dx','dy']: + anyoverflow |= (len(xyvs[src0,patt])>1 and + ((txt0 is not None and len(xyvs[src0,patt])>len(txt0)) + or (txt0 is None))) + # inkex.utils.debug((anyoverflow, patt,src0.get_id(),typ0)) + + + if anyoverflow: + toplevels = list(el) + xvs, yvs, dxs, dys = [[] for _ in range(4)] + pos = {'x':xvs,'y':yvs,'dx':dxs,'dy':dys} + diffs = ['dx','dy'] + topidx = 0 + for ddi0, typ0, src0, sel0, txt0 in ttree: + if typ0==TYP_TEXT: + for patt in ['x','y','dx','dy']: + xyv = xyvs[src0, patt] + # Objects lower in the descendant list override ancestors + # dx and dy don't affect flows + if len(xyv) > 0 and xyv[0] is not None: + if patt in diffs or len(xyv)>1: + src0.set(patt,None) # leave individual x,y alone + cntd = 0 + cntl = 0 + for _, typ, src, _, txt in TextTree(el).dgenerator(subel=src0): + if ( + typ == TYP_TAIL + and src.get("sodipodi:role") == "line" + and src in toplevels + ): + cntd += 1 + # top-level Tspans have an implicit CR at + # the beginning of the tail + + if txt is not None: + srtd = cntd + stpd = min(len(xyv),cntd+len(txt)) + srtl = topidx+cntl + stpl = topidx+cntl+stpd-srtd + + if stpl>=len(pos[patt]): + pos[patt] += [None] * (stpl-len(pos[patt])+1) + pos[patt][srtl:stpl] = xyv[srtd:stpd] + cntd += len(txt) + cntl += len(txt) + if cntd >= len(xyv): + break + if txt0 is not None: + topidx += len(txt0) + + topidx = 0 + for ddi, typ, src, sel, txt in ttree: + if txt is not None: + wrapped_tail = False + for patt in ['x','y','dx','dy']: + vals = [v for v in pos[patt][topidx:topidx+len(txt)] if v is not None] + if len(vals)>0: + if typ==TYP_TAIL and not wrapped_tail: + # Tails need to be wrapped in a new Tspan + src = wrap_string(src,typ) + wrapped_tail = True + + if not(len(vals)==1 and patt not in diffs and wrapped_tail): + # wrapping a tail could mess with sprl if single x/y specified + xyset(src, patt, vals) + topidx += len(txt) + +def wrap_string(src,typ): + ''' Wrap a string in a new Tspan/FlowSpan''' + if typ==TYP_TAIL: + span = inkex.Tspan if src.tag in TEtags else inkex.FlowSpan + t = span() + t.text = src.tail + src.tail = None + src.getparent().insert(src.getparent().index(src) + 1, t) + else: + span = inkex.Tspan if src.tag in TEtags else inkex.FlowSpan + t = span() + t.text = src.text + src.text = None + src.insert(0, t) + return t + +def trim_list(lst,val): + """ Trims any values from the end of a list equal to val """ + trim = lst[:len(lst) - next((i for i, x in enumerate(reversed(lst)) if x != val), len(lst))] + return trim if len(trim)>0 else None \ No newline at end of file diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/typelibs/PangoFT2-1.0.typelib b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/typelibs/PangoFT2-1.0.typelib new file mode 100644 index 0000000..e505499 Binary files /dev/null and b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/typelibs/PangoFT2-1.0.typelib differ diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/typelibs/PangoFc-1.0.typelib b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/typelibs/PangoFc-1.0.typelib new file mode 100644 index 0000000..652ac77 Binary files /dev/null and b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/typelibs/PangoFc-1.0.typelib differ diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/typelibs/fontconfig-2.0.typelib b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/typelibs/fontconfig-2.0.typelib new file mode 100644 index 0000000..acbd826 Binary files /dev/null and b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/typelibs/fontconfig-2.0.typelib differ diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/typelibs/freetype2-2.0.typelib b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/typelibs/freetype2-2.0.typelib new file mode 100644 index 0000000..46dab5d Binary files /dev/null and b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/typelibs/freetype2-2.0.typelib differ diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/utils.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/utils.py new file mode 100644 index 0000000..dd7cb0a --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/text/utils.py @@ -0,0 +1,639 @@ +# coding=utf-8 +# +# Copyright (c) 2023 David Burghoff +# Martin Owens +# Sergei Izmailov +# Thomas Holder +# Jonathan Neuhauser +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +""" +Utilities for text parsing +""" + +import math +import re +import sys +import os +from functools import lru_cache +import lxml +from lxml import etree +import inkex +import inkex.command +from inkex.properties import all_properties +from inkex.units import CONVERSIONS, BOTH_MATCH + +# For style components that represent a size (stroke-width, font-size, etc), +# calculate the true size reported by Inkscape in user units, inheriting +# any styles/transforms/document scaling +flookup = {"small": "10px", "medium": "12px", "large": "14px"} + + +def composed_width(elem, comp): + """ + Gets the transformed size of a style component and the scale factor representing + the scale of the composed transform, accounting for relative sizes. + + Parameters: + elem (Element): The element whose style to compute. + comp (str): The component of the style to compute, such as 'stroke-width' + or 'font-size'. + + Returns: + tuple: A tuple containing the true size in user units, the scale factor, + and the untransformed size + """ + sty = elem.cspecified_style + ctf = elem.ccomposed_transform + satt = sty.get(comp) + + # Get default attribute if empty + if satt is None: + satt = default_style_atts[comp] + + if "%" in satt: # relative width, get ancestor width + cel = elem + while satt != cel.cstyle.get(comp) and satt != cel.get(comp): + cel = cel.getparent() + # figure out ancestor where % is coming from + + satt = float(satt.strip("%")) / 100 + tsz, scf, utsz = composed_width(cel.getparent(), comp) + + # Since relative widths have no untransformed width, we assign + # it to be a scaled version of the ancestor's ut width + return tsz * satt, scf, utsz * satt + utsz = ipx(satt) + if utsz is None: + utsz = ( + utsz + or ipx(flookup.get(satt) if comp == "font-size" else None) + or ipx(default_style_atts[comp]) + ) + scf = math.sqrt(abs(ctf.a * ctf.d - ctf.b * ctf.c)) # scale factor + return utsz * scf, scf, utsz + + +def composed_lineheight(elem): + """ + Get absolute line-height in user units based on an element's specified style. + + Parameters: + elem (Element): The element whose line-height to compute. + + Returns: + float: The computed line-height in user units. + """ + sty = elem.cspecified_style + satt = sty.get("line-height", default_style_atts["line-height"]) + if satt == "normal": + satt = 1.25 + elif "%" in satt: # relative width, get parent width + satt = float(satt.strip("%")) / 100 + else: + try: + # Lines have no unit, em treated the same + satt = float(satt.strip("em")) + except ValueError: + fsz, scf, _ = composed_width(elem, "font-size") + satt = ipx(satt) / (fsz / scf) + fsz, _, _ = composed_width(elem, "font-size") + return satt * fsz + + +def unique(lst): + """ + Returns a list of unique items from the given list while preserving order. + + Parameters: + lst (list): The list from which to remove duplicates. + + Returns: + list: A list of unique items in the order they appeared in the input list. + """ + return list(dict.fromkeys(lst)) + + +def uniquetol(x, tol): + """ + Like unique, but for numeric values and accepts a tolerance. + + Parameters: + x (list of float): List of numeric values from which to remove near-duplicates. + tol (float): The tolerance within which two numbers are considered the same. + + Returns: + list of float: A list of unique numbers within the specified tolerance. + """ + if not x: # Check if the input list is empty + return [] + x_sorted = sorted((y for y in x if y is not None)) # Sort, ignoring None values + ret = ( + [x_sorted[0]] if x_sorted else [] + ) # Start with the first value if there are any non-None values + for i in range(1, len(x_sorted)): + if abs(x_sorted[i] - ret[-1]) > tol: + ret.append(x_sorted[i]) + # If there were any None values in the original list, append None to the result list + if None in x: + ret.append(None) + return ret + + +# Adds ctag to the inkex classes, which holds each class's corresponding tag +# Checking the tag is usually much faster than instance checking, which can +# substantially speed up low-level functions. +# pylint:disable=protected-access +lt = dict(inkex.elements._parser.NodeBasedLookup.lookup_table) +shapetags = set() +for key, v in lt.items(): + for v2 in v: + v2.ctag = inkex.addNS(key[1], key[0]) if isinstance(key, tuple) else key + if issubclass(v2, inkex.ShapeElement): + shapetags.add(v2.ctag) +tags = lambda x: {v.ctag for v in x} # converts class tuple to set of tags +# pylint:enable=protected-access + +rectlike_tags = tags((inkex.PathElement, inkex.Rectangle, inkex.Line, inkex.Polyline)) +rect_tag = inkex.Rectangle.ctag +pel_tag = inkex.PathElement.ctag +usetag = inkex.Use.ctag + +PTH_CMDS = "".join(list(inkex.paths.PathCommand._letter_to_class.keys())) +pth_cmd_pat = re.compile("[" + re.escape(PTH_CMDS) + "]") +cnt_pth_cmds = lambda d: len(pth_cmd_pat.findall(d)) # count path commands + + +def isrectangle(elem, includingtransform=True): + """ + Determines if an element is rectangle-like, considering transformations if + specified. + + Parameters: + elem (Element): The element to check. + includingtransform (bool): Whether to consider transformations in the + determination. + + Returns: + tuple: A tuple containing a boolean indicating if the element is a rectangle and + the path if it is. + """ + + ret = True + if not includingtransform and elem.tag == rect_tag: + pth = elem.cpath + elif elem.tag in rectlike_tags: + if elem.tag == pel_tag and not (1 <= cnt_pth_cmds(elem.get("d", "")) <= 6): + # Allow up to 6 (initial M + 4 lines + redundant close path) + return False + pth = elem.cpath + + if includingtransform: + tmat = elem.ctransform.matrix + x, y = list( + zip( + *[ + ( + tmat[0][0] * pt.x + tmat[0][1] * pt.y + tmat[0][2], + tmat[1][0] * pt.x + tmat[1][1] * pt.y + tmat[1][2], + ) + for pt in pth.end_points + ] + ) + ) + else: + x, y = list(zip(*[(pt.x, pt.y) for pt in pth.end_points])) + + maxsz = max(max(x) - min(x), max(y) - min(y)) + tol = 1e-3 * maxsz + if len(uniquetol(x, tol)) != 2 or len(uniquetol(y, tol)) != 2: + ret = False + elif elem.tag == usetag: + useel = elem.get_link("xlink:href") + if useel is not None: + return isrectangle(useel) + ret = True + else: + ret = False + + if ret: + if ( + elem.get_link("mask", llget=True) is not None + or elem.cspecified_style.get_link("filter", elem.croot) is not None + ): + ret = False + elif elem.get_link("clip-path", llget=True) is not None and any( + not isrectangle(k) for k in list(elem.get_link("clip-path", llget=True)) + ): + ret = False + return ret + +class InkscapeSystemInfo: + """ + Discovers and caches Inkscape System info. + """ + + _UNSET = object() # Sentinel value for unset attributes + + def __init__(self): + """Initialize InkscapeSystemInfo.""" + self._language = self._UNSET + self._preferences = self._UNSET + self._binary_location = self._UNSET + self._binary_version = self._UNSET + + @property + def language(self): + """Get the language used by Inkscape.""" + if self._language is self._UNSET: + self._language = self.determine_language() + return self._language + + @property + def preferences(self): + """Get the preferences file location.""" + if self._preferences is self._UNSET: + self._preferences = self.find_preferences() + return self._preferences + + @property + def binary_location(self): + """Get the Inkscape binary location.""" + if self._binary_location is self._UNSET: + self._binary_location = self.get_binary_location() + return self._binary_location + + @property + def binary_version(self): + """Get the Inkscape binary version.""" + if self._binary_version is self._UNSET: + self._binary_version = self.get_binary_version() + return self._binary_version + + def get_binary_version(self): + """Gets the binary location by calling with --version (slow)""" + proc = subprocess_repeat([self.binary_location, "--version"]) + + match = re.search(r"Inkscape\s+(\S+)\s+\(", str(proc.stdout)) + return match.group(1) if match else None + + @staticmethod + def get_binary_location(): + """ + Gets the location of the Inkscape binary, checking the system + path if necessary. + """ + + program = inkex.command.INKSCAPE_EXECUTABLE_NAME + try: + return inkex.command.which(program) + except inkex.command.CommandNotFound as excp: + # Search the path as a backup (primarily for testing) + try: + from shutil import which as warlock + + for sysp in sys.path: + if sys.platform == "win32": + prog = warlock(program, path=os.environ["PATH"] + ";" + sysp) + if prog: + return prog + except ImportError as impe: + raise ImportError("Failed to import the 'which' function.") from impe + raise inkex.command.CommandNotFound( + f"Can not find the command: '{program}'" + ) from excp + + @staticmethod + def find_preferences(): + """Attempt to discover preferences.xml""" + prefspaths = [] + + # First check the location of the user extensions directory + mydir = os.path.dirname(os.path.abspath(__file__)) + file_path = mydir + while "extensions" in file_path and os.path.basename(file_path) != "extensions": + file_path = os.path.dirname(file_path) + prefspaths.append(os.path.join(os.path.dirname(file_path), "preferences.xml")) + + # Try some common default locations based on the home directory + home = os.path.expanduser("~") + if sys.platform == "win32": + appdata = os.getenv("APPDATA") + if appdata is not None: + # https://wiki.inkscape.org/wiki/Preferences_subsystem + prefspaths.append( + os.path.join( + os.path.abspath(appdata), "inkscape", "preferences.xml" + ) + ) + # https://en.wikipedia.org/wiki/Environment_variable#Default_Values_on_Microsoft_Windows + prefspaths.append( + os.path.join(home, "AppData", "Roaming", "inkscape", "preferences.xml") + ) + # https://en.wikipedia.org/wiki/Environment_variable#Default_Values_on_Microsoft_Windows + # http://tavmjong.free.fr/INKSCAPE/MANUAL/html/Customize-Files.html + prefspaths.append( + os.path.join(home, "­Application Data", "­Inkscape", "preferences.xml") + ) + else: + if sys.platform == "darwin": + # test Mac + prefspaths.append( + os.path.join( + home, + "Library", + "Application Support", + "org.inkscape.Inkscape", + "config", + "inkscape", + "preferences.xml", + ) + ) + # test Linux + prefspaths.append( + os.path.join(home, ".config", "inkscape", "preferences.xml") + ) + # https://wiki.inkscape.org/wiki/Preferences_subsystem#Where_preferences_are_stored + prefspaths.append( + os.path.join(home, ".config", "Inkscape", "preferences.xml") + ) + # https://wiki.inkscape.org/wiki/Preferences_subsystem#Where_preferences_are_stored + # https://alpha.inkscape.org/vectors/www.inkscapeforum.com/viewtopicc8ae.html?t=1712 + prefspaths.append(os.path.join(home, ".inkscape", "preferences.xml")) + + # Try finding from snap location + file_path = mydir + while "snap" in file_path and os.path.basename(file_path) != "snap": + file_path = os.path.dirname(file_path) + prefspaths.append( + os.path.join( + os.path.dirname(file_path), ".config", "inkscape", "preferences.xml" + ) + ) + + # Iterate over potential paths and return the first existing one + for path in prefspaths: + if os.path.exists(path): + return path + + return None # failed + + @staticmethod + def determine_language(verbose=False): + """Try to find the language Inkscape is using""" + + def get_ui_language(prefspath): + proot = etree.parse(prefspath).getroot() + for k in proot: + if k.get("id") == "ui" and k.get("language") is not None: + return k.get("language") + return None + + def getlocale_mod(): + # pylint:disable=import-outside-toplevel + import warnings + import locale + # pylint:enable=import-outside-toplevel + + with warnings.catch_warnings(): + # temporary work-around for + # https://github.com/python/cpython/issues/82986 + # by continuing to use getdefaultlocale() even though it has been + # deprecated. + if sys.version_info.minor >= 13: + warnings.warn( + "This function may not behave as expected in" + " Python versions beyond 3.12", + FutureWarning, + ) + warnings.simplefilter("ignore", category=DeprecationWarning) + language_code = locale.getdefaultlocale()[0] + if language_code: + return language_code + return "en-US" + + # First, try to get the language from preferences.xml + pxml = InkscapeSystemInfo().find_preferences() + if verbose: + inkex.utils.debug("Found preferences.xml: " + str(pxml)) + if pxml is not None: + prefslang = get_ui_language(pxml) + if verbose: + inkex.utils.debug("preferences.xml language: " + str(prefslang)) + # If it can't be found or is set to use the system lang, use locale + if pxml is None or prefslang in ["", None]: + lcle = getlocale_mod() + prefslang = lcle.split("_")[0] + if verbose: + inkex.utils.debug("locale language: " + str(prefslang)) + return prefslang + + +inkex.inkscape_system_info = InkscapeSystemInfo() # type: ignore + + +def subprocess_repeat(argin,cwd=None): + """ + In the event of a timeout, repeats a subprocess call several times. + + Parameters: + argin (list): The command and arguments to run in the subprocess. + + Returns: + CompletedProcess: The result from the subprocess call. + """ + base_timeout = 60 + nattempts = 6 + import subprocess + + nfails = 0 + ntime = 0 + for i in range(nattempts): + timeout = base_timeout * 2**i + try: + os.environ["SELF_CALL"] = "true" # seems to be needed for 1.3 + proc = subprocess.run( + argin, + shell=False, + timeout=timeout, + stdout=subprocess.PIPE, + stderr=subprocess.DEVNULL, + check=True, cwd=cwd + ) + break + except subprocess.TimeoutExpired: + nfails += 1 + ntime += timeout + if nfails == nattempts: + raise TimeoutError( + "\nThe call to the Inkscape binary timed out " + + str(nattempts) + + " times in " + + str(ntime) + + " seconds.\n\n" + + "This may be a temporary issue; try running the extension again." + ) + else: + return proc + + +# Get default style attributes +try: + default_style_atts = {a: v[1] for a, v in all_properties.items()} # type: ignore +except TypeError: + default_style_atts = { + a: "".join([str(t.value) for t in v.default_value]) + for a, v in all_properties.items() + } # type: ignore +default_style_atts["font-variant-ligatures"] = "normal" # missing + + +comment_tag = lxml.etree.Comment("").tag + + +def list2(elem): + """Returns non-comment children of an element.""" + return [k for k in list(elem) if not (k.tag == comment_tag)] + + +conv2 = {k: v / CONVERSIONS["px"] for k, v in CONVERSIONS.items()} + + +@lru_cache(maxsize=None) +def ipx(strin): + """ + Implicit pixel function + For many properties, a size specification of '1px' actually means '1uu' + Even if the size explicitly says '1mm' and the user units are mm, this will be + first converted to px and then interpreted to mean user units. (So '1mm' would + up being bigger than 1 mm). This returns the size as Inkscape will interpret it + (in uu). + No unit: Assumes 'px' + Invalid unit: Returns None + """ + try: + ret = BOTH_MATCH.match(strin) + value = float(ret.groups()[0]) + from_unit = ret.groups()[-1] or "px" + return value * conv2[from_unit] + except (AttributeError, TypeError): + return None + + +# pylint:disable=invalid-name +class bbox: + """ + A modified bounding box class. + """ + + __slots__ = ("isnull", "x1", "x2", "y1", "y2", "xc", "yc", "w", "h", "sbb") + + def __init__(self, bb): + """Initialize bbox.""" + if bb is not None: + self.isnull = False + if len(bb) == 2: # allow tuple of two points ((x1,y1),(x2,y2)) + self.sbb = [ + min(bb[0][0], bb[1][0]), + min(bb[0][1], bb[1][1]), + abs(bb[0][0] - bb[1][0]), + abs(bb[0][1] - bb[1][1]), + ] + else: + self.sbb = bb[:] # standard bbox + self.x1, self.y1, self.w, self.h = self.sbb + self.x2 = self.x1 + self.w + self.y2 = self.y1 + self.h + self.xc = (self.x1 + self.x2) / 2 + self.yc = (self.y1 + self.y2) / 2 + else: + self.isnull = True + + def copy(self): + """Copy the bounding box.""" + ret = bbox.__new__(bbox) + ret.isnull = self.isnull + if not self.isnull: + ret.x1 = self.x1 + ret.x2 = self.x2 + ret.y1 = self.y1 + ret.y2 = self.y2 + ret.xc = self.xc + ret.yc = self.yc + ret.w = self.w + ret.h = self.h + ret.sbb = self.sbb[:] + return ret + + def transform(self, xform): + """Transform the bounding box.""" + if not (self.isnull) and xform is not None: + tr1 = xform.apply_to_point([self.x1, self.y1]) + tr2 = xform.apply_to_point([self.x2, self.y2]) + tr3 = xform.apply_to_point([self.x1, self.y2]) + tr4 = xform.apply_to_point([self.x2, self.y1]) + return bbox( + [ + min(tr1[0], tr2[0], tr3[0], tr4[0]), + min(tr1[1], tr2[1], tr3[1], tr4[1]), + max(tr1[0], tr2[0], tr3[0], tr4[0]) + - min(tr1[0], tr2[0], tr3[0], tr4[0]), + max(tr1[1], tr2[1], tr3[1], tr4[1]) + - min(tr1[1], tr2[1], tr3[1], tr4[1]), + ] + ) + return bbox(None) + + def intersect(self, bb2): + """Check if bounding boxes intersect.""" + return (abs(self.xc - bb2.xc) * 2 < (self.w + bb2.w)) and ( + abs(self.yc - bb2.yc) * 2 < (self.h + bb2.h) + ) + + def union(self, bb2): + """Get the union of two bounding boxes.""" + if isinstance(bb2, list): + bb2 = bbox(bb2) + if not (self.isnull) and not bb2.isnull: + minx = min((self.x1, self.x2, bb2.x1, bb2.x2)) + maxx = max((self.x1, self.x2, bb2.x1, bb2.x2)) + miny = min((self.y1, self.y2, bb2.y1, bb2.y2)) + maxy = max((self.y1, self.y2, bb2.y1, bb2.y2)) + return bbox([minx, miny, maxx - minx, maxy - miny]) + if self.isnull and not bb2.isnull: + return bb2 + return self # bb2 is empty + + def intersection(self, bb2): + """Get the intersection of two bounding boxes.""" + if isinstance(bb2, list): + bb2 = bbox(bb2) + if not (self.isnull): + minx = max([self.x1, bb2.x1]) + maxx = min([self.x2, bb2.x2]) + miny = max([self.y1, bb2.y1]) + maxy = min([self.y2, bb2.y2]) + if maxx < minx or maxy < miny: + return bbox(None) + return bbox([minx, miny, maxx - minx, maxy - miny]) + return bbox(bb2.sbb) + + def __mul__(self, scl): + """Scale the bounding box.""" + return bbox([self.x1 * scl, self.y1 * scl, self.w * scl, self.h * scl]) + + +# pylint:enable=invalid-name diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/transforms.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/transforms.py new file mode 100644 index 0000000..846dff7 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/transforms.py @@ -0,0 +1,1253 @@ +# coding=utf-8 +# +# Copyright (C) 2006 Jean-Francois Barraud, barraud@math.univ-lille1.fr +# Copyright (C) 2010 Alvin Penner, penner@vaxxine.com +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# barraud@math.univ-lille1.fr +# +# This code defines several functions to make handling of transform +# attribute easier. +# +""" +Provide transformation parsing to extensions +""" +from __future__ import annotations +import re +from decimal import Decimal +from math import cos, radians, sin, sqrt, tan, fabs, atan2, hypot, pi, isfinite +from typing import ( + overload, + cast, + Callable, + Generator, + Iterator, + Tuple, + Union, + Optional, + List, +) + + +from .utils import strargs, KeyDict + + +VectorLike = Union[ + "ImmutableVector2d", Tuple[float, float] +] # pylint: disable=invalid-name +MatrixLike = Union[ + str, + Tuple[Tuple[float, float, float], Tuple[float, float, float]], + Tuple[float, float, float, float, float, float], + "Transform", +] +BoundingIntervalArgs = Union[ + "BoundingInterval", Tuple[float, float], float +] # pylint: disable=invalid-name + +# All the names that get added to the inkex API itself. +__all__ = ( + "BoundingBox", + "DirectedLineSegment", + "ImmutableVector2d", + "Transform", + "Vector2d", +) + + +# Old settings, supported because users click 'ok' without looking. +XAN = KeyDict({"l": "left", "r": "right", "m": "center_x"}) +YAN = KeyDict({"t": "top", "b": "bottom", "m": "center_y"}) +# Anchoring objects with given directions (see inx options) +CUSTOM_DIRECTION = {270: "tb", 90: "bt", 0: "lr", 360: "lr", 180: "rl"} +DIRECTION = ["tb", "bt", "lr", "rl", "ro", "ri"] + + +class ImmutableVector2d: + """Represents an immutable element of 2-dimensional Euclidean space""" + + _x = 0.0 + _y = 0.0 + + x = property(lambda self: self._x) + y = property(lambda self: self._y) + + @overload + def __init__(self): + # type: () -> None + pass + + @overload + def __init__(self, v, fallback=None): + # type: (Union[VectorLike, str], Optional[Union[VectorLike, str]]) -> None + pass + + @overload + def __init__(self, x, y): + # type: (float, float) -> None + pass + + def __init__(self, *args, fallback=None): + try: + if len(args) == 0: + x, y = 0.0, 0.0 + elif len(args) == 1: + x, y = self._parse(args[0]) + elif len(args) == 2: + x, y = map(float, args) + else: + raise ValueError("too many arguments") + except (ValueError, TypeError) as error: + if fallback is None: + raise ValueError("Cannot parse vector and no fallback given") from error + x, y = ImmutableVector2d(fallback) + self._x, self._y = float(x), float(y) + + @staticmethod + def _parse(point): + # type: (Union[VectorLike, str]) -> Tuple[float, float] + if isinstance(point, ImmutableVector2d): + x, y = point.x, point.y + elif isinstance(point, (tuple, list)) and len(point) == 2: + x, y = map(float, point) + elif isinstance(point, str) and point.count(",") == 1: + x, y = map(float, point.split(",")) + else: + raise ValueError(f"Can't parse {repr(point)}") + return x, y + + def __add__(self, other): + # type: (VectorLike) -> Vector2d + other = Vector2d(other) + return Vector2d(self.x + other.x, self.y + other.y) + + def __radd__(self, other): + # type: (VectorLike) -> Vector2d + other = Vector2d(other) + return Vector2d(self.x + other.x, self.y + other.y) + + def __sub__(self, other): + # type: (VectorLike) -> Vector2d + other = Vector2d(other) + return Vector2d(self.x - other.x, self.y - other.y) + + def __rsub__(self, other): + # type: (VectorLike) -> Vector2d + other = Vector2d(other) + return Vector2d(-self.x + other.x, -self.y + other.y) + + def __neg__(self): + # type: () -> Vector2d + return Vector2d(-self.x, -self.y) + + def __pos__(self): + # type: () -> Vector2d + return Vector2d(self.x, self.y) + + def __floordiv__(self, factor): + # type: (float) -> Vector2d + return Vector2d(self.x / float(factor), self.y / float(factor)) + + def __truediv__(self, factor): + # type: (float) -> Vector2d + return Vector2d(self.x / float(factor), self.y / float(factor)) + + def __div__(self, factor): + # type: (float) -> Vector2d + return Vector2d(self.x / float(factor), self.y / float(factor)) + + def __mul__(self, factor): + # type: (float) -> Vector2d + return Vector2d(self.x * factor, self.y * factor) + + def __abs__(self): + # type: () -> float + return self.length + + def __rmul__(self, factor): + # type: (float) -> VectorLike + return Vector2d(self.x * factor, self.y * factor) + + def __repr__(self): + # type: () -> str + return f"Vector2d({self.x:.6g}, {self.y:.6g})" + + def __str__(self): + # type: () -> str + return f"{self.x:.6g}, {self.y:.6g}" + + def __iter__(self) -> Generator[float, None, None]: + yield self.x + yield self.y + + def __len__(self): + # type: () -> int + return 2 + + def __getitem__(self, item): + # type: (int) -> float + return (self.x, self.y)[item] + + def to_tuple(self) -> Tuple[float, float]: + """A tuple of the vector's components""" + return cast(Tuple[float, float], tuple(self)) + + def to_polar_tuple(self): + # type: () -> Tuple[float, Optional[float]] + """A tuple of the vector's magnitude and direction + + .. versionadded:: 1.1""" + return self.length, self.angle + + def dot(self, other: VectorLike) -> float: + """Multiply Vectors component-wise""" + other = Vector2d(other) + return self.x * other.x + self.y * other.y + + def cross(self, other): + # type: (VectorLike) -> float + """Z component of the cross product of the vectors extended into 3D + + .. versionadded:: 1.1""" + other = Vector2d(other) + return self.x * other.y - self.y * other.x + + def is_close( + self, + other: Union[VectorLike, str, Tuple[float, float]], + rtol: float = 1e-5, + atol: float = 1e-8, + ) -> float: + """Checks if two vectors are (almost) identical, up to both absolute and + relative tolerance.""" + other = Vector2d(other) + delta = (self - other).length + return delta < (atol + rtol * other.length) + + @property + def length(self) -> float: + """Returns the length of the vector""" + return sqrt(self.dot(self)) + + @property + def angle(self): + # type: () -> Optional[float] + """The angle of the vector when represented in polar coordinates + + .. versionadded:: 1.1""" + if self.x == 0 and self.y == 0: + return None + return atan2(self.y, self.x) + + +class Vector2d(ImmutableVector2d): + """Represents an element of 2-dimensional Euclidean space""" + + @staticmethod + def from_polar(radius, theta): + # type: (float, Optional[float]) -> Optional[Vector2d] + """Creates a Vector2d from polar coordinates + + None is returned when theta is None and radius is not zero. + + .. versionadded:: 1.1 + """ + if radius == 0.0: + return Vector2d(0.0, 0.0) + if theta is not None: + return Vector2d(radius * cos(theta), radius * sin(theta)) + # A vector with a radius but no direction is invalid + return None + + @ImmutableVector2d.x.setter + def x(self, value): + # type: (Union[float, int, str]) -> None + self._x = float(value) + + @ImmutableVector2d.y.setter + def y(self, value): + # type: (Union[float, int, str]) -> None + self._y = float(value) + + def __iadd__(self, other): + # type: (VectorLike) -> Vector2d + other = Vector2d(other) + self.x += other.x + self.y += other.y + return self + + def __isub__(self, other): + # type: (VectorLike) -> Vector2d + other = Vector2d(other) + self.x -= other.x + self.y -= other.y + return self + + def __imul__(self, factor): + # type: (float) -> Vector2d + self.x *= factor + self.y *= factor + return self + + def __idiv__(self, factor): + # type: (float) -> Vector2d + self.x /= factor + self.y /= factor + return self + + def __itruediv__(self, factor): + # type: (float) -> Vector2d + self.x /= factor + self.y /= factor + return self + + def __ifloordiv__(self, factor): + # type: (float) -> Vector2d + self.x /= factor + self.y /= factor + return self + + @overload + def assign(self, x, y): + # type: (float, float) -> VectorLike + pass + + @overload + def assign(self, other): + # type: (VectorLike, str) -> VectorLike + pass + + def assign(self, *args): + """Assigns a different vector in place""" + self.x, self.y = Vector2d(*args) + return self + + +class Transform: + """A transformation object which will always reduce to a matrix and can + then be used in combination with other transformations for reducing + finding a point and printing svg ready output. + + Use with svg transform attribute input: + + tr = Transform("scale(45, 32)") + + Use with triad matrix input (internal representation): + + tr = Transform(((1.0, 0.0, 0.0), (0.0, 1.0, 0.0))) + + Use with hexad matrix input (i.e. svg matrix(...)): + + tr = Transform((1.0, 0.0, 0.0, 1.0, 0.0, 0.0)) + + Once you have a transformation you can operate tr * tr to compose, + any of the above inputs are also valid operators for composing. + """ + + TRM = re.compile(r"(translate|scale|rotate|skewX|skewY|matrix)\s*\(([^)]*)\)\s*,?") + absolute_tolerance = 1e-5 # type: float + + def __init__( + self, + matrix=None, # type: Optional[MatrixLike] + callback=None, # type: Optional[Callable[[Transform], Transform]] + **extra, + ): + # type: (...) -> None + self.callback = None + self.matrix = ((1.0, 0.0, 0.0), (0.0, 1.0, 0.0)) + if matrix is not None: + self._set_matrix(matrix) + + self.add_kwargs(**extra) + # Set callback last, so it doesn't kick off just setting up the internal value + self.callback = callback + + def _set_matrix(self, matrix): + # type: (MatrixLike) -> None + """Parse a given string as an svg transformation instruction. + + .. versionadded:: 1.1""" + if isinstance(matrix, str): + for func, values in self.TRM.findall(matrix.strip()): + getattr(self, "add_" + func.lower())(*strargs(values)) + elif isinstance(matrix, Transform): + self.matrix = matrix.matrix + elif isinstance(matrix, (tuple, list)) and len(matrix) == 2: + row1 = matrix[0] + row2 = matrix[1] + if isinstance(row1, (tuple, list)) and isinstance(row2, (tuple, list)): + if len(row1) == 3 and len(row2) == 3: + row1 = cast(Tuple[float, float, float], tuple(map(float, row1))) + row2 = cast(Tuple[float, float, float], tuple(map(float, row2))) + self.matrix = row1, row2 + else: + raise ValueError( + f"Matrix '{matrix}' is not a valid transformation matrix" + ) + else: + raise ValueError( + f"Matrix '{matrix}' is not a valid transformation matrix" + ) + elif isinstance(matrix, (list, tuple)) and len(matrix) == 6: + tmatrix = cast( + Union[List[float], Tuple[float, float, float, float, float, float]], + matrix, + ) + row1 = (float(tmatrix[0]), float(tmatrix[2]), float(tmatrix[4])) + row2 = (float(tmatrix[1]), float(tmatrix[3]), float(tmatrix[5])) + self.matrix = row1, row2 + elif not isinstance(matrix, (list, tuple)): + raise ValueError(f"Invalid transform type: {type(matrix).__name__}") + else: + raise ValueError(f"Matrix '{matrix}' is not a valid transformation matrix") + + # These provide quick access to the svg matrix: + # + # [ a, c, e ] + # [ b, d, f ] + # + a = property(lambda self: self.matrix[0][0]) # pylint: disable=invalid-name + b = property(lambda self: self.matrix[1][0]) # pylint: disable=invalid-name + c = property(lambda self: self.matrix[0][1]) # pylint: disable=invalid-name + d = property(lambda self: self.matrix[1][1]) # pylint: disable=invalid-name + e = property(lambda self: self.matrix[0][2]) # pylint: disable=invalid-name + f = property(lambda self: self.matrix[1][2]) # pylint: disable=invalid-name + + def __bool__(self): + # type: () -> bool + return not self.__eq__(Transform()) + + __nonzero__ = __bool__ + + @overload + def add_matrix(self, a): + # type: (MatrixLike) -> Transform + pass + + @overload + def add_matrix( # pylint: disable=too-many-arguments + self, a: float, b: float, c: float, d: float, e: float, f: float + ) -> Transform: + pass + + @overload + def add_matrix(self, a, b): + # type: (Tuple[float, float, float], Tuple[float, float, float]) -> Transform + pass + + def add_matrix(self, *args): + """Add matrix in order they appear in the svg hexad""" + if len(args) == 1: + self.__imatmul__(Transform(args[0])) + elif len(args) == 2 or len(args) == 6: + self.__imatmul__(Transform(args)) + else: + raise ValueError(f"Invalid number of arguments {args}") + return self + + def add_kwargs(self, **kwargs): + """Add translations, scales, rotations etc using key word arguments""" + for key, value in reversed(list(kwargs.items())): + func = getattr(self, "add_" + key) + if isinstance(value, tuple): + func(*value) + elif value is not None: + func(value) + return self + + @overload + def add_translate(self, dr): + # type: (VectorLike) -> Transform + pass + + @overload + def add_translate(self, tr_x, tr_y=0.0): + # type: (float, Optional[float]) -> Transform + pass + + def add_translate(self, *args): + """Add translate to this transformation""" + if len(args) == 1 and isinstance(args[0], (int, float)): + tr_x, tr_y = args[0], 0.0 + else: + tr_x, tr_y = Vector2d(*args) + self.__imatmul__(((1.0, 0.0, tr_x), (0.0, 1.0, tr_y))) + return self + + def add_scale(self, sc_x, sc_y=None): + """Add scale to this transformation""" + sc_y = sc_x if sc_y is None else sc_y + self.__imatmul__(((sc_x, 0.0, 0.0), (0.0, sc_y, 0.0))) + return self + + @overload + def add_rotate(self, deg, center): + # type: (float, VectorLike) -> Transform + pass + + @overload + def add_rotate(self, deg, center_x, center_y): + # type: (float, float, float) -> Transform + pass + + @overload + def add_rotate(self, deg): + # type: (float) -> Transform + pass + + @overload + def add_rotate(self, deg, a): + # type: (float, Union[VectorLike, str]) -> Transform + pass + + @overload + def add_rotate(self, deg, a, b): + # type: (float, float, float) -> Transform + pass + + def add_rotate(self, deg, *args): + """Add rotation to this transformation""" + center_x, center_y = Vector2d(*args) + _cos, _sin = cos(radians(deg)), sin(radians(deg)) + self.__imatmul__(((_cos, -_sin, center_x), (_sin, _cos, center_y))) + self.__imatmul__(((1.0, 0.0, -center_x), (0.0, 1.0, -center_y))) + return self + + def add_skewx(self, deg): + # type: (float) -> Transform + """Add skew x to this transformation""" + self.__imatmul__(((1.0, tan(radians(deg)), 0.0), (0.0, 1.0, 0.0))) + return self + + def add_skewy(self, deg): + # type: (float) -> Transform + """Add skew y to this transformation""" + self.__imatmul__(((1.0, 0.0, 0.0), (tan(radians(deg)), 1.0, 0.0))) + return self + + def to_hexad(self): + # type: () -> Iterator[float] + """Returns the transform as a hexad matrix (used in svg)""" + return (val for lst in zip(*self.matrix) for val in lst) + + def is_translate(self, exactly=False): + # type: (bool) -> bool + """Returns True if this transformation is ONLY translate""" + tol = self.absolute_tolerance if not exactly else 0.0 + return ( + fabs(self.a - 1) <= tol + and abs(self.d - 1) <= tol + and fabs(self.b) <= tol + and fabs(self.c) <= tol + ) + + def is_scale(self, exactly=False): + # type: (bool) -> bool + """Returns True if this transformation is ONLY scale""" + tol = self.absolute_tolerance if not exactly else 0.0 + return ( + fabs(self.e) <= tol + and fabs(self.f) <= tol + and fabs(self.b) <= tol + and fabs(self.c) <= tol + ) + + def is_rotate(self, exactly=False): + # type: (bool) -> bool + """Returns True if this transformation is ONLY rotate""" + tol = self.absolute_tolerance if not exactly else 0.0 + return ( + self._is_URT(exactly=exactly) + and fabs(self.e) <= tol + and fabs(self.f) <= tol + and fabs(self.a**2 + self.b**2 - 1) <= tol + ) + + def rotation_degrees(self): + # type: () -> float + """Return the amount of rotation in this transform""" + if not self._is_URT(exactly=False): + raise ValueError( + "Rotation angle is undefined for non-uniformly scaled or skewed " + "matrices" + ) + return atan2(self.b, self.a) * 180 / pi + + def __str__(self): + # type: () -> str + """Format the given matrix into a string representation for svg""" + hexad = tuple(self.to_hexad()) + if self.is_translate(): + if not self: + return "" + return f"translate({self.e:.6g}, {self.f:.6g})" + if self.is_scale(): + return f"scale({self.a:.6g}, {self.d:.6g})" + if self.is_rotate(): + return f"rotate({self.rotation_degrees():.6g})" + return f"matrix({' '.join(f'{var:.6g}' for var in hexad)})" + + def __repr__(self) -> str: + """String representation of this object""" + return ( + f"{type(self).__name__}((" + f"({', '.join(f'{var:.6g}' for var in self.matrix[0])}), " + f"({', '.join(f'{var:.6g}' for var in self.matrix[1])})))" + ) + + def __eq__(self, matrix): + # typing this requires writing a proof for mypy that matrix is really + # MatrixLike + """Test if this transformation is equal to the given matrix""" + if isinstance(matrix, (str, tuple, list, Transform)): + val = all( + fabs(l - r) <= self.absolute_tolerance + for l, r in zip(self.to_hexad(), Transform(matrix).to_hexad()) + ) + else: + val = False + return val + + def __matmul__(self, matrix): + # type: (MatrixLike) -> Transform + """Combine this transform's internal matrix with the given matrix""" + # Conform the input to a known quantity (and convert if needed) + other = Transform(matrix) + # Return a transformation as the combined result + return Transform( + ( + self.a * other.a + self.c * other.b, + self.b * other.a + self.d * other.b, + self.a * other.c + self.c * other.d, + self.b * other.c + self.d * other.d, + self.a * other.e + self.c * other.f + self.e, + self.b * other.e + self.d * other.f + self.f, + ) + ) + + def __imatmul__(self, matrix): + # type: (MatrixLike) -> Transform + """In place multiplication of transform matrices""" + self.matrix = (self @ matrix).matrix + if self.callback is not None: + self.callback(self) + return self + + def __neg__(self): + # type: () -> Transform + """Returns an inverted transformation""" + det = (self.a * self.d) - (self.c * self.b) + # invert the rotation/scaling part + new_a = self.d / det + new_d = self.a / det + new_c = -self.c / det + new_b = -self.b / det + # invert the translational part + new_e = -(new_a * self.e + new_c * self.f) + new_f = -(new_b * self.e + new_d * self.f) + return Transform((new_a, new_b, new_c, new_d, new_e, new_f)) + + def apply_to_point(self, point): + # type: (VectorLike) -> Vector2d + """Transform a tuple (X, Y)""" + if isinstance(point, str): + raise ValueError(f"Will not transform string '{point}'") + point = Vector2d(point) + return Vector2d( + self.a * point.x + self.c * point.y + self.e, + self.b * point.x + self.d * point.y + self.f, + ) + + def _is_URT(self, exactly=False): + # type: (bool) -> bool + """ + Checks that transformation can be decomposed into product of + Uniform scale (U), Rotation around origin (R) and translation (T) + + :return: decomposition as U*R*T is possible + """ + tol = self.absolute_tolerance if not exactly else 0.0 + return (fabs(self.a - self.d) <= tol) and (fabs(self.b + self.c) <= tol) + + def interpolate(self, other, fraction): + # type: (Transform, float) -> Transform + """Interpolate with another Transform. + + .. versionadded:: 1.1 + """ + from .tween import TransformInterpolator + + return TransformInterpolator(self, other).interpolate(fraction) + + +class BoundingInterval: # pylint: disable=too-few-public-methods + """A pair of numbers that represent the minimum and maximum values.""" + + @overload + def __init__(self, other=None): + # type: (Optional[BoundingInterval]) -> None + pass + + @overload + def __init__(self, pair): + # type: (Tuple[float, float]) -> None + pass + + @overload + def __init__(self, value): + # type: (float) -> None + pass + + @overload + def __init__(self, x, y): + # type: (float, float) -> None + pass + + def __init__(self, x=None, y=None): + self.x: Union[int, float, Decimal] + self.y: Union[int, float, Decimal] + self.minimum: float + self.maximum: float + if y is not None: + if isinstance(x, (int, float, Decimal)) and isinstance( + y, (int, float, Decimal) + ): + self.minimum = float(x) + self.maximum = float(y) + else: + raise ValueError( + f"Not a number for scaling: {str((x, y))} " + f"({type(x).__name__},{type(y).__name__})" + ) + + else: + value = x + if value is None: + # identity for addition, zero for intersection + self.minimum, self.maximum = float("+inf"), float("-inf") + elif isinstance(value, BoundingInterval): + self.minimum = value.minimum + self.maximum = value.maximum + elif isinstance(value, (tuple, list)) and len(value) == 2: + self.minimum, self.maximum = min(value), max(value) + elif isinstance(value, (int, float, Decimal)): + self.minimum = self.maximum = float(value) + else: + raise ValueError( + f"Not a number for scaling: {str(value)} ({type(value).__name__})" + ) + + def __bool__(self): + # type: () -> bool + return isfinite(self.minimum) and isfinite(self.maximum) + + __nonzero__ = __bool__ + + def __neg__(self): + # type: () -> BoundingInterval + return BoundingInterval((-1 * self.maximum, -1 * self.minimum)) + + def __add__(self, other): + # type: (BoundingInterval) -> BoundingInterval + """Calculate the bounding interval that covers both given bounding intervals""" + new = BoundingInterval(self) + if other is not None: + new += other + return new + + def __iadd__(self, other): + # type: (BoundingInterval) -> BoundingInterval + other = BoundingInterval(other) + self.minimum = min((self.minimum, other.minimum)) + self.maximum = max((self.maximum, other.maximum)) + return self + + def __radd__(self, other): + # type: (BoundingInterval) -> BoundingInterval + if other is None: + return BoundingInterval(self) + return self + other + + def __and__(self, other: BoundingInterval) -> BoundingInterval: + """Calculate the bounding interval where both given bounding intervals + overlap""" + new = BoundingInterval(self) + if other is not None: + new &= other + return new + + def __iand__(self, other): + # type: (BoundingInterval) -> BoundingInterval + other = BoundingInterval(other) + self.minimum = max((self.minimum, other.minimum)) + self.maximum = min((self.maximum, other.maximum)) + if self.minimum > self.maximum: + self.minimum, self.maximum = float("+inf"), float("-inf") + return self + + def __rand__(self, other): + # type: (BoundingInterval) -> BoundingInterval + if other is None: + return BoundingInterval(self) + return self & other + + def __mul__(self, other: float) -> BoundingInterval: + new = BoundingInterval(self) + if other is not None: + new *= other + return new + + def __imul__(self, other: float) -> BoundingInterval: + self.minimum *= other + self.maximum *= other + return self + + def __iter__(self) -> Generator[float, None, None]: + yield self.minimum + yield self.maximum + + def __eq__(self, other) -> bool: + return tuple(self) == tuple(BoundingInterval(other)) + + def __contains__(self, value: float) -> bool: + return self.minimum <= value <= self.maximum + + def __repr__(self) -> str: + return f"BoundingInterval({self.minimum}, {self.maximum})" + + @property + def center(self): + # type: () -> float + """Pick the middle of the line""" + return self.minimum + ((self.maximum - self.minimum) / 2) + + @property + def size(self): + # type: () -> float + """Return the size difference minimum and maximum""" + return self.maximum - self.minimum + + +class BoundingBox: # pylint: disable=too-few-public-methods + """ + Some functions to compute a rough bbox of a given list of objects. + + BoundingBox(other) + BoundingBox(x, y) + BoundingBox((x1, x2), (y1, y2)) + """ + + width = property(lambda self: self.x.size) + height = property(lambda self: self.y.size) + top = property(lambda self: self.y.minimum) + left = property(lambda self: self.x.minimum) + bottom = property(lambda self: self.y.maximum) + right = property(lambda self: self.x.maximum) + center_x = property(lambda self: self.x.center) + center_y = property(lambda self: self.y.center) + diagonal_length = property( + lambda self: (self.width**2 + self.height**2) ** (0.5) + ) + + @overload + def __init__(self, other=None): + # type: (Optional[BoundingBox]) -> None + pass + + @overload + def __init__(self, x, y): + # type: (BoundingIntervalArgs, BoundingIntervalArgs) -> None + pass + + def __init__(self, x=None, y=None): + if y is None: + if x is None: + # identity for addition, zero for intersection + pass + elif isinstance(x, BoundingBox): + x, y = x.x, x.y + else: + raise ValueError( + f"Not a number for scaling: {str(x)} ({type(x).__name__})" + ) + self.x = BoundingInterval(x) + self.y = BoundingInterval(y) + + @staticmethod + def new_xywh(x: float, y: float, width: float, height: float) -> BoundingBox: + """Create a bounding box using x, y, width and height + + .. versionadded:: 1.2""" + return BoundingBox((x, x + width), (y, y + height)) + + def __bool__(self): + # type: () -> bool + return bool(self.x) and bool(self.y) + + __nonzero__ = __bool__ + + def __neg__(self): + # type: () -> BoundingBox + return BoundingBox(-self.x, -self.y) + + def __add__(self, other): + # type: (Optional[BoundingBox]) -> BoundingBox + """Calculate the bounding box that covers both given bounding boxes""" + new = BoundingBox(self) + new += BoundingBox(other) + return new + + def __iadd__(self, other): + # type: (Optional[BoundingBox]) -> BoundingBox + other = BoundingBox(other) + self.x += other.x + self.y += other.y + return self + + def __radd__(self, other): + # type: (Optional[BoundingBox]) -> BoundingBox + return self + other + + def __and__(self, other): + # type: (Optional[BoundingBox]) -> BoundingBox + """Calculate the bounding box where both given bounding boxes overlap""" + new = BoundingBox(self) + new &= BoundingBox(other) + return new + + def __iand__(self, other: Optional[BoundingBox]) -> BoundingBox: + other = BoundingBox(other) + self.x = self.x & other.x + self.y = self.y & other.y + if not self.x or not self.y: + self.x, self.y = BoundingInterval(), BoundingInterval() + return self + + def __rand__(self, other): + # type: (Optional[BoundingBox]) -> BoundingBox + return self & other + + def __mul__(self, factor): + # type: (float) -> BoundingBox + new = BoundingBox(self) + new *= factor + return new + + def __imul__(self, factor): + # type: (float) -> BoundingBox + self.x *= factor + self.y *= factor + return self + + def __eq__(self, other): + # type (object) -> bool + if isinstance(other, BoundingBox): + return tuple(self) == tuple(other) + return False + + def __iter__(self) -> Generator[BoundingBox, None, None]: + yield self.x + yield self.y + + @property + def area(self): + """Return area of the bounding box + + .. versionadded:: 1.2""" + return self.width * self.height + + @property + def minimum(self): + # type: () -> Vector2d + """Return the minimum x,y coords""" + return Vector2d(self.x.minimum, self.y.minimum) + + @property + def maximum(self): + # type: () -> Vector2d + """Return the maximum x,y coords""" + return Vector2d(self.x.maximum, self.y.maximum) + + def __repr__(self): + # type: () -> str + return f"BoundingBox({tuple(self.x)},{tuple(self.y)})" + + @property + def center(self): + # type: () -> Vector2d + """Returns the middle of the bounding box""" + return Vector2d(self.x.center, self.y.center) + + @property + def size(self): + """Returns a vector containing width and height of the bounding box + + .. versionadded:: 1.2""" + return Vector2d(self.x.size, self.y.size) + + def get_anchor(self, xanchor, yanchor, direction=0, selbox=None): + # type: (str, str, Union[int, str], Optional[BoundingBox]) -> float + """Calls get_distance with the given anchor options""" + return self.anchor_distance( + getattr(self, XAN[xanchor]), + getattr(self, YAN[yanchor]), + direction=direction, + selbox=selbox, + ) + + @staticmethod + def anchor_distance( + x: float, + y: float, + direction: Union[int, str] = 0, + selbox: Optional[BoundingBox] = None, + ) -> float: + """Using the x,y returns a single sortable value based on direction and angle + + Args: + x (float): input x coordinate + y (float): input y coordinate + direction (Union[int, str], optional): int/float (custom angle), + tb/bt (top/bottom), lr/rl (left/right), ri/ro (radial). Defaults to 0. + selbox (Optional[BoundingBox], optional): The bounding box of the whole + selection for radial anchors. Defaults to None. + + Raises: + ValueError: if radial distance is requested without the optional selbox + parameter. + + Returns: + float: the anchor distance with respect to the direction. + """ + + rot = 0.0 + if isinstance(direction, (int, float)): # Angle + if direction not in CUSTOM_DIRECTION: + return hypot(x, y) * (cos(radians(-direction) - atan2(y, x))) + direction = CUSTOM_DIRECTION[direction] + + if direction in ("ro", "ri"): + if selbox is None: + raise ValueError( + "Radial distance not available without selection bounding box" + ) + rot = hypot(selbox.x.center - x, selbox.y.center - y) + + return [y, -y, x, -x, rot, -rot][DIRECTION.index(direction)] + + def resize(self, delta_x: float, delta_y: Optional[float] = None) -> BoundingBox: + """Enlarges / shrinks a bounding box by a constant value. If only delta_x + is given, each side is moved by the same amount; if delta_y is given, + different deltas are applied to horizontal and vertical intervals. + + .. versionadded:: 1.2""" + delta_y = delta_y or delta_x + return BoundingBox( + (self.x.minimum - delta_x, self.x.maximum + delta_x), + (self.y.minimum - delta_y, self.y.maximum + delta_y), + ) + + +class DirectedLineSegment: + """ + A directed line segment + + DirectedLineSegment(((x0, y0), (x1, y1))) + """ + + start = Vector2d() # start point of segment + end = Vector2d() # end point of segment + + x0 = property(lambda self: self.start.x) # pylint: disable=invalid-name + y0 = property(lambda self: self.start.y) # pylint: disable=invalid-name + x1 = property(lambda self: self.end.x) + y1 = property(lambda self: self.end.y) + dx = property(lambda self: self.vector.x) # pylint: disable=invalid-name + dy = property(lambda self: self.vector.y) # pylint: disable=invalid-name + + @overload + def __init__(self): + # type: () -> None + pass + + @overload + def __init__(self, other): + # type: (DirectedLineSegment) -> None + pass + + @overload + def __init__(self, start, end): + # type: (VectorLike, VectorLike) -> None + pass + + def __init__(self, *args): + if not args: # overload 0 + start, end = Vector2d(), Vector2d() + elif len(args) == 1: # overload 1 + (other,) = args + start, end = other.start, other.end + elif len(args) == 2: # overload 2 + start, end = args + else: + raise ValueError(f"DirectedLineSegment() can't be constructed from {args}") + + self.start = Vector2d(start) + self.end = Vector2d(end) + + def __eq__(self, other): + # type: (object) -> bool + if isinstance(other, (tuple, DirectedLineSegment)): + return tuple(self) == tuple(other) + return False + + def __iter__(self): + # type: () -> Generator[DirectedLineSegment, None, None] + yield self.x0 + yield self.x1 + yield self.y0 + yield self.y1 + + @property + def vector(self): + # type: () -> Vector2d + """The vector of the directed line segment. + + The vector of the directed line segment represents the length + and direction of segment, but not the starting point. + + .. versionadded:: 1.1 + """ + return self.end - self.start + + @property + def length(self): + # type: () -> float + """Get the length of the line segment""" + return self.vector.length + + @property + def angle(self): + # type: () -> float + """Get the angle of the line created by this segment""" + return atan2(self.dy, self.dx) + + def distance_to_point(self, x, y): + # type: (float, float) -> Union[DirectedLineSegment, Optional[float]] + """Get the distance to the given point (x, y)""" + segment2 = DirectedLineSegment(self.start, (x, y)) + dot2 = segment2.dot(self) + if dot2 <= 0: + return DirectedLineSegment((x, y), self.start).length + if self.dot(self) <= dot2: + return DirectedLineSegment((x, y), self.end).length + return self.perp_distance(x, y) + + def perp_distance(self, x, y): + # type: (float, float) -> Optional[float] + """Perpendicular distance to the given point""" + if self.length == 0: + return None + return fabs((self.dx * (self.y0 - y)) - ((self.x0 - x) * self.dy)) / self.length + + def dot(self, other): + # type: (DirectedLineSegment) -> float + """Get the dot product with the segment with another""" + return self.vector.dot(other.vector) + + def point_at_ratio(self, ratio): + # type: (float) -> Tuple[float, float] + """Get the point at the given ratio along the line""" + return self.x0 + ratio * self.dx, self.y0 + ratio * self.dy + + def point_at_length(self, length): + # type: (float) -> Tuple[float, float] + """Get the point as the length along the line""" + return self.point_at_ratio(length / self.length) + + def parallel(self, x, y): + # type: (float, float) -> DirectedLineSegment + """Create parallel Segment""" + return DirectedLineSegment((x + self.dx, y + self.dy), (x, y)) + + def intersect(self, other): + # type: (DirectedLineSegment) -> Optional[Vector2d] + """Get the intersection between two segments""" + other = DirectedLineSegment(other) + denom = self.vector.cross(other.vector) + num = other.vector.cross(self.start - other.start) + + if denom != 0: + return Vector2d(self.point_at_ratio(num / denom)) + return None + + def __repr__(self): + # type: () -> str + return f"DirectedLineSegment(({self.start}), ({self.end}))" + + +def cubic_extrema(py0, py1, py2, py3): + # type: (float, float, float, float) -> Tuple[float, float] + """Returns the extreme value, given a set of bezier coordinates""" + + atol = 1e-9 + cmin, cmax = min(py0, py3), max(py0, py3) + pd1 = py1 - py0 + pd2 = py2 - py1 + pd3 = py3 - py2 + + def _is_bigger(point): + if 0 < point < 1: + pyx = ( + py0 * (1 - point) * (1 - point) * (1 - point) + + 3 * py1 * point * (1 - point) * (1 - point) + + 3 * py2 * point * point * (1 - point) + + py3 * point * point * point + ) + return min(cmin, pyx), max(cmax, pyx) + return cmin, cmax + + if fabs(pd1 - 2 * pd2 + pd3) > atol: + if pd2 * pd2 > pd1 * pd3: + pds = sqrt(pd2 * pd2 - pd1 * pd3) + cmin, cmax = _is_bigger((pd1 - pd2 + pds) / (pd1 - 2 * pd2 + pd3)) + cmin, cmax = _is_bigger((pd1 - pd2 - pds) / (pd1 - 2 * pd2 + pd3)) + + elif fabs(pd2 - pd1) > atol: + cmin, cmax = _is_bigger(-pd1 / (2 * (pd2 - pd1))) + + return cmin, cmax + + +def quadratic_extrema(py0, py1, py2): + # type: (float, float, float) -> Tuple[float, float] + """Returns the extreme value, given a set of quadratic bezier coordinates""" + atol = 1e-9 + cmin, cmax = min(py0, py2), max(py0, py2) + + def _is_bigger(point): + if 0 < point < 1: + pyx = ( + py0 * (1 - point) * (1 - point) + + 2 * py1 * point * (1 - point) + + py2 * point * point + ) + return min(cmin, pyx), max(cmax, pyx) + return cmin, cmax + + if fabs(py0 + py2 - 2 * py1) > atol: + cmin, cmax = _is_bigger((py0 - py1) / (py0 + py2 - 2 * py1)) + + return cmin, cmax diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/turtle.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/turtle.py new file mode 100644 index 0000000..40c9b60 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/turtle.py @@ -0,0 +1,255 @@ +# coding=utf-8 +# +# Copyright (C) 2005 Aaron Spike, aaron@ekips.org +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +"""A Python path turtle for Inkscape extensions""" + +import math +import random +from typing import List, Union + +from .paths import Line, Move, Path, PathCommand +from .elements import PathElement, Group, BaseElement +from .styles import Style + + +class PathTurtle: + """A Python path turtle + + .. versionchanged:: 1.2 + pTurtle has been renamed to PathTurtle.""" + + def __init__(self, home=(0, 0)): + self.__home = [home[0], home[1]] + self.__pos = self.__home[:] + self.__heading = -90 + self.__path = "" + self.__draw = True + self.__new = True + + def forward(self, mag: float): + """Move turtle forward by mag in the current direction.""" + self.setpos( + ( + self.__pos[0] + math.cos(math.radians(self.__heading)) * mag, + self.__pos[1] + math.sin(math.radians(self.__heading)) * mag, + ) + ) + + def backward(self, mag): + """Move turtle backward by mag in the current direction.""" + self.setpos( + ( + self.__pos[0] - math.cos(math.radians(self.__heading)) * mag, + self.__pos[1] - math.sin(math.radians(self.__heading)) * mag, + ) + ) + + def right(self, deg): + """Rotate turtle right by deg degrees. + + Changed in inkex 1.2: The turtle now rotates right (previously left) when + calling this method.""" + self.__heading += deg + + def left(self, deg): + """Rotate turtle left by deg degrees. + + Changed in inkex 1.2: The turtle now rotates left (previously right) when + calling this method.""" + self.__heading -= deg + + def penup(self): + """Enable non-drawing / moving mode""" + self.__draw = False + self.__new = False + + def pendown(self): + """Enable drawing mode""" + if not self.__draw: + self.__new = True + self.__draw = True + + def pentoggle(self): + """Switch between drawing and moving mode""" + if self.__draw: + self.penup() + else: + self.pendown() + + def home(self): + """Move to home position""" + self.setpos(self.__home) + + def clean(self): + """Delete current path""" + self.__path = "" + + def clear(self): + """Delete current path and move to home""" + self.clean() + self.home() + + def setpos(self, arg): + """Move/draw to position, depending on the current state""" + if self.__new: + self.__path += "M" + ",".join([str(i) for i in self.__pos]) + self.__new = False + self.__pos = arg + if self.__draw: + self.__path += "L" + ",".join([str(i) for i in self.__pos]) + + def getpos(self): + """Returns the current position""" + return self.__pos[:] + + def setheading(self, deg): + """Set the heading to deg degrees""" + self.__heading = deg + + def getheading(self): + """Returns the heading in degrees""" + return self.__heading + + def sethome(self, arg): + """Set home position""" + self.__home = list(arg) + + def getPath(self): + """Returns the current path""" + return self.__path + + def rtree(self, size, minimum, pt=False): + """Generates a random tree""" + if size < minimum: + return + self.fd(size) + turn = random.uniform(20, 40) + self.rt(turn) + self.rtree(size * random.uniform(0.5, 0.9), minimum, pt) + self.lt(turn) + turn = random.uniform(20, 40) + self.lt(turn) + self.rtree(size * random.uniform(0.5, 0.9), minimum, pt) + self.rt(turn) + if pt: + self.pu() + self.bk(size) + if pt: + self.pd() + + # pylint: disable=invalid-name + fd = forward + bk = backward + rt = right + lt = left + pu = penup + pd = pendown + + +pTurtle = PathTurtle # should be deprecated + + +class PathBuilder: + """This helper class can be used to construct a path and insert it into a + document. + + .. versionadded:: 1.2""" + + def __init__(self, style: Style): + """Initializes a PathDrawHelper object + + Args: + style (Style): Style of the path. + """ + self.current = Path() + self.style = style + + def add(self, command: Union[PathCommand, List[PathCommand]]): + """Add a Path command to the Helper + + Args: + command (Union[PathCommand, List[PathCommand]]): A (list of) PathCommand(s) + to be appended. + """ + self.current.append(command) + + def terminate(self): + """Terminates current subpath. This method does nothing by default and is + supposed to be overridden in subclasses.""" + + def append_next(self, sibling_before: BaseElement): + """Insert the resulting Path as :class:`inkex.elements._polygons.PathElement` + into the document tree. + + Args: + sibling_before (BaseElement): The element the resulting path will be + appended after. + """ + pth = PathElement() + pth.path = self.current + pth.style = self.style + sibling_before.addnext(pth) + + def Move_to(self, x, y): # pylint: disable=invalid-name + """Shorthand to insert an absolute move command: `M x y`. + + Args: + x (Float): x coordinate to move to + y (Float): y coordinate to move to + """ + self.add(Move(x, y)) + + def Line_to(self, x, y): # pylint: disable=invalid-name + """Shorthand to insert an absolute lineto command: `L x y`. + + Args: + x (Float): x coordinate to draw a line to + y (Float): y coordinate to draw a line to + """ + self.add(Line(x, y)) + + +class PathGroupBuilder(PathBuilder): + """This helper class can be used to construct a group of paths that all have the + same style. + + .. versionadded:: 1.2""" + + def __init__(self, style): + super().__init__(style) + self.result = Group() + + def terminate(self): + """Terminates the current Path, and appends it to the group if it is not + empty.""" + if len(self.current) > 1: + pth = PathElement() + pth.path = self.current.to_absolute() + pth.style = self.style + self.result.append(pth) + self.current = Path() + + def append_next(self, sibling_before: BaseElement): + """Insert the resulting Path as :class:`inkex.elements._groups.Group` into the + document tree. + + Args: + sibling_before (BaseElement): The element the resulting group will be + appended after. + """ + sibling_before.addnext(self.result) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tween.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tween.py new file mode 100644 index 0000000..c5dca76 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/tween.py @@ -0,0 +1,847 @@ +# coding=utf-8 +# +# Copyright (C) 2005 Aaron Spike, aaron@ekips.org +# 2020 Jonathan Neuhauser, jonathan.neuhauser@outlook.com +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +"""Module for interpolating attributes and styles + +.. versionchanged:: 1.2 + Rewritten in inkex 1.2 in an object-oriented structure to support more attributes. +""" +from bisect import bisect_left +import abc +import copy + +from .styles import Style +from .elements._filters import LinearGradient, RadialGradient, Stop +from .transforms import Transform +from .colors import Color +from .units import convert_unit, parse_unit, render_unit +from .bezier import bezlenapprx, cspbezsplit, cspbezsplitatlength, csplength +from .paths import Path, CubicSuperPath +from .elements import SvgDocumentElement +from .utils import FragmentError + + +try: + from typing import Tuple, TypeVar + + Value = TypeVar("Value") + Number = TypeVar("Number", int, float) +except ImportError: + pass + + +def interpcoord(coord_a: Number, coord_b: Number, time: float): + """Interpolate single coordinate by the amount of time""" + return ValueInterpolator(coord_a, coord_b).interpolate(time) + + +def interppoints(point1, point2, time): + # type: (Tuple[float, float], Tuple[float, float], float) -> Tuple[float, float] + """Interpolate coordinate points by amount of time""" + return ArrayInterpolator(point1, point2).interpolate(time) + + +class AttributeInterpolator(abc.ABC): + """Interpolate between attributes""" + + def __init__(self, start_value, end_value): + self.start_value = start_value + self.end_value = end_value + + @staticmethod + def best_style(node): + """Gets the best possible approximation to a node's style. For nodes inside the + element tree of an SVG file, stylesheets defined in the defs of that file can be + taken into account. This should be the case for input elements, but is not + required - in that case, only the local inline style is used. + + During the interpolation process, some nodes are created temporarily, such as + plain gradients of a single color to allow solid<->gradient interpolation. These + are not attached to the document tree and therefore have no root. Since the only + style relevant for them is the inline style, it is acceptable to fallback to it. + + Args: + node (BaseElement): The node to get the best approximated style of + + Returns: + Style: If the node is rooted, the CSS specified style. Else, the inline + style.""" + try: + return node.specified_style() + except FragmentError: + return node.style + + @staticmethod + def create_from_attribute(snode, enode, attribute, method=None): + """Creates an interpolator for an attribute. Currently, only path, transform and + style attributes are supported + + Args: + snode (BaseElement): start element + enode (BaseElement): end element + attribute (str): attribute name (for styles, starting with "style/") + method (AttributeInterpolator, optional): (currently only used for paths). + Specifies a method used to interpolate the attribute. Defaults to None. + + Raises: + ValueError: if an attribute is passed that is not a style, path or transform + attribute + + Returns: + AttributeInterpolator: an interpolator whose type depends on attribute. + """ + if attribute in Style.color_props: + return StyleInterpolator.create_from_fill_stroke(snode, enode, attribute) + if attribute == "d": + if method is None: + method = FirstNodesInterpolator + return method(snode.path, enode.path) + if attribute == "style": + return StyleInterpolator(snode, enode) + if attribute.startswith("style/"): + return StyleInterpolator.create(snode, enode, attribute[6:]) + if attribute == "transform": + return TransformInterpolator(snode.transform, enode.transform) + if method is not None: + return method(snode.get(attribute), enode.get(attribute)) + raise ValueError("only path and style attributes are supported") + + @abc.abstractmethod + def interpolate(self, time=0): + """Interpolation method, needs to be implemented by subclasses""" + return + + +class StyleInterpolator(AttributeInterpolator): + """Class to interpolate styles""" + + def __init__(self, start_value, end_value): + super().__init__(start_value, end_value) + self.interpolators = {} + # some keys are always processed in a certain order, these provide alternative + # interpolation routes if e.g. Color<->none is interpolated + all_keys = list( + dict.fromkeys( + ["fill", "stroke", "fill-opacity", "stroke-opacity", "stroke-width"] + + list(self.best_style(start_value).keys()) + + list(self.best_style(end_value).keys()) + ) + ) + for attr in all_keys: + sstyle = self.best_style(start_value) + estyle = self.best_style(end_value) + if attr not in sstyle and attr not in estyle: + continue + try: + interp = StyleInterpolator.create( + self.start_value, self.end_value, attr + ) + self.interpolators[attr] = interp + except ValueError: + # no interpolation method known for this attribute + pass + + @staticmethod + def create(snode, enode, attribute): + """Creates an Interpolator for a given style attribute, depending on its type: + + - Color properties (such as fill, stroke) -> :class:`ColorInterpolator`, + :class:`GradientInterpolator` ect. + - Unit properties -> :class:`UnitValueInterpolator` + - other properties -> :class:`ValueInterpolator` + + Args: + snode (BaseElement): start element + enode (BaseElement): end element + attribute (str): attribute to interpolate + + Raises: + ValueError: if the attribute is not in any of the lists + + Returns: + AttributeInterpolator: an interpolator object whose type depends on the + attribute. + """ + if attribute in Style.color_props: + return StyleInterpolator.create_from_fill_stroke(snode, enode, attribute) + + if attribute in Style.unit_props: + return UnitValueInterpolator( + AttributeInterpolator.best_style(snode)(attribute), + AttributeInterpolator.best_style(enode)(attribute), + ) + + if attribute in Style.opacity_props: + return ValueInterpolator( + AttributeInterpolator.best_style(snode)(attribute), + AttributeInterpolator.best_style(enode)(attribute), + ) + + raise ValueError("Unknown attribute") + + @staticmethod + def create_from_fill_stroke(snode, enode, attribute): + """Creates an Interpolator for a given color-like attribute + + Args: + snode (BaseElement): start element + enode (BaseElement): end element + attribute (str): attribute to interpolate + + Raises: + ValueError: if the attribute is not color-like + ValueError: if the attribute is unset on both start and end style + + Returns: + AttributeInterpolator: an interpolator object whose type depends on the + attribute. + """ + if attribute not in Style.color_props: + raise ValueError("attribute must be a color property") + + sstyle = AttributeInterpolator.best_style(snode) + estyle = AttributeInterpolator.best_style(enode) + + styles = [[snode, sstyle], [enode, estyle]] + for cur, curstyle in styles: + if curstyle(attribute) is None: + cur.style[attribute + "-opacity"] = 0.0 + if attribute == "stroke": + cur.style["stroke-width"] = 0.0 + + # check if style is none, unset or a color + if isinstance( + sstyle(attribute), (LinearGradient, RadialGradient) + ) or isinstance(estyle(attribute), (LinearGradient, RadialGradient)): + # if one of the two styles is a gradient, use gradient interpolation. + try: + return GradientInterpolator.create(snode, enode, attribute) + except ValueError: + # different gradient types, just duplicate the first + return TrivialInterpolator(sstyle(attribute)) + if sstyle(attribute) is None and estyle(attribute) is None: + return TrivialInterpolator("none") + return ColorInterpolator.create(sstyle, estyle, attribute) + + def interpolate(self, time=0): + """Interpolates a style using the interpolators set in self.interpolators + + Args: + time (int, optional): Interpolation position. If 0, start_value is returned, + if 1, end_value is returned. Defaults to 0. + + Returns: + inkex.Style: interpolated style + """ + style = Style() + for prop, interp in self.interpolators.items(): + style[prop] = interp.interpolate(time) + return style + + +class TrivialInterpolator(AttributeInterpolator): + """Trivial interpolator, returns value for every time""" + + def __init__(self, value): + super().__init__(value, value) + + def interpolate(self, time=0): + return self.start_value + + +class ValueInterpolator(AttributeInterpolator): + """Class for interpolation of a single value""" + + def __init__(self, start_value=0, end_value=0): + super().__init__(float(start_value), float(end_value)) + + def interpolate(self, time=0): + """(Linearly) interpolates a value + + Args: + time (int, optional): Interpolation position. If 0, start_value is returned, + if 1, end_value is returned. Defaults to 0. + + Returns: + int: interpolated value + """ + return self.start_value + ((self.end_value - self.start_value) * time) + + +class UnitValueInterpolator(ValueInterpolator): + """Class for interpolation of a value with unit""" + + def __init__(self, start_value=0, end_value=0): + start_val, start_unit = parse_unit(start_value) + end_val = convert_unit(end_value, start_unit) + super().__init__(start_val, end_val) + self.unit = start_unit + + def interpolate(self, time=0): + return render_unit(super().interpolate(time), self.unit) + + +class ArrayInterpolator(AttributeInterpolator): + """Interpolates array-like objects element-wise, e.g. color, transform, + coordinate""" + + def __init__(self, start_value, end_value): + super().__init__(start_value, end_value) + self.interpolators = [ + ValueInterpolator(cur, other) + for (cur, other) in zip(start_value, end_value) + ] + + def interpolate(self, time=0): + """Interpolates an array element-wise + + Args: + time (int, optional): [description]. Defaults to 0. + + Returns: + List: interpolated array + """ + return [interp.interpolate(time) for interp in self.interpolators] + + +class TransformInterpolator(ArrayInterpolator): + """Class for interpolation of transforms""" + + def __init__(self, start_value=Transform(), end_value=Transform()): + """Creates a transform interpolator. + + Args: + start_value (inkex.Transform, optional): start transform. Defaults to + inkex.Transform(). + end_value (inkex.Transform, optional): end transform. Defaults to + inkex.Transform(). + """ + super().__init__(start_value.to_hexad(), end_value.to_hexad()) + + def interpolate(self, time=0): + """Interpolates a transform by interpolating each item in the transform hexad + separately. + + Args: + time (int, optional): Interpolation position. If 0, start_value is returned, + if 1, end_value is returned. Defaults to 0. + + Returns: + Transform: interpolated transform + """ + return Transform(super().interpolate(time)) + + +class ColorInterpolator(ArrayInterpolator): + """Class for color interpolation""" + + @staticmethod + def create(sst, est, attribute): + """Creates a ColorInterpolator for either Fill or stroke, depending on the + attribute. + + Args: + sst (Style): Start style + est (Style): End style + attribute (string): either fill or stroke + + Raises: + ValueError: if none of the start or end style is a color. + + Returns: + ColorInterpolator: A ColorInterpolator object + """ + styles = [sst, est] + for cur, other in zip(styles, reversed(styles)): + if not isinstance(cur(attribute), Color) or cur(attribute) is None: + cur[attribute] = other(attribute) + this = ColorInterpolator( + Color(styles[0](attribute)), Color(styles[1](attribute)) + ) + if this is None: + raise ValueError("One of the two attribute needs to be a plain color") + return this + + def __init__(self, start_value=Color("#000000"), end_value=Color("#000000")): + super().__init__(start_value, end_value) + + def interpolate(self, time=0): + """Interpolates a color by interpolating its r, g, b, a channels separately. + + Args: + time (int, optional): Interpolation position. If 0, start_value is returned, + if 1, end_value is returned. Defaults to 0. + + Returns: + Color: interpolated color + """ + return Color(list(map(int, super().interpolate(time)))) + + +class GradientInterpolator(AttributeInterpolator): + """Base class for Gradient Interpolation""" + + def __init__(self, start_value, end_value, svg=None): + super().__init__(start_value, end_value) + self.svg = svg + # If one of the styles is empty, set it to the gradient of the other + if start_value is None: + self.start_value = end_value + if end_value is None: + self.end_value = start_value + self.transform_interpolator = TransformInterpolator( + self.start_value.gradientTransform, self.end_value.gradientTransform + ) + self.orientation_interpolator = { + attr: UnitValueInterpolator( + self.start_value.get(attr), self.end_value.get(attr) + ) + for attr in self.start_value.orientation_attributes + if self.start_value.get(attr) is not None + and self.end_value.get(attr) is not None + } + if not ( + self.start_value.href is not None + and self.start_value.href is self.end_value.href + ): + # the gradient link to different stops, interpolate between them + # add both start and end offsets, then take distict + newoffsets = sorted( + list(set(self.start_value.stop_offsets + self.end_value.stop_offsets)) + ) + + def func(start, end, time): + return StopInterpolator(start, end).interpolate(time) + + sstops = GradientInterpolator.interpolate_linear_list( + self.start_value.stop_offsets, + list(self.start_value.stops), + newoffsets, + func, + ) + ostops = GradientInterpolator.interpolate_linear_list( + self.end_value.stop_offsets, + list(self.end_value.stops), + newoffsets, + func, + ) + self.newstop_interpolator = [ + StopInterpolator(s1, s2) for s1, s2 in zip(sstops, ostops) + ] + else: + self.newstop_interpolator = None + + @staticmethod + def create(snode, enode, attribute): + """Creates a `GradientInterpolator` for either fill or stroke, depending on + attribute. + + Cases: (A, B) -> Interpolator + + - Linear Gradient, Linear Gradient -> LinearGradientInterpolator + - Color or None, Linear Gradient -> LinearGradientInterpolator + - Radial Gradient, Radial Gradient -> RadialGradientInterpolator + - Color or None, Radial Gradient -> RadialGradientInterpolator + - Radial Gradient, Linear Gradient -> ValueError + - Color or None, Color or None -> ValueError + + Args: + snode (BaseElement): start element + enode (BaseElement): end element + attribute (string): either fill or stroke + + Raises: + ValueError: if none of the styles are a gradient or if they are gradients + of different types + + Returns: + GradientInterpolator: an Interpolator object + """ + interpolator = None + gradienttype = None + # first find out which type of interpolator we need + sstyle = AttributeInterpolator.best_style(snode) + estyle = AttributeInterpolator.best_style(enode) + for cur in [sstyle, estyle]: + curgrad = None + if isinstance(cur(attribute), (LinearGradient, RadialGradient)): + curgrad = cur(attribute) + for gradtype, interp in [ + [LinearGradient, LinearGradientInterpolator], + [RadialGradient, RadialGradientInterpolator], + ]: + if curgrad is not None and isinstance(curgrad, gradtype): + if interpolator is None: + interpolator = interp + gradienttype = gradtype + if not (interp == interpolator): + raise ValueError("Gradient types don't match") + # If one of the styles is empty, set it to the gradient of the other, but with + # zero opacity (and stroke-width for strokes) + # If one of the styles is a plain color, replace it by a gradient with a single + # stop + iterator = [[snode, gradienttype(), enode], [enode, gradienttype(), snode]] + for index in [0, 1]: + curstyle = AttributeInterpolator.best_style(iterator[index][0]) + value = curstyle(attribute) + if value is None: + # if the attribute of one of the two ends is unset, set the opacity to + # zero. + iterator[index][0].style[attribute + "-opacity"] = 0.0 + if attribute == "stroke": + iterator[index][0].style["stroke-width"] = 0.0 + if isinstance(value, Color): + # if the attribute of one of the two ends is a color, convert it to a + # one-stop gradient. Type depends on the type of the other gradient. + interpolator.initialize_position( + iterator[index][1], iterator[index][0].bounding_box() + ) + stop = Stop() + stop.style = Style() + stop.style["stop-color"] = value + stop.offset = 0 + iterator[index][1].add(stop) + stop = Stop() + stop.style = Style() + stop.style["stop-color"] = value + stop.offset = 1 + iterator[index][1].add(stop) + else: + iterator[index][1] = value # is a gradient + if interpolator is None: + raise ValueError("None of the two styles is a gradient") + if interpolator in [LinearGradientInterpolator, RadialGradientInterpolator]: + return interpolator(iterator[0][1], iterator[1][1], snode) + return interpolator(iterator[0][1], iterator[1][1]) + + @staticmethod + def interpolate_linear_list(positions, values, newpositions, func): + """Interpolates a list of values given at n positions to the best approximation + at m newpositions. + + >>> + | + | x + | x + _________________ + pq q p q + (x denotes function values, p: positions, q: newpositions) + A function may be given to interpolate between given values. + + Args: + positions (list[number-like]): position of current function values + values (list[Type]): list of arbitrary type, + ``len(values) == len(positions)`` + newpositions (list[number-like]): position of interpolated values + func (Callable[[Type, Type, float], Type]): Function to interpolate between + values + + Returns: + list[Type]: interpolated function values at positions + """ + newvalues = [] + positions = list(map(float, positions)) + newpositions = list(map(float, newpositions)) + for pos in newpositions: + if len(positions) == 1: + newvalues.append(values[0]) + else: + # current run: + # idxl pos idxr + # p p | p + # q q + idxl = max(0, bisect_left(positions, pos) - 1) + idxr = min(len(positions) - 1, idxl + 1) + fraction = (pos - positions[idxl]) / (positions[idxr] - positions[idxl]) + vall = values[idxl] + valr = values[idxr] + newval = func(vall, valr, fraction) + newvalues.append(newval) + return newvalues + + @staticmethod + def append_to_doc(element, gradient): + """Splits a gradient into stops and orientation, appends it to the document's + defs and returns the href to the orientation gradient. + + Args: + element (BaseElement): an element inside the SVG that the gradient should be + added to + gradient (Gradient): the gradient to append to the document + + Returns: + Gradient: the orientation gradient, or the gradient object if + element has no root or is None + """ + stops, orientation = gradient.stops_and_orientation() + if element is None or ( + element.getparent() is None and not isinstance(element, SvgDocumentElement) + ): + return gradient + element.root.defs.add(orientation) + if len(stops) > 0: + element.root.defs.add(stops, orientation) + orientation.href = stops.get_id() + return orientation + + def interpolate(self, time=0): + """Interpolate with another gradient.""" + newgrad = self.start_value.copy() + # interpolate transforms + newgrad.gradientTransform = self.transform_interpolator.interpolate(time) + + # interpolate orientation + for attr in self.orientation_interpolator.keys(): + newgrad.set(attr, self.orientation_interpolator[attr].interpolate(time)) + + # interpolate stops + if self.newstop_interpolator is not None: + newgrad.remove_all(Stop) + newgrad.add( + *[interp.interpolate(time) for interp in self.newstop_interpolator] + ) + if self.svg is None: + return newgrad + return GradientInterpolator.append_to_doc(self.svg, newgrad) + + +class LinearGradientInterpolator(GradientInterpolator): + """Class for interpolation of linear gradients""" + + def __init__( + self, start_value=LinearGradient(), end_value=LinearGradient(), svg=None + ): + super().__init__(start_value, end_value, svg) + + @staticmethod + def initialize_position(grad, bbox): + """Initializes a linear gradient's position""" + grad.set("x1", bbox.left) + grad.set("x2", bbox.right) + grad.set("y1", bbox.center.y) + grad.set("y2", bbox.center.y) + + +class RadialGradientInterpolator(GradientInterpolator): + """Class to interpolate radial gradients""" + + def __init__( + self, start_value=RadialGradient(), end_value=RadialGradient(), svg=None + ): + super().__init__(start_value, end_value, svg) + + @staticmethod + def initialize_position(grad, bbox): + """Initializes a radial gradient's position""" + x, y = bbox.center + grad.set("cx", x) + grad.set("cy", y) + grad.set("fx", x) + grad.set("fy", y) + grad.set("r", bbox.right - bbox.center.x) + + +class StopInterpolator(AttributeInterpolator): + """Class to interpolate gradient stops""" + + def __init__(self, start_value, end_value): + super().__init__(start_value, end_value) + self.style_interpolator = StyleInterpolator(start_value, end_value) + self.position_interpolator = ValueInterpolator( + float(start_value.offset), float(end_value.offset) + ) + + def interpolate(self, time=0): + """Interpolates a gradient stop by interpolating style and offset separately + + Args: + time (int, optional): Interpolation position. If 0, start_value is returned, + if 1, end_value is returned. Defaults to 0. + + Returns: + Stop: interpolated gradient stop + """ + newstop = Stop() + newstop.style = self.style_interpolator.interpolate(time) + newstop.offset = self.position_interpolator.interpolate(time) + return newstop + + +class PathInterpolator(AttributeInterpolator): + """Base class for Path interpolation""" + + def __init__(self, start_value=Path(), end_value=Path()): + super().__init__(start_value.to_superpath(), end_value.to_superpath()) + self.processed_end_path = None + self.processed_start_path = None + + def truncate_subpaths(self): + """Truncates the longer path so that all subpaths in both paths have an equal + number of bezier commands""" + s = [[]] + e = [[]] + # loop through all subpaths as long as there are remaining ones + while self.start_value and self.end_value: + # if both subpaths contain a bezier command, append it to s and e + if self.start_value[0] and self.end_value[0]: + s[-1].append(self.start_value[0].pop(0)) + e[-1].append(self.end_value[0].pop(0)) + # if the subpath of start_value is empty, add the remaining empty list as + # new subpath of s and one more item of end_value as new subpath of e. + # Afterwards, the loop terminates + elif self.end_value[0]: + s.append(self.start_value.pop(0)) + e[-1].append(self.end_value[0][0]) + e.append([self.end_value[0].pop(0)]) + elif self.start_value[0]: + e.append(self.end_value.pop(0)) + s[-1].append(self.start_value[0][0]) + s.append([self.start_value[0].pop(0)]) + # if there are no commands left in both start_value or end_value, add empty + # list to both start_value and end_value + else: + s.append(self.start_value.pop(0)) + e.append(self.end_value.pop(0)) + self.processed_start_path = s + self.processed_end_path = e + + def interpolate(self, time=0): + # create an interpolated path for each interval + interp = [] + # process subpaths + for ssubpath, esubpath in zip( + self.processed_start_path, self.processed_end_path + ): + if not (ssubpath or esubpath): + break + # add a new subpath to the interpolated path + interp.append([]) + # process each bezier command in the subpaths (which now have equal length) + for sbezier, ebezier in zip(ssubpath, esubpath): + if not (sbezier or ebezier): + break + # add a new bezier command to the last subpath + interp[-1].append([]) + # process points + for point1, point2 in zip(sbezier, ebezier): + if not (point1 or point2): + break + # add a new point to the last bezier command + interp[-1][-1].append( + ArrayInterpolator(point1, point2).interpolate(time) + ) + # remove final subpath if empty. + if not interp[-1]: + del interp[-1] + return CubicSuperPath(interp) + + +class EqualSubsegmentsInterpolator(PathInterpolator): + """Interpolates the path by rediscretizing the subpaths first.""" + + @staticmethod + def get_subpath_lenghts(path): + """prepare lengths for interpolation""" + sp_lenghts, total = csplength(path) + t = 0 + lenghts = [] + for sp in sp_lenghts: + for l in sp: + t += l / total + lenghts.append(t) + lenghts.sort() + return sp_lenghts, total, lenghts + + @staticmethod + def process_path(path, other): + """Rediscretize path so that all subpaths have an equal number of segments, + so that there is a node at the path "times" where path or other have a node + + Args: + path (Path): the first path + other (Path): the second path + + Returns: + Array: the prepared path description for the intermediate path""" + sp_lenghts, total, _ = EqualSubsegmentsInterpolator.get_subpath_lenghts(path) + _, _, lenghts = EqualSubsegmentsInterpolator.get_subpath_lenghts(other) + t = 0 + s = [[]] + for sp in sp_lenghts: + if not path[0]: + s.append(path.pop(0)) + s[-1].append(path[0].pop(0)) + for l in sp: + pt = t + t += l / total + if lenghts and t > lenghts[0]: + while lenghts and lenghts[0] < t: + nt = (lenghts[0] - pt) / (t - pt) + bezes = cspbezsplitatlength(s[-1][-1][:], path[0][0][:], nt) + s[-1][-1:] = bezes[:2] + path[0][0] = bezes[2] + pt = lenghts.pop(0) + s[-1].append(path[0].pop(0)) + return s + + def __init__(self, start_path=Path(), end_path=Path()): + super().__init__(start_path, end_path) + # rediscretisize both paths + start_copy = copy.deepcopy(self.start_value) + # TODO find out why self.start_value.copy() doesn't work + self.start_value = EqualSubsegmentsInterpolator.process_path( + self.start_value, self.end_value + ) + self.end_value = EqualSubsegmentsInterpolator.process_path( + self.end_value, start_copy + ) + + self.truncate_subpaths() + + +class FirstNodesInterpolator(PathInterpolator): + """Interpolates a path by discarding the trailing nodes of the longer subpath""" + + def __init__(self, start_path=Path(), end_path=Path()): + super().__init__(start_path, end_path) + # which path has fewer segments? + lengthdiff = len(self.start_value) - len(self.end_value) + # swap shortest first + if lengthdiff > 0: + self.start_value, self.end_value = self.end_value, self.start_value + # subdivide the shorter path + for _ in range(abs(lengthdiff)): + maxlen = 0 + subpath = 0 + segment = 0 + for y, _ in enumerate(self.start_value): + for z in range(1, len(self.start_value[y])): + leng = bezlenapprx( + self.start_value[y][z - 1], self.start_value[y][z] + ) + if leng > maxlen: + maxlen = leng + subpath = y + segment = z + sp1, sp2 = self.start_value[subpath][segment - 1 : segment + 1] + self.start_value[subpath][segment - 1 : segment + 1] = cspbezsplit(sp1, sp2) + # if swapped, swap them back + if lengthdiff > 0: + self.start_value, self.end_value = self.end_value, self.start_value + self.truncate_subpaths() diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/units.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/units.py new file mode 100644 index 0000000..fec0e87 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/units.py @@ -0,0 +1,150 @@ +# -*- coding: utf-8 -*- +# +# Copyright (c) Aaron Spike +# Aurélio A. Heckert +# Bulia Byak +# Nicolas Dufour, nicoduf@yahoo.fr +# Peter J. R. Moulder +# Martin Owens +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Convert to and from various units and find the closest matching unit. +""" + +import re + +# a dictionary of unit to user unit conversion factors +CONVERSIONS = { + "in": 96.0, + "pt": 1.3333333333333333, + "px": 1.0, + "mm": 3.779527559055118, + "cm": 37.79527559055118, + "m": 3779.527559055118, + "km": 3779527.559055118, + "Q": 0.94488188976378, + "pc": 16.0, + "yd": 3456.0, + "ft": 1152.0, + "": 1.0, # Default px +} + +# allowed unit types, including percentages, relative units, and others +# that are not suitable for direct conversion to a length. +# Note that this is _not_ an exhaustive list of allowed unit types. +UNITS = [ + "in", + "pt", + "px", + "mm", + "cm", + "m", + "km", + "Q", + "pc", + "yd", + "ft", + "", + "%", + "em", + "ex", + "ch", + "rem", + "vw", + "vh", + "vmin", + "vmax", + "deg", + "grad", + "rad", + "turn", + "s", + "ms", + "Hz", + "kHz", + "dpi", + "dpcm", + "dppx", +] + +UNIT_MATCH = re.compile(rf"({'|'.join(UNITS)})") +NUMBER_MATCH = re.compile(r"(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)") +BOTH_MATCH = re.compile(rf"^\s*{NUMBER_MATCH.pattern}\s*{UNIT_MATCH.pattern}\s*$") + + +def parse_unit(value, default_unit="px", default_value=None): + """ + Takes a value such as 55.32px and returns (55.32, 'px') + Returns default (None) if no match can be found + """ + ret = BOTH_MATCH.match(str(value)) + if ret: + return float(ret.groups()[0]), ret.groups()[-1] or default_unit + return (default_value, default_unit) if default_value is not None else None + + +def are_near_relative(point_a, point_b, eps=0.01): + """Return true if the points are near to eps""" + return (point_a - point_b <= point_a * eps) and ( + point_a - point_b >= -point_a * eps + ) + + +def discover_unit(value, viewbox, default="px"): + """Attempt to detect the unit being used based on the viewbox""" + # Default 100px when width can't be parsed + (value, unit) = parse_unit(value, default_value=100.0) + if unit not in CONVERSIONS: + return default + this_factor = CONVERSIONS[unit] * value / viewbox + + # try to find the svgunitfactor in the list of units known. If we don't find + # something, ... + for unit, unit_factor in CONVERSIONS.items(): + if unit != "": + # allow 1% error in factor + if are_near_relative(this_factor, unit_factor, eps=0.01): + return unit + return default + + +def convert_unit(value, to_unit, default="px"): + """Returns userunits given a string representation of units in another system + + Args: + value: string + to_unit: unit to convert to + default: if ``value`` contains no unit, what unit should be assumed. + + .. versionadded:: 1.1 + """ + value, from_unit = parse_unit(value, default_unit=default, default_value=0.0) + if from_unit in CONVERSIONS and to_unit in CONVERSIONS: + return ( + value * CONVERSIONS[from_unit] / CONVERSIONS.get(to_unit, CONVERSIONS["px"]) + ) + return 0.0 + + +def render_unit(value, unit): + """Checks and then renders a number with its unit""" + try: + if isinstance(value, str): + (value, unit) = parse_unit(value, default_unit=unit) + return f"{value:.6g}{ unit:s}" + except TypeError: + return "" diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/utils.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/utils.py new file mode 100644 index 0000000..2d1dd94 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/inkex/utils.py @@ -0,0 +1,271 @@ +# coding=utf-8 +# +# Copyright (C) 2010 Nick Drobchenko, nick@cnc-club.ru +# Copyright (C) 2005 Aaron Spike, aaron@ekips.org +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +""" +Basic common utility functions for calculated things +""" +import os +import sys +import random +import re +import math +from argparse import ArgumentTypeError +from itertools import tee + +ABORT_STATUS = -5 + +(X, Y) = range(2) +PY3 = sys.version_info[0] == 3 + +# pylint: disable=line-too-long +# Taken from https://www.w3.org/Graphics/SVG/1.1/paths.html#PathDataBNF +DIGIT_REX_PART = r"[0-9]" +DIGIT_SEQUENCE_REX_PART = rf"(?:{DIGIT_REX_PART}+)" +INTEGER_CONSTANT_REX_PART = DIGIT_SEQUENCE_REX_PART +SIGN_REX_PART = r"[+-]" +EXPONENT_REX_PART = rf"(?:[eE]{SIGN_REX_PART}?{DIGIT_SEQUENCE_REX_PART})" +FRACTIONAL_CONSTANT_REX_PART = rf"(?:{DIGIT_SEQUENCE_REX_PART}?\.{DIGIT_SEQUENCE_REX_PART}|{DIGIT_SEQUENCE_REX_PART}\.)" +FLOATING_POINT_CONSTANT_REX_PART = rf"(?:{FRACTIONAL_CONSTANT_REX_PART}{EXPONENT_REX_PART}?|{DIGIT_SEQUENCE_REX_PART}{EXPONENT_REX_PART})" +NUMBER_REX = re.compile( + rf"(?:{SIGN_REX_PART}?{FLOATING_POINT_CONSTANT_REX_PART}|{SIGN_REX_PART}?{INTEGER_CONSTANT_REX_PART})" +) +# pylint: enable=line-too-long + + +def _pythonpath(): + for pth in os.environ.get("PYTHONPATH", "").split(":"): + if os.path.isdir(pth): + yield pth + + +def get_user_directory(): + """Return the user directory where extensions are stored. + + .. versionadded:: 1.1""" + if "INKSCAPE_PROFILE_DIR" in os.environ: + return os.path.abspath( + os.path.expanduser( + os.path.join(os.environ["INKSCAPE_PROFILE_DIR"], "extensions") + ) + ) + + home = os.path.expanduser("~") + for pth in _pythonpath(): + if pth.startswith(home): + return pth + return None + + +def get_inkscape_directory(): + """Return the system directory where inkscape's core is. + + .. versionadded:: 1.1""" + for pth in _pythonpath(): + if os.path.isdir(os.path.join(pth, "inkex")): + return pth + raise ValueError("Unable to determine the location of Inkscape") + + +class KeyDict(dict): + """ + A normal dictionary, except asking for anything not in the dictionary + always returns the key itself. This is used for translation dictionaries. + """ + + def __getitem__(self, key): + try: + return super().__getitem__(key) + except KeyError: + return key + + +def parse_percent(val: str): + """Parse strings that are either values (i.e., '3.14159') or percentages + (i.e. '75%') to a float. + + .. versionadded:: 1.2""" + val = val.strip() + if val.endswith("%"): + return float(val[:-1]) / 100 + return float(val) + + +def Boolean(value): + """ArgParser function to turn a boolean string into a python boolean""" + if value.upper() == "TRUE": + return True + if value.upper() == "FALSE": + return False + return None + + +def to_bytes(content): + """Ensures the content is bytes + + .. versionadded:: 1.1""" + if isinstance(content, bytes): + return content + return str(content).encode("utf8") + + +def debug(what): + """Print debug message if debugging is switched on""" + errormsg(what) + return what + + +def do_nothing(*args, **kwargs): # pylint: disable=unused-argument + """A blank function to do nothing + + .. versionadded:: 1.1""" + + +def errormsg(msg): + """Intended for end-user-visible error messages. + + (Currently just writes to stderr with an appended newline, but could do + something better in future: e.g. could add markup to distinguish error + messages from status messages or debugging output.) + + Note that this should always be combined with translation:: + + import inkex + ... + inkex.errormsg(_("This extension requires two selected paths.")) + """ + try: + sys.stderr.write(msg) + except TypeError: + sys.stderr.write(str(msg)) + except UnicodeEncodeError: + # Python 2: + # Fallback for cases where sys.stderr.encoding is not Unicode. + # Python 3: + # This will not work as write() does not accept byte strings, but AFAIK + # we should never reach this point as the default error handler is + # 'backslashreplace'. + + # This will be None by default if stderr is piped, so use ASCII as a + # last resort. + encoding = sys.stderr.encoding or "ascii" + sys.stderr.write(msg.encode(encoding, "backslashreplace")) + + # Write '\n' separately to avoid dealing with different string types. + sys.stderr.write("\n") + + +class AbortExtension(Exception): + """Raised to print a message to the user without backtrace""" + + +class DependencyError(NotImplementedError): + """Raised when we need an external python module that isn't available""" + + +class FragmentError(Exception): + """Raised when trying to do rooty things on an xml fragment""" + + +def to(kind): # pylint: disable=invalid-name + """ + Decorator which will turn a generator into a list, tuple or other object type. + """ + + def _inner(call): + def _outer(*args, **kw): + return kind(call(*args, **kw)) + + return _outer + + return _inner + + +def strargs(string, kind=float): + """Returns a list of floats from a string + + .. versionchanged:: 1.1 + also splits at -(minus) signs by adding a space in front of the - sign + + .. versionchanged:: 1.2 + Full support for the `SVG Path data BNF + `_ + """ + return [kind(val) for val in NUMBER_REX.findall(string)] + + +class classproperty: # pylint: disable=invalid-name, too-few-public-methods + """Combine classmethod and property decorators""" + + def __init__(self, func): + self.func = func + + def __get__(self, obj, owner): + return self.func(owner) + + +def filename_arg(name): + """Existing file to read or option used in script arguments""" + filename = os.path.abspath(os.path.expanduser(name)) + if not os.path.isfile(filename): + raise ArgumentTypeError(f"File not found: {name}") + return filename + + +def pairwise(iterable, start=True): + "Iterate over a list with overlapping pairs (see itertools recipes)" + first, then = tee(iterable) + starter = [(None, next(then, None))] + if not start: + starter = [] + return starter + list(zip(first, then)) + + +EVAL_GLOBALS = {} +EVAL_GLOBALS.update(random.__dict__) +EVAL_GLOBALS.update(math.__dict__) + + +def math_eval(function, variable="x"): + """Interpret a function string. All functions from math and random may be used. + + .. versionadded:: 1.1 + + Returns: + a lambda expression if sucessful; otherwise None. + """ + try: + if function != "": + return eval( + f"lambda {variable}: " + (function.strip('"') or "t"), EVAL_GLOBALS, {} + ) + # handle incomplete/invalid function gracefully + except SyntaxError: + pass + return None + + +def is_number(string): + """Checks if a value is a number + + .. versionadded:: 1.2""" + try: + float(string) + return True + except ValueError: + return False diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/README.md b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/README.md new file mode 100644 index 0000000..1f9e9fe --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/README.md @@ -0,0 +1 @@ +This directory is for contents of the site-packages associated with the packaged version of Inkex. \ No newline at end of file diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/__init__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/__init__.py new file mode 100644 index 0000000..fe58162 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/__init__.py @@ -0,0 +1,115 @@ +######################## BEGIN LICENSE BLOCK ######################## +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import List, Union + +from .charsetgroupprober import CharSetGroupProber +from .charsetprober import CharSetProber +from .enums import InputState +from .resultdict import ResultDict +from .universaldetector import UniversalDetector +from .version import VERSION, __version__ + +__all__ = ["UniversalDetector", "detect", "detect_all", "__version__", "VERSION"] + + +def detect( + byte_str: Union[bytes, bytearray], should_rename_legacy: bool = False +) -> ResultDict: + """ + Detect the encoding of the given byte string. + + :param byte_str: The byte sequence to examine. + :type byte_str: ``bytes`` or ``bytearray`` + :param should_rename_legacy: Should we rename legacy encodings + to their more modern equivalents? + :type should_rename_legacy: ``bool`` + """ + if not isinstance(byte_str, bytearray): + if not isinstance(byte_str, bytes): + raise TypeError( + f"Expected object of type bytes or bytearray, got: {type(byte_str)}" + ) + byte_str = bytearray(byte_str) + detector = UniversalDetector(should_rename_legacy=should_rename_legacy) + detector.feed(byte_str) + return detector.close() + + +def detect_all( + byte_str: Union[bytes, bytearray], + ignore_threshold: bool = False, + should_rename_legacy: bool = False, +) -> List[ResultDict]: + """ + Detect all the possible encodings of the given byte string. + + :param byte_str: The byte sequence to examine. + :type byte_str: ``bytes`` or ``bytearray`` + :param ignore_threshold: Include encodings that are below + ``UniversalDetector.MINIMUM_THRESHOLD`` + in results. + :type ignore_threshold: ``bool`` + :param should_rename_legacy: Should we rename legacy encodings + to their more modern equivalents? + :type should_rename_legacy: ``bool`` + """ + if not isinstance(byte_str, bytearray): + if not isinstance(byte_str, bytes): + raise TypeError( + f"Expected object of type bytes or bytearray, got: {type(byte_str)}" + ) + byte_str = bytearray(byte_str) + + detector = UniversalDetector(should_rename_legacy=should_rename_legacy) + detector.feed(byte_str) + detector.close() + + if detector.input_state == InputState.HIGH_BYTE: + results: List[ResultDict] = [] + probers: List[CharSetProber] = [] + for prober in detector.charset_probers: + if isinstance(prober, CharSetGroupProber): + probers.extend(p for p in prober.probers) + else: + probers.append(prober) + for prober in probers: + if ignore_threshold or prober.get_confidence() > detector.MINIMUM_THRESHOLD: + charset_name = prober.charset_name or "" + lower_charset_name = charset_name.lower() + # Use Windows encoding name instead of ISO-8859 if we saw any + # extra Windows-specific bytes + if lower_charset_name.startswith("iso-8859") and detector.has_win_bytes: + charset_name = detector.ISO_WIN_MAP.get( + lower_charset_name, charset_name + ) + # Rename legacy encodings with superset encodings if asked + if should_rename_legacy: + charset_name = detector.LEGACY_MAP.get( + charset_name.lower(), charset_name + ) + results.append( + { + "encoding": charset_name, + "confidence": prober.get_confidence(), + "language": prober.language, + } + ) + if len(results) > 0: + return sorted(results, key=lambda result: -result["confidence"]) + + return [detector.result] diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/__main__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/__main__.py new file mode 100644 index 0000000..c19b0d2 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/__main__.py @@ -0,0 +1,6 @@ +"""Wrapper so people can run python -m chardet""" + +from .cli.chardetect import main + +if __name__ == "__main__": + main() diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/big5freq.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/big5freq.py new file mode 100644 index 0000000..87d9f97 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/big5freq.py @@ -0,0 +1,386 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# Big5 frequency table +# by Taiwan's Mandarin Promotion Council +# +# +# 128 --> 0.42261 +# 256 --> 0.57851 +# 512 --> 0.74851 +# 1024 --> 0.89384 +# 2048 --> 0.97583 +# +# Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98 +# Random Distribution Ration = 512/(5401-512)=0.105 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR + +BIG5_TYPICAL_DISTRIBUTION_RATIO = 0.75 + +# Char to FreqOrder table +BIG5_TABLE_SIZE = 5376 +# fmt: off +BIG5_CHAR_TO_FREQ_ORDER = ( + 1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, # 16 +3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, # 32 +1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, # 48 + 63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, # 64 +3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, # 80 +4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, # 96 +5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, # 112 + 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, # 128 + 179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, # 144 + 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, # 160 +2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, # 176 +1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, # 192 +3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, # 208 + 706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, # 224 +1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, # 240 +3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, # 256 +2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, # 272 + 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, # 288 +3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, # 304 +1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, # 320 +5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, # 336 + 266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, # 352 +5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, # 368 +1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, # 384 + 32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, # 400 + 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, # 416 +3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, # 432 +3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, # 448 + 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, # 464 +2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, # 480 +2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, # 496 + 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, # 512 + 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, # 528 +3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, # 544 +1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, # 560 +1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, # 576 +1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, # 592 +2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, # 608 + 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, # 624 +4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, # 640 +1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, # 656 +5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, # 672 +2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, # 688 + 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, # 704 + 98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, # 720 + 523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, # 736 + 710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, # 752 +5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, # 768 + 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, # 784 +1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, # 800 + 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, # 816 + 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, # 832 +5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, # 848 +1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, # 864 + 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, # 880 +3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, # 896 +4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, # 912 +3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, # 928 + 279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, # 944 + 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, # 960 +1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, # 976 +4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, # 992 +3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, # 1008 +3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, # 1024 +2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, # 1040 +5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, # 1056 +3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, # 1072 +5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, # 1088 +1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, # 1104 +2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, # 1120 +1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, # 1136 + 78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, # 1152 +1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, # 1168 +4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, # 1184 +3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, # 1200 + 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, # 1216 + 165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, # 1232 + 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, # 1248 +2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, # 1264 +5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, # 1280 +1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, # 1296 +2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, # 1312 +1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, # 1328 +1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, # 1344 +5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, # 1360 +5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, # 1376 +5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, # 1392 +3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, # 1408 +4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, # 1424 +4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, # 1440 +2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, # 1456 +5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, # 1472 +3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, # 1488 + 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, # 1504 +5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, # 1520 +5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, # 1536 +1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, # 1552 +2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, # 1568 +3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, # 1584 +4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, # 1600 +5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, # 1616 +3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, # 1632 +4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, # 1648 +1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, # 1664 +1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, # 1680 +4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, # 1696 +1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, # 1712 + 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, # 1728 +1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, # 1744 +1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, # 1760 +3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, # 1776 + 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, # 1792 +5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, # 1808 +2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, # 1824 +1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, # 1840 +1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, # 1856 +5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, # 1872 + 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, # 1888 +4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, # 1904 + 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, # 1920 +2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, # 1936 + 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, # 1952 +1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, # 1968 +1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, # 1984 + 730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, # 2000 +4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, # 2016 +4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, # 2032 +1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, # 2048 +3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, # 2064 +5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, # 2080 +5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, # 2096 +1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, # 2112 +2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, # 2128 +1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, # 2144 +3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, # 2160 +2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, # 2176 +3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, # 2192 +2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, # 2208 +4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, # 2224 +4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, # 2240 +3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, # 2256 + 97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, # 2272 +3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, # 2288 + 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, # 2304 +3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, # 2320 +4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, # 2336 +3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, # 2352 +1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, # 2368 +5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, # 2384 + 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, # 2400 +5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, # 2416 +1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, # 2432 + 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, # 2448 +4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, # 2464 +4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, # 2480 + 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, # 2496 +2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, # 2512 +2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, # 2528 +3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, # 2544 +1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, # 2560 +4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, # 2576 +2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, # 2592 +1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, # 2608 +1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, # 2624 +2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, # 2640 +3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, # 2656 +1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, # 2672 +5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, # 2688 +1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, # 2704 +4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, # 2720 +1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, # 2736 + 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, # 2752 +1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, # 2768 +4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, # 2784 +4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, # 2800 +2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, # 2816 +1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, # 2832 +4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, # 2848 + 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, # 2864 +5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, # 2880 +2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, # 2896 +3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, # 2912 +4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, # 2928 + 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, # 2944 +5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, # 2960 +5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, # 2976 +1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, # 2992 +4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, # 3008 +4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, # 3024 +2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, # 3040 +3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, # 3056 +3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, # 3072 +2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, # 3088 +1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, # 3104 +4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, # 3120 +3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, # 3136 +3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, # 3152 +2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, # 3168 +4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, # 3184 +5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, # 3200 +3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, # 3216 +2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, # 3232 +3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, # 3248 +1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, # 3264 +2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, # 3280 +3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, # 3296 +4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, # 3312 +2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, # 3328 +2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, # 3344 +5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, # 3360 +1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, # 3376 +2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, # 3392 +1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, # 3408 +3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, # 3424 +4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, # 3440 +2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, # 3456 +3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, # 3472 +3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, # 3488 +2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, # 3504 +4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, # 3520 +2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, # 3536 +3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, # 3552 +4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, # 3568 +5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, # 3584 +3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, # 3600 + 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, # 3616 +1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, # 3632 +4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, # 3648 +1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, # 3664 +4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, # 3680 +5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, # 3696 + 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, # 3712 +5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, # 3728 +5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, # 3744 +2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, # 3760 +3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, # 3776 +2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, # 3792 +2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, # 3808 + 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, # 3824 +1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, # 3840 +4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, # 3856 +3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, # 3872 +3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, # 3888 + 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, # 3904 +2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, # 3920 + 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, # 3936 +2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, # 3952 +4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, # 3968 +1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, # 3984 +4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, # 4000 +1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, # 4016 +3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, # 4032 + 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, # 4048 +3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, # 4064 +5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, # 4080 +5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, # 4096 +3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, # 4112 +3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, # 4128 +1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, # 4144 +2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, # 4160 +5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, # 4176 +1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, # 4192 +1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, # 4208 +3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, # 4224 + 919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, # 4240 +1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, # 4256 +4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, # 4272 +5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, # 4288 +2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, # 4304 +3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, # 4320 + 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, # 4336 +1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, # 4352 +2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, # 4368 +2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, # 4384 +5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, # 4400 +5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, # 4416 +5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, # 4432 +2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, # 4448 +2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, # 4464 +1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, # 4480 +4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, # 4496 +3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, # 4512 +3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, # 4528 +4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, # 4544 +4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, # 4560 +2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, # 4576 +2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, # 4592 +5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, # 4608 +4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, # 4624 +5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, # 4640 +4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, # 4656 + 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, # 4672 + 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, # 4688 +1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, # 4704 +3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, # 4720 +4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, # 4736 +1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, # 4752 +5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, # 4768 +2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, # 4784 +2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, # 4800 +3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, # 4816 +5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, # 4832 +1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, # 4848 +3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, # 4864 +5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, # 4880 +1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, # 4896 +5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, # 4912 +2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, # 4928 +3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, # 4944 +2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, # 4960 +3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, # 4976 +3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, # 4992 +3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, # 5008 +4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, # 5024 + 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, # 5040 +2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, # 5056 +4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, # 5072 +3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, # 5088 +5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, # 5104 +1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, # 5120 +5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, # 5136 + 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, # 5152 +1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, # 5168 + 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, # 5184 +4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, # 5200 +1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, # 5216 +4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, # 5232 +1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, # 5248 + 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, # 5264 +3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, # 5280 +4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, # 5296 +5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, # 5312 + 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, # 5328 +3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, # 5344 + 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, # 5360 +2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798, # 5376 +) +# fmt: on diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/big5prober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/big5prober.py new file mode 100644 index 0000000..ef09c60 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/big5prober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .chardistribution import Big5DistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import BIG5_SM_MODEL + + +class Big5Prober(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(BIG5_SM_MODEL) + self.distribution_analyzer = Big5DistributionAnalysis() + self.reset() + + @property + def charset_name(self) -> str: + return "Big5" + + @property + def language(self) -> str: + return "Chinese" diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/chardistribution.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/chardistribution.py new file mode 100644 index 0000000..176cb99 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/chardistribution.py @@ -0,0 +1,261 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import Tuple, Union + +from .big5freq import ( + BIG5_CHAR_TO_FREQ_ORDER, + BIG5_TABLE_SIZE, + BIG5_TYPICAL_DISTRIBUTION_RATIO, +) +from .euckrfreq import ( + EUCKR_CHAR_TO_FREQ_ORDER, + EUCKR_TABLE_SIZE, + EUCKR_TYPICAL_DISTRIBUTION_RATIO, +) +from .euctwfreq import ( + EUCTW_CHAR_TO_FREQ_ORDER, + EUCTW_TABLE_SIZE, + EUCTW_TYPICAL_DISTRIBUTION_RATIO, +) +from .gb2312freq import ( + GB2312_CHAR_TO_FREQ_ORDER, + GB2312_TABLE_SIZE, + GB2312_TYPICAL_DISTRIBUTION_RATIO, +) +from .jisfreq import ( + JIS_CHAR_TO_FREQ_ORDER, + JIS_TABLE_SIZE, + JIS_TYPICAL_DISTRIBUTION_RATIO, +) +from .johabfreq import JOHAB_TO_EUCKR_ORDER_TABLE + + +class CharDistributionAnalysis: + ENOUGH_DATA_THRESHOLD = 1024 + SURE_YES = 0.99 + SURE_NO = 0.01 + MINIMUM_DATA_THRESHOLD = 3 + + def __init__(self) -> None: + # Mapping table to get frequency order from char order (get from + # GetOrder()) + self._char_to_freq_order: Tuple[int, ...] = tuple() + self._table_size = 0 # Size of above table + # This is a constant value which varies from language to language, + # used in calculating confidence. See + # http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html + # for further detail. + self.typical_distribution_ratio = 0.0 + self._done = False + self._total_chars = 0 + self._freq_chars = 0 + self.reset() + + def reset(self) -> None: + """reset analyser, clear any state""" + # If this flag is set to True, detection is done and conclusion has + # been made + self._done = False + self._total_chars = 0 # Total characters encountered + # The number of characters whose frequency order is less than 512 + self._freq_chars = 0 + + def feed(self, char: Union[bytes, bytearray], char_len: int) -> None: + """feed a character with known length""" + if char_len == 2: + # we only care about 2-bytes character in our distribution analysis + order = self.get_order(char) + else: + order = -1 + if order >= 0: + self._total_chars += 1 + # order is valid + if order < self._table_size: + if 512 > self._char_to_freq_order[order]: + self._freq_chars += 1 + + def get_confidence(self) -> float: + """return confidence based on existing data""" + # if we didn't receive any character in our consideration range, + # return negative answer + if self._total_chars <= 0 or self._freq_chars <= self.MINIMUM_DATA_THRESHOLD: + return self.SURE_NO + + if self._total_chars != self._freq_chars: + r = self._freq_chars / ( + (self._total_chars - self._freq_chars) * self.typical_distribution_ratio + ) + if r < self.SURE_YES: + return r + + # normalize confidence (we don't want to be 100% sure) + return self.SURE_YES + + def got_enough_data(self) -> bool: + # It is not necessary to receive all data to draw conclusion. + # For charset detection, certain amount of data is enough + return self._total_chars > self.ENOUGH_DATA_THRESHOLD + + def get_order(self, _: Union[bytes, bytearray]) -> int: + # We do not handle characters based on the original encoding string, + # but convert this encoding string to a number, here called order. + # This allows multiple encodings of a language to share one frequency + # table. + return -1 + + +class EUCTWDistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__init__() + self._char_to_freq_order = EUCTW_CHAR_TO_FREQ_ORDER + self._table_size = EUCTW_TABLE_SIZE + self.typical_distribution_ratio = EUCTW_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str: Union[bytes, bytearray]) -> int: + # for euc-TW encoding, we are interested + # first byte range: 0xc4 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char = byte_str[0] + if first_char >= 0xC4: + return 94 * (first_char - 0xC4) + byte_str[1] - 0xA1 + return -1 + + +class EUCKRDistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__init__() + self._char_to_freq_order = EUCKR_CHAR_TO_FREQ_ORDER + self._table_size = EUCKR_TABLE_SIZE + self.typical_distribution_ratio = EUCKR_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str: Union[bytes, bytearray]) -> int: + # for euc-KR encoding, we are interested + # first byte range: 0xb0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char = byte_str[0] + if first_char >= 0xB0: + return 94 * (first_char - 0xB0) + byte_str[1] - 0xA1 + return -1 + + +class JOHABDistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__init__() + self._char_to_freq_order = EUCKR_CHAR_TO_FREQ_ORDER + self._table_size = EUCKR_TABLE_SIZE + self.typical_distribution_ratio = EUCKR_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str: Union[bytes, bytearray]) -> int: + first_char = byte_str[0] + if 0x88 <= first_char < 0xD4: + code = first_char * 256 + byte_str[1] + return JOHAB_TO_EUCKR_ORDER_TABLE.get(code, -1) + return -1 + + +class GB2312DistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__init__() + self._char_to_freq_order = GB2312_CHAR_TO_FREQ_ORDER + self._table_size = GB2312_TABLE_SIZE + self.typical_distribution_ratio = GB2312_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str: Union[bytes, bytearray]) -> int: + # for GB2312 encoding, we are interested + # first byte range: 0xb0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if (first_char >= 0xB0) and (second_char >= 0xA1): + return 94 * (first_char - 0xB0) + second_char - 0xA1 + return -1 + + +class Big5DistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__init__() + self._char_to_freq_order = BIG5_CHAR_TO_FREQ_ORDER + self._table_size = BIG5_TABLE_SIZE + self.typical_distribution_ratio = BIG5_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str: Union[bytes, bytearray]) -> int: + # for big5 encoding, we are interested + # first byte range: 0xa4 -- 0xfe + # second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if first_char >= 0xA4: + if second_char >= 0xA1: + return 157 * (first_char - 0xA4) + second_char - 0xA1 + 63 + return 157 * (first_char - 0xA4) + second_char - 0x40 + return -1 + + +class SJISDistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__init__() + self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER + self._table_size = JIS_TABLE_SIZE + self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str: Union[bytes, bytearray]) -> int: + # for sjis encoding, we are interested + # first byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe + # second byte range: 0x40 -- 0x7e, 0x81 -- oxfe + # no validation needed here. State machine has done that + first_char, second_char = byte_str[0], byte_str[1] + if 0x81 <= first_char <= 0x9F: + order = 188 * (first_char - 0x81) + elif 0xE0 <= first_char <= 0xEF: + order = 188 * (first_char - 0xE0 + 31) + else: + return -1 + order = order + second_char - 0x40 + if second_char > 0x7F: + order = -1 + return order + + +class EUCJPDistributionAnalysis(CharDistributionAnalysis): + def __init__(self) -> None: + super().__init__() + self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER + self._table_size = JIS_TABLE_SIZE + self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO + + def get_order(self, byte_str: Union[bytes, bytearray]) -> int: + # for euc-JP encoding, we are interested + # first byte range: 0xa0 -- 0xfe + # second byte range: 0xa1 -- 0xfe + # no validation needed here. State machine has done that + char = byte_str[0] + if char >= 0xA0: + return 94 * (char - 0xA1) + byte_str[1] - 0xA1 + return -1 diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/charsetgroupprober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/charsetgroupprober.py new file mode 100644 index 0000000..6def56b --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/charsetgroupprober.py @@ -0,0 +1,106 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import List, Optional, Union + +from .charsetprober import CharSetProber +from .enums import LanguageFilter, ProbingState + + +class CharSetGroupProber(CharSetProber): + def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None: + super().__init__(lang_filter=lang_filter) + self._active_num = 0 + self.probers: List[CharSetProber] = [] + self._best_guess_prober: Optional[CharSetProber] = None + + def reset(self) -> None: + super().reset() + self._active_num = 0 + for prober in self.probers: + prober.reset() + prober.active = True + self._active_num += 1 + self._best_guess_prober = None + + @property + def charset_name(self) -> Optional[str]: + if not self._best_guess_prober: + self.get_confidence() + if not self._best_guess_prober: + return None + return self._best_guess_prober.charset_name + + @property + def language(self) -> Optional[str]: + if not self._best_guess_prober: + self.get_confidence() + if not self._best_guess_prober: + return None + return self._best_guess_prober.language + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + for prober in self.probers: + if not prober.active: + continue + state = prober.feed(byte_str) + if not state: + continue + if state == ProbingState.FOUND_IT: + self._best_guess_prober = prober + self._state = ProbingState.FOUND_IT + return self.state + if state == ProbingState.NOT_ME: + prober.active = False + self._active_num -= 1 + if self._active_num <= 0: + self._state = ProbingState.NOT_ME + return self.state + return self.state + + def get_confidence(self) -> float: + state = self.state + if state == ProbingState.FOUND_IT: + return 0.99 + if state == ProbingState.NOT_ME: + return 0.01 + best_conf = 0.0 + self._best_guess_prober = None + for prober in self.probers: + if not prober.active: + self.logger.debug("%s not active", prober.charset_name) + continue + conf = prober.get_confidence() + self.logger.debug( + "%s %s confidence = %s", prober.charset_name, prober.language, conf + ) + if best_conf < conf: + best_conf = conf + self._best_guess_prober = prober + if not self._best_guess_prober: + return 0.0 + return best_conf diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/charsetprober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/charsetprober.py new file mode 100644 index 0000000..a103ca1 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/charsetprober.py @@ -0,0 +1,147 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +import logging +import re +from typing import Optional, Union + +from .enums import LanguageFilter, ProbingState + +INTERNATIONAL_WORDS_PATTERN = re.compile( + b"[a-zA-Z]*[\x80-\xFF]+[a-zA-Z]*[^a-zA-Z\x80-\xFF]?" +) + + +class CharSetProber: + + SHORTCUT_THRESHOLD = 0.95 + + def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None: + self._state = ProbingState.DETECTING + self.active = True + self.lang_filter = lang_filter + self.logger = logging.getLogger(__name__) + + def reset(self) -> None: + self._state = ProbingState.DETECTING + + @property + def charset_name(self) -> Optional[str]: + return None + + @property + def language(self) -> Optional[str]: + raise NotImplementedError + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + raise NotImplementedError + + @property + def state(self) -> ProbingState: + return self._state + + def get_confidence(self) -> float: + return 0.0 + + @staticmethod + def filter_high_byte_only(buf: Union[bytes, bytearray]) -> bytes: + buf = re.sub(b"([\x00-\x7F])+", b" ", buf) + return buf + + @staticmethod + def filter_international_words(buf: Union[bytes, bytearray]) -> bytearray: + """ + We define three types of bytes: + alphabet: english alphabets [a-zA-Z] + international: international characters [\x80-\xFF] + marker: everything else [^a-zA-Z\x80-\xFF] + The input buffer can be thought to contain a series of words delimited + by markers. This function works to filter all words that contain at + least one international character. All contiguous sequences of markers + are replaced by a single space ascii character. + This filter applies to all scripts which do not use English characters. + """ + filtered = bytearray() + + # This regex expression filters out only words that have at-least one + # international character. The word may include one marker character at + # the end. + words = INTERNATIONAL_WORDS_PATTERN.findall(buf) + + for word in words: + filtered.extend(word[:-1]) + + # If the last character in the word is a marker, replace it with a + # space as markers shouldn't affect our analysis (they are used + # similarly across all languages and may thus have similar + # frequencies). + last_char = word[-1:] + if not last_char.isalpha() and last_char < b"\x80": + last_char = b" " + filtered.extend(last_char) + + return filtered + + @staticmethod + def remove_xml_tags(buf: Union[bytes, bytearray]) -> bytes: + """ + Returns a copy of ``buf`` that retains only the sequences of English + alphabet and high byte characters that are not between <> characters. + This filter can be applied to all scripts which contain both English + characters and extended ASCII characters, but is currently only used by + ``Latin1Prober``. + """ + filtered = bytearray() + in_tag = False + prev = 0 + buf = memoryview(buf).cast("c") + + for curr, buf_char in enumerate(buf): + # Check if we're coming out of or entering an XML tag + + # https://github.com/python/typeshed/issues/8182 + if buf_char == b">": # type: ignore[comparison-overlap] + prev = curr + 1 + in_tag = False + # https://github.com/python/typeshed/issues/8182 + elif buf_char == b"<": # type: ignore[comparison-overlap] + if curr > prev and not in_tag: + # Keep everything after last non-extended-ASCII, + # non-alphabetic character + filtered.extend(buf[prev:curr]) + # Output a space to delimit stretch we kept + filtered.extend(b" ") + in_tag = True + + # If we're not in a tag... + if not in_tag: + # Keep everything after last non-extended-ASCII, non-alphabetic + # character + filtered.extend(buf[prev:]) + + return filtered diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/cli/__init__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/cli/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/cli/chardetect.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/cli/chardetect.py new file mode 100644 index 0000000..43f6e14 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/cli/chardetect.py @@ -0,0 +1,112 @@ +""" +Script which takes one or more file paths and reports on their detected +encodings + +Example:: + + % chardetect somefile someotherfile + somefile: windows-1252 with confidence 0.5 + someotherfile: ascii with confidence 1.0 + +If no paths are provided, it takes its input from stdin. + +""" + + +import argparse +import sys +from typing import Iterable, List, Optional + +from .. import __version__ +from ..universaldetector import UniversalDetector + + +def description_of( + lines: Iterable[bytes], + name: str = "stdin", + minimal: bool = False, + should_rename_legacy: bool = False, +) -> Optional[str]: + """ + Return a string describing the probable encoding of a file or + list of strings. + + :param lines: The lines to get the encoding of. + :type lines: Iterable of bytes + :param name: Name of file or collection of lines + :type name: str + :param should_rename_legacy: Should we rename legacy encodings to + their more modern equivalents? + :type should_rename_legacy: ``bool`` + """ + u = UniversalDetector(should_rename_legacy=should_rename_legacy) + for line in lines: + line = bytearray(line) + u.feed(line) + # shortcut out of the loop to save reading further - particularly useful if we read a BOM. + if u.done: + break + u.close() + result = u.result + if minimal: + return result["encoding"] + if result["encoding"]: + return f'{name}: {result["encoding"]} with confidence {result["confidence"]}' + return f"{name}: no result" + + +def main(argv: Optional[List[str]] = None) -> None: + """ + Handles command line arguments and gets things started. + + :param argv: List of arguments, as if specified on the command-line. + If None, ``sys.argv[1:]`` is used instead. + :type argv: list of str + """ + # Get command line arguments + parser = argparse.ArgumentParser( + description=( + "Takes one or more file paths and reports their detected encodings" + ) + ) + parser.add_argument( + "input", + help="File whose encoding we would like to determine. (default: stdin)", + type=argparse.FileType("rb"), + nargs="*", + default=[sys.stdin.buffer], + ) + parser.add_argument( + "--minimal", + help="Print only the encoding to standard output", + action="store_true", + ) + parser.add_argument( + "-l", + "--legacy", + help="Rename legacy encodings to more modern ones.", + action="store_true", + ) + parser.add_argument( + "--version", action="version", version=f"%(prog)s {__version__}" + ) + args = parser.parse_args(argv) + + for f in args.input: + if f.isatty(): + print( + "You are running chardetect interactively. Press " + "CTRL-D twice at the start of a blank line to signal the " + "end of your input. If you want help, run chardetect " + "--help\n", + file=sys.stderr, + ) + print( + description_of( + f, f.name, minimal=args.minimal, should_rename_legacy=args.legacy + ) + ) + + +if __name__ == "__main__": + main() diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/codingstatemachine.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/codingstatemachine.py new file mode 100644 index 0000000..8ed4a87 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/codingstatemachine.py @@ -0,0 +1,90 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +import logging + +from .codingstatemachinedict import CodingStateMachineDict +from .enums import MachineState + + +class CodingStateMachine: + """ + A state machine to verify a byte sequence for a particular encoding. For + each byte the detector receives, it will feed that byte to every active + state machine available, one byte at a time. The state machine changes its + state based on its previous state and the byte it receives. There are 3 + states in a state machine that are of interest to an auto-detector: + + START state: This is the state to start with, or a legal byte sequence + (i.e. a valid code point) for character has been identified. + + ME state: This indicates that the state machine identified a byte sequence + that is specific to the charset it is designed for and that + there is no other possible encoding which can contain this byte + sequence. This will to lead to an immediate positive answer for + the detector. + + ERROR state: This indicates the state machine identified an illegal byte + sequence for that encoding. This will lead to an immediate + negative answer for this encoding. Detector will exclude this + encoding from consideration from here on. + """ + + def __init__(self, sm: CodingStateMachineDict) -> None: + self._model = sm + self._curr_byte_pos = 0 + self._curr_char_len = 0 + self._curr_state = MachineState.START + self.active = True + self.logger = logging.getLogger(__name__) + self.reset() + + def reset(self) -> None: + self._curr_state = MachineState.START + + def next_state(self, c: int) -> int: + # for each byte we get its class + # if it is first byte, we also get byte length + byte_class = self._model["class_table"][c] + if self._curr_state == MachineState.START: + self._curr_byte_pos = 0 + self._curr_char_len = self._model["char_len_table"][byte_class] + # from byte's class and state_table, we get its next state + curr_state = self._curr_state * self._model["class_factor"] + byte_class + self._curr_state = self._model["state_table"][curr_state] + self._curr_byte_pos += 1 + return self._curr_state + + def get_current_charlen(self) -> int: + return self._curr_char_len + + def get_coding_state_machine(self) -> str: + return self._model["name"] + + @property + def language(self) -> str: + return self._model["language"] diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/codingstatemachinedict.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/codingstatemachinedict.py new file mode 100644 index 0000000..7a3c4c7 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/codingstatemachinedict.py @@ -0,0 +1,19 @@ +from typing import TYPE_CHECKING, Tuple + +if TYPE_CHECKING: + # TypedDict was introduced in Python 3.8. + # + # TODO: Remove the else block and TYPE_CHECKING check when dropping support + # for Python 3.7. + from typing import TypedDict + + class CodingStateMachineDict(TypedDict, total=False): + class_table: Tuple[int, ...] + class_factor: int + state_table: Tuple[int, ...] + char_len_table: Tuple[int, ...] + name: str + language: str # Optional key + +else: + CodingStateMachineDict = dict diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/cp949prober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/cp949prober.py new file mode 100644 index 0000000..fa7307e --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/cp949prober.py @@ -0,0 +1,49 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .chardistribution import EUCKRDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import CP949_SM_MODEL + + +class CP949Prober(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(CP949_SM_MODEL) + # NOTE: CP949 is a superset of EUC-KR, so the distribution should be + # not different. + self.distribution_analyzer = EUCKRDistributionAnalysis() + self.reset() + + @property + def charset_name(self) -> str: + return "CP949" + + @property + def language(self) -> str: + return "Korean" diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/enums.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/enums.py new file mode 100644 index 0000000..5e3e198 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/enums.py @@ -0,0 +1,85 @@ +""" +All of the Enums that are used throughout the chardet package. + +:author: Dan Blanchard (dan.blanchard@gmail.com) +""" + +from enum import Enum, Flag + + +class InputState: + """ + This enum represents the different states a universal detector can be in. + """ + + PURE_ASCII = 0 + ESC_ASCII = 1 + HIGH_BYTE = 2 + + +class LanguageFilter(Flag): + """ + This enum represents the different language filters we can apply to a + ``UniversalDetector``. + """ + + NONE = 0x00 + CHINESE_SIMPLIFIED = 0x01 + CHINESE_TRADITIONAL = 0x02 + JAPANESE = 0x04 + KOREAN = 0x08 + NON_CJK = 0x10 + ALL = 0x1F + CHINESE = CHINESE_SIMPLIFIED | CHINESE_TRADITIONAL + CJK = CHINESE | JAPANESE | KOREAN + + +class ProbingState(Enum): + """ + This enum represents the different states a prober can be in. + """ + + DETECTING = 0 + FOUND_IT = 1 + NOT_ME = 2 + + +class MachineState: + """ + This enum represents the different states a state machine can be in. + """ + + START = 0 + ERROR = 1 + ITS_ME = 2 + + +class SequenceLikelihood: + """ + This enum represents the likelihood of a character following the previous one. + """ + + NEGATIVE = 0 + UNLIKELY = 1 + LIKELY = 2 + POSITIVE = 3 + + @classmethod + def get_num_categories(cls) -> int: + """:returns: The number of likelihood categories in the enum.""" + return 4 + + +class CharacterCategory: + """ + This enum represents the different categories language models for + ``SingleByteCharsetProber`` put characters into. + + Anything less than CONTROL is considered a letter. + """ + + UNDEFINED = 255 + LINE_BREAK = 254 + SYMBOL = 253 + DIGIT = 252 + CONTROL = 251 diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/escprober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/escprober.py new file mode 100644 index 0000000..fd71383 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/escprober.py @@ -0,0 +1,102 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import Optional, Union + +from .charsetprober import CharSetProber +from .codingstatemachine import CodingStateMachine +from .enums import LanguageFilter, MachineState, ProbingState +from .escsm import ( + HZ_SM_MODEL, + ISO2022CN_SM_MODEL, + ISO2022JP_SM_MODEL, + ISO2022KR_SM_MODEL, +) + + +class EscCharSetProber(CharSetProber): + """ + This CharSetProber uses a "code scheme" approach for detecting encodings, + whereby easily recognizable escape or shift sequences are relied on to + identify these encodings. + """ + + def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None: + super().__init__(lang_filter=lang_filter) + self.coding_sm = [] + if self.lang_filter & LanguageFilter.CHINESE_SIMPLIFIED: + self.coding_sm.append(CodingStateMachine(HZ_SM_MODEL)) + self.coding_sm.append(CodingStateMachine(ISO2022CN_SM_MODEL)) + if self.lang_filter & LanguageFilter.JAPANESE: + self.coding_sm.append(CodingStateMachine(ISO2022JP_SM_MODEL)) + if self.lang_filter & LanguageFilter.KOREAN: + self.coding_sm.append(CodingStateMachine(ISO2022KR_SM_MODEL)) + self.active_sm_count = 0 + self._detected_charset: Optional[str] = None + self._detected_language: Optional[str] = None + self._state = ProbingState.DETECTING + self.reset() + + def reset(self) -> None: + super().reset() + for coding_sm in self.coding_sm: + coding_sm.active = True + coding_sm.reset() + self.active_sm_count = len(self.coding_sm) + self._detected_charset = None + self._detected_language = None + + @property + def charset_name(self) -> Optional[str]: + return self._detected_charset + + @property + def language(self) -> Optional[str]: + return self._detected_language + + def get_confidence(self) -> float: + return 0.99 if self._detected_charset else 0.00 + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + for c in byte_str: + for coding_sm in self.coding_sm: + if not coding_sm.active: + continue + coding_state = coding_sm.next_state(c) + if coding_state == MachineState.ERROR: + coding_sm.active = False + self.active_sm_count -= 1 + if self.active_sm_count <= 0: + self._state = ProbingState.NOT_ME + return self.state + elif coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + self._detected_charset = coding_sm.get_coding_state_machine() + self._detected_language = coding_sm.language + return self.state + + return self.state diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/escsm.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/escsm.py new file mode 100644 index 0000000..11d4adf --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/escsm.py @@ -0,0 +1,261 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .codingstatemachinedict import CodingStateMachineDict +from .enums import MachineState + +# fmt: off +HZ_CLS = ( + 1, 0, 0, 0, 0, 0, 0, 0, # 00 - 07 + 0, 0, 0, 0, 0, 0, 0, 0, # 08 - 0f + 0, 0, 0, 0, 0, 0, 0, 0, # 10 - 17 + 0, 0, 0, 1, 0, 0, 0, 0, # 18 - 1f + 0, 0, 0, 0, 0, 0, 0, 0, # 20 - 27 + 0, 0, 0, 0, 0, 0, 0, 0, # 28 - 2f + 0, 0, 0, 0, 0, 0, 0, 0, # 30 - 37 + 0, 0, 0, 0, 0, 0, 0, 0, # 38 - 3f + 0, 0, 0, 0, 0, 0, 0, 0, # 40 - 47 + 0, 0, 0, 0, 0, 0, 0, 0, # 48 - 4f + 0, 0, 0, 0, 0, 0, 0, 0, # 50 - 57 + 0, 0, 0, 0, 0, 0, 0, 0, # 58 - 5f + 0, 0, 0, 0, 0, 0, 0, 0, # 60 - 67 + 0, 0, 0, 0, 0, 0, 0, 0, # 68 - 6f + 0, 0, 0, 0, 0, 0, 0, 0, # 70 - 77 + 0, 0, 0, 4, 0, 5, 2, 0, # 78 - 7f + 1, 1, 1, 1, 1, 1, 1, 1, # 80 - 87 + 1, 1, 1, 1, 1, 1, 1, 1, # 88 - 8f + 1, 1, 1, 1, 1, 1, 1, 1, # 90 - 97 + 1, 1, 1, 1, 1, 1, 1, 1, # 98 - 9f + 1, 1, 1, 1, 1, 1, 1, 1, # a0 - a7 + 1, 1, 1, 1, 1, 1, 1, 1, # a8 - af + 1, 1, 1, 1, 1, 1, 1, 1, # b0 - b7 + 1, 1, 1, 1, 1, 1, 1, 1, # b8 - bf + 1, 1, 1, 1, 1, 1, 1, 1, # c0 - c7 + 1, 1, 1, 1, 1, 1, 1, 1, # c8 - cf + 1, 1, 1, 1, 1, 1, 1, 1, # d0 - d7 + 1, 1, 1, 1, 1, 1, 1, 1, # d8 - df + 1, 1, 1, 1, 1, 1, 1, 1, # e0 - e7 + 1, 1, 1, 1, 1, 1, 1, 1, # e8 - ef + 1, 1, 1, 1, 1, 1, 1, 1, # f0 - f7 + 1, 1, 1, 1, 1, 1, 1, 1, # f8 - ff +) + +HZ_ST = ( +MachineState.START, MachineState.ERROR, 3, MachineState.START, MachineState.START, MachineState.START, MachineState.ERROR, MachineState.ERROR, # 00-07 +MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, # 08-0f +MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ERROR, MachineState.ERROR, MachineState.START, MachineState.START, 4, MachineState.ERROR, # 10-17 + 5, MachineState.ERROR, 6, MachineState.ERROR, 5, 5, 4, MachineState.ERROR, # 18-1f + 4, MachineState.ERROR, 4, 4, 4, MachineState.ERROR, 4, MachineState.ERROR, # 20-27 + 4, MachineState.ITS_ME, MachineState.START, MachineState.START, MachineState.START, MachineState.START, MachineState.START, MachineState.START, # 28-2f +) +# fmt: on + +HZ_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) + +HZ_SM_MODEL: CodingStateMachineDict = { + "class_table": HZ_CLS, + "class_factor": 6, + "state_table": HZ_ST, + "char_len_table": HZ_CHAR_LEN_TABLE, + "name": "HZ-GB-2312", + "language": "Chinese", +} + +# fmt: off +ISO2022CN_CLS = ( + 2, 0, 0, 0, 0, 0, 0, 0, # 00 - 07 + 0, 0, 0, 0, 0, 0, 0, 0, # 08 - 0f + 0, 0, 0, 0, 0, 0, 0, 0, # 10 - 17 + 0, 0, 0, 1, 0, 0, 0, 0, # 18 - 1f + 0, 0, 0, 0, 0, 0, 0, 0, # 20 - 27 + 0, 3, 0, 0, 0, 0, 0, 0, # 28 - 2f + 0, 0, 0, 0, 0, 0, 0, 0, # 30 - 37 + 0, 0, 0, 0, 0, 0, 0, 0, # 38 - 3f + 0, 0, 0, 4, 0, 0, 0, 0, # 40 - 47 + 0, 0, 0, 0, 0, 0, 0, 0, # 48 - 4f + 0, 0, 0, 0, 0, 0, 0, 0, # 50 - 57 + 0, 0, 0, 0, 0, 0, 0, 0, # 58 - 5f + 0, 0, 0, 0, 0, 0, 0, 0, # 60 - 67 + 0, 0, 0, 0, 0, 0, 0, 0, # 68 - 6f + 0, 0, 0, 0, 0, 0, 0, 0, # 70 - 77 + 0, 0, 0, 0, 0, 0, 0, 0, # 78 - 7f + 2, 2, 2, 2, 2, 2, 2, 2, # 80 - 87 + 2, 2, 2, 2, 2, 2, 2, 2, # 88 - 8f + 2, 2, 2, 2, 2, 2, 2, 2, # 90 - 97 + 2, 2, 2, 2, 2, 2, 2, 2, # 98 - 9f + 2, 2, 2, 2, 2, 2, 2, 2, # a0 - a7 + 2, 2, 2, 2, 2, 2, 2, 2, # a8 - af + 2, 2, 2, 2, 2, 2, 2, 2, # b0 - b7 + 2, 2, 2, 2, 2, 2, 2, 2, # b8 - bf + 2, 2, 2, 2, 2, 2, 2, 2, # c0 - c7 + 2, 2, 2, 2, 2, 2, 2, 2, # c8 - cf + 2, 2, 2, 2, 2, 2, 2, 2, # d0 - d7 + 2, 2, 2, 2, 2, 2, 2, 2, # d8 - df + 2, 2, 2, 2, 2, 2, 2, 2, # e0 - e7 + 2, 2, 2, 2, 2, 2, 2, 2, # e8 - ef + 2, 2, 2, 2, 2, 2, 2, 2, # f0 - f7 + 2, 2, 2, 2, 2, 2, 2, 2, # f8 - ff +) + +ISO2022CN_ST = ( + MachineState.START, 3, MachineState.ERROR, MachineState.START, MachineState.START, MachineState.START, MachineState.START, MachineState.START, # 00-07 + MachineState.START, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, # 08-0f + MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, # 10-17 + MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, 4, MachineState.ERROR, # 18-1f + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, # 20-27 + 5, 6, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, # 28-2f + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, # 30-37 + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ERROR, MachineState.START, # 38-3f +) +# fmt: on + +ISO2022CN_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0) + +ISO2022CN_SM_MODEL: CodingStateMachineDict = { + "class_table": ISO2022CN_CLS, + "class_factor": 9, + "state_table": ISO2022CN_ST, + "char_len_table": ISO2022CN_CHAR_LEN_TABLE, + "name": "ISO-2022-CN", + "language": "Chinese", +} + +# fmt: off +ISO2022JP_CLS = ( + 2, 0, 0, 0, 0, 0, 0, 0, # 00 - 07 + 0, 0, 0, 0, 0, 0, 2, 2, # 08 - 0f + 0, 0, 0, 0, 0, 0, 0, 0, # 10 - 17 + 0, 0, 0, 1, 0, 0, 0, 0, # 18 - 1f + 0, 0, 0, 0, 7, 0, 0, 0, # 20 - 27 + 3, 0, 0, 0, 0, 0, 0, 0, # 28 - 2f + 0, 0, 0, 0, 0, 0, 0, 0, # 30 - 37 + 0, 0, 0, 0, 0, 0, 0, 0, # 38 - 3f + 6, 0, 4, 0, 8, 0, 0, 0, # 40 - 47 + 0, 9, 5, 0, 0, 0, 0, 0, # 48 - 4f + 0, 0, 0, 0, 0, 0, 0, 0, # 50 - 57 + 0, 0, 0, 0, 0, 0, 0, 0, # 58 - 5f + 0, 0, 0, 0, 0, 0, 0, 0, # 60 - 67 + 0, 0, 0, 0, 0, 0, 0, 0, # 68 - 6f + 0, 0, 0, 0, 0, 0, 0, 0, # 70 - 77 + 0, 0, 0, 0, 0, 0, 0, 0, # 78 - 7f + 2, 2, 2, 2, 2, 2, 2, 2, # 80 - 87 + 2, 2, 2, 2, 2, 2, 2, 2, # 88 - 8f + 2, 2, 2, 2, 2, 2, 2, 2, # 90 - 97 + 2, 2, 2, 2, 2, 2, 2, 2, # 98 - 9f + 2, 2, 2, 2, 2, 2, 2, 2, # a0 - a7 + 2, 2, 2, 2, 2, 2, 2, 2, # a8 - af + 2, 2, 2, 2, 2, 2, 2, 2, # b0 - b7 + 2, 2, 2, 2, 2, 2, 2, 2, # b8 - bf + 2, 2, 2, 2, 2, 2, 2, 2, # c0 - c7 + 2, 2, 2, 2, 2, 2, 2, 2, # c8 - cf + 2, 2, 2, 2, 2, 2, 2, 2, # d0 - d7 + 2, 2, 2, 2, 2, 2, 2, 2, # d8 - df + 2, 2, 2, 2, 2, 2, 2, 2, # e0 - e7 + 2, 2, 2, 2, 2, 2, 2, 2, # e8 - ef + 2, 2, 2, 2, 2, 2, 2, 2, # f0 - f7 + 2, 2, 2, 2, 2, 2, 2, 2, # f8 - ff +) + +ISO2022JP_ST = ( + MachineState.START, 3, MachineState.ERROR, MachineState.START, MachineState.START, MachineState.START, MachineState.START, MachineState.START, # 00-07 + MachineState.START, MachineState.START, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, # 08-0f + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, # 10-17 + MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ERROR, MachineState.ERROR, # 18-1f + MachineState.ERROR, 5, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, 4, MachineState.ERROR, MachineState.ERROR, # 20-27 + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, 6, MachineState.ITS_ME, MachineState.ERROR, MachineState.ITS_ME, MachineState.ERROR, # 28-2f + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ITS_ME, # 30-37 + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, # 38-3f + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ERROR, MachineState.START, MachineState.START, # 40-47 +) +# fmt: on + +ISO2022JP_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + +ISO2022JP_SM_MODEL: CodingStateMachineDict = { + "class_table": ISO2022JP_CLS, + "class_factor": 10, + "state_table": ISO2022JP_ST, + "char_len_table": ISO2022JP_CHAR_LEN_TABLE, + "name": "ISO-2022-JP", + "language": "Japanese", +} + +# fmt: off +ISO2022KR_CLS = ( + 2, 0, 0, 0, 0, 0, 0, 0, # 00 - 07 + 0, 0, 0, 0, 0, 0, 0, 0, # 08 - 0f + 0, 0, 0, 0, 0, 0, 0, 0, # 10 - 17 + 0, 0, 0, 1, 0, 0, 0, 0, # 18 - 1f + 0, 0, 0, 0, 3, 0, 0, 0, # 20 - 27 + 0, 4, 0, 0, 0, 0, 0, 0, # 28 - 2f + 0, 0, 0, 0, 0, 0, 0, 0, # 30 - 37 + 0, 0, 0, 0, 0, 0, 0, 0, # 38 - 3f + 0, 0, 0, 5, 0, 0, 0, 0, # 40 - 47 + 0, 0, 0, 0, 0, 0, 0, 0, # 48 - 4f + 0, 0, 0, 0, 0, 0, 0, 0, # 50 - 57 + 0, 0, 0, 0, 0, 0, 0, 0, # 58 - 5f + 0, 0, 0, 0, 0, 0, 0, 0, # 60 - 67 + 0, 0, 0, 0, 0, 0, 0, 0, # 68 - 6f + 0, 0, 0, 0, 0, 0, 0, 0, # 70 - 77 + 0, 0, 0, 0, 0, 0, 0, 0, # 78 - 7f + 2, 2, 2, 2, 2, 2, 2, 2, # 80 - 87 + 2, 2, 2, 2, 2, 2, 2, 2, # 88 - 8f + 2, 2, 2, 2, 2, 2, 2, 2, # 90 - 97 + 2, 2, 2, 2, 2, 2, 2, 2, # 98 - 9f + 2, 2, 2, 2, 2, 2, 2, 2, # a0 - a7 + 2, 2, 2, 2, 2, 2, 2, 2, # a8 - af + 2, 2, 2, 2, 2, 2, 2, 2, # b0 - b7 + 2, 2, 2, 2, 2, 2, 2, 2, # b8 - bf + 2, 2, 2, 2, 2, 2, 2, 2, # c0 - c7 + 2, 2, 2, 2, 2, 2, 2, 2, # c8 - cf + 2, 2, 2, 2, 2, 2, 2, 2, # d0 - d7 + 2, 2, 2, 2, 2, 2, 2, 2, # d8 - df + 2, 2, 2, 2, 2, 2, 2, 2, # e0 - e7 + 2, 2, 2, 2, 2, 2, 2, 2, # e8 - ef + 2, 2, 2, 2, 2, 2, 2, 2, # f0 - f7 + 2, 2, 2, 2, 2, 2, 2, 2, # f8 - ff +) + +ISO2022KR_ST = ( + MachineState.START, 3, MachineState.ERROR, MachineState.START, MachineState.START, MachineState.START, MachineState.ERROR, MachineState.ERROR, # 00-07 + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ITS_ME, # 08-0f + MachineState.ITS_ME, MachineState.ITS_ME, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, 4, MachineState.ERROR, MachineState.ERROR, # 10-17 + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, 5, MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, # 18-1f + MachineState.ERROR, MachineState.ERROR, MachineState.ERROR, MachineState.ITS_ME, MachineState.START, MachineState.START, MachineState.START, MachineState.START, # 20-27 +) +# fmt: on + +ISO2022KR_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) + +ISO2022KR_SM_MODEL: CodingStateMachineDict = { + "class_table": ISO2022KR_CLS, + "class_factor": 6, + "state_table": ISO2022KR_ST, + "char_len_table": ISO2022KR_CHAR_LEN_TABLE, + "name": "ISO-2022-KR", + "language": "Korean", +} diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/eucjpprober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/eucjpprober.py new file mode 100644 index 0000000..39487f4 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/eucjpprober.py @@ -0,0 +1,102 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import Union + +from .chardistribution import EUCJPDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .enums import MachineState, ProbingState +from .jpcntx import EUCJPContextAnalysis +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import EUCJP_SM_MODEL + + +class EUCJPProber(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(EUCJP_SM_MODEL) + self.distribution_analyzer = EUCJPDistributionAnalysis() + self.context_analyzer = EUCJPContextAnalysis() + self.reset() + + def reset(self) -> None: + super().reset() + self.context_analyzer.reset() + + @property + def charset_name(self) -> str: + return "EUC-JP" + + @property + def language(self) -> str: + return "Japanese" + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + assert self.coding_sm is not None + assert self.distribution_analyzer is not None + + for i, byte in enumerate(byte_str): + # PY3K: byte_str is a byte array, so byte is an int, not a byte + coding_state = self.coding_sm.next_state(byte) + if coding_state == MachineState.ERROR: + self.logger.debug( + "%s %s prober hit error at byte %s", + self.charset_name, + self.language, + i, + ) + self._state = ProbingState.NOT_ME + break + if coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + if coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte + self.context_analyzer.feed(self._last_char, char_len) + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.context_analyzer.feed(byte_str[i - 1 : i + 1], char_len) + self.distribution_analyzer.feed(byte_str[i - 1 : i + 1], char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if self.context_analyzer.got_enough_data() and ( + self.get_confidence() > self.SHORTCUT_THRESHOLD + ): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self) -> float: + assert self.distribution_analyzer is not None + + context_conf = self.context_analyzer.get_confidence() + distrib_conf = self.distribution_analyzer.get_confidence() + return max(context_conf, distrib_conf) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/euckrfreq.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/euckrfreq.py new file mode 100644 index 0000000..7dc3b10 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/euckrfreq.py @@ -0,0 +1,196 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# Sampling from about 20M text materials include literature and computer technology + +# 128 --> 0.79 +# 256 --> 0.92 +# 512 --> 0.986 +# 1024 --> 0.99944 +# 2048 --> 0.99999 +# +# Idea Distribution Ratio = 0.98653 / (1-0.98653) = 73.24 +# Random Distribution Ration = 512 / (2350-512) = 0.279. +# +# Typical Distribution Ratio + +EUCKR_TYPICAL_DISTRIBUTION_RATIO = 6.0 + +EUCKR_TABLE_SIZE = 2352 + +# Char to FreqOrder table , +# fmt: off +EUCKR_CHAR_TO_FREQ_ORDER = ( + 13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87, +1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398, +1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734, + 945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739, + 116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622, + 708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750, +1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856, + 344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205, + 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779, +1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19, +1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567, +1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797, +1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802, +1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899, + 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818, +1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409, +1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697, +1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770, +1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723, + 544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416, +1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300, + 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083, + 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857, +1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871, + 282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420, +1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885, + 127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889, + 0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893, +1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317, +1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841, +1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910, +1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610, + 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375, +1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939, + 887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870, + 217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934, +1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888, +1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950, +1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065, +1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002, +1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965, +1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467, + 50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285, + 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7, + 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979, +1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985, + 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994, +1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250, + 423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824, + 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003, +2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745, + 619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61, + 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023, +2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032, +2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912, +2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224, + 719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012, + 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050, +2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681, + 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414, +1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068, +2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075, +1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850, +2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606, +2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449, +1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452, + 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112, +2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121, +2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130, + 22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274, + 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139, +2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721, +1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298, +2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463, +2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747, +2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285, +2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187, +2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10, +2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350, +1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201, +2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972, +2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219, +2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233, +2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242, +2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247, +1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178, +1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255, +2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259, +1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262, +2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702, +1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273, + 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541, +2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117, + 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187, +2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800, + 808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312, +2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229, +2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315, + 501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484, +2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170, +1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335, + 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601, +1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395, +2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354, +1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476, +2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035, + 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498, +2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310, +1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389, +2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504, +1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505, +2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145, +1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624, + 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700, +2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221, +2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377, + 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448, + 915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485, +1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705, +1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465, + 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471, +2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997, +2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486, + 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494, + 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771, + 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323, +2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491, + 95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510, + 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519, +2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532, +2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199, + 704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544, +2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247, +1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441, + 249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562, +2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362, +2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583, +2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465, + 3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431, + 202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151, + 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596, +2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406, +2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611, +2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619, +1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628, +2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042, + 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642, # 512, 256 +) +# fmt: on diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/euckrprober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/euckrprober.py new file mode 100644 index 0000000..1fc5de0 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/euckrprober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .chardistribution import EUCKRDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import EUCKR_SM_MODEL + + +class EUCKRProber(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(EUCKR_SM_MODEL) + self.distribution_analyzer = EUCKRDistributionAnalysis() + self.reset() + + @property + def charset_name(self) -> str: + return "EUC-KR" + + @property + def language(self) -> str: + return "Korean" diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/euctwfreq.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/euctwfreq.py new file mode 100644 index 0000000..4900ccc --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/euctwfreq.py @@ -0,0 +1,388 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# EUCTW frequency table +# Converted from big5 work +# by Taiwan's Mandarin Promotion Council +# + +# 128 --> 0.42261 +# 256 --> 0.57851 +# 512 --> 0.74851 +# 1024 --> 0.89384 +# 2048 --> 0.97583 +# +# Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98 +# Random Distribution Ration = 512/(5401-512)=0.105 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR + +EUCTW_TYPICAL_DISTRIBUTION_RATIO = 0.75 + +# Char to FreqOrder table +EUCTW_TABLE_SIZE = 5376 + +# fmt: off +EUCTW_CHAR_TO_FREQ_ORDER = ( + 1, 1800, 1506, 255, 1431, 198, 9, 82, 6, 7310, 177, 202, 3615, 1256, 2808, 110, # 2742 + 3735, 33, 3241, 261, 76, 44, 2113, 16, 2931, 2184, 1176, 659, 3868, 26, 3404, 2643, # 2758 + 1198, 3869, 3313, 4060, 410, 2211, 302, 590, 361, 1963, 8, 204, 58, 4296, 7311, 1931, # 2774 + 63, 7312, 7313, 317, 1614, 75, 222, 159, 4061, 2412, 1480, 7314, 3500, 3068, 224, 2809, # 2790 + 3616, 3, 10, 3870, 1471, 29, 2774, 1135, 2852, 1939, 873, 130, 3242, 1123, 312, 7315, # 2806 + 4297, 2051, 507, 252, 682, 7316, 142, 1914, 124, 206, 2932, 34, 3501, 3173, 64, 604, # 2822 + 7317, 2494, 1976, 1977, 155, 1990, 645, 641, 1606, 7318, 3405, 337, 72, 406, 7319, 80, # 2838 + 630, 238, 3174, 1509, 263, 939, 1092, 2644, 756, 1440, 1094, 3406, 449, 69, 2969, 591, # 2854 + 179, 2095, 471, 115, 2034, 1843, 60, 50, 2970, 134, 806, 1868, 734, 2035, 3407, 180, # 2870 + 995, 1607, 156, 537, 2893, 688, 7320, 319, 1305, 779, 2144, 514, 2374, 298, 4298, 359, # 2886 + 2495, 90, 2707, 1338, 663, 11, 906, 1099, 2545, 20, 2436, 182, 532, 1716, 7321, 732, # 2902 + 1376, 4062, 1311, 1420, 3175, 25, 2312, 1056, 113, 399, 382, 1949, 242, 3408, 2467, 529, # 2918 + 3243, 475, 1447, 3617, 7322, 117, 21, 656, 810, 1297, 2295, 2329, 3502, 7323, 126, 4063, # 2934 + 706, 456, 150, 613, 4299, 71, 1118, 2036, 4064, 145, 3069, 85, 835, 486, 2114, 1246, # 2950 + 1426, 428, 727, 1285, 1015, 800, 106, 623, 303, 1281, 7324, 2127, 2354, 347, 3736, 221, # 2966 + 3503, 3110, 7325, 1955, 1153, 4065, 83, 296, 1199, 3070, 192, 624, 93, 7326, 822, 1897, # 2982 + 2810, 3111, 795, 2064, 991, 1554, 1542, 1592, 27, 43, 2853, 859, 139, 1456, 860, 4300, # 2998 + 437, 712, 3871, 164, 2392, 3112, 695, 211, 3017, 2096, 195, 3872, 1608, 3504, 3505, 3618, # 3014 + 3873, 234, 811, 2971, 2097, 3874, 2229, 1441, 3506, 1615, 2375, 668, 2076, 1638, 305, 228, # 3030 + 1664, 4301, 467, 415, 7327, 262, 2098, 1593, 239, 108, 300, 200, 1033, 512, 1247, 2077, # 3046 + 7328, 7329, 2173, 3176, 3619, 2673, 593, 845, 1062, 3244, 88, 1723, 2037, 3875, 1950, 212, # 3062 + 266, 152, 149, 468, 1898, 4066, 4302, 77, 187, 7330, 3018, 37, 5, 2972, 7331, 3876, # 3078 + 7332, 7333, 39, 2517, 4303, 2894, 3177, 2078, 55, 148, 74, 4304, 545, 483, 1474, 1029, # 3094 + 1665, 217, 1869, 1531, 3113, 1104, 2645, 4067, 24, 172, 3507, 900, 3877, 3508, 3509, 4305, # 3110 + 32, 1408, 2811, 1312, 329, 487, 2355, 2247, 2708, 784, 2674, 4, 3019, 3314, 1427, 1788, # 3126 + 188, 109, 499, 7334, 3620, 1717, 1789, 888, 1217, 3020, 4306, 7335, 3510, 7336, 3315, 1520, # 3142 + 3621, 3878, 196, 1034, 775, 7337, 7338, 929, 1815, 249, 439, 38, 7339, 1063, 7340, 794, # 3158 + 3879, 1435, 2296, 46, 178, 3245, 2065, 7341, 2376, 7342, 214, 1709, 4307, 804, 35, 707, # 3174 + 324, 3622, 1601, 2546, 140, 459, 4068, 7343, 7344, 1365, 839, 272, 978, 2257, 2572, 3409, # 3190 + 2128, 1363, 3623, 1423, 697, 100, 3071, 48, 70, 1231, 495, 3114, 2193, 7345, 1294, 7346, # 3206 + 2079, 462, 586, 1042, 3246, 853, 256, 988, 185, 2377, 3410, 1698, 434, 1084, 7347, 3411, # 3222 + 314, 2615, 2775, 4308, 2330, 2331, 569, 2280, 637, 1816, 2518, 757, 1162, 1878, 1616, 3412, # 3238 + 287, 1577, 2115, 768, 4309, 1671, 2854, 3511, 2519, 1321, 3737, 909, 2413, 7348, 4069, 933, # 3254 + 3738, 7349, 2052, 2356, 1222, 4310, 765, 2414, 1322, 786, 4311, 7350, 1919, 1462, 1677, 2895, # 3270 + 1699, 7351, 4312, 1424, 2437, 3115, 3624, 2590, 3316, 1774, 1940, 3413, 3880, 4070, 309, 1369, # 3286 + 1130, 2812, 364, 2230, 1653, 1299, 3881, 3512, 3882, 3883, 2646, 525, 1085, 3021, 902, 2000, # 3302 + 1475, 964, 4313, 421, 1844, 1415, 1057, 2281, 940, 1364, 3116, 376, 4314, 4315, 1381, 7, # 3318 + 2520, 983, 2378, 336, 1710, 2675, 1845, 321, 3414, 559, 1131, 3022, 2742, 1808, 1132, 1313, # 3334 + 265, 1481, 1857, 7352, 352, 1203, 2813, 3247, 167, 1089, 420, 2814, 776, 792, 1724, 3513, # 3350 + 4071, 2438, 3248, 7353, 4072, 7354, 446, 229, 333, 2743, 901, 3739, 1200, 1557, 4316, 2647, # 3366 + 1920, 395, 2744, 2676, 3740, 4073, 1835, 125, 916, 3178, 2616, 4317, 7355, 7356, 3741, 7357, # 3382 + 7358, 7359, 4318, 3117, 3625, 1133, 2547, 1757, 3415, 1510, 2313, 1409, 3514, 7360, 2145, 438, # 3398 + 2591, 2896, 2379, 3317, 1068, 958, 3023, 461, 311, 2855, 2677, 4074, 1915, 3179, 4075, 1978, # 3414 + 383, 750, 2745, 2617, 4076, 274, 539, 385, 1278, 1442, 7361, 1154, 1964, 384, 561, 210, # 3430 + 98, 1295, 2548, 3515, 7362, 1711, 2415, 1482, 3416, 3884, 2897, 1257, 129, 7363, 3742, 642, # 3446 + 523, 2776, 2777, 2648, 7364, 141, 2231, 1333, 68, 176, 441, 876, 907, 4077, 603, 2592, # 3462 + 710, 171, 3417, 404, 549, 18, 3118, 2393, 1410, 3626, 1666, 7365, 3516, 4319, 2898, 4320, # 3478 + 7366, 2973, 368, 7367, 146, 366, 99, 871, 3627, 1543, 748, 807, 1586, 1185, 22, 2258, # 3494 + 379, 3743, 3180, 7368, 3181, 505, 1941, 2618, 1991, 1382, 2314, 7369, 380, 2357, 218, 702, # 3510 + 1817, 1248, 3418, 3024, 3517, 3318, 3249, 7370, 2974, 3628, 930, 3250, 3744, 7371, 59, 7372, # 3526 + 585, 601, 4078, 497, 3419, 1112, 1314, 4321, 1801, 7373, 1223, 1472, 2174, 7374, 749, 1836, # 3542 + 690, 1899, 3745, 1772, 3885, 1476, 429, 1043, 1790, 2232, 2116, 917, 4079, 447, 1086, 1629, # 3558 + 7375, 556, 7376, 7377, 2020, 1654, 844, 1090, 105, 550, 966, 1758, 2815, 1008, 1782, 686, # 3574 + 1095, 7378, 2282, 793, 1602, 7379, 3518, 2593, 4322, 4080, 2933, 2297, 4323, 3746, 980, 2496, # 3590 + 544, 353, 527, 4324, 908, 2678, 2899, 7380, 381, 2619, 1942, 1348, 7381, 1341, 1252, 560, # 3606 + 3072, 7382, 3420, 2856, 7383, 2053, 973, 886, 2080, 143, 4325, 7384, 7385, 157, 3886, 496, # 3622 + 4081, 57, 840, 540, 2038, 4326, 4327, 3421, 2117, 1445, 970, 2259, 1748, 1965, 2081, 4082, # 3638 + 3119, 1234, 1775, 3251, 2816, 3629, 773, 1206, 2129, 1066, 2039, 1326, 3887, 1738, 1725, 4083, # 3654 + 279, 3120, 51, 1544, 2594, 423, 1578, 2130, 2066, 173, 4328, 1879, 7386, 7387, 1583, 264, # 3670 + 610, 3630, 4329, 2439, 280, 154, 7388, 7389, 7390, 1739, 338, 1282, 3073, 693, 2857, 1411, # 3686 + 1074, 3747, 2440, 7391, 4330, 7392, 7393, 1240, 952, 2394, 7394, 2900, 1538, 2679, 685, 1483, # 3702 + 4084, 2468, 1436, 953, 4085, 2054, 4331, 671, 2395, 79, 4086, 2441, 3252, 608, 567, 2680, # 3718 + 3422, 4087, 4088, 1691, 393, 1261, 1791, 2396, 7395, 4332, 7396, 7397, 7398, 7399, 1383, 1672, # 3734 + 3748, 3182, 1464, 522, 1119, 661, 1150, 216, 675, 4333, 3888, 1432, 3519, 609, 4334, 2681, # 3750 + 2397, 7400, 7401, 7402, 4089, 3025, 0, 7403, 2469, 315, 231, 2442, 301, 3319, 4335, 2380, # 3766 + 7404, 233, 4090, 3631, 1818, 4336, 4337, 7405, 96, 1776, 1315, 2082, 7406, 257, 7407, 1809, # 3782 + 3632, 2709, 1139, 1819, 4091, 2021, 1124, 2163, 2778, 1777, 2649, 7408, 3074, 363, 1655, 3183, # 3798 + 7409, 2975, 7410, 7411, 7412, 3889, 1567, 3890, 718, 103, 3184, 849, 1443, 341, 3320, 2934, # 3814 + 1484, 7413, 1712, 127, 67, 339, 4092, 2398, 679, 1412, 821, 7414, 7415, 834, 738, 351, # 3830 + 2976, 2146, 846, 235, 1497, 1880, 418, 1992, 3749, 2710, 186, 1100, 2147, 2746, 3520, 1545, # 3846 + 1355, 2935, 2858, 1377, 583, 3891, 4093, 2573, 2977, 7416, 1298, 3633, 1078, 2549, 3634, 2358, # 3862 + 78, 3750, 3751, 267, 1289, 2099, 2001, 1594, 4094, 348, 369, 1274, 2194, 2175, 1837, 4338, # 3878 + 1820, 2817, 3635, 2747, 2283, 2002, 4339, 2936, 2748, 144, 3321, 882, 4340, 3892, 2749, 3423, # 3894 + 4341, 2901, 7417, 4095, 1726, 320, 7418, 3893, 3026, 788, 2978, 7419, 2818, 1773, 1327, 2859, # 3910 + 3894, 2819, 7420, 1306, 4342, 2003, 1700, 3752, 3521, 2359, 2650, 787, 2022, 506, 824, 3636, # 3926 + 534, 323, 4343, 1044, 3322, 2023, 1900, 946, 3424, 7421, 1778, 1500, 1678, 7422, 1881, 4344, # 3942 + 165, 243, 4345, 3637, 2521, 123, 683, 4096, 764, 4346, 36, 3895, 1792, 589, 2902, 816, # 3958 + 626, 1667, 3027, 2233, 1639, 1555, 1622, 3753, 3896, 7423, 3897, 2860, 1370, 1228, 1932, 891, # 3974 + 2083, 2903, 304, 4097, 7424, 292, 2979, 2711, 3522, 691, 2100, 4098, 1115, 4347, 118, 662, # 3990 + 7425, 611, 1156, 854, 2381, 1316, 2861, 2, 386, 515, 2904, 7426, 7427, 3253, 868, 2234, # 4006 + 1486, 855, 2651, 785, 2212, 3028, 7428, 1040, 3185, 3523, 7429, 3121, 448, 7430, 1525, 7431, # 4022 + 2164, 4348, 7432, 3754, 7433, 4099, 2820, 3524, 3122, 503, 818, 3898, 3123, 1568, 814, 676, # 4038 + 1444, 306, 1749, 7434, 3755, 1416, 1030, 197, 1428, 805, 2821, 1501, 4349, 7435, 7436, 7437, # 4054 + 1993, 7438, 4350, 7439, 7440, 2195, 13, 2779, 3638, 2980, 3124, 1229, 1916, 7441, 3756, 2131, # 4070 + 7442, 4100, 4351, 2399, 3525, 7443, 2213, 1511, 1727, 1120, 7444, 7445, 646, 3757, 2443, 307, # 4086 + 7446, 7447, 1595, 3186, 7448, 7449, 7450, 3639, 1113, 1356, 3899, 1465, 2522, 2523, 7451, 519, # 4102 + 7452, 128, 2132, 92, 2284, 1979, 7453, 3900, 1512, 342, 3125, 2196, 7454, 2780, 2214, 1980, # 4118 + 3323, 7455, 290, 1656, 1317, 789, 827, 2360, 7456, 3758, 4352, 562, 581, 3901, 7457, 401, # 4134 + 4353, 2248, 94, 4354, 1399, 2781, 7458, 1463, 2024, 4355, 3187, 1943, 7459, 828, 1105, 4101, # 4150 + 1262, 1394, 7460, 4102, 605, 4356, 7461, 1783, 2862, 7462, 2822, 819, 2101, 578, 2197, 2937, # 4166 + 7463, 1502, 436, 3254, 4103, 3255, 2823, 3902, 2905, 3425, 3426, 7464, 2712, 2315, 7465, 7466, # 4182 + 2332, 2067, 23, 4357, 193, 826, 3759, 2102, 699, 1630, 4104, 3075, 390, 1793, 1064, 3526, # 4198 + 7467, 1579, 3076, 3077, 1400, 7468, 4105, 1838, 1640, 2863, 7469, 4358, 4359, 137, 4106, 598, # 4214 + 3078, 1966, 780, 104, 974, 2938, 7470, 278, 899, 253, 402, 572, 504, 493, 1339, 7471, # 4230 + 3903, 1275, 4360, 2574, 2550, 7472, 3640, 3029, 3079, 2249, 565, 1334, 2713, 863, 41, 7473, # 4246 + 7474, 4361, 7475, 1657, 2333, 19, 463, 2750, 4107, 606, 7476, 2981, 3256, 1087, 2084, 1323, # 4262 + 2652, 2982, 7477, 1631, 1623, 1750, 4108, 2682, 7478, 2864, 791, 2714, 2653, 2334, 232, 2416, # 4278 + 7479, 2983, 1498, 7480, 2654, 2620, 755, 1366, 3641, 3257, 3126, 2025, 1609, 119, 1917, 3427, # 4294 + 862, 1026, 4109, 7481, 3904, 3760, 4362, 3905, 4363, 2260, 1951, 2470, 7482, 1125, 817, 4110, # 4310 + 4111, 3906, 1513, 1766, 2040, 1487, 4112, 3030, 3258, 2824, 3761, 3127, 7483, 7484, 1507, 7485, # 4326 + 2683, 733, 40, 1632, 1106, 2865, 345, 4113, 841, 2524, 230, 4364, 2984, 1846, 3259, 3428, # 4342 + 7486, 1263, 986, 3429, 7487, 735, 879, 254, 1137, 857, 622, 1300, 1180, 1388, 1562, 3907, # 4358 + 3908, 2939, 967, 2751, 2655, 1349, 592, 2133, 1692, 3324, 2985, 1994, 4114, 1679, 3909, 1901, # 4374 + 2185, 7488, 739, 3642, 2715, 1296, 1290, 7489, 4115, 2198, 2199, 1921, 1563, 2595, 2551, 1870, # 4390 + 2752, 2986, 7490, 435, 7491, 343, 1108, 596, 17, 1751, 4365, 2235, 3430, 3643, 7492, 4366, # 4406 + 294, 3527, 2940, 1693, 477, 979, 281, 2041, 3528, 643, 2042, 3644, 2621, 2782, 2261, 1031, # 4422 + 2335, 2134, 2298, 3529, 4367, 367, 1249, 2552, 7493, 3530, 7494, 4368, 1283, 3325, 2004, 240, # 4438 + 1762, 3326, 4369, 4370, 836, 1069, 3128, 474, 7495, 2148, 2525, 268, 3531, 7496, 3188, 1521, # 4454 + 1284, 7497, 1658, 1546, 4116, 7498, 3532, 3533, 7499, 4117, 3327, 2684, 1685, 4118, 961, 1673, # 4470 + 2622, 190, 2005, 2200, 3762, 4371, 4372, 7500, 570, 2497, 3645, 1490, 7501, 4373, 2623, 3260, # 4486 + 1956, 4374, 584, 1514, 396, 1045, 1944, 7502, 4375, 1967, 2444, 7503, 7504, 4376, 3910, 619, # 4502 + 7505, 3129, 3261, 215, 2006, 2783, 2553, 3189, 4377, 3190, 4378, 763, 4119, 3763, 4379, 7506, # 4518 + 7507, 1957, 1767, 2941, 3328, 3646, 1174, 452, 1477, 4380, 3329, 3130, 7508, 2825, 1253, 2382, # 4534 + 2186, 1091, 2285, 4120, 492, 7509, 638, 1169, 1824, 2135, 1752, 3911, 648, 926, 1021, 1324, # 4550 + 4381, 520, 4382, 997, 847, 1007, 892, 4383, 3764, 2262, 1871, 3647, 7510, 2400, 1784, 4384, # 4566 + 1952, 2942, 3080, 3191, 1728, 4121, 2043, 3648, 4385, 2007, 1701, 3131, 1551, 30, 2263, 4122, # 4582 + 7511, 2026, 4386, 3534, 7512, 501, 7513, 4123, 594, 3431, 2165, 1821, 3535, 3432, 3536, 3192, # 4598 + 829, 2826, 4124, 7514, 1680, 3132, 1225, 4125, 7515, 3262, 4387, 4126, 3133, 2336, 7516, 4388, # 4614 + 4127, 7517, 3912, 3913, 7518, 1847, 2383, 2596, 3330, 7519, 4389, 374, 3914, 652, 4128, 4129, # 4630 + 375, 1140, 798, 7520, 7521, 7522, 2361, 4390, 2264, 546, 1659, 138, 3031, 2445, 4391, 7523, # 4646 + 2250, 612, 1848, 910, 796, 3765, 1740, 1371, 825, 3766, 3767, 7524, 2906, 2554, 7525, 692, # 4662 + 444, 3032, 2624, 801, 4392, 4130, 7526, 1491, 244, 1053, 3033, 4131, 4132, 340, 7527, 3915, # 4678 + 1041, 2987, 293, 1168, 87, 1357, 7528, 1539, 959, 7529, 2236, 721, 694, 4133, 3768, 219, # 4694 + 1478, 644, 1417, 3331, 2656, 1413, 1401, 1335, 1389, 3916, 7530, 7531, 2988, 2362, 3134, 1825, # 4710 + 730, 1515, 184, 2827, 66, 4393, 7532, 1660, 2943, 246, 3332, 378, 1457, 226, 3433, 975, # 4726 + 3917, 2944, 1264, 3537, 674, 696, 7533, 163, 7534, 1141, 2417, 2166, 713, 3538, 3333, 4394, # 4742 + 3918, 7535, 7536, 1186, 15, 7537, 1079, 1070, 7538, 1522, 3193, 3539, 276, 1050, 2716, 758, # 4758 + 1126, 653, 2945, 3263, 7539, 2337, 889, 3540, 3919, 3081, 2989, 903, 1250, 4395, 3920, 3434, # 4774 + 3541, 1342, 1681, 1718, 766, 3264, 286, 89, 2946, 3649, 7540, 1713, 7541, 2597, 3334, 2990, # 4790 + 7542, 2947, 2215, 3194, 2866, 7543, 4396, 2498, 2526, 181, 387, 1075, 3921, 731, 2187, 3335, # 4806 + 7544, 3265, 310, 313, 3435, 2299, 770, 4134, 54, 3034, 189, 4397, 3082, 3769, 3922, 7545, # 4822 + 1230, 1617, 1849, 355, 3542, 4135, 4398, 3336, 111, 4136, 3650, 1350, 3135, 3436, 3035, 4137, # 4838 + 2149, 3266, 3543, 7546, 2784, 3923, 3924, 2991, 722, 2008, 7547, 1071, 247, 1207, 2338, 2471, # 4854 + 1378, 4399, 2009, 864, 1437, 1214, 4400, 373, 3770, 1142, 2216, 667, 4401, 442, 2753, 2555, # 4870 + 3771, 3925, 1968, 4138, 3267, 1839, 837, 170, 1107, 934, 1336, 1882, 7548, 7549, 2118, 4139, # 4886 + 2828, 743, 1569, 7550, 4402, 4140, 582, 2384, 1418, 3437, 7551, 1802, 7552, 357, 1395, 1729, # 4902 + 3651, 3268, 2418, 1564, 2237, 7553, 3083, 3772, 1633, 4403, 1114, 2085, 4141, 1532, 7554, 482, # 4918 + 2446, 4404, 7555, 7556, 1492, 833, 1466, 7557, 2717, 3544, 1641, 2829, 7558, 1526, 1272, 3652, # 4934 + 4142, 1686, 1794, 416, 2556, 1902, 1953, 1803, 7559, 3773, 2785, 3774, 1159, 2316, 7560, 2867, # 4950 + 4405, 1610, 1584, 3036, 2419, 2754, 443, 3269, 1163, 3136, 7561, 7562, 3926, 7563, 4143, 2499, # 4966 + 3037, 4406, 3927, 3137, 2103, 1647, 3545, 2010, 1872, 4144, 7564, 4145, 431, 3438, 7565, 250, # 4982 + 97, 81, 4146, 7566, 1648, 1850, 1558, 160, 848, 7567, 866, 740, 1694, 7568, 2201, 2830, # 4998 + 3195, 4147, 4407, 3653, 1687, 950, 2472, 426, 469, 3196, 3654, 3655, 3928, 7569, 7570, 1188, # 5014 + 424, 1995, 861, 3546, 4148, 3775, 2202, 2685, 168, 1235, 3547, 4149, 7571, 2086, 1674, 4408, # 5030 + 3337, 3270, 220, 2557, 1009, 7572, 3776, 670, 2992, 332, 1208, 717, 7573, 7574, 3548, 2447, # 5046 + 3929, 3338, 7575, 513, 7576, 1209, 2868, 3339, 3138, 4409, 1080, 7577, 7578, 7579, 7580, 2527, # 5062 + 3656, 3549, 815, 1587, 3930, 3931, 7581, 3550, 3439, 3777, 1254, 4410, 1328, 3038, 1390, 3932, # 5078 + 1741, 3933, 3778, 3934, 7582, 236, 3779, 2448, 3271, 7583, 7584, 3657, 3780, 1273, 3781, 4411, # 5094 + 7585, 308, 7586, 4412, 245, 4413, 1851, 2473, 1307, 2575, 430, 715, 2136, 2449, 7587, 270, # 5110 + 199, 2869, 3935, 7588, 3551, 2718, 1753, 761, 1754, 725, 1661, 1840, 4414, 3440, 3658, 7589, # 5126 + 7590, 587, 14, 3272, 227, 2598, 326, 480, 2265, 943, 2755, 3552, 291, 650, 1883, 7591, # 5142 + 1702, 1226, 102, 1547, 62, 3441, 904, 4415, 3442, 1164, 4150, 7592, 7593, 1224, 1548, 2756, # 5158 + 391, 498, 1493, 7594, 1386, 1419, 7595, 2055, 1177, 4416, 813, 880, 1081, 2363, 566, 1145, # 5174 + 4417, 2286, 1001, 1035, 2558, 2599, 2238, 394, 1286, 7596, 7597, 2068, 7598, 86, 1494, 1730, # 5190 + 3936, 491, 1588, 745, 897, 2948, 843, 3340, 3937, 2757, 2870, 3273, 1768, 998, 2217, 2069, # 5206 + 397, 1826, 1195, 1969, 3659, 2993, 3341, 284, 7599, 3782, 2500, 2137, 2119, 1903, 7600, 3938, # 5222 + 2150, 3939, 4151, 1036, 3443, 1904, 114, 2559, 4152, 209, 1527, 7601, 7602, 2949, 2831, 2625, # 5238 + 2385, 2719, 3139, 812, 2560, 7603, 3274, 7604, 1559, 737, 1884, 3660, 1210, 885, 28, 2686, # 5254 + 3553, 3783, 7605, 4153, 1004, 1779, 4418, 7606, 346, 1981, 2218, 2687, 4419, 3784, 1742, 797, # 5270 + 1642, 3940, 1933, 1072, 1384, 2151, 896, 3941, 3275, 3661, 3197, 2871, 3554, 7607, 2561, 1958, # 5286 + 4420, 2450, 1785, 7608, 7609, 7610, 3942, 4154, 1005, 1308, 3662, 4155, 2720, 4421, 4422, 1528, # 5302 + 2600, 161, 1178, 4156, 1982, 987, 4423, 1101, 4157, 631, 3943, 1157, 3198, 2420, 1343, 1241, # 5318 + 1016, 2239, 2562, 372, 877, 2339, 2501, 1160, 555, 1934, 911, 3944, 7611, 466, 1170, 169, # 5334 + 1051, 2907, 2688, 3663, 2474, 2994, 1182, 2011, 2563, 1251, 2626, 7612, 992, 2340, 3444, 1540, # 5350 + 2721, 1201, 2070, 2401, 1996, 2475, 7613, 4424, 528, 1922, 2188, 1503, 1873, 1570, 2364, 3342, # 5366 + 3276, 7614, 557, 1073, 7615, 1827, 3445, 2087, 2266, 3140, 3039, 3084, 767, 3085, 2786, 4425, # 5382 + 1006, 4158, 4426, 2341, 1267, 2176, 3664, 3199, 778, 3945, 3200, 2722, 1597, 2657, 7616, 4427, # 5398 + 7617, 3446, 7618, 7619, 7620, 3277, 2689, 1433, 3278, 131, 95, 1504, 3946, 723, 4159, 3141, # 5414 + 1841, 3555, 2758, 2189, 3947, 2027, 2104, 3665, 7621, 2995, 3948, 1218, 7622, 3343, 3201, 3949, # 5430 + 4160, 2576, 248, 1634, 3785, 912, 7623, 2832, 3666, 3040, 3786, 654, 53, 7624, 2996, 7625, # 5446 + 1688, 4428, 777, 3447, 1032, 3950, 1425, 7626, 191, 820, 2120, 2833, 971, 4429, 931, 3202, # 5462 + 135, 664, 783, 3787, 1997, 772, 2908, 1935, 3951, 3788, 4430, 2909, 3203, 282, 2723, 640, # 5478 + 1372, 3448, 1127, 922, 325, 3344, 7627, 7628, 711, 2044, 7629, 7630, 3952, 2219, 2787, 1936, # 5494 + 3953, 3345, 2220, 2251, 3789, 2300, 7631, 4431, 3790, 1258, 3279, 3954, 3204, 2138, 2950, 3955, # 5510 + 3956, 7632, 2221, 258, 3205, 4432, 101, 1227, 7633, 3280, 1755, 7634, 1391, 3281, 7635, 2910, # 5526 + 2056, 893, 7636, 7637, 7638, 1402, 4161, 2342, 7639, 7640, 3206, 3556, 7641, 7642, 878, 1325, # 5542 + 1780, 2788, 4433, 259, 1385, 2577, 744, 1183, 2267, 4434, 7643, 3957, 2502, 7644, 684, 1024, # 5558 + 4162, 7645, 472, 3557, 3449, 1165, 3282, 3958, 3959, 322, 2152, 881, 455, 1695, 1152, 1340, # 5574 + 660, 554, 2153, 4435, 1058, 4436, 4163, 830, 1065, 3346, 3960, 4437, 1923, 7646, 1703, 1918, # 5590 + 7647, 932, 2268, 122, 7648, 4438, 947, 677, 7649, 3791, 2627, 297, 1905, 1924, 2269, 4439, # 5606 + 2317, 3283, 7650, 7651, 4164, 7652, 4165, 84, 4166, 112, 989, 7653, 547, 1059, 3961, 701, # 5622 + 3558, 1019, 7654, 4167, 7655, 3450, 942, 639, 457, 2301, 2451, 993, 2951, 407, 851, 494, # 5638 + 4440, 3347, 927, 7656, 1237, 7657, 2421, 3348, 573, 4168, 680, 921, 2911, 1279, 1874, 285, # 5654 + 790, 1448, 1983, 719, 2167, 7658, 7659, 4441, 3962, 3963, 1649, 7660, 1541, 563, 7661, 1077, # 5670 + 7662, 3349, 3041, 3451, 511, 2997, 3964, 3965, 3667, 3966, 1268, 2564, 3350, 3207, 4442, 4443, # 5686 + 7663, 535, 1048, 1276, 1189, 2912, 2028, 3142, 1438, 1373, 2834, 2952, 1134, 2012, 7664, 4169, # 5702 + 1238, 2578, 3086, 1259, 7665, 700, 7666, 2953, 3143, 3668, 4170, 7667, 4171, 1146, 1875, 1906, # 5718 + 4444, 2601, 3967, 781, 2422, 132, 1589, 203, 147, 273, 2789, 2402, 898, 1786, 2154, 3968, # 5734 + 3969, 7668, 3792, 2790, 7669, 7670, 4445, 4446, 7671, 3208, 7672, 1635, 3793, 965, 7673, 1804, # 5750 + 2690, 1516, 3559, 1121, 1082, 1329, 3284, 3970, 1449, 3794, 65, 1128, 2835, 2913, 2759, 1590, # 5766 + 3795, 7674, 7675, 12, 2658, 45, 976, 2579, 3144, 4447, 517, 2528, 1013, 1037, 3209, 7676, # 5782 + 3796, 2836, 7677, 3797, 7678, 3452, 7679, 2602, 614, 1998, 2318, 3798, 3087, 2724, 2628, 7680, # 5798 + 2580, 4172, 599, 1269, 7681, 1810, 3669, 7682, 2691, 3088, 759, 1060, 489, 1805, 3351, 3285, # 5814 + 1358, 7683, 7684, 2386, 1387, 1215, 2629, 2252, 490, 7685, 7686, 4173, 1759, 2387, 2343, 7687, # 5830 + 4448, 3799, 1907, 3971, 2630, 1806, 3210, 4449, 3453, 3286, 2760, 2344, 874, 7688, 7689, 3454, # 5846 + 3670, 1858, 91, 2914, 3671, 3042, 3800, 4450, 7690, 3145, 3972, 2659, 7691, 3455, 1202, 1403, # 5862 + 3801, 2954, 2529, 1517, 2503, 4451, 3456, 2504, 7692, 4452, 7693, 2692, 1885, 1495, 1731, 3973, # 5878 + 2365, 4453, 7694, 2029, 7695, 7696, 3974, 2693, 1216, 237, 2581, 4174, 2319, 3975, 3802, 4454, # 5894 + 4455, 2694, 3560, 3457, 445, 4456, 7697, 7698, 7699, 7700, 2761, 61, 3976, 3672, 1822, 3977, # 5910 + 7701, 687, 2045, 935, 925, 405, 2660, 703, 1096, 1859, 2725, 4457, 3978, 1876, 1367, 2695, # 5926 + 3352, 918, 2105, 1781, 2476, 334, 3287, 1611, 1093, 4458, 564, 3146, 3458, 3673, 3353, 945, # 5942 + 2631, 2057, 4459, 7702, 1925, 872, 4175, 7703, 3459, 2696, 3089, 349, 4176, 3674, 3979, 4460, # 5958 + 3803, 4177, 3675, 2155, 3980, 4461, 4462, 4178, 4463, 2403, 2046, 782, 3981, 400, 251, 4179, # 5974 + 1624, 7704, 7705, 277, 3676, 299, 1265, 476, 1191, 3804, 2121, 4180, 4181, 1109, 205, 7706, # 5990 + 2582, 1000, 2156, 3561, 1860, 7707, 7708, 7709, 4464, 7710, 4465, 2565, 107, 2477, 2157, 3982, # 6006 + 3460, 3147, 7711, 1533, 541, 1301, 158, 753, 4182, 2872, 3562, 7712, 1696, 370, 1088, 4183, # 6022 + 4466, 3563, 579, 327, 440, 162, 2240, 269, 1937, 1374, 3461, 968, 3043, 56, 1396, 3090, # 6038 + 2106, 3288, 3354, 7713, 1926, 2158, 4467, 2998, 7714, 3564, 7715, 7716, 3677, 4468, 2478, 7717, # 6054 + 2791, 7718, 1650, 4469, 7719, 2603, 7720, 7721, 3983, 2661, 3355, 1149, 3356, 3984, 3805, 3985, # 6070 + 7722, 1076, 49, 7723, 951, 3211, 3289, 3290, 450, 2837, 920, 7724, 1811, 2792, 2366, 4184, # 6086 + 1908, 1138, 2367, 3806, 3462, 7725, 3212, 4470, 1909, 1147, 1518, 2423, 4471, 3807, 7726, 4472, # 6102 + 2388, 2604, 260, 1795, 3213, 7727, 7728, 3808, 3291, 708, 7729, 3565, 1704, 7730, 3566, 1351, # 6118 + 1618, 3357, 2999, 1886, 944, 4185, 3358, 4186, 3044, 3359, 4187, 7731, 3678, 422, 413, 1714, # 6134 + 3292, 500, 2058, 2345, 4188, 2479, 7732, 1344, 1910, 954, 7733, 1668, 7734, 7735, 3986, 2404, # 6150 + 4189, 3567, 3809, 4190, 7736, 2302, 1318, 2505, 3091, 133, 3092, 2873, 4473, 629, 31, 2838, # 6166 + 2697, 3810, 4474, 850, 949, 4475, 3987, 2955, 1732, 2088, 4191, 1496, 1852, 7737, 3988, 620, # 6182 + 3214, 981, 1242, 3679, 3360, 1619, 3680, 1643, 3293, 2139, 2452, 1970, 1719, 3463, 2168, 7738, # 6198 + 3215, 7739, 7740, 3361, 1828, 7741, 1277, 4476, 1565, 2047, 7742, 1636, 3568, 3093, 7743, 869, # 6214 + 2839, 655, 3811, 3812, 3094, 3989, 3000, 3813, 1310, 3569, 4477, 7744, 7745, 7746, 1733, 558, # 6230 + 4478, 3681, 335, 1549, 3045, 1756, 4192, 3682, 1945, 3464, 1829, 1291, 1192, 470, 2726, 2107, # 6246 + 2793, 913, 1054, 3990, 7747, 1027, 7748, 3046, 3991, 4479, 982, 2662, 3362, 3148, 3465, 3216, # 6262 + 3217, 1946, 2794, 7749, 571, 4480, 7750, 1830, 7751, 3570, 2583, 1523, 2424, 7752, 2089, 984, # 6278 + 4481, 3683, 1959, 7753, 3684, 852, 923, 2795, 3466, 3685, 969, 1519, 999, 2048, 2320, 1705, # 6294 + 7754, 3095, 615, 1662, 151, 597, 3992, 2405, 2321, 1049, 275, 4482, 3686, 4193, 568, 3687, # 6310 + 3571, 2480, 4194, 3688, 7755, 2425, 2270, 409, 3218, 7756, 1566, 2874, 3467, 1002, 769, 2840, # 6326 + 194, 2090, 3149, 3689, 2222, 3294, 4195, 628, 1505, 7757, 7758, 1763, 2177, 3001, 3993, 521, # 6342 + 1161, 2584, 1787, 2203, 2406, 4483, 3994, 1625, 4196, 4197, 412, 42, 3096, 464, 7759, 2632, # 6358 + 4484, 3363, 1760, 1571, 2875, 3468, 2530, 1219, 2204, 3814, 2633, 2140, 2368, 4485, 4486, 3295, # 6374 + 1651, 3364, 3572, 7760, 7761, 3573, 2481, 3469, 7762, 3690, 7763, 7764, 2271, 2091, 460, 7765, # 6390 + 4487, 7766, 3002, 962, 588, 3574, 289, 3219, 2634, 1116, 52, 7767, 3047, 1796, 7768, 7769, # 6406 + 7770, 1467, 7771, 1598, 1143, 3691, 4198, 1984, 1734, 1067, 4488, 1280, 3365, 465, 4489, 1572, # 6422 + 510, 7772, 1927, 2241, 1812, 1644, 3575, 7773, 4490, 3692, 7774, 7775, 2663, 1573, 1534, 7776, # 6438 + 7777, 4199, 536, 1807, 1761, 3470, 3815, 3150, 2635, 7778, 7779, 7780, 4491, 3471, 2915, 1911, # 6454 + 2796, 7781, 3296, 1122, 377, 3220, 7782, 360, 7783, 7784, 4200, 1529, 551, 7785, 2059, 3693, # 6470 + 1769, 2426, 7786, 2916, 4201, 3297, 3097, 2322, 2108, 2030, 4492, 1404, 136, 1468, 1479, 672, # 6486 + 1171, 3221, 2303, 271, 3151, 7787, 2762, 7788, 2049, 678, 2727, 865, 1947, 4493, 7789, 2013, # 6502 + 3995, 2956, 7790, 2728, 2223, 1397, 3048, 3694, 4494, 4495, 1735, 2917, 3366, 3576, 7791, 3816, # 6518 + 509, 2841, 2453, 2876, 3817, 7792, 7793, 3152, 3153, 4496, 4202, 2531, 4497, 2304, 1166, 1010, # 6534 + 552, 681, 1887, 7794, 7795, 2957, 2958, 3996, 1287, 1596, 1861, 3154, 358, 453, 736, 175, # 6550 + 478, 1117, 905, 1167, 1097, 7796, 1853, 1530, 7797, 1706, 7798, 2178, 3472, 2287, 3695, 3473, # 6566 + 3577, 4203, 2092, 4204, 7799, 3367, 1193, 2482, 4205, 1458, 2190, 2205, 1862, 1888, 1421, 3298, # 6582 + 2918, 3049, 2179, 3474, 595, 2122, 7800, 3997, 7801, 7802, 4206, 1707, 2636, 223, 3696, 1359, # 6598 + 751, 3098, 183, 3475, 7803, 2797, 3003, 419, 2369, 633, 704, 3818, 2389, 241, 7804, 7805, # 6614 + 7806, 838, 3004, 3697, 2272, 2763, 2454, 3819, 1938, 2050, 3998, 1309, 3099, 2242, 1181, 7807, # 6630 + 1136, 2206, 3820, 2370, 1446, 4207, 2305, 4498, 7808, 7809, 4208, 1055, 2605, 484, 3698, 7810, # 6646 + 3999, 625, 4209, 2273, 3368, 1499, 4210, 4000, 7811, 4001, 4211, 3222, 2274, 2275, 3476, 7812, # 6662 + 7813, 2764, 808, 2606, 3699, 3369, 4002, 4212, 3100, 2532, 526, 3370, 3821, 4213, 955, 7814, # 6678 + 1620, 4214, 2637, 2427, 7815, 1429, 3700, 1669, 1831, 994, 928, 7816, 3578, 1260, 7817, 7818, # 6694 + 7819, 1948, 2288, 741, 2919, 1626, 4215, 2729, 2455, 867, 1184, 362, 3371, 1392, 7820, 7821, # 6710 + 4003, 4216, 1770, 1736, 3223, 2920, 4499, 4500, 1928, 2698, 1459, 1158, 7822, 3050, 3372, 2877, # 6726 + 1292, 1929, 2506, 2842, 3701, 1985, 1187, 2071, 2014, 2607, 4217, 7823, 2566, 2507, 2169, 3702, # 6742 + 2483, 3299, 7824, 3703, 4501, 7825, 7826, 666, 1003, 3005, 1022, 3579, 4218, 7827, 4502, 1813, # 6758 + 2253, 574, 3822, 1603, 295, 1535, 705, 3823, 4219, 283, 858, 417, 7828, 7829, 3224, 4503, # 6774 + 4504, 3051, 1220, 1889, 1046, 2276, 2456, 4004, 1393, 1599, 689, 2567, 388, 4220, 7830, 2484, # 6790 + 802, 7831, 2798, 3824, 2060, 1405, 2254, 7832, 4505, 3825, 2109, 1052, 1345, 3225, 1585, 7833, # 6806 + 809, 7834, 7835, 7836, 575, 2730, 3477, 956, 1552, 1469, 1144, 2323, 7837, 2324, 1560, 2457, # 6822 + 3580, 3226, 4005, 616, 2207, 3155, 2180, 2289, 7838, 1832, 7839, 3478, 4506, 7840, 1319, 3704, # 6838 + 3705, 1211, 3581, 1023, 3227, 1293, 2799, 7841, 7842, 7843, 3826, 607, 2306, 3827, 762, 2878, # 6854 + 1439, 4221, 1360, 7844, 1485, 3052, 7845, 4507, 1038, 4222, 1450, 2061, 2638, 4223, 1379, 4508, # 6870 + 2585, 7846, 7847, 4224, 1352, 1414, 2325, 2921, 1172, 7848, 7849, 3828, 3829, 7850, 1797, 1451, # 6886 + 7851, 7852, 7853, 7854, 2922, 4006, 4007, 2485, 2346, 411, 4008, 4009, 3582, 3300, 3101, 4509, # 6902 + 1561, 2664, 1452, 4010, 1375, 7855, 7856, 47, 2959, 316, 7857, 1406, 1591, 2923, 3156, 7858, # 6918 + 1025, 2141, 3102, 3157, 354, 2731, 884, 2224, 4225, 2407, 508, 3706, 726, 3583, 996, 2428, # 6934 + 3584, 729, 7859, 392, 2191, 1453, 4011, 4510, 3707, 7860, 7861, 2458, 3585, 2608, 1675, 2800, # 6950 + 919, 2347, 2960, 2348, 1270, 4511, 4012, 73, 7862, 7863, 647, 7864, 3228, 2843, 2255, 1550, # 6966 + 1346, 3006, 7865, 1332, 883, 3479, 7866, 7867, 7868, 7869, 3301, 2765, 7870, 1212, 831, 1347, # 6982 + 4226, 4512, 2326, 3830, 1863, 3053, 720, 3831, 4513, 4514, 3832, 7871, 4227, 7872, 7873, 4515, # 6998 + 7874, 7875, 1798, 4516, 3708, 2609, 4517, 3586, 1645, 2371, 7876, 7877, 2924, 669, 2208, 2665, # 7014 + 2429, 7878, 2879, 7879, 7880, 1028, 3229, 7881, 4228, 2408, 7882, 2256, 1353, 7883, 7884, 4518, # 7030 + 3158, 518, 7885, 4013, 7886, 4229, 1960, 7887, 2142, 4230, 7888, 7889, 3007, 2349, 2350, 3833, # 7046 + 516, 1833, 1454, 4014, 2699, 4231, 4519, 2225, 2610, 1971, 1129, 3587, 7890, 2766, 7891, 2961, # 7062 + 1422, 577, 1470, 3008, 1524, 3373, 7892, 7893, 432, 4232, 3054, 3480, 7894, 2586, 1455, 2508, # 7078 + 2226, 1972, 1175, 7895, 1020, 2732, 4015, 3481, 4520, 7896, 2733, 7897, 1743, 1361, 3055, 3482, # 7094 + 2639, 4016, 4233, 4521, 2290, 895, 924, 4234, 2170, 331, 2243, 3056, 166, 1627, 3057, 1098, # 7110 + 7898, 1232, 2880, 2227, 3374, 4522, 657, 403, 1196, 2372, 542, 3709, 3375, 1600, 4235, 3483, # 7126 + 7899, 4523, 2767, 3230, 576, 530, 1362, 7900, 4524, 2533, 2666, 3710, 4017, 7901, 842, 3834, # 7142 + 7902, 2801, 2031, 1014, 4018, 213, 2700, 3376, 665, 621, 4236, 7903, 3711, 2925, 2430, 7904, # 7158 + 2431, 3302, 3588, 3377, 7905, 4237, 2534, 4238, 4525, 3589, 1682, 4239, 3484, 1380, 7906, 724, # 7174 + 2277, 600, 1670, 7907, 1337, 1233, 4526, 3103, 2244, 7908, 1621, 4527, 7909, 651, 4240, 7910, # 7190 + 1612, 4241, 2611, 7911, 2844, 7912, 2734, 2307, 3058, 7913, 716, 2459, 3059, 174, 1255, 2701, # 7206 + 4019, 3590, 548, 1320, 1398, 728, 4020, 1574, 7914, 1890, 1197, 3060, 4021, 7915, 3061, 3062, # 7222 + 3712, 3591, 3713, 747, 7916, 635, 4242, 4528, 7917, 7918, 7919, 4243, 7920, 7921, 4529, 7922, # 7238 + 3378, 4530, 2432, 451, 7923, 3714, 2535, 2072, 4244, 2735, 4245, 4022, 7924, 1764, 4531, 7925, # 7254 + 4246, 350, 7926, 2278, 2390, 2486, 7927, 4247, 4023, 2245, 1434, 4024, 488, 4532, 458, 4248, # 7270 + 4025, 3715, 771, 1330, 2391, 3835, 2568, 3159, 2159, 2409, 1553, 2667, 3160, 4249, 7928, 2487, # 7286 + 2881, 2612, 1720, 2702, 4250, 3379, 4533, 7929, 2536, 4251, 7930, 3231, 4252, 2768, 7931, 2015, # 7302 + 2736, 7932, 1155, 1017, 3716, 3836, 7933, 3303, 2308, 201, 1864, 4253, 1430, 7934, 4026, 7935, # 7318 + 7936, 7937, 7938, 7939, 4254, 1604, 7940, 414, 1865, 371, 2587, 4534, 4535, 3485, 2016, 3104, # 7334 + 4536, 1708, 960, 4255, 887, 389, 2171, 1536, 1663, 1721, 7941, 2228, 4027, 2351, 2926, 1580, # 7350 + 7942, 7943, 7944, 1744, 7945, 2537, 4537, 4538, 7946, 4539, 7947, 2073, 7948, 7949, 3592, 3380, # 7366 + 2882, 4256, 7950, 4257, 2640, 3381, 2802, 673, 2703, 2460, 709, 3486, 4028, 3593, 4258, 7951, # 7382 + 1148, 502, 634, 7952, 7953, 1204, 4540, 3594, 1575, 4541, 2613, 3717, 7954, 3718, 3105, 948, # 7398 + 3232, 121, 1745, 3837, 1110, 7955, 4259, 3063, 2509, 3009, 4029, 3719, 1151, 1771, 3838, 1488, # 7414 + 4030, 1986, 7956, 2433, 3487, 7957, 7958, 2093, 7959, 4260, 3839, 1213, 1407, 2803, 531, 2737, # 7430 + 2538, 3233, 1011, 1537, 7960, 2769, 4261, 3106, 1061, 7961, 3720, 3721, 1866, 2883, 7962, 2017, # 7446 + 120, 4262, 4263, 2062, 3595, 3234, 2309, 3840, 2668, 3382, 1954, 4542, 7963, 7964, 3488, 1047, # 7462 + 2704, 1266, 7965, 1368, 4543, 2845, 649, 3383, 3841, 2539, 2738, 1102, 2846, 2669, 7966, 7967, # 7478 + 1999, 7968, 1111, 3596, 2962, 7969, 2488, 3842, 3597, 2804, 1854, 3384, 3722, 7970, 7971, 3385, # 7494 + 2410, 2884, 3304, 3235, 3598, 7972, 2569, 7973, 3599, 2805, 4031, 1460, 856, 7974, 3600, 7975, # 7510 + 2885, 2963, 7976, 2886, 3843, 7977, 4264, 632, 2510, 875, 3844, 1697, 3845, 2291, 7978, 7979, # 7526 + 4544, 3010, 1239, 580, 4545, 4265, 7980, 914, 936, 2074, 1190, 4032, 1039, 2123, 7981, 7982, # 7542 + 7983, 3386, 1473, 7984, 1354, 4266, 3846, 7985, 2172, 3064, 4033, 915, 3305, 4267, 4268, 3306, # 7558 + 1605, 1834, 7986, 2739, 398, 3601, 4269, 3847, 4034, 328, 1912, 2847, 4035, 3848, 1331, 4270, # 7574 + 3011, 937, 4271, 7987, 3602, 4036, 4037, 3387, 2160, 4546, 3388, 524, 742, 538, 3065, 1012, # 7590 + 7988, 7989, 3849, 2461, 7990, 658, 1103, 225, 3850, 7991, 7992, 4547, 7993, 4548, 7994, 3236, # 7606 + 1243, 7995, 4038, 963, 2246, 4549, 7996, 2705, 3603, 3161, 7997, 7998, 2588, 2327, 7999, 4550, # 7622 + 8000, 8001, 8002, 3489, 3307, 957, 3389, 2540, 2032, 1930, 2927, 2462, 870, 2018, 3604, 1746, # 7638 + 2770, 2771, 2434, 2463, 8003, 3851, 8004, 3723, 3107, 3724, 3490, 3390, 3725, 8005, 1179, 3066, # 7654 + 8006, 3162, 2373, 4272, 3726, 2541, 3163, 3108, 2740, 4039, 8007, 3391, 1556, 2542, 2292, 977, # 7670 + 2887, 2033, 4040, 1205, 3392, 8008, 1765, 3393, 3164, 2124, 1271, 1689, 714, 4551, 3491, 8009, # 7686 + 2328, 3852, 533, 4273, 3605, 2181, 617, 8010, 2464, 3308, 3492, 2310, 8011, 8012, 3165, 8013, # 7702 + 8014, 3853, 1987, 618, 427, 2641, 3493, 3394, 8015, 8016, 1244, 1690, 8017, 2806, 4274, 4552, # 7718 + 8018, 3494, 8019, 8020, 2279, 1576, 473, 3606, 4275, 3395, 972, 8021, 3607, 8022, 3067, 8023, # 7734 + 8024, 4553, 4554, 8025, 3727, 4041, 4042, 8026, 153, 4555, 356, 8027, 1891, 2888, 4276, 2143, # 7750 + 408, 803, 2352, 8028, 3854, 8029, 4277, 1646, 2570, 2511, 4556, 4557, 3855, 8030, 3856, 4278, # 7766 + 8031, 2411, 3396, 752, 8032, 8033, 1961, 2964, 8034, 746, 3012, 2465, 8035, 4279, 3728, 698, # 7782 + 4558, 1892, 4280, 3608, 2543, 4559, 3609, 3857, 8036, 3166, 3397, 8037, 1823, 1302, 4043, 2706, # 7798 + 3858, 1973, 4281, 8038, 4282, 3167, 823, 1303, 1288, 1236, 2848, 3495, 4044, 3398, 774, 3859, # 7814 + 8039, 1581, 4560, 1304, 2849, 3860, 4561, 8040, 2435, 2161, 1083, 3237, 4283, 4045, 4284, 344, # 7830 + 1173, 288, 2311, 454, 1683, 8041, 8042, 1461, 4562, 4046, 2589, 8043, 8044, 4563, 985, 894, # 7846 + 8045, 3399, 3168, 8046, 1913, 2928, 3729, 1988, 8047, 2110, 1974, 8048, 4047, 8049, 2571, 1194, # 7862 + 425, 8050, 4564, 3169, 1245, 3730, 4285, 8051, 8052, 2850, 8053, 636, 4565, 1855, 3861, 760, # 7878 + 1799, 8054, 4286, 2209, 1508, 4566, 4048, 1893, 1684, 2293, 8055, 8056, 8057, 4287, 4288, 2210, # 7894 + 479, 8058, 8059, 832, 8060, 4049, 2489, 8061, 2965, 2490, 3731, 990, 3109, 627, 1814, 2642, # 7910 + 4289, 1582, 4290, 2125, 2111, 3496, 4567, 8062, 799, 4291, 3170, 8063, 4568, 2112, 1737, 3013, # 7926 + 1018, 543, 754, 4292, 3309, 1676, 4569, 4570, 4050, 8064, 1489, 8065, 3497, 8066, 2614, 2889, # 7942 + 4051, 8067, 8068, 2966, 8069, 8070, 8071, 8072, 3171, 4571, 4572, 2182, 1722, 8073, 3238, 3239, # 7958 + 1842, 3610, 1715, 481, 365, 1975, 1856, 8074, 8075, 1962, 2491, 4573, 8076, 2126, 3611, 3240, # 7974 + 433, 1894, 2063, 2075, 8077, 602, 2741, 8078, 8079, 8080, 8081, 8082, 3014, 1628, 3400, 8083, # 7990 + 3172, 4574, 4052, 2890, 4575, 2512, 8084, 2544, 2772, 8085, 8086, 8087, 3310, 4576, 2891, 8088, # 8006 + 4577, 8089, 2851, 4578, 4579, 1221, 2967, 4053, 2513, 8090, 8091, 8092, 1867, 1989, 8093, 8094, # 8022 + 8095, 1895, 8096, 8097, 4580, 1896, 4054, 318, 8098, 2094, 4055, 4293, 8099, 8100, 485, 8101, # 8038 + 938, 3862, 553, 2670, 116, 8102, 3863, 3612, 8103, 3498, 2671, 2773, 3401, 3311, 2807, 8104, # 8054 + 3613, 2929, 4056, 1747, 2930, 2968, 8105, 8106, 207, 8107, 8108, 2672, 4581, 2514, 8109, 3015, # 8070 + 890, 3614, 3864, 8110, 1877, 3732, 3402, 8111, 2183, 2353, 3403, 1652, 8112, 8113, 8114, 941, # 8086 + 2294, 208, 3499, 4057, 2019, 330, 4294, 3865, 2892, 2492, 3733, 4295, 8115, 8116, 8117, 8118, # 8102 +) +# fmt: on diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/euctwprober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/euctwprober.py new file mode 100644 index 0000000..a37ab18 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/euctwprober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .chardistribution import EUCTWDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import EUCTW_SM_MODEL + + +class EUCTWProber(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(EUCTW_SM_MODEL) + self.distribution_analyzer = EUCTWDistributionAnalysis() + self.reset() + + @property + def charset_name(self) -> str: + return "EUC-TW" + + @property + def language(self) -> str: + return "Taiwan" diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/gb2312freq.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/gb2312freq.py new file mode 100644 index 0000000..b32bfc7 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/gb2312freq.py @@ -0,0 +1,284 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# GB2312 most frequently used character table +# +# Char to FreqOrder table , from hz6763 + +# 512 --> 0.79 -- 0.79 +# 1024 --> 0.92 -- 0.13 +# 2048 --> 0.98 -- 0.06 +# 6768 --> 1.00 -- 0.02 +# +# Ideal Distribution Ratio = 0.79135/(1-0.79135) = 3.79 +# Random Distribution Ration = 512 / (3755 - 512) = 0.157 +# +# Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR + +GB2312_TYPICAL_DISTRIBUTION_RATIO = 0.9 + +GB2312_TABLE_SIZE = 3760 + +# fmt: off +GB2312_CHAR_TO_FREQ_ORDER = ( +1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205, +2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842, +2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409, + 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670, +1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820, +1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585, + 152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566, +1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575, +2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853, +3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061, + 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155, +1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406, + 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816, +2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606, + 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023, +2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414, +1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513, +3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052, + 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570, +1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575, + 253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250, +2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506, +1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26, +3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835, +1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686, +2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054, +1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894, + 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105, +3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403, +3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694, + 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873, +3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940, + 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121, +1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648, +3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992, +2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233, +1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157, + 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807, +1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094, +4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258, + 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478, +3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152, +3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909, + 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272, +1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221, +2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252, +1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301, +1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254, + 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070, +3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461, +3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360, +4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124, + 296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535, +3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243, +1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713, +1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071, +4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442, + 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946, + 814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257, +3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180, +1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427, + 602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781, +1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724, +2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937, + 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943, + 432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789, + 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552, +3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246, +4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451, +3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310, + 750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860, +2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297, +2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780, +2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745, + 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936, +2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032, + 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657, + 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414, + 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976, +3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436, +2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254, +2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536, +1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238, + 18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059, +2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741, + 90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447, + 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601, +1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269, +1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894, + 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173, + 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994, +1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956, +2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437, +3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154, +2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240, +2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143, +2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634, +3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472, +1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541, +1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143, +2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312, +1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414, +3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754, +1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424, +1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302, +3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739, + 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004, +2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484, +1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739, +4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535, +1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641, +1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307, +3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573, +1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533, + 47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965, + 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99, +1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280, + 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505, +1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012, +1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039, + 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982, +3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530, +4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392, +3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656, +2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220, +2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766, +1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535, +3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728, +2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338, +1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627, +1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885, + 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411, +2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671, +2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162, +3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774, +4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524, +3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346, + 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040, +3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188, +2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280, +1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131, + 259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947, + 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970, +3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814, +4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557, +2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997, +1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972, +1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369, + 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376, +1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480, +3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610, + 955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128, + 642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769, +1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207, + 57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392, +1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623, + 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782, +2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650, + 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478, +2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773, +2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007, +1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323, +1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598, +2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961, + 819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302, +1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409, +1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683, +2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191, +2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616, +3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302, +1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774, +4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147, + 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731, + 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464, +3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377, +1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315, + 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557, +3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903, +1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060, +4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261, +1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092, +2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810, +1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708, + 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658, +1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871, +3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503, + 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229, +2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112, + 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504, +1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389, +1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27, +1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542, +3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861, +2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845, +3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700, +3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469, +3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582, + 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999, +2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274, + 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020, +2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601, + 12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628, +1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31, + 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668, + 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778, +1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169, +3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667, +3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881, +1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276, +1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320, +3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751, +2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432, +2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772, +1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843, +3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116, + 451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904, +4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652, +1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664, +2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770, +3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283, +3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626, +1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713, + 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333, + 391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062, +2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555, + 931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014, +1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510, + 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015, +1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459, +1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390, +1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238, +1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232, +1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624, + 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189, + 852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483, #last 512 +) +# fmt: on diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/gb2312prober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/gb2312prober.py new file mode 100644 index 0000000..d423e73 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/gb2312prober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .chardistribution import GB2312DistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import GB2312_SM_MODEL + + +class GB2312Prober(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(GB2312_SM_MODEL) + self.distribution_analyzer = GB2312DistributionAnalysis() + self.reset() + + @property + def charset_name(self) -> str: + return "GB2312" + + @property + def language(self) -> str: + return "Chinese" diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/hebrewprober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/hebrewprober.py new file mode 100644 index 0000000..785d005 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/hebrewprober.py @@ -0,0 +1,316 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Shy Shalom +# Portions created by the Initial Developer are Copyright (C) 2005 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import Optional, Union + +from .charsetprober import CharSetProber +from .enums import ProbingState +from .sbcharsetprober import SingleByteCharSetProber + +# This prober doesn't actually recognize a language or a charset. +# It is a helper prober for the use of the Hebrew model probers + +### General ideas of the Hebrew charset recognition ### +# +# Four main charsets exist in Hebrew: +# "ISO-8859-8" - Visual Hebrew +# "windows-1255" - Logical Hebrew +# "ISO-8859-8-I" - Logical Hebrew +# "x-mac-hebrew" - ?? Logical Hebrew ?? +# +# Both "ISO" charsets use a completely identical set of code points, whereas +# "windows-1255" and "x-mac-hebrew" are two different proper supersets of +# these code points. windows-1255 defines additional characters in the range +# 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific +# diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6. +# x-mac-hebrew defines similar additional code points but with a different +# mapping. +# +# As far as an average Hebrew text with no diacritics is concerned, all four +# charsets are identical with respect to code points. Meaning that for the +# main Hebrew alphabet, all four map the same values to all 27 Hebrew letters +# (including final letters). +# +# The dominant difference between these charsets is their directionality. +# "Visual" directionality means that the text is ordered as if the renderer is +# not aware of a BIDI rendering algorithm. The renderer sees the text and +# draws it from left to right. The text itself when ordered naturally is read +# backwards. A buffer of Visual Hebrew generally looks like so: +# "[last word of first line spelled backwards] [whole line ordered backwards +# and spelled backwards] [first word of first line spelled backwards] +# [end of line] [last word of second line] ... etc' " +# adding punctuation marks, numbers and English text to visual text is +# naturally also "visual" and from left to right. +# +# "Logical" directionality means the text is ordered "naturally" according to +# the order it is read. It is the responsibility of the renderer to display +# the text from right to left. A BIDI algorithm is used to place general +# punctuation marks, numbers and English text in the text. +# +# Texts in x-mac-hebrew are almost impossible to find on the Internet. From +# what little evidence I could find, it seems that its general directionality +# is Logical. +# +# To sum up all of the above, the Hebrew probing mechanism knows about two +# charsets: +# Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are +# backwards while line order is natural. For charset recognition purposes +# the line order is unimportant (In fact, for this implementation, even +# word order is unimportant). +# Logical Hebrew - "windows-1255" - normal, naturally ordered text. +# +# "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be +# specifically identified. +# "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew +# that contain special punctuation marks or diacritics is displayed with +# some unconverted characters showing as question marks. This problem might +# be corrected using another model prober for x-mac-hebrew. Due to the fact +# that x-mac-hebrew texts are so rare, writing another model prober isn't +# worth the effort and performance hit. +# +#### The Prober #### +# +# The prober is divided between two SBCharSetProbers and a HebrewProber, +# all of which are managed, created, fed data, inquired and deleted by the +# SBCSGroupProber. The two SBCharSetProbers identify that the text is in +# fact some kind of Hebrew, Logical or Visual. The final decision about which +# one is it is made by the HebrewProber by combining final-letter scores +# with the scores of the two SBCharSetProbers to produce a final answer. +# +# The SBCSGroupProber is responsible for stripping the original text of HTML +# tags, English characters, numbers, low-ASCII punctuation characters, spaces +# and new lines. It reduces any sequence of such characters to a single space. +# The buffer fed to each prober in the SBCS group prober is pure text in +# high-ASCII. +# The two SBCharSetProbers (model probers) share the same language model: +# Win1255Model. +# The first SBCharSetProber uses the model normally as any other +# SBCharSetProber does, to recognize windows-1255, upon which this model was +# built. The second SBCharSetProber is told to make the pair-of-letter +# lookup in the language model backwards. This in practice exactly simulates +# a visual Hebrew model using the windows-1255 logical Hebrew model. +# +# The HebrewProber is not using any language model. All it does is look for +# final-letter evidence suggesting the text is either logical Hebrew or visual +# Hebrew. Disjointed from the model probers, the results of the HebrewProber +# alone are meaningless. HebrewProber always returns 0.00 as confidence +# since it never identifies a charset by itself. Instead, the pointer to the +# HebrewProber is passed to the model probers as a helper "Name Prober". +# When the Group prober receives a positive identification from any prober, +# it asks for the name of the charset identified. If the prober queried is a +# Hebrew model prober, the model prober forwards the call to the +# HebrewProber to make the final decision. In the HebrewProber, the +# decision is made according to the final-letters scores maintained and Both +# model probers scores. The answer is returned in the form of the name of the +# charset identified, either "windows-1255" or "ISO-8859-8". + + +class HebrewProber(CharSetProber): + SPACE = 0x20 + # windows-1255 / ISO-8859-8 code points of interest + FINAL_KAF = 0xEA + NORMAL_KAF = 0xEB + FINAL_MEM = 0xED + NORMAL_MEM = 0xEE + FINAL_NUN = 0xEF + NORMAL_NUN = 0xF0 + FINAL_PE = 0xF3 + NORMAL_PE = 0xF4 + FINAL_TSADI = 0xF5 + NORMAL_TSADI = 0xF6 + + # Minimum Visual vs Logical final letter score difference. + # If the difference is below this, don't rely solely on the final letter score + # distance. + MIN_FINAL_CHAR_DISTANCE = 5 + + # Minimum Visual vs Logical model score difference. + # If the difference is below this, don't rely at all on the model score + # distance. + MIN_MODEL_DISTANCE = 0.01 + + VISUAL_HEBREW_NAME = "ISO-8859-8" + LOGICAL_HEBREW_NAME = "windows-1255" + + def __init__(self) -> None: + super().__init__() + self._final_char_logical_score = 0 + self._final_char_visual_score = 0 + self._prev = self.SPACE + self._before_prev = self.SPACE + self._logical_prober: Optional[SingleByteCharSetProber] = None + self._visual_prober: Optional[SingleByteCharSetProber] = None + self.reset() + + def reset(self) -> None: + self._final_char_logical_score = 0 + self._final_char_visual_score = 0 + # The two last characters seen in the previous buffer, + # mPrev and mBeforePrev are initialized to space in order to simulate + # a word delimiter at the beginning of the data + self._prev = self.SPACE + self._before_prev = self.SPACE + # These probers are owned by the group prober. + + def set_model_probers( + self, + logical_prober: SingleByteCharSetProber, + visual_prober: SingleByteCharSetProber, + ) -> None: + self._logical_prober = logical_prober + self._visual_prober = visual_prober + + def is_final(self, c: int) -> bool: + return c in [ + self.FINAL_KAF, + self.FINAL_MEM, + self.FINAL_NUN, + self.FINAL_PE, + self.FINAL_TSADI, + ] + + def is_non_final(self, c: int) -> bool: + # The normal Tsadi is not a good Non-Final letter due to words like + # 'lechotet' (to chat) containing an apostrophe after the tsadi. This + # apostrophe is converted to a space in FilterWithoutEnglishLetters + # causing the Non-Final tsadi to appear at an end of a word even + # though this is not the case in the original text. + # The letters Pe and Kaf rarely display a related behavior of not being + # a good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak' + # for example legally end with a Non-Final Pe or Kaf. However, the + # benefit of these letters as Non-Final letters outweighs the damage + # since these words are quite rare. + return c in [self.NORMAL_KAF, self.NORMAL_MEM, self.NORMAL_NUN, self.NORMAL_PE] + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + # Final letter analysis for logical-visual decision. + # Look for evidence that the received buffer is either logical Hebrew + # or visual Hebrew. + # The following cases are checked: + # 1) A word longer than 1 letter, ending with a final letter. This is + # an indication that the text is laid out "naturally" since the + # final letter really appears at the end. +1 for logical score. + # 2) A word longer than 1 letter, ending with a Non-Final letter. In + # normal Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, + # should not end with the Non-Final form of that letter. Exceptions + # to this rule are mentioned above in isNonFinal(). This is an + # indication that the text is laid out backwards. +1 for visual + # score + # 3) A word longer than 1 letter, starting with a final letter. Final + # letters should not appear at the beginning of a word. This is an + # indication that the text is laid out backwards. +1 for visual + # score. + # + # The visual score and logical score are accumulated throughout the + # text and are finally checked against each other in GetCharSetName(). + # No checking for final letters in the middle of words is done since + # that case is not an indication for either Logical or Visual text. + # + # We automatically filter out all 7-bit characters (replace them with + # spaces) so the word boundary detection works properly. [MAP] + + if self.state == ProbingState.NOT_ME: + # Both model probers say it's not them. No reason to continue. + return ProbingState.NOT_ME + + byte_str = self.filter_high_byte_only(byte_str) + + for cur in byte_str: + if cur == self.SPACE: + # We stand on a space - a word just ended + if self._before_prev != self.SPACE: + # next-to-last char was not a space so self._prev is not a + # 1 letter word + if self.is_final(self._prev): + # case (1) [-2:not space][-1:final letter][cur:space] + self._final_char_logical_score += 1 + elif self.is_non_final(self._prev): + # case (2) [-2:not space][-1:Non-Final letter][ + # cur:space] + self._final_char_visual_score += 1 + else: + # Not standing on a space + if ( + (self._before_prev == self.SPACE) + and (self.is_final(self._prev)) + and (cur != self.SPACE) + ): + # case (3) [-2:space][-1:final letter][cur:not space] + self._final_char_visual_score += 1 + self._before_prev = self._prev + self._prev = cur + + # Forever detecting, till the end or until both model probers return + # ProbingState.NOT_ME (handled above) + return ProbingState.DETECTING + + @property + def charset_name(self) -> str: + assert self._logical_prober is not None + assert self._visual_prober is not None + + # Make the decision: is it Logical or Visual? + # If the final letter score distance is dominant enough, rely on it. + finalsub = self._final_char_logical_score - self._final_char_visual_score + if finalsub >= self.MIN_FINAL_CHAR_DISTANCE: + return self.LOGICAL_HEBREW_NAME + if finalsub <= -self.MIN_FINAL_CHAR_DISTANCE: + return self.VISUAL_HEBREW_NAME + + # It's not dominant enough, try to rely on the model scores instead. + modelsub = ( + self._logical_prober.get_confidence() - self._visual_prober.get_confidence() + ) + if modelsub > self.MIN_MODEL_DISTANCE: + return self.LOGICAL_HEBREW_NAME + if modelsub < -self.MIN_MODEL_DISTANCE: + return self.VISUAL_HEBREW_NAME + + # Still no good, back to final letter distance, maybe it'll save the + # day. + if finalsub < 0.0: + return self.VISUAL_HEBREW_NAME + + # (finalsub > 0 - Logical) or (don't know what to do) default to + # Logical. + return self.LOGICAL_HEBREW_NAME + + @property + def language(self) -> str: + return "Hebrew" + + @property + def state(self) -> ProbingState: + assert self._logical_prober is not None + assert self._visual_prober is not None + + # Remain active as long as any of the model probers are active. + if (self._logical_prober.state == ProbingState.NOT_ME) and ( + self._visual_prober.state == ProbingState.NOT_ME + ): + return ProbingState.NOT_ME + return ProbingState.DETECTING diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/jisfreq.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/jisfreq.py new file mode 100644 index 0000000..3293576 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/jisfreq.py @@ -0,0 +1,325 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# Sampling from about 20M text materials include literature and computer technology +# +# Japanese frequency table, applied to both S-JIS and EUC-JP +# They are sorted in order. + +# 128 --> 0.77094 +# 256 --> 0.85710 +# 512 --> 0.92635 +# 1024 --> 0.97130 +# 2048 --> 0.99431 +# +# Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58 +# Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191 +# +# Typical Distribution Ratio, 25% of IDR + +JIS_TYPICAL_DISTRIBUTION_RATIO = 3.0 + +# Char to FreqOrder table , +JIS_TABLE_SIZE = 4368 + +# fmt: off +JIS_CHAR_TO_FREQ_ORDER = ( + 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, # 16 +3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, # 32 +1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, # 48 +2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, # 64 +2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, # 80 +5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, # 96 +1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, # 112 +5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, # 128 +5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, # 144 +5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, # 160 +5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, # 176 +5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, # 192 +5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, # 208 +1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, # 224 +1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, # 240 +1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, # 256 +2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, # 272 +3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, # 288 +3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, # 304 + 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, # 320 + 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, # 336 +1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, # 352 + 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, # 368 +5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, # 384 + 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, # 400 + 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, # 416 + 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, # 432 + 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, # 448 + 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, # 464 +5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, # 480 +5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, # 496 +5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, # 512 +4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, # 528 +5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, # 544 +5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, # 560 +5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, # 576 +5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, # 592 +5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, # 608 +5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, # 624 +5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, # 640 +5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, # 656 +5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, # 672 +3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, # 688 +5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, # 704 +5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, # 720 +5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, # 736 +5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, # 752 +5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, # 768 +5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, # 784 +5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, # 800 +5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, # 816 +5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, # 832 +5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, # 848 +5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, # 864 +5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, # 880 +5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, # 896 +5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, # 912 +5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, # 928 +5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, # 944 +5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, # 960 +5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, # 976 +5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, # 992 +5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, # 1008 +5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, # 1024 +5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, # 1040 +5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, # 1056 +5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, # 1072 +5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, # 1088 +5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, # 1104 +5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, # 1120 +5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, # 1136 +5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, # 1152 +5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, # 1168 +5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, # 1184 +5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, # 1200 +5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, # 1216 +5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, # 1232 +5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, # 1248 +5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, # 1264 +5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, # 1280 +5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, # 1296 +6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, # 1312 +6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, # 1328 +6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, # 1344 +6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, # 1360 +6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, # 1376 +6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, # 1392 +6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, # 1408 +6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, # 1424 +4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, # 1440 + 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, # 1456 + 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, # 1472 +1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, # 1488 +1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, # 1504 + 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, # 1520 +3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, # 1536 +3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, # 1552 + 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, # 1568 +3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, # 1584 +3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, # 1600 + 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, # 1616 +2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, # 1632 + 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, # 1648 +3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, # 1664 +1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, # 1680 + 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, # 1696 +1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, # 1712 + 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, # 1728 +2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, # 1744 +2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, # 1760 +2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, # 1776 +2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, # 1792 +1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, # 1808 +1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, # 1824 +1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, # 1840 +1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, # 1856 +2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, # 1872 +1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, # 1888 +2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, # 1904 +1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, # 1920 +1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, # 1936 +1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, # 1952 +1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, # 1968 +1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, # 1984 +1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, # 2000 + 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, # 2016 + 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, # 2032 +1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, # 2048 +2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, # 2064 +2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, # 2080 +2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, # 2096 +3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, # 2112 +3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, # 2128 + 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, # 2144 +3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, # 2160 +1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, # 2176 + 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, # 2192 +2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, # 2208 +1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, # 2224 + 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, # 2240 +3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, # 2256 +4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, # 2272 +2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, # 2288 +1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, # 2304 +2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, # 2320 +1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, # 2336 + 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, # 2352 + 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, # 2368 +1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, # 2384 +2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, # 2400 +2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, # 2416 +2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, # 2432 +3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, # 2448 +1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, # 2464 +2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, # 2480 + 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, # 2496 + 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, # 2512 + 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, # 2528 +1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, # 2544 +2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, # 2560 + 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, # 2576 +1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, # 2592 +1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, # 2608 + 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, # 2624 +1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, # 2640 +1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, # 2656 +1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, # 2672 + 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, # 2688 +2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, # 2704 + 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, # 2720 +2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, # 2736 +3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, # 2752 +2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, # 2768 +1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, # 2784 +6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, # 2800 +1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, # 2816 +2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, # 2832 +1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, # 2848 + 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, # 2864 + 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, # 2880 +3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, # 2896 +3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, # 2912 +1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, # 2928 +1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, # 2944 +1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, # 2960 +1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, # 2976 + 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, # 2992 + 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, # 3008 +2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, # 3024 + 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, # 3040 +3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, # 3056 +2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, # 3072 + 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, # 3088 +1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, # 3104 +2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, # 3120 + 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, # 3136 +1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, # 3152 + 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, # 3168 +4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, # 3184 +2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, # 3200 +1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, # 3216 + 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, # 3232 +1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, # 3248 +2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, # 3264 + 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, # 3280 +6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, # 3296 +1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, # 3312 +1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, # 3328 +2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, # 3344 +3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, # 3360 + 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, # 3376 +3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, # 3392 +1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, # 3408 + 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, # 3424 +1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, # 3440 + 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, # 3456 +3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, # 3472 + 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, # 3488 +2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, # 3504 + 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, # 3520 +4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, # 3536 +2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, # 3552 +1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, # 3568 +1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, # 3584 +1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, # 3600 + 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, # 3616 +1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, # 3632 +3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, # 3648 +1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, # 3664 +3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, # 3680 + 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, # 3696 + 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, # 3712 + 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, # 3728 +2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, # 3744 +1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, # 3760 + 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, # 3776 +1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, # 3792 + 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, # 3808 +1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, # 3824 + 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, # 3840 + 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, # 3856 + 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, # 3872 +1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, # 3888 +1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, # 3904 +2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, # 3920 +4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, # 3936 + 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, # 3952 +1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, # 3968 + 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, # 3984 +1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, # 4000 +3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, # 4016 +1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, # 4032 +2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, # 4048 +2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, # 4064 +1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, # 4080 +1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, # 4096 +2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, # 4112 + 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, # 4128 +2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, # 4144 +1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, # 4160 +1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, # 4176 +1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, # 4192 +1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, # 4208 +3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, # 4224 +2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, # 4240 +2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, # 4256 + 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, # 4272 +3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, # 4288 +3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, # 4304 +1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, # 4320 +2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, # 4336 +1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, # 4352 +2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, # 4368 #last 512 +) +# fmt: on diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/johabfreq.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/johabfreq.py new file mode 100644 index 0000000..c129699 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/johabfreq.py @@ -0,0 +1,2382 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +# The frequency data itself is the same as euc-kr. +# This is just a mapping table to euc-kr. + +JOHAB_TO_EUCKR_ORDER_TABLE = { + 0x8861: 0, + 0x8862: 1, + 0x8865: 2, + 0x8868: 3, + 0x8869: 4, + 0x886A: 5, + 0x886B: 6, + 0x8871: 7, + 0x8873: 8, + 0x8874: 9, + 0x8875: 10, + 0x8876: 11, + 0x8877: 12, + 0x8878: 13, + 0x8879: 14, + 0x887B: 15, + 0x887C: 16, + 0x887D: 17, + 0x8881: 18, + 0x8882: 19, + 0x8885: 20, + 0x8889: 21, + 0x8891: 22, + 0x8893: 23, + 0x8895: 24, + 0x8896: 25, + 0x8897: 26, + 0x88A1: 27, + 0x88A2: 28, + 0x88A5: 29, + 0x88A9: 30, + 0x88B5: 31, + 0x88B7: 32, + 0x88C1: 33, + 0x88C5: 34, + 0x88C9: 35, + 0x88E1: 36, + 0x88E2: 37, + 0x88E5: 38, + 0x88E8: 39, + 0x88E9: 40, + 0x88EB: 41, + 0x88F1: 42, + 0x88F3: 43, + 0x88F5: 44, + 0x88F6: 45, + 0x88F7: 46, + 0x88F8: 47, + 0x88FB: 48, + 0x88FC: 49, + 0x88FD: 50, + 0x8941: 51, + 0x8945: 52, + 0x8949: 53, + 0x8951: 54, + 0x8953: 55, + 0x8955: 56, + 0x8956: 57, + 0x8957: 58, + 0x8961: 59, + 0x8962: 60, + 0x8963: 61, + 0x8965: 62, + 0x8968: 63, + 0x8969: 64, + 0x8971: 65, + 0x8973: 66, + 0x8975: 67, + 0x8976: 68, + 0x8977: 69, + 0x897B: 70, + 0x8981: 71, + 0x8985: 72, + 0x8989: 73, + 0x8993: 74, + 0x8995: 75, + 0x89A1: 76, + 0x89A2: 77, + 0x89A5: 78, + 0x89A8: 79, + 0x89A9: 80, + 0x89AB: 81, + 0x89AD: 82, + 0x89B0: 83, + 0x89B1: 84, + 0x89B3: 85, + 0x89B5: 86, + 0x89B7: 87, + 0x89B8: 88, + 0x89C1: 89, + 0x89C2: 90, + 0x89C5: 91, + 0x89C9: 92, + 0x89CB: 93, + 0x89D1: 94, + 0x89D3: 95, + 0x89D5: 96, + 0x89D7: 97, + 0x89E1: 98, + 0x89E5: 99, + 0x89E9: 100, + 0x89F3: 101, + 0x89F6: 102, + 0x89F7: 103, + 0x8A41: 104, + 0x8A42: 105, + 0x8A45: 106, + 0x8A49: 107, + 0x8A51: 108, + 0x8A53: 109, + 0x8A55: 110, + 0x8A57: 111, + 0x8A61: 112, + 0x8A65: 113, + 0x8A69: 114, + 0x8A73: 115, + 0x8A75: 116, + 0x8A81: 117, + 0x8A82: 118, + 0x8A85: 119, + 0x8A88: 120, + 0x8A89: 121, + 0x8A8A: 122, + 0x8A8B: 123, + 0x8A90: 124, + 0x8A91: 125, + 0x8A93: 126, + 0x8A95: 127, + 0x8A97: 128, + 0x8A98: 129, + 0x8AA1: 130, + 0x8AA2: 131, + 0x8AA5: 132, + 0x8AA9: 133, + 0x8AB6: 134, + 0x8AB7: 135, + 0x8AC1: 136, + 0x8AD5: 137, + 0x8AE1: 138, + 0x8AE2: 139, + 0x8AE5: 140, + 0x8AE9: 141, + 0x8AF1: 142, + 0x8AF3: 143, + 0x8AF5: 144, + 0x8B41: 145, + 0x8B45: 146, + 0x8B49: 147, + 0x8B61: 148, + 0x8B62: 149, + 0x8B65: 150, + 0x8B68: 151, + 0x8B69: 152, + 0x8B6A: 153, + 0x8B71: 154, + 0x8B73: 155, + 0x8B75: 156, + 0x8B77: 157, + 0x8B81: 158, + 0x8BA1: 159, + 0x8BA2: 160, + 0x8BA5: 161, + 0x8BA8: 162, + 0x8BA9: 163, + 0x8BAB: 164, + 0x8BB1: 165, + 0x8BB3: 166, + 0x8BB5: 167, + 0x8BB7: 168, + 0x8BB8: 169, + 0x8BBC: 170, + 0x8C61: 171, + 0x8C62: 172, + 0x8C63: 173, + 0x8C65: 174, + 0x8C69: 175, + 0x8C6B: 176, + 0x8C71: 177, + 0x8C73: 178, + 0x8C75: 179, + 0x8C76: 180, + 0x8C77: 181, + 0x8C7B: 182, + 0x8C81: 183, + 0x8C82: 184, + 0x8C85: 185, + 0x8C89: 186, + 0x8C91: 187, + 0x8C93: 188, + 0x8C95: 189, + 0x8C96: 190, + 0x8C97: 191, + 0x8CA1: 192, + 0x8CA2: 193, + 0x8CA9: 194, + 0x8CE1: 195, + 0x8CE2: 196, + 0x8CE3: 197, + 0x8CE5: 198, + 0x8CE9: 199, + 0x8CF1: 200, + 0x8CF3: 201, + 0x8CF5: 202, + 0x8CF6: 203, + 0x8CF7: 204, + 0x8D41: 205, + 0x8D42: 206, + 0x8D45: 207, + 0x8D51: 208, + 0x8D55: 209, + 0x8D57: 210, + 0x8D61: 211, + 0x8D65: 212, + 0x8D69: 213, + 0x8D75: 214, + 0x8D76: 215, + 0x8D7B: 216, + 0x8D81: 217, + 0x8DA1: 218, + 0x8DA2: 219, + 0x8DA5: 220, + 0x8DA7: 221, + 0x8DA9: 222, + 0x8DB1: 223, + 0x8DB3: 224, + 0x8DB5: 225, + 0x8DB7: 226, + 0x8DB8: 227, + 0x8DB9: 228, + 0x8DC1: 229, + 0x8DC2: 230, + 0x8DC9: 231, + 0x8DD6: 232, + 0x8DD7: 233, + 0x8DE1: 234, + 0x8DE2: 235, + 0x8DF7: 236, + 0x8E41: 237, + 0x8E45: 238, + 0x8E49: 239, + 0x8E51: 240, + 0x8E53: 241, + 0x8E57: 242, + 0x8E61: 243, + 0x8E81: 244, + 0x8E82: 245, + 0x8E85: 246, + 0x8E89: 247, + 0x8E90: 248, + 0x8E91: 249, + 0x8E93: 250, + 0x8E95: 251, + 0x8E97: 252, + 0x8E98: 253, + 0x8EA1: 254, + 0x8EA9: 255, + 0x8EB6: 256, + 0x8EB7: 257, + 0x8EC1: 258, + 0x8EC2: 259, + 0x8EC5: 260, + 0x8EC9: 261, + 0x8ED1: 262, + 0x8ED3: 263, + 0x8ED6: 264, + 0x8EE1: 265, + 0x8EE5: 266, + 0x8EE9: 267, + 0x8EF1: 268, + 0x8EF3: 269, + 0x8F41: 270, + 0x8F61: 271, + 0x8F62: 272, + 0x8F65: 273, + 0x8F67: 274, + 0x8F69: 275, + 0x8F6B: 276, + 0x8F70: 277, + 0x8F71: 278, + 0x8F73: 279, + 0x8F75: 280, + 0x8F77: 281, + 0x8F7B: 282, + 0x8FA1: 283, + 0x8FA2: 284, + 0x8FA5: 285, + 0x8FA9: 286, + 0x8FB1: 287, + 0x8FB3: 288, + 0x8FB5: 289, + 0x8FB7: 290, + 0x9061: 291, + 0x9062: 292, + 0x9063: 293, + 0x9065: 294, + 0x9068: 295, + 0x9069: 296, + 0x906A: 297, + 0x906B: 298, + 0x9071: 299, + 0x9073: 300, + 0x9075: 301, + 0x9076: 302, + 0x9077: 303, + 0x9078: 304, + 0x9079: 305, + 0x907B: 306, + 0x907D: 307, + 0x9081: 308, + 0x9082: 309, + 0x9085: 310, + 0x9089: 311, + 0x9091: 312, + 0x9093: 313, + 0x9095: 314, + 0x9096: 315, + 0x9097: 316, + 0x90A1: 317, + 0x90A2: 318, + 0x90A5: 319, + 0x90A9: 320, + 0x90B1: 321, + 0x90B7: 322, + 0x90E1: 323, + 0x90E2: 324, + 0x90E4: 325, + 0x90E5: 326, + 0x90E9: 327, + 0x90EB: 328, + 0x90EC: 329, + 0x90F1: 330, + 0x90F3: 331, + 0x90F5: 332, + 0x90F6: 333, + 0x90F7: 334, + 0x90FD: 335, + 0x9141: 336, + 0x9142: 337, + 0x9145: 338, + 0x9149: 339, + 0x9151: 340, + 0x9153: 341, + 0x9155: 342, + 0x9156: 343, + 0x9157: 344, + 0x9161: 345, + 0x9162: 346, + 0x9165: 347, + 0x9169: 348, + 0x9171: 349, + 0x9173: 350, + 0x9176: 351, + 0x9177: 352, + 0x917A: 353, + 0x9181: 354, + 0x9185: 355, + 0x91A1: 356, + 0x91A2: 357, + 0x91A5: 358, + 0x91A9: 359, + 0x91AB: 360, + 0x91B1: 361, + 0x91B3: 362, + 0x91B5: 363, + 0x91B7: 364, + 0x91BC: 365, + 0x91BD: 366, + 0x91C1: 367, + 0x91C5: 368, + 0x91C9: 369, + 0x91D6: 370, + 0x9241: 371, + 0x9245: 372, + 0x9249: 373, + 0x9251: 374, + 0x9253: 375, + 0x9255: 376, + 0x9261: 377, + 0x9262: 378, + 0x9265: 379, + 0x9269: 380, + 0x9273: 381, + 0x9275: 382, + 0x9277: 383, + 0x9281: 384, + 0x9282: 385, + 0x9285: 386, + 0x9288: 387, + 0x9289: 388, + 0x9291: 389, + 0x9293: 390, + 0x9295: 391, + 0x9297: 392, + 0x92A1: 393, + 0x92B6: 394, + 0x92C1: 395, + 0x92E1: 396, + 0x92E5: 397, + 0x92E9: 398, + 0x92F1: 399, + 0x92F3: 400, + 0x9341: 401, + 0x9342: 402, + 0x9349: 403, + 0x9351: 404, + 0x9353: 405, + 0x9357: 406, + 0x9361: 407, + 0x9362: 408, + 0x9365: 409, + 0x9369: 410, + 0x936A: 411, + 0x936B: 412, + 0x9371: 413, + 0x9373: 414, + 0x9375: 415, + 0x9377: 416, + 0x9378: 417, + 0x937C: 418, + 0x9381: 419, + 0x9385: 420, + 0x9389: 421, + 0x93A1: 422, + 0x93A2: 423, + 0x93A5: 424, + 0x93A9: 425, + 0x93AB: 426, + 0x93B1: 427, + 0x93B3: 428, + 0x93B5: 429, + 0x93B7: 430, + 0x93BC: 431, + 0x9461: 432, + 0x9462: 433, + 0x9463: 434, + 0x9465: 435, + 0x9468: 436, + 0x9469: 437, + 0x946A: 438, + 0x946B: 439, + 0x946C: 440, + 0x9470: 441, + 0x9471: 442, + 0x9473: 443, + 0x9475: 444, + 0x9476: 445, + 0x9477: 446, + 0x9478: 447, + 0x9479: 448, + 0x947D: 449, + 0x9481: 450, + 0x9482: 451, + 0x9485: 452, + 0x9489: 453, + 0x9491: 454, + 0x9493: 455, + 0x9495: 456, + 0x9496: 457, + 0x9497: 458, + 0x94A1: 459, + 0x94E1: 460, + 0x94E2: 461, + 0x94E3: 462, + 0x94E5: 463, + 0x94E8: 464, + 0x94E9: 465, + 0x94EB: 466, + 0x94EC: 467, + 0x94F1: 468, + 0x94F3: 469, + 0x94F5: 470, + 0x94F7: 471, + 0x94F9: 472, + 0x94FC: 473, + 0x9541: 474, + 0x9542: 475, + 0x9545: 476, + 0x9549: 477, + 0x9551: 478, + 0x9553: 479, + 0x9555: 480, + 0x9556: 481, + 0x9557: 482, + 0x9561: 483, + 0x9565: 484, + 0x9569: 485, + 0x9576: 486, + 0x9577: 487, + 0x9581: 488, + 0x9585: 489, + 0x95A1: 490, + 0x95A2: 491, + 0x95A5: 492, + 0x95A8: 493, + 0x95A9: 494, + 0x95AB: 495, + 0x95AD: 496, + 0x95B1: 497, + 0x95B3: 498, + 0x95B5: 499, + 0x95B7: 500, + 0x95B9: 501, + 0x95BB: 502, + 0x95C1: 503, + 0x95C5: 504, + 0x95C9: 505, + 0x95E1: 506, + 0x95F6: 507, + 0x9641: 508, + 0x9645: 509, + 0x9649: 510, + 0x9651: 511, + 0x9653: 512, + 0x9655: 513, + 0x9661: 514, + 0x9681: 515, + 0x9682: 516, + 0x9685: 517, + 0x9689: 518, + 0x9691: 519, + 0x9693: 520, + 0x9695: 521, + 0x9697: 522, + 0x96A1: 523, + 0x96B6: 524, + 0x96C1: 525, + 0x96D7: 526, + 0x96E1: 527, + 0x96E5: 528, + 0x96E9: 529, + 0x96F3: 530, + 0x96F5: 531, + 0x96F7: 532, + 0x9741: 533, + 0x9745: 534, + 0x9749: 535, + 0x9751: 536, + 0x9757: 537, + 0x9761: 538, + 0x9762: 539, + 0x9765: 540, + 0x9768: 541, + 0x9769: 542, + 0x976B: 543, + 0x9771: 544, + 0x9773: 545, + 0x9775: 546, + 0x9777: 547, + 0x9781: 548, + 0x97A1: 549, + 0x97A2: 550, + 0x97A5: 551, + 0x97A8: 552, + 0x97A9: 553, + 0x97B1: 554, + 0x97B3: 555, + 0x97B5: 556, + 0x97B6: 557, + 0x97B7: 558, + 0x97B8: 559, + 0x9861: 560, + 0x9862: 561, + 0x9865: 562, + 0x9869: 563, + 0x9871: 564, + 0x9873: 565, + 0x9875: 566, + 0x9876: 567, + 0x9877: 568, + 0x987D: 569, + 0x9881: 570, + 0x9882: 571, + 0x9885: 572, + 0x9889: 573, + 0x9891: 574, + 0x9893: 575, + 0x9895: 576, + 0x9896: 577, + 0x9897: 578, + 0x98E1: 579, + 0x98E2: 580, + 0x98E5: 581, + 0x98E9: 582, + 0x98EB: 583, + 0x98EC: 584, + 0x98F1: 585, + 0x98F3: 586, + 0x98F5: 587, + 0x98F6: 588, + 0x98F7: 589, + 0x98FD: 590, + 0x9941: 591, + 0x9942: 592, + 0x9945: 593, + 0x9949: 594, + 0x9951: 595, + 0x9953: 596, + 0x9955: 597, + 0x9956: 598, + 0x9957: 599, + 0x9961: 600, + 0x9976: 601, + 0x99A1: 602, + 0x99A2: 603, + 0x99A5: 604, + 0x99A9: 605, + 0x99B7: 606, + 0x99C1: 607, + 0x99C9: 608, + 0x99E1: 609, + 0x9A41: 610, + 0x9A45: 611, + 0x9A81: 612, + 0x9A82: 613, + 0x9A85: 614, + 0x9A89: 615, + 0x9A90: 616, + 0x9A91: 617, + 0x9A97: 618, + 0x9AC1: 619, + 0x9AE1: 620, + 0x9AE5: 621, + 0x9AE9: 622, + 0x9AF1: 623, + 0x9AF3: 624, + 0x9AF7: 625, + 0x9B61: 626, + 0x9B62: 627, + 0x9B65: 628, + 0x9B68: 629, + 0x9B69: 630, + 0x9B71: 631, + 0x9B73: 632, + 0x9B75: 633, + 0x9B81: 634, + 0x9B85: 635, + 0x9B89: 636, + 0x9B91: 637, + 0x9B93: 638, + 0x9BA1: 639, + 0x9BA5: 640, + 0x9BA9: 641, + 0x9BB1: 642, + 0x9BB3: 643, + 0x9BB5: 644, + 0x9BB7: 645, + 0x9C61: 646, + 0x9C62: 647, + 0x9C65: 648, + 0x9C69: 649, + 0x9C71: 650, + 0x9C73: 651, + 0x9C75: 652, + 0x9C76: 653, + 0x9C77: 654, + 0x9C78: 655, + 0x9C7C: 656, + 0x9C7D: 657, + 0x9C81: 658, + 0x9C82: 659, + 0x9C85: 660, + 0x9C89: 661, + 0x9C91: 662, + 0x9C93: 663, + 0x9C95: 664, + 0x9C96: 665, + 0x9C97: 666, + 0x9CA1: 667, + 0x9CA2: 668, + 0x9CA5: 669, + 0x9CB5: 670, + 0x9CB7: 671, + 0x9CE1: 672, + 0x9CE2: 673, + 0x9CE5: 674, + 0x9CE9: 675, + 0x9CF1: 676, + 0x9CF3: 677, + 0x9CF5: 678, + 0x9CF6: 679, + 0x9CF7: 680, + 0x9CFD: 681, + 0x9D41: 682, + 0x9D42: 683, + 0x9D45: 684, + 0x9D49: 685, + 0x9D51: 686, + 0x9D53: 687, + 0x9D55: 688, + 0x9D57: 689, + 0x9D61: 690, + 0x9D62: 691, + 0x9D65: 692, + 0x9D69: 693, + 0x9D71: 694, + 0x9D73: 695, + 0x9D75: 696, + 0x9D76: 697, + 0x9D77: 698, + 0x9D81: 699, + 0x9D85: 700, + 0x9D93: 701, + 0x9D95: 702, + 0x9DA1: 703, + 0x9DA2: 704, + 0x9DA5: 705, + 0x9DA9: 706, + 0x9DB1: 707, + 0x9DB3: 708, + 0x9DB5: 709, + 0x9DB7: 710, + 0x9DC1: 711, + 0x9DC5: 712, + 0x9DD7: 713, + 0x9DF6: 714, + 0x9E41: 715, + 0x9E45: 716, + 0x9E49: 717, + 0x9E51: 718, + 0x9E53: 719, + 0x9E55: 720, + 0x9E57: 721, + 0x9E61: 722, + 0x9E65: 723, + 0x9E69: 724, + 0x9E73: 725, + 0x9E75: 726, + 0x9E77: 727, + 0x9E81: 728, + 0x9E82: 729, + 0x9E85: 730, + 0x9E89: 731, + 0x9E91: 732, + 0x9E93: 733, + 0x9E95: 734, + 0x9E97: 735, + 0x9EA1: 736, + 0x9EB6: 737, + 0x9EC1: 738, + 0x9EE1: 739, + 0x9EE2: 740, + 0x9EE5: 741, + 0x9EE9: 742, + 0x9EF1: 743, + 0x9EF5: 744, + 0x9EF7: 745, + 0x9F41: 746, + 0x9F42: 747, + 0x9F45: 748, + 0x9F49: 749, + 0x9F51: 750, + 0x9F53: 751, + 0x9F55: 752, + 0x9F57: 753, + 0x9F61: 754, + 0x9F62: 755, + 0x9F65: 756, + 0x9F69: 757, + 0x9F71: 758, + 0x9F73: 759, + 0x9F75: 760, + 0x9F77: 761, + 0x9F78: 762, + 0x9F7B: 763, + 0x9F7C: 764, + 0x9FA1: 765, + 0x9FA2: 766, + 0x9FA5: 767, + 0x9FA9: 768, + 0x9FB1: 769, + 0x9FB3: 770, + 0x9FB5: 771, + 0x9FB7: 772, + 0xA061: 773, + 0xA062: 774, + 0xA065: 775, + 0xA067: 776, + 0xA068: 777, + 0xA069: 778, + 0xA06A: 779, + 0xA06B: 780, + 0xA071: 781, + 0xA073: 782, + 0xA075: 783, + 0xA077: 784, + 0xA078: 785, + 0xA07B: 786, + 0xA07D: 787, + 0xA081: 788, + 0xA082: 789, + 0xA085: 790, + 0xA089: 791, + 0xA091: 792, + 0xA093: 793, + 0xA095: 794, + 0xA096: 795, + 0xA097: 796, + 0xA098: 797, + 0xA0A1: 798, + 0xA0A2: 799, + 0xA0A9: 800, + 0xA0B7: 801, + 0xA0E1: 802, + 0xA0E2: 803, + 0xA0E5: 804, + 0xA0E9: 805, + 0xA0EB: 806, + 0xA0F1: 807, + 0xA0F3: 808, + 0xA0F5: 809, + 0xA0F7: 810, + 0xA0F8: 811, + 0xA0FD: 812, + 0xA141: 813, + 0xA142: 814, + 0xA145: 815, + 0xA149: 816, + 0xA151: 817, + 0xA153: 818, + 0xA155: 819, + 0xA156: 820, + 0xA157: 821, + 0xA161: 822, + 0xA162: 823, + 0xA165: 824, + 0xA169: 825, + 0xA175: 826, + 0xA176: 827, + 0xA177: 828, + 0xA179: 829, + 0xA181: 830, + 0xA1A1: 831, + 0xA1A2: 832, + 0xA1A4: 833, + 0xA1A5: 834, + 0xA1A9: 835, + 0xA1AB: 836, + 0xA1B1: 837, + 0xA1B3: 838, + 0xA1B5: 839, + 0xA1B7: 840, + 0xA1C1: 841, + 0xA1C5: 842, + 0xA1D6: 843, + 0xA1D7: 844, + 0xA241: 845, + 0xA245: 846, + 0xA249: 847, + 0xA253: 848, + 0xA255: 849, + 0xA257: 850, + 0xA261: 851, + 0xA265: 852, + 0xA269: 853, + 0xA273: 854, + 0xA275: 855, + 0xA281: 856, + 0xA282: 857, + 0xA283: 858, + 0xA285: 859, + 0xA288: 860, + 0xA289: 861, + 0xA28A: 862, + 0xA28B: 863, + 0xA291: 864, + 0xA293: 865, + 0xA295: 866, + 0xA297: 867, + 0xA29B: 868, + 0xA29D: 869, + 0xA2A1: 870, + 0xA2A5: 871, + 0xA2A9: 872, + 0xA2B3: 873, + 0xA2B5: 874, + 0xA2C1: 875, + 0xA2E1: 876, + 0xA2E5: 877, + 0xA2E9: 878, + 0xA341: 879, + 0xA345: 880, + 0xA349: 881, + 0xA351: 882, + 0xA355: 883, + 0xA361: 884, + 0xA365: 885, + 0xA369: 886, + 0xA371: 887, + 0xA375: 888, + 0xA3A1: 889, + 0xA3A2: 890, + 0xA3A5: 891, + 0xA3A8: 892, + 0xA3A9: 893, + 0xA3AB: 894, + 0xA3B1: 895, + 0xA3B3: 896, + 0xA3B5: 897, + 0xA3B6: 898, + 0xA3B7: 899, + 0xA3B9: 900, + 0xA3BB: 901, + 0xA461: 902, + 0xA462: 903, + 0xA463: 904, + 0xA464: 905, + 0xA465: 906, + 0xA468: 907, + 0xA469: 908, + 0xA46A: 909, + 0xA46B: 910, + 0xA46C: 911, + 0xA471: 912, + 0xA473: 913, + 0xA475: 914, + 0xA477: 915, + 0xA47B: 916, + 0xA481: 917, + 0xA482: 918, + 0xA485: 919, + 0xA489: 920, + 0xA491: 921, + 0xA493: 922, + 0xA495: 923, + 0xA496: 924, + 0xA497: 925, + 0xA49B: 926, + 0xA4A1: 927, + 0xA4A2: 928, + 0xA4A5: 929, + 0xA4B3: 930, + 0xA4E1: 931, + 0xA4E2: 932, + 0xA4E5: 933, + 0xA4E8: 934, + 0xA4E9: 935, + 0xA4EB: 936, + 0xA4F1: 937, + 0xA4F3: 938, + 0xA4F5: 939, + 0xA4F7: 940, + 0xA4F8: 941, + 0xA541: 942, + 0xA542: 943, + 0xA545: 944, + 0xA548: 945, + 0xA549: 946, + 0xA551: 947, + 0xA553: 948, + 0xA555: 949, + 0xA556: 950, + 0xA557: 951, + 0xA561: 952, + 0xA562: 953, + 0xA565: 954, + 0xA569: 955, + 0xA573: 956, + 0xA575: 957, + 0xA576: 958, + 0xA577: 959, + 0xA57B: 960, + 0xA581: 961, + 0xA585: 962, + 0xA5A1: 963, + 0xA5A2: 964, + 0xA5A3: 965, + 0xA5A5: 966, + 0xA5A9: 967, + 0xA5B1: 968, + 0xA5B3: 969, + 0xA5B5: 970, + 0xA5B7: 971, + 0xA5C1: 972, + 0xA5C5: 973, + 0xA5D6: 974, + 0xA5E1: 975, + 0xA5F6: 976, + 0xA641: 977, + 0xA642: 978, + 0xA645: 979, + 0xA649: 980, + 0xA651: 981, + 0xA653: 982, + 0xA661: 983, + 0xA665: 984, + 0xA681: 985, + 0xA682: 986, + 0xA685: 987, + 0xA688: 988, + 0xA689: 989, + 0xA68A: 990, + 0xA68B: 991, + 0xA691: 992, + 0xA693: 993, + 0xA695: 994, + 0xA697: 995, + 0xA69B: 996, + 0xA69C: 997, + 0xA6A1: 998, + 0xA6A9: 999, + 0xA6B6: 1000, + 0xA6C1: 1001, + 0xA6E1: 1002, + 0xA6E2: 1003, + 0xA6E5: 1004, + 0xA6E9: 1005, + 0xA6F7: 1006, + 0xA741: 1007, + 0xA745: 1008, + 0xA749: 1009, + 0xA751: 1010, + 0xA755: 1011, + 0xA757: 1012, + 0xA761: 1013, + 0xA762: 1014, + 0xA765: 1015, + 0xA769: 1016, + 0xA771: 1017, + 0xA773: 1018, + 0xA775: 1019, + 0xA7A1: 1020, + 0xA7A2: 1021, + 0xA7A5: 1022, + 0xA7A9: 1023, + 0xA7AB: 1024, + 0xA7B1: 1025, + 0xA7B3: 1026, + 0xA7B5: 1027, + 0xA7B7: 1028, + 0xA7B8: 1029, + 0xA7B9: 1030, + 0xA861: 1031, + 0xA862: 1032, + 0xA865: 1033, + 0xA869: 1034, + 0xA86B: 1035, + 0xA871: 1036, + 0xA873: 1037, + 0xA875: 1038, + 0xA876: 1039, + 0xA877: 1040, + 0xA87D: 1041, + 0xA881: 1042, + 0xA882: 1043, + 0xA885: 1044, + 0xA889: 1045, + 0xA891: 1046, + 0xA893: 1047, + 0xA895: 1048, + 0xA896: 1049, + 0xA897: 1050, + 0xA8A1: 1051, + 0xA8A2: 1052, + 0xA8B1: 1053, + 0xA8E1: 1054, + 0xA8E2: 1055, + 0xA8E5: 1056, + 0xA8E8: 1057, + 0xA8E9: 1058, + 0xA8F1: 1059, + 0xA8F5: 1060, + 0xA8F6: 1061, + 0xA8F7: 1062, + 0xA941: 1063, + 0xA957: 1064, + 0xA961: 1065, + 0xA962: 1066, + 0xA971: 1067, + 0xA973: 1068, + 0xA975: 1069, + 0xA976: 1070, + 0xA977: 1071, + 0xA9A1: 1072, + 0xA9A2: 1073, + 0xA9A5: 1074, + 0xA9A9: 1075, + 0xA9B1: 1076, + 0xA9B3: 1077, + 0xA9B7: 1078, + 0xAA41: 1079, + 0xAA61: 1080, + 0xAA77: 1081, + 0xAA81: 1082, + 0xAA82: 1083, + 0xAA85: 1084, + 0xAA89: 1085, + 0xAA91: 1086, + 0xAA95: 1087, + 0xAA97: 1088, + 0xAB41: 1089, + 0xAB57: 1090, + 0xAB61: 1091, + 0xAB65: 1092, + 0xAB69: 1093, + 0xAB71: 1094, + 0xAB73: 1095, + 0xABA1: 1096, + 0xABA2: 1097, + 0xABA5: 1098, + 0xABA9: 1099, + 0xABB1: 1100, + 0xABB3: 1101, + 0xABB5: 1102, + 0xABB7: 1103, + 0xAC61: 1104, + 0xAC62: 1105, + 0xAC64: 1106, + 0xAC65: 1107, + 0xAC68: 1108, + 0xAC69: 1109, + 0xAC6A: 1110, + 0xAC6B: 1111, + 0xAC71: 1112, + 0xAC73: 1113, + 0xAC75: 1114, + 0xAC76: 1115, + 0xAC77: 1116, + 0xAC7B: 1117, + 0xAC81: 1118, + 0xAC82: 1119, + 0xAC85: 1120, + 0xAC89: 1121, + 0xAC91: 1122, + 0xAC93: 1123, + 0xAC95: 1124, + 0xAC96: 1125, + 0xAC97: 1126, + 0xACA1: 1127, + 0xACA2: 1128, + 0xACA5: 1129, + 0xACA9: 1130, + 0xACB1: 1131, + 0xACB3: 1132, + 0xACB5: 1133, + 0xACB7: 1134, + 0xACC1: 1135, + 0xACC5: 1136, + 0xACC9: 1137, + 0xACD1: 1138, + 0xACD7: 1139, + 0xACE1: 1140, + 0xACE2: 1141, + 0xACE3: 1142, + 0xACE4: 1143, + 0xACE5: 1144, + 0xACE8: 1145, + 0xACE9: 1146, + 0xACEB: 1147, + 0xACEC: 1148, + 0xACF1: 1149, + 0xACF3: 1150, + 0xACF5: 1151, + 0xACF6: 1152, + 0xACF7: 1153, + 0xACFC: 1154, + 0xAD41: 1155, + 0xAD42: 1156, + 0xAD45: 1157, + 0xAD49: 1158, + 0xAD51: 1159, + 0xAD53: 1160, + 0xAD55: 1161, + 0xAD56: 1162, + 0xAD57: 1163, + 0xAD61: 1164, + 0xAD62: 1165, + 0xAD65: 1166, + 0xAD69: 1167, + 0xAD71: 1168, + 0xAD73: 1169, + 0xAD75: 1170, + 0xAD76: 1171, + 0xAD77: 1172, + 0xAD81: 1173, + 0xAD85: 1174, + 0xAD89: 1175, + 0xAD97: 1176, + 0xADA1: 1177, + 0xADA2: 1178, + 0xADA3: 1179, + 0xADA5: 1180, + 0xADA9: 1181, + 0xADAB: 1182, + 0xADB1: 1183, + 0xADB3: 1184, + 0xADB5: 1185, + 0xADB7: 1186, + 0xADBB: 1187, + 0xADC1: 1188, + 0xADC2: 1189, + 0xADC5: 1190, + 0xADC9: 1191, + 0xADD7: 1192, + 0xADE1: 1193, + 0xADE5: 1194, + 0xADE9: 1195, + 0xADF1: 1196, + 0xADF5: 1197, + 0xADF6: 1198, + 0xAE41: 1199, + 0xAE45: 1200, + 0xAE49: 1201, + 0xAE51: 1202, + 0xAE53: 1203, + 0xAE55: 1204, + 0xAE61: 1205, + 0xAE62: 1206, + 0xAE65: 1207, + 0xAE69: 1208, + 0xAE71: 1209, + 0xAE73: 1210, + 0xAE75: 1211, + 0xAE77: 1212, + 0xAE81: 1213, + 0xAE82: 1214, + 0xAE85: 1215, + 0xAE88: 1216, + 0xAE89: 1217, + 0xAE91: 1218, + 0xAE93: 1219, + 0xAE95: 1220, + 0xAE97: 1221, + 0xAE99: 1222, + 0xAE9B: 1223, + 0xAE9C: 1224, + 0xAEA1: 1225, + 0xAEB6: 1226, + 0xAEC1: 1227, + 0xAEC2: 1228, + 0xAEC5: 1229, + 0xAEC9: 1230, + 0xAED1: 1231, + 0xAED7: 1232, + 0xAEE1: 1233, + 0xAEE2: 1234, + 0xAEE5: 1235, + 0xAEE9: 1236, + 0xAEF1: 1237, + 0xAEF3: 1238, + 0xAEF5: 1239, + 0xAEF7: 1240, + 0xAF41: 1241, + 0xAF42: 1242, + 0xAF49: 1243, + 0xAF51: 1244, + 0xAF55: 1245, + 0xAF57: 1246, + 0xAF61: 1247, + 0xAF62: 1248, + 0xAF65: 1249, + 0xAF69: 1250, + 0xAF6A: 1251, + 0xAF71: 1252, + 0xAF73: 1253, + 0xAF75: 1254, + 0xAF77: 1255, + 0xAFA1: 1256, + 0xAFA2: 1257, + 0xAFA5: 1258, + 0xAFA8: 1259, + 0xAFA9: 1260, + 0xAFB0: 1261, + 0xAFB1: 1262, + 0xAFB3: 1263, + 0xAFB5: 1264, + 0xAFB7: 1265, + 0xAFBC: 1266, + 0xB061: 1267, + 0xB062: 1268, + 0xB064: 1269, + 0xB065: 1270, + 0xB069: 1271, + 0xB071: 1272, + 0xB073: 1273, + 0xB076: 1274, + 0xB077: 1275, + 0xB07D: 1276, + 0xB081: 1277, + 0xB082: 1278, + 0xB085: 1279, + 0xB089: 1280, + 0xB091: 1281, + 0xB093: 1282, + 0xB096: 1283, + 0xB097: 1284, + 0xB0B7: 1285, + 0xB0E1: 1286, + 0xB0E2: 1287, + 0xB0E5: 1288, + 0xB0E9: 1289, + 0xB0EB: 1290, + 0xB0F1: 1291, + 0xB0F3: 1292, + 0xB0F6: 1293, + 0xB0F7: 1294, + 0xB141: 1295, + 0xB145: 1296, + 0xB149: 1297, + 0xB185: 1298, + 0xB1A1: 1299, + 0xB1A2: 1300, + 0xB1A5: 1301, + 0xB1A8: 1302, + 0xB1A9: 1303, + 0xB1AB: 1304, + 0xB1B1: 1305, + 0xB1B3: 1306, + 0xB1B7: 1307, + 0xB1C1: 1308, + 0xB1C2: 1309, + 0xB1C5: 1310, + 0xB1D6: 1311, + 0xB1E1: 1312, + 0xB1F6: 1313, + 0xB241: 1314, + 0xB245: 1315, + 0xB249: 1316, + 0xB251: 1317, + 0xB253: 1318, + 0xB261: 1319, + 0xB281: 1320, + 0xB282: 1321, + 0xB285: 1322, + 0xB289: 1323, + 0xB291: 1324, + 0xB293: 1325, + 0xB297: 1326, + 0xB2A1: 1327, + 0xB2B6: 1328, + 0xB2C1: 1329, + 0xB2E1: 1330, + 0xB2E5: 1331, + 0xB357: 1332, + 0xB361: 1333, + 0xB362: 1334, + 0xB365: 1335, + 0xB369: 1336, + 0xB36B: 1337, + 0xB370: 1338, + 0xB371: 1339, + 0xB373: 1340, + 0xB381: 1341, + 0xB385: 1342, + 0xB389: 1343, + 0xB391: 1344, + 0xB3A1: 1345, + 0xB3A2: 1346, + 0xB3A5: 1347, + 0xB3A9: 1348, + 0xB3B1: 1349, + 0xB3B3: 1350, + 0xB3B5: 1351, + 0xB3B7: 1352, + 0xB461: 1353, + 0xB462: 1354, + 0xB465: 1355, + 0xB466: 1356, + 0xB467: 1357, + 0xB469: 1358, + 0xB46A: 1359, + 0xB46B: 1360, + 0xB470: 1361, + 0xB471: 1362, + 0xB473: 1363, + 0xB475: 1364, + 0xB476: 1365, + 0xB477: 1366, + 0xB47B: 1367, + 0xB47C: 1368, + 0xB481: 1369, + 0xB482: 1370, + 0xB485: 1371, + 0xB489: 1372, + 0xB491: 1373, + 0xB493: 1374, + 0xB495: 1375, + 0xB496: 1376, + 0xB497: 1377, + 0xB4A1: 1378, + 0xB4A2: 1379, + 0xB4A5: 1380, + 0xB4A9: 1381, + 0xB4AC: 1382, + 0xB4B1: 1383, + 0xB4B3: 1384, + 0xB4B5: 1385, + 0xB4B7: 1386, + 0xB4BB: 1387, + 0xB4BD: 1388, + 0xB4C1: 1389, + 0xB4C5: 1390, + 0xB4C9: 1391, + 0xB4D3: 1392, + 0xB4E1: 1393, + 0xB4E2: 1394, + 0xB4E5: 1395, + 0xB4E6: 1396, + 0xB4E8: 1397, + 0xB4E9: 1398, + 0xB4EA: 1399, + 0xB4EB: 1400, + 0xB4F1: 1401, + 0xB4F3: 1402, + 0xB4F4: 1403, + 0xB4F5: 1404, + 0xB4F6: 1405, + 0xB4F7: 1406, + 0xB4F8: 1407, + 0xB4FA: 1408, + 0xB4FC: 1409, + 0xB541: 1410, + 0xB542: 1411, + 0xB545: 1412, + 0xB549: 1413, + 0xB551: 1414, + 0xB553: 1415, + 0xB555: 1416, + 0xB557: 1417, + 0xB561: 1418, + 0xB562: 1419, + 0xB563: 1420, + 0xB565: 1421, + 0xB569: 1422, + 0xB56B: 1423, + 0xB56C: 1424, + 0xB571: 1425, + 0xB573: 1426, + 0xB574: 1427, + 0xB575: 1428, + 0xB576: 1429, + 0xB577: 1430, + 0xB57B: 1431, + 0xB57C: 1432, + 0xB57D: 1433, + 0xB581: 1434, + 0xB585: 1435, + 0xB589: 1436, + 0xB591: 1437, + 0xB593: 1438, + 0xB595: 1439, + 0xB596: 1440, + 0xB5A1: 1441, + 0xB5A2: 1442, + 0xB5A5: 1443, + 0xB5A9: 1444, + 0xB5AA: 1445, + 0xB5AB: 1446, + 0xB5AD: 1447, + 0xB5B0: 1448, + 0xB5B1: 1449, + 0xB5B3: 1450, + 0xB5B5: 1451, + 0xB5B7: 1452, + 0xB5B9: 1453, + 0xB5C1: 1454, + 0xB5C2: 1455, + 0xB5C5: 1456, + 0xB5C9: 1457, + 0xB5D1: 1458, + 0xB5D3: 1459, + 0xB5D5: 1460, + 0xB5D6: 1461, + 0xB5D7: 1462, + 0xB5E1: 1463, + 0xB5E2: 1464, + 0xB5E5: 1465, + 0xB5F1: 1466, + 0xB5F5: 1467, + 0xB5F7: 1468, + 0xB641: 1469, + 0xB642: 1470, + 0xB645: 1471, + 0xB649: 1472, + 0xB651: 1473, + 0xB653: 1474, + 0xB655: 1475, + 0xB657: 1476, + 0xB661: 1477, + 0xB662: 1478, + 0xB665: 1479, + 0xB669: 1480, + 0xB671: 1481, + 0xB673: 1482, + 0xB675: 1483, + 0xB677: 1484, + 0xB681: 1485, + 0xB682: 1486, + 0xB685: 1487, + 0xB689: 1488, + 0xB68A: 1489, + 0xB68B: 1490, + 0xB691: 1491, + 0xB693: 1492, + 0xB695: 1493, + 0xB697: 1494, + 0xB6A1: 1495, + 0xB6A2: 1496, + 0xB6A5: 1497, + 0xB6A9: 1498, + 0xB6B1: 1499, + 0xB6B3: 1500, + 0xB6B6: 1501, + 0xB6B7: 1502, + 0xB6C1: 1503, + 0xB6C2: 1504, + 0xB6C5: 1505, + 0xB6C9: 1506, + 0xB6D1: 1507, + 0xB6D3: 1508, + 0xB6D7: 1509, + 0xB6E1: 1510, + 0xB6E2: 1511, + 0xB6E5: 1512, + 0xB6E9: 1513, + 0xB6F1: 1514, + 0xB6F3: 1515, + 0xB6F5: 1516, + 0xB6F7: 1517, + 0xB741: 1518, + 0xB742: 1519, + 0xB745: 1520, + 0xB749: 1521, + 0xB751: 1522, + 0xB753: 1523, + 0xB755: 1524, + 0xB757: 1525, + 0xB759: 1526, + 0xB761: 1527, + 0xB762: 1528, + 0xB765: 1529, + 0xB769: 1530, + 0xB76F: 1531, + 0xB771: 1532, + 0xB773: 1533, + 0xB775: 1534, + 0xB777: 1535, + 0xB778: 1536, + 0xB779: 1537, + 0xB77A: 1538, + 0xB77B: 1539, + 0xB77C: 1540, + 0xB77D: 1541, + 0xB781: 1542, + 0xB785: 1543, + 0xB789: 1544, + 0xB791: 1545, + 0xB795: 1546, + 0xB7A1: 1547, + 0xB7A2: 1548, + 0xB7A5: 1549, + 0xB7A9: 1550, + 0xB7AA: 1551, + 0xB7AB: 1552, + 0xB7B0: 1553, + 0xB7B1: 1554, + 0xB7B3: 1555, + 0xB7B5: 1556, + 0xB7B6: 1557, + 0xB7B7: 1558, + 0xB7B8: 1559, + 0xB7BC: 1560, + 0xB861: 1561, + 0xB862: 1562, + 0xB865: 1563, + 0xB867: 1564, + 0xB868: 1565, + 0xB869: 1566, + 0xB86B: 1567, + 0xB871: 1568, + 0xB873: 1569, + 0xB875: 1570, + 0xB876: 1571, + 0xB877: 1572, + 0xB878: 1573, + 0xB881: 1574, + 0xB882: 1575, + 0xB885: 1576, + 0xB889: 1577, + 0xB891: 1578, + 0xB893: 1579, + 0xB895: 1580, + 0xB896: 1581, + 0xB897: 1582, + 0xB8A1: 1583, + 0xB8A2: 1584, + 0xB8A5: 1585, + 0xB8A7: 1586, + 0xB8A9: 1587, + 0xB8B1: 1588, + 0xB8B7: 1589, + 0xB8C1: 1590, + 0xB8C5: 1591, + 0xB8C9: 1592, + 0xB8E1: 1593, + 0xB8E2: 1594, + 0xB8E5: 1595, + 0xB8E9: 1596, + 0xB8EB: 1597, + 0xB8F1: 1598, + 0xB8F3: 1599, + 0xB8F5: 1600, + 0xB8F7: 1601, + 0xB8F8: 1602, + 0xB941: 1603, + 0xB942: 1604, + 0xB945: 1605, + 0xB949: 1606, + 0xB951: 1607, + 0xB953: 1608, + 0xB955: 1609, + 0xB957: 1610, + 0xB961: 1611, + 0xB965: 1612, + 0xB969: 1613, + 0xB971: 1614, + 0xB973: 1615, + 0xB976: 1616, + 0xB977: 1617, + 0xB981: 1618, + 0xB9A1: 1619, + 0xB9A2: 1620, + 0xB9A5: 1621, + 0xB9A9: 1622, + 0xB9AB: 1623, + 0xB9B1: 1624, + 0xB9B3: 1625, + 0xB9B5: 1626, + 0xB9B7: 1627, + 0xB9B8: 1628, + 0xB9B9: 1629, + 0xB9BD: 1630, + 0xB9C1: 1631, + 0xB9C2: 1632, + 0xB9C9: 1633, + 0xB9D3: 1634, + 0xB9D5: 1635, + 0xB9D7: 1636, + 0xB9E1: 1637, + 0xB9F6: 1638, + 0xB9F7: 1639, + 0xBA41: 1640, + 0xBA45: 1641, + 0xBA49: 1642, + 0xBA51: 1643, + 0xBA53: 1644, + 0xBA55: 1645, + 0xBA57: 1646, + 0xBA61: 1647, + 0xBA62: 1648, + 0xBA65: 1649, + 0xBA77: 1650, + 0xBA81: 1651, + 0xBA82: 1652, + 0xBA85: 1653, + 0xBA89: 1654, + 0xBA8A: 1655, + 0xBA8B: 1656, + 0xBA91: 1657, + 0xBA93: 1658, + 0xBA95: 1659, + 0xBA97: 1660, + 0xBAA1: 1661, + 0xBAB6: 1662, + 0xBAC1: 1663, + 0xBAE1: 1664, + 0xBAE2: 1665, + 0xBAE5: 1666, + 0xBAE9: 1667, + 0xBAF1: 1668, + 0xBAF3: 1669, + 0xBAF5: 1670, + 0xBB41: 1671, + 0xBB45: 1672, + 0xBB49: 1673, + 0xBB51: 1674, + 0xBB61: 1675, + 0xBB62: 1676, + 0xBB65: 1677, + 0xBB69: 1678, + 0xBB71: 1679, + 0xBB73: 1680, + 0xBB75: 1681, + 0xBB77: 1682, + 0xBBA1: 1683, + 0xBBA2: 1684, + 0xBBA5: 1685, + 0xBBA8: 1686, + 0xBBA9: 1687, + 0xBBAB: 1688, + 0xBBB1: 1689, + 0xBBB3: 1690, + 0xBBB5: 1691, + 0xBBB7: 1692, + 0xBBB8: 1693, + 0xBBBB: 1694, + 0xBBBC: 1695, + 0xBC61: 1696, + 0xBC62: 1697, + 0xBC65: 1698, + 0xBC67: 1699, + 0xBC69: 1700, + 0xBC6C: 1701, + 0xBC71: 1702, + 0xBC73: 1703, + 0xBC75: 1704, + 0xBC76: 1705, + 0xBC77: 1706, + 0xBC81: 1707, + 0xBC82: 1708, + 0xBC85: 1709, + 0xBC89: 1710, + 0xBC91: 1711, + 0xBC93: 1712, + 0xBC95: 1713, + 0xBC96: 1714, + 0xBC97: 1715, + 0xBCA1: 1716, + 0xBCA5: 1717, + 0xBCB7: 1718, + 0xBCE1: 1719, + 0xBCE2: 1720, + 0xBCE5: 1721, + 0xBCE9: 1722, + 0xBCF1: 1723, + 0xBCF3: 1724, + 0xBCF5: 1725, + 0xBCF6: 1726, + 0xBCF7: 1727, + 0xBD41: 1728, + 0xBD57: 1729, + 0xBD61: 1730, + 0xBD76: 1731, + 0xBDA1: 1732, + 0xBDA2: 1733, + 0xBDA5: 1734, + 0xBDA9: 1735, + 0xBDB1: 1736, + 0xBDB3: 1737, + 0xBDB5: 1738, + 0xBDB7: 1739, + 0xBDB9: 1740, + 0xBDC1: 1741, + 0xBDC2: 1742, + 0xBDC9: 1743, + 0xBDD6: 1744, + 0xBDE1: 1745, + 0xBDF6: 1746, + 0xBE41: 1747, + 0xBE45: 1748, + 0xBE49: 1749, + 0xBE51: 1750, + 0xBE53: 1751, + 0xBE77: 1752, + 0xBE81: 1753, + 0xBE82: 1754, + 0xBE85: 1755, + 0xBE89: 1756, + 0xBE91: 1757, + 0xBE93: 1758, + 0xBE97: 1759, + 0xBEA1: 1760, + 0xBEB6: 1761, + 0xBEB7: 1762, + 0xBEE1: 1763, + 0xBF41: 1764, + 0xBF61: 1765, + 0xBF71: 1766, + 0xBF75: 1767, + 0xBF77: 1768, + 0xBFA1: 1769, + 0xBFA2: 1770, + 0xBFA5: 1771, + 0xBFA9: 1772, + 0xBFB1: 1773, + 0xBFB3: 1774, + 0xBFB7: 1775, + 0xBFB8: 1776, + 0xBFBD: 1777, + 0xC061: 1778, + 0xC062: 1779, + 0xC065: 1780, + 0xC067: 1781, + 0xC069: 1782, + 0xC071: 1783, + 0xC073: 1784, + 0xC075: 1785, + 0xC076: 1786, + 0xC077: 1787, + 0xC078: 1788, + 0xC081: 1789, + 0xC082: 1790, + 0xC085: 1791, + 0xC089: 1792, + 0xC091: 1793, + 0xC093: 1794, + 0xC095: 1795, + 0xC096: 1796, + 0xC097: 1797, + 0xC0A1: 1798, + 0xC0A5: 1799, + 0xC0A7: 1800, + 0xC0A9: 1801, + 0xC0B1: 1802, + 0xC0B7: 1803, + 0xC0E1: 1804, + 0xC0E2: 1805, + 0xC0E5: 1806, + 0xC0E9: 1807, + 0xC0F1: 1808, + 0xC0F3: 1809, + 0xC0F5: 1810, + 0xC0F6: 1811, + 0xC0F7: 1812, + 0xC141: 1813, + 0xC142: 1814, + 0xC145: 1815, + 0xC149: 1816, + 0xC151: 1817, + 0xC153: 1818, + 0xC155: 1819, + 0xC157: 1820, + 0xC161: 1821, + 0xC165: 1822, + 0xC176: 1823, + 0xC181: 1824, + 0xC185: 1825, + 0xC197: 1826, + 0xC1A1: 1827, + 0xC1A2: 1828, + 0xC1A5: 1829, + 0xC1A9: 1830, + 0xC1B1: 1831, + 0xC1B3: 1832, + 0xC1B5: 1833, + 0xC1B7: 1834, + 0xC1C1: 1835, + 0xC1C5: 1836, + 0xC1C9: 1837, + 0xC1D7: 1838, + 0xC241: 1839, + 0xC245: 1840, + 0xC249: 1841, + 0xC251: 1842, + 0xC253: 1843, + 0xC255: 1844, + 0xC257: 1845, + 0xC261: 1846, + 0xC271: 1847, + 0xC281: 1848, + 0xC282: 1849, + 0xC285: 1850, + 0xC289: 1851, + 0xC291: 1852, + 0xC293: 1853, + 0xC295: 1854, + 0xC297: 1855, + 0xC2A1: 1856, + 0xC2B6: 1857, + 0xC2C1: 1858, + 0xC2C5: 1859, + 0xC2E1: 1860, + 0xC2E5: 1861, + 0xC2E9: 1862, + 0xC2F1: 1863, + 0xC2F3: 1864, + 0xC2F5: 1865, + 0xC2F7: 1866, + 0xC341: 1867, + 0xC345: 1868, + 0xC349: 1869, + 0xC351: 1870, + 0xC357: 1871, + 0xC361: 1872, + 0xC362: 1873, + 0xC365: 1874, + 0xC369: 1875, + 0xC371: 1876, + 0xC373: 1877, + 0xC375: 1878, + 0xC377: 1879, + 0xC3A1: 1880, + 0xC3A2: 1881, + 0xC3A5: 1882, + 0xC3A8: 1883, + 0xC3A9: 1884, + 0xC3AA: 1885, + 0xC3B1: 1886, + 0xC3B3: 1887, + 0xC3B5: 1888, + 0xC3B7: 1889, + 0xC461: 1890, + 0xC462: 1891, + 0xC465: 1892, + 0xC469: 1893, + 0xC471: 1894, + 0xC473: 1895, + 0xC475: 1896, + 0xC477: 1897, + 0xC481: 1898, + 0xC482: 1899, + 0xC485: 1900, + 0xC489: 1901, + 0xC491: 1902, + 0xC493: 1903, + 0xC495: 1904, + 0xC496: 1905, + 0xC497: 1906, + 0xC4A1: 1907, + 0xC4A2: 1908, + 0xC4B7: 1909, + 0xC4E1: 1910, + 0xC4E2: 1911, + 0xC4E5: 1912, + 0xC4E8: 1913, + 0xC4E9: 1914, + 0xC4F1: 1915, + 0xC4F3: 1916, + 0xC4F5: 1917, + 0xC4F6: 1918, + 0xC4F7: 1919, + 0xC541: 1920, + 0xC542: 1921, + 0xC545: 1922, + 0xC549: 1923, + 0xC551: 1924, + 0xC553: 1925, + 0xC555: 1926, + 0xC557: 1927, + 0xC561: 1928, + 0xC565: 1929, + 0xC569: 1930, + 0xC571: 1931, + 0xC573: 1932, + 0xC575: 1933, + 0xC576: 1934, + 0xC577: 1935, + 0xC581: 1936, + 0xC5A1: 1937, + 0xC5A2: 1938, + 0xC5A5: 1939, + 0xC5A9: 1940, + 0xC5B1: 1941, + 0xC5B3: 1942, + 0xC5B5: 1943, + 0xC5B7: 1944, + 0xC5C1: 1945, + 0xC5C2: 1946, + 0xC5C5: 1947, + 0xC5C9: 1948, + 0xC5D1: 1949, + 0xC5D7: 1950, + 0xC5E1: 1951, + 0xC5F7: 1952, + 0xC641: 1953, + 0xC649: 1954, + 0xC661: 1955, + 0xC681: 1956, + 0xC682: 1957, + 0xC685: 1958, + 0xC689: 1959, + 0xC691: 1960, + 0xC693: 1961, + 0xC695: 1962, + 0xC697: 1963, + 0xC6A1: 1964, + 0xC6A5: 1965, + 0xC6A9: 1966, + 0xC6B7: 1967, + 0xC6C1: 1968, + 0xC6D7: 1969, + 0xC6E1: 1970, + 0xC6E2: 1971, + 0xC6E5: 1972, + 0xC6E9: 1973, + 0xC6F1: 1974, + 0xC6F3: 1975, + 0xC6F5: 1976, + 0xC6F7: 1977, + 0xC741: 1978, + 0xC745: 1979, + 0xC749: 1980, + 0xC751: 1981, + 0xC761: 1982, + 0xC762: 1983, + 0xC765: 1984, + 0xC769: 1985, + 0xC771: 1986, + 0xC773: 1987, + 0xC777: 1988, + 0xC7A1: 1989, + 0xC7A2: 1990, + 0xC7A5: 1991, + 0xC7A9: 1992, + 0xC7B1: 1993, + 0xC7B3: 1994, + 0xC7B5: 1995, + 0xC7B7: 1996, + 0xC861: 1997, + 0xC862: 1998, + 0xC865: 1999, + 0xC869: 2000, + 0xC86A: 2001, + 0xC871: 2002, + 0xC873: 2003, + 0xC875: 2004, + 0xC876: 2005, + 0xC877: 2006, + 0xC881: 2007, + 0xC882: 2008, + 0xC885: 2009, + 0xC889: 2010, + 0xC891: 2011, + 0xC893: 2012, + 0xC895: 2013, + 0xC896: 2014, + 0xC897: 2015, + 0xC8A1: 2016, + 0xC8B7: 2017, + 0xC8E1: 2018, + 0xC8E2: 2019, + 0xC8E5: 2020, + 0xC8E9: 2021, + 0xC8EB: 2022, + 0xC8F1: 2023, + 0xC8F3: 2024, + 0xC8F5: 2025, + 0xC8F6: 2026, + 0xC8F7: 2027, + 0xC941: 2028, + 0xC942: 2029, + 0xC945: 2030, + 0xC949: 2031, + 0xC951: 2032, + 0xC953: 2033, + 0xC955: 2034, + 0xC957: 2035, + 0xC961: 2036, + 0xC965: 2037, + 0xC976: 2038, + 0xC981: 2039, + 0xC985: 2040, + 0xC9A1: 2041, + 0xC9A2: 2042, + 0xC9A5: 2043, + 0xC9A9: 2044, + 0xC9B1: 2045, + 0xC9B3: 2046, + 0xC9B5: 2047, + 0xC9B7: 2048, + 0xC9BC: 2049, + 0xC9C1: 2050, + 0xC9C5: 2051, + 0xC9E1: 2052, + 0xCA41: 2053, + 0xCA45: 2054, + 0xCA55: 2055, + 0xCA57: 2056, + 0xCA61: 2057, + 0xCA81: 2058, + 0xCA82: 2059, + 0xCA85: 2060, + 0xCA89: 2061, + 0xCA91: 2062, + 0xCA93: 2063, + 0xCA95: 2064, + 0xCA97: 2065, + 0xCAA1: 2066, + 0xCAB6: 2067, + 0xCAC1: 2068, + 0xCAE1: 2069, + 0xCAE2: 2070, + 0xCAE5: 2071, + 0xCAE9: 2072, + 0xCAF1: 2073, + 0xCAF3: 2074, + 0xCAF7: 2075, + 0xCB41: 2076, + 0xCB45: 2077, + 0xCB49: 2078, + 0xCB51: 2079, + 0xCB57: 2080, + 0xCB61: 2081, + 0xCB62: 2082, + 0xCB65: 2083, + 0xCB68: 2084, + 0xCB69: 2085, + 0xCB6B: 2086, + 0xCB71: 2087, + 0xCB73: 2088, + 0xCB75: 2089, + 0xCB81: 2090, + 0xCB85: 2091, + 0xCB89: 2092, + 0xCB91: 2093, + 0xCB93: 2094, + 0xCBA1: 2095, + 0xCBA2: 2096, + 0xCBA5: 2097, + 0xCBA9: 2098, + 0xCBB1: 2099, + 0xCBB3: 2100, + 0xCBB5: 2101, + 0xCBB7: 2102, + 0xCC61: 2103, + 0xCC62: 2104, + 0xCC63: 2105, + 0xCC65: 2106, + 0xCC69: 2107, + 0xCC6B: 2108, + 0xCC71: 2109, + 0xCC73: 2110, + 0xCC75: 2111, + 0xCC76: 2112, + 0xCC77: 2113, + 0xCC7B: 2114, + 0xCC81: 2115, + 0xCC82: 2116, + 0xCC85: 2117, + 0xCC89: 2118, + 0xCC91: 2119, + 0xCC93: 2120, + 0xCC95: 2121, + 0xCC96: 2122, + 0xCC97: 2123, + 0xCCA1: 2124, + 0xCCA2: 2125, + 0xCCE1: 2126, + 0xCCE2: 2127, + 0xCCE5: 2128, + 0xCCE9: 2129, + 0xCCF1: 2130, + 0xCCF3: 2131, + 0xCCF5: 2132, + 0xCCF6: 2133, + 0xCCF7: 2134, + 0xCD41: 2135, + 0xCD42: 2136, + 0xCD45: 2137, + 0xCD49: 2138, + 0xCD51: 2139, + 0xCD53: 2140, + 0xCD55: 2141, + 0xCD57: 2142, + 0xCD61: 2143, + 0xCD65: 2144, + 0xCD69: 2145, + 0xCD71: 2146, + 0xCD73: 2147, + 0xCD76: 2148, + 0xCD77: 2149, + 0xCD81: 2150, + 0xCD89: 2151, + 0xCD93: 2152, + 0xCD95: 2153, + 0xCDA1: 2154, + 0xCDA2: 2155, + 0xCDA5: 2156, + 0xCDA9: 2157, + 0xCDB1: 2158, + 0xCDB3: 2159, + 0xCDB5: 2160, + 0xCDB7: 2161, + 0xCDC1: 2162, + 0xCDD7: 2163, + 0xCE41: 2164, + 0xCE45: 2165, + 0xCE61: 2166, + 0xCE65: 2167, + 0xCE69: 2168, + 0xCE73: 2169, + 0xCE75: 2170, + 0xCE81: 2171, + 0xCE82: 2172, + 0xCE85: 2173, + 0xCE88: 2174, + 0xCE89: 2175, + 0xCE8B: 2176, + 0xCE91: 2177, + 0xCE93: 2178, + 0xCE95: 2179, + 0xCE97: 2180, + 0xCEA1: 2181, + 0xCEB7: 2182, + 0xCEE1: 2183, + 0xCEE5: 2184, + 0xCEE9: 2185, + 0xCEF1: 2186, + 0xCEF5: 2187, + 0xCF41: 2188, + 0xCF45: 2189, + 0xCF49: 2190, + 0xCF51: 2191, + 0xCF55: 2192, + 0xCF57: 2193, + 0xCF61: 2194, + 0xCF65: 2195, + 0xCF69: 2196, + 0xCF71: 2197, + 0xCF73: 2198, + 0xCF75: 2199, + 0xCFA1: 2200, + 0xCFA2: 2201, + 0xCFA5: 2202, + 0xCFA9: 2203, + 0xCFB1: 2204, + 0xCFB3: 2205, + 0xCFB5: 2206, + 0xCFB7: 2207, + 0xD061: 2208, + 0xD062: 2209, + 0xD065: 2210, + 0xD069: 2211, + 0xD06E: 2212, + 0xD071: 2213, + 0xD073: 2214, + 0xD075: 2215, + 0xD077: 2216, + 0xD081: 2217, + 0xD082: 2218, + 0xD085: 2219, + 0xD089: 2220, + 0xD091: 2221, + 0xD093: 2222, + 0xD095: 2223, + 0xD096: 2224, + 0xD097: 2225, + 0xD0A1: 2226, + 0xD0B7: 2227, + 0xD0E1: 2228, + 0xD0E2: 2229, + 0xD0E5: 2230, + 0xD0E9: 2231, + 0xD0EB: 2232, + 0xD0F1: 2233, + 0xD0F3: 2234, + 0xD0F5: 2235, + 0xD0F7: 2236, + 0xD141: 2237, + 0xD142: 2238, + 0xD145: 2239, + 0xD149: 2240, + 0xD151: 2241, + 0xD153: 2242, + 0xD155: 2243, + 0xD157: 2244, + 0xD161: 2245, + 0xD162: 2246, + 0xD165: 2247, + 0xD169: 2248, + 0xD171: 2249, + 0xD173: 2250, + 0xD175: 2251, + 0xD176: 2252, + 0xD177: 2253, + 0xD181: 2254, + 0xD185: 2255, + 0xD189: 2256, + 0xD193: 2257, + 0xD1A1: 2258, + 0xD1A2: 2259, + 0xD1A5: 2260, + 0xD1A9: 2261, + 0xD1AE: 2262, + 0xD1B1: 2263, + 0xD1B3: 2264, + 0xD1B5: 2265, + 0xD1B7: 2266, + 0xD1BB: 2267, + 0xD1C1: 2268, + 0xD1C2: 2269, + 0xD1C5: 2270, + 0xD1C9: 2271, + 0xD1D5: 2272, + 0xD1D7: 2273, + 0xD1E1: 2274, + 0xD1E2: 2275, + 0xD1E5: 2276, + 0xD1F5: 2277, + 0xD1F7: 2278, + 0xD241: 2279, + 0xD242: 2280, + 0xD245: 2281, + 0xD249: 2282, + 0xD253: 2283, + 0xD255: 2284, + 0xD257: 2285, + 0xD261: 2286, + 0xD265: 2287, + 0xD269: 2288, + 0xD273: 2289, + 0xD275: 2290, + 0xD281: 2291, + 0xD282: 2292, + 0xD285: 2293, + 0xD289: 2294, + 0xD28E: 2295, + 0xD291: 2296, + 0xD295: 2297, + 0xD297: 2298, + 0xD2A1: 2299, + 0xD2A5: 2300, + 0xD2A9: 2301, + 0xD2B1: 2302, + 0xD2B7: 2303, + 0xD2C1: 2304, + 0xD2C2: 2305, + 0xD2C5: 2306, + 0xD2C9: 2307, + 0xD2D7: 2308, + 0xD2E1: 2309, + 0xD2E2: 2310, + 0xD2E5: 2311, + 0xD2E9: 2312, + 0xD2F1: 2313, + 0xD2F3: 2314, + 0xD2F5: 2315, + 0xD2F7: 2316, + 0xD341: 2317, + 0xD342: 2318, + 0xD345: 2319, + 0xD349: 2320, + 0xD351: 2321, + 0xD355: 2322, + 0xD357: 2323, + 0xD361: 2324, + 0xD362: 2325, + 0xD365: 2326, + 0xD367: 2327, + 0xD368: 2328, + 0xD369: 2329, + 0xD36A: 2330, + 0xD371: 2331, + 0xD373: 2332, + 0xD375: 2333, + 0xD377: 2334, + 0xD37B: 2335, + 0xD381: 2336, + 0xD385: 2337, + 0xD389: 2338, + 0xD391: 2339, + 0xD393: 2340, + 0xD397: 2341, + 0xD3A1: 2342, + 0xD3A2: 2343, + 0xD3A5: 2344, + 0xD3A9: 2345, + 0xD3B1: 2346, + 0xD3B3: 2347, + 0xD3B5: 2348, + 0xD3B7: 2349, +} diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/johabprober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/johabprober.py new file mode 100644 index 0000000..d7364ba --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/johabprober.py @@ -0,0 +1,47 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .chardistribution import JOHABDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import JOHAB_SM_MODEL + + +class JOHABProber(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(JOHAB_SM_MODEL) + self.distribution_analyzer = JOHABDistributionAnalysis() + self.reset() + + @property + def charset_name(self) -> str: + return "Johab" + + @property + def language(self) -> str: + return "Korean" diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/jpcntx.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/jpcntx.py new file mode 100644 index 0000000..2f53bdd --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/jpcntx.py @@ -0,0 +1,238 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Communicator client code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import List, Tuple, Union + +# This is hiragana 2-char sequence table, the number in each cell represents its frequency category +# fmt: off +jp2_char_context = ( + (0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1), + (2, 4, 0, 4, 0, 3, 0, 4, 0, 3, 4, 4, 4, 2, 4, 3, 3, 4, 3, 2, 3, 3, 4, 2, 3, 3, 3, 2, 4, 1, 4, 3, 3, 1, 5, 4, 3, 4, 3, 4, 3, 5, 3, 0, 3, 5, 4, 2, 0, 3, 1, 0, 3, 3, 0, 3, 3, 0, 1, 1, 0, 4, 3, 0, 3, 3, 0, 4, 0, 2, 0, 3, 5, 5, 5, 5, 4, 0, 4, 1, 0, 3, 4), + (0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2), + (0, 4, 0, 5, 0, 5, 0, 4, 0, 4, 5, 4, 4, 3, 5, 3, 5, 1, 5, 3, 4, 3, 4, 4, 3, 4, 3, 3, 4, 3, 5, 4, 4, 3, 5, 5, 3, 5, 5, 5, 3, 5, 5, 3, 4, 5, 5, 3, 1, 3, 2, 0, 3, 4, 0, 4, 2, 0, 4, 2, 1, 5, 3, 2, 3, 5, 0, 4, 0, 2, 0, 5, 4, 4, 5, 4, 5, 0, 4, 0, 0, 4, 4), + (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (0, 3, 0, 4, 0, 3, 0, 3, 0, 4, 5, 4, 3, 3, 3, 3, 4, 3, 5, 4, 4, 3, 5, 4, 4, 3, 4, 3, 4, 4, 4, 4, 5, 3, 4, 4, 3, 4, 5, 5, 4, 5, 5, 1, 4, 5, 4, 3, 0, 3, 3, 1, 3, 3, 0, 4, 4, 0, 3, 3, 1, 5, 3, 3, 3, 5, 0, 4, 0, 3, 0, 4, 4, 3, 4, 3, 3, 0, 4, 1, 1, 3, 4), + (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (0, 4, 0, 3, 0, 3, 0, 4, 0, 3, 4, 4, 3, 2, 2, 1, 2, 1, 3, 1, 3, 3, 3, 3, 3, 4, 3, 1, 3, 3, 5, 3, 3, 0, 4, 3, 0, 5, 4, 3, 3, 5, 4, 4, 3, 4, 4, 5, 0, 1, 2, 0, 1, 2, 0, 2, 2, 0, 1, 0, 0, 5, 2, 2, 1, 4, 0, 3, 0, 1, 0, 4, 4, 3, 5, 4, 3, 0, 2, 1, 0, 4, 3), + (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (0, 3, 0, 5, 0, 4, 0, 2, 1, 4, 4, 2, 4, 1, 4, 2, 4, 2, 4, 3, 3, 3, 4, 3, 3, 3, 3, 1, 4, 2, 3, 3, 3, 1, 4, 4, 1, 1, 1, 4, 3, 3, 2, 0, 2, 4, 3, 2, 0, 3, 3, 0, 3, 1, 1, 0, 0, 0, 3, 3, 0, 4, 2, 2, 3, 4, 0, 4, 0, 3, 0, 4, 4, 5, 3, 4, 4, 0, 3, 0, 0, 1, 4), + (1, 4, 0, 4, 0, 4, 0, 4, 0, 3, 5, 4, 4, 3, 4, 3, 5, 4, 3, 3, 4, 3, 5, 4, 4, 4, 4, 3, 4, 2, 4, 3, 3, 1, 5, 4, 3, 2, 4, 5, 4, 5, 5, 4, 4, 5, 4, 4, 0, 3, 2, 2, 3, 3, 0, 4, 3, 1, 3, 2, 1, 4, 3, 3, 4, 5, 0, 3, 0, 2, 0, 4, 5, 5, 4, 5, 4, 0, 4, 0, 0, 5, 4), + (0, 5, 0, 5, 0, 4, 0, 3, 0, 4, 4, 3, 4, 3, 3, 3, 4, 0, 4, 4, 4, 3, 4, 3, 4, 3, 3, 1, 4, 2, 4, 3, 4, 0, 5, 4, 1, 4, 5, 4, 4, 5, 3, 2, 4, 3, 4, 3, 2, 4, 1, 3, 3, 3, 2, 3, 2, 0, 4, 3, 3, 4, 3, 3, 3, 4, 0, 4, 0, 3, 0, 4, 5, 4, 4, 4, 3, 0, 4, 1, 0, 1, 3), + (0, 3, 1, 4, 0, 3, 0, 2, 0, 3, 4, 4, 3, 1, 4, 2, 3, 3, 4, 3, 4, 3, 4, 3, 4, 4, 3, 2, 3, 1, 5, 4, 4, 1, 4, 4, 3, 5, 4, 4, 3, 5, 5, 4, 3, 4, 4, 3, 1, 2, 3, 1, 2, 2, 0, 3, 2, 0, 3, 1, 0, 5, 3, 3, 3, 4, 3, 3, 3, 3, 4, 4, 4, 4, 5, 4, 2, 0, 3, 3, 2, 4, 3), + (0, 2, 0, 3, 0, 1, 0, 1, 0, 0, 3, 2, 0, 0, 2, 0, 1, 0, 2, 1, 3, 3, 3, 1, 2, 3, 1, 0, 1, 0, 4, 2, 1, 1, 3, 3, 0, 4, 3, 3, 1, 4, 3, 3, 0, 3, 3, 2, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 4, 1, 0, 2, 3, 2, 2, 2, 1, 3, 3, 3, 4, 4, 3, 2, 0, 3, 1, 0, 3, 3), + (0, 4, 0, 4, 0, 3, 0, 3, 0, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 3, 4, 2, 4, 3, 4, 3, 3, 2, 4, 3, 4, 5, 4, 1, 4, 5, 3, 5, 4, 5, 3, 5, 4, 0, 3, 5, 5, 3, 1, 3, 3, 2, 2, 3, 0, 3, 4, 1, 3, 3, 2, 4, 3, 3, 3, 4, 0, 4, 0, 3, 0, 4, 5, 4, 4, 5, 3, 0, 4, 1, 0, 3, 4), + (0, 2, 0, 3, 0, 3, 0, 0, 0, 2, 2, 2, 1, 0, 1, 0, 0, 0, 3, 0, 3, 0, 3, 0, 1, 3, 1, 0, 3, 1, 3, 3, 3, 1, 3, 3, 3, 0, 1, 3, 1, 3, 4, 0, 0, 3, 1, 1, 0, 3, 2, 0, 0, 0, 0, 1, 3, 0, 1, 0, 0, 3, 3, 2, 0, 3, 0, 0, 0, 0, 0, 3, 4, 3, 4, 3, 3, 0, 3, 0, 0, 2, 3), + (2, 3, 0, 3, 0, 2, 0, 1, 0, 3, 3, 4, 3, 1, 3, 1, 1, 1, 3, 1, 4, 3, 4, 3, 3, 3, 0, 0, 3, 1, 5, 4, 3, 1, 4, 3, 2, 5, 5, 4, 4, 4, 4, 3, 3, 4, 4, 4, 0, 2, 1, 1, 3, 2, 0, 1, 2, 0, 0, 1, 0, 4, 1, 3, 3, 3, 0, 3, 0, 1, 0, 4, 4, 4, 5, 5, 3, 0, 2, 0, 0, 4, 4), + (0, 2, 0, 1, 0, 3, 1, 3, 0, 2, 3, 3, 3, 0, 3, 1, 0, 0, 3, 0, 3, 2, 3, 1, 3, 2, 1, 1, 0, 0, 4, 2, 1, 0, 2, 3, 1, 4, 3, 2, 0, 4, 4, 3, 1, 3, 1, 3, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4, 1, 1, 1, 2, 0, 3, 0, 0, 0, 3, 4, 2, 4, 3, 2, 0, 1, 0, 0, 3, 3), + (0, 1, 0, 4, 0, 5, 0, 4, 0, 2, 4, 4, 2, 3, 3, 2, 3, 3, 5, 3, 3, 3, 4, 3, 4, 2, 3, 0, 4, 3, 3, 3, 4, 1, 4, 3, 2, 1, 5, 5, 3, 4, 5, 1, 3, 5, 4, 2, 0, 3, 3, 0, 1, 3, 0, 4, 2, 0, 1, 3, 1, 4, 3, 3, 3, 3, 0, 3, 0, 1, 0, 3, 4, 4, 4, 5, 5, 0, 3, 0, 1, 4, 5), + (0, 2, 0, 3, 0, 3, 0, 0, 0, 2, 3, 1, 3, 0, 4, 0, 1, 1, 3, 0, 3, 4, 3, 2, 3, 1, 0, 3, 3, 2, 3, 1, 3, 0, 2, 3, 0, 2, 1, 4, 1, 2, 2, 0, 0, 3, 3, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 2, 2, 0, 3, 2, 1, 3, 3, 0, 2, 0, 2, 0, 0, 3, 3, 1, 2, 4, 0, 3, 0, 2, 2, 3), + (2, 4, 0, 5, 0, 4, 0, 4, 0, 2, 4, 4, 4, 3, 4, 3, 3, 3, 1, 2, 4, 3, 4, 3, 4, 4, 5, 0, 3, 3, 3, 3, 2, 0, 4, 3, 1, 4, 3, 4, 1, 4, 4, 3, 3, 4, 4, 3, 1, 2, 3, 0, 4, 2, 0, 4, 1, 0, 3, 3, 0, 4, 3, 3, 3, 4, 0, 4, 0, 2, 0, 3, 5, 3, 4, 5, 2, 0, 3, 0, 0, 4, 5), + (0, 3, 0, 4, 0, 1, 0, 1, 0, 1, 3, 2, 2, 1, 3, 0, 3, 0, 2, 0, 2, 0, 3, 0, 2, 0, 0, 0, 1, 0, 1, 1, 0, 0, 3, 1, 0, 0, 0, 4, 0, 3, 1, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 2, 2, 3, 1, 0, 3, 0, 0, 0, 1, 4, 4, 4, 3, 0, 0, 4, 0, 0, 1, 4), + (1, 4, 1, 5, 0, 3, 0, 3, 0, 4, 5, 4, 4, 3, 5, 3, 3, 4, 4, 3, 4, 1, 3, 3, 3, 3, 2, 1, 4, 1, 5, 4, 3, 1, 4, 4, 3, 5, 4, 4, 3, 5, 4, 3, 3, 4, 4, 4, 0, 3, 3, 1, 2, 3, 0, 3, 1, 0, 3, 3, 0, 5, 4, 4, 4, 4, 4, 4, 3, 3, 5, 4, 4, 3, 3, 5, 4, 0, 3, 2, 0, 4, 4), + (0, 2, 0, 3, 0, 1, 0, 0, 0, 1, 3, 3, 3, 2, 4, 1, 3, 0, 3, 1, 3, 0, 2, 2, 1, 1, 0, 0, 2, 0, 4, 3, 1, 0, 4, 3, 0, 4, 4, 4, 1, 4, 3, 1, 1, 3, 3, 1, 0, 2, 0, 0, 1, 3, 0, 0, 0, 0, 2, 0, 0, 4, 3, 2, 4, 3, 5, 4, 3, 3, 3, 4, 3, 3, 4, 3, 3, 0, 2, 1, 0, 3, 3), + (0, 2, 0, 4, 0, 3, 0, 2, 0, 2, 5, 5, 3, 4, 4, 4, 4, 1, 4, 3, 3, 0, 4, 3, 4, 3, 1, 3, 3, 2, 4, 3, 0, 3, 4, 3, 0, 3, 4, 4, 2, 4, 4, 0, 4, 5, 3, 3, 2, 2, 1, 1, 1, 2, 0, 1, 5, 0, 3, 3, 2, 4, 3, 3, 3, 4, 0, 3, 0, 2, 0, 4, 4, 3, 5, 5, 0, 0, 3, 0, 2, 3, 3), + (0, 3, 0, 4, 0, 3, 0, 1, 0, 3, 4, 3, 3, 1, 3, 3, 3, 0, 3, 1, 3, 0, 4, 3, 3, 1, 1, 0, 3, 0, 3, 3, 0, 0, 4, 4, 0, 1, 5, 4, 3, 3, 5, 0, 3, 3, 4, 3, 0, 2, 0, 1, 1, 1, 0, 1, 3, 0, 1, 2, 1, 3, 3, 2, 3, 3, 0, 3, 0, 1, 0, 1, 3, 3, 4, 4, 1, 0, 1, 2, 2, 1, 3), + (0, 1, 0, 4, 0, 4, 0, 3, 0, 1, 3, 3, 3, 2, 3, 1, 1, 0, 3, 0, 3, 3, 4, 3, 2, 4, 2, 0, 1, 0, 4, 3, 2, 0, 4, 3, 0, 5, 3, 3, 2, 4, 4, 4, 3, 3, 3, 4, 0, 1, 3, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 4, 2, 3, 3, 3, 0, 3, 0, 0, 0, 4, 4, 4, 5, 3, 2, 0, 3, 3, 0, 3, 5), + (0, 2, 0, 3, 0, 0, 0, 3, 0, 1, 3, 0, 2, 0, 0, 0, 1, 0, 3, 1, 1, 3, 3, 0, 0, 3, 0, 0, 3, 0, 2, 3, 1, 0, 3, 1, 0, 3, 3, 2, 0, 4, 2, 2, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 1, 0, 1, 0, 0, 0, 1, 3, 1, 2, 0, 0, 0, 1, 0, 0, 1, 4), + (0, 3, 0, 3, 0, 5, 0, 1, 0, 2, 4, 3, 1, 3, 3, 2, 1, 1, 5, 2, 1, 0, 5, 1, 2, 0, 0, 0, 3, 3, 2, 2, 3, 2, 4, 3, 0, 0, 3, 3, 1, 3, 3, 0, 2, 5, 3, 4, 0, 3, 3, 0, 1, 2, 0, 2, 2, 0, 3, 2, 0, 2, 2, 3, 3, 3, 0, 2, 0, 1, 0, 3, 4, 4, 2, 5, 4, 0, 3, 0, 0, 3, 5), + (0, 3, 0, 3, 0, 3, 0, 1, 0, 3, 3, 3, 3, 0, 3, 0, 2, 0, 2, 1, 1, 0, 2, 0, 1, 0, 0, 0, 2, 1, 0, 0, 1, 0, 3, 2, 0, 0, 3, 3, 1, 2, 3, 1, 0, 3, 3, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 3, 1, 2, 3, 0, 3, 0, 1, 0, 3, 2, 1, 0, 4, 3, 0, 1, 1, 0, 3, 3), + (0, 4, 0, 5, 0, 3, 0, 3, 0, 4, 5, 5, 4, 3, 5, 3, 4, 3, 5, 3, 3, 2, 5, 3, 4, 4, 4, 3, 4, 3, 4, 5, 5, 3, 4, 4, 3, 4, 4, 5, 4, 4, 4, 3, 4, 5, 5, 4, 2, 3, 4, 2, 3, 4, 0, 3, 3, 1, 4, 3, 2, 4, 3, 3, 5, 5, 0, 3, 0, 3, 0, 5, 5, 5, 5, 4, 4, 0, 4, 0, 1, 4, 4), + (0, 4, 0, 4, 0, 3, 0, 3, 0, 3, 5, 4, 4, 2, 3, 2, 5, 1, 3, 2, 5, 1, 4, 2, 3, 2, 3, 3, 4, 3, 3, 3, 3, 2, 5, 4, 1, 3, 3, 5, 3, 4, 4, 0, 4, 4, 3, 1, 1, 3, 1, 0, 2, 3, 0, 2, 3, 0, 3, 0, 0, 4, 3, 1, 3, 4, 0, 3, 0, 2, 0, 4, 4, 4, 3, 4, 5, 0, 4, 0, 0, 3, 4), + (0, 3, 0, 3, 0, 3, 1, 2, 0, 3, 4, 4, 3, 3, 3, 0, 2, 2, 4, 3, 3, 1, 3, 3, 3, 1, 1, 0, 3, 1, 4, 3, 2, 3, 4, 4, 2, 4, 4, 4, 3, 4, 4, 3, 2, 4, 4, 3, 1, 3, 3, 1, 3, 3, 0, 4, 1, 0, 2, 2, 1, 4, 3, 2, 3, 3, 5, 4, 3, 3, 5, 4, 4, 3, 3, 0, 4, 0, 3, 2, 2, 4, 4), + (0, 2, 0, 1, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 2, 0, 1, 2, 1, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 1, 0, 1, 1, 3, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 0, 3, 4, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1), + (0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4, 0, 4, 1, 4, 0, 3, 0, 4, 0, 3, 0, 4, 0, 3, 0, 3, 0, 4, 1, 5, 1, 4, 0, 0, 3, 0, 5, 0, 5, 2, 0, 1, 0, 0, 0, 2, 1, 4, 0, 1, 3, 0, 0, 3, 0, 0, 3, 1, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0), + (1, 4, 0, 5, 0, 3, 0, 2, 0, 3, 5, 4, 4, 3, 4, 3, 5, 3, 4, 3, 3, 0, 4, 3, 3, 3, 3, 3, 3, 2, 4, 4, 3, 1, 3, 4, 4, 5, 4, 4, 3, 4, 4, 1, 3, 5, 4, 3, 3, 3, 1, 2, 2, 3, 3, 1, 3, 1, 3, 3, 3, 5, 3, 3, 4, 5, 0, 3, 0, 3, 0, 3, 4, 3, 4, 4, 3, 0, 3, 0, 2, 4, 3), + (0, 1, 0, 4, 0, 0, 0, 0, 0, 1, 4, 0, 4, 1, 4, 2, 4, 0, 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 3, 1, 1, 1, 0, 3, 0, 0, 0, 1, 2, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 3, 2, 0, 2, 2, 0, 1, 0, 0, 0, 2, 3, 2, 3, 3, 0, 0, 0, 0, 2, 1, 0), + (0, 5, 1, 5, 0, 3, 0, 3, 0, 5, 4, 4, 5, 1, 5, 3, 3, 0, 4, 3, 4, 3, 5, 3, 4, 3, 3, 2, 4, 3, 4, 3, 3, 0, 3, 3, 1, 4, 4, 3, 4, 4, 4, 3, 4, 5, 5, 3, 2, 3, 1, 1, 3, 3, 1, 3, 1, 1, 3, 3, 2, 4, 5, 3, 3, 5, 0, 4, 0, 3, 0, 4, 4, 3, 5, 3, 3, 0, 3, 4, 0, 4, 3), + (0, 5, 0, 5, 0, 3, 0, 2, 0, 4, 4, 3, 5, 2, 4, 3, 3, 3, 4, 4, 4, 3, 5, 3, 5, 3, 3, 1, 4, 0, 4, 3, 3, 0, 3, 3, 0, 4, 4, 4, 4, 5, 4, 3, 3, 5, 5, 3, 2, 3, 1, 2, 3, 2, 0, 1, 0, 0, 3, 2, 2, 4, 4, 3, 1, 5, 0, 4, 0, 3, 0, 4, 3, 1, 3, 2, 1, 0, 3, 3, 0, 3, 3), + (0, 4, 0, 5, 0, 5, 0, 4, 0, 4, 5, 5, 5, 3, 4, 3, 3, 2, 5, 4, 4, 3, 5, 3, 5, 3, 4, 0, 4, 3, 4, 4, 3, 2, 4, 4, 3, 4, 5, 4, 4, 5, 5, 0, 3, 5, 5, 4, 1, 3, 3, 2, 3, 3, 1, 3, 1, 0, 4, 3, 1, 4, 4, 3, 4, 5, 0, 4, 0, 2, 0, 4, 3, 4, 4, 3, 3, 0, 4, 0, 0, 5, 5), + (0, 4, 0, 4, 0, 5, 0, 1, 1, 3, 3, 4, 4, 3, 4, 1, 3, 0, 5, 1, 3, 0, 3, 1, 3, 1, 1, 0, 3, 0, 3, 3, 4, 0, 4, 3, 0, 4, 4, 4, 3, 4, 4, 0, 3, 5, 4, 1, 0, 3, 0, 0, 2, 3, 0, 3, 1, 0, 3, 1, 0, 3, 2, 1, 3, 5, 0, 3, 0, 1, 0, 3, 2, 3, 3, 4, 4, 0, 2, 2, 0, 4, 4), + (2, 4, 0, 5, 0, 4, 0, 3, 0, 4, 5, 5, 4, 3, 5, 3, 5, 3, 5, 3, 5, 2, 5, 3, 4, 3, 3, 4, 3, 4, 5, 3, 2, 1, 5, 4, 3, 2, 3, 4, 5, 3, 4, 1, 2, 5, 4, 3, 0, 3, 3, 0, 3, 2, 0, 2, 3, 0, 4, 1, 0, 3, 4, 3, 3, 5, 0, 3, 0, 1, 0, 4, 5, 5, 5, 4, 3, 0, 4, 2, 0, 3, 5), + (0, 5, 0, 4, 0, 4, 0, 2, 0, 5, 4, 3, 4, 3, 4, 3, 3, 3, 4, 3, 4, 2, 5, 3, 5, 3, 4, 1, 4, 3, 4, 4, 4, 0, 3, 5, 0, 4, 4, 4, 4, 5, 3, 1, 3, 4, 5, 3, 3, 3, 3, 3, 3, 3, 0, 2, 2, 0, 3, 3, 2, 4, 3, 3, 3, 5, 3, 4, 1, 3, 3, 5, 3, 2, 0, 0, 0, 0, 4, 3, 1, 3, 3), + (0, 1, 0, 3, 0, 3, 0, 1, 0, 1, 3, 3, 3, 2, 3, 3, 3, 0, 3, 0, 0, 0, 3, 1, 3, 0, 0, 0, 2, 2, 2, 3, 0, 0, 3, 2, 0, 1, 2, 4, 1, 3, 3, 0, 0, 3, 3, 3, 0, 1, 0, 0, 2, 1, 0, 0, 3, 0, 3, 1, 0, 3, 0, 0, 1, 3, 0, 2, 0, 1, 0, 3, 3, 1, 3, 3, 0, 0, 1, 1, 0, 3, 3), + (0, 2, 0, 3, 0, 2, 1, 4, 0, 2, 2, 3, 1, 1, 3, 1, 1, 0, 2, 0, 3, 1, 2, 3, 1, 3, 0, 0, 1, 0, 4, 3, 2, 3, 3, 3, 1, 4, 2, 3, 3, 3, 3, 1, 0, 3, 1, 4, 0, 1, 1, 0, 1, 2, 0, 1, 1, 0, 1, 1, 0, 3, 1, 3, 2, 2, 0, 1, 0, 0, 0, 2, 3, 3, 3, 1, 0, 0, 0, 0, 0, 2, 3), + (0, 5, 0, 4, 0, 5, 0, 2, 0, 4, 5, 5, 3, 3, 4, 3, 3, 1, 5, 4, 4, 2, 4, 4, 4, 3, 4, 2, 4, 3, 5, 5, 4, 3, 3, 4, 3, 3, 5, 5, 4, 5, 5, 1, 3, 4, 5, 3, 1, 4, 3, 1, 3, 3, 0, 3, 3, 1, 4, 3, 1, 4, 5, 3, 3, 5, 0, 4, 0, 3, 0, 5, 3, 3, 1, 4, 3, 0, 4, 0, 1, 5, 3), + (0, 5, 0, 5, 0, 4, 0, 2, 0, 4, 4, 3, 4, 3, 3, 3, 3, 3, 5, 4, 4, 4, 4, 4, 4, 5, 3, 3, 5, 2, 4, 4, 4, 3, 4, 4, 3, 3, 4, 4, 5, 5, 3, 3, 4, 3, 4, 3, 3, 4, 3, 3, 3, 3, 1, 2, 2, 1, 4, 3, 3, 5, 4, 4, 3, 4, 0, 4, 0, 3, 0, 4, 4, 4, 4, 4, 1, 0, 4, 2, 0, 2, 4), + (0, 4, 0, 4, 0, 3, 0, 1, 0, 3, 5, 2, 3, 0, 3, 0, 2, 1, 4, 2, 3, 3, 4, 1, 4, 3, 3, 2, 4, 1, 3, 3, 3, 0, 3, 3, 0, 0, 3, 3, 3, 5, 3, 3, 3, 3, 3, 2, 0, 2, 0, 0, 2, 0, 0, 2, 0, 0, 1, 0, 0, 3, 1, 2, 2, 3, 0, 3, 0, 2, 0, 4, 4, 3, 3, 4, 1, 0, 3, 0, 0, 2, 4), + (0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 3, 1, 3, 0, 3, 2, 0, 0, 0, 1, 0, 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 2, 0, 0, 0, 0, 0, 0, 2), + (0, 2, 1, 3, 0, 2, 0, 2, 0, 3, 3, 3, 3, 1, 3, 1, 3, 3, 3, 3, 3, 3, 4, 2, 2, 1, 2, 1, 4, 0, 4, 3, 1, 3, 3, 3, 2, 4, 3, 5, 4, 3, 3, 3, 3, 3, 3, 3, 0, 1, 3, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 4, 2, 0, 2, 3, 0, 3, 3, 0, 3, 3, 4, 2, 3, 1, 4, 0, 1, 2, 0, 2, 3), + (0, 3, 0, 3, 0, 1, 0, 3, 0, 2, 3, 3, 3, 0, 3, 1, 2, 0, 3, 3, 2, 3, 3, 2, 3, 2, 3, 1, 3, 0, 4, 3, 2, 0, 3, 3, 1, 4, 3, 3, 2, 3, 4, 3, 1, 3, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 4, 1, 1, 0, 3, 0, 3, 1, 0, 2, 3, 3, 3, 3, 3, 1, 0, 0, 2, 0, 3, 3), + (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3), + (0, 2, 0, 3, 1, 3, 0, 3, 0, 2, 3, 3, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 1, 3, 0, 2, 3, 1, 1, 4, 3, 3, 2, 3, 3, 1, 2, 2, 4, 1, 3, 3, 0, 1, 4, 2, 3, 0, 1, 3, 0, 3, 0, 0, 1, 3, 0, 2, 0, 0, 3, 3, 2, 1, 3, 0, 3, 0, 2, 0, 3, 4, 4, 4, 3, 1, 0, 3, 0, 0, 3, 3), + (0, 2, 0, 1, 0, 2, 0, 0, 0, 1, 3, 2, 2, 1, 3, 0, 1, 1, 3, 0, 3, 2, 3, 1, 2, 0, 2, 0, 1, 1, 3, 3, 3, 0, 3, 3, 1, 1, 2, 3, 2, 3, 3, 1, 2, 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 2, 1, 2, 1, 3, 0, 3, 0, 0, 0, 3, 4, 4, 4, 3, 2, 0, 2, 0, 0, 2, 4), + (0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 3), + (0, 3, 0, 3, 0, 2, 0, 3, 0, 3, 3, 3, 2, 3, 2, 2, 2, 0, 3, 1, 3, 3, 3, 2, 3, 3, 0, 0, 3, 0, 3, 2, 2, 0, 2, 3, 1, 4, 3, 4, 3, 3, 2, 3, 1, 5, 4, 4, 0, 3, 1, 2, 1, 3, 0, 3, 1, 1, 2, 0, 2, 3, 1, 3, 1, 3, 0, 3, 0, 1, 0, 3, 3, 4, 4, 2, 1, 0, 2, 1, 0, 2, 4), + (0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 4, 2, 5, 1, 4, 0, 2, 0, 2, 1, 3, 1, 4, 0, 2, 1, 0, 0, 2, 1, 4, 1, 1, 0, 3, 3, 0, 5, 1, 3, 2, 3, 3, 1, 0, 3, 2, 3, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 4, 0, 1, 0, 3, 0, 2, 0, 1, 0, 3, 3, 3, 4, 3, 3, 0, 0, 0, 0, 2, 3), + (0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 3), + (0, 1, 0, 3, 0, 4, 0, 3, 0, 2, 4, 3, 1, 0, 3, 2, 2, 1, 3, 1, 2, 2, 3, 1, 1, 1, 2, 1, 3, 0, 1, 2, 0, 1, 3, 2, 1, 3, 0, 5, 5, 1, 0, 0, 1, 3, 2, 1, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0, 3, 4, 0, 1, 1, 1, 3, 2, 0, 2, 0, 1, 0, 2, 3, 3, 1, 2, 3, 0, 1, 0, 1, 0, 4), + (0, 0, 0, 1, 0, 3, 0, 3, 0, 2, 2, 1, 0, 0, 4, 0, 3, 0, 3, 1, 3, 0, 3, 0, 3, 0, 1, 0, 3, 0, 3, 1, 3, 0, 3, 3, 0, 0, 1, 2, 1, 1, 1, 0, 1, 2, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 2, 0, 0, 2, 0, 0, 0, 0, 2, 3, 3, 3, 3, 0, 0, 0, 0, 1, 4), + (0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3, 1, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 2, 3, 0, 0, 2, 2, 3, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 2, 3), + (2, 4, 0, 5, 0, 5, 0, 4, 0, 3, 4, 3, 3, 3, 4, 3, 3, 3, 4, 3, 4, 4, 5, 4, 5, 5, 5, 2, 3, 0, 5, 5, 4, 1, 5, 4, 3, 1, 5, 4, 3, 4, 4, 3, 3, 4, 3, 3, 0, 3, 2, 0, 2, 3, 0, 3, 0, 0, 3, 3, 0, 5, 3, 2, 3, 3, 0, 3, 0, 3, 0, 3, 4, 5, 4, 5, 3, 0, 4, 3, 0, 3, 4), + (0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 3, 4, 3, 2, 3, 2, 3, 0, 4, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 2, 4, 3, 3, 1, 3, 4, 3, 4, 4, 4, 3, 4, 4, 3, 2, 4, 4, 1, 0, 2, 0, 0, 1, 1, 0, 2, 0, 0, 3, 1, 0, 5, 3, 2, 1, 3, 0, 3, 0, 1, 2, 4, 3, 2, 4, 3, 3, 0, 3, 2, 0, 4, 4), + (0, 3, 0, 3, 0, 1, 0, 0, 0, 1, 4, 3, 3, 2, 3, 1, 3, 1, 4, 2, 3, 2, 4, 2, 3, 4, 3, 0, 2, 2, 3, 3, 3, 0, 3, 3, 3, 0, 3, 4, 1, 3, 3, 0, 3, 4, 3, 3, 0, 1, 1, 0, 1, 0, 0, 0, 4, 0, 3, 0, 0, 3, 1, 2, 1, 3, 0, 4, 0, 1, 0, 4, 3, 3, 4, 3, 3, 0, 2, 0, 0, 3, 3), + (0, 3, 0, 4, 0, 1, 0, 3, 0, 3, 4, 3, 3, 0, 3, 3, 3, 1, 3, 1, 3, 3, 4, 3, 3, 3, 0, 0, 3, 1, 5, 3, 3, 1, 3, 3, 2, 5, 4, 3, 3, 4, 5, 3, 2, 5, 3, 4, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 1, 1, 0, 4, 2, 2, 1, 3, 0, 3, 0, 2, 0, 4, 4, 3, 5, 3, 2, 0, 1, 1, 0, 3, 4), + (0, 5, 0, 4, 0, 5, 0, 2, 0, 4, 4, 3, 3, 2, 3, 3, 3, 1, 4, 3, 4, 1, 5, 3, 4, 3, 4, 0, 4, 2, 4, 3, 4, 1, 5, 4, 0, 4, 4, 4, 4, 5, 4, 1, 3, 5, 4, 2, 1, 4, 1, 1, 3, 2, 0, 3, 1, 0, 3, 2, 1, 4, 3, 3, 3, 4, 0, 4, 0, 3, 0, 4, 4, 4, 3, 3, 3, 0, 4, 2, 0, 3, 4), + (1, 4, 0, 4, 0, 3, 0, 1, 0, 3, 3, 3, 1, 1, 3, 3, 2, 2, 3, 3, 1, 0, 3, 2, 2, 1, 2, 0, 3, 1, 2, 1, 2, 0, 3, 2, 0, 2, 2, 3, 3, 4, 3, 0, 3, 3, 1, 2, 0, 1, 1, 3, 1, 2, 0, 0, 3, 0, 1, 1, 0, 3, 2, 2, 3, 3, 0, 3, 0, 0, 0, 2, 3, 3, 4, 3, 3, 0, 1, 0, 0, 1, 4), + (0, 4, 0, 4, 0, 4, 0, 0, 0, 3, 4, 4, 3, 1, 4, 2, 3, 2, 3, 3, 3, 1, 4, 3, 4, 0, 3, 0, 4, 2, 3, 3, 2, 2, 5, 4, 2, 1, 3, 4, 3, 4, 3, 1, 3, 3, 4, 2, 0, 2, 1, 0, 3, 3, 0, 0, 2, 0, 3, 1, 0, 4, 4, 3, 4, 3, 0, 4, 0, 1, 0, 2, 4, 4, 4, 4, 4, 0, 3, 2, 0, 3, 3), + (0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2), + (0, 2, 0, 3, 0, 4, 0, 4, 0, 1, 3, 3, 3, 0, 4, 0, 2, 1, 2, 1, 1, 1, 2, 0, 3, 1, 1, 0, 1, 0, 3, 1, 0, 0, 3, 3, 2, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 2, 2, 0, 3, 1, 0, 0, 1, 0, 1, 1, 0, 1, 2, 0, 3, 0, 0, 0, 0, 1, 0, 0, 3, 3, 4, 3, 1, 0, 1, 0, 3, 0, 2), + (0, 0, 0, 3, 0, 5, 0, 0, 0, 0, 1, 0, 2, 0, 3, 1, 0, 1, 3, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 4, 0, 0, 0, 2, 3, 0, 1, 4, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 3), + (0, 2, 0, 5, 0, 5, 0, 1, 0, 2, 4, 3, 3, 2, 5, 1, 3, 2, 3, 3, 3, 0, 4, 1, 2, 0, 3, 0, 4, 0, 2, 2, 1, 1, 5, 3, 0, 0, 1, 4, 2, 3, 2, 0, 3, 3, 3, 2, 0, 2, 4, 1, 1, 2, 0, 1, 1, 0, 3, 1, 0, 1, 3, 1, 2, 3, 0, 2, 0, 0, 0, 1, 3, 5, 4, 4, 4, 0, 3, 0, 0, 1, 3), + (0, 4, 0, 5, 0, 4, 0, 4, 0, 4, 5, 4, 3, 3, 4, 3, 3, 3, 4, 3, 4, 4, 5, 3, 4, 5, 4, 2, 4, 2, 3, 4, 3, 1, 4, 4, 1, 3, 5, 4, 4, 5, 5, 4, 4, 5, 5, 5, 2, 3, 3, 1, 4, 3, 1, 3, 3, 0, 3, 3, 1, 4, 3, 4, 4, 4, 0, 3, 0, 4, 0, 3, 3, 4, 4, 5, 0, 0, 4, 3, 0, 4, 5), + (0, 4, 0, 4, 0, 3, 0, 3, 0, 3, 4, 4, 4, 3, 3, 2, 4, 3, 4, 3, 4, 3, 5, 3, 4, 3, 2, 1, 4, 2, 4, 4, 3, 1, 3, 4, 2, 4, 5, 5, 3, 4, 5, 4, 1, 5, 4, 3, 0, 3, 2, 2, 3, 2, 1, 3, 1, 0, 3, 3, 3, 5, 3, 3, 3, 5, 4, 4, 2, 3, 3, 4, 3, 3, 3, 2, 1, 0, 3, 2, 1, 4, 3), + (0, 4, 0, 5, 0, 4, 0, 3, 0, 3, 5, 5, 3, 2, 4, 3, 4, 0, 5, 4, 4, 1, 4, 4, 4, 3, 3, 3, 4, 3, 5, 5, 2, 3, 3, 4, 1, 2, 5, 5, 3, 5, 5, 2, 3, 5, 5, 4, 0, 3, 2, 0, 3, 3, 1, 1, 5, 1, 4, 1, 0, 4, 3, 2, 3, 5, 0, 4, 0, 3, 0, 5, 4, 3, 4, 3, 0, 0, 4, 1, 0, 4, 4), + (1, 3, 0, 4, 0, 2, 0, 2, 0, 2, 5, 5, 3, 3, 3, 3, 3, 0, 4, 2, 3, 4, 4, 4, 3, 4, 0, 0, 3, 4, 5, 4, 3, 3, 3, 3, 2, 5, 5, 4, 5, 5, 5, 4, 3, 5, 5, 5, 1, 3, 1, 0, 1, 0, 0, 3, 2, 0, 4, 2, 0, 5, 2, 3, 2, 4, 1, 3, 0, 3, 0, 4, 5, 4, 5, 4, 3, 0, 4, 2, 0, 5, 4), + (0, 3, 0, 4, 0, 5, 0, 3, 0, 3, 4, 4, 3, 2, 3, 2, 3, 3, 3, 3, 3, 2, 4, 3, 3, 2, 2, 0, 3, 3, 3, 3, 3, 1, 3, 3, 3, 0, 4, 4, 3, 4, 4, 1, 1, 4, 4, 2, 0, 3, 1, 0, 1, 1, 0, 4, 1, 0, 2, 3, 1, 3, 3, 1, 3, 4, 0, 3, 0, 1, 0, 3, 1, 3, 0, 0, 1, 0, 2, 0, 0, 4, 4), + (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + (0, 3, 0, 3, 0, 2, 0, 3, 0, 1, 5, 4, 3, 3, 3, 1, 4, 2, 1, 2, 3, 4, 4, 2, 4, 4, 5, 0, 3, 1, 4, 3, 4, 0, 4, 3, 3, 3, 2, 3, 2, 5, 3, 4, 3, 2, 2, 3, 0, 0, 3, 0, 2, 1, 0, 1, 2, 0, 0, 0, 0, 2, 1, 1, 3, 1, 0, 2, 0, 4, 0, 3, 4, 4, 4, 5, 2, 0, 2, 0, 0, 1, 3), + (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 4, 2, 1, 1, 0, 1, 0, 3, 2, 0, 0, 3, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 4, 0, 4, 2, 1, 0, 0, 0, 0, 0, 1), + (0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 2, 0, 2, 1, 0, 0, 1, 2, 1, 0, 1, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2), + (0, 4, 0, 4, 0, 4, 0, 3, 0, 4, 4, 3, 4, 2, 4, 3, 2, 0, 4, 4, 4, 3, 5, 3, 5, 3, 3, 2, 4, 2, 4, 3, 4, 3, 1, 4, 0, 2, 3, 4, 4, 4, 3, 3, 3, 4, 4, 4, 3, 4, 1, 3, 4, 3, 2, 1, 2, 1, 3, 3, 3, 4, 4, 3, 3, 5, 0, 4, 0, 3, 0, 4, 3, 3, 3, 2, 1, 0, 3, 0, 0, 3, 3), + (0, 4, 0, 3, 0, 3, 0, 3, 0, 3, 5, 5, 3, 3, 3, 3, 4, 3, 4, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 4, 3, 5, 3, 3, 1, 3, 2, 4, 5, 5, 5, 5, 4, 3, 4, 5, 5, 3, 2, 2, 3, 3, 3, 3, 2, 3, 3, 1, 2, 3, 2, 4, 3, 3, 3, 4, 0, 4, 0, 2, 0, 4, 3, 2, 2, 1, 2, 0, 3, 0, 0, 4, 1), +) +# fmt: on + + +class JapaneseContextAnalysis: + NUM_OF_CATEGORY = 6 + DONT_KNOW = -1 + ENOUGH_REL_THRESHOLD = 100 + MAX_REL_THRESHOLD = 1000 + MINIMUM_DATA_THRESHOLD = 4 + + def __init__(self) -> None: + self._total_rel = 0 + self._rel_sample: List[int] = [] + self._need_to_skip_char_num = 0 + self._last_char_order = -1 + self._done = False + self.reset() + + def reset(self) -> None: + self._total_rel = 0 # total sequence received + # category counters, each integer counts sequence in its category + self._rel_sample = [0] * self.NUM_OF_CATEGORY + # if last byte in current buffer is not the last byte of a character, + # we need to know how many bytes to skip in next buffer + self._need_to_skip_char_num = 0 + self._last_char_order = -1 # The order of previous char + # If this flag is set to True, detection is done and conclusion has + # been made + self._done = False + + def feed(self, byte_str: Union[bytes, bytearray], num_bytes: int) -> None: + if self._done: + return + + # The buffer we got is byte oriented, and a character may span in more than one + # buffers. In case the last one or two byte in last buffer is not + # complete, we record how many byte needed to complete that character + # and skip these bytes here. We can choose to record those bytes as + # well and analyse the character once it is complete, but since a + # character will not make much difference, by simply skipping + # this character will simply our logic and improve performance. + i = self._need_to_skip_char_num + while i < num_bytes: + order, char_len = self.get_order(byte_str[i : i + 2]) + i += char_len + if i > num_bytes: + self._need_to_skip_char_num = i - num_bytes + self._last_char_order = -1 + else: + if (order != -1) and (self._last_char_order != -1): + self._total_rel += 1 + if self._total_rel > self.MAX_REL_THRESHOLD: + self._done = True + break + self._rel_sample[ + jp2_char_context[self._last_char_order][order] + ] += 1 + self._last_char_order = order + + def got_enough_data(self) -> bool: + return self._total_rel > self.ENOUGH_REL_THRESHOLD + + def get_confidence(self) -> float: + # This is just one way to calculate confidence. It works well for me. + if self._total_rel > self.MINIMUM_DATA_THRESHOLD: + return (self._total_rel - self._rel_sample[0]) / self._total_rel + return self.DONT_KNOW + + def get_order(self, _: Union[bytes, bytearray]) -> Tuple[int, int]: + return -1, 1 + + +class SJISContextAnalysis(JapaneseContextAnalysis): + def __init__(self) -> None: + super().__init__() + self._charset_name = "SHIFT_JIS" + + @property + def charset_name(self) -> str: + return self._charset_name + + def get_order(self, byte_str: Union[bytes, bytearray]) -> Tuple[int, int]: + if not byte_str: + return -1, 1 + # find out current char's byte length + first_char = byte_str[0] + if (0x81 <= first_char <= 0x9F) or (0xE0 <= first_char <= 0xFC): + char_len = 2 + if (first_char == 0x87) or (0xFA <= first_char <= 0xFC): + self._charset_name = "CP932" + else: + char_len = 1 + + # return its order if it is hiragana + if len(byte_str) > 1: + second_char = byte_str[1] + if (first_char == 202) and (0x9F <= second_char <= 0xF1): + return second_char - 0x9F, char_len + + return -1, char_len + + +class EUCJPContextAnalysis(JapaneseContextAnalysis): + def get_order(self, byte_str: Union[bytes, bytearray]) -> Tuple[int, int]: + if not byte_str: + return -1, 1 + # find out current char's byte length + first_char = byte_str[0] + if (first_char == 0x8E) or (0xA1 <= first_char <= 0xFE): + char_len = 2 + elif first_char == 0x8F: + char_len = 3 + else: + char_len = 1 + + # return its order if it is hiragana + if len(byte_str) > 1: + second_char = byte_str[1] + if (first_char == 0xA4) and (0xA1 <= second_char <= 0xF3): + return second_char - 0xA1, char_len + + return -1, char_len diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langbulgarianmodel.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langbulgarianmodel.py new file mode 100644 index 0000000..2f771bb --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langbulgarianmodel.py @@ -0,0 +1,4649 @@ +from chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +BULGARIAN_LANG_MODEL = { + 63: { # 'e' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 1, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 0, # 'и' + 26: 1, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 1, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 0, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 45: { # '\xad' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 1, # 'М' + 36: 0, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 0, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 31: { # 'А' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 2, # 'З' + 40: 1, # 'И' + 59: 1, # 'Й' + 33: 1, # 'К' + 46: 2, # 'Л' + 38: 1, # 'М' + 36: 2, # 'Н' + 41: 1, # 'О' + 30: 2, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 2, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 2, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 1, # 'а' + 18: 2, # 'б' + 9: 2, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 1, # 'е' + 23: 1, # 'ж' + 15: 2, # 'з' + 2: 0, # 'и' + 26: 2, # 'й' + 12: 2, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 0, # 'о' + 13: 2, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 1, # 'у' + 29: 2, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 32: { # 'Б' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 2, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 1, # 'Е' + 55: 1, # 'Ж' + 47: 2, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 2, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 2, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 1, # 'Щ' + 61: 2, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 1, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 35: { # 'В' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 2, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 2, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 2, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 43: { # 'Г' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 1, # 'Щ' + 61: 1, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 1, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 37: { # 'Д' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 2, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 2, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 44: { # 'Е' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 1, # 'Й' + 33: 2, # 'К' + 46: 2, # 'Л' + 38: 1, # 'М' + 36: 2, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 2, # 'Ф' + 49: 1, # 'Х' + 53: 2, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 1, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 0, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 0, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 0, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 2, # 'н' + 4: 0, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 1, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 55: { # 'Ж' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 47: { # 'З' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 2, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 1, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 1, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 40: { # 'И' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 2, # 'З' + 40: 1, # 'И' + 59: 1, # 'Й' + 33: 2, # 'К' + 46: 2, # 'Л' + 38: 2, # 'М' + 36: 2, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 0, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 1, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 2, # 'Я' + 1: 1, # 'а' + 18: 1, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 1, # 'д' + 3: 1, # 'е' + 23: 0, # 'ж' + 15: 3, # 'з' + 2: 0, # 'и' + 26: 1, # 'й' + 12: 1, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 2, # 'н' + 4: 0, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 0, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 59: { # 'Й' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 1, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 33: { # 'К' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 2, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 1, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 3, # 'р' + 8: 1, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 46: { # 'Л' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 2, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 0, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 38: { # 'М' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 0, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 36: { # 'Н' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 2, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 1, # 'Й' + 33: 2, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 1, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 1, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 2, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 41: { # 'О' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 1, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 1, # 'Й' + 33: 2, # 'К' + 46: 2, # 'Л' + 38: 2, # 'М' + 36: 2, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 0, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 1, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 1, # 'а' + 18: 2, # 'б' + 9: 2, # 'в' + 20: 2, # 'г' + 11: 1, # 'д' + 3: 1, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 0, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 0, # 'о' + 13: 2, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 2, # 'ч' + 27: 0, # 'ш' + 24: 2, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 30: { # 'П' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 2, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 3, # 'л' + 14: 0, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 3, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 2, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 39: { # 'Р' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 2, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 1, # 'с' + 5: 0, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 28: { # 'С' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 3, # 'А' + 32: 2, # 'Б' + 35: 2, # 'В' + 43: 1, # 'Г' + 37: 2, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 2, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 2, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 1, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 2, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 34: { # 'Т' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 2, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 2, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 2, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 1, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 1, # 'Ъ' + 60: 0, # 'Ю' + 56: 1, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 3, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 51: { # 'У' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 2, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 0, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 2, # 'Т' + 51: 0, # 'У' + 48: 1, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 2, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 2, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 2, # 'с' + 5: 1, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 48: { # 'Ф' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 2, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 1, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 2, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 49: { # 'Х' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 1, # 'П' + 39: 1, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 53: { # 'Ц' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 2, # 'И' + 59: 0, # 'Й' + 33: 2, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 1, # 'Р' + 28: 2, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 2, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 1, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 50: { # 'Ч' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 2, # 'А' + 32: 1, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 1, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 2, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 54: { # 'Ш' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 1, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 1, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 2, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 2, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 1, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 57: { # 'Щ' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 1, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 1, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 1, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 1, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 61: { # 'Ъ' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 1, # 'Д' + 44: 0, # 'Е' + 55: 1, # 'Ж' + 47: 1, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 2, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 0, # 'О' + 30: 1, # 'П' + 39: 2, # 'Р' + 28: 1, # 'С' + 34: 1, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 1, # 'Х' + 53: 1, # 'Ц' + 50: 1, # 'Ч' + 54: 1, # 'Ш' + 57: 1, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 1, # 'л' + 14: 0, # 'м' + 6: 1, # 'н' + 4: 0, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 60: { # 'Ю' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 1, # 'Б' + 35: 0, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 0, # 'Е' + 55: 1, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 0, # 'М' + 36: 1, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 1, # 'Р' + 28: 1, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 2, # 'г' + 11: 1, # 'д' + 3: 0, # 'е' + 23: 2, # 'ж' + 15: 1, # 'з' + 2: 1, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 0, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 56: { # 'Я' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 1, # 'Б' + 35: 1, # 'В' + 43: 1, # 'Г' + 37: 1, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 1, # 'Л' + 38: 1, # 'М' + 36: 1, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 1, # 'С' + 34: 2, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 1, # 'и' + 26: 1, # 'й' + 12: 1, # 'к' + 10: 1, # 'л' + 14: 2, # 'м' + 6: 2, # 'н' + 4: 0, # 'о' + 13: 2, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 1: { # 'а' + 63: 1, # 'e' + 45: 1, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 1, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 3, # 'и' + 26: 3, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 3, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 3, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 18: { # 'б' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 3, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 0, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 2, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 3, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 9: { # 'в' + 63: 1, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 1, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 0, # 'в' + 20: 2, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 3, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 2, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 3, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 20: { # 'г' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 3, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 11: { # 'д' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 2, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 1, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 3: { # 'е' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 2, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 2, # 'и' + 26: 3, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 3, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 3, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 23: { # 'ж' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 15: { # 'з' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 2: { # 'и' + 63: 1, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 1, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 1, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 1, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 1, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 3, # 'и' + 26: 3, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 3, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 3, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 26: { # 'й' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 2, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 2, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 2, # 'з' + 2: 1, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 2, # 'ф' + 25: 1, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 12: { # 'к' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 1, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 1, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 3, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 10: { # 'л' + 63: 1, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 1, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 1, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 2, # 'п' + 7: 2, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 2, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 2, # 'ь' + 42: 3, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 14: { # 'м' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 1, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 3, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 1, # 'т' + 19: 3, # 'у' + 29: 2, # 'ф' + 25: 1, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 6: { # 'н' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 1, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 2, # 'б' + 9: 2, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 2, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 3, # 'ф' + 25: 2, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 2, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 2, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 4: { # 'о' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 2, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 3, # 'и' + 26: 3, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 2, # 'у' + 29: 3, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 3, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 13: { # 'п' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 3, # 'л' + 14: 1, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 7: { # 'р' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 3, # 'е' + 23: 3, # 'ж' + 15: 2, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 2, # 'п' + 7: 1, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 2, # 'ф' + 25: 3, # 'х' + 22: 3, # 'ц' + 21: 2, # 'ч' + 27: 3, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 1, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 8: { # 'с' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 2, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 1, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 2, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 2, # 'ш' + 24: 0, # 'щ' + 17: 3, # 'ъ' + 52: 2, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 5: { # 'т' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 2, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 3, # 'у' + 29: 1, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 2, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 3, # 'ъ' + 52: 2, # 'ь' + 42: 2, # 'ю' + 16: 3, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 19: { # 'у' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 2, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 2, # 'и' + 26: 2, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 2, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 3, # 'ч' + 27: 3, # 'ш' + 24: 2, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 29: { # 'ф' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 1, # 'в' + 20: 1, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 2, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 2, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 25: { # 'х' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 3, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 2, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 1, # 'п' + 7: 3, # 'р' + 8: 1, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 1, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 22: { # 'ц' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 2, # 'в' + 20: 1, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 1, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 2, # 'к' + 10: 1, # 'л' + 14: 1, # 'м' + 6: 1, # 'н' + 4: 2, # 'о' + 13: 1, # 'п' + 7: 1, # 'р' + 8: 1, # 'с' + 5: 1, # 'т' + 19: 2, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 1, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 0, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 21: { # 'ч' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 1, # 'б' + 9: 3, # 'в' + 20: 1, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 1, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 2, # 'р' + 8: 0, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 1, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 27: { # 'ш' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 2, # 'в' + 20: 0, # 'г' + 11: 1, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 3, # 'к' + 10: 2, # 'л' + 14: 1, # 'м' + 6: 3, # 'н' + 4: 2, # 'о' + 13: 2, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 1, # 'т' + 19: 2, # 'у' + 29: 1, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 1, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 2, # 'ъ' + 52: 1, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 24: { # 'щ' + 63: 1, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 3, # 'а' + 18: 0, # 'б' + 9: 1, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 3, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 3, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 2, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 1, # 'р' + 8: 0, # 'с' + 5: 2, # 'т' + 19: 3, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 1, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 2, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 17: { # 'ъ' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 3, # 'г' + 11: 3, # 'д' + 3: 2, # 'е' + 23: 3, # 'ж' + 15: 3, # 'з' + 2: 1, # 'и' + 26: 2, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 3, # 'о' + 13: 3, # 'п' + 7: 3, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 2, # 'х' + 22: 2, # 'ц' + 21: 3, # 'ч' + 27: 2, # 'ш' + 24: 3, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 2, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 52: { # 'ь' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 1, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 1, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 1, # 'н' + 4: 3, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 1, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 1, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 1, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 42: { # 'ю' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 1, # 'а' + 18: 2, # 'б' + 9: 1, # 'в' + 20: 2, # 'г' + 11: 2, # 'д' + 3: 1, # 'е' + 23: 2, # 'ж' + 15: 2, # 'з' + 2: 1, # 'и' + 26: 1, # 'й' + 12: 2, # 'к' + 10: 2, # 'л' + 14: 2, # 'м' + 6: 2, # 'н' + 4: 1, # 'о' + 13: 1, # 'п' + 7: 2, # 'р' + 8: 2, # 'с' + 5: 2, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 1, # 'х' + 22: 2, # 'ц' + 21: 3, # 'ч' + 27: 1, # 'ш' + 24: 1, # 'щ' + 17: 1, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 16: { # 'я' + 63: 0, # 'e' + 45: 1, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 3, # 'б' + 9: 3, # 'в' + 20: 2, # 'г' + 11: 3, # 'д' + 3: 2, # 'е' + 23: 1, # 'ж' + 15: 2, # 'з' + 2: 1, # 'и' + 26: 2, # 'й' + 12: 3, # 'к' + 10: 3, # 'л' + 14: 3, # 'м' + 6: 3, # 'н' + 4: 1, # 'о' + 13: 2, # 'п' + 7: 2, # 'р' + 8: 3, # 'с' + 5: 3, # 'т' + 19: 1, # 'у' + 29: 1, # 'ф' + 25: 3, # 'х' + 22: 2, # 'ц' + 21: 1, # 'ч' + 27: 1, # 'ш' + 24: 2, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 1, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 58: { # 'є' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 0, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, + 62: { # '№' + 63: 0, # 'e' + 45: 0, # '\xad' + 31: 0, # 'А' + 32: 0, # 'Б' + 35: 0, # 'В' + 43: 0, # 'Г' + 37: 0, # 'Д' + 44: 0, # 'Е' + 55: 0, # 'Ж' + 47: 0, # 'З' + 40: 0, # 'И' + 59: 0, # 'Й' + 33: 0, # 'К' + 46: 0, # 'Л' + 38: 0, # 'М' + 36: 0, # 'Н' + 41: 0, # 'О' + 30: 0, # 'П' + 39: 0, # 'Р' + 28: 0, # 'С' + 34: 0, # 'Т' + 51: 0, # 'У' + 48: 0, # 'Ф' + 49: 0, # 'Х' + 53: 0, # 'Ц' + 50: 0, # 'Ч' + 54: 0, # 'Ш' + 57: 0, # 'Щ' + 61: 0, # 'Ъ' + 60: 0, # 'Ю' + 56: 0, # 'Я' + 1: 0, # 'а' + 18: 0, # 'б' + 9: 0, # 'в' + 20: 0, # 'г' + 11: 0, # 'д' + 3: 0, # 'е' + 23: 0, # 'ж' + 15: 0, # 'з' + 2: 0, # 'и' + 26: 0, # 'й' + 12: 0, # 'к' + 10: 0, # 'л' + 14: 0, # 'м' + 6: 0, # 'н' + 4: 0, # 'о' + 13: 0, # 'п' + 7: 0, # 'р' + 8: 0, # 'с' + 5: 0, # 'т' + 19: 0, # 'у' + 29: 0, # 'ф' + 25: 0, # 'х' + 22: 0, # 'ц' + 21: 0, # 'ч' + 27: 0, # 'ш' + 24: 0, # 'щ' + 17: 0, # 'ъ' + 52: 0, # 'ь' + 42: 0, # 'ю' + 16: 0, # 'я' + 58: 0, # 'є' + 62: 0, # '№' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +ISO_8859_5_BULGARIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 77, # 'A' + 66: 90, # 'B' + 67: 99, # 'C' + 68: 100, # 'D' + 69: 72, # 'E' + 70: 109, # 'F' + 71: 107, # 'G' + 72: 101, # 'H' + 73: 79, # 'I' + 74: 185, # 'J' + 75: 81, # 'K' + 76: 102, # 'L' + 77: 76, # 'M' + 78: 94, # 'N' + 79: 82, # 'O' + 80: 110, # 'P' + 81: 186, # 'Q' + 82: 108, # 'R' + 83: 91, # 'S' + 84: 74, # 'T' + 85: 119, # 'U' + 86: 84, # 'V' + 87: 96, # 'W' + 88: 111, # 'X' + 89: 187, # 'Y' + 90: 115, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 65, # 'a' + 98: 69, # 'b' + 99: 70, # 'c' + 100: 66, # 'd' + 101: 63, # 'e' + 102: 68, # 'f' + 103: 112, # 'g' + 104: 103, # 'h' + 105: 92, # 'i' + 106: 194, # 'j' + 107: 104, # 'k' + 108: 95, # 'l' + 109: 86, # 'm' + 110: 87, # 'n' + 111: 71, # 'o' + 112: 116, # 'p' + 113: 195, # 'q' + 114: 85, # 'r' + 115: 93, # 's' + 116: 97, # 't' + 117: 113, # 'u' + 118: 196, # 'v' + 119: 197, # 'w' + 120: 198, # 'x' + 121: 199, # 'y' + 122: 200, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 194, # '\x80' + 129: 195, # '\x81' + 130: 196, # '\x82' + 131: 197, # '\x83' + 132: 198, # '\x84' + 133: 199, # '\x85' + 134: 200, # '\x86' + 135: 201, # '\x87' + 136: 202, # '\x88' + 137: 203, # '\x89' + 138: 204, # '\x8a' + 139: 205, # '\x8b' + 140: 206, # '\x8c' + 141: 207, # '\x8d' + 142: 208, # '\x8e' + 143: 209, # '\x8f' + 144: 210, # '\x90' + 145: 211, # '\x91' + 146: 212, # '\x92' + 147: 213, # '\x93' + 148: 214, # '\x94' + 149: 215, # '\x95' + 150: 216, # '\x96' + 151: 217, # '\x97' + 152: 218, # '\x98' + 153: 219, # '\x99' + 154: 220, # '\x9a' + 155: 221, # '\x9b' + 156: 222, # '\x9c' + 157: 223, # '\x9d' + 158: 224, # '\x9e' + 159: 225, # '\x9f' + 160: 81, # '\xa0' + 161: 226, # 'Ё' + 162: 227, # 'Ђ' + 163: 228, # 'Ѓ' + 164: 229, # 'Є' + 165: 230, # 'Ѕ' + 166: 105, # 'І' + 167: 231, # 'Ї' + 168: 232, # 'Ј' + 169: 233, # 'Љ' + 170: 234, # 'Њ' + 171: 235, # 'Ћ' + 172: 236, # 'Ќ' + 173: 45, # '\xad' + 174: 237, # 'Ў' + 175: 238, # 'Џ' + 176: 31, # 'А' + 177: 32, # 'Б' + 178: 35, # 'В' + 179: 43, # 'Г' + 180: 37, # 'Д' + 181: 44, # 'Е' + 182: 55, # 'Ж' + 183: 47, # 'З' + 184: 40, # 'И' + 185: 59, # 'Й' + 186: 33, # 'К' + 187: 46, # 'Л' + 188: 38, # 'М' + 189: 36, # 'Н' + 190: 41, # 'О' + 191: 30, # 'П' + 192: 39, # 'Р' + 193: 28, # 'С' + 194: 34, # 'Т' + 195: 51, # 'У' + 196: 48, # 'Ф' + 197: 49, # 'Х' + 198: 53, # 'Ц' + 199: 50, # 'Ч' + 200: 54, # 'Ш' + 201: 57, # 'Щ' + 202: 61, # 'Ъ' + 203: 239, # 'Ы' + 204: 67, # 'Ь' + 205: 240, # 'Э' + 206: 60, # 'Ю' + 207: 56, # 'Я' + 208: 1, # 'а' + 209: 18, # 'б' + 210: 9, # 'в' + 211: 20, # 'г' + 212: 11, # 'д' + 213: 3, # 'е' + 214: 23, # 'ж' + 215: 15, # 'з' + 216: 2, # 'и' + 217: 26, # 'й' + 218: 12, # 'к' + 219: 10, # 'л' + 220: 14, # 'м' + 221: 6, # 'н' + 222: 4, # 'о' + 223: 13, # 'п' + 224: 7, # 'р' + 225: 8, # 'с' + 226: 5, # 'т' + 227: 19, # 'у' + 228: 29, # 'ф' + 229: 25, # 'х' + 230: 22, # 'ц' + 231: 21, # 'ч' + 232: 27, # 'ш' + 233: 24, # 'щ' + 234: 17, # 'ъ' + 235: 75, # 'ы' + 236: 52, # 'ь' + 237: 241, # 'э' + 238: 42, # 'ю' + 239: 16, # 'я' + 240: 62, # '№' + 241: 242, # 'ё' + 242: 243, # 'ђ' + 243: 244, # 'ѓ' + 244: 58, # 'є' + 245: 245, # 'ѕ' + 246: 98, # 'і' + 247: 246, # 'ї' + 248: 247, # 'ј' + 249: 248, # 'љ' + 250: 249, # 'њ' + 251: 250, # 'ћ' + 252: 251, # 'ќ' + 253: 91, # '§' + 254: 252, # 'ў' + 255: 253, # 'џ' +} + +ISO_8859_5_BULGARIAN_MODEL = SingleByteCharSetModel( + charset_name="ISO-8859-5", + language="Bulgarian", + char_to_order_map=ISO_8859_5_BULGARIAN_CHAR_TO_ORDER, + language_model=BULGARIAN_LANG_MODEL, + typical_positive_ratio=0.969392, + keep_ascii_letters=False, + alphabet="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯабвгдежзийклмнопрстуфхцчшщъьюя", +) + +WINDOWS_1251_BULGARIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 77, # 'A' + 66: 90, # 'B' + 67: 99, # 'C' + 68: 100, # 'D' + 69: 72, # 'E' + 70: 109, # 'F' + 71: 107, # 'G' + 72: 101, # 'H' + 73: 79, # 'I' + 74: 185, # 'J' + 75: 81, # 'K' + 76: 102, # 'L' + 77: 76, # 'M' + 78: 94, # 'N' + 79: 82, # 'O' + 80: 110, # 'P' + 81: 186, # 'Q' + 82: 108, # 'R' + 83: 91, # 'S' + 84: 74, # 'T' + 85: 119, # 'U' + 86: 84, # 'V' + 87: 96, # 'W' + 88: 111, # 'X' + 89: 187, # 'Y' + 90: 115, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 65, # 'a' + 98: 69, # 'b' + 99: 70, # 'c' + 100: 66, # 'd' + 101: 63, # 'e' + 102: 68, # 'f' + 103: 112, # 'g' + 104: 103, # 'h' + 105: 92, # 'i' + 106: 194, # 'j' + 107: 104, # 'k' + 108: 95, # 'l' + 109: 86, # 'm' + 110: 87, # 'n' + 111: 71, # 'o' + 112: 116, # 'p' + 113: 195, # 'q' + 114: 85, # 'r' + 115: 93, # 's' + 116: 97, # 't' + 117: 113, # 'u' + 118: 196, # 'v' + 119: 197, # 'w' + 120: 198, # 'x' + 121: 199, # 'y' + 122: 200, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 206, # 'Ђ' + 129: 207, # 'Ѓ' + 130: 208, # '‚' + 131: 209, # 'ѓ' + 132: 210, # '„' + 133: 211, # '…' + 134: 212, # '†' + 135: 213, # '‡' + 136: 120, # '€' + 137: 214, # '‰' + 138: 215, # 'Љ' + 139: 216, # '‹' + 140: 217, # 'Њ' + 141: 218, # 'Ќ' + 142: 219, # 'Ћ' + 143: 220, # 'Џ' + 144: 221, # 'ђ' + 145: 78, # '‘' + 146: 64, # '’' + 147: 83, # '“' + 148: 121, # '”' + 149: 98, # '•' + 150: 117, # '–' + 151: 105, # '—' + 152: 222, # None + 153: 223, # '™' + 154: 224, # 'љ' + 155: 225, # '›' + 156: 226, # 'њ' + 157: 227, # 'ќ' + 158: 228, # 'ћ' + 159: 229, # 'џ' + 160: 88, # '\xa0' + 161: 230, # 'Ў' + 162: 231, # 'ў' + 163: 232, # 'Ј' + 164: 233, # '¤' + 165: 122, # 'Ґ' + 166: 89, # '¦' + 167: 106, # '§' + 168: 234, # 'Ё' + 169: 235, # '©' + 170: 236, # 'Є' + 171: 237, # '«' + 172: 238, # '¬' + 173: 45, # '\xad' + 174: 239, # '®' + 175: 240, # 'Ї' + 176: 73, # '°' + 177: 80, # '±' + 178: 118, # 'І' + 179: 114, # 'і' + 180: 241, # 'ґ' + 181: 242, # 'µ' + 182: 243, # '¶' + 183: 244, # '·' + 184: 245, # 'ё' + 185: 62, # '№' + 186: 58, # 'є' + 187: 246, # '»' + 188: 247, # 'ј' + 189: 248, # 'Ѕ' + 190: 249, # 'ѕ' + 191: 250, # 'ї' + 192: 31, # 'А' + 193: 32, # 'Б' + 194: 35, # 'В' + 195: 43, # 'Г' + 196: 37, # 'Д' + 197: 44, # 'Е' + 198: 55, # 'Ж' + 199: 47, # 'З' + 200: 40, # 'И' + 201: 59, # 'Й' + 202: 33, # 'К' + 203: 46, # 'Л' + 204: 38, # 'М' + 205: 36, # 'Н' + 206: 41, # 'О' + 207: 30, # 'П' + 208: 39, # 'Р' + 209: 28, # 'С' + 210: 34, # 'Т' + 211: 51, # 'У' + 212: 48, # 'Ф' + 213: 49, # 'Х' + 214: 53, # 'Ц' + 215: 50, # 'Ч' + 216: 54, # 'Ш' + 217: 57, # 'Щ' + 218: 61, # 'Ъ' + 219: 251, # 'Ы' + 220: 67, # 'Ь' + 221: 252, # 'Э' + 222: 60, # 'Ю' + 223: 56, # 'Я' + 224: 1, # 'а' + 225: 18, # 'б' + 226: 9, # 'в' + 227: 20, # 'г' + 228: 11, # 'д' + 229: 3, # 'е' + 230: 23, # 'ж' + 231: 15, # 'з' + 232: 2, # 'и' + 233: 26, # 'й' + 234: 12, # 'к' + 235: 10, # 'л' + 236: 14, # 'м' + 237: 6, # 'н' + 238: 4, # 'о' + 239: 13, # 'п' + 240: 7, # 'р' + 241: 8, # 'с' + 242: 5, # 'т' + 243: 19, # 'у' + 244: 29, # 'ф' + 245: 25, # 'х' + 246: 22, # 'ц' + 247: 21, # 'ч' + 248: 27, # 'ш' + 249: 24, # 'щ' + 250: 17, # 'ъ' + 251: 75, # 'ы' + 252: 52, # 'ь' + 253: 253, # 'э' + 254: 42, # 'ю' + 255: 16, # 'я' +} + +WINDOWS_1251_BULGARIAN_MODEL = SingleByteCharSetModel( + charset_name="windows-1251", + language="Bulgarian", + char_to_order_map=WINDOWS_1251_BULGARIAN_CHAR_TO_ORDER, + language_model=BULGARIAN_LANG_MODEL, + typical_positive_ratio=0.969392, + keep_ascii_letters=False, + alphabet="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯабвгдежзийклмнопрстуфхцчшщъьюя", +) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langgreekmodel.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langgreekmodel.py new file mode 100644 index 0000000..0471d8b --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langgreekmodel.py @@ -0,0 +1,4397 @@ +from chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +GREEK_LANG_MODEL = { + 60: { # 'e' + 60: 2, # 'e' + 55: 1, # 'o' + 58: 2, # 't' + 36: 1, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 55: { # 'o' + 60: 0, # 'e' + 55: 2, # 'o' + 58: 2, # 't' + 36: 1, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 1, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 1, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 58: { # 't' + 60: 2, # 'e' + 55: 1, # 'o' + 58: 1, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 1, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 36: { # '·' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 61: { # 'Ά' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 1, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 1, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 46: { # 'Έ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 2, # 'β' + 20: 2, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 2, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 1, # 'σ' + 2: 2, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 54: { # 'Ό' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 2, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 31: { # 'Α' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 2, # 'Β' + 43: 2, # 'Γ' + 41: 1, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 2, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 2, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 1, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 2, # 'Υ' + 56: 2, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 2, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 1, # 'θ' + 5: 0, # 'ι' + 11: 2, # 'κ' + 16: 3, # 'λ' + 10: 2, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 2, # 'ς' + 7: 2, # 'σ' + 2: 0, # 'τ' + 12: 3, # 'υ' + 28: 2, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 51: { # 'Β' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 1, # 'Η' + 52: 0, # 'Θ' + 47: 1, # 'Ι' + 44: 0, # 'Κ' + 53: 1, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 2, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 43: { # 'Γ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 1, # 'Α' + 51: 0, # 'Β' + 43: 2, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 1, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 1, # 'Κ' + 53: 1, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 1, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 41: { # 'Δ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 2, # 'ή' + 15: 2, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 1, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 34: { # 'Ε' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 2, # 'Γ' + 41: 2, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 2, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 1, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 2, # 'Χ' + 57: 2, # 'Ω' + 17: 3, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 3, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 1, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 1, # 'θ' + 5: 2, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 2, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 2, # 'τ' + 12: 2, # 'υ' + 28: 2, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 1, # 'ύ' + 27: 0, # 'ώ' + }, + 40: { # 'Η' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 1, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 2, # 'Θ' + 47: 0, # 'Ι' + 44: 2, # 'Κ' + 53: 0, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 1, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 1, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 1, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 52: { # 'Θ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 1, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 1, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 47: { # 'Ι' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 1, # 'Β' + 43: 1, # 'Γ' + 41: 2, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 2, # 'Κ' + 53: 2, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 0, # 'Υ' + 56: 2, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 1, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 1, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 1, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 44: { # 'Κ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 1, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 1, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 1, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 1, # 'Ω' + 17: 3, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 53: { # 'Λ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 2, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 2, # 'Σ' + 33: 0, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 1, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 38: { # 'Μ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 2, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 2, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 2, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 2, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 49: { # 'Ν' + 60: 2, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 2, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 1, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 1, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 59: { # 'Ξ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 1, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 1, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 39: { # 'Ο' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 1, # 'Β' + 43: 2, # 'Γ' + 41: 2, # 'Δ' + 34: 2, # 'Ε' + 40: 1, # 'Η' + 52: 2, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 2, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 2, # 'Υ' + 56: 2, # 'Φ' + 50: 2, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 2, # 'κ' + 16: 2, # 'λ' + 10: 2, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 2, # 'τ' + 12: 2, # 'υ' + 28: 1, # 'φ' + 23: 1, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 35: { # 'Π' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 2, # 'Λ' + 38: 1, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 1, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 2, # 'Ω' + 17: 2, # 'ά' + 18: 1, # 'έ' + 22: 1, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 3, # 'ώ' + }, + 48: { # 'Ρ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 1, # 'Γ' + 41: 1, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 1, # 'Τ' + 45: 1, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 1, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 1, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 37: { # 'Σ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 1, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 0, # 'Λ' + 38: 2, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 2, # 'Υ' + 56: 0, # 'Φ' + 50: 2, # 'Χ' + 57: 2, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 2, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 2, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 2, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 2, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 33: { # 'Τ' + 60: 0, # 'e' + 55: 1, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 2, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 2, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 1, # 'Τ' + 45: 1, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 2, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 2, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 3, # 'ώ' + }, + 45: { # 'Υ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 2, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 2, # 'Η' + 52: 2, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 1, # 'Λ' + 38: 2, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 2, # 'Π' + 48: 1, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 56: { # 'Φ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 1, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 1, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 2, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 2, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 1, # 'ύ' + 27: 1, # 'ώ' + }, + 50: { # 'Χ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 1, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 2, # 'Ε' + 40: 2, # 'Η' + 52: 0, # 'Θ' + 47: 2, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 1, # 'Ν' + 59: 0, # 'Ξ' + 39: 1, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 1, # 'Χ' + 57: 1, # 'Ω' + 17: 2, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 2, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 2, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 57: { # 'Ω' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 1, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 1, # 'Λ' + 38: 0, # 'Μ' + 49: 2, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 2, # 'Ρ' + 37: 2, # 'Σ' + 33: 2, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 2, # 'ρ' + 14: 2, # 'ς' + 7: 2, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 1, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 17: { # 'ά' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 3, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 2, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 3, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 18: { # 'έ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 3, # 'ε' + 32: 2, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 3, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 22: { # 'ή' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 1, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 15: { # 'ί' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 3, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 1, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 3, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 1: { # 'α' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 0, # 'ή' + 15: 3, # 'ί' + 1: 0, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 2, # 'ε' + 32: 3, # 'ζ' + 13: 1, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 0, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 0, # 'ώ' + }, + 29: { # 'β' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 2, # 'γ' + 21: 2, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 3, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 2, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 20: { # 'γ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 3, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 3, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 2, # 'ύ' + 27: 3, # 'ώ' + }, + 21: { # 'δ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 3: { # 'ε' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 3, # 'ί' + 1: 2, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 2, # 'ε' + 32: 2, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 3, # 'ω' + 19: 2, # 'ό' + 26: 3, # 'ύ' + 27: 2, # 'ώ' + }, + 32: { # 'ζ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 2, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 1, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 2, # 'ώ' + }, + 13: { # 'η' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 25: { # 'θ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 1, # 'λ' + 10: 3, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 5: { # 'ι' + 60: 0, # 'e' + 55: 1, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 0, # 'ί' + 1: 3, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 2, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 0, # 'ύ' + 27: 3, # 'ώ' + }, + 11: { # 'κ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 2, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 2, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 2, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 16: { # 'λ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 1, # 'β' + 20: 2, # 'γ' + 21: 1, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 2, # 'θ' + 5: 3, # 'ι' + 11: 2, # 'κ' + 16: 3, # 'λ' + 10: 2, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 2, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 10: { # 'μ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 1, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 3, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 2, # 'υ' + 28: 3, # 'φ' + 23: 0, # 'χ' + 42: 2, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 6: { # 'ν' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 2, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 1, # 'λ' + 10: 0, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 30: { # 'ξ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 2, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 2, # 'ό' + 26: 3, # 'ύ' + 27: 1, # 'ώ' + }, + 4: { # 'ο' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 2, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 2, # 'ω' + 19: 1, # 'ό' + 26: 3, # 'ύ' + 27: 2, # 'ώ' + }, + 9: { # 'π' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 3, # 'λ' + 10: 0, # 'μ' + 6: 2, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 2, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 2, # 'ύ' + 27: 3, # 'ώ' + }, + 8: { # 'ρ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 1, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 3, # 'ο' + 9: 2, # 'π' + 8: 2, # 'ρ' + 14: 0, # 'ς' + 7: 2, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 14: { # 'ς' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 2, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 0, # 'θ' + 5: 0, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 0, # 'τ' + 12: 0, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 7: { # 'σ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 3, # 'β' + 20: 0, # 'γ' + 21: 2, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 3, # 'θ' + 5: 3, # 'ι' + 11: 3, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 3, # 'φ' + 23: 3, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 2, # 'ώ' + }, + 2: { # 'τ' + 60: 0, # 'e' + 55: 2, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 2, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 3, # 'ι' + 11: 2, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 2, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 12: { # 'υ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 2, # 'ί' + 1: 3, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 2, # 'ε' + 32: 2, # 'ζ' + 13: 2, # 'η' + 25: 3, # 'θ' + 5: 2, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 3, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 2, # 'ω' + 19: 2, # 'ό' + 26: 0, # 'ύ' + 27: 2, # 'ώ' + }, + 28: { # 'φ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 3, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 2, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 0, # 'μ' + 6: 1, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 1, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 2, # 'ύ' + 27: 2, # 'ώ' + }, + 23: { # 'χ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 3, # 'ά' + 18: 2, # 'έ' + 22: 3, # 'ή' + 15: 3, # 'ί' + 1: 3, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 2, # 'θ' + 5: 3, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 2, # 'μ' + 6: 3, # 'ν' + 30: 0, # 'ξ' + 4: 3, # 'ο' + 9: 0, # 'π' + 8: 3, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 3, # 'τ' + 12: 3, # 'υ' + 28: 0, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 3, # 'ω' + 19: 3, # 'ό' + 26: 3, # 'ύ' + 27: 3, # 'ώ' + }, + 42: { # 'ψ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 2, # 'ά' + 18: 2, # 'έ' + 22: 1, # 'ή' + 15: 2, # 'ί' + 1: 2, # 'α' + 29: 0, # 'β' + 20: 0, # 'γ' + 21: 0, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 3, # 'η' + 25: 0, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 0, # 'λ' + 10: 0, # 'μ' + 6: 0, # 'ν' + 30: 0, # 'ξ' + 4: 2, # 'ο' + 9: 0, # 'π' + 8: 0, # 'ρ' + 14: 0, # 'ς' + 7: 0, # 'σ' + 2: 2, # 'τ' + 12: 1, # 'υ' + 28: 0, # 'φ' + 23: 0, # 'χ' + 42: 0, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 24: { # 'ω' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 1, # 'ά' + 18: 0, # 'έ' + 22: 2, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 2, # 'β' + 20: 3, # 'γ' + 21: 2, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 0, # 'η' + 25: 3, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 0, # 'ξ' + 4: 0, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 2, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 19: { # 'ό' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 3, # 'β' + 20: 3, # 'γ' + 21: 3, # 'δ' + 3: 1, # 'ε' + 32: 2, # 'ζ' + 13: 2, # 'η' + 25: 2, # 'θ' + 5: 2, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 1, # 'ξ' + 4: 2, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 3, # 'χ' + 42: 2, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 26: { # 'ύ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 2, # 'α' + 29: 2, # 'β' + 20: 2, # 'γ' + 21: 1, # 'δ' + 3: 3, # 'ε' + 32: 0, # 'ζ' + 13: 2, # 'η' + 25: 3, # 'θ' + 5: 0, # 'ι' + 11: 3, # 'κ' + 16: 3, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 2, # 'ξ' + 4: 3, # 'ο' + 9: 3, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 2, # 'φ' + 23: 2, # 'χ' + 42: 2, # 'ψ' + 24: 2, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, + 27: { # 'ώ' + 60: 0, # 'e' + 55: 0, # 'o' + 58: 0, # 't' + 36: 0, # '·' + 61: 0, # 'Ά' + 46: 0, # 'Έ' + 54: 0, # 'Ό' + 31: 0, # 'Α' + 51: 0, # 'Β' + 43: 0, # 'Γ' + 41: 0, # 'Δ' + 34: 0, # 'Ε' + 40: 0, # 'Η' + 52: 0, # 'Θ' + 47: 0, # 'Ι' + 44: 0, # 'Κ' + 53: 0, # 'Λ' + 38: 0, # 'Μ' + 49: 0, # 'Ν' + 59: 0, # 'Ξ' + 39: 0, # 'Ο' + 35: 0, # 'Π' + 48: 0, # 'Ρ' + 37: 0, # 'Σ' + 33: 0, # 'Τ' + 45: 0, # 'Υ' + 56: 0, # 'Φ' + 50: 0, # 'Χ' + 57: 0, # 'Ω' + 17: 0, # 'ά' + 18: 0, # 'έ' + 22: 0, # 'ή' + 15: 0, # 'ί' + 1: 0, # 'α' + 29: 1, # 'β' + 20: 0, # 'γ' + 21: 3, # 'δ' + 3: 0, # 'ε' + 32: 0, # 'ζ' + 13: 1, # 'η' + 25: 2, # 'θ' + 5: 2, # 'ι' + 11: 0, # 'κ' + 16: 2, # 'λ' + 10: 3, # 'μ' + 6: 3, # 'ν' + 30: 1, # 'ξ' + 4: 0, # 'ο' + 9: 2, # 'π' + 8: 3, # 'ρ' + 14: 3, # 'ς' + 7: 3, # 'σ' + 2: 3, # 'τ' + 12: 0, # 'υ' + 28: 1, # 'φ' + 23: 1, # 'χ' + 42: 0, # 'ψ' + 24: 0, # 'ω' + 19: 0, # 'ό' + 26: 0, # 'ύ' + 27: 0, # 'ώ' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +WINDOWS_1253_GREEK_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 82, # 'A' + 66: 100, # 'B' + 67: 104, # 'C' + 68: 94, # 'D' + 69: 98, # 'E' + 70: 101, # 'F' + 71: 116, # 'G' + 72: 102, # 'H' + 73: 111, # 'I' + 74: 187, # 'J' + 75: 117, # 'K' + 76: 92, # 'L' + 77: 88, # 'M' + 78: 113, # 'N' + 79: 85, # 'O' + 80: 79, # 'P' + 81: 118, # 'Q' + 82: 105, # 'R' + 83: 83, # 'S' + 84: 67, # 'T' + 85: 114, # 'U' + 86: 119, # 'V' + 87: 95, # 'W' + 88: 99, # 'X' + 89: 109, # 'Y' + 90: 188, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 72, # 'a' + 98: 70, # 'b' + 99: 80, # 'c' + 100: 81, # 'd' + 101: 60, # 'e' + 102: 96, # 'f' + 103: 93, # 'g' + 104: 89, # 'h' + 105: 68, # 'i' + 106: 120, # 'j' + 107: 97, # 'k' + 108: 77, # 'l' + 109: 86, # 'm' + 110: 69, # 'n' + 111: 55, # 'o' + 112: 78, # 'p' + 113: 115, # 'q' + 114: 65, # 'r' + 115: 66, # 's' + 116: 58, # 't' + 117: 76, # 'u' + 118: 106, # 'v' + 119: 103, # 'w' + 120: 87, # 'x' + 121: 107, # 'y' + 122: 112, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 255, # '€' + 129: 255, # None + 130: 255, # '‚' + 131: 255, # 'ƒ' + 132: 255, # '„' + 133: 255, # '…' + 134: 255, # '†' + 135: 255, # '‡' + 136: 255, # None + 137: 255, # '‰' + 138: 255, # None + 139: 255, # '‹' + 140: 255, # None + 141: 255, # None + 142: 255, # None + 143: 255, # None + 144: 255, # None + 145: 255, # '‘' + 146: 255, # '’' + 147: 255, # '“' + 148: 255, # '”' + 149: 255, # '•' + 150: 255, # '–' + 151: 255, # '—' + 152: 255, # None + 153: 255, # '™' + 154: 255, # None + 155: 255, # '›' + 156: 255, # None + 157: 255, # None + 158: 255, # None + 159: 255, # None + 160: 253, # '\xa0' + 161: 233, # '΅' + 162: 61, # 'Ά' + 163: 253, # '£' + 164: 253, # '¤' + 165: 253, # '¥' + 166: 253, # '¦' + 167: 253, # '§' + 168: 253, # '¨' + 169: 253, # '©' + 170: 253, # None + 171: 253, # '«' + 172: 253, # '¬' + 173: 74, # '\xad' + 174: 253, # '®' + 175: 253, # '―' + 176: 253, # '°' + 177: 253, # '±' + 178: 253, # '²' + 179: 253, # '³' + 180: 247, # '΄' + 181: 253, # 'µ' + 182: 253, # '¶' + 183: 36, # '·' + 184: 46, # 'Έ' + 185: 71, # 'Ή' + 186: 73, # 'Ί' + 187: 253, # '»' + 188: 54, # 'Ό' + 189: 253, # '½' + 190: 108, # 'Ύ' + 191: 123, # 'Ώ' + 192: 110, # 'ΐ' + 193: 31, # 'Α' + 194: 51, # 'Β' + 195: 43, # 'Γ' + 196: 41, # 'Δ' + 197: 34, # 'Ε' + 198: 91, # 'Ζ' + 199: 40, # 'Η' + 200: 52, # 'Θ' + 201: 47, # 'Ι' + 202: 44, # 'Κ' + 203: 53, # 'Λ' + 204: 38, # 'Μ' + 205: 49, # 'Ν' + 206: 59, # 'Ξ' + 207: 39, # 'Ο' + 208: 35, # 'Π' + 209: 48, # 'Ρ' + 210: 250, # None + 211: 37, # 'Σ' + 212: 33, # 'Τ' + 213: 45, # 'Υ' + 214: 56, # 'Φ' + 215: 50, # 'Χ' + 216: 84, # 'Ψ' + 217: 57, # 'Ω' + 218: 120, # 'Ϊ' + 219: 121, # 'Ϋ' + 220: 17, # 'ά' + 221: 18, # 'έ' + 222: 22, # 'ή' + 223: 15, # 'ί' + 224: 124, # 'ΰ' + 225: 1, # 'α' + 226: 29, # 'β' + 227: 20, # 'γ' + 228: 21, # 'δ' + 229: 3, # 'ε' + 230: 32, # 'ζ' + 231: 13, # 'η' + 232: 25, # 'θ' + 233: 5, # 'ι' + 234: 11, # 'κ' + 235: 16, # 'λ' + 236: 10, # 'μ' + 237: 6, # 'ν' + 238: 30, # 'ξ' + 239: 4, # 'ο' + 240: 9, # 'π' + 241: 8, # 'ρ' + 242: 14, # 'ς' + 243: 7, # 'σ' + 244: 2, # 'τ' + 245: 12, # 'υ' + 246: 28, # 'φ' + 247: 23, # 'χ' + 248: 42, # 'ψ' + 249: 24, # 'ω' + 250: 64, # 'ϊ' + 251: 75, # 'ϋ' + 252: 19, # 'ό' + 253: 26, # 'ύ' + 254: 27, # 'ώ' + 255: 253, # None +} + +WINDOWS_1253_GREEK_MODEL = SingleByteCharSetModel( + charset_name="windows-1253", + language="Greek", + char_to_order_map=WINDOWS_1253_GREEK_CHAR_TO_ORDER, + language_model=GREEK_LANG_MODEL, + typical_positive_ratio=0.982851, + keep_ascii_letters=False, + alphabet="ΆΈΉΊΌΎΏΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩάέήίαβγδεζηθικλμνξοπρςστυφχψωόύώ", +) + +ISO_8859_7_GREEK_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 82, # 'A' + 66: 100, # 'B' + 67: 104, # 'C' + 68: 94, # 'D' + 69: 98, # 'E' + 70: 101, # 'F' + 71: 116, # 'G' + 72: 102, # 'H' + 73: 111, # 'I' + 74: 187, # 'J' + 75: 117, # 'K' + 76: 92, # 'L' + 77: 88, # 'M' + 78: 113, # 'N' + 79: 85, # 'O' + 80: 79, # 'P' + 81: 118, # 'Q' + 82: 105, # 'R' + 83: 83, # 'S' + 84: 67, # 'T' + 85: 114, # 'U' + 86: 119, # 'V' + 87: 95, # 'W' + 88: 99, # 'X' + 89: 109, # 'Y' + 90: 188, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 72, # 'a' + 98: 70, # 'b' + 99: 80, # 'c' + 100: 81, # 'd' + 101: 60, # 'e' + 102: 96, # 'f' + 103: 93, # 'g' + 104: 89, # 'h' + 105: 68, # 'i' + 106: 120, # 'j' + 107: 97, # 'k' + 108: 77, # 'l' + 109: 86, # 'm' + 110: 69, # 'n' + 111: 55, # 'o' + 112: 78, # 'p' + 113: 115, # 'q' + 114: 65, # 'r' + 115: 66, # 's' + 116: 58, # 't' + 117: 76, # 'u' + 118: 106, # 'v' + 119: 103, # 'w' + 120: 87, # 'x' + 121: 107, # 'y' + 122: 112, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 255, # '\x80' + 129: 255, # '\x81' + 130: 255, # '\x82' + 131: 255, # '\x83' + 132: 255, # '\x84' + 133: 255, # '\x85' + 134: 255, # '\x86' + 135: 255, # '\x87' + 136: 255, # '\x88' + 137: 255, # '\x89' + 138: 255, # '\x8a' + 139: 255, # '\x8b' + 140: 255, # '\x8c' + 141: 255, # '\x8d' + 142: 255, # '\x8e' + 143: 255, # '\x8f' + 144: 255, # '\x90' + 145: 255, # '\x91' + 146: 255, # '\x92' + 147: 255, # '\x93' + 148: 255, # '\x94' + 149: 255, # '\x95' + 150: 255, # '\x96' + 151: 255, # '\x97' + 152: 255, # '\x98' + 153: 255, # '\x99' + 154: 255, # '\x9a' + 155: 255, # '\x9b' + 156: 255, # '\x9c' + 157: 255, # '\x9d' + 158: 255, # '\x9e' + 159: 255, # '\x9f' + 160: 253, # '\xa0' + 161: 233, # '‘' + 162: 90, # '’' + 163: 253, # '£' + 164: 253, # '€' + 165: 253, # '₯' + 166: 253, # '¦' + 167: 253, # '§' + 168: 253, # '¨' + 169: 253, # '©' + 170: 253, # 'ͺ' + 171: 253, # '«' + 172: 253, # '¬' + 173: 74, # '\xad' + 174: 253, # None + 175: 253, # '―' + 176: 253, # '°' + 177: 253, # '±' + 178: 253, # '²' + 179: 253, # '³' + 180: 247, # '΄' + 181: 248, # '΅' + 182: 61, # 'Ά' + 183: 36, # '·' + 184: 46, # 'Έ' + 185: 71, # 'Ή' + 186: 73, # 'Ί' + 187: 253, # '»' + 188: 54, # 'Ό' + 189: 253, # '½' + 190: 108, # 'Ύ' + 191: 123, # 'Ώ' + 192: 110, # 'ΐ' + 193: 31, # 'Α' + 194: 51, # 'Β' + 195: 43, # 'Γ' + 196: 41, # 'Δ' + 197: 34, # 'Ε' + 198: 91, # 'Ζ' + 199: 40, # 'Η' + 200: 52, # 'Θ' + 201: 47, # 'Ι' + 202: 44, # 'Κ' + 203: 53, # 'Λ' + 204: 38, # 'Μ' + 205: 49, # 'Ν' + 206: 59, # 'Ξ' + 207: 39, # 'Ο' + 208: 35, # 'Π' + 209: 48, # 'Ρ' + 210: 250, # None + 211: 37, # 'Σ' + 212: 33, # 'Τ' + 213: 45, # 'Υ' + 214: 56, # 'Φ' + 215: 50, # 'Χ' + 216: 84, # 'Ψ' + 217: 57, # 'Ω' + 218: 120, # 'Ϊ' + 219: 121, # 'Ϋ' + 220: 17, # 'ά' + 221: 18, # 'έ' + 222: 22, # 'ή' + 223: 15, # 'ί' + 224: 124, # 'ΰ' + 225: 1, # 'α' + 226: 29, # 'β' + 227: 20, # 'γ' + 228: 21, # 'δ' + 229: 3, # 'ε' + 230: 32, # 'ζ' + 231: 13, # 'η' + 232: 25, # 'θ' + 233: 5, # 'ι' + 234: 11, # 'κ' + 235: 16, # 'λ' + 236: 10, # 'μ' + 237: 6, # 'ν' + 238: 30, # 'ξ' + 239: 4, # 'ο' + 240: 9, # 'π' + 241: 8, # 'ρ' + 242: 14, # 'ς' + 243: 7, # 'σ' + 244: 2, # 'τ' + 245: 12, # 'υ' + 246: 28, # 'φ' + 247: 23, # 'χ' + 248: 42, # 'ψ' + 249: 24, # 'ω' + 250: 64, # 'ϊ' + 251: 75, # 'ϋ' + 252: 19, # 'ό' + 253: 26, # 'ύ' + 254: 27, # 'ώ' + 255: 253, # None +} + +ISO_8859_7_GREEK_MODEL = SingleByteCharSetModel( + charset_name="ISO-8859-7", + language="Greek", + char_to_order_map=ISO_8859_7_GREEK_CHAR_TO_ORDER, + language_model=GREEK_LANG_MODEL, + typical_positive_ratio=0.982851, + keep_ascii_letters=False, + alphabet="ΆΈΉΊΌΎΏΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩάέήίαβγδεζηθικλμνξοπρςστυφχψωόύώ", +) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langhebrewmodel.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langhebrewmodel.py new file mode 100644 index 0000000..86b3c5e --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langhebrewmodel.py @@ -0,0 +1,4380 @@ +from chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +HEBREW_LANG_MODEL = { + 50: { # 'a' + 50: 0, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 2, # 'l' + 54: 2, # 'n' + 49: 0, # 'o' + 51: 2, # 'r' + 43: 1, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 1, # 'ק' + 7: 0, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 60: { # 'c' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 0, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 0, # 'n' + 49: 1, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 61: { # 'd' + 50: 1, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 2, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 0, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 1, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 42: { # 'e' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 2, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 2, # 'l' + 54: 2, # 'n' + 49: 1, # 'o' + 51: 2, # 'r' + 43: 2, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 1, # '–' + 52: 2, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 53: { # 'i' + 50: 1, # 'a' + 60: 2, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 0, # 'i' + 56: 1, # 'l' + 54: 2, # 'n' + 49: 2, # 'o' + 51: 1, # 'r' + 43: 2, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 56: { # 'l' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 2, # 'e' + 53: 2, # 'i' + 56: 2, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 0, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 54: { # 'n' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 0, # 'r' + 43: 1, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 2, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 49: { # 'o' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 2, # 'n' + 49: 1, # 'o' + 51: 2, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 51: { # 'r' + 50: 2, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 2, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 2, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 2, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 43: { # 's' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 0, # 'd' + 42: 2, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 2, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 44: { # 't' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 0, # 'd' + 42: 2, # 'e' + 53: 2, # 'i' + 56: 1, # 'l' + 54: 0, # 'n' + 49: 1, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 2, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 63: { # 'u' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 0, # 'o' + 51: 1, # 'r' + 43: 2, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 34: { # '\xa0' + 50: 1, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 0, # 'e' + 53: 1, # 'i' + 56: 0, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 0, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 2, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 2, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 2, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 55: { # '´' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 1, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 2, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 1, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 48: { # '¼' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 39: { # '½' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 57: { # '¾' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 30: { # 'ְ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 1, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 2, # 'ו' + 24: 2, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 2, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 1, # 'ם' + 6: 2, # 'מ' + 23: 0, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 2, # 'ע' + 26: 0, # 'ף' + 18: 2, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 59: { # 'ֱ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 1, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 0, # 'ם' + 6: 2, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 41: { # 'ֲ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 1, # 'י' + 25: 1, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 0, # 'ם' + 6: 2, # 'מ' + 23: 0, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 1, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 33: { # 'ִ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 1, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 0, # 'ַ' + 29: 1, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 1, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 2, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 37: { # 'ֵ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 1, # 'ַ' + 29: 1, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 2, # 'ח' + 22: 1, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 1, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 1, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 36: { # 'ֶ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 1, # 'ַ' + 29: 1, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 2, # 'ח' + 22: 1, # 'ט' + 1: 2, # 'י' + 25: 2, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 1, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 2, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 31: { # 'ַ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 1, # 'ֶ' + 31: 0, # 'ַ' + 29: 2, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 1, # 'ו' + 24: 2, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 2, # 'ע' + 26: 2, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 29: { # 'ָ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 1, # 'ַ' + 29: 2, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 1, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 3, # 'ה' + 2: 2, # 'ו' + 24: 2, # 'ז' + 14: 2, # 'ח' + 22: 1, # 'ט' + 1: 2, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 35: { # 'ֹ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 1, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 2, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 1, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 2, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 62: { # 'ֻ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 2, # 'ל' + 11: 1, # 'ם' + 6: 1, # 'מ' + 23: 1, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 28: { # 'ּ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 3, # 'ְ' + 59: 0, # 'ֱ' + 41: 1, # 'ֲ' + 33: 3, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 3, # 'ַ' + 29: 3, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 2, # 'ׁ' + 45: 1, # 'ׂ' + 9: 2, # 'א' + 8: 2, # 'ב' + 20: 1, # 'ג' + 16: 2, # 'ד' + 3: 1, # 'ה' + 2: 2, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 2, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 2, # 'ל' + 11: 1, # 'ם' + 6: 2, # 'מ' + 23: 1, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 1, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 2, # 'ר' + 10: 2, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 38: { # 'ׁ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 2, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 45: { # 'ׂ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 2, # 'ֶ' + 31: 1, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 1, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 2, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 1, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 0, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 9: { # 'א' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 2, # 'ֱ' + 41: 2, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 2, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 8: { # 'ב' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 3, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 1, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 20: { # 'ג' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 2, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 1, # 'ִ' + 37: 1, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 0, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 1, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 2, # 'פ' + 27: 1, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 16: { # 'ד' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 1, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 3: { # 'ה' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 1, # 'ֱ' + 41: 2, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 3, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 0, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 2: { # 'ו' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 3, # 'ֹ' + 62: 0, # 'ֻ' + 28: 3, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 3, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 24: { # 'ז' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 1, # 'ֲ' + 33: 1, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 2, # 'ב' + 20: 2, # 'ג' + 16: 2, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 2, # 'ח' + 22: 1, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 2, # 'נ' + 19: 1, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 1, # 'ש' + 5: 2, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 14: { # 'ח' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 1, # 'ֱ' + 41: 2, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 2, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 1, # 'ע' + 26: 2, # 'ף' + 18: 2, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 22: { # 'ט' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 1, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 1, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 1, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 2, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 3, # 'ר' + 10: 2, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 1: { # 'י' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 3, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 25: { # 'ך' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 2, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 1, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 15: { # 'כ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 3, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 2, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 2, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 4: { # 'ל' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 3, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 11: { # 'ם' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 1, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 1, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 6: { # 'מ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 0, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 23: { # 'ן' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 1, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 1, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 12: { # 'נ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 19: { # 'ס' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 1, # 'ָ' + 35: 1, # 'ֹ' + 62: 2, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 1, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 3, # 'ף' + 18: 3, # 'פ' + 27: 0, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 1, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 13: { # 'ע' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 1, # 'ֱ' + 41: 2, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 1, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 2, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 2, # 'ע' + 26: 1, # 'ף' + 18: 2, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 26: { # 'ף' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 1, # 'ס' + 13: 0, # 'ע' + 26: 1, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 18: { # 'פ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 1, # 'ֵ' + 36: 2, # 'ֶ' + 31: 1, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 2, # 'ב' + 20: 3, # 'ג' + 16: 2, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 2, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 2, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 27: { # 'ץ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 1, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 0, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 21: { # 'צ' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 1, # 'ז' + 14: 3, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 1, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 1, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 0, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 17: { # 'ק' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 1, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 1, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 2, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 1, # 'ך' + 15: 1, # 'כ' + 4: 3, # 'ל' + 11: 2, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 2, # 'ץ' + 21: 3, # 'צ' + 17: 2, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 7: { # 'ר' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 2, # '´' + 48: 1, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 1, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 2, # 'ֹ' + 62: 1, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 3, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 3, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 3, # 'ץ' + 21: 3, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 10: { # 'ש' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 1, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 1, # 'ִ' + 37: 1, # 'ֵ' + 36: 1, # 'ֶ' + 31: 1, # 'ַ' + 29: 1, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 3, # 'ׁ' + 45: 2, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 3, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 3, # 'ט' + 1: 3, # 'י' + 25: 3, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 2, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 1, # '…' + }, + 5: { # 'ת' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 1, # '\xa0' + 55: 0, # '´' + 48: 1, # '¼' + 39: 1, # '½' + 57: 0, # '¾' + 30: 2, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 2, # 'ִ' + 37: 2, # 'ֵ' + 36: 2, # 'ֶ' + 31: 2, # 'ַ' + 29: 2, # 'ָ' + 35: 1, # 'ֹ' + 62: 1, # 'ֻ' + 28: 2, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 3, # 'א' + 8: 3, # 'ב' + 20: 3, # 'ג' + 16: 2, # 'ד' + 3: 3, # 'ה' + 2: 3, # 'ו' + 24: 2, # 'ז' + 14: 3, # 'ח' + 22: 2, # 'ט' + 1: 3, # 'י' + 25: 2, # 'ך' + 15: 3, # 'כ' + 4: 3, # 'ל' + 11: 3, # 'ם' + 6: 3, # 'מ' + 23: 3, # 'ן' + 12: 3, # 'נ' + 19: 2, # 'ס' + 13: 3, # 'ע' + 26: 2, # 'ף' + 18: 3, # 'פ' + 27: 1, # 'ץ' + 21: 2, # 'צ' + 17: 3, # 'ק' + 7: 3, # 'ר' + 10: 3, # 'ש' + 5: 3, # 'ת' + 32: 1, # '–' + 52: 1, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, + 32: { # '–' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 1, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 1, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 52: { # '’' + 50: 1, # 'a' + 60: 0, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 1, # 'r' + 43: 2, # 's' + 44: 2, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 1, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 47: { # '“' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 1, # 'l' + 54: 1, # 'n' + 49: 1, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 1, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 2, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 1, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 1, # 'ח' + 22: 1, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 1, # 'ס' + 13: 1, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 1, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 46: { # '”' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 1, # 'ב' + 20: 1, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 1, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 0, # '†' + 40: 0, # '…' + }, + 58: { # '†' + 50: 0, # 'a' + 60: 0, # 'c' + 61: 0, # 'd' + 42: 0, # 'e' + 53: 0, # 'i' + 56: 0, # 'l' + 54: 0, # 'n' + 49: 0, # 'o' + 51: 0, # 'r' + 43: 0, # 's' + 44: 0, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 0, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 0, # 'ה' + 2: 0, # 'ו' + 24: 0, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 0, # 'י' + 25: 0, # 'ך' + 15: 0, # 'כ' + 4: 0, # 'ל' + 11: 0, # 'ם' + 6: 0, # 'מ' + 23: 0, # 'ן' + 12: 0, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 0, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 0, # 'ר' + 10: 0, # 'ש' + 5: 0, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 0, # '”' + 58: 2, # '†' + 40: 0, # '…' + }, + 40: { # '…' + 50: 1, # 'a' + 60: 1, # 'c' + 61: 1, # 'd' + 42: 1, # 'e' + 53: 1, # 'i' + 56: 0, # 'l' + 54: 1, # 'n' + 49: 0, # 'o' + 51: 1, # 'r' + 43: 1, # 's' + 44: 1, # 't' + 63: 0, # 'u' + 34: 0, # '\xa0' + 55: 0, # '´' + 48: 0, # '¼' + 39: 0, # '½' + 57: 0, # '¾' + 30: 0, # 'ְ' + 59: 0, # 'ֱ' + 41: 0, # 'ֲ' + 33: 0, # 'ִ' + 37: 0, # 'ֵ' + 36: 0, # 'ֶ' + 31: 0, # 'ַ' + 29: 0, # 'ָ' + 35: 0, # 'ֹ' + 62: 0, # 'ֻ' + 28: 0, # 'ּ' + 38: 0, # 'ׁ' + 45: 0, # 'ׂ' + 9: 1, # 'א' + 8: 0, # 'ב' + 20: 0, # 'ג' + 16: 0, # 'ד' + 3: 1, # 'ה' + 2: 1, # 'ו' + 24: 1, # 'ז' + 14: 0, # 'ח' + 22: 0, # 'ט' + 1: 1, # 'י' + 25: 0, # 'ך' + 15: 1, # 'כ' + 4: 1, # 'ל' + 11: 0, # 'ם' + 6: 1, # 'מ' + 23: 0, # 'ן' + 12: 1, # 'נ' + 19: 0, # 'ס' + 13: 0, # 'ע' + 26: 0, # 'ף' + 18: 1, # 'פ' + 27: 0, # 'ץ' + 21: 0, # 'צ' + 17: 0, # 'ק' + 7: 1, # 'ר' + 10: 1, # 'ש' + 5: 1, # 'ת' + 32: 0, # '–' + 52: 0, # '’' + 47: 0, # '“' + 46: 1, # '”' + 58: 0, # '†' + 40: 2, # '…' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +WINDOWS_1255_HEBREW_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 69, # 'A' + 66: 91, # 'B' + 67: 79, # 'C' + 68: 80, # 'D' + 69: 92, # 'E' + 70: 89, # 'F' + 71: 97, # 'G' + 72: 90, # 'H' + 73: 68, # 'I' + 74: 111, # 'J' + 75: 112, # 'K' + 76: 82, # 'L' + 77: 73, # 'M' + 78: 95, # 'N' + 79: 85, # 'O' + 80: 78, # 'P' + 81: 121, # 'Q' + 82: 86, # 'R' + 83: 71, # 'S' + 84: 67, # 'T' + 85: 102, # 'U' + 86: 107, # 'V' + 87: 84, # 'W' + 88: 114, # 'X' + 89: 103, # 'Y' + 90: 115, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 50, # 'a' + 98: 74, # 'b' + 99: 60, # 'c' + 100: 61, # 'd' + 101: 42, # 'e' + 102: 76, # 'f' + 103: 70, # 'g' + 104: 64, # 'h' + 105: 53, # 'i' + 106: 105, # 'j' + 107: 93, # 'k' + 108: 56, # 'l' + 109: 65, # 'm' + 110: 54, # 'n' + 111: 49, # 'o' + 112: 66, # 'p' + 113: 110, # 'q' + 114: 51, # 'r' + 115: 43, # 's' + 116: 44, # 't' + 117: 63, # 'u' + 118: 81, # 'v' + 119: 77, # 'w' + 120: 98, # 'x' + 121: 75, # 'y' + 122: 108, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 124, # '€' + 129: 202, # None + 130: 203, # '‚' + 131: 204, # 'ƒ' + 132: 205, # '„' + 133: 40, # '…' + 134: 58, # '†' + 135: 206, # '‡' + 136: 207, # 'ˆ' + 137: 208, # '‰' + 138: 209, # None + 139: 210, # '‹' + 140: 211, # None + 141: 212, # None + 142: 213, # None + 143: 214, # None + 144: 215, # None + 145: 83, # '‘' + 146: 52, # '’' + 147: 47, # '“' + 148: 46, # '”' + 149: 72, # '•' + 150: 32, # '–' + 151: 94, # '—' + 152: 216, # '˜' + 153: 113, # '™' + 154: 217, # None + 155: 109, # '›' + 156: 218, # None + 157: 219, # None + 158: 220, # None + 159: 221, # None + 160: 34, # '\xa0' + 161: 116, # '¡' + 162: 222, # '¢' + 163: 118, # '£' + 164: 100, # '₪' + 165: 223, # '¥' + 166: 224, # '¦' + 167: 117, # '§' + 168: 119, # '¨' + 169: 104, # '©' + 170: 125, # '×' + 171: 225, # '«' + 172: 226, # '¬' + 173: 87, # '\xad' + 174: 99, # '®' + 175: 227, # '¯' + 176: 106, # '°' + 177: 122, # '±' + 178: 123, # '²' + 179: 228, # '³' + 180: 55, # '´' + 181: 229, # 'µ' + 182: 230, # '¶' + 183: 101, # '·' + 184: 231, # '¸' + 185: 232, # '¹' + 186: 120, # '÷' + 187: 233, # '»' + 188: 48, # '¼' + 189: 39, # '½' + 190: 57, # '¾' + 191: 234, # '¿' + 192: 30, # 'ְ' + 193: 59, # 'ֱ' + 194: 41, # 'ֲ' + 195: 88, # 'ֳ' + 196: 33, # 'ִ' + 197: 37, # 'ֵ' + 198: 36, # 'ֶ' + 199: 31, # 'ַ' + 200: 29, # 'ָ' + 201: 35, # 'ֹ' + 202: 235, # None + 203: 62, # 'ֻ' + 204: 28, # 'ּ' + 205: 236, # 'ֽ' + 206: 126, # '־' + 207: 237, # 'ֿ' + 208: 238, # '׀' + 209: 38, # 'ׁ' + 210: 45, # 'ׂ' + 211: 239, # '׃' + 212: 240, # 'װ' + 213: 241, # 'ױ' + 214: 242, # 'ײ' + 215: 243, # '׳' + 216: 127, # '״' + 217: 244, # None + 218: 245, # None + 219: 246, # None + 220: 247, # None + 221: 248, # None + 222: 249, # None + 223: 250, # None + 224: 9, # 'א' + 225: 8, # 'ב' + 226: 20, # 'ג' + 227: 16, # 'ד' + 228: 3, # 'ה' + 229: 2, # 'ו' + 230: 24, # 'ז' + 231: 14, # 'ח' + 232: 22, # 'ט' + 233: 1, # 'י' + 234: 25, # 'ך' + 235: 15, # 'כ' + 236: 4, # 'ל' + 237: 11, # 'ם' + 238: 6, # 'מ' + 239: 23, # 'ן' + 240: 12, # 'נ' + 241: 19, # 'ס' + 242: 13, # 'ע' + 243: 26, # 'ף' + 244: 18, # 'פ' + 245: 27, # 'ץ' + 246: 21, # 'צ' + 247: 17, # 'ק' + 248: 7, # 'ר' + 249: 10, # 'ש' + 250: 5, # 'ת' + 251: 251, # None + 252: 252, # None + 253: 128, # '\u200e' + 254: 96, # '\u200f' + 255: 253, # None +} + +WINDOWS_1255_HEBREW_MODEL = SingleByteCharSetModel( + charset_name="windows-1255", + language="Hebrew", + char_to_order_map=WINDOWS_1255_HEBREW_CHAR_TO_ORDER, + language_model=HEBREW_LANG_MODEL, + typical_positive_ratio=0.984004, + keep_ascii_letters=False, + alphabet="אבגדהוזחטיךכלםמןנסעףפץצקרשתװױײ", +) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langhungarianmodel.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langhungarianmodel.py new file mode 100644 index 0000000..bd6630a --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langhungarianmodel.py @@ -0,0 +1,4649 @@ +from chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +HUNGARIAN_LANG_MODEL = { + 28: { # 'A' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 2, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 2, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 2, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 2, # 'N' + 47: 1, # 'O' + 46: 2, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 2, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 2, # 'p' + 10: 2, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 1, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 1, # 'Á' + 44: 0, # 'É' + 61: 1, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 40: { # 'B' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 0, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 1, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 3, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 54: { # 'C' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 0, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 0, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 1, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 3, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 45: { # 'D' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 0, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 0, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 1, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 32: { # 'E' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 2, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 2, # 'K' + 41: 2, # 'L' + 34: 2, # 'M' + 35: 2, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 1, # 't' + 21: 2, # 'u' + 19: 1, # 'v' + 62: 1, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 0, # 'Ú' + 63: 1, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 50: { # 'F' + 28: 1, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 0, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 0, # 'V' + 55: 1, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 1, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 1, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 0, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 49: { # 'G' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 2, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 38: { # 'H' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 0, # 'D' + 32: 1, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 1, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 1, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 1, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 0, # 'V' + 55: 1, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 1, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 0, # 'n' + 8: 3, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 2, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 2, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 39: { # 'I' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 2, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 2, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 2, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 0, # 'e' + 27: 1, # 'f' + 12: 2, # 'g' + 20: 1, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 53: { # 'J' + 28: 2, # 'A' + 40: 0, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 1, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 0, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 36: { # 'K' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 1, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 3, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 2, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 41: { # 'L' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 1, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 34: { # 'M' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 0, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 3, # 'a' + 18: 0, # 'b' + 26: 1, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 3, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 1, # 'ű' + }, + 35: { # 'N' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 2, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 2, # 'Y' + 52: 1, # 'Z' + 2: 3, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 47: { # 'O' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 2, # 'K' + 41: 2, # 'L' + 34: 2, # 'M' + 35: 2, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 1, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 1, # 's' + 3: 2, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 1, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 1, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 46: { # 'P' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 0, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 1, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 1, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 0, # 'Ú' + 63: 1, # 'Ü' + 14: 3, # 'á' + 15: 2, # 'é' + 30: 0, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 0, # 'ű' + }, + 43: { # 'R' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 2, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 2, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 33: { # 'S' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 3, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 1, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 1, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 1, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 37: { # 'T' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 1, # 'S' + 37: 2, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 2, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 1, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 0, # 't' + 21: 2, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 2, # 'Á' + 44: 2, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 57: { # 'U' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 0, # 'f' + 12: 2, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 1, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 48: { # 'V' + 28: 2, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 0, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 2, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 2, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 2, # 'o' + 23: 0, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 2, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 0, # 'Ú' + 63: 1, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 55: { # 'Y' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 1, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 2, # 'Z' + 2: 1, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 8: 1, # 'o' + 23: 1, # 'p' + 10: 0, # 'r' + 5: 0, # 's' + 3: 0, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 1, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 52: { # 'Z' + 28: 2, # 'A' + 40: 1, # 'B' + 54: 0, # 'C' + 45: 1, # 'D' + 32: 2, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 2, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 2, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 1, # 'U' + 48: 1, # 'V' + 55: 1, # 'Y' + 52: 1, # 'Z' + 2: 1, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 1, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 1, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 2, # 's' + 3: 0, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 2, # 'Á' + 44: 1, # 'É' + 61: 1, # 'Í' + 58: 1, # 'Ó' + 59: 1, # 'Ö' + 60: 1, # 'Ú' + 63: 1, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 2: { # 'a' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 2, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 2, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 2, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 18: { # 'b' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 2, # 's' + 3: 1, # 't' + 21: 3, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 3, # 'ó' + 24: 2, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 26: { # 'c' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 1, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 1, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 1, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 2, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 2, # 't' + 21: 2, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 2, # 'á' + 15: 2, # 'é' + 30: 2, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 17: { # 'd' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 2, # 'k' + 6: 1, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 1: { # 'e' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 2, # 'e' + 27: 3, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 2, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 2, # 'u' + 19: 3, # 'v' + 62: 2, # 'x' + 16: 2, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 27: { # 'f' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 0, # 'p' + 10: 3, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 2, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 3, # 'ö' + 31: 1, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 12: { # 'g' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 2, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 2, # 'k' + 6: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 3, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 3, # 'ó' + 24: 2, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 20: { # 'h' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 0, # 'd' + 1: 3, # 'e' + 27: 0, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 2, # 's' + 3: 1, # 't' + 21: 3, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 2, # 'ú' + 29: 1, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 9: { # 'i' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 3, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 2, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 3, # 'ó' + 24: 1, # 'ö' + 31: 2, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 1, # 'ű' + }, + 22: { # 'j' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 1, # 'i' + 22: 2, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 1, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 3, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 7: { # 'k' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 2, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 2, # 'ó' + 24: 3, # 'ö' + 31: 1, # 'ú' + 29: 3, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 6: { # 'l' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 1, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 3, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 3, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 3, # 'ő' + 56: 1, # 'ű' + }, + 13: { # 'm' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 1, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 8: 3, # 'o' + 23: 3, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 3, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 2, # 'ű' + }, + 4: { # 'n' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 1, # 'x' + 16: 3, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 3, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 8: { # 'o' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 1, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 2, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 2, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 23: { # 'p' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 1, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 2, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 3, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 10: { # 'r' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 2, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 3, # 'ú' + 29: 3, # 'ü' + 42: 2, # 'ő' + 56: 2, # 'ű' + }, + 5: { # 's' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 2, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 2, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 3, # 'k' + 6: 2, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 3, # 'ú' + 29: 3, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 3: { # 't' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 1, # 'g' + 20: 3, # 'h' + 9: 3, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 3, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 3, # 'ú' + 29: 3, # 'ü' + 42: 3, # 'ő' + 56: 2, # 'ű' + }, + 21: { # 'u' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 2, # 'b' + 26: 2, # 'c' + 17: 3, # 'd' + 1: 2, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 2, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 1, # 'u' + 19: 3, # 'v' + 62: 1, # 'x' + 16: 1, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 2, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 0, # 'ö' + 31: 1, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 19: { # 'v' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 2, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 2, # 'ö' + 31: 1, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 1, # 'ű' + }, + 62: { # 'x' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 0, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 1, # 'i' + 22: 0, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 1, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 1, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 1, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 16: { # 'y' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 3, # 'e' + 27: 2, # 'f' + 12: 2, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 2, # 'j' + 7: 2, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 2, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 2, # 'í' + 25: 2, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 2, # 'ü' + 42: 1, # 'ő' + 56: 2, # 'ű' + }, + 11: { # 'z' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 3, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 3, # 'd' + 1: 3, # 'e' + 27: 1, # 'f' + 12: 2, # 'g' + 20: 2, # 'h' + 9: 3, # 'i' + 22: 1, # 'j' + 7: 3, # 'k' + 6: 2, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 3, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 3, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 3, # 'á' + 15: 3, # 'é' + 30: 3, # 'í' + 25: 3, # 'ó' + 24: 3, # 'ö' + 31: 2, # 'ú' + 29: 3, # 'ü' + 42: 2, # 'ő' + 56: 1, # 'ű' + }, + 51: { # 'Á' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 1, # 'F' + 49: 2, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 2, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 1, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 44: { # 'É' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 1, # 'E' + 50: 0, # 'F' + 49: 2, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 2, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 2, # 'R' + 33: 2, # 'S' + 37: 2, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 3, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 61: { # 'Í' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 1, # 'J' + 36: 0, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 2, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 1, # 'm' + 4: 0, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 0, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 58: { # 'Ó' + 28: 1, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 1, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 2, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 2, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 0, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 1, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 59: { # 'Ö' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 0, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 1, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 0, # 'b' + 26: 1, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 0, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 2, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 60: { # 'Ú' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 1, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 1, # 'F' + 49: 1, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 0, # 'b' + 26: 0, # 'c' + 17: 0, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 2, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 2, # 'j' + 7: 0, # 'k' + 6: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 0, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 0, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 63: { # 'Ü' + 28: 0, # 'A' + 40: 1, # 'B' + 54: 0, # 'C' + 45: 1, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 1, # 'G' + 38: 1, # 'H' + 39: 0, # 'I' + 53: 1, # 'J' + 36: 1, # 'K' + 41: 1, # 'L' + 34: 1, # 'M' + 35: 1, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 1, # 'R' + 33: 1, # 'S' + 37: 1, # 'T' + 57: 0, # 'U' + 48: 1, # 'V' + 55: 0, # 'Y' + 52: 1, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 0, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 0, # 'f' + 12: 1, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 0, # 'j' + 7: 0, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 1, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 14: { # 'á' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 3, # 'b' + 26: 3, # 'c' + 17: 3, # 'd' + 1: 1, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 2, # 'h' + 9: 2, # 'i' + 22: 3, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 2, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 1, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 2, # 'é' + 30: 1, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 15: { # 'é' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 3, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 3, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 3, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 0, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 30: { # 'í' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 0, # 'a' + 18: 1, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 0, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 0, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 2, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 2, # 's' + 3: 3, # 't' + 21: 0, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 25: { # 'ó' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 2, # 'a' + 18: 3, # 'b' + 26: 2, # 'c' + 17: 3, # 'd' + 1: 1, # 'e' + 27: 2, # 'f' + 12: 2, # 'g' + 20: 2, # 'h' + 9: 2, # 'i' + 22: 2, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 8: 1, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 1, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 0, # 'ó' + 24: 1, # 'ö' + 31: 1, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 24: { # 'ö' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 0, # 'a' + 18: 3, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 0, # 'e' + 27: 1, # 'f' + 12: 2, # 'g' + 20: 1, # 'h' + 9: 0, # 'i' + 22: 1, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 8: 0, # 'o' + 23: 2, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 3, # 't' + 21: 0, # 'u' + 19: 3, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 3, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 31: { # 'ú' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 2, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 2, # 'f' + 12: 3, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 3, # 'j' + 7: 1, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 3, # 'r' + 5: 3, # 's' + 3: 2, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 1, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 29: { # 'ü' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 3, # 'g' + 20: 2, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 3, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 8: 0, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 0, # 'u' + 19: 2, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 1, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 42: { # 'ő' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 2, # 'b' + 26: 1, # 'c' + 17: 2, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 2, # 'k' + 6: 3, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 8: 1, # 'o' + 23: 1, # 'p' + 10: 2, # 'r' + 5: 2, # 's' + 3: 2, # 't' + 21: 1, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 1, # 'é' + 30: 1, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 1, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, + 56: { # 'ű' + 28: 0, # 'A' + 40: 0, # 'B' + 54: 0, # 'C' + 45: 0, # 'D' + 32: 0, # 'E' + 50: 0, # 'F' + 49: 0, # 'G' + 38: 0, # 'H' + 39: 0, # 'I' + 53: 0, # 'J' + 36: 0, # 'K' + 41: 0, # 'L' + 34: 0, # 'M' + 35: 0, # 'N' + 47: 0, # 'O' + 46: 0, # 'P' + 43: 0, # 'R' + 33: 0, # 'S' + 37: 0, # 'T' + 57: 0, # 'U' + 48: 0, # 'V' + 55: 0, # 'Y' + 52: 0, # 'Z' + 2: 1, # 'a' + 18: 1, # 'b' + 26: 0, # 'c' + 17: 1, # 'd' + 1: 1, # 'e' + 27: 1, # 'f' + 12: 1, # 'g' + 20: 1, # 'h' + 9: 1, # 'i' + 22: 1, # 'j' + 7: 1, # 'k' + 6: 1, # 'l' + 13: 0, # 'm' + 4: 2, # 'n' + 8: 0, # 'o' + 23: 0, # 'p' + 10: 1, # 'r' + 5: 1, # 's' + 3: 1, # 't' + 21: 0, # 'u' + 19: 1, # 'v' + 62: 0, # 'x' + 16: 0, # 'y' + 11: 2, # 'z' + 51: 0, # 'Á' + 44: 0, # 'É' + 61: 0, # 'Í' + 58: 0, # 'Ó' + 59: 0, # 'Ö' + 60: 0, # 'Ú' + 63: 0, # 'Ü' + 14: 0, # 'á' + 15: 0, # 'é' + 30: 0, # 'í' + 25: 0, # 'ó' + 24: 0, # 'ö' + 31: 0, # 'ú' + 29: 0, # 'ü' + 42: 0, # 'ő' + 56: 0, # 'ű' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +WINDOWS_1250_HUNGARIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 28, # 'A' + 66: 40, # 'B' + 67: 54, # 'C' + 68: 45, # 'D' + 69: 32, # 'E' + 70: 50, # 'F' + 71: 49, # 'G' + 72: 38, # 'H' + 73: 39, # 'I' + 74: 53, # 'J' + 75: 36, # 'K' + 76: 41, # 'L' + 77: 34, # 'M' + 78: 35, # 'N' + 79: 47, # 'O' + 80: 46, # 'P' + 81: 72, # 'Q' + 82: 43, # 'R' + 83: 33, # 'S' + 84: 37, # 'T' + 85: 57, # 'U' + 86: 48, # 'V' + 87: 64, # 'W' + 88: 68, # 'X' + 89: 55, # 'Y' + 90: 52, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 2, # 'a' + 98: 18, # 'b' + 99: 26, # 'c' + 100: 17, # 'd' + 101: 1, # 'e' + 102: 27, # 'f' + 103: 12, # 'g' + 104: 20, # 'h' + 105: 9, # 'i' + 106: 22, # 'j' + 107: 7, # 'k' + 108: 6, # 'l' + 109: 13, # 'm' + 110: 4, # 'n' + 111: 8, # 'o' + 112: 23, # 'p' + 113: 67, # 'q' + 114: 10, # 'r' + 115: 5, # 's' + 116: 3, # 't' + 117: 21, # 'u' + 118: 19, # 'v' + 119: 65, # 'w' + 120: 62, # 'x' + 121: 16, # 'y' + 122: 11, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 161, # '€' + 129: 162, # None + 130: 163, # '‚' + 131: 164, # None + 132: 165, # '„' + 133: 166, # '…' + 134: 167, # '†' + 135: 168, # '‡' + 136: 169, # None + 137: 170, # '‰' + 138: 171, # 'Š' + 139: 172, # '‹' + 140: 173, # 'Ś' + 141: 174, # 'Ť' + 142: 175, # 'Ž' + 143: 176, # 'Ź' + 144: 177, # None + 145: 178, # '‘' + 146: 179, # '’' + 147: 180, # '“' + 148: 78, # '”' + 149: 181, # '•' + 150: 69, # '–' + 151: 182, # '—' + 152: 183, # None + 153: 184, # '™' + 154: 185, # 'š' + 155: 186, # '›' + 156: 187, # 'ś' + 157: 188, # 'ť' + 158: 189, # 'ž' + 159: 190, # 'ź' + 160: 191, # '\xa0' + 161: 192, # 'ˇ' + 162: 193, # '˘' + 163: 194, # 'Ł' + 164: 195, # '¤' + 165: 196, # 'Ą' + 166: 197, # '¦' + 167: 76, # '§' + 168: 198, # '¨' + 169: 199, # '©' + 170: 200, # 'Ş' + 171: 201, # '«' + 172: 202, # '¬' + 173: 203, # '\xad' + 174: 204, # '®' + 175: 205, # 'Ż' + 176: 81, # '°' + 177: 206, # '±' + 178: 207, # '˛' + 179: 208, # 'ł' + 180: 209, # '´' + 181: 210, # 'µ' + 182: 211, # '¶' + 183: 212, # '·' + 184: 213, # '¸' + 185: 214, # 'ą' + 186: 215, # 'ş' + 187: 216, # '»' + 188: 217, # 'Ľ' + 189: 218, # '˝' + 190: 219, # 'ľ' + 191: 220, # 'ż' + 192: 221, # 'Ŕ' + 193: 51, # 'Á' + 194: 83, # 'Â' + 195: 222, # 'Ă' + 196: 80, # 'Ä' + 197: 223, # 'Ĺ' + 198: 224, # 'Ć' + 199: 225, # 'Ç' + 200: 226, # 'Č' + 201: 44, # 'É' + 202: 227, # 'Ę' + 203: 228, # 'Ë' + 204: 229, # 'Ě' + 205: 61, # 'Í' + 206: 230, # 'Î' + 207: 231, # 'Ď' + 208: 232, # 'Đ' + 209: 233, # 'Ń' + 210: 234, # 'Ň' + 211: 58, # 'Ó' + 212: 235, # 'Ô' + 213: 66, # 'Ő' + 214: 59, # 'Ö' + 215: 236, # '×' + 216: 237, # 'Ř' + 217: 238, # 'Ů' + 218: 60, # 'Ú' + 219: 70, # 'Ű' + 220: 63, # 'Ü' + 221: 239, # 'Ý' + 222: 240, # 'Ţ' + 223: 241, # 'ß' + 224: 84, # 'ŕ' + 225: 14, # 'á' + 226: 75, # 'â' + 227: 242, # 'ă' + 228: 71, # 'ä' + 229: 82, # 'ĺ' + 230: 243, # 'ć' + 231: 73, # 'ç' + 232: 244, # 'č' + 233: 15, # 'é' + 234: 85, # 'ę' + 235: 79, # 'ë' + 236: 86, # 'ě' + 237: 30, # 'í' + 238: 77, # 'î' + 239: 87, # 'ď' + 240: 245, # 'đ' + 241: 246, # 'ń' + 242: 247, # 'ň' + 243: 25, # 'ó' + 244: 74, # 'ô' + 245: 42, # 'ő' + 246: 24, # 'ö' + 247: 248, # '÷' + 248: 249, # 'ř' + 249: 250, # 'ů' + 250: 31, # 'ú' + 251: 56, # 'ű' + 252: 29, # 'ü' + 253: 251, # 'ý' + 254: 252, # 'ţ' + 255: 253, # '˙' +} + +WINDOWS_1250_HUNGARIAN_MODEL = SingleByteCharSetModel( + charset_name="windows-1250", + language="Hungarian", + char_to_order_map=WINDOWS_1250_HUNGARIAN_CHAR_TO_ORDER, + language_model=HUNGARIAN_LANG_MODEL, + typical_positive_ratio=0.947368, + keep_ascii_letters=True, + alphabet="ABCDEFGHIJKLMNOPRSTUVZabcdefghijklmnoprstuvzÁÉÍÓÖÚÜáéíóöúüŐőŰű", +) + +ISO_8859_2_HUNGARIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 28, # 'A' + 66: 40, # 'B' + 67: 54, # 'C' + 68: 45, # 'D' + 69: 32, # 'E' + 70: 50, # 'F' + 71: 49, # 'G' + 72: 38, # 'H' + 73: 39, # 'I' + 74: 53, # 'J' + 75: 36, # 'K' + 76: 41, # 'L' + 77: 34, # 'M' + 78: 35, # 'N' + 79: 47, # 'O' + 80: 46, # 'P' + 81: 71, # 'Q' + 82: 43, # 'R' + 83: 33, # 'S' + 84: 37, # 'T' + 85: 57, # 'U' + 86: 48, # 'V' + 87: 64, # 'W' + 88: 68, # 'X' + 89: 55, # 'Y' + 90: 52, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 2, # 'a' + 98: 18, # 'b' + 99: 26, # 'c' + 100: 17, # 'd' + 101: 1, # 'e' + 102: 27, # 'f' + 103: 12, # 'g' + 104: 20, # 'h' + 105: 9, # 'i' + 106: 22, # 'j' + 107: 7, # 'k' + 108: 6, # 'l' + 109: 13, # 'm' + 110: 4, # 'n' + 111: 8, # 'o' + 112: 23, # 'p' + 113: 67, # 'q' + 114: 10, # 'r' + 115: 5, # 's' + 116: 3, # 't' + 117: 21, # 'u' + 118: 19, # 'v' + 119: 65, # 'w' + 120: 62, # 'x' + 121: 16, # 'y' + 122: 11, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 159, # '\x80' + 129: 160, # '\x81' + 130: 161, # '\x82' + 131: 162, # '\x83' + 132: 163, # '\x84' + 133: 164, # '\x85' + 134: 165, # '\x86' + 135: 166, # '\x87' + 136: 167, # '\x88' + 137: 168, # '\x89' + 138: 169, # '\x8a' + 139: 170, # '\x8b' + 140: 171, # '\x8c' + 141: 172, # '\x8d' + 142: 173, # '\x8e' + 143: 174, # '\x8f' + 144: 175, # '\x90' + 145: 176, # '\x91' + 146: 177, # '\x92' + 147: 178, # '\x93' + 148: 179, # '\x94' + 149: 180, # '\x95' + 150: 181, # '\x96' + 151: 182, # '\x97' + 152: 183, # '\x98' + 153: 184, # '\x99' + 154: 185, # '\x9a' + 155: 186, # '\x9b' + 156: 187, # '\x9c' + 157: 188, # '\x9d' + 158: 189, # '\x9e' + 159: 190, # '\x9f' + 160: 191, # '\xa0' + 161: 192, # 'Ą' + 162: 193, # '˘' + 163: 194, # 'Ł' + 164: 195, # '¤' + 165: 196, # 'Ľ' + 166: 197, # 'Ś' + 167: 75, # '§' + 168: 198, # '¨' + 169: 199, # 'Š' + 170: 200, # 'Ş' + 171: 201, # 'Ť' + 172: 202, # 'Ź' + 173: 203, # '\xad' + 174: 204, # 'Ž' + 175: 205, # 'Ż' + 176: 79, # '°' + 177: 206, # 'ą' + 178: 207, # '˛' + 179: 208, # 'ł' + 180: 209, # '´' + 181: 210, # 'ľ' + 182: 211, # 'ś' + 183: 212, # 'ˇ' + 184: 213, # '¸' + 185: 214, # 'š' + 186: 215, # 'ş' + 187: 216, # 'ť' + 188: 217, # 'ź' + 189: 218, # '˝' + 190: 219, # 'ž' + 191: 220, # 'ż' + 192: 221, # 'Ŕ' + 193: 51, # 'Á' + 194: 81, # 'Â' + 195: 222, # 'Ă' + 196: 78, # 'Ä' + 197: 223, # 'Ĺ' + 198: 224, # 'Ć' + 199: 225, # 'Ç' + 200: 226, # 'Č' + 201: 44, # 'É' + 202: 227, # 'Ę' + 203: 228, # 'Ë' + 204: 229, # 'Ě' + 205: 61, # 'Í' + 206: 230, # 'Î' + 207: 231, # 'Ď' + 208: 232, # 'Đ' + 209: 233, # 'Ń' + 210: 234, # 'Ň' + 211: 58, # 'Ó' + 212: 235, # 'Ô' + 213: 66, # 'Ő' + 214: 59, # 'Ö' + 215: 236, # '×' + 216: 237, # 'Ř' + 217: 238, # 'Ů' + 218: 60, # 'Ú' + 219: 69, # 'Ű' + 220: 63, # 'Ü' + 221: 239, # 'Ý' + 222: 240, # 'Ţ' + 223: 241, # 'ß' + 224: 82, # 'ŕ' + 225: 14, # 'á' + 226: 74, # 'â' + 227: 242, # 'ă' + 228: 70, # 'ä' + 229: 80, # 'ĺ' + 230: 243, # 'ć' + 231: 72, # 'ç' + 232: 244, # 'č' + 233: 15, # 'é' + 234: 83, # 'ę' + 235: 77, # 'ë' + 236: 84, # 'ě' + 237: 30, # 'í' + 238: 76, # 'î' + 239: 85, # 'ď' + 240: 245, # 'đ' + 241: 246, # 'ń' + 242: 247, # 'ň' + 243: 25, # 'ó' + 244: 73, # 'ô' + 245: 42, # 'ő' + 246: 24, # 'ö' + 247: 248, # '÷' + 248: 249, # 'ř' + 249: 250, # 'ů' + 250: 31, # 'ú' + 251: 56, # 'ű' + 252: 29, # 'ü' + 253: 251, # 'ý' + 254: 252, # 'ţ' + 255: 253, # '˙' +} + +ISO_8859_2_HUNGARIAN_MODEL = SingleByteCharSetModel( + charset_name="ISO-8859-2", + language="Hungarian", + char_to_order_map=ISO_8859_2_HUNGARIAN_CHAR_TO_ORDER, + language_model=HUNGARIAN_LANG_MODEL, + typical_positive_ratio=0.947368, + keep_ascii_letters=True, + alphabet="ABCDEFGHIJKLMNOPRSTUVZabcdefghijklmnoprstuvzÁÉÍÓÖÚÜáéíóöúüŐőŰű", +) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langrussianmodel.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langrussianmodel.py new file mode 100644 index 0000000..0d5b178 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langrussianmodel.py @@ -0,0 +1,5725 @@ +from chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +RUSSIAN_LANG_MODEL = { + 37: { # 'А' + 37: 0, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 2, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 1, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 0, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 1, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 0, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 44: { # 'Б' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 1, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 2, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 33: { # 'В' + 37: 2, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 2, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 1, # 'ъ' + 18: 3, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 0, # 'ю' + 16: 1, # 'я' + }, + 46: { # 'Г' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 2, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 41: { # 'Д' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 2, # 'Е' + 56: 1, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 2, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 3, # 'ж' + 20: 1, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 48: { # 'Е' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 2, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 2, # 'Р' + 32: 2, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 2, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 2, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 1, # 'н' + 1: 0, # 'о' + 15: 1, # 'п' + 9: 1, # 'р' + 7: 3, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 2, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 56: { # 'Ж' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 1, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 2, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 1, # 'м' + 5: 0, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 2, # 'ю' + 16: 0, # 'я' + }, + 51: { # 'З' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 0, # 'г' + 13: 2, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 1, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 1, # 'я' + }, + 42: { # 'И' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 2, # 'Е' + 56: 1, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 2, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 1, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 2, # 'з' + 4: 1, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 1, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 1, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 60: { # 'Й' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 1, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 36: { # 'К' + 37: 2, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 2, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 1, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 0, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 49: { # 'Л' + 37: 2, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 1, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 0, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 0, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 1, # 'л' + 12: 0, # 'м' + 5: 1, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 2, # 'ю' + 16: 1, # 'я' + }, + 38: { # 'М' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 0, # 'Ь' + 47: 1, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 1, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 1, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 31: { # 'Н' + 37: 2, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 1, # 'З' + 42: 2, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 1, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 3, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 34: { # 'О' + 37: 0, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 2, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 1, # 'З' + 42: 1, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 2, # 'Л' + 38: 1, # 'М' + 31: 2, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 2, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 1, # 'Ф' + 55: 1, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 1, # 'а' + 21: 2, # 'б' + 10: 1, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 0, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 1, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 0, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 1, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 35: { # 'П' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 2, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 0, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 3, # 'р' + 7: 1, # 'с' + 6: 1, # 'т' + 14: 2, # 'у' + 39: 1, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 0, # 'ю' + 16: 2, # 'я' + }, + 45: { # 'Р' + 37: 2, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 2, # 'Е' + 56: 1, # 'Ж' + 51: 0, # 'З' + 42: 2, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 2, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 1, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 2, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 2, # 'я' + }, + 32: { # 'С' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 2, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 1, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 2, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 2, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 1, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 1, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 40: { # 'Т' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 2, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 1, # 'Ь' + 47: 1, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 1, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 52: { # 'У' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 1, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 1, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 1, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 2, # 'и' + 23: 1, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 1, # 'н' + 1: 2, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 0, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 53: { # 'Ф' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 1, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 55: { # 'Х' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 2, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 0, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 58: { # 'Ц' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 1, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 0, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 50: { # 'Ч' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 1, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 1, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 1, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 1, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 57: { # 'Ш' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 1, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 1, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 2, # 'о' + 15: 2, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 63: { # 'Щ' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 1, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 1, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 1, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 1, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 62: { # 'Ы' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 1, # 'Ц' + 50: 0, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 0, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 0, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 61: { # 'Ь' + 37: 0, # 'А' + 44: 1, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 1, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 1, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 1, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 1, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 0, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 0, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 47: { # 'Э' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 1, # 'Й' + 36: 1, # 'К' + 49: 1, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 1, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 0, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 2, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 59: { # 'Ю' + 37: 1, # 'А' + 44: 1, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 1, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 0, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 1, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 0, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 1, # 'п' + 9: 1, # 'р' + 7: 1, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 43: { # 'Я' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 1, # 'В' + 46: 1, # 'Г' + 41: 0, # 'Д' + 48: 1, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 1, # 'С' + 40: 1, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 1, # 'Х' + 58: 0, # 'Ц' + 50: 1, # 'Ч' + 57: 0, # 'Ш' + 63: 1, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 1, # 'Ю' + 43: 1, # 'Я' + 3: 0, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 0, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 1, # 'й' + 11: 1, # 'к' + 8: 1, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 1, # 'п' + 9: 1, # 'р' + 7: 1, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 3: { # 'а' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 1, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 3, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 3, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 21: { # 'б' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 1, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 1, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 0, # 'ф' + 26: 2, # 'х' + 28: 1, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 3, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 10: { # 'в' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 3, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 3, # 'ш' + 29: 2, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 3, # 'я' + }, + 19: { # 'г' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 3, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 13: { # 'д' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 3, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 2: { # 'е' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 2, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 3, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 24: { # 'ж' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 1, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 1, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 0, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 20: { # 'з' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 3, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 1, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 3, # 'я' + }, + 4: { # 'и' + 37: 1, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 3, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 3, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 23: { # 'й' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 1, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 2, # 'з' + 4: 1, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 2, # 'ф' + 26: 1, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 2, # 'я' + }, + 11: { # 'к' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 3, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 1, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 8: { # 'л' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 3, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 1, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 1, # 'ц' + 22: 3, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 12: { # 'м' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 1, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 2, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 3, # 'я' + }, + 5: { # 'н' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 3, # 'ц' + 22: 3, # 'ч' + 25: 2, # 'ш' + 29: 2, # 'щ' + 54: 1, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 1: { # 'о' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 3, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 15: { # 'п' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 3, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 3, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 0, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 1, # 'ш' + 29: 1, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 2, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 3, # 'я' + }, + 9: { # 'р' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 2, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 3, # 'ш' + 29: 2, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 2, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 7: { # 'с' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 1, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 2, # 'ш' + 29: 1, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 6: { # 'т' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 2, # 'щ' + 54: 2, # 'ъ' + 18: 3, # 'ы' + 17: 3, # 'ь' + 30: 2, # 'э' + 27: 2, # 'ю' + 16: 3, # 'я' + }, + 14: { # 'у' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 3, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 2, # 'и' + 23: 2, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 2, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 2, # 'э' + 27: 3, # 'ю' + 16: 2, # 'я' + }, + 39: { # 'ф' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 0, # 'в' + 19: 1, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 1, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 2, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 1, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 2, # 'ы' + 17: 1, # 'ь' + 30: 2, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 26: { # 'х' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 3, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 1, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 1, # 'п' + 9: 3, # 'р' + 7: 2, # 'с' + 6: 2, # 'т' + 14: 2, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 0, # 'щ' + 54: 1, # 'ъ' + 18: 0, # 'ы' + 17: 1, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 28: { # 'ц' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 1, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 2, # 'к' + 8: 1, # 'л' + 12: 1, # 'м' + 5: 1, # 'н' + 1: 3, # 'о' + 15: 0, # 'п' + 9: 1, # 'р' + 7: 0, # 'с' + 6: 1, # 'т' + 14: 3, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 1, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 3, # 'ы' + 17: 1, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 22: { # 'ч' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 2, # 'л' + 12: 1, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 3, # 'т' + 14: 3, # 'у' + 39: 1, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 1, # 'ч' + 25: 2, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 3, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 25: { # 'ш' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 1, # 'б' + 10: 2, # 'в' + 19: 1, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 2, # 'м' + 5: 3, # 'н' + 1: 3, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 1, # 'с' + 6: 2, # 'т' + 14: 3, # 'у' + 39: 2, # 'ф' + 26: 1, # 'х' + 28: 1, # 'ц' + 22: 1, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 3, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 0, # 'я' + }, + 29: { # 'щ' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 3, # 'а' + 21: 0, # 'б' + 10: 1, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 3, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 3, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 1, # 'м' + 5: 2, # 'н' + 1: 1, # 'о' + 15: 0, # 'п' + 9: 2, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 2, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 2, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 0, # 'я' + }, + 54: { # 'ъ' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 0, # 'б' + 10: 0, # 'в' + 19: 0, # 'г' + 13: 0, # 'д' + 2: 2, # 'е' + 24: 0, # 'ж' + 20: 0, # 'з' + 4: 0, # 'и' + 23: 0, # 'й' + 11: 0, # 'к' + 8: 0, # 'л' + 12: 0, # 'м' + 5: 0, # 'н' + 1: 0, # 'о' + 15: 0, # 'п' + 9: 0, # 'р' + 7: 0, # 'с' + 6: 0, # 'т' + 14: 0, # 'у' + 39: 0, # 'ф' + 26: 0, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 0, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 1, # 'ю' + 16: 2, # 'я' + }, + 18: { # 'ы' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 3, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 2, # 'и' + 23: 3, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 1, # 'о' + 15: 3, # 'п' + 9: 3, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 0, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 3, # 'ч' + 25: 3, # 'ш' + 29: 2, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 0, # 'ю' + 16: 2, # 'я' + }, + 17: { # 'ь' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 2, # 'б' + 10: 2, # 'в' + 19: 2, # 'г' + 13: 2, # 'д' + 2: 3, # 'е' + 24: 1, # 'ж' + 20: 3, # 'з' + 4: 2, # 'и' + 23: 0, # 'й' + 11: 3, # 'к' + 8: 0, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 2, # 'о' + 15: 2, # 'п' + 9: 1, # 'р' + 7: 3, # 'с' + 6: 2, # 'т' + 14: 0, # 'у' + 39: 2, # 'ф' + 26: 1, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 3, # 'ш' + 29: 2, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 3, # 'ю' + 16: 3, # 'я' + }, + 30: { # 'э' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 1, # 'М' + 31: 1, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 1, # 'Р' + 32: 1, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 1, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 1, # 'б' + 10: 1, # 'в' + 19: 1, # 'г' + 13: 2, # 'д' + 2: 1, # 'е' + 24: 0, # 'ж' + 20: 1, # 'з' + 4: 0, # 'и' + 23: 2, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 0, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 2, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 2, # 'ф' + 26: 1, # 'х' + 28: 0, # 'ц' + 22: 0, # 'ч' + 25: 1, # 'ш' + 29: 0, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 1, # 'ю' + 16: 1, # 'я' + }, + 27: { # 'ю' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 2, # 'а' + 21: 3, # 'б' + 10: 1, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 1, # 'е' + 24: 2, # 'ж' + 20: 2, # 'з' + 4: 1, # 'и' + 23: 1, # 'й' + 11: 2, # 'к' + 8: 2, # 'л' + 12: 2, # 'м' + 5: 2, # 'н' + 1: 1, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 0, # 'у' + 39: 1, # 'ф' + 26: 2, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 1, # 'э' + 27: 2, # 'ю' + 16: 1, # 'я' + }, + 16: { # 'я' + 37: 0, # 'А' + 44: 0, # 'Б' + 33: 0, # 'В' + 46: 0, # 'Г' + 41: 0, # 'Д' + 48: 0, # 'Е' + 56: 0, # 'Ж' + 51: 0, # 'З' + 42: 0, # 'И' + 60: 0, # 'Й' + 36: 0, # 'К' + 49: 0, # 'Л' + 38: 0, # 'М' + 31: 0, # 'Н' + 34: 0, # 'О' + 35: 0, # 'П' + 45: 0, # 'Р' + 32: 0, # 'С' + 40: 0, # 'Т' + 52: 0, # 'У' + 53: 0, # 'Ф' + 55: 0, # 'Х' + 58: 0, # 'Ц' + 50: 0, # 'Ч' + 57: 0, # 'Ш' + 63: 0, # 'Щ' + 62: 0, # 'Ы' + 61: 0, # 'Ь' + 47: 0, # 'Э' + 59: 0, # 'Ю' + 43: 0, # 'Я' + 3: 0, # 'а' + 21: 2, # 'б' + 10: 3, # 'в' + 19: 2, # 'г' + 13: 3, # 'д' + 2: 3, # 'е' + 24: 3, # 'ж' + 20: 3, # 'з' + 4: 2, # 'и' + 23: 2, # 'й' + 11: 3, # 'к' + 8: 3, # 'л' + 12: 3, # 'м' + 5: 3, # 'н' + 1: 0, # 'о' + 15: 2, # 'п' + 9: 2, # 'р' + 7: 3, # 'с' + 6: 3, # 'т' + 14: 1, # 'у' + 39: 1, # 'ф' + 26: 3, # 'х' + 28: 2, # 'ц' + 22: 2, # 'ч' + 25: 2, # 'ш' + 29: 3, # 'щ' + 54: 0, # 'ъ' + 18: 0, # 'ы' + 17: 0, # 'ь' + 30: 0, # 'э' + 27: 2, # 'ю' + 16: 2, # 'я' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +IBM866_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 37, # 'А' + 129: 44, # 'Б' + 130: 33, # 'В' + 131: 46, # 'Г' + 132: 41, # 'Д' + 133: 48, # 'Е' + 134: 56, # 'Ж' + 135: 51, # 'З' + 136: 42, # 'И' + 137: 60, # 'Й' + 138: 36, # 'К' + 139: 49, # 'Л' + 140: 38, # 'М' + 141: 31, # 'Н' + 142: 34, # 'О' + 143: 35, # 'П' + 144: 45, # 'Р' + 145: 32, # 'С' + 146: 40, # 'Т' + 147: 52, # 'У' + 148: 53, # 'Ф' + 149: 55, # 'Х' + 150: 58, # 'Ц' + 151: 50, # 'Ч' + 152: 57, # 'Ш' + 153: 63, # 'Щ' + 154: 70, # 'Ъ' + 155: 62, # 'Ы' + 156: 61, # 'Ь' + 157: 47, # 'Э' + 158: 59, # 'Ю' + 159: 43, # 'Я' + 160: 3, # 'а' + 161: 21, # 'б' + 162: 10, # 'в' + 163: 19, # 'г' + 164: 13, # 'д' + 165: 2, # 'е' + 166: 24, # 'ж' + 167: 20, # 'з' + 168: 4, # 'и' + 169: 23, # 'й' + 170: 11, # 'к' + 171: 8, # 'л' + 172: 12, # 'м' + 173: 5, # 'н' + 174: 1, # 'о' + 175: 15, # 'п' + 176: 191, # '░' + 177: 192, # '▒' + 178: 193, # '▓' + 179: 194, # '│' + 180: 195, # '┤' + 181: 196, # '╡' + 182: 197, # '╢' + 183: 198, # '╖' + 184: 199, # '╕' + 185: 200, # '╣' + 186: 201, # '║' + 187: 202, # '╗' + 188: 203, # '╝' + 189: 204, # '╜' + 190: 205, # '╛' + 191: 206, # '┐' + 192: 207, # '└' + 193: 208, # '┴' + 194: 209, # '┬' + 195: 210, # '├' + 196: 211, # '─' + 197: 212, # '┼' + 198: 213, # '╞' + 199: 214, # '╟' + 200: 215, # '╚' + 201: 216, # '╔' + 202: 217, # '╩' + 203: 218, # '╦' + 204: 219, # '╠' + 205: 220, # '═' + 206: 221, # '╬' + 207: 222, # '╧' + 208: 223, # '╨' + 209: 224, # '╤' + 210: 225, # '╥' + 211: 226, # '╙' + 212: 227, # '╘' + 213: 228, # '╒' + 214: 229, # '╓' + 215: 230, # '╫' + 216: 231, # '╪' + 217: 232, # '┘' + 218: 233, # '┌' + 219: 234, # '█' + 220: 235, # '▄' + 221: 236, # '▌' + 222: 237, # '▐' + 223: 238, # '▀' + 224: 9, # 'р' + 225: 7, # 'с' + 226: 6, # 'т' + 227: 14, # 'у' + 228: 39, # 'ф' + 229: 26, # 'х' + 230: 28, # 'ц' + 231: 22, # 'ч' + 232: 25, # 'ш' + 233: 29, # 'щ' + 234: 54, # 'ъ' + 235: 18, # 'ы' + 236: 17, # 'ь' + 237: 30, # 'э' + 238: 27, # 'ю' + 239: 16, # 'я' + 240: 239, # 'Ё' + 241: 68, # 'ё' + 242: 240, # 'Є' + 243: 241, # 'є' + 244: 242, # 'Ї' + 245: 243, # 'ї' + 246: 244, # 'Ў' + 247: 245, # 'ў' + 248: 246, # '°' + 249: 247, # '∙' + 250: 248, # '·' + 251: 249, # '√' + 252: 250, # '№' + 253: 251, # '¤' + 254: 252, # '■' + 255: 255, # '\xa0' +} + +IBM866_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="IBM866", + language="Russian", + char_to_order_map=IBM866_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) + +WINDOWS_1251_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 191, # 'Ђ' + 129: 192, # 'Ѓ' + 130: 193, # '‚' + 131: 194, # 'ѓ' + 132: 195, # '„' + 133: 196, # '…' + 134: 197, # '†' + 135: 198, # '‡' + 136: 199, # '€' + 137: 200, # '‰' + 138: 201, # 'Љ' + 139: 202, # '‹' + 140: 203, # 'Њ' + 141: 204, # 'Ќ' + 142: 205, # 'Ћ' + 143: 206, # 'Џ' + 144: 207, # 'ђ' + 145: 208, # '‘' + 146: 209, # '’' + 147: 210, # '“' + 148: 211, # '”' + 149: 212, # '•' + 150: 213, # '–' + 151: 214, # '—' + 152: 215, # None + 153: 216, # '™' + 154: 217, # 'љ' + 155: 218, # '›' + 156: 219, # 'њ' + 157: 220, # 'ќ' + 158: 221, # 'ћ' + 159: 222, # 'џ' + 160: 223, # '\xa0' + 161: 224, # 'Ў' + 162: 225, # 'ў' + 163: 226, # 'Ј' + 164: 227, # '¤' + 165: 228, # 'Ґ' + 166: 229, # '¦' + 167: 230, # '§' + 168: 231, # 'Ё' + 169: 232, # '©' + 170: 233, # 'Є' + 171: 234, # '«' + 172: 235, # '¬' + 173: 236, # '\xad' + 174: 237, # '®' + 175: 238, # 'Ї' + 176: 239, # '°' + 177: 240, # '±' + 178: 241, # 'І' + 179: 242, # 'і' + 180: 243, # 'ґ' + 181: 244, # 'µ' + 182: 245, # '¶' + 183: 246, # '·' + 184: 68, # 'ё' + 185: 247, # '№' + 186: 248, # 'є' + 187: 249, # '»' + 188: 250, # 'ј' + 189: 251, # 'Ѕ' + 190: 252, # 'ѕ' + 191: 253, # 'ї' + 192: 37, # 'А' + 193: 44, # 'Б' + 194: 33, # 'В' + 195: 46, # 'Г' + 196: 41, # 'Д' + 197: 48, # 'Е' + 198: 56, # 'Ж' + 199: 51, # 'З' + 200: 42, # 'И' + 201: 60, # 'Й' + 202: 36, # 'К' + 203: 49, # 'Л' + 204: 38, # 'М' + 205: 31, # 'Н' + 206: 34, # 'О' + 207: 35, # 'П' + 208: 45, # 'Р' + 209: 32, # 'С' + 210: 40, # 'Т' + 211: 52, # 'У' + 212: 53, # 'Ф' + 213: 55, # 'Х' + 214: 58, # 'Ц' + 215: 50, # 'Ч' + 216: 57, # 'Ш' + 217: 63, # 'Щ' + 218: 70, # 'Ъ' + 219: 62, # 'Ы' + 220: 61, # 'Ь' + 221: 47, # 'Э' + 222: 59, # 'Ю' + 223: 43, # 'Я' + 224: 3, # 'а' + 225: 21, # 'б' + 226: 10, # 'в' + 227: 19, # 'г' + 228: 13, # 'д' + 229: 2, # 'е' + 230: 24, # 'ж' + 231: 20, # 'з' + 232: 4, # 'и' + 233: 23, # 'й' + 234: 11, # 'к' + 235: 8, # 'л' + 236: 12, # 'м' + 237: 5, # 'н' + 238: 1, # 'о' + 239: 15, # 'п' + 240: 9, # 'р' + 241: 7, # 'с' + 242: 6, # 'т' + 243: 14, # 'у' + 244: 39, # 'ф' + 245: 26, # 'х' + 246: 28, # 'ц' + 247: 22, # 'ч' + 248: 25, # 'ш' + 249: 29, # 'щ' + 250: 54, # 'ъ' + 251: 18, # 'ы' + 252: 17, # 'ь' + 253: 30, # 'э' + 254: 27, # 'ю' + 255: 16, # 'я' +} + +WINDOWS_1251_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="windows-1251", + language="Russian", + char_to_order_map=WINDOWS_1251_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) + +IBM855_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 191, # 'ђ' + 129: 192, # 'Ђ' + 130: 193, # 'ѓ' + 131: 194, # 'Ѓ' + 132: 68, # 'ё' + 133: 195, # 'Ё' + 134: 196, # 'є' + 135: 197, # 'Є' + 136: 198, # 'ѕ' + 137: 199, # 'Ѕ' + 138: 200, # 'і' + 139: 201, # 'І' + 140: 202, # 'ї' + 141: 203, # 'Ї' + 142: 204, # 'ј' + 143: 205, # 'Ј' + 144: 206, # 'љ' + 145: 207, # 'Љ' + 146: 208, # 'њ' + 147: 209, # 'Њ' + 148: 210, # 'ћ' + 149: 211, # 'Ћ' + 150: 212, # 'ќ' + 151: 213, # 'Ќ' + 152: 214, # 'ў' + 153: 215, # 'Ў' + 154: 216, # 'џ' + 155: 217, # 'Џ' + 156: 27, # 'ю' + 157: 59, # 'Ю' + 158: 54, # 'ъ' + 159: 70, # 'Ъ' + 160: 3, # 'а' + 161: 37, # 'А' + 162: 21, # 'б' + 163: 44, # 'Б' + 164: 28, # 'ц' + 165: 58, # 'Ц' + 166: 13, # 'д' + 167: 41, # 'Д' + 168: 2, # 'е' + 169: 48, # 'Е' + 170: 39, # 'ф' + 171: 53, # 'Ф' + 172: 19, # 'г' + 173: 46, # 'Г' + 174: 218, # '«' + 175: 219, # '»' + 176: 220, # '░' + 177: 221, # '▒' + 178: 222, # '▓' + 179: 223, # '│' + 180: 224, # '┤' + 181: 26, # 'х' + 182: 55, # 'Х' + 183: 4, # 'и' + 184: 42, # 'И' + 185: 225, # '╣' + 186: 226, # '║' + 187: 227, # '╗' + 188: 228, # '╝' + 189: 23, # 'й' + 190: 60, # 'Й' + 191: 229, # '┐' + 192: 230, # '└' + 193: 231, # '┴' + 194: 232, # '┬' + 195: 233, # '├' + 196: 234, # '─' + 197: 235, # '┼' + 198: 11, # 'к' + 199: 36, # 'К' + 200: 236, # '╚' + 201: 237, # '╔' + 202: 238, # '╩' + 203: 239, # '╦' + 204: 240, # '╠' + 205: 241, # '═' + 206: 242, # '╬' + 207: 243, # '¤' + 208: 8, # 'л' + 209: 49, # 'Л' + 210: 12, # 'м' + 211: 38, # 'М' + 212: 5, # 'н' + 213: 31, # 'Н' + 214: 1, # 'о' + 215: 34, # 'О' + 216: 15, # 'п' + 217: 244, # '┘' + 218: 245, # '┌' + 219: 246, # '█' + 220: 247, # '▄' + 221: 35, # 'П' + 222: 16, # 'я' + 223: 248, # '▀' + 224: 43, # 'Я' + 225: 9, # 'р' + 226: 45, # 'Р' + 227: 7, # 'с' + 228: 32, # 'С' + 229: 6, # 'т' + 230: 40, # 'Т' + 231: 14, # 'у' + 232: 52, # 'У' + 233: 24, # 'ж' + 234: 56, # 'Ж' + 235: 10, # 'в' + 236: 33, # 'В' + 237: 17, # 'ь' + 238: 61, # 'Ь' + 239: 249, # '№' + 240: 250, # '\xad' + 241: 18, # 'ы' + 242: 62, # 'Ы' + 243: 20, # 'з' + 244: 51, # 'З' + 245: 25, # 'ш' + 246: 57, # 'Ш' + 247: 30, # 'э' + 248: 47, # 'Э' + 249: 29, # 'щ' + 250: 63, # 'Щ' + 251: 22, # 'ч' + 252: 50, # 'Ч' + 253: 251, # '§' + 254: 252, # '■' + 255: 255, # '\xa0' +} + +IBM855_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="IBM855", + language="Russian", + char_to_order_map=IBM855_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) + +KOI8_R_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 191, # '─' + 129: 192, # '│' + 130: 193, # '┌' + 131: 194, # '┐' + 132: 195, # '└' + 133: 196, # '┘' + 134: 197, # '├' + 135: 198, # '┤' + 136: 199, # '┬' + 137: 200, # '┴' + 138: 201, # '┼' + 139: 202, # '▀' + 140: 203, # '▄' + 141: 204, # '█' + 142: 205, # '▌' + 143: 206, # '▐' + 144: 207, # '░' + 145: 208, # '▒' + 146: 209, # '▓' + 147: 210, # '⌠' + 148: 211, # '■' + 149: 212, # '∙' + 150: 213, # '√' + 151: 214, # '≈' + 152: 215, # '≤' + 153: 216, # '≥' + 154: 217, # '\xa0' + 155: 218, # '⌡' + 156: 219, # '°' + 157: 220, # '²' + 158: 221, # '·' + 159: 222, # '÷' + 160: 223, # '═' + 161: 224, # '║' + 162: 225, # '╒' + 163: 68, # 'ё' + 164: 226, # '╓' + 165: 227, # '╔' + 166: 228, # '╕' + 167: 229, # '╖' + 168: 230, # '╗' + 169: 231, # '╘' + 170: 232, # '╙' + 171: 233, # '╚' + 172: 234, # '╛' + 173: 235, # '╜' + 174: 236, # '╝' + 175: 237, # '╞' + 176: 238, # '╟' + 177: 239, # '╠' + 178: 240, # '╡' + 179: 241, # 'Ё' + 180: 242, # '╢' + 181: 243, # '╣' + 182: 244, # '╤' + 183: 245, # '╥' + 184: 246, # '╦' + 185: 247, # '╧' + 186: 248, # '╨' + 187: 249, # '╩' + 188: 250, # '╪' + 189: 251, # '╫' + 190: 252, # '╬' + 191: 253, # '©' + 192: 27, # 'ю' + 193: 3, # 'а' + 194: 21, # 'б' + 195: 28, # 'ц' + 196: 13, # 'д' + 197: 2, # 'е' + 198: 39, # 'ф' + 199: 19, # 'г' + 200: 26, # 'х' + 201: 4, # 'и' + 202: 23, # 'й' + 203: 11, # 'к' + 204: 8, # 'л' + 205: 12, # 'м' + 206: 5, # 'н' + 207: 1, # 'о' + 208: 15, # 'п' + 209: 16, # 'я' + 210: 9, # 'р' + 211: 7, # 'с' + 212: 6, # 'т' + 213: 14, # 'у' + 214: 24, # 'ж' + 215: 10, # 'в' + 216: 17, # 'ь' + 217: 18, # 'ы' + 218: 20, # 'з' + 219: 25, # 'ш' + 220: 30, # 'э' + 221: 29, # 'щ' + 222: 22, # 'ч' + 223: 54, # 'ъ' + 224: 59, # 'Ю' + 225: 37, # 'А' + 226: 44, # 'Б' + 227: 58, # 'Ц' + 228: 41, # 'Д' + 229: 48, # 'Е' + 230: 53, # 'Ф' + 231: 46, # 'Г' + 232: 55, # 'Х' + 233: 42, # 'И' + 234: 60, # 'Й' + 235: 36, # 'К' + 236: 49, # 'Л' + 237: 38, # 'М' + 238: 31, # 'Н' + 239: 34, # 'О' + 240: 35, # 'П' + 241: 43, # 'Я' + 242: 45, # 'Р' + 243: 32, # 'С' + 244: 40, # 'Т' + 245: 52, # 'У' + 246: 56, # 'Ж' + 247: 33, # 'В' + 248: 61, # 'Ь' + 249: 62, # 'Ы' + 250: 51, # 'З' + 251: 57, # 'Ш' + 252: 47, # 'Э' + 253: 63, # 'Щ' + 254: 50, # 'Ч' + 255: 70, # 'Ъ' +} + +KOI8_R_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="KOI8-R", + language="Russian", + char_to_order_map=KOI8_R_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) + +MACCYRILLIC_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 37, # 'А' + 129: 44, # 'Б' + 130: 33, # 'В' + 131: 46, # 'Г' + 132: 41, # 'Д' + 133: 48, # 'Е' + 134: 56, # 'Ж' + 135: 51, # 'З' + 136: 42, # 'И' + 137: 60, # 'Й' + 138: 36, # 'К' + 139: 49, # 'Л' + 140: 38, # 'М' + 141: 31, # 'Н' + 142: 34, # 'О' + 143: 35, # 'П' + 144: 45, # 'Р' + 145: 32, # 'С' + 146: 40, # 'Т' + 147: 52, # 'У' + 148: 53, # 'Ф' + 149: 55, # 'Х' + 150: 58, # 'Ц' + 151: 50, # 'Ч' + 152: 57, # 'Ш' + 153: 63, # 'Щ' + 154: 70, # 'Ъ' + 155: 62, # 'Ы' + 156: 61, # 'Ь' + 157: 47, # 'Э' + 158: 59, # 'Ю' + 159: 43, # 'Я' + 160: 191, # '†' + 161: 192, # '°' + 162: 193, # 'Ґ' + 163: 194, # '£' + 164: 195, # '§' + 165: 196, # '•' + 166: 197, # '¶' + 167: 198, # 'І' + 168: 199, # '®' + 169: 200, # '©' + 170: 201, # '™' + 171: 202, # 'Ђ' + 172: 203, # 'ђ' + 173: 204, # '≠' + 174: 205, # 'Ѓ' + 175: 206, # 'ѓ' + 176: 207, # '∞' + 177: 208, # '±' + 178: 209, # '≤' + 179: 210, # '≥' + 180: 211, # 'і' + 181: 212, # 'µ' + 182: 213, # 'ґ' + 183: 214, # 'Ј' + 184: 215, # 'Є' + 185: 216, # 'є' + 186: 217, # 'Ї' + 187: 218, # 'ї' + 188: 219, # 'Љ' + 189: 220, # 'љ' + 190: 221, # 'Њ' + 191: 222, # 'њ' + 192: 223, # 'ј' + 193: 224, # 'Ѕ' + 194: 225, # '¬' + 195: 226, # '√' + 196: 227, # 'ƒ' + 197: 228, # '≈' + 198: 229, # '∆' + 199: 230, # '«' + 200: 231, # '»' + 201: 232, # '…' + 202: 233, # '\xa0' + 203: 234, # 'Ћ' + 204: 235, # 'ћ' + 205: 236, # 'Ќ' + 206: 237, # 'ќ' + 207: 238, # 'ѕ' + 208: 239, # '–' + 209: 240, # '—' + 210: 241, # '“' + 211: 242, # '”' + 212: 243, # '‘' + 213: 244, # '’' + 214: 245, # '÷' + 215: 246, # '„' + 216: 247, # 'Ў' + 217: 248, # 'ў' + 218: 249, # 'Џ' + 219: 250, # 'џ' + 220: 251, # '№' + 221: 252, # 'Ё' + 222: 68, # 'ё' + 223: 16, # 'я' + 224: 3, # 'а' + 225: 21, # 'б' + 226: 10, # 'в' + 227: 19, # 'г' + 228: 13, # 'д' + 229: 2, # 'е' + 230: 24, # 'ж' + 231: 20, # 'з' + 232: 4, # 'и' + 233: 23, # 'й' + 234: 11, # 'к' + 235: 8, # 'л' + 236: 12, # 'м' + 237: 5, # 'н' + 238: 1, # 'о' + 239: 15, # 'п' + 240: 9, # 'р' + 241: 7, # 'с' + 242: 6, # 'т' + 243: 14, # 'у' + 244: 39, # 'ф' + 245: 26, # 'х' + 246: 28, # 'ц' + 247: 22, # 'ч' + 248: 25, # 'ш' + 249: 29, # 'щ' + 250: 54, # 'ъ' + 251: 18, # 'ы' + 252: 17, # 'ь' + 253: 30, # 'э' + 254: 27, # 'ю' + 255: 255, # '€' +} + +MACCYRILLIC_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="MacCyrillic", + language="Russian", + char_to_order_map=MACCYRILLIC_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) + +ISO_8859_5_RUSSIAN_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 142, # 'A' + 66: 143, # 'B' + 67: 144, # 'C' + 68: 145, # 'D' + 69: 146, # 'E' + 70: 147, # 'F' + 71: 148, # 'G' + 72: 149, # 'H' + 73: 150, # 'I' + 74: 151, # 'J' + 75: 152, # 'K' + 76: 74, # 'L' + 77: 153, # 'M' + 78: 75, # 'N' + 79: 154, # 'O' + 80: 155, # 'P' + 81: 156, # 'Q' + 82: 157, # 'R' + 83: 158, # 'S' + 84: 159, # 'T' + 85: 160, # 'U' + 86: 161, # 'V' + 87: 162, # 'W' + 88: 163, # 'X' + 89: 164, # 'Y' + 90: 165, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 71, # 'a' + 98: 172, # 'b' + 99: 66, # 'c' + 100: 173, # 'd' + 101: 65, # 'e' + 102: 174, # 'f' + 103: 76, # 'g' + 104: 175, # 'h' + 105: 64, # 'i' + 106: 176, # 'j' + 107: 177, # 'k' + 108: 77, # 'l' + 109: 72, # 'm' + 110: 178, # 'n' + 111: 69, # 'o' + 112: 67, # 'p' + 113: 179, # 'q' + 114: 78, # 'r' + 115: 73, # 's' + 116: 180, # 't' + 117: 181, # 'u' + 118: 79, # 'v' + 119: 182, # 'w' + 120: 183, # 'x' + 121: 184, # 'y' + 122: 185, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 191, # '\x80' + 129: 192, # '\x81' + 130: 193, # '\x82' + 131: 194, # '\x83' + 132: 195, # '\x84' + 133: 196, # '\x85' + 134: 197, # '\x86' + 135: 198, # '\x87' + 136: 199, # '\x88' + 137: 200, # '\x89' + 138: 201, # '\x8a' + 139: 202, # '\x8b' + 140: 203, # '\x8c' + 141: 204, # '\x8d' + 142: 205, # '\x8e' + 143: 206, # '\x8f' + 144: 207, # '\x90' + 145: 208, # '\x91' + 146: 209, # '\x92' + 147: 210, # '\x93' + 148: 211, # '\x94' + 149: 212, # '\x95' + 150: 213, # '\x96' + 151: 214, # '\x97' + 152: 215, # '\x98' + 153: 216, # '\x99' + 154: 217, # '\x9a' + 155: 218, # '\x9b' + 156: 219, # '\x9c' + 157: 220, # '\x9d' + 158: 221, # '\x9e' + 159: 222, # '\x9f' + 160: 223, # '\xa0' + 161: 224, # 'Ё' + 162: 225, # 'Ђ' + 163: 226, # 'Ѓ' + 164: 227, # 'Є' + 165: 228, # 'Ѕ' + 166: 229, # 'І' + 167: 230, # 'Ї' + 168: 231, # 'Ј' + 169: 232, # 'Љ' + 170: 233, # 'Њ' + 171: 234, # 'Ћ' + 172: 235, # 'Ќ' + 173: 236, # '\xad' + 174: 237, # 'Ў' + 175: 238, # 'Џ' + 176: 37, # 'А' + 177: 44, # 'Б' + 178: 33, # 'В' + 179: 46, # 'Г' + 180: 41, # 'Д' + 181: 48, # 'Е' + 182: 56, # 'Ж' + 183: 51, # 'З' + 184: 42, # 'И' + 185: 60, # 'Й' + 186: 36, # 'К' + 187: 49, # 'Л' + 188: 38, # 'М' + 189: 31, # 'Н' + 190: 34, # 'О' + 191: 35, # 'П' + 192: 45, # 'Р' + 193: 32, # 'С' + 194: 40, # 'Т' + 195: 52, # 'У' + 196: 53, # 'Ф' + 197: 55, # 'Х' + 198: 58, # 'Ц' + 199: 50, # 'Ч' + 200: 57, # 'Ш' + 201: 63, # 'Щ' + 202: 70, # 'Ъ' + 203: 62, # 'Ы' + 204: 61, # 'Ь' + 205: 47, # 'Э' + 206: 59, # 'Ю' + 207: 43, # 'Я' + 208: 3, # 'а' + 209: 21, # 'б' + 210: 10, # 'в' + 211: 19, # 'г' + 212: 13, # 'д' + 213: 2, # 'е' + 214: 24, # 'ж' + 215: 20, # 'з' + 216: 4, # 'и' + 217: 23, # 'й' + 218: 11, # 'к' + 219: 8, # 'л' + 220: 12, # 'м' + 221: 5, # 'н' + 222: 1, # 'о' + 223: 15, # 'п' + 224: 9, # 'р' + 225: 7, # 'с' + 226: 6, # 'т' + 227: 14, # 'у' + 228: 39, # 'ф' + 229: 26, # 'х' + 230: 28, # 'ц' + 231: 22, # 'ч' + 232: 25, # 'ш' + 233: 29, # 'щ' + 234: 54, # 'ъ' + 235: 18, # 'ы' + 236: 17, # 'ь' + 237: 30, # 'э' + 238: 27, # 'ю' + 239: 16, # 'я' + 240: 239, # '№' + 241: 68, # 'ё' + 242: 240, # 'ђ' + 243: 241, # 'ѓ' + 244: 242, # 'є' + 245: 243, # 'ѕ' + 246: 244, # 'і' + 247: 245, # 'ї' + 248: 246, # 'ј' + 249: 247, # 'љ' + 250: 248, # 'њ' + 251: 249, # 'ћ' + 252: 250, # 'ќ' + 253: 251, # '§' + 254: 252, # 'ў' + 255: 255, # 'џ' +} + +ISO_8859_5_RUSSIAN_MODEL = SingleByteCharSetModel( + charset_name="ISO-8859-5", + language="Russian", + char_to_order_map=ISO_8859_5_RUSSIAN_CHAR_TO_ORDER, + language_model=RUSSIAN_LANG_MODEL, + typical_positive_ratio=0.976601, + keep_ascii_letters=False, + alphabet="ЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё", +) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langthaimodel.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langthaimodel.py new file mode 100644 index 0000000..883fdb1 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langthaimodel.py @@ -0,0 +1,4380 @@ +from chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +THAI_LANG_MODEL = { + 5: { # 'ก' + 5: 2, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 2, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 3, # 'ฎ' + 57: 2, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 2, # 'ณ' + 20: 2, # 'ด' + 19: 3, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 1, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 1, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 3, # 'ร' + 61: 2, # 'ฤ' + 15: 3, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 3, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 1, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 2, # 'ื' + 32: 2, # 'ุ' + 35: 1, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 3, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 30: { # 'ข' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 1, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 2, # 'ณ' + 20: 0, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 2, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 2, # 'ี' + 40: 3, # 'ึ' + 27: 1, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 2, # '่' + 7: 3, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 24: { # 'ค' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 2, # 'ค' + 8: 2, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 2, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 0, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 3, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 2, # 'า' + 36: 3, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 3, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 8: { # 'ง' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 3, # 'ค' + 8: 2, # 'ง' + 26: 2, # 'จ' + 52: 1, # 'ฉ' + 34: 2, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 1, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 2, # 'ศ' + 46: 1, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 1, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 1, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 3, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 26: { # 'จ' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 0, # 'ค' + 8: 2, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 1, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 1, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 3, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 2, # 'ิ' + 13: 1, # 'ี' + 40: 3, # 'ึ' + 27: 1, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 2, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 52: { # 'ฉ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 3, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 3, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 1, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 1, # 'ั' + 1: 1, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 34: { # 'ช' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 1, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 1, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 1, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 1, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 51: { # 'ซ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 1, # 'ั' + 1: 1, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 2, # 'ี' + 40: 3, # 'ึ' + 27: 2, # 'ื' + 32: 1, # 'ุ' + 35: 1, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 1, # '่' + 7: 2, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 47: { # 'ญ' + 5: 1, # 'ก' + 30: 1, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 3, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 2, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 0, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 58: { # 'ฎ' + 5: 2, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 1, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 57: { # 'ฏ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 49: { # 'ฐ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 53: { # 'ฑ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 55: { # 'ฒ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 43: { # 'ณ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 3, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 3, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 3, # 'ะ' + 10: 0, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 20: { # 'ด' + 5: 2, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 3, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 2, # 'า' + 36: 2, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 1, # 'ึ' + 27: 2, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 2, # 'ๆ' + 37: 2, # '็' + 6: 1, # '่' + 7: 3, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 19: { # 'ต' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 1, # 'ต' + 44: 2, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 2, # 'ภ' + 9: 1, # 'ม' + 16: 1, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 0, # 'ห' + 4: 3, # 'อ' + 63: 1, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 1, # 'ึ' + 27: 1, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 2, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 44: { # 'ถ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 1, # 'ี' + 40: 3, # 'ึ' + 27: 2, # 'ื' + 32: 2, # 'ุ' + 35: 3, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 14: { # 'ท' + 5: 1, # 'ก' + 30: 1, # 'ข' + 24: 3, # 'ค' + 8: 1, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 3, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 3, # 'ย' + 2: 3, # 'ร' + 61: 1, # 'ฤ' + 15: 1, # 'ล' + 12: 2, # 'ว' + 42: 3, # 'ศ' + 46: 1, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 2, # 'ิ' + 13: 3, # 'ี' + 40: 2, # 'ึ' + 27: 1, # 'ื' + 32: 3, # 'ุ' + 35: 1, # 'ู' + 11: 0, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 48: { # 'ธ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 1, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 2, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 2, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 3: { # 'น' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 3, # 'ค' + 8: 1, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 1, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 2, # 'ถ' + 14: 3, # 'ท' + 48: 3, # 'ธ' + 3: 2, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 1, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 1, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 3, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 3, # 'โ' + 29: 3, # 'ใ' + 33: 3, # 'ไ' + 50: 2, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 17: { # 'บ' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 1, # 'ง' + 26: 1, # 'จ' + 52: 1, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 2, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 2, # 'ื' + 32: 3, # 'ุ' + 35: 2, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 2, # '่' + 7: 2, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 25: { # 'ป' + 5: 2, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 1, # 'ฎ' + 57: 3, # 'ฏ' + 49: 1, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 0, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 1, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 1, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 3, # 'ั' + 1: 1, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 2, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 3, # '็' + 6: 1, # '่' + 7: 2, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 39: { # 'ผ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 1, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 2, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 1, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 1, # 'ื' + 32: 0, # 'ุ' + 35: 3, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 1, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 62: { # 'ฝ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 1, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 1, # 'ี' + 40: 2, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 2, # '่' + 7: 1, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 31: { # 'พ' + 5: 1, # 'ก' + 30: 1, # 'ข' + 24: 1, # 'ค' + 8: 1, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 1, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 2, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 1, # 'ึ' + 27: 3, # 'ื' + 32: 1, # 'ุ' + 35: 2, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 1, # '็' + 6: 0, # '่' + 7: 1, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 54: { # 'ฟ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 2, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 2, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 1, # 'ื' + 32: 1, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 2, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 45: { # 'ภ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 3, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 2, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 9: { # 'ม' + 5: 2, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 2, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 3, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 2, # 'ร' + 61: 2, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 1, # 'ศ' + 46: 1, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 3, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 2, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 2, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 16: { # 'ย' + 5: 3, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 2, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 3, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 3, # 'ี' + 40: 1, # 'ึ' + 27: 2, # 'ื' + 32: 2, # 'ุ' + 35: 3, # 'ู' + 11: 2, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 2, # 'ๆ' + 37: 1, # '็' + 6: 3, # '่' + 7: 2, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 2: { # 'ร' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 2, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 3, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 3, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 3, # 'ถ' + 14: 3, # 'ท' + 48: 1, # 'ธ' + 3: 2, # 'น' + 17: 2, # 'บ' + 25: 3, # 'ป' + 39: 2, # 'ผ' + 62: 1, # 'ฝ' + 31: 2, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 2, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 1, # 'ฯ' + 22: 3, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 2, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 3, # 'ู' + 11: 3, # 'เ' + 28: 3, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 3, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 3, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 61: { # 'ฤ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 2, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 15: { # 'ล' + 5: 2, # 'ก' + 30: 3, # 'ข' + 24: 1, # 'ค' + 8: 3, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 3, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 3, # 'อ' + 63: 2, # 'ฯ' + 22: 3, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 2, # 'ึ' + 27: 3, # 'ื' + 32: 2, # 'ุ' + 35: 3, # 'ู' + 11: 2, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 2, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 12: { # 'ว' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 1, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 3, # 'ิ' + 13: 2, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 2, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 42: { # 'ศ' + 5: 1, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 1, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 2, # 'ว' + 42: 1, # 'ศ' + 46: 2, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 2, # 'ิ' + 13: 0, # 'ี' + 40: 3, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 2, # 'ู' + 11: 0, # 'เ' + 28: 1, # 'แ' + 41: 0, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 46: { # 'ษ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 2, # 'ฎ' + 57: 1, # 'ฏ' + 49: 2, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 3, # 'ณ' + 20: 0, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 2, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 18: { # 'ส' + 5: 2, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 2, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 3, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 2, # 'ภ' + 9: 3, # 'ม' + 16: 1, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 3, # 'ำ' + 23: 3, # 'ิ' + 13: 3, # 'ี' + 40: 2, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 3, # 'ู' + 11: 2, # 'เ' + 28: 0, # 'แ' + 41: 1, # 'โ' + 29: 0, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 1, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 21: { # 'ห' + 5: 3, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 1, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 3, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 0, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 0, # 'ำ' + 23: 1, # 'ิ' + 13: 1, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 1, # 'ุ' + 35: 1, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 3, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 4: { # 'อ' + 5: 3, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 2, # 'ะ' + 10: 3, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 2, # 'ิ' + 13: 3, # 'ี' + 40: 0, # 'ึ' + 27: 3, # 'ื' + 32: 3, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 1, # '็' + 6: 2, # '่' + 7: 2, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 63: { # 'ฯ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 22: { # 'ะ' + 5: 3, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 1, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 3, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 1, # 'ธ' + 3: 2, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 1, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 10: { # 'ั' + 5: 3, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 3, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 3, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 2, # 'ฐ' + 53: 0, # 'ฑ' + 55: 3, # 'ฒ' + 43: 3, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 1: { # 'า' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 3, # 'ค' + 8: 3, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 3, # 'ช' + 51: 1, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 3, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 2, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 1, # 'ฝ' + 31: 3, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 3, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 3, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 36: { # 'ำ' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 3, # 'ค' + 8: 2, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 1, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 3, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 23: { # 'ิ' + 5: 3, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 3, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 3, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 3, # 'พ' + 54: 1, # 'ฟ' + 45: 2, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 3, # 'ศ' + 46: 2, # 'ษ' + 18: 2, # 'ส' + 21: 3, # 'ห' + 4: 1, # 'อ' + 63: 1, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 2, # '้' + 38: 2, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 13: { # 'ี' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 1, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 3, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 2, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 40: { # 'ึ' + 5: 3, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 3, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 1, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 27: { # 'ื' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 3, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 32: { # 'ุ' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 3, # 'ค' + 8: 3, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 1, # 'ฒ' + 43: 3, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 2, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 1, # 'ภ' + 9: 3, # 'ม' + 16: 1, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 1, # 'ว' + 42: 1, # 'ศ' + 46: 2, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 1, # 'โ' + 29: 0, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 2, # '้' + 38: 1, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 35: { # 'ู' + 5: 3, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 2, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 2, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 2, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 2, # 'น' + 17: 0, # 'บ' + 25: 3, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 1, # 'แ' + 41: 1, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 3, # '่' + 7: 3, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 11: { # 'เ' + 5: 3, # 'ก' + 30: 3, # 'ข' + 24: 3, # 'ค' + 8: 2, # 'ง' + 26: 3, # 'จ' + 52: 3, # 'ฉ' + 34: 3, # 'ช' + 51: 2, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 1, # 'ณ' + 20: 3, # 'ด' + 19: 3, # 'ต' + 44: 1, # 'ถ' + 14: 3, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 3, # 'ป' + 39: 2, # 'ผ' + 62: 1, # 'ฝ' + 31: 3, # 'พ' + 54: 1, # 'ฟ' + 45: 3, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 3, # 'ว' + 42: 2, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 28: { # 'แ' + 5: 3, # 'ก' + 30: 2, # 'ข' + 24: 2, # 'ค' + 8: 1, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 3, # 'ต' + 44: 2, # 'ถ' + 14: 3, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 2, # 'ป' + 39: 3, # 'ผ' + 62: 0, # 'ฝ' + 31: 2, # 'พ' + 54: 2, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 41: { # 'โ' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 1, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 1, # 'บ' + 25: 3, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 1, # 'ภ' + 9: 1, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 3, # 'ล' + 12: 0, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 0, # 'ห' + 4: 2, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 29: { # 'ใ' + 5: 2, # 'ก' + 30: 0, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 3, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 1, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 3, # 'ส' + 21: 3, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 33: { # 'ไ' + 5: 1, # 'ก' + 30: 2, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 3, # 'ด' + 19: 1, # 'ต' + 44: 0, # 'ถ' + 14: 3, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 1, # 'บ' + 25: 3, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 2, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 0, # 'ย' + 2: 3, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 3, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 2, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 50: { # 'ๆ' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 37: { # '็' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 2, # 'ง' + 26: 3, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 1, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 0, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 3, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 1, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 2, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 0, # 'ห' + 4: 1, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 1, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 6: { # '่' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 1, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 1, # 'ธ' + 3: 3, # 'น' + 17: 1, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 1, # 'ฝ' + 31: 1, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 3, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 2, # 'ล' + 12: 3, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 1, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 1, # 'ะ' + 10: 0, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 3, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 1, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 7: { # '้' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 2, # 'ค' + 8: 3, # 'ง' + 26: 2, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 1, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 1, # 'ด' + 19: 2, # 'ต' + 44: 1, # 'ถ' + 14: 2, # 'ท' + 48: 0, # 'ธ' + 3: 3, # 'น' + 17: 2, # 'บ' + 25: 2, # 'ป' + 39: 2, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 0, # 'ภ' + 9: 3, # 'ม' + 16: 2, # 'ย' + 2: 2, # 'ร' + 61: 0, # 'ฤ' + 15: 1, # 'ล' + 12: 3, # 'ว' + 42: 1, # 'ศ' + 46: 0, # 'ษ' + 18: 2, # 'ส' + 21: 2, # 'ห' + 4: 3, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 3, # 'า' + 36: 2, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 2, # 'ใ' + 33: 2, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 38: { # '์' + 5: 2, # 'ก' + 30: 1, # 'ข' + 24: 1, # 'ค' + 8: 0, # 'ง' + 26: 1, # 'จ' + 52: 0, # 'ฉ' + 34: 1, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 2, # 'ด' + 19: 1, # 'ต' + 44: 1, # 'ถ' + 14: 1, # 'ท' + 48: 0, # 'ธ' + 3: 1, # 'น' + 17: 1, # 'บ' + 25: 1, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 1, # 'พ' + 54: 1, # 'ฟ' + 45: 0, # 'ภ' + 9: 2, # 'ม' + 16: 0, # 'ย' + 2: 1, # 'ร' + 61: 1, # 'ฤ' + 15: 1, # 'ล' + 12: 1, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 1, # 'ส' + 21: 1, # 'ห' + 4: 2, # 'อ' + 63: 1, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 2, # 'เ' + 28: 2, # 'แ' + 41: 1, # 'โ' + 29: 1, # 'ใ' + 33: 1, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 0, # '๑' + 59: 0, # '๒' + 60: 0, # '๕' + }, + 56: { # '๑' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 2, # '๑' + 59: 1, # '๒' + 60: 1, # '๕' + }, + 59: { # '๒' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 1, # '๑' + 59: 1, # '๒' + 60: 3, # '๕' + }, + 60: { # '๕' + 5: 0, # 'ก' + 30: 0, # 'ข' + 24: 0, # 'ค' + 8: 0, # 'ง' + 26: 0, # 'จ' + 52: 0, # 'ฉ' + 34: 0, # 'ช' + 51: 0, # 'ซ' + 47: 0, # 'ญ' + 58: 0, # 'ฎ' + 57: 0, # 'ฏ' + 49: 0, # 'ฐ' + 53: 0, # 'ฑ' + 55: 0, # 'ฒ' + 43: 0, # 'ณ' + 20: 0, # 'ด' + 19: 0, # 'ต' + 44: 0, # 'ถ' + 14: 0, # 'ท' + 48: 0, # 'ธ' + 3: 0, # 'น' + 17: 0, # 'บ' + 25: 0, # 'ป' + 39: 0, # 'ผ' + 62: 0, # 'ฝ' + 31: 0, # 'พ' + 54: 0, # 'ฟ' + 45: 0, # 'ภ' + 9: 0, # 'ม' + 16: 0, # 'ย' + 2: 0, # 'ร' + 61: 0, # 'ฤ' + 15: 0, # 'ล' + 12: 0, # 'ว' + 42: 0, # 'ศ' + 46: 0, # 'ษ' + 18: 0, # 'ส' + 21: 0, # 'ห' + 4: 0, # 'อ' + 63: 0, # 'ฯ' + 22: 0, # 'ะ' + 10: 0, # 'ั' + 1: 0, # 'า' + 36: 0, # 'ำ' + 23: 0, # 'ิ' + 13: 0, # 'ี' + 40: 0, # 'ึ' + 27: 0, # 'ื' + 32: 0, # 'ุ' + 35: 0, # 'ู' + 11: 0, # 'เ' + 28: 0, # 'แ' + 41: 0, # 'โ' + 29: 0, # 'ใ' + 33: 0, # 'ไ' + 50: 0, # 'ๆ' + 37: 0, # '็' + 6: 0, # '่' + 7: 0, # '้' + 38: 0, # '์' + 56: 2, # '๑' + 59: 1, # '๒' + 60: 0, # '๕' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +TIS_620_THAI_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 254, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 254, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 253, # ' ' + 33: 253, # '!' + 34: 253, # '"' + 35: 253, # '#' + 36: 253, # '$' + 37: 253, # '%' + 38: 253, # '&' + 39: 253, # "'" + 40: 253, # '(' + 41: 253, # ')' + 42: 253, # '*' + 43: 253, # '+' + 44: 253, # ',' + 45: 253, # '-' + 46: 253, # '.' + 47: 253, # '/' + 48: 252, # '0' + 49: 252, # '1' + 50: 252, # '2' + 51: 252, # '3' + 52: 252, # '4' + 53: 252, # '5' + 54: 252, # '6' + 55: 252, # '7' + 56: 252, # '8' + 57: 252, # '9' + 58: 253, # ':' + 59: 253, # ';' + 60: 253, # '<' + 61: 253, # '=' + 62: 253, # '>' + 63: 253, # '?' + 64: 253, # '@' + 65: 182, # 'A' + 66: 106, # 'B' + 67: 107, # 'C' + 68: 100, # 'D' + 69: 183, # 'E' + 70: 184, # 'F' + 71: 185, # 'G' + 72: 101, # 'H' + 73: 94, # 'I' + 74: 186, # 'J' + 75: 187, # 'K' + 76: 108, # 'L' + 77: 109, # 'M' + 78: 110, # 'N' + 79: 111, # 'O' + 80: 188, # 'P' + 81: 189, # 'Q' + 82: 190, # 'R' + 83: 89, # 'S' + 84: 95, # 'T' + 85: 112, # 'U' + 86: 113, # 'V' + 87: 191, # 'W' + 88: 192, # 'X' + 89: 193, # 'Y' + 90: 194, # 'Z' + 91: 253, # '[' + 92: 253, # '\\' + 93: 253, # ']' + 94: 253, # '^' + 95: 253, # '_' + 96: 253, # '`' + 97: 64, # 'a' + 98: 72, # 'b' + 99: 73, # 'c' + 100: 114, # 'd' + 101: 74, # 'e' + 102: 115, # 'f' + 103: 116, # 'g' + 104: 102, # 'h' + 105: 81, # 'i' + 106: 201, # 'j' + 107: 117, # 'k' + 108: 90, # 'l' + 109: 103, # 'm' + 110: 78, # 'n' + 111: 82, # 'o' + 112: 96, # 'p' + 113: 202, # 'q' + 114: 91, # 'r' + 115: 79, # 's' + 116: 84, # 't' + 117: 104, # 'u' + 118: 105, # 'v' + 119: 97, # 'w' + 120: 98, # 'x' + 121: 92, # 'y' + 122: 203, # 'z' + 123: 253, # '{' + 124: 253, # '|' + 125: 253, # '}' + 126: 253, # '~' + 127: 253, # '\x7f' + 128: 209, # '\x80' + 129: 210, # '\x81' + 130: 211, # '\x82' + 131: 212, # '\x83' + 132: 213, # '\x84' + 133: 88, # '\x85' + 134: 214, # '\x86' + 135: 215, # '\x87' + 136: 216, # '\x88' + 137: 217, # '\x89' + 138: 218, # '\x8a' + 139: 219, # '\x8b' + 140: 220, # '\x8c' + 141: 118, # '\x8d' + 142: 221, # '\x8e' + 143: 222, # '\x8f' + 144: 223, # '\x90' + 145: 224, # '\x91' + 146: 99, # '\x92' + 147: 85, # '\x93' + 148: 83, # '\x94' + 149: 225, # '\x95' + 150: 226, # '\x96' + 151: 227, # '\x97' + 152: 228, # '\x98' + 153: 229, # '\x99' + 154: 230, # '\x9a' + 155: 231, # '\x9b' + 156: 232, # '\x9c' + 157: 233, # '\x9d' + 158: 234, # '\x9e' + 159: 235, # '\x9f' + 160: 236, # None + 161: 5, # 'ก' + 162: 30, # 'ข' + 163: 237, # 'ฃ' + 164: 24, # 'ค' + 165: 238, # 'ฅ' + 166: 75, # 'ฆ' + 167: 8, # 'ง' + 168: 26, # 'จ' + 169: 52, # 'ฉ' + 170: 34, # 'ช' + 171: 51, # 'ซ' + 172: 119, # 'ฌ' + 173: 47, # 'ญ' + 174: 58, # 'ฎ' + 175: 57, # 'ฏ' + 176: 49, # 'ฐ' + 177: 53, # 'ฑ' + 178: 55, # 'ฒ' + 179: 43, # 'ณ' + 180: 20, # 'ด' + 181: 19, # 'ต' + 182: 44, # 'ถ' + 183: 14, # 'ท' + 184: 48, # 'ธ' + 185: 3, # 'น' + 186: 17, # 'บ' + 187: 25, # 'ป' + 188: 39, # 'ผ' + 189: 62, # 'ฝ' + 190: 31, # 'พ' + 191: 54, # 'ฟ' + 192: 45, # 'ภ' + 193: 9, # 'ม' + 194: 16, # 'ย' + 195: 2, # 'ร' + 196: 61, # 'ฤ' + 197: 15, # 'ล' + 198: 239, # 'ฦ' + 199: 12, # 'ว' + 200: 42, # 'ศ' + 201: 46, # 'ษ' + 202: 18, # 'ส' + 203: 21, # 'ห' + 204: 76, # 'ฬ' + 205: 4, # 'อ' + 206: 66, # 'ฮ' + 207: 63, # 'ฯ' + 208: 22, # 'ะ' + 209: 10, # 'ั' + 210: 1, # 'า' + 211: 36, # 'ำ' + 212: 23, # 'ิ' + 213: 13, # 'ี' + 214: 40, # 'ึ' + 215: 27, # 'ื' + 216: 32, # 'ุ' + 217: 35, # 'ู' + 218: 86, # 'ฺ' + 219: 240, # None + 220: 241, # None + 221: 242, # None + 222: 243, # None + 223: 244, # '฿' + 224: 11, # 'เ' + 225: 28, # 'แ' + 226: 41, # 'โ' + 227: 29, # 'ใ' + 228: 33, # 'ไ' + 229: 245, # 'ๅ' + 230: 50, # 'ๆ' + 231: 37, # '็' + 232: 6, # '่' + 233: 7, # '้' + 234: 67, # '๊' + 235: 77, # '๋' + 236: 38, # '์' + 237: 93, # 'ํ' + 238: 246, # '๎' + 239: 247, # '๏' + 240: 68, # '๐' + 241: 56, # '๑' + 242: 59, # '๒' + 243: 65, # '๓' + 244: 69, # '๔' + 245: 60, # '๕' + 246: 70, # '๖' + 247: 80, # '๗' + 248: 71, # '๘' + 249: 87, # '๙' + 250: 248, # '๚' + 251: 249, # '๛' + 252: 250, # None + 253: 251, # None + 254: 252, # None + 255: 253, # None +} + +TIS_620_THAI_MODEL = SingleByteCharSetModel( + charset_name="TIS-620", + language="Thai", + char_to_order_map=TIS_620_THAI_CHAR_TO_ORDER, + language_model=THAI_LANG_MODEL, + typical_positive_ratio=0.926386, + keep_ascii_letters=False, + alphabet="กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛", +) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langturkishmodel.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langturkishmodel.py new file mode 100644 index 0000000..64c9433 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/langturkishmodel.py @@ -0,0 +1,4380 @@ +from chardet.sbcharsetprober import SingleByteCharSetModel + +# 3: Positive +# 2: Likely +# 1: Unlikely +# 0: Negative + +TURKISH_LANG_MODEL = { + 23: { # 'A' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 1, # 'i' + 24: 0, # 'j' + 10: 2, # 'k' + 5: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 37: { # 'B' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 2, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 47: { # 'C' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 1, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 2, # 'l' + 13: 2, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 2, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 39: { # 'D' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 1, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 1, # 'Ş' + 19: 0, # 'ş' + }, + 29: { # 'E' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 1, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 1, # 'j' + 10: 0, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 1, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 52: { # 'F' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 1, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 2, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 1, # 'b' + 28: 1, # 'c' + 12: 1, # 'd' + 2: 0, # 'e' + 18: 1, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 1, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 2, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 2, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 2, # 'ş' + }, + 36: { # 'G' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 2, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 2, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 1, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 1, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 0, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 1, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 45: { # 'H' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 2, # 'G' + 45: 1, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 1, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 2, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 1, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 2, # 'ğ' + 41: 1, # 'İ' + 6: 0, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 53: { # 'I' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 2, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 60: { # 'J' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 0, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 1, # 's' + 9: 0, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 16: { # 'K' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 1, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 0, # 'u' + 32: 3, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 49: { # 'L' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 2, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 2, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 0, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 1, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 2, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 1, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 20: { # 'M' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 2, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 0, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 46: { # 'N' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 1, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 1, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 1, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 42: { # 'O' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 1, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 2, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 2, # 'İ' + 6: 1, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 48: { # 'P' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 2, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 0, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 44: { # 'R' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 1, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 2, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 1, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, + 35: { # 'S' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 1, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 1, # 'l' + 13: 2, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 1, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 2, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 31: { # 'T' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 2, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 1, # 'j' + 10: 2, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 2, # 'r' + 8: 0, # 's' + 9: 2, # 't' + 14: 2, # 'u' + 32: 1, # 'v' + 57: 1, # 'w' + 58: 1, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 51: { # 'U' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 1, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 1, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 38: { # 'V' + 23: 1, # 'A' + 37: 1, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 2, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 1, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 1, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 62: { # 'W' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 0, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 0, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 43: { # 'Y' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 1, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 2, # 'N' + 42: 0, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 1, # 'j' + 10: 1, # 'k' + 5: 1, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 1, # 'Ü' + 59: 1, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 0, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 56: { # 'Z' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 2, # 'Z' + 1: 2, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 1, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 1, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 1: { # 'a' + 23: 3, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 2, # 'Z' + 1: 2, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 2, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 3, # 'v' + 57: 2, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 1, # 'î' + 34: 1, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 21: { # 'b' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 3, # 'g' + 25: 1, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 1, # 'r' + 8: 2, # 's' + 9: 2, # 't' + 14: 2, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 28: { # 'c' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 2, # 'E' + 52: 0, # 'F' + 36: 2, # 'G' + 45: 2, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 2, # 'T' + 51: 2, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 3, # 'Y' + 56: 0, # 'Z' + 1: 1, # 'a' + 21: 1, # 'b' + 28: 2, # 'c' + 12: 2, # 'd' + 2: 1, # 'e' + 18: 1, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 1, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 2, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 1, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 1, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 1, # 'î' + 34: 2, # 'ö' + 17: 2, # 'ü' + 30: 2, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 2, # 'ş' + }, + 12: { # 'd' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 2, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 1, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 2, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 1, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 2: { # 'e' + 23: 2, # 'A' + 37: 0, # 'B' + 47: 2, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 2, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 3, # 'v' + 57: 2, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 1, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 18: { # 'f' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 1, # 'i' + 24: 1, # 'j' + 10: 1, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 1, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 1, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 27: { # 'g' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 2, # 'r' + 8: 2, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 25: { # 'h' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 3: { # 'i' + 23: 2, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 1, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 3, # 'g' + 25: 1, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 1, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 1, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 1, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 1, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 24: { # 'j' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 2, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 1, # 'j' + 10: 2, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 2, # 'r' + 8: 3, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 10: { # 'k' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 1, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 2, # 'r' + 8: 2, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 3, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 5: { # 'l' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 1, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 1, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 2, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 13: { # 'm' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 2, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 2, # 'u' + 32: 2, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 4: { # 'n' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 2, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 1, # 'f' + 27: 2, # 'g' + 25: 3, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 3, # 'p' + 7: 2, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 15: { # 'o' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 2, # 'L' + 20: 0, # 'M' + 46: 2, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 2, # 'ğ' + 41: 2, # 'İ' + 6: 3, # 'ı' + 40: 2, # 'Ş' + 19: 2, # 'ş' + }, + 26: { # 'p' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 1, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 2, # 'r' + 8: 1, # 's' + 9: 1, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 1, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 7: { # 'r' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 1, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 2, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 1, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 3, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 8: { # 's' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 2, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 9: { # 't' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 2, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 3, # 'v' + 57: 0, # 'w' + 58: 2, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 14: { # 'u' + 23: 3, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 2, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 3, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 2, # 'Z' + 1: 2, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 2, # 'e' + 18: 2, # 'f' + 27: 3, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 2, # 'v' + 57: 2, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 32: { # 'v' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 1, # 'j' + 10: 1, # 'k' + 5: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 1, # 'r' + 8: 2, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 57: { # 'w' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 1, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 1, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 1, # 's' + 9: 0, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 2, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 58: { # 'x' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 1, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 1, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 2, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 2, # 's' + 9: 1, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 11: { # 'y' + 23: 1, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 1, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 2, # 'r' + 8: 1, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 3, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 22: { # 'z' + 23: 2, # 'A' + 37: 2, # 'B' + 47: 1, # 'C' + 39: 2, # 'D' + 29: 3, # 'E' + 52: 1, # 'F' + 36: 2, # 'G' + 45: 2, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 2, # 'N' + 42: 2, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 3, # 'T' + 51: 2, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 1, # 'Z' + 1: 1, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 2, # 'd' + 2: 2, # 'e' + 18: 3, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 2, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 0, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 3, # 'y' + 22: 2, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 2, # 'Ü' + 59: 1, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 2, # 'ü' + 30: 2, # 'ğ' + 41: 1, # 'İ' + 6: 3, # 'ı' + 40: 1, # 'Ş' + 19: 2, # 'ş' + }, + 63: { # '·' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 1, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 54: { # 'Ç' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 1, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 0, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 0, # 'h' + 3: 3, # 'i' + 24: 0, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 2, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 2, # 'r' + 8: 0, # 's' + 9: 1, # 't' + 14: 0, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 2, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 50: { # 'Ö' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 2, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 2, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 1, # 'N' + 42: 2, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 2, # 'd' + 2: 0, # 'e' + 18: 1, # 'f' + 27: 1, # 'g' + 25: 1, # 'h' + 3: 2, # 'i' + 24: 0, # 'j' + 10: 2, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 3, # 'n' + 15: 2, # 'o' + 26: 2, # 'p' + 7: 3, # 'r' + 8: 1, # 's' + 9: 2, # 't' + 14: 0, # 'u' + 32: 1, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 2, # 'ü' + 30: 1, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 55: { # 'Ü' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 1, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 1, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 1, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 1, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 1, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 0, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 59: { # 'â' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 0, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 2, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 2, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 1, # 'Ş' + 19: 0, # 'ş' + }, + 33: { # 'ç' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 3, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 0, # 'Z' + 1: 0, # 'a' + 21: 3, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 0, # 'e' + 18: 2, # 'f' + 27: 1, # 'g' + 25: 3, # 'h' + 3: 3, # 'i' + 24: 0, # 'j' + 10: 3, # 'k' + 5: 0, # 'l' + 13: 0, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 2, # 's' + 9: 3, # 't' + 14: 0, # 'u' + 32: 2, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 1, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 61: { # 'î' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 0, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 0, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 2, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 1, # 'j' + 10: 0, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 1, # 'n' + 15: 0, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 1, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 1, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 1, # 'î' + 34: 0, # 'ö' + 17: 0, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 1, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 34: { # 'ö' + 23: 0, # 'A' + 37: 1, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 1, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 1, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 2, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 2, # 'h' + 3: 1, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 2, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 0, # 'r' + 8: 3, # 's' + 9: 1, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 1, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 2, # 'ğ' + 41: 1, # 'İ' + 6: 1, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 17: { # 'ü' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 0, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 1, # 'J' + 16: 1, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 0, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 0, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 0, # 'c' + 12: 1, # 'd' + 2: 3, # 'e' + 18: 1, # 'f' + 27: 2, # 'g' + 25: 0, # 'h' + 3: 1, # 'i' + 24: 1, # 'j' + 10: 2, # 'k' + 5: 3, # 'l' + 13: 2, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 2, # 'p' + 7: 2, # 'r' + 8: 3, # 's' + 9: 2, # 't' + 14: 3, # 'u' + 32: 1, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 2, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 30: { # 'ğ' + 23: 0, # 'A' + 37: 2, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 1, # 'M' + 46: 2, # 'N' + 42: 2, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 0, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 2, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 0, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 2, # 'e' + 18: 0, # 'f' + 27: 0, # 'g' + 25: 0, # 'h' + 3: 0, # 'i' + 24: 3, # 'j' + 10: 1, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 1, # 'o' + 26: 0, # 'p' + 7: 1, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 2, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 2, # 'İ' + 6: 2, # 'ı' + 40: 2, # 'Ş' + 19: 1, # 'ş' + }, + 41: { # 'İ' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 1, # 'E' + 52: 0, # 'F' + 36: 2, # 'G' + 45: 2, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 0, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 0, # 'Z' + 1: 1, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 2, # 'd' + 2: 1, # 'e' + 18: 0, # 'f' + 27: 3, # 'g' + 25: 2, # 'h' + 3: 2, # 'i' + 24: 2, # 'j' + 10: 2, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 15: 1, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 2, # 't' + 14: 0, # 'u' + 32: 0, # 'v' + 57: 1, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 1, # 'Ü' + 59: 1, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 1, # 'ö' + 17: 1, # 'ü' + 30: 2, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 1, # 'ş' + }, + 6: { # 'ı' + 23: 2, # 'A' + 37: 0, # 'B' + 47: 0, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 2, # 'J' + 16: 3, # 'K' + 49: 0, # 'L' + 20: 3, # 'M' + 46: 1, # 'N' + 42: 0, # 'O' + 48: 0, # 'P' + 44: 0, # 'R' + 35: 0, # 'S' + 31: 2, # 'T' + 51: 0, # 'U' + 38: 0, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 1, # 'Z' + 1: 3, # 'a' + 21: 2, # 'b' + 28: 1, # 'c' + 12: 3, # 'd' + 2: 3, # 'e' + 18: 3, # 'f' + 27: 3, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 3, # 'j' + 10: 3, # 'k' + 5: 3, # 'l' + 13: 3, # 'm' + 4: 3, # 'n' + 15: 0, # 'o' + 26: 3, # 'p' + 7: 3, # 'r' + 8: 3, # 's' + 9: 3, # 't' + 14: 3, # 'u' + 32: 3, # 'v' + 57: 1, # 'w' + 58: 1, # 'x' + 11: 3, # 'y' + 22: 0, # 'z' + 63: 1, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 2, # 'ç' + 61: 0, # 'î' + 34: 0, # 'ö' + 17: 3, # 'ü' + 30: 0, # 'ğ' + 41: 0, # 'İ' + 6: 3, # 'ı' + 40: 0, # 'Ş' + 19: 0, # 'ş' + }, + 40: { # 'Ş' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 1, # 'D' + 29: 1, # 'E' + 52: 0, # 'F' + 36: 1, # 'G' + 45: 2, # 'H' + 53: 1, # 'I' + 60: 0, # 'J' + 16: 0, # 'K' + 49: 0, # 'L' + 20: 2, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 2, # 'P' + 44: 2, # 'R' + 35: 1, # 'S' + 31: 1, # 'T' + 51: 0, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 2, # 'Y' + 56: 1, # 'Z' + 1: 0, # 'a' + 21: 2, # 'b' + 28: 0, # 'c' + 12: 2, # 'd' + 2: 0, # 'e' + 18: 3, # 'f' + 27: 0, # 'g' + 25: 2, # 'h' + 3: 3, # 'i' + 24: 2, # 'j' + 10: 1, # 'k' + 5: 0, # 'l' + 13: 1, # 'm' + 4: 3, # 'n' + 15: 2, # 'o' + 26: 0, # 'p' + 7: 3, # 'r' + 8: 2, # 's' + 9: 2, # 't' + 14: 1, # 'u' + 32: 3, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 2, # 'y' + 22: 0, # 'z' + 63: 0, # '·' + 54: 0, # 'Ç' + 50: 0, # 'Ö' + 55: 1, # 'Ü' + 59: 0, # 'â' + 33: 0, # 'ç' + 61: 0, # 'î' + 34: 2, # 'ö' + 17: 1, # 'ü' + 30: 2, # 'ğ' + 41: 0, # 'İ' + 6: 2, # 'ı' + 40: 1, # 'Ş' + 19: 2, # 'ş' + }, + 19: { # 'ş' + 23: 0, # 'A' + 37: 0, # 'B' + 47: 1, # 'C' + 39: 0, # 'D' + 29: 0, # 'E' + 52: 2, # 'F' + 36: 1, # 'G' + 45: 0, # 'H' + 53: 0, # 'I' + 60: 0, # 'J' + 16: 3, # 'K' + 49: 2, # 'L' + 20: 0, # 'M' + 46: 1, # 'N' + 42: 1, # 'O' + 48: 1, # 'P' + 44: 1, # 'R' + 35: 1, # 'S' + 31: 0, # 'T' + 51: 1, # 'U' + 38: 1, # 'V' + 62: 0, # 'W' + 43: 1, # 'Y' + 56: 0, # 'Z' + 1: 3, # 'a' + 21: 1, # 'b' + 28: 2, # 'c' + 12: 0, # 'd' + 2: 3, # 'e' + 18: 0, # 'f' + 27: 2, # 'g' + 25: 1, # 'h' + 3: 1, # 'i' + 24: 0, # 'j' + 10: 2, # 'k' + 5: 2, # 'l' + 13: 3, # 'm' + 4: 0, # 'n' + 15: 0, # 'o' + 26: 1, # 'p' + 7: 3, # 'r' + 8: 0, # 's' + 9: 0, # 't' + 14: 3, # 'u' + 32: 0, # 'v' + 57: 0, # 'w' + 58: 0, # 'x' + 11: 0, # 'y' + 22: 2, # 'z' + 63: 0, # '·' + 54: 1, # 'Ç' + 50: 2, # 'Ö' + 55: 0, # 'Ü' + 59: 0, # 'â' + 33: 1, # 'ç' + 61: 1, # 'î' + 34: 2, # 'ö' + 17: 0, # 'ü' + 30: 1, # 'ğ' + 41: 1, # 'İ' + 6: 1, # 'ı' + 40: 1, # 'Ş' + 19: 1, # 'ş' + }, +} + +# 255: Undefined characters that did not exist in training text +# 254: Carriage/Return +# 253: symbol (punctuation) that does not belong to word +# 252: 0 - 9 +# 251: Control characters + +# Character Mapping Table(s): +ISO_8859_9_TURKISH_CHAR_TO_ORDER = { + 0: 255, # '\x00' + 1: 255, # '\x01' + 2: 255, # '\x02' + 3: 255, # '\x03' + 4: 255, # '\x04' + 5: 255, # '\x05' + 6: 255, # '\x06' + 7: 255, # '\x07' + 8: 255, # '\x08' + 9: 255, # '\t' + 10: 255, # '\n' + 11: 255, # '\x0b' + 12: 255, # '\x0c' + 13: 255, # '\r' + 14: 255, # '\x0e' + 15: 255, # '\x0f' + 16: 255, # '\x10' + 17: 255, # '\x11' + 18: 255, # '\x12' + 19: 255, # '\x13' + 20: 255, # '\x14' + 21: 255, # '\x15' + 22: 255, # '\x16' + 23: 255, # '\x17' + 24: 255, # '\x18' + 25: 255, # '\x19' + 26: 255, # '\x1a' + 27: 255, # '\x1b' + 28: 255, # '\x1c' + 29: 255, # '\x1d' + 30: 255, # '\x1e' + 31: 255, # '\x1f' + 32: 255, # ' ' + 33: 255, # '!' + 34: 255, # '"' + 35: 255, # '#' + 36: 255, # '$' + 37: 255, # '%' + 38: 255, # '&' + 39: 255, # "'" + 40: 255, # '(' + 41: 255, # ')' + 42: 255, # '*' + 43: 255, # '+' + 44: 255, # ',' + 45: 255, # '-' + 46: 255, # '.' + 47: 255, # '/' + 48: 255, # '0' + 49: 255, # '1' + 50: 255, # '2' + 51: 255, # '3' + 52: 255, # '4' + 53: 255, # '5' + 54: 255, # '6' + 55: 255, # '7' + 56: 255, # '8' + 57: 255, # '9' + 58: 255, # ':' + 59: 255, # ';' + 60: 255, # '<' + 61: 255, # '=' + 62: 255, # '>' + 63: 255, # '?' + 64: 255, # '@' + 65: 23, # 'A' + 66: 37, # 'B' + 67: 47, # 'C' + 68: 39, # 'D' + 69: 29, # 'E' + 70: 52, # 'F' + 71: 36, # 'G' + 72: 45, # 'H' + 73: 53, # 'I' + 74: 60, # 'J' + 75: 16, # 'K' + 76: 49, # 'L' + 77: 20, # 'M' + 78: 46, # 'N' + 79: 42, # 'O' + 80: 48, # 'P' + 81: 69, # 'Q' + 82: 44, # 'R' + 83: 35, # 'S' + 84: 31, # 'T' + 85: 51, # 'U' + 86: 38, # 'V' + 87: 62, # 'W' + 88: 65, # 'X' + 89: 43, # 'Y' + 90: 56, # 'Z' + 91: 255, # '[' + 92: 255, # '\\' + 93: 255, # ']' + 94: 255, # '^' + 95: 255, # '_' + 96: 255, # '`' + 97: 1, # 'a' + 98: 21, # 'b' + 99: 28, # 'c' + 100: 12, # 'd' + 101: 2, # 'e' + 102: 18, # 'f' + 103: 27, # 'g' + 104: 25, # 'h' + 105: 3, # 'i' + 106: 24, # 'j' + 107: 10, # 'k' + 108: 5, # 'l' + 109: 13, # 'm' + 110: 4, # 'n' + 111: 15, # 'o' + 112: 26, # 'p' + 113: 64, # 'q' + 114: 7, # 'r' + 115: 8, # 's' + 116: 9, # 't' + 117: 14, # 'u' + 118: 32, # 'v' + 119: 57, # 'w' + 120: 58, # 'x' + 121: 11, # 'y' + 122: 22, # 'z' + 123: 255, # '{' + 124: 255, # '|' + 125: 255, # '}' + 126: 255, # '~' + 127: 255, # '\x7f' + 128: 180, # '\x80' + 129: 179, # '\x81' + 130: 178, # '\x82' + 131: 177, # '\x83' + 132: 176, # '\x84' + 133: 175, # '\x85' + 134: 174, # '\x86' + 135: 173, # '\x87' + 136: 172, # '\x88' + 137: 171, # '\x89' + 138: 170, # '\x8a' + 139: 169, # '\x8b' + 140: 168, # '\x8c' + 141: 167, # '\x8d' + 142: 166, # '\x8e' + 143: 165, # '\x8f' + 144: 164, # '\x90' + 145: 163, # '\x91' + 146: 162, # '\x92' + 147: 161, # '\x93' + 148: 160, # '\x94' + 149: 159, # '\x95' + 150: 101, # '\x96' + 151: 158, # '\x97' + 152: 157, # '\x98' + 153: 156, # '\x99' + 154: 155, # '\x9a' + 155: 154, # '\x9b' + 156: 153, # '\x9c' + 157: 152, # '\x9d' + 158: 151, # '\x9e' + 159: 106, # '\x9f' + 160: 150, # '\xa0' + 161: 149, # '¡' + 162: 148, # '¢' + 163: 147, # '£' + 164: 146, # '¤' + 165: 145, # '¥' + 166: 144, # '¦' + 167: 100, # '§' + 168: 143, # '¨' + 169: 142, # '©' + 170: 141, # 'ª' + 171: 140, # '«' + 172: 139, # '¬' + 173: 138, # '\xad' + 174: 137, # '®' + 175: 136, # '¯' + 176: 94, # '°' + 177: 80, # '±' + 178: 93, # '²' + 179: 135, # '³' + 180: 105, # '´' + 181: 134, # 'µ' + 182: 133, # '¶' + 183: 63, # '·' + 184: 132, # '¸' + 185: 131, # '¹' + 186: 130, # 'º' + 187: 129, # '»' + 188: 128, # '¼' + 189: 127, # '½' + 190: 126, # '¾' + 191: 125, # '¿' + 192: 124, # 'À' + 193: 104, # 'Á' + 194: 73, # 'Â' + 195: 99, # 'Ã' + 196: 79, # 'Ä' + 197: 85, # 'Å' + 198: 123, # 'Æ' + 199: 54, # 'Ç' + 200: 122, # 'È' + 201: 98, # 'É' + 202: 92, # 'Ê' + 203: 121, # 'Ë' + 204: 120, # 'Ì' + 205: 91, # 'Í' + 206: 103, # 'Î' + 207: 119, # 'Ï' + 208: 68, # 'Ğ' + 209: 118, # 'Ñ' + 210: 117, # 'Ò' + 211: 97, # 'Ó' + 212: 116, # 'Ô' + 213: 115, # 'Õ' + 214: 50, # 'Ö' + 215: 90, # '×' + 216: 114, # 'Ø' + 217: 113, # 'Ù' + 218: 112, # 'Ú' + 219: 111, # 'Û' + 220: 55, # 'Ü' + 221: 41, # 'İ' + 222: 40, # 'Ş' + 223: 86, # 'ß' + 224: 89, # 'à' + 225: 70, # 'á' + 226: 59, # 'â' + 227: 78, # 'ã' + 228: 71, # 'ä' + 229: 82, # 'å' + 230: 88, # 'æ' + 231: 33, # 'ç' + 232: 77, # 'è' + 233: 66, # 'é' + 234: 84, # 'ê' + 235: 83, # 'ë' + 236: 110, # 'ì' + 237: 75, # 'í' + 238: 61, # 'î' + 239: 96, # 'ï' + 240: 30, # 'ğ' + 241: 67, # 'ñ' + 242: 109, # 'ò' + 243: 74, # 'ó' + 244: 87, # 'ô' + 245: 102, # 'õ' + 246: 34, # 'ö' + 247: 95, # '÷' + 248: 81, # 'ø' + 249: 108, # 'ù' + 250: 76, # 'ú' + 251: 72, # 'û' + 252: 17, # 'ü' + 253: 6, # 'ı' + 254: 19, # 'ş' + 255: 107, # 'ÿ' +} + +ISO_8859_9_TURKISH_MODEL = SingleByteCharSetModel( + charset_name="ISO-8859-9", + language="Turkish", + char_to_order_map=ISO_8859_9_TURKISH_CHAR_TO_ORDER, + language_model=TURKISH_LANG_MODEL, + typical_positive_ratio=0.97029, + keep_ascii_letters=True, + alphabet="ABCDEFGHIJKLMNOPRSTUVYZabcdefghijklmnoprstuvyzÂÇÎÖÛÜâçîöûüĞğİıŞş", +) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/latin1prober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/latin1prober.py new file mode 100644 index 0000000..59a01d9 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/latin1prober.py @@ -0,0 +1,147 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import List, Union + +from .charsetprober import CharSetProber +from .enums import ProbingState + +FREQ_CAT_NUM = 4 + +UDF = 0 # undefined +OTH = 1 # other +ASC = 2 # ascii capital letter +ASS = 3 # ascii small letter +ACV = 4 # accent capital vowel +ACO = 5 # accent capital other +ASV = 6 # accent small vowel +ASO = 7 # accent small other +CLASS_NUM = 8 # total classes + +# fmt: off +Latin1_CharToClass = ( + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F + OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47 + ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F + ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57 + ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F + OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67 + ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F + ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77 + ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F + OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, # 80 - 87 + OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, # 88 - 8F + UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 90 - 97 + OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, # 98 - 9F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A0 - A7 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A8 - AF + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B8 - BF + ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, # C0 - C7 + ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # C8 - CF + ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, # D0 - D7 + ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, # D8 - DF + ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, # E0 - E7 + ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # E8 - EF + ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, # F0 - F7 + ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO, # F8 - FF +) + +# 0 : illegal +# 1 : very unlikely +# 2 : normal +# 3 : very likely +Latin1ClassModel = ( +# UDF OTH ASC ASS ACV ACO ASV ASO + 0, 0, 0, 0, 0, 0, 0, 0, # UDF + 0, 3, 3, 3, 3, 3, 3, 3, # OTH + 0, 3, 3, 3, 3, 3, 3, 3, # ASC + 0, 3, 3, 3, 1, 1, 3, 3, # ASS + 0, 3, 3, 3, 1, 2, 1, 2, # ACV + 0, 3, 3, 3, 3, 3, 3, 3, # ACO + 0, 3, 1, 3, 1, 1, 1, 3, # ASV + 0, 3, 1, 3, 1, 1, 3, 3, # ASO +) +# fmt: on + + +class Latin1Prober(CharSetProber): + def __init__(self) -> None: + super().__init__() + self._last_char_class = OTH + self._freq_counter: List[int] = [] + self.reset() + + def reset(self) -> None: + self._last_char_class = OTH + self._freq_counter = [0] * FREQ_CAT_NUM + super().reset() + + @property + def charset_name(self) -> str: + return "ISO-8859-1" + + @property + def language(self) -> str: + return "" + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + byte_str = self.remove_xml_tags(byte_str) + for c in byte_str: + char_class = Latin1_CharToClass[c] + freq = Latin1ClassModel[(self._last_char_class * CLASS_NUM) + char_class] + if freq == 0: + self._state = ProbingState.NOT_ME + break + self._freq_counter[freq] += 1 + self._last_char_class = char_class + + return self.state + + def get_confidence(self) -> float: + if self.state == ProbingState.NOT_ME: + return 0.01 + + total = sum(self._freq_counter) + confidence = ( + 0.0 + if total < 0.01 + else (self._freq_counter[3] - self._freq_counter[1] * 20.0) / total + ) + confidence = max(confidence, 0.0) + # lower the confidence of latin1 so that other more accurate + # detector can take priority. + confidence *= 0.73 + return confidence diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/macromanprober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/macromanprober.py new file mode 100644 index 0000000..1425d10 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/macromanprober.py @@ -0,0 +1,162 @@ +######################## BEGIN LICENSE BLOCK ######################## +# This code was modified from latin1prober.py by Rob Speer . +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Rob Speer - adapt to MacRoman encoding +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import List, Union + +from .charsetprober import CharSetProber +from .enums import ProbingState + +FREQ_CAT_NUM = 4 + +UDF = 0 # undefined +OTH = 1 # other +ASC = 2 # ascii capital letter +ASS = 3 # ascii small letter +ACV = 4 # accent capital vowel +ACO = 5 # accent capital other +ASV = 6 # accent small vowel +ASO = 7 # accent small other +ODD = 8 # character that is unlikely to appear +CLASS_NUM = 9 # total classes + +# The change from Latin1 is that we explicitly look for extended characters +# that are infrequently-occurring symbols, and consider them to always be +# improbable. This should let MacRoman get out of the way of more likely +# encodings in most situations. + +# fmt: off +MacRoman_CharToClass = ( + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37 + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F + OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47 + ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F + ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57 + ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F + OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67 + ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F + ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77 + ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F + ACV, ACV, ACO, ACV, ACO, ACV, ACV, ASV, # 80 - 87 + ASV, ASV, ASV, ASV, ASV, ASO, ASV, ASV, # 88 - 8F + ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASV, # 90 - 97 + ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # 98 - 9F + OTH, OTH, OTH, OTH, OTH, OTH, OTH, ASO, # A0 - A7 + OTH, OTH, ODD, ODD, OTH, OTH, ACV, ACV, # A8 - AF + OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7 + OTH, OTH, OTH, OTH, OTH, OTH, ASV, ASV, # B8 - BF + OTH, OTH, ODD, OTH, ODD, OTH, OTH, OTH, # C0 - C7 + OTH, OTH, OTH, ACV, ACV, ACV, ACV, ASV, # C8 - CF + OTH, OTH, OTH, OTH, OTH, OTH, OTH, ODD, # D0 - D7 + ASV, ACV, ODD, OTH, OTH, OTH, OTH, OTH, # D8 - DF + OTH, OTH, OTH, OTH, OTH, ACV, ACV, ACV, # E0 - E7 + ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # E8 - EF + ODD, ACV, ACV, ACV, ACV, ASV, ODD, ODD, # F0 - F7 + ODD, ODD, ODD, ODD, ODD, ODD, ODD, ODD, # F8 - FF +) + +# 0 : illegal +# 1 : very unlikely +# 2 : normal +# 3 : very likely +MacRomanClassModel = ( +# UDF OTH ASC ASS ACV ACO ASV ASO ODD + 0, 0, 0, 0, 0, 0, 0, 0, 0, # UDF + 0, 3, 3, 3, 3, 3, 3, 3, 1, # OTH + 0, 3, 3, 3, 3, 3, 3, 3, 1, # ASC + 0, 3, 3, 3, 1, 1, 3, 3, 1, # ASS + 0, 3, 3, 3, 1, 2, 1, 2, 1, # ACV + 0, 3, 3, 3, 3, 3, 3, 3, 1, # ACO + 0, 3, 1, 3, 1, 1, 1, 3, 1, # ASV + 0, 3, 1, 3, 1, 1, 3, 3, 1, # ASO + 0, 1, 1, 1, 1, 1, 1, 1, 1, # ODD +) +# fmt: on + + +class MacRomanProber(CharSetProber): + def __init__(self) -> None: + super().__init__() + self._last_char_class = OTH + self._freq_counter: List[int] = [] + self.reset() + + def reset(self) -> None: + self._last_char_class = OTH + self._freq_counter = [0] * FREQ_CAT_NUM + + # express the prior that MacRoman is a somewhat rare encoding; + # this can be done by starting out in a slightly improbable state + # that must be overcome + self._freq_counter[2] = 10 + + super().reset() + + @property + def charset_name(self) -> str: + return "MacRoman" + + @property + def language(self) -> str: + return "" + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + byte_str = self.remove_xml_tags(byte_str) + for c in byte_str: + char_class = MacRoman_CharToClass[c] + freq = MacRomanClassModel[(self._last_char_class * CLASS_NUM) + char_class] + if freq == 0: + self._state = ProbingState.NOT_ME + break + self._freq_counter[freq] += 1 + self._last_char_class = char_class + + return self.state + + def get_confidence(self) -> float: + if self.state == ProbingState.NOT_ME: + return 0.01 + + total = sum(self._freq_counter) + confidence = ( + 0.0 + if total < 0.01 + else (self._freq_counter[3] - self._freq_counter[1] * 20.0) / total + ) + confidence = max(confidence, 0.0) + # lower the confidence of MacRoman so that other more accurate + # detector can take priority. + confidence *= 0.73 + return confidence diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/mbcharsetprober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/mbcharsetprober.py new file mode 100644 index 0000000..666307e --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/mbcharsetprober.py @@ -0,0 +1,95 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# Proofpoint, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import Optional, Union + +from .chardistribution import CharDistributionAnalysis +from .charsetprober import CharSetProber +from .codingstatemachine import CodingStateMachine +from .enums import LanguageFilter, MachineState, ProbingState + + +class MultiByteCharSetProber(CharSetProber): + """ + MultiByteCharSetProber + """ + + def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None: + super().__init__(lang_filter=lang_filter) + self.distribution_analyzer: Optional[CharDistributionAnalysis] = None + self.coding_sm: Optional[CodingStateMachine] = None + self._last_char = bytearray(b"\0\0") + + def reset(self) -> None: + super().reset() + if self.coding_sm: + self.coding_sm.reset() + if self.distribution_analyzer: + self.distribution_analyzer.reset() + self._last_char = bytearray(b"\0\0") + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + assert self.coding_sm is not None + assert self.distribution_analyzer is not None + + for i, byte in enumerate(byte_str): + coding_state = self.coding_sm.next_state(byte) + if coding_state == MachineState.ERROR: + self.logger.debug( + "%s %s prober hit error at byte %s", + self.charset_name, + self.language, + i, + ) + self._state = ProbingState.NOT_ME + break + if coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + if coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.distribution_analyzer.feed(byte_str[i - 1 : i + 1], char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if self.distribution_analyzer.got_enough_data() and ( + self.get_confidence() > self.SHORTCUT_THRESHOLD + ): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self) -> float: + assert self.distribution_analyzer is not None + return self.distribution_analyzer.get_confidence() diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/mbcsgroupprober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/mbcsgroupprober.py new file mode 100644 index 0000000..6cb9cc7 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/mbcsgroupprober.py @@ -0,0 +1,57 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# Proofpoint, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .big5prober import Big5Prober +from .charsetgroupprober import CharSetGroupProber +from .cp949prober import CP949Prober +from .enums import LanguageFilter +from .eucjpprober import EUCJPProber +from .euckrprober import EUCKRProber +from .euctwprober import EUCTWProber +from .gb2312prober import GB2312Prober +from .johabprober import JOHABProber +from .sjisprober import SJISProber +from .utf8prober import UTF8Prober + + +class MBCSGroupProber(CharSetGroupProber): + def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None: + super().__init__(lang_filter=lang_filter) + self.probers = [ + UTF8Prober(), + SJISProber(), + EUCJPProber(), + GB2312Prober(), + EUCKRProber(), + CP949Prober(), + Big5Prober(), + EUCTWProber(), + JOHABProber(), + ] + self.reset() diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/mbcssm.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/mbcssm.py new file mode 100644 index 0000000..7bbe97e --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/mbcssm.py @@ -0,0 +1,661 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .codingstatemachinedict import CodingStateMachineDict +from .enums import MachineState + +# BIG5 + +# fmt: off +BIG5_CLS = ( + 1, 1, 1, 1, 1, 1, 1, 1, # 00 - 07 #allow 0x00 as legal value + 1, 1, 1, 1, 1, 1, 0, 0, # 08 - 0f + 1, 1, 1, 1, 1, 1, 1, 1, # 10 - 17 + 1, 1, 1, 0, 1, 1, 1, 1, # 18 - 1f + 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 27 + 1, 1, 1, 1, 1, 1, 1, 1, # 28 - 2f + 1, 1, 1, 1, 1, 1, 1, 1, # 30 - 37 + 1, 1, 1, 1, 1, 1, 1, 1, # 38 - 3f + 2, 2, 2, 2, 2, 2, 2, 2, # 40 - 47 + 2, 2, 2, 2, 2, 2, 2, 2, # 48 - 4f + 2, 2, 2, 2, 2, 2, 2, 2, # 50 - 57 + 2, 2, 2, 2, 2, 2, 2, 2, # 58 - 5f + 2, 2, 2, 2, 2, 2, 2, 2, # 60 - 67 + 2, 2, 2, 2, 2, 2, 2, 2, # 68 - 6f + 2, 2, 2, 2, 2, 2, 2, 2, # 70 - 77 + 2, 2, 2, 2, 2, 2, 2, 1, # 78 - 7f + 4, 4, 4, 4, 4, 4, 4, 4, # 80 - 87 + 4, 4, 4, 4, 4, 4, 4, 4, # 88 - 8f + 4, 4, 4, 4, 4, 4, 4, 4, # 90 - 97 + 4, 4, 4, 4, 4, 4, 4, 4, # 98 - 9f + 4, 3, 3, 3, 3, 3, 3, 3, # a0 - a7 + 3, 3, 3, 3, 3, 3, 3, 3, # a8 - af + 3, 3, 3, 3, 3, 3, 3, 3, # b0 - b7 + 3, 3, 3, 3, 3, 3, 3, 3, # b8 - bf + 3, 3, 3, 3, 3, 3, 3, 3, # c0 - c7 + 3, 3, 3, 3, 3, 3, 3, 3, # c8 - cf + 3, 3, 3, 3, 3, 3, 3, 3, # d0 - d7 + 3, 3, 3, 3, 3, 3, 3, 3, # d8 - df + 3, 3, 3, 3, 3, 3, 3, 3, # e0 - e7 + 3, 3, 3, 3, 3, 3, 3, 3, # e8 - ef + 3, 3, 3, 3, 3, 3, 3, 3, # f0 - f7 + 3, 3, 3, 3, 3, 3, 3, 0 # f8 - ff +) + +BIG5_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,#08-0f + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START#10-17 +) +# fmt: on + +BIG5_CHAR_LEN_TABLE = (0, 1, 1, 2, 0) + +BIG5_SM_MODEL: CodingStateMachineDict = { + "class_table": BIG5_CLS, + "class_factor": 5, + "state_table": BIG5_ST, + "char_len_table": BIG5_CHAR_LEN_TABLE, + "name": "Big5", +} + +# CP949 +# fmt: off +CP949_CLS = ( + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, # 00 - 0f + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, # 10 - 1f + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 2f + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, # 30 - 3f + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, # 40 - 4f + 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, # 50 - 5f + 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, # 60 - 6f + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, # 70 - 7f + 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, # 80 - 8f + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, # 90 - 9f + 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, # a0 - af + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, # b0 - bf + 7, 7, 7, 7, 7, 7, 9, 2, 2, 3, 2, 2, 2, 2, 2, 2, # c0 - cf + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, # d0 - df + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, # e0 - ef + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, # f0 - ff +) + +CP949_ST = ( +#cls= 0 1 2 3 4 5 6 7 8 9 # previous state = + MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START, 4, 5,MachineState.ERROR, 6, # MachineState.START + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, # MachineState.ERROR + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME, # MachineState.ITS_ME + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 3 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 4 + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 5 + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 6 +) +# fmt: on + +CP949_CHAR_LEN_TABLE = (0, 1, 2, 0, 1, 1, 2, 2, 0, 2) + +CP949_SM_MODEL: CodingStateMachineDict = { + "class_table": CP949_CLS, + "class_factor": 10, + "state_table": CP949_ST, + "char_len_table": CP949_CHAR_LEN_TABLE, + "name": "CP949", +} + +# EUC-JP +# fmt: off +EUCJP_CLS = ( + 4, 4, 4, 4, 4, 4, 4, 4, # 00 - 07 + 4, 4, 4, 4, 4, 4, 5, 5, # 08 - 0f + 4, 4, 4, 4, 4, 4, 4, 4, # 10 - 17 + 4, 4, 4, 5, 4, 4, 4, 4, # 18 - 1f + 4, 4, 4, 4, 4, 4, 4, 4, # 20 - 27 + 4, 4, 4, 4, 4, 4, 4, 4, # 28 - 2f + 4, 4, 4, 4, 4, 4, 4, 4, # 30 - 37 + 4, 4, 4, 4, 4, 4, 4, 4, # 38 - 3f + 4, 4, 4, 4, 4, 4, 4, 4, # 40 - 47 + 4, 4, 4, 4, 4, 4, 4, 4, # 48 - 4f + 4, 4, 4, 4, 4, 4, 4, 4, # 50 - 57 + 4, 4, 4, 4, 4, 4, 4, 4, # 58 - 5f + 4, 4, 4, 4, 4, 4, 4, 4, # 60 - 67 + 4, 4, 4, 4, 4, 4, 4, 4, # 68 - 6f + 4, 4, 4, 4, 4, 4, 4, 4, # 70 - 77 + 4, 4, 4, 4, 4, 4, 4, 4, # 78 - 7f + 5, 5, 5, 5, 5, 5, 5, 5, # 80 - 87 + 5, 5, 5, 5, 5, 5, 1, 3, # 88 - 8f + 5, 5, 5, 5, 5, 5, 5, 5, # 90 - 97 + 5, 5, 5, 5, 5, 5, 5, 5, # 98 - 9f + 5, 2, 2, 2, 2, 2, 2, 2, # a0 - a7 + 2, 2, 2, 2, 2, 2, 2, 2, # a8 - af + 2, 2, 2, 2, 2, 2, 2, 2, # b0 - b7 + 2, 2, 2, 2, 2, 2, 2, 2, # b8 - bf + 2, 2, 2, 2, 2, 2, 2, 2, # c0 - c7 + 2, 2, 2, 2, 2, 2, 2, 2, # c8 - cf + 2, 2, 2, 2, 2, 2, 2, 2, # d0 - d7 + 2, 2, 2, 2, 2, 2, 2, 2, # d8 - df + 0, 0, 0, 0, 0, 0, 0, 0, # e0 - e7 + 0, 0, 0, 0, 0, 0, 0, 0, # e8 - ef + 0, 0, 0, 0, 0, 0, 0, 0, # f0 - f7 + 0, 0, 0, 0, 0, 0, 0, 5 # f8 - ff +) + +EUCJP_ST = ( + 3, 4, 3, 5,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 3,MachineState.ERROR,#18-1f + 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START#20-27 +) +# fmt: on + +EUCJP_CHAR_LEN_TABLE = (2, 2, 2, 3, 1, 0) + +EUCJP_SM_MODEL: CodingStateMachineDict = { + "class_table": EUCJP_CLS, + "class_factor": 6, + "state_table": EUCJP_ST, + "char_len_table": EUCJP_CHAR_LEN_TABLE, + "name": "EUC-JP", +} + +# EUC-KR +# fmt: off +EUCKR_CLS = ( + 1, 1, 1, 1, 1, 1, 1, 1, # 00 - 07 + 1, 1, 1, 1, 1, 1, 0, 0, # 08 - 0f + 1, 1, 1, 1, 1, 1, 1, 1, # 10 - 17 + 1, 1, 1, 0, 1, 1, 1, 1, # 18 - 1f + 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 27 + 1, 1, 1, 1, 1, 1, 1, 1, # 28 - 2f + 1, 1, 1, 1, 1, 1, 1, 1, # 30 - 37 + 1, 1, 1, 1, 1, 1, 1, 1, # 38 - 3f + 1, 1, 1, 1, 1, 1, 1, 1, # 40 - 47 + 1, 1, 1, 1, 1, 1, 1, 1, # 48 - 4f + 1, 1, 1, 1, 1, 1, 1, 1, # 50 - 57 + 1, 1, 1, 1, 1, 1, 1, 1, # 58 - 5f + 1, 1, 1, 1, 1, 1, 1, 1, # 60 - 67 + 1, 1, 1, 1, 1, 1, 1, 1, # 68 - 6f + 1, 1, 1, 1, 1, 1, 1, 1, # 70 - 77 + 1, 1, 1, 1, 1, 1, 1, 1, # 78 - 7f + 0, 0, 0, 0, 0, 0, 0, 0, # 80 - 87 + 0, 0, 0, 0, 0, 0, 0, 0, # 88 - 8f + 0, 0, 0, 0, 0, 0, 0, 0, # 90 - 97 + 0, 0, 0, 0, 0, 0, 0, 0, # 98 - 9f + 0, 2, 2, 2, 2, 2, 2, 2, # a0 - a7 + 2, 2, 2, 2, 2, 3, 3, 3, # a8 - af + 2, 2, 2, 2, 2, 2, 2, 2, # b0 - b7 + 2, 2, 2, 2, 2, 2, 2, 2, # b8 - bf + 2, 2, 2, 2, 2, 2, 2, 2, # c0 - c7 + 2, 3, 2, 2, 2, 2, 2, 2, # c8 - cf + 2, 2, 2, 2, 2, 2, 2, 2, # d0 - d7 + 2, 2, 2, 2, 2, 2, 2, 2, # d8 - df + 2, 2, 2, 2, 2, 2, 2, 2, # e0 - e7 + 2, 2, 2, 2, 2, 2, 2, 2, # e8 - ef + 2, 2, 2, 2, 2, 2, 2, 2, # f0 - f7 + 2, 2, 2, 2, 2, 2, 2, 0 # f8 - ff +) + +EUCKR_ST = ( + MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #08-0f +) +# fmt: on + +EUCKR_CHAR_LEN_TABLE = (0, 1, 2, 0) + +EUCKR_SM_MODEL: CodingStateMachineDict = { + "class_table": EUCKR_CLS, + "class_factor": 4, + "state_table": EUCKR_ST, + "char_len_table": EUCKR_CHAR_LEN_TABLE, + "name": "EUC-KR", +} + +# JOHAB +# fmt: off +JOHAB_CLS = ( + 4,4,4,4,4,4,4,4, # 00 - 07 + 4,4,4,4,4,4,0,0, # 08 - 0f + 4,4,4,4,4,4,4,4, # 10 - 17 + 4,4,4,0,4,4,4,4, # 18 - 1f + 4,4,4,4,4,4,4,4, # 20 - 27 + 4,4,4,4,4,4,4,4, # 28 - 2f + 4,3,3,3,3,3,3,3, # 30 - 37 + 3,3,3,3,3,3,3,3, # 38 - 3f + 3,1,1,1,1,1,1,1, # 40 - 47 + 1,1,1,1,1,1,1,1, # 48 - 4f + 1,1,1,1,1,1,1,1, # 50 - 57 + 1,1,1,1,1,1,1,1, # 58 - 5f + 1,1,1,1,1,1,1,1, # 60 - 67 + 1,1,1,1,1,1,1,1, # 68 - 6f + 1,1,1,1,1,1,1,1, # 70 - 77 + 1,1,1,1,1,1,1,2, # 78 - 7f + 6,6,6,6,8,8,8,8, # 80 - 87 + 8,8,8,8,8,8,8,8, # 88 - 8f + 8,7,7,7,7,7,7,7, # 90 - 97 + 7,7,7,7,7,7,7,7, # 98 - 9f + 7,7,7,7,7,7,7,7, # a0 - a7 + 7,7,7,7,7,7,7,7, # a8 - af + 7,7,7,7,7,7,7,7, # b0 - b7 + 7,7,7,7,7,7,7,7, # b8 - bf + 7,7,7,7,7,7,7,7, # c0 - c7 + 7,7,7,7,7,7,7,7, # c8 - cf + 7,7,7,7,5,5,5,5, # d0 - d7 + 5,9,9,9,9,9,9,5, # d8 - df + 9,9,9,9,9,9,9,9, # e0 - e7 + 9,9,9,9,9,9,9,9, # e8 - ef + 9,9,9,9,9,9,9,9, # f0 - f7 + 9,9,5,5,5,5,5,0 # f8 - ff +) + +JOHAB_ST = ( +# cls = 0 1 2 3 4 5 6 7 8 9 + MachineState.ERROR ,MachineState.START ,MachineState.START ,MachineState.START ,MachineState.START ,MachineState.ERROR ,MachineState.ERROR ,3 ,3 ,4 , # MachineState.START + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME, # MachineState.ITS_ME + MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR , # MachineState.ERROR + MachineState.ERROR ,MachineState.START ,MachineState.START ,MachineState.ERROR ,MachineState.ERROR ,MachineState.START ,MachineState.START ,MachineState.START ,MachineState.START ,MachineState.START , # 3 + MachineState.ERROR ,MachineState.START ,MachineState.ERROR ,MachineState.START ,MachineState.ERROR ,MachineState.START ,MachineState.ERROR ,MachineState.START ,MachineState.ERROR ,MachineState.START , # 4 +) +# fmt: on + +JOHAB_CHAR_LEN_TABLE = (0, 1, 1, 1, 1, 0, 0, 2, 2, 2) + +JOHAB_SM_MODEL: CodingStateMachineDict = { + "class_table": JOHAB_CLS, + "class_factor": 10, + "state_table": JOHAB_ST, + "char_len_table": JOHAB_CHAR_LEN_TABLE, + "name": "Johab", +} + +# EUC-TW +# fmt: off +EUCTW_CLS = ( + 2, 2, 2, 2, 2, 2, 2, 2, # 00 - 07 + 2, 2, 2, 2, 2, 2, 0, 0, # 08 - 0f + 2, 2, 2, 2, 2, 2, 2, 2, # 10 - 17 + 2, 2, 2, 0, 2, 2, 2, 2, # 18 - 1f + 2, 2, 2, 2, 2, 2, 2, 2, # 20 - 27 + 2, 2, 2, 2, 2, 2, 2, 2, # 28 - 2f + 2, 2, 2, 2, 2, 2, 2, 2, # 30 - 37 + 2, 2, 2, 2, 2, 2, 2, 2, # 38 - 3f + 2, 2, 2, 2, 2, 2, 2, 2, # 40 - 47 + 2, 2, 2, 2, 2, 2, 2, 2, # 48 - 4f + 2, 2, 2, 2, 2, 2, 2, 2, # 50 - 57 + 2, 2, 2, 2, 2, 2, 2, 2, # 58 - 5f + 2, 2, 2, 2, 2, 2, 2, 2, # 60 - 67 + 2, 2, 2, 2, 2, 2, 2, 2, # 68 - 6f + 2, 2, 2, 2, 2, 2, 2, 2, # 70 - 77 + 2, 2, 2, 2, 2, 2, 2, 2, # 78 - 7f + 0, 0, 0, 0, 0, 0, 0, 0, # 80 - 87 + 0, 0, 0, 0, 0, 0, 6, 0, # 88 - 8f + 0, 0, 0, 0, 0, 0, 0, 0, # 90 - 97 + 0, 0, 0, 0, 0, 0, 0, 0, # 98 - 9f + 0, 3, 4, 4, 4, 4, 4, 4, # a0 - a7 + 5, 5, 1, 1, 1, 1, 1, 1, # a8 - af + 1, 1, 1, 1, 1, 1, 1, 1, # b0 - b7 + 1, 1, 1, 1, 1, 1, 1, 1, # b8 - bf + 1, 1, 3, 1, 3, 3, 3, 3, # c0 - c7 + 3, 3, 3, 3, 3, 3, 3, 3, # c8 - cf + 3, 3, 3, 3, 3, 3, 3, 3, # d0 - d7 + 3, 3, 3, 3, 3, 3, 3, 3, # d8 - df + 3, 3, 3, 3, 3, 3, 3, 3, # e0 - e7 + 3, 3, 3, 3, 3, 3, 3, 3, # e8 - ef + 3, 3, 3, 3, 3, 3, 3, 3, # f0 - f7 + 3, 3, 3, 3, 3, 3, 3, 0 # f8 - ff +) + +EUCTW_ST = ( + MachineState.ERROR,MachineState.ERROR,MachineState.START, 3, 3, 3, 4,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.ERROR,#10-17 + MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,#20-27 + MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f +) +# fmt: on + +EUCTW_CHAR_LEN_TABLE = (0, 0, 1, 2, 2, 2, 3) + +EUCTW_SM_MODEL: CodingStateMachineDict = { + "class_table": EUCTW_CLS, + "class_factor": 7, + "state_table": EUCTW_ST, + "char_len_table": EUCTW_CHAR_LEN_TABLE, + "name": "x-euc-tw", +} + +# GB2312 +# fmt: off +GB2312_CLS = ( + 1, 1, 1, 1, 1, 1, 1, 1, # 00 - 07 + 1, 1, 1, 1, 1, 1, 0, 0, # 08 - 0f + 1, 1, 1, 1, 1, 1, 1, 1, # 10 - 17 + 1, 1, 1, 0, 1, 1, 1, 1, # 18 - 1f + 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 27 + 1, 1, 1, 1, 1, 1, 1, 1, # 28 - 2f + 3, 3, 3, 3, 3, 3, 3, 3, # 30 - 37 + 3, 3, 1, 1, 1, 1, 1, 1, # 38 - 3f + 2, 2, 2, 2, 2, 2, 2, 2, # 40 - 47 + 2, 2, 2, 2, 2, 2, 2, 2, # 48 - 4f + 2, 2, 2, 2, 2, 2, 2, 2, # 50 - 57 + 2, 2, 2, 2, 2, 2, 2, 2, # 58 - 5f + 2, 2, 2, 2, 2, 2, 2, 2, # 60 - 67 + 2, 2, 2, 2, 2, 2, 2, 2, # 68 - 6f + 2, 2, 2, 2, 2, 2, 2, 2, # 70 - 77 + 2, 2, 2, 2, 2, 2, 2, 4, # 78 - 7f + 5, 6, 6, 6, 6, 6, 6, 6, # 80 - 87 + 6, 6, 6, 6, 6, 6, 6, 6, # 88 - 8f + 6, 6, 6, 6, 6, 6, 6, 6, # 90 - 97 + 6, 6, 6, 6, 6, 6, 6, 6, # 98 - 9f + 6, 6, 6, 6, 6, 6, 6, 6, # a0 - a7 + 6, 6, 6, 6, 6, 6, 6, 6, # a8 - af + 6, 6, 6, 6, 6, 6, 6, 6, # b0 - b7 + 6, 6, 6, 6, 6, 6, 6, 6, # b8 - bf + 6, 6, 6, 6, 6, 6, 6, 6, # c0 - c7 + 6, 6, 6, 6, 6, 6, 6, 6, # c8 - cf + 6, 6, 6, 6, 6, 6, 6, 6, # d0 - d7 + 6, 6, 6, 6, 6, 6, 6, 6, # d8 - df + 6, 6, 6, 6, 6, 6, 6, 6, # e0 - e7 + 6, 6, 6, 6, 6, 6, 6, 6, # e8 - ef + 6, 6, 6, 6, 6, 6, 6, 6, # f0 - f7 + 6, 6, 6, 6, 6, 6, 6, 0 # f8 - ff +) + +GB2312_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, 3,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,#10-17 + 4,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#20-27 + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f +) +# fmt: on + +# To be accurate, the length of class 6 can be either 2 or 4. +# But it is not necessary to discriminate between the two since +# it is used for frequency analysis only, and we are validating +# each code range there as well. So it is safe to set it to be +# 2 here. +GB2312_CHAR_LEN_TABLE = (0, 1, 1, 1, 1, 1, 2) + +GB2312_SM_MODEL: CodingStateMachineDict = { + "class_table": GB2312_CLS, + "class_factor": 7, + "state_table": GB2312_ST, + "char_len_table": GB2312_CHAR_LEN_TABLE, + "name": "GB2312", +} + +# Shift_JIS +# fmt: off +SJIS_CLS = ( + 1, 1, 1, 1, 1, 1, 1, 1, # 00 - 07 + 1, 1, 1, 1, 1, 1, 0, 0, # 08 - 0f + 1, 1, 1, 1, 1, 1, 1, 1, # 10 - 17 + 1, 1, 1, 0, 1, 1, 1, 1, # 18 - 1f + 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 27 + 1, 1, 1, 1, 1, 1, 1, 1, # 28 - 2f + 1, 1, 1, 1, 1, 1, 1, 1, # 30 - 37 + 1, 1, 1, 1, 1, 1, 1, 1, # 38 - 3f + 2, 2, 2, 2, 2, 2, 2, 2, # 40 - 47 + 2, 2, 2, 2, 2, 2, 2, 2, # 48 - 4f + 2, 2, 2, 2, 2, 2, 2, 2, # 50 - 57 + 2, 2, 2, 2, 2, 2, 2, 2, # 58 - 5f + 2, 2, 2, 2, 2, 2, 2, 2, # 60 - 67 + 2, 2, 2, 2, 2, 2, 2, 2, # 68 - 6f + 2, 2, 2, 2, 2, 2, 2, 2, # 70 - 77 + 2, 2, 2, 2, 2, 2, 2, 1, # 78 - 7f + 3, 3, 3, 3, 3, 2, 2, 3, # 80 - 87 + 3, 3, 3, 3, 3, 3, 3, 3, # 88 - 8f + 3, 3, 3, 3, 3, 3, 3, 3, # 90 - 97 + 3, 3, 3, 3, 3, 3, 3, 3, # 98 - 9f + #0xa0 is illegal in sjis encoding, but some pages does + #contain such byte. We need to be more error forgiven. + 2, 2, 2, 2, 2, 2, 2, 2, # a0 - a7 + 2, 2, 2, 2, 2, 2, 2, 2, # a8 - af + 2, 2, 2, 2, 2, 2, 2, 2, # b0 - b7 + 2, 2, 2, 2, 2, 2, 2, 2, # b8 - bf + 2, 2, 2, 2, 2, 2, 2, 2, # c0 - c7 + 2, 2, 2, 2, 2, 2, 2, 2, # c8 - cf + 2, 2, 2, 2, 2, 2, 2, 2, # d0 - d7 + 2, 2, 2, 2, 2, 2, 2, 2, # d8 - df + 3, 3, 3, 3, 3, 3, 3, 3, # e0 - e7 + 3, 3, 3, 3, 3, 4, 4, 4, # e8 - ef + 3, 3, 3, 3, 3, 3, 3, 3, # f0 - f7 + 3, 3, 3, 3, 3, 0, 0, 0, # f8 - ff +) + +SJIS_ST = ( + MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START #10-17 +) +# fmt: on + +SJIS_CHAR_LEN_TABLE = (0, 1, 1, 2, 0, 0) + +SJIS_SM_MODEL: CodingStateMachineDict = { + "class_table": SJIS_CLS, + "class_factor": 6, + "state_table": SJIS_ST, + "char_len_table": SJIS_CHAR_LEN_TABLE, + "name": "Shift_JIS", +} + +# UCS2-BE +# fmt: off +UCS2BE_CLS = ( + 0, 0, 0, 0, 0, 0, 0, 0, # 00 - 07 + 0, 0, 1, 0, 0, 2, 0, 0, # 08 - 0f + 0, 0, 0, 0, 0, 0, 0, 0, # 10 - 17 + 0, 0, 0, 3, 0, 0, 0, 0, # 18 - 1f + 0, 0, 0, 0, 0, 0, 0, 0, # 20 - 27 + 0, 3, 3, 3, 3, 3, 0, 0, # 28 - 2f + 0, 0, 0, 0, 0, 0, 0, 0, # 30 - 37 + 0, 0, 0, 0, 0, 0, 0, 0, # 38 - 3f + 0, 0, 0, 0, 0, 0, 0, 0, # 40 - 47 + 0, 0, 0, 0, 0, 0, 0, 0, # 48 - 4f + 0, 0, 0, 0, 0, 0, 0, 0, # 50 - 57 + 0, 0, 0, 0, 0, 0, 0, 0, # 58 - 5f + 0, 0, 0, 0, 0, 0, 0, 0, # 60 - 67 + 0, 0, 0, 0, 0, 0, 0, 0, # 68 - 6f + 0, 0, 0, 0, 0, 0, 0, 0, # 70 - 77 + 0, 0, 0, 0, 0, 0, 0, 0, # 78 - 7f + 0, 0, 0, 0, 0, 0, 0, 0, # 80 - 87 + 0, 0, 0, 0, 0, 0, 0, 0, # 88 - 8f + 0, 0, 0, 0, 0, 0, 0, 0, # 90 - 97 + 0, 0, 0, 0, 0, 0, 0, 0, # 98 - 9f + 0, 0, 0, 0, 0, 0, 0, 0, # a0 - a7 + 0, 0, 0, 0, 0, 0, 0, 0, # a8 - af + 0, 0, 0, 0, 0, 0, 0, 0, # b0 - b7 + 0, 0, 0, 0, 0, 0, 0, 0, # b8 - bf + 0, 0, 0, 0, 0, 0, 0, 0, # c0 - c7 + 0, 0, 0, 0, 0, 0, 0, 0, # c8 - cf + 0, 0, 0, 0, 0, 0, 0, 0, # d0 - d7 + 0, 0, 0, 0, 0, 0, 0, 0, # d8 - df + 0, 0, 0, 0, 0, 0, 0, 0, # e0 - e7 + 0, 0, 0, 0, 0, 0, 0, 0, # e8 - ef + 0, 0, 0, 0, 0, 0, 0, 0, # f0 - f7 + 0, 0, 0, 0, 0, 0, 4, 5 # f8 - ff +) + +UCS2BE_ST = ( + 5, 7, 7,MachineState.ERROR, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME, 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,#10-17 + 6, 6, 6, 6, 6,MachineState.ITS_ME, 6, 6,#18-1f + 6, 6, 6, 6, 5, 7, 7,MachineState.ERROR,#20-27 + 5, 8, 6, 6,MachineState.ERROR, 6, 6, 6,#28-2f + 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #30-37 +) +# fmt: on + +UCS2BE_CHAR_LEN_TABLE = (2, 2, 2, 0, 2, 2) + +UCS2BE_SM_MODEL: CodingStateMachineDict = { + "class_table": UCS2BE_CLS, + "class_factor": 6, + "state_table": UCS2BE_ST, + "char_len_table": UCS2BE_CHAR_LEN_TABLE, + "name": "UTF-16BE", +} + +# UCS2-LE +# fmt: off +UCS2LE_CLS = ( + 0, 0, 0, 0, 0, 0, 0, 0, # 00 - 07 + 0, 0, 1, 0, 0, 2, 0, 0, # 08 - 0f + 0, 0, 0, 0, 0, 0, 0, 0, # 10 - 17 + 0, 0, 0, 3, 0, 0, 0, 0, # 18 - 1f + 0, 0, 0, 0, 0, 0, 0, 0, # 20 - 27 + 0, 3, 3, 3, 3, 3, 0, 0, # 28 - 2f + 0, 0, 0, 0, 0, 0, 0, 0, # 30 - 37 + 0, 0, 0, 0, 0, 0, 0, 0, # 38 - 3f + 0, 0, 0, 0, 0, 0, 0, 0, # 40 - 47 + 0, 0, 0, 0, 0, 0, 0, 0, # 48 - 4f + 0, 0, 0, 0, 0, 0, 0, 0, # 50 - 57 + 0, 0, 0, 0, 0, 0, 0, 0, # 58 - 5f + 0, 0, 0, 0, 0, 0, 0, 0, # 60 - 67 + 0, 0, 0, 0, 0, 0, 0, 0, # 68 - 6f + 0, 0, 0, 0, 0, 0, 0, 0, # 70 - 77 + 0, 0, 0, 0, 0, 0, 0, 0, # 78 - 7f + 0, 0, 0, 0, 0, 0, 0, 0, # 80 - 87 + 0, 0, 0, 0, 0, 0, 0, 0, # 88 - 8f + 0, 0, 0, 0, 0, 0, 0, 0, # 90 - 97 + 0, 0, 0, 0, 0, 0, 0, 0, # 98 - 9f + 0, 0, 0, 0, 0, 0, 0, 0, # a0 - a7 + 0, 0, 0, 0, 0, 0, 0, 0, # a8 - af + 0, 0, 0, 0, 0, 0, 0, 0, # b0 - b7 + 0, 0, 0, 0, 0, 0, 0, 0, # b8 - bf + 0, 0, 0, 0, 0, 0, 0, 0, # c0 - c7 + 0, 0, 0, 0, 0, 0, 0, 0, # c8 - cf + 0, 0, 0, 0, 0, 0, 0, 0, # d0 - d7 + 0, 0, 0, 0, 0, 0, 0, 0, # d8 - df + 0, 0, 0, 0, 0, 0, 0, 0, # e0 - e7 + 0, 0, 0, 0, 0, 0, 0, 0, # e8 - ef + 0, 0, 0, 0, 0, 0, 0, 0, # f0 - f7 + 0, 0, 0, 0, 0, 0, 4, 5 # f8 - ff +) + +UCS2LE_ST = ( + 6, 6, 7, 6, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f + MachineState.ITS_ME,MachineState.ITS_ME, 5, 5, 5,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#10-17 + 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR, 6, 6,#18-1f + 7, 6, 8, 8, 5, 5, 5,MachineState.ERROR,#20-27 + 5, 5, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5,#28-2f + 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR,MachineState.START,MachineState.START #30-37 +) +# fmt: on + +UCS2LE_CHAR_LEN_TABLE = (2, 2, 2, 2, 2, 2) + +UCS2LE_SM_MODEL: CodingStateMachineDict = { + "class_table": UCS2LE_CLS, + "class_factor": 6, + "state_table": UCS2LE_ST, + "char_len_table": UCS2LE_CHAR_LEN_TABLE, + "name": "UTF-16LE", +} + +# UTF-8 +# fmt: off +UTF8_CLS = ( + 1, 1, 1, 1, 1, 1, 1, 1, # 00 - 07 #allow 0x00 as a legal value + 1, 1, 1, 1, 1, 1, 0, 0, # 08 - 0f + 1, 1, 1, 1, 1, 1, 1, 1, # 10 - 17 + 1, 1, 1, 0, 1, 1, 1, 1, # 18 - 1f + 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 27 + 1, 1, 1, 1, 1, 1, 1, 1, # 28 - 2f + 1, 1, 1, 1, 1, 1, 1, 1, # 30 - 37 + 1, 1, 1, 1, 1, 1, 1, 1, # 38 - 3f + 1, 1, 1, 1, 1, 1, 1, 1, # 40 - 47 + 1, 1, 1, 1, 1, 1, 1, 1, # 48 - 4f + 1, 1, 1, 1, 1, 1, 1, 1, # 50 - 57 + 1, 1, 1, 1, 1, 1, 1, 1, # 58 - 5f + 1, 1, 1, 1, 1, 1, 1, 1, # 60 - 67 + 1, 1, 1, 1, 1, 1, 1, 1, # 68 - 6f + 1, 1, 1, 1, 1, 1, 1, 1, # 70 - 77 + 1, 1, 1, 1, 1, 1, 1, 1, # 78 - 7f + 2, 2, 2, 2, 3, 3, 3, 3, # 80 - 87 + 4, 4, 4, 4, 4, 4, 4, 4, # 88 - 8f + 4, 4, 4, 4, 4, 4, 4, 4, # 90 - 97 + 4, 4, 4, 4, 4, 4, 4, 4, # 98 - 9f + 5, 5, 5, 5, 5, 5, 5, 5, # a0 - a7 + 5, 5, 5, 5, 5, 5, 5, 5, # a8 - af + 5, 5, 5, 5, 5, 5, 5, 5, # b0 - b7 + 5, 5, 5, 5, 5, 5, 5, 5, # b8 - bf + 0, 0, 6, 6, 6, 6, 6, 6, # c0 - c7 + 6, 6, 6, 6, 6, 6, 6, 6, # c8 - cf + 6, 6, 6, 6, 6, 6, 6, 6, # d0 - d7 + 6, 6, 6, 6, 6, 6, 6, 6, # d8 - df + 7, 8, 8, 8, 8, 8, 8, 8, # e0 - e7 + 8, 8, 8, 8, 8, 9, 8, 8, # e8 - ef + 10, 11, 11, 11, 11, 11, 11, 11, # f0 - f7 + 12, 13, 13, 13, 14, 15, 0, 0 # f8 - ff +) + +UTF8_ST = ( + MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12, 10,#00-07 + 9, 11, 8, 7, 6, 5, 4, 3,#08-0f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#20-27 + MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#28-2f + MachineState.ERROR,MachineState.ERROR, 5, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#30-37 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#38-3f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#40-47 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#48-4f + MachineState.ERROR,MachineState.ERROR, 7, 7, 7, 7,MachineState.ERROR,MachineState.ERROR,#50-57 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#58-5f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 7, 7,MachineState.ERROR,MachineState.ERROR,#60-67 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#68-6f + MachineState.ERROR,MachineState.ERROR, 9, 9, 9, 9,MachineState.ERROR,MachineState.ERROR,#70-77 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#78-7f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 9,MachineState.ERROR,MachineState.ERROR,#80-87 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#88-8f + MachineState.ERROR,MachineState.ERROR, 12, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,#90-97 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#98-9f + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12,MachineState.ERROR,MachineState.ERROR,#a0-a7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#a8-af + MachineState.ERROR,MachineState.ERROR, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b0-b7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b8-bf + MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,#c0-c7 + MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR #c8-cf +) +# fmt: on + +UTF8_CHAR_LEN_TABLE = (0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6) + +UTF8_SM_MODEL: CodingStateMachineDict = { + "class_table": UTF8_CLS, + "class_factor": 16, + "state_table": UTF8_ST, + "char_len_table": UTF8_CHAR_LEN_TABLE, + "name": "UTF-8", +} diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/metadata/__init__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/metadata/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/metadata/languages.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/metadata/languages.py new file mode 100644 index 0000000..eb40c5f --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/metadata/languages.py @@ -0,0 +1,352 @@ +""" +Metadata about languages used by our model training code for our +SingleByteCharSetProbers. Could be used for other things in the future. + +This code is based on the language metadata from the uchardet project. +""" + +from string import ascii_letters +from typing import List, Optional + +# TODO: Add Ukrainian (KOI8-U) + + +class Language: + """Metadata about a language useful for training models + + :ivar name: The human name for the language, in English. + :type name: str + :ivar iso_code: 2-letter ISO 639-1 if possible, 3-letter ISO code otherwise, + or use another catalog as a last resort. + :type iso_code: str + :ivar use_ascii: Whether or not ASCII letters should be included in trained + models. + :type use_ascii: bool + :ivar charsets: The charsets we want to support and create data for. + :type charsets: list of str + :ivar alphabet: The characters in the language's alphabet. If `use_ascii` is + `True`, you only need to add those not in the ASCII set. + :type alphabet: str + :ivar wiki_start_pages: The Wikipedia pages to start from if we're crawling + Wikipedia for training data. + :type wiki_start_pages: list of str + """ + + def __init__( + self, + name: Optional[str] = None, + iso_code: Optional[str] = None, + use_ascii: bool = True, + charsets: Optional[List[str]] = None, + alphabet: Optional[str] = None, + wiki_start_pages: Optional[List[str]] = None, + ) -> None: + super().__init__() + self.name = name + self.iso_code = iso_code + self.use_ascii = use_ascii + self.charsets = charsets + if self.use_ascii: + if alphabet: + alphabet += ascii_letters + else: + alphabet = ascii_letters + elif not alphabet: + raise ValueError("Must supply alphabet if use_ascii is False") + self.alphabet = "".join(sorted(set(alphabet))) if alphabet else None + self.wiki_start_pages = wiki_start_pages + + def __repr__(self) -> str: + param_str = ", ".join( + f"{k}={v!r}" for k, v in self.__dict__.items() if not k.startswith("_") + ) + return f"{self.__class__.__name__}({param_str})" + + +LANGUAGES = { + "Arabic": Language( + name="Arabic", + iso_code="ar", + use_ascii=False, + # We only support encodings that use isolated + # forms, because the current recommendation is + # that the rendering system handles presentation + # forms. This means we purposefully skip IBM864. + charsets=["ISO-8859-6", "WINDOWS-1256", "CP720", "CP864"], + alphabet="ءآأؤإئابةتثجحخدذرزسشصضطظعغػؼؽؾؿـفقكلمنهوىيًٌٍَُِّ", + wiki_start_pages=["الصفحة_الرئيسية"], + ), + "Belarusian": Language( + name="Belarusian", + iso_code="be", + use_ascii=False, + charsets=["ISO-8859-5", "WINDOWS-1251", "IBM866", "MacCyrillic"], + alphabet="АБВГДЕЁЖЗІЙКЛМНОПРСТУЎФХЦЧШЫЬЭЮЯабвгдеёжзійклмнопрстуўфхцчшыьэюяʼ", + wiki_start_pages=["Галоўная_старонка"], + ), + "Bulgarian": Language( + name="Bulgarian", + iso_code="bg", + use_ascii=False, + charsets=["ISO-8859-5", "WINDOWS-1251", "IBM855"], + alphabet="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯабвгдежзийклмнопрстуфхцчшщъьюя", + wiki_start_pages=["Начална_страница"], + ), + "Czech": Language( + name="Czech", + iso_code="cz", + use_ascii=True, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="áčďéěíňóřšťúůýžÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ", + wiki_start_pages=["Hlavní_strana"], + ), + "Danish": Language( + name="Danish", + iso_code="da", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="æøåÆØÅ", + wiki_start_pages=["Forside"], + ), + "German": Language( + name="German", + iso_code="de", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="äöüßẞÄÖÜ", + wiki_start_pages=["Wikipedia:Hauptseite"], + ), + "Greek": Language( + name="Greek", + iso_code="el", + use_ascii=False, + charsets=["ISO-8859-7", "WINDOWS-1253"], + alphabet="αβγδεζηθικλμνξοπρσςτυφχψωάέήίόύώΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΣΤΥΦΧΨΩΆΈΉΊΌΎΏ", + wiki_start_pages=["Πύλη:Κύρια"], + ), + "English": Language( + name="English", + iso_code="en", + use_ascii=True, + charsets=["ISO-8859-1", "WINDOWS-1252", "MacRoman"], + wiki_start_pages=["Main_Page"], + ), + "Esperanto": Language( + name="Esperanto", + iso_code="eo", + # Q, W, X, and Y not used at all + use_ascii=False, + charsets=["ISO-8859-3"], + alphabet="abcĉdefgĝhĥijĵklmnoprsŝtuŭvzABCĈDEFGĜHĤIJĴKLMNOPRSŜTUŬVZ", + wiki_start_pages=["Vikipedio:Ĉefpaĝo"], + ), + "Spanish": Language( + name="Spanish", + iso_code="es", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="ñáéíóúüÑÁÉÍÓÚÜ", + wiki_start_pages=["Wikipedia:Portada"], + ), + "Estonian": Language( + name="Estonian", + iso_code="et", + use_ascii=False, + charsets=["ISO-8859-4", "ISO-8859-13", "WINDOWS-1257"], + # C, F, Š, Q, W, X, Y, Z, Ž are only for + # loanwords + alphabet="ABDEGHIJKLMNOPRSTUVÕÄÖÜabdeghijklmnoprstuvõäöü", + wiki_start_pages=["Esileht"], + ), + "Finnish": Language( + name="Finnish", + iso_code="fi", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="ÅÄÖŠŽåäöšž", + wiki_start_pages=["Wikipedia:Etusivu"], + ), + "French": Language( + name="French", + iso_code="fr", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="œàâçèéîïùûêŒÀÂÇÈÉÎÏÙÛÊ", + wiki_start_pages=["Wikipédia:Accueil_principal", "Bœuf (animal)"], + ), + "Hebrew": Language( + name="Hebrew", + iso_code="he", + use_ascii=False, + charsets=["ISO-8859-8", "WINDOWS-1255"], + alphabet="אבגדהוזחטיךכלםמןנסעףפץצקרשתװױײ", + wiki_start_pages=["עמוד_ראשי"], + ), + "Croatian": Language( + name="Croatian", + iso_code="hr", + # Q, W, X, Y are only used for foreign words. + use_ascii=False, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="abcčćdđefghijklmnoprsštuvzžABCČĆDĐEFGHIJKLMNOPRSŠTUVZŽ", + wiki_start_pages=["Glavna_stranica"], + ), + "Hungarian": Language( + name="Hungarian", + iso_code="hu", + # Q, W, X, Y are only used for foreign words. + use_ascii=False, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="abcdefghijklmnoprstuvzáéíóöőúüűABCDEFGHIJKLMNOPRSTUVZÁÉÍÓÖŐÚÜŰ", + wiki_start_pages=["Kezdőlap"], + ), + "Italian": Language( + name="Italian", + iso_code="it", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="ÀÈÉÌÒÓÙàèéìòóù", + wiki_start_pages=["Pagina_principale"], + ), + "Lithuanian": Language( + name="Lithuanian", + iso_code="lt", + use_ascii=False, + charsets=["ISO-8859-13", "WINDOWS-1257", "ISO-8859-4"], + # Q, W, and X not used at all + alphabet="AĄBCČDEĘĖFGHIĮYJKLMNOPRSŠTUŲŪVZŽaąbcčdeęėfghiįyjklmnoprsštuųūvzž", + wiki_start_pages=["Pagrindinis_puslapis"], + ), + "Latvian": Language( + name="Latvian", + iso_code="lv", + use_ascii=False, + charsets=["ISO-8859-13", "WINDOWS-1257", "ISO-8859-4"], + # Q, W, X, Y are only for loanwords + alphabet="AĀBCČDEĒFGĢHIĪJKĶLĻMNŅOPRSŠTUŪVZŽaābcčdeēfgģhiījkķlļmnņoprsštuūvzž", + wiki_start_pages=["Sākumlapa"], + ), + "Macedonian": Language( + name="Macedonian", + iso_code="mk", + use_ascii=False, + charsets=["ISO-8859-5", "WINDOWS-1251", "MacCyrillic", "IBM855"], + alphabet="АБВГДЃЕЖЗЅИЈКЛЉМНЊОПРСТЌУФХЦЧЏШабвгдѓежзѕијклљмнњопрстќуфхцчџш", + wiki_start_pages=["Главна_страница"], + ), + "Dutch": Language( + name="Dutch", + iso_code="nl", + use_ascii=True, + charsets=["ISO-8859-1", "WINDOWS-1252", "MacRoman"], + wiki_start_pages=["Hoofdpagina"], + ), + "Polish": Language( + name="Polish", + iso_code="pl", + # Q and X are only used for foreign words. + use_ascii=False, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻaąbcćdeęfghijklłmnńoóprsśtuwyzźż", + wiki_start_pages=["Wikipedia:Strona_główna"], + ), + "Portuguese": Language( + name="Portuguese", + iso_code="pt", + use_ascii=True, + charsets=["ISO-8859-1", "ISO-8859-15", "WINDOWS-1252", "MacRoman"], + alphabet="ÁÂÃÀÇÉÊÍÓÔÕÚáâãàçéêíóôõú", + wiki_start_pages=["Wikipédia:Página_principal"], + ), + "Romanian": Language( + name="Romanian", + iso_code="ro", + use_ascii=True, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="ăâîșțĂÂÎȘȚ", + wiki_start_pages=["Pagina_principală"], + ), + "Russian": Language( + name="Russian", + iso_code="ru", + use_ascii=False, + charsets=[ + "ISO-8859-5", + "WINDOWS-1251", + "KOI8-R", + "MacCyrillic", + "IBM866", + "IBM855", + ], + alphabet="абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ", + wiki_start_pages=["Заглавная_страница"], + ), + "Slovak": Language( + name="Slovak", + iso_code="sk", + use_ascii=True, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="áäčďéíĺľňóôŕšťúýžÁÄČĎÉÍĹĽŇÓÔŔŠŤÚÝŽ", + wiki_start_pages=["Hlavná_stránka"], + ), + "Slovene": Language( + name="Slovene", + iso_code="sl", + # Q, W, X, Y are only used for foreign words. + use_ascii=False, + charsets=["ISO-8859-2", "WINDOWS-1250"], + alphabet="abcčdefghijklmnoprsštuvzžABCČDEFGHIJKLMNOPRSŠTUVZŽ", + wiki_start_pages=["Glavna_stran"], + ), + # Serbian can be written in both Latin and Cyrillic, but there's no + # simple way to get the Latin alphabet pages from Wikipedia through + # the API, so for now we just support Cyrillic. + "Serbian": Language( + name="Serbian", + iso_code="sr", + alphabet="АБВГДЂЕЖЗИЈКЛЉМНЊОПРСТЋУФХЦЧЏШабвгдђежзијклљмнњопрстћуфхцчџш", + charsets=["ISO-8859-5", "WINDOWS-1251", "MacCyrillic", "IBM855"], + wiki_start_pages=["Главна_страна"], + ), + "Thai": Language( + name="Thai", + iso_code="th", + use_ascii=False, + charsets=["ISO-8859-11", "TIS-620", "CP874"], + alphabet="กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛", + wiki_start_pages=["หน้าหลัก"], + ), + "Turkish": Language( + name="Turkish", + iso_code="tr", + # Q, W, and X are not used by Turkish + use_ascii=False, + charsets=["ISO-8859-3", "ISO-8859-9", "WINDOWS-1254"], + alphabet="abcçdefgğhıijklmnoöprsştuüvyzâîûABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZÂÎÛ", + wiki_start_pages=["Ana_Sayfa"], + ), + "Vietnamese": Language( + name="Vietnamese", + iso_code="vi", + use_ascii=False, + # Windows-1258 is the only common 8-bit + # Vietnamese encoding supported by Python. + # From Wikipedia: + # For systems that lack support for Unicode, + # dozens of 8-bit Vietnamese code pages are + # available.[1] The most common are VISCII + # (TCVN 5712:1993), VPS, and Windows-1258.[3] + # Where ASCII is required, such as when + # ensuring readability in plain text e-mail, + # Vietnamese letters are often encoded + # according to Vietnamese Quoted-Readable + # (VIQR) or VSCII Mnemonic (VSCII-MNEM),[4] + # though usage of either variable-width + # scheme has declined dramatically following + # the adoption of Unicode on the World Wide + # Web. + charsets=["WINDOWS-1258"], + alphabet="aăâbcdđeêghiklmnoôơpqrstuưvxyAĂÂBCDĐEÊGHIKLMNOÔƠPQRSTUƯVXY", + wiki_start_pages=["Chữ_Quốc_ngữ"], + ), +} diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/py.typed b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/resultdict.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/resultdict.py new file mode 100644 index 0000000..7d36e64 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/resultdict.py @@ -0,0 +1,16 @@ +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + # TypedDict was introduced in Python 3.8. + # + # TODO: Remove the else block and TYPE_CHECKING check when dropping support + # for Python 3.7. + from typing import TypedDict + + class ResultDict(TypedDict): + encoding: Optional[str] + confidence: float + language: Optional[str] + +else: + ResultDict = dict diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/sbcharsetprober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/sbcharsetprober.py new file mode 100644 index 0000000..0ffbcdd --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/sbcharsetprober.py @@ -0,0 +1,162 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import Dict, List, NamedTuple, Optional, Union + +from .charsetprober import CharSetProber +from .enums import CharacterCategory, ProbingState, SequenceLikelihood + + +class SingleByteCharSetModel(NamedTuple): + charset_name: str + language: str + char_to_order_map: Dict[int, int] + language_model: Dict[int, Dict[int, int]] + typical_positive_ratio: float + keep_ascii_letters: bool + alphabet: str + + +class SingleByteCharSetProber(CharSetProber): + SAMPLE_SIZE = 64 + SB_ENOUGH_REL_THRESHOLD = 1024 # 0.25 * SAMPLE_SIZE^2 + POSITIVE_SHORTCUT_THRESHOLD = 0.95 + NEGATIVE_SHORTCUT_THRESHOLD = 0.05 + + def __init__( + self, + model: SingleByteCharSetModel, + is_reversed: bool = False, + name_prober: Optional[CharSetProber] = None, + ) -> None: + super().__init__() + self._model = model + # TRUE if we need to reverse every pair in the model lookup + self._reversed = is_reversed + # Optional auxiliary prober for name decision + self._name_prober = name_prober + self._last_order = 255 + self._seq_counters: List[int] = [] + self._total_seqs = 0 + self._total_char = 0 + self._control_char = 0 + self._freq_char = 0 + self.reset() + + def reset(self) -> None: + super().reset() + # char order of last character + self._last_order = 255 + self._seq_counters = [0] * SequenceLikelihood.get_num_categories() + self._total_seqs = 0 + self._total_char = 0 + self._control_char = 0 + # characters that fall in our sampling range + self._freq_char = 0 + + @property + def charset_name(self) -> Optional[str]: + if self._name_prober: + return self._name_prober.charset_name + return self._model.charset_name + + @property + def language(self) -> Optional[str]: + if self._name_prober: + return self._name_prober.language + return self._model.language + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + # TODO: Make filter_international_words keep things in self.alphabet + if not self._model.keep_ascii_letters: + byte_str = self.filter_international_words(byte_str) + else: + byte_str = self.remove_xml_tags(byte_str) + if not byte_str: + return self.state + char_to_order_map = self._model.char_to_order_map + language_model = self._model.language_model + for char in byte_str: + order = char_to_order_map.get(char, CharacterCategory.UNDEFINED) + # XXX: This was SYMBOL_CAT_ORDER before, with a value of 250, but + # CharacterCategory.SYMBOL is actually 253, so we use CONTROL + # to make it closer to the original intent. The only difference + # is whether or not we count digits and control characters for + # _total_char purposes. + if order < CharacterCategory.CONTROL: + self._total_char += 1 + if order < self.SAMPLE_SIZE: + self._freq_char += 1 + if self._last_order < self.SAMPLE_SIZE: + self._total_seqs += 1 + if not self._reversed: + lm_cat = language_model[self._last_order][order] + else: + lm_cat = language_model[order][self._last_order] + self._seq_counters[lm_cat] += 1 + self._last_order = order + + charset_name = self._model.charset_name + if self.state == ProbingState.DETECTING: + if self._total_seqs > self.SB_ENOUGH_REL_THRESHOLD: + confidence = self.get_confidence() + if confidence > self.POSITIVE_SHORTCUT_THRESHOLD: + self.logger.debug( + "%s confidence = %s, we have a winner", charset_name, confidence + ) + self._state = ProbingState.FOUND_IT + elif confidence < self.NEGATIVE_SHORTCUT_THRESHOLD: + self.logger.debug( + "%s confidence = %s, below negative shortcut threshold %s", + charset_name, + confidence, + self.NEGATIVE_SHORTCUT_THRESHOLD, + ) + self._state = ProbingState.NOT_ME + + return self.state + + def get_confidence(self) -> float: + r = 0.01 + if self._total_seqs > 0: + r = ( + ( + self._seq_counters[SequenceLikelihood.POSITIVE] + + 0.25 * self._seq_counters[SequenceLikelihood.LIKELY] + ) + / self._total_seqs + / self._model.typical_positive_ratio + ) + # The more control characters (proportionnaly to the size + # of the text), the less confident we become in the current + # charset. + r = r * (self._total_char - self._control_char) / self._total_char + r = r * self._freq_char / self._total_char + if r >= 1.0: + r = 0.99 + return r diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/sbcsgroupprober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/sbcsgroupprober.py new file mode 100644 index 0000000..890ae84 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/sbcsgroupprober.py @@ -0,0 +1,88 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from .charsetgroupprober import CharSetGroupProber +from .hebrewprober import HebrewProber +from .langbulgarianmodel import ISO_8859_5_BULGARIAN_MODEL, WINDOWS_1251_BULGARIAN_MODEL +from .langgreekmodel import ISO_8859_7_GREEK_MODEL, WINDOWS_1253_GREEK_MODEL +from .langhebrewmodel import WINDOWS_1255_HEBREW_MODEL + +# from .langhungarianmodel import (ISO_8859_2_HUNGARIAN_MODEL, +# WINDOWS_1250_HUNGARIAN_MODEL) +from .langrussianmodel import ( + IBM855_RUSSIAN_MODEL, + IBM866_RUSSIAN_MODEL, + ISO_8859_5_RUSSIAN_MODEL, + KOI8_R_RUSSIAN_MODEL, + MACCYRILLIC_RUSSIAN_MODEL, + WINDOWS_1251_RUSSIAN_MODEL, +) +from .langthaimodel import TIS_620_THAI_MODEL +from .langturkishmodel import ISO_8859_9_TURKISH_MODEL +from .sbcharsetprober import SingleByteCharSetProber + + +class SBCSGroupProber(CharSetGroupProber): + def __init__(self) -> None: + super().__init__() + hebrew_prober = HebrewProber() + logical_hebrew_prober = SingleByteCharSetProber( + WINDOWS_1255_HEBREW_MODEL, is_reversed=False, name_prober=hebrew_prober + ) + # TODO: See if using ISO-8859-8 Hebrew model works better here, since + # it's actually the visual one + visual_hebrew_prober = SingleByteCharSetProber( + WINDOWS_1255_HEBREW_MODEL, is_reversed=True, name_prober=hebrew_prober + ) + hebrew_prober.set_model_probers(logical_hebrew_prober, visual_hebrew_prober) + # TODO: ORDER MATTERS HERE. I changed the order vs what was in master + # and several tests failed that did not before. Some thought + # should be put into the ordering, and we should consider making + # order not matter here, because that is very counter-intuitive. + self.probers = [ + SingleByteCharSetProber(WINDOWS_1251_RUSSIAN_MODEL), + SingleByteCharSetProber(KOI8_R_RUSSIAN_MODEL), + SingleByteCharSetProber(ISO_8859_5_RUSSIAN_MODEL), + SingleByteCharSetProber(MACCYRILLIC_RUSSIAN_MODEL), + SingleByteCharSetProber(IBM866_RUSSIAN_MODEL), + SingleByteCharSetProber(IBM855_RUSSIAN_MODEL), + SingleByteCharSetProber(ISO_8859_7_GREEK_MODEL), + SingleByteCharSetProber(WINDOWS_1253_GREEK_MODEL), + SingleByteCharSetProber(ISO_8859_5_BULGARIAN_MODEL), + SingleByteCharSetProber(WINDOWS_1251_BULGARIAN_MODEL), + # TODO: Restore Hungarian encodings (iso-8859-2 and windows-1250) + # after we retrain model. + # SingleByteCharSetProber(ISO_8859_2_HUNGARIAN_MODEL), + # SingleByteCharSetProber(WINDOWS_1250_HUNGARIAN_MODEL), + SingleByteCharSetProber(TIS_620_THAI_MODEL), + SingleByteCharSetProber(ISO_8859_9_TURKISH_MODEL), + hebrew_prober, + logical_hebrew_prober, + visual_hebrew_prober, + ] + self.reset() diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/sjisprober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/sjisprober.py new file mode 100644 index 0000000..91df077 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/sjisprober.py @@ -0,0 +1,105 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import Union + +from .chardistribution import SJISDistributionAnalysis +from .codingstatemachine import CodingStateMachine +from .enums import MachineState, ProbingState +from .jpcntx import SJISContextAnalysis +from .mbcharsetprober import MultiByteCharSetProber +from .mbcssm import SJIS_SM_MODEL + + +class SJISProber(MultiByteCharSetProber): + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(SJIS_SM_MODEL) + self.distribution_analyzer = SJISDistributionAnalysis() + self.context_analyzer = SJISContextAnalysis() + self.reset() + + def reset(self) -> None: + super().reset() + self.context_analyzer.reset() + + @property + def charset_name(self) -> str: + return self.context_analyzer.charset_name + + @property + def language(self) -> str: + return "Japanese" + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + assert self.coding_sm is not None + assert self.distribution_analyzer is not None + + for i, byte in enumerate(byte_str): + coding_state = self.coding_sm.next_state(byte) + if coding_state == MachineState.ERROR: + self.logger.debug( + "%s %s prober hit error at byte %s", + self.charset_name, + self.language, + i, + ) + self._state = ProbingState.NOT_ME + break + if coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + if coding_state == MachineState.START: + char_len = self.coding_sm.get_current_charlen() + if i == 0: + self._last_char[1] = byte + self.context_analyzer.feed( + self._last_char[2 - char_len :], char_len + ) + self.distribution_analyzer.feed(self._last_char, char_len) + else: + self.context_analyzer.feed( + byte_str[i + 1 - char_len : i + 3 - char_len], char_len + ) + self.distribution_analyzer.feed(byte_str[i - 1 : i + 1], char_len) + + self._last_char[0] = byte_str[-1] + + if self.state == ProbingState.DETECTING: + if self.context_analyzer.got_enough_data() and ( + self.get_confidence() > self.SHORTCUT_THRESHOLD + ): + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self) -> float: + assert self.distribution_analyzer is not None + + context_conf = self.context_analyzer.get_confidence() + distrib_conf = self.distribution_analyzer.get_confidence() + return max(context_conf, distrib_conf) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/universaldetector.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/universaldetector.py new file mode 100644 index 0000000..30c441d --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/universaldetector.py @@ -0,0 +1,362 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is Mozilla Universal charset detector code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# Shy Shalom - original C code +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### +""" +Module containing the UniversalDetector detector class, which is the primary +class a user of ``chardet`` should use. + +:author: Mark Pilgrim (initial port to Python) +:author: Shy Shalom (original C code) +:author: Dan Blanchard (major refactoring for 3.0) +:author: Ian Cordasco +""" + + +import codecs +import logging +import re +from typing import List, Optional, Union + +from .charsetgroupprober import CharSetGroupProber +from .charsetprober import CharSetProber +from .enums import InputState, LanguageFilter, ProbingState +from .escprober import EscCharSetProber +from .latin1prober import Latin1Prober +from .macromanprober import MacRomanProber +from .mbcsgroupprober import MBCSGroupProber +from .resultdict import ResultDict +from .sbcsgroupprober import SBCSGroupProber +from .utf1632prober import UTF1632Prober + + +class UniversalDetector: + """ + The ``UniversalDetector`` class underlies the ``chardet.detect`` function + and coordinates all of the different charset probers. + + To get a ``dict`` containing an encoding and its confidence, you can simply + run: + + .. code:: + + u = UniversalDetector() + u.feed(some_bytes) + u.close() + detected = u.result + + """ + + MINIMUM_THRESHOLD = 0.20 + HIGH_BYTE_DETECTOR = re.compile(b"[\x80-\xFF]") + ESC_DETECTOR = re.compile(b"(\033|~{)") + WIN_BYTE_DETECTOR = re.compile(b"[\x80-\x9F]") + ISO_WIN_MAP = { + "iso-8859-1": "Windows-1252", + "iso-8859-2": "Windows-1250", + "iso-8859-5": "Windows-1251", + "iso-8859-6": "Windows-1256", + "iso-8859-7": "Windows-1253", + "iso-8859-8": "Windows-1255", + "iso-8859-9": "Windows-1254", + "iso-8859-13": "Windows-1257", + } + # Based on https://encoding.spec.whatwg.org/#names-and-labels + # but altered to match Python names for encodings and remove mappings + # that break tests. + LEGACY_MAP = { + "ascii": "Windows-1252", + "iso-8859-1": "Windows-1252", + "tis-620": "ISO-8859-11", + "iso-8859-9": "Windows-1254", + "gb2312": "GB18030", + "euc-kr": "CP949", + "utf-16le": "UTF-16", + } + + def __init__( + self, + lang_filter: LanguageFilter = LanguageFilter.ALL, + should_rename_legacy: bool = False, + ) -> None: + self._esc_charset_prober: Optional[EscCharSetProber] = None + self._utf1632_prober: Optional[UTF1632Prober] = None + self._charset_probers: List[CharSetProber] = [] + self.result: ResultDict = { + "encoding": None, + "confidence": 0.0, + "language": None, + } + self.done = False + self._got_data = False + self._input_state = InputState.PURE_ASCII + self._last_char = b"" + self.lang_filter = lang_filter + self.logger = logging.getLogger(__name__) + self._has_win_bytes = False + self.should_rename_legacy = should_rename_legacy + self.reset() + + @property + def input_state(self) -> int: + return self._input_state + + @property + def has_win_bytes(self) -> bool: + return self._has_win_bytes + + @property + def charset_probers(self) -> List[CharSetProber]: + return self._charset_probers + + def reset(self) -> None: + """ + Reset the UniversalDetector and all of its probers back to their + initial states. This is called by ``__init__``, so you only need to + call this directly in between analyses of different documents. + """ + self.result = {"encoding": None, "confidence": 0.0, "language": None} + self.done = False + self._got_data = False + self._has_win_bytes = False + self._input_state = InputState.PURE_ASCII + self._last_char = b"" + if self._esc_charset_prober: + self._esc_charset_prober.reset() + if self._utf1632_prober: + self._utf1632_prober.reset() + for prober in self._charset_probers: + prober.reset() + + def feed(self, byte_str: Union[bytes, bytearray]) -> None: + """ + Takes a chunk of a document and feeds it through all of the relevant + charset probers. + + After calling ``feed``, you can check the value of the ``done`` + attribute to see if you need to continue feeding the + ``UniversalDetector`` more data, or if it has made a prediction + (in the ``result`` attribute). + + .. note:: + You should always call ``close`` when you're done feeding in your + document if ``done`` is not already ``True``. + """ + if self.done: + return + + if not byte_str: + return + + if not isinstance(byte_str, bytearray): + byte_str = bytearray(byte_str) + + # First check for known BOMs, since these are guaranteed to be correct + if not self._got_data: + # If the data starts with BOM, we know it is UTF + if byte_str.startswith(codecs.BOM_UTF8): + # EF BB BF UTF-8 with BOM + self.result = { + "encoding": "UTF-8-SIG", + "confidence": 1.0, + "language": "", + } + elif byte_str.startswith((codecs.BOM_UTF32_LE, codecs.BOM_UTF32_BE)): + # FF FE 00 00 UTF-32, little-endian BOM + # 00 00 FE FF UTF-32, big-endian BOM + self.result = {"encoding": "UTF-32", "confidence": 1.0, "language": ""} + elif byte_str.startswith(b"\xFE\xFF\x00\x00"): + # FE FF 00 00 UCS-4, unusual octet order BOM (3412) + self.result = { + # TODO: This encoding is not supported by Python. Should remove? + "encoding": "X-ISO-10646-UCS-4-3412", + "confidence": 1.0, + "language": "", + } + elif byte_str.startswith(b"\x00\x00\xFF\xFE"): + # 00 00 FF FE UCS-4, unusual octet order BOM (2143) + self.result = { + # TODO: This encoding is not supported by Python. Should remove? + "encoding": "X-ISO-10646-UCS-4-2143", + "confidence": 1.0, + "language": "", + } + elif byte_str.startswith((codecs.BOM_LE, codecs.BOM_BE)): + # FF FE UTF-16, little endian BOM + # FE FF UTF-16, big endian BOM + self.result = {"encoding": "UTF-16", "confidence": 1.0, "language": ""} + + self._got_data = True + if self.result["encoding"] is not None: + self.done = True + return + + # If none of those matched and we've only see ASCII so far, check + # for high bytes and escape sequences + if self._input_state == InputState.PURE_ASCII: + if self.HIGH_BYTE_DETECTOR.search(byte_str): + self._input_state = InputState.HIGH_BYTE + elif ( + self._input_state == InputState.PURE_ASCII + and self.ESC_DETECTOR.search(self._last_char + byte_str) + ): + self._input_state = InputState.ESC_ASCII + + self._last_char = byte_str[-1:] + + # next we will look to see if it is appears to be either a UTF-16 or + # UTF-32 encoding + if not self._utf1632_prober: + self._utf1632_prober = UTF1632Prober() + + if self._utf1632_prober.state == ProbingState.DETECTING: + if self._utf1632_prober.feed(byte_str) == ProbingState.FOUND_IT: + self.result = { + "encoding": self._utf1632_prober.charset_name, + "confidence": self._utf1632_prober.get_confidence(), + "language": "", + } + self.done = True + return + + # If we've seen escape sequences, use the EscCharSetProber, which + # uses a simple state machine to check for known escape sequences in + # HZ and ISO-2022 encodings, since those are the only encodings that + # use such sequences. + if self._input_state == InputState.ESC_ASCII: + if not self._esc_charset_prober: + self._esc_charset_prober = EscCharSetProber(self.lang_filter) + if self._esc_charset_prober.feed(byte_str) == ProbingState.FOUND_IT: + self.result = { + "encoding": self._esc_charset_prober.charset_name, + "confidence": self._esc_charset_prober.get_confidence(), + "language": self._esc_charset_prober.language, + } + self.done = True + # If we've seen high bytes (i.e., those with values greater than 127), + # we need to do more complicated checks using all our multi-byte and + # single-byte probers that are left. The single-byte probers + # use character bigram distributions to determine the encoding, whereas + # the multi-byte probers use a combination of character unigram and + # bigram distributions. + elif self._input_state == InputState.HIGH_BYTE: + if not self._charset_probers: + self._charset_probers = [MBCSGroupProber(self.lang_filter)] + # If we're checking non-CJK encodings, use single-byte prober + if self.lang_filter & LanguageFilter.NON_CJK: + self._charset_probers.append(SBCSGroupProber()) + self._charset_probers.append(Latin1Prober()) + self._charset_probers.append(MacRomanProber()) + for prober in self._charset_probers: + if prober.feed(byte_str) == ProbingState.FOUND_IT: + self.result = { + "encoding": prober.charset_name, + "confidence": prober.get_confidence(), + "language": prober.language, + } + self.done = True + break + if self.WIN_BYTE_DETECTOR.search(byte_str): + self._has_win_bytes = True + + def close(self) -> ResultDict: + """ + Stop analyzing the current document and come up with a final + prediction. + + :returns: The ``result`` attribute, a ``dict`` with the keys + `encoding`, `confidence`, and `language`. + """ + # Don't bother with checks if we're already done + if self.done: + return self.result + self.done = True + + if not self._got_data: + self.logger.debug("no data received!") + + # Default to ASCII if it is all we've seen so far + elif self._input_state == InputState.PURE_ASCII: + self.result = {"encoding": "ascii", "confidence": 1.0, "language": ""} + + # If we have seen non-ASCII, return the best that met MINIMUM_THRESHOLD + elif self._input_state == InputState.HIGH_BYTE: + prober_confidence = None + max_prober_confidence = 0.0 + max_prober = None + for prober in self._charset_probers: + if not prober: + continue + prober_confidence = prober.get_confidence() + if prober_confidence > max_prober_confidence: + max_prober_confidence = prober_confidence + max_prober = prober + if max_prober and (max_prober_confidence > self.MINIMUM_THRESHOLD): + charset_name = max_prober.charset_name + assert charset_name is not None + lower_charset_name = charset_name.lower() + confidence = max_prober.get_confidence() + # Use Windows encoding name instead of ISO-8859 if we saw any + # extra Windows-specific bytes + if lower_charset_name.startswith("iso-8859"): + if self._has_win_bytes: + charset_name = self.ISO_WIN_MAP.get( + lower_charset_name, charset_name + ) + # Rename legacy encodings with superset encodings if asked + if self.should_rename_legacy: + charset_name = self.LEGACY_MAP.get( + (charset_name or "").lower(), charset_name + ) + self.result = { + "encoding": charset_name, + "confidence": confidence, + "language": max_prober.language, + } + + # Log all prober confidences if none met MINIMUM_THRESHOLD + if self.logger.getEffectiveLevel() <= logging.DEBUG: + if self.result["encoding"] is None: + self.logger.debug("no probers hit minimum threshold") + for group_prober in self._charset_probers: + if not group_prober: + continue + if isinstance(group_prober, CharSetGroupProber): + for prober in group_prober.probers: + self.logger.debug( + "%s %s confidence = %s", + prober.charset_name, + prober.language, + prober.get_confidence(), + ) + else: + self.logger.debug( + "%s %s confidence = %s", + group_prober.charset_name, + group_prober.language, + group_prober.get_confidence(), + ) + return self.result diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/utf1632prober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/utf1632prober.py new file mode 100644 index 0000000..6bdec63 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/utf1632prober.py @@ -0,0 +1,225 @@ +######################## BEGIN LICENSE BLOCK ######################## +# +# Contributor(s): +# Jason Zavaglia +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### +from typing import List, Union + +from .charsetprober import CharSetProber +from .enums import ProbingState + + +class UTF1632Prober(CharSetProber): + """ + This class simply looks for occurrences of zero bytes, and infers + whether the file is UTF16 or UTF32 (low-endian or big-endian) + For instance, files looking like ( \0 \0 \0 [nonzero] )+ + have a good probability to be UTF32BE. Files looking like ( \0 [nonzero] )+ + may be guessed to be UTF16BE, and inversely for little-endian varieties. + """ + + # how many logical characters to scan before feeling confident of prediction + MIN_CHARS_FOR_DETECTION = 20 + # a fixed constant ratio of expected zeros or non-zeros in modulo-position. + EXPECTED_RATIO = 0.94 + + def __init__(self) -> None: + super().__init__() + self.position = 0 + self.zeros_at_mod = [0] * 4 + self.nonzeros_at_mod = [0] * 4 + self._state = ProbingState.DETECTING + self.quad = [0, 0, 0, 0] + self.invalid_utf16be = False + self.invalid_utf16le = False + self.invalid_utf32be = False + self.invalid_utf32le = False + self.first_half_surrogate_pair_detected_16be = False + self.first_half_surrogate_pair_detected_16le = False + self.reset() + + def reset(self) -> None: + super().reset() + self.position = 0 + self.zeros_at_mod = [0] * 4 + self.nonzeros_at_mod = [0] * 4 + self._state = ProbingState.DETECTING + self.invalid_utf16be = False + self.invalid_utf16le = False + self.invalid_utf32be = False + self.invalid_utf32le = False + self.first_half_surrogate_pair_detected_16be = False + self.first_half_surrogate_pair_detected_16le = False + self.quad = [0, 0, 0, 0] + + @property + def charset_name(self) -> str: + if self.is_likely_utf32be(): + return "utf-32be" + if self.is_likely_utf32le(): + return "utf-32le" + if self.is_likely_utf16be(): + return "utf-16be" + if self.is_likely_utf16le(): + return "utf-16le" + # default to something valid + return "utf-16" + + @property + def language(self) -> str: + return "" + + def approx_32bit_chars(self) -> float: + return max(1.0, self.position / 4.0) + + def approx_16bit_chars(self) -> float: + return max(1.0, self.position / 2.0) + + def is_likely_utf32be(self) -> bool: + approx_chars = self.approx_32bit_chars() + return approx_chars >= self.MIN_CHARS_FOR_DETECTION and ( + self.zeros_at_mod[0] / approx_chars > self.EXPECTED_RATIO + and self.zeros_at_mod[1] / approx_chars > self.EXPECTED_RATIO + and self.zeros_at_mod[2] / approx_chars > self.EXPECTED_RATIO + and self.nonzeros_at_mod[3] / approx_chars > self.EXPECTED_RATIO + and not self.invalid_utf32be + ) + + def is_likely_utf32le(self) -> bool: + approx_chars = self.approx_32bit_chars() + return approx_chars >= self.MIN_CHARS_FOR_DETECTION and ( + self.nonzeros_at_mod[0] / approx_chars > self.EXPECTED_RATIO + and self.zeros_at_mod[1] / approx_chars > self.EXPECTED_RATIO + and self.zeros_at_mod[2] / approx_chars > self.EXPECTED_RATIO + and self.zeros_at_mod[3] / approx_chars > self.EXPECTED_RATIO + and not self.invalid_utf32le + ) + + def is_likely_utf16be(self) -> bool: + approx_chars = self.approx_16bit_chars() + return approx_chars >= self.MIN_CHARS_FOR_DETECTION and ( + (self.nonzeros_at_mod[1] + self.nonzeros_at_mod[3]) / approx_chars + > self.EXPECTED_RATIO + and (self.zeros_at_mod[0] + self.zeros_at_mod[2]) / approx_chars + > self.EXPECTED_RATIO + and not self.invalid_utf16be + ) + + def is_likely_utf16le(self) -> bool: + approx_chars = self.approx_16bit_chars() + return approx_chars >= self.MIN_CHARS_FOR_DETECTION and ( + (self.nonzeros_at_mod[0] + self.nonzeros_at_mod[2]) / approx_chars + > self.EXPECTED_RATIO + and (self.zeros_at_mod[1] + self.zeros_at_mod[3]) / approx_chars + > self.EXPECTED_RATIO + and not self.invalid_utf16le + ) + + def validate_utf32_characters(self, quad: List[int]) -> None: + """ + Validate if the quad of bytes is valid UTF-32. + + UTF-32 is valid in the range 0x00000000 - 0x0010FFFF + excluding 0x0000D800 - 0x0000DFFF + + https://en.wikipedia.org/wiki/UTF-32 + """ + if ( + quad[0] != 0 + or quad[1] > 0x10 + or (quad[0] == 0 and quad[1] == 0 and 0xD8 <= quad[2] <= 0xDF) + ): + self.invalid_utf32be = True + if ( + quad[3] != 0 + or quad[2] > 0x10 + or (quad[3] == 0 and quad[2] == 0 and 0xD8 <= quad[1] <= 0xDF) + ): + self.invalid_utf32le = True + + def validate_utf16_characters(self, pair: List[int]) -> None: + """ + Validate if the pair of bytes is valid UTF-16. + + UTF-16 is valid in the range 0x0000 - 0xFFFF excluding 0xD800 - 0xFFFF + with an exception for surrogate pairs, which must be in the range + 0xD800-0xDBFF followed by 0xDC00-0xDFFF + + https://en.wikipedia.org/wiki/UTF-16 + """ + if not self.first_half_surrogate_pair_detected_16be: + if 0xD8 <= pair[0] <= 0xDB: + self.first_half_surrogate_pair_detected_16be = True + elif 0xDC <= pair[0] <= 0xDF: + self.invalid_utf16be = True + else: + if 0xDC <= pair[0] <= 0xDF: + self.first_half_surrogate_pair_detected_16be = False + else: + self.invalid_utf16be = True + + if not self.first_half_surrogate_pair_detected_16le: + if 0xD8 <= pair[1] <= 0xDB: + self.first_half_surrogate_pair_detected_16le = True + elif 0xDC <= pair[1] <= 0xDF: + self.invalid_utf16le = True + else: + if 0xDC <= pair[1] <= 0xDF: + self.first_half_surrogate_pair_detected_16le = False + else: + self.invalid_utf16le = True + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + for c in byte_str: + mod4 = self.position % 4 + self.quad[mod4] = c + if mod4 == 3: + self.validate_utf32_characters(self.quad) + self.validate_utf16_characters(self.quad[0:2]) + self.validate_utf16_characters(self.quad[2:4]) + if c == 0: + self.zeros_at_mod[mod4] += 1 + else: + self.nonzeros_at_mod[mod4] += 1 + self.position += 1 + return self.state + + @property + def state(self) -> ProbingState: + if self._state in {ProbingState.NOT_ME, ProbingState.FOUND_IT}: + # terminal, decided states + return self._state + if self.get_confidence() > 0.80: + self._state = ProbingState.FOUND_IT + elif self.position > 4 * 1024: + # if we get to 4kb into the file, and we can't conclude it's UTF, + # let's give up + self._state = ProbingState.NOT_ME + return self._state + + def get_confidence(self) -> float: + return ( + 0.85 + if ( + self.is_likely_utf16le() + or self.is_likely_utf16be() + or self.is_likely_utf32le() + or self.is_likely_utf32be() + ) + else 0.00 + ) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/utf8prober.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/utf8prober.py new file mode 100644 index 0000000..d96354d --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/utf8prober.py @@ -0,0 +1,82 @@ +######################## BEGIN LICENSE BLOCK ######################## +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mark Pilgrim - port to Python +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA +######################### END LICENSE BLOCK ######################### + +from typing import Union + +from .charsetprober import CharSetProber +from .codingstatemachine import CodingStateMachine +from .enums import MachineState, ProbingState +from .mbcssm import UTF8_SM_MODEL + + +class UTF8Prober(CharSetProber): + ONE_CHAR_PROB = 0.5 + + def __init__(self) -> None: + super().__init__() + self.coding_sm = CodingStateMachine(UTF8_SM_MODEL) + self._num_mb_chars = 0 + self.reset() + + def reset(self) -> None: + super().reset() + self.coding_sm.reset() + self._num_mb_chars = 0 + + @property + def charset_name(self) -> str: + return "utf-8" + + @property + def language(self) -> str: + return "" + + def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState: + for c in byte_str: + coding_state = self.coding_sm.next_state(c) + if coding_state == MachineState.ERROR: + self._state = ProbingState.NOT_ME + break + if coding_state == MachineState.ITS_ME: + self._state = ProbingState.FOUND_IT + break + if coding_state == MachineState.START: + if self.coding_sm.get_current_charlen() >= 2: + self._num_mb_chars += 1 + + if self.state == ProbingState.DETECTING: + if self.get_confidence() > self.SHORTCUT_THRESHOLD: + self._state = ProbingState.FOUND_IT + + return self.state + + def get_confidence(self) -> float: + unlike = 0.99 + if self._num_mb_chars < 6: + unlike *= self.ONE_CHAR_PROB**self._num_mb_chars + return 1.0 - unlike + return unlike diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/version.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/version.py new file mode 100644 index 0000000..19dd01e --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/chardet/version.py @@ -0,0 +1,9 @@ +""" +This module exists only to simplify retrieving the version number of chardet +from within setuptools and from chardet subpackages. + +:author: Dan Blanchard (dan.blanchard@gmail.com) +""" + +__version__ = "5.2.0" +VERSION = __version__.split(".") diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/cssselect/__init__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/cssselect/__init__.py new file mode 100644 index 0000000..77f028b --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/cssselect/__init__.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +""" + CSS Selectors based on XPath + ============================ + + This module supports selecting XML/HTML elements based on CSS selectors. + See the `CSSSelector` class for details. + + + :copyright: (c) 2007-2012 Ian Bicking and contributors. + See AUTHORS for more details. + :license: BSD, see LICENSE for more details. + +""" + +from cssselect.parser import ( + parse, + Selector, + FunctionalPseudoElement, + SelectorError, + SelectorSyntaxError, +) +from cssselect.xpath import GenericTranslator, HTMLTranslator, ExpressionError + +__all__ = ( + "ExpressionError", + "FunctionalPseudoElement", + "GenericTranslator", + "HTMLTranslator", + "parse", + "Selector", + "SelectorError", + "SelectorSyntaxError", +) + +VERSION = "1.2.0" +__version__ = VERSION diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/cssselect/parser.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/cssselect/parser.py new file mode 100644 index 0000000..25a650c --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/cssselect/parser.py @@ -0,0 +1,1062 @@ +# -*- coding: utf-8 -*- +""" + cssselect.parser + ================ + + Tokenizer, parser and parsed objects for CSS selectors. + + + :copyright: (c) 2007-2012 Ian Bicking and contributors. + See AUTHORS for more details. + :license: BSD, see LICENSE for more details. + +""" + +import sys +import re +import operator +import typing +from typing import Iterable, Iterator, List, Optional, Sequence, Tuple, Union + + +def ascii_lower(string: str) -> str: + """Lower-case, but only in the ASCII range.""" + return string.encode("utf8").lower().decode("utf8") + + +class SelectorError(Exception): + """Common parent for :class:`SelectorSyntaxError` and + :class:`ExpressionError`. + + You can just use ``except SelectorError:`` when calling + :meth:`~GenericTranslator.css_to_xpath` and handle both exceptions types. + + """ + + +class SelectorSyntaxError(SelectorError, SyntaxError): + """Parsing a selector that does not match the grammar.""" + + +#### Parsed objects + +Tree = Union[ + "Element", + "Hash", + "Class", + "Function", + "Pseudo", + "Attrib", + "Negation", + "Relation", + "Matching", + "SpecificityAdjustment", + "CombinedSelector", +] +PseudoElement = Union["FunctionalPseudoElement", str] + + +class Selector: + """ + Represents a parsed selector. + + :meth:`~GenericTranslator.selector_to_xpath` accepts this object, + but ignores :attr:`pseudo_element`. It is the user’s responsibility + to account for pseudo-elements and reject selectors with unknown + or unsupported pseudo-elements. + + """ + + def __init__(self, tree: Tree, pseudo_element: Optional[PseudoElement] = None) -> None: + self.parsed_tree = tree + if pseudo_element is not None and not isinstance(pseudo_element, FunctionalPseudoElement): + pseudo_element = ascii_lower(pseudo_element) + #: A :class:`FunctionalPseudoElement`, + #: or the identifier for the pseudo-element as a string, + # or ``None``. + #: + #: +-------------------------+----------------+--------------------------------+ + #: | | Selector | Pseudo-element | + #: +=========================+================+================================+ + #: | CSS3 syntax | ``a::before`` | ``'before'`` | + #: +-------------------------+----------------+--------------------------------+ + #: | Older syntax | ``a:before`` | ``'before'`` | + #: +-------------------------+----------------+--------------------------------+ + #: | From the Lists3_ draft, | ``li::marker`` | ``'marker'`` | + #: | not in Selectors3 | | | + #: +-------------------------+----------------+--------------------------------+ + #: | Invalid pseudo-class | ``li:marker`` | ``None`` | + #: +-------------------------+----------------+--------------------------------+ + #: | Functional | ``a::foo(2)`` | ``FunctionalPseudoElement(…)`` | + #: +-------------------------+----------------+--------------------------------+ + #: + #: .. _Lists3: http://www.w3.org/TR/2011/WD-css3-lists-20110524/#marker-pseudoelement + self.pseudo_element = pseudo_element + + def __repr__(self) -> str: + if isinstance(self.pseudo_element, FunctionalPseudoElement): + pseudo_element = repr(self.pseudo_element) + elif self.pseudo_element: + pseudo_element = "::%s" % self.pseudo_element + else: + pseudo_element = "" + return "%s[%r%s]" % (self.__class__.__name__, self.parsed_tree, pseudo_element) + + def canonical(self) -> str: + """Return a CSS representation for this selector (a string)""" + if isinstance(self.pseudo_element, FunctionalPseudoElement): + pseudo_element = "::%s" % self.pseudo_element.canonical() + elif self.pseudo_element: + pseudo_element = "::%s" % self.pseudo_element + else: + pseudo_element = "" + res = "%s%s" % (self.parsed_tree.canonical(), pseudo_element) + if len(res) > 1: + res = res.lstrip("*") + return res + + def specificity(self) -> Tuple[int, int, int]: + """Return the specificity_ of this selector as a tuple of 3 integers. + + .. _specificity: http://www.w3.org/TR/selectors/#specificity + + """ + a, b, c = self.parsed_tree.specificity() + if self.pseudo_element: + c += 1 + return a, b, c + + +class Class: + """ + Represents selector.class_name + """ + + def __init__(self, selector: Tree, class_name: str) -> None: + self.selector = selector + self.class_name = class_name + + def __repr__(self) -> str: + return "%s[%r.%s]" % (self.__class__.__name__, self.selector, self.class_name) + + def canonical(self) -> str: + return "%s.%s" % (self.selector.canonical(), self.class_name) + + def specificity(self) -> Tuple[int, int, int]: + a, b, c = self.selector.specificity() + b += 1 + return a, b, c + + +class FunctionalPseudoElement: + """ + Represents selector::name(arguments) + + .. attribute:: name + + The name (identifier) of the pseudo-element, as a string. + + .. attribute:: arguments + + The arguments of the pseudo-element, as a list of tokens. + + **Note:** tokens are not part of the public API, + and may change between cssselect versions. + Use at your own risks. + + """ + + def __init__(self, name: str, arguments: Sequence["Token"]): + self.name = ascii_lower(name) + self.arguments = arguments + + def __repr__(self) -> str: + return "%s[::%s(%r)]" % ( + self.__class__.__name__, + self.name, + [token.value for token in self.arguments], + ) + + def argument_types(self) -> List[str]: + return [token.type for token in self.arguments] + + def canonical(self) -> str: + args = "".join(token.css() for token in self.arguments) + return "%s(%s)" % (self.name, args) + + +class Function: + """ + Represents selector:name(expr) + """ + + def __init__(self, selector: Tree, name: str, arguments: Sequence["Token"]) -> None: + self.selector = selector + self.name = ascii_lower(name) + self.arguments = arguments + + def __repr__(self) -> str: + return "%s[%r:%s(%r)]" % ( + self.__class__.__name__, + self.selector, + self.name, + [token.value for token in self.arguments], + ) + + def argument_types(self) -> List[str]: + return [token.type for token in self.arguments] + + def canonical(self) -> str: + args = "".join(token.css() for token in self.arguments) + return "%s:%s(%s)" % (self.selector.canonical(), self.name, args) + + def specificity(self) -> Tuple[int, int, int]: + a, b, c = self.selector.specificity() + b += 1 + return a, b, c + + +class Pseudo: + """ + Represents selector:ident + """ + + def __init__(self, selector: Tree, ident: str) -> None: + self.selector = selector + self.ident = ascii_lower(ident) + + def __repr__(self) -> str: + return "%s[%r:%s]" % (self.__class__.__name__, self.selector, self.ident) + + def canonical(self) -> str: + return "%s:%s" % (self.selector.canonical(), self.ident) + + def specificity(self) -> Tuple[int, int, int]: + a, b, c = self.selector.specificity() + b += 1 + return a, b, c + + +class Negation: + """ + Represents selector:not(subselector) + """ + + def __init__(self, selector: Tree, subselector: Tree) -> None: + self.selector = selector + self.subselector = subselector + + def __repr__(self) -> str: + return "%s[%r:not(%r)]" % (self.__class__.__name__, self.selector, self.subselector) + + def canonical(self) -> str: + subsel = self.subselector.canonical() + if len(subsel) > 1: + subsel = subsel.lstrip("*") + return "%s:not(%s)" % (self.selector.canonical(), subsel) + + def specificity(self) -> Tuple[int, int, int]: + a1, b1, c1 = self.selector.specificity() + a2, b2, c2 = self.subselector.specificity() + return a1 + a2, b1 + b2, c1 + c2 + + +class Relation: + """ + Represents selector:has(subselector) + """ + + def __init__(self, selector: Tree, combinator: "Token", subselector: Selector): + self.selector = selector + self.combinator = combinator + self.subselector = subselector + + def __repr__(self) -> str: + return "%s[%r:has(%r)]" % ( + self.__class__.__name__, + self.selector, + self.subselector, + ) + + def canonical(self) -> str: + try: + subsel = self.subselector[0].canonical() # type: ignore + except TypeError: + subsel = self.subselector.canonical() + if len(subsel) > 1: + subsel = subsel.lstrip("*") + return "%s:has(%s)" % (self.selector.canonical(), subsel) + + def specificity(self) -> Tuple[int, int, int]: + a1, b1, c1 = self.selector.specificity() + try: + a2, b2, c2 = self.subselector[-1].specificity() # type: ignore + except TypeError: + a2, b2, c2 = self.subselector.specificity() + return a1 + a2, b1 + b2, c1 + c2 + + +class Matching: + """ + Represents selector:is(selector_list) + """ + + def __init__(self, selector: Tree, selector_list: Iterable[Tree]): + self.selector = selector + self.selector_list = selector_list + + def __repr__(self) -> str: + return "%s[%r:is(%s)]" % ( + self.__class__.__name__, + self.selector, + ", ".join(map(repr, self.selector_list)), + ) + + def canonical(self) -> str: + selector_arguments = [] + for s in self.selector_list: + selarg = s.canonical() + selector_arguments.append(selarg.lstrip("*")) + return "%s:is(%s)" % (self.selector.canonical(), ", ".join(map(str, selector_arguments))) + + def specificity(self) -> Tuple[int, int, int]: + return max(x.specificity() for x in self.selector_list) + + +class SpecificityAdjustment: + """ + Represents selector:where(selector_list) + Same as selector:is(selector_list), but its specificity is always 0 + """ + + def __init__(self, selector: Tree, selector_list: List[Tree]): + self.selector = selector + self.selector_list = selector_list + + def __repr__(self) -> str: + return "%s[%r:where(%s)]" % ( + self.__class__.__name__, + self.selector, + ", ".join(map(repr, self.selector_list)), + ) + + def canonical(self) -> str: + selector_arguments = [] + for s in self.selector_list: + selarg = s.canonical() + selector_arguments.append(selarg.lstrip("*")) + return "%s:where(%s)" % ( + self.selector.canonical(), + ", ".join(map(str, selector_arguments)), + ) + + def specificity(self) -> Tuple[int, int, int]: + return 0, 0, 0 + + +class Attrib: + """ + Represents selector[namespace|attrib operator value] + """ + + @typing.overload + def __init__( + self, + selector: Tree, + namespace: Optional[str], + attrib: str, + operator: 'typing.Literal["exists"]', + value: None, + ) -> None: + ... + + @typing.overload + def __init__( + self, selector: Tree, namespace: Optional[str], attrib: str, operator: str, value: "Token" + ) -> None: + ... + + def __init__( + self, + selector: Tree, + namespace: Optional[str], + attrib: str, + operator: str, + value: Optional["Token"], + ) -> None: + self.selector = selector + self.namespace = namespace + self.attrib = attrib + self.operator = operator + self.value = value + + def __repr__(self) -> str: + if self.namespace: + attrib = "%s|%s" % (self.namespace, self.attrib) + else: + attrib = self.attrib + if self.operator == "exists": + return "%s[%r[%s]]" % (self.__class__.__name__, self.selector, attrib) + else: + return "%s[%r[%s %s %r]]" % ( + self.__class__.__name__, + self.selector, + attrib, + self.operator, + typing.cast("Token", self.value).value, + ) + + def canonical(self) -> str: + if self.namespace: + attrib = "%s|%s" % (self.namespace, self.attrib) + else: + attrib = self.attrib + + if self.operator == "exists": + op = attrib + else: + op = "%s%s%s" % (attrib, self.operator, typing.cast("Token", self.value).css()) + + return "%s[%s]" % (self.selector.canonical(), op) + + def specificity(self) -> Tuple[int, int, int]: + a, b, c = self.selector.specificity() + b += 1 + return a, b, c + + +class Element: + """ + Represents namespace|element + + `None` is for the universal selector '*' + + """ + + def __init__(self, namespace: Optional[str] = None, element: Optional[str] = None) -> None: + self.namespace = namespace + self.element = element + + def __repr__(self) -> str: + return "%s[%s]" % (self.__class__.__name__, self.canonical()) + + def canonical(self) -> str: + element = self.element or "*" + if self.namespace: + element = "%s|%s" % (self.namespace, element) + return element + + def specificity(self) -> Tuple[int, int, int]: + if self.element: + return 0, 0, 1 + else: + return 0, 0, 0 + + +class Hash: + """ + Represents selector#id + """ + + def __init__(self, selector: Tree, id: str) -> None: + self.selector = selector + self.id = id + + def __repr__(self) -> str: + return "%s[%r#%s]" % (self.__class__.__name__, self.selector, self.id) + + def canonical(self) -> str: + return "%s#%s" % (self.selector.canonical(), self.id) + + def specificity(self) -> Tuple[int, int, int]: + a, b, c = self.selector.specificity() + a += 1 + return a, b, c + + +class CombinedSelector: + def __init__(self, selector: Tree, combinator: str, subselector: Tree) -> None: + assert selector is not None + self.selector = selector + self.combinator = combinator + self.subselector = subselector + + def __repr__(self) -> str: + if self.combinator == " ": + comb = "" + else: + comb = self.combinator + return "%s[%r %s %r]" % (self.__class__.__name__, self.selector, comb, self.subselector) + + def canonical(self) -> str: + subsel = self.subselector.canonical() + if len(subsel) > 1: + subsel = subsel.lstrip("*") + return "%s %s %s" % (self.selector.canonical(), self.combinator, subsel) + + def specificity(self) -> Tuple[int, int, int]: + a1, b1, c1 = self.selector.specificity() + a2, b2, c2 = self.subselector.specificity() + return a1 + a2, b1 + b2, c1 + c2 + + +#### Parser + +# foo +_el_re = re.compile(r"^[ \t\r\n\f]*([a-zA-Z]+)[ \t\r\n\f]*$") + +# foo#bar or #bar +_id_re = re.compile(r"^[ \t\r\n\f]*([a-zA-Z]*)#([a-zA-Z0-9_-]+)[ \t\r\n\f]*$") + +# foo.bar or .bar +_class_re = re.compile(r"^[ \t\r\n\f]*([a-zA-Z]*)\.([a-zA-Z][a-zA-Z0-9_-]*)[ \t\r\n\f]*$") + + +def parse(css: str) -> List[Selector]: + """Parse a CSS *group of selectors*. + + If you don't care about pseudo-elements or selector specificity, + you can skip this and use :meth:`~GenericTranslator.css_to_xpath`. + + :param css: + A *group of selectors* as a string. + :raises: + :class:`SelectorSyntaxError` on invalid selectors. + :returns: + A list of parsed :class:`Selector` objects, one for each + selector in the comma-separated group. + + """ + # Fast path for simple cases + match = _el_re.match(css) + if match: + return [Selector(Element(element=match.group(1)))] + match = _id_re.match(css) + if match is not None: + return [Selector(Hash(Element(element=match.group(1) or None), match.group(2)))] + match = _class_re.match(css) + if match is not None: + return [Selector(Class(Element(element=match.group(1) or None), match.group(2)))] + + stream = TokenStream(tokenize(css)) + stream.source = css + return list(parse_selector_group(stream)) + + +# except SelectorSyntaxError: +# e = sys.exc_info()[1] +# message = "%s at %s -> %r" % ( +# e, stream.used, stream.peek()) +# e.msg = message +# e.args = tuple([message]) +# raise + + +def parse_selector_group(stream: "TokenStream") -> Iterator[Selector]: + stream.skip_whitespace() + while 1: + yield Selector(*parse_selector(stream)) + if stream.peek() == ("DELIM", ","): + stream.next() + stream.skip_whitespace() + else: + break + + +def parse_selector(stream: "TokenStream") -> Tuple[Tree, Optional[PseudoElement]]: + result, pseudo_element = parse_simple_selector(stream) + while 1: + stream.skip_whitespace() + peek = stream.peek() + if peek in (("EOF", None), ("DELIM", ",")): + break + if pseudo_element: + raise SelectorSyntaxError( + "Got pseudo-element ::%s not at the end of a selector" % pseudo_element + ) + if peek.is_delim("+", ">", "~"): + # A combinator + combinator = typing.cast(str, stream.next().value) + stream.skip_whitespace() + else: + # By exclusion, the last parse_simple_selector() ended + # at peek == ' ' + combinator = " " + next_selector, pseudo_element = parse_simple_selector(stream) + result = CombinedSelector(result, combinator, next_selector) + return result, pseudo_element + + +def parse_simple_selector( + stream: "TokenStream", inside_negation: bool = False +) -> Tuple[Tree, Optional[PseudoElement]]: + stream.skip_whitespace() + selector_start = len(stream.used) + peek = stream.peek() + if peek.type == "IDENT" or peek == ("DELIM", "*"): + if peek.type == "IDENT": + namespace = stream.next().value + else: + stream.next() + namespace = None + if stream.peek() == ("DELIM", "|"): + stream.next() + element = stream.next_ident_or_star() + else: + element = namespace + namespace = None + else: + element = namespace = None + result: Tree = Element(namespace, element) + pseudo_element: Optional[PseudoElement] = None + while 1: + peek = stream.peek() + if ( + peek.type in ("S", "EOF") + or peek.is_delim(",", "+", ">", "~") + or (inside_negation and peek == ("DELIM", ")")) + ): + break + if pseudo_element: + raise SelectorSyntaxError( + "Got pseudo-element ::%s not at the end of a selector" % pseudo_element + ) + if peek.type == "HASH": + result = Hash(result, typing.cast(str, stream.next().value)) + elif peek == ("DELIM", "."): + stream.next() + result = Class(result, stream.next_ident()) + elif peek == ("DELIM", "|"): + stream.next() + result = Element(None, stream.next_ident()) + elif peek == ("DELIM", "["): + stream.next() + result = parse_attrib(result, stream) + elif peek == ("DELIM", ":"): + stream.next() + if stream.peek() == ("DELIM", ":"): + stream.next() + pseudo_element = stream.next_ident() + if stream.peek() == ("DELIM", "("): + stream.next() + pseudo_element = FunctionalPseudoElement( + pseudo_element, parse_arguments(stream) + ) + continue + ident = stream.next_ident() + if ident.lower() in ("first-line", "first-letter", "before", "after"): + # Special case: CSS 2.1 pseudo-elements can have a single ':' + # Any new pseudo-element must have two. + pseudo_element = str(ident) + continue + if stream.peek() != ("DELIM", "("): + result = Pseudo(result, ident) + if repr(result) == "Pseudo[Element[*]:scope]": + if not ( + len(stream.used) == 2 + or (len(stream.used) == 3 and stream.used[0].type == "S") + or (len(stream.used) >= 3 and stream.used[-3].is_delim(",")) + or ( + len(stream.used) >= 4 + and stream.used[-3].type == "S" + and stream.used[-4].is_delim(",") + ) + ): + raise SelectorSyntaxError( + 'Got immediate child pseudo-element ":scope" ' + "not at the start of a selector" + ) + continue + stream.next() + stream.skip_whitespace() + if ident.lower() == "not": + if inside_negation: + raise SelectorSyntaxError("Got nested :not()") + argument, argument_pseudo_element = parse_simple_selector( + stream, inside_negation=True + ) + next = stream.next() + if argument_pseudo_element: + raise SelectorSyntaxError( + "Got pseudo-element ::%s inside :not() at %s" + % (argument_pseudo_element, next.pos) + ) + if next != ("DELIM", ")"): + raise SelectorSyntaxError("Expected ')', got %s" % (next,)) + result = Negation(result, argument) + elif ident.lower() == "has": + combinator, arguments = parse_relative_selector(stream) + result = Relation(result, combinator, arguments) + + elif ident.lower() in ("matches", "is"): + selectors = parse_simple_selector_arguments(stream) + result = Matching(result, selectors) + elif ident.lower() == "where": + selectors = parse_simple_selector_arguments(stream) + result = SpecificityAdjustment(result, selectors) + else: + result = Function(result, ident, parse_arguments(stream)) + else: + raise SelectorSyntaxError("Expected selector, got %s" % (peek,)) + if len(stream.used) == selector_start: + raise SelectorSyntaxError("Expected selector, got %s" % (stream.peek(),)) + return result, pseudo_element + + +def parse_arguments(stream: "TokenStream") -> List["Token"]: + arguments: List["Token"] = [] + while 1: + stream.skip_whitespace() + next = stream.next() + if next.type in ("IDENT", "STRING", "NUMBER") or next in [("DELIM", "+"), ("DELIM", "-")]: + arguments.append(next) + elif next == ("DELIM", ")"): + return arguments + else: + raise SelectorSyntaxError("Expected an argument, got %s" % (next,)) + + +def parse_relative_selector(stream: "TokenStream") -> Tuple["Token", Selector]: + stream.skip_whitespace() + subselector = "" + next = stream.next() + + if next in [("DELIM", "+"), ("DELIM", "-"), ("DELIM", ">"), ("DELIM", "~")]: + combinator = next + stream.skip_whitespace() + next = stream.next() + else: + combinator = Token("DELIM", " ", pos=0) + + while 1: + if next.type in ("IDENT", "STRING", "NUMBER") or next in [("DELIM", "."), ("DELIM", "*")]: + subselector += typing.cast(str, next.value) + elif next == ("DELIM", ")"): + result = parse(subselector) + return combinator, result[0] + else: + raise SelectorSyntaxError("Expected an argument, got %s" % (next,)) + next = stream.next() + + +def parse_simple_selector_arguments(stream: "TokenStream") -> List[Tree]: + arguments = [] + while 1: + result, pseudo_element = parse_simple_selector(stream, True) + if pseudo_element: + raise SelectorSyntaxError( + "Got pseudo-element ::%s inside function" % (pseudo_element,) + ) + stream.skip_whitespace() + next = stream.next() + if next in (("EOF", None), ("DELIM", ",")): + stream.next() + stream.skip_whitespace() + arguments.append(result) + elif next == ("DELIM", ")"): + arguments.append(result) + break + else: + raise SelectorSyntaxError("Expected an argument, got %s" % (next,)) + return arguments + + +def parse_attrib(selector: Tree, stream: "TokenStream") -> Attrib: + stream.skip_whitespace() + attrib = stream.next_ident_or_star() + if attrib is None and stream.peek() != ("DELIM", "|"): + raise SelectorSyntaxError("Expected '|', got %s" % (stream.peek(),)) + namespace: Optional[str] + op: Optional[str] + if stream.peek() == ("DELIM", "|"): + stream.next() + if stream.peek() == ("DELIM", "="): + namespace = None + stream.next() + op = "|=" + else: + namespace = attrib + attrib = stream.next_ident() + op = None + else: + namespace = op = None + if op is None: + stream.skip_whitespace() + next = stream.next() + if next == ("DELIM", "]"): + return Attrib(selector, namespace, typing.cast(str, attrib), "exists", None) + elif next == ("DELIM", "="): + op = "=" + elif next.is_delim("^", "$", "*", "~", "|", "!") and (stream.peek() == ("DELIM", "=")): + op = typing.cast(str, next.value) + "=" + stream.next() + else: + raise SelectorSyntaxError("Operator expected, got %s" % (next,)) + stream.skip_whitespace() + value = stream.next() + if value.type not in ("IDENT", "STRING"): + raise SelectorSyntaxError("Expected string or ident, got %s" % (value,)) + stream.skip_whitespace() + next = stream.next() + if next != ("DELIM", "]"): + raise SelectorSyntaxError("Expected ']', got %s" % (next,)) + return Attrib(selector, namespace, typing.cast(str, attrib), op, value) + + +def parse_series(tokens: Iterable["Token"]) -> Tuple[int, int]: + """ + Parses the arguments for :nth-child() and friends. + + :raises: A list of tokens + :returns: :``(a, b)`` + + """ + for token in tokens: + if token.type == "STRING": + raise ValueError("String tokens not allowed in series.") + s = "".join(typing.cast(str, token.value) for token in tokens).strip() + if s == "odd": + return 2, 1 + elif s == "even": + return 2, 0 + elif s == "n": + return 1, 0 + if "n" not in s: + # Just b + return 0, int(s) + a, b = s.split("n", 1) + a_as_int: int + if not a: + a_as_int = 1 + elif a == "-" or a == "+": + a_as_int = int(a + "1") + else: + a_as_int = int(a) + b_as_int: int + if not b: + b_as_int = 0 + else: + b_as_int = int(b) + return a_as_int, b_as_int + + +#### Token objects + + +class Token(Tuple[str, Optional[str]]): + @typing.overload + def __new__( + cls, + type_: 'typing.Literal["IDENT", "HASH", "STRING", "S", "DELIM", "NUMBER"]', + value: str, + pos: int, + ) -> "Token": + ... + + @typing.overload + def __new__(cls, type_: 'typing.Literal["EOF"]', value: None, pos: int) -> "Token": + ... + + def __new__(cls, type_: str, value: Optional[str], pos: int) -> "Token": + obj = tuple.__new__(cls, (type_, value)) + obj.pos = pos + return obj + + def __repr__(self) -> str: + return "<%s '%s' at %i>" % (self.type, self.value, self.pos) + + def is_delim(self, *values: str) -> bool: + return self.type == "DELIM" and self.value in values + + pos: int + + @property + def type(self) -> str: + return self[0] + + @property + def value(self) -> Optional[str]: + return self[1] + + def css(self) -> str: + if self.type == "STRING": + return repr(self.value) + else: + return typing.cast(str, self.value) + + +class EOFToken(Token): + def __new__(cls, pos: int) -> "EOFToken": + return typing.cast("EOFToken", Token.__new__(cls, "EOF", None, pos)) + + def __repr__(self) -> str: + return "<%s at %i>" % (self.type, self.pos) + + +#### Tokenizer + + +class TokenMacros: + unicode_escape = r"\\([0-9a-f]{1,6})(?:\r\n|[ \n\r\t\f])?" + escape = unicode_escape + r"|\\[^\n\r\f0-9a-f]" + string_escape = r"\\(?:\n|\r\n|\r|\f)|" + escape + nonascii = r"[^\0-\177]" + nmchar = "[_a-z0-9-]|%s|%s" % (escape, nonascii) + nmstart = "[_a-z]|%s|%s" % (escape, nonascii) + + +if typing.TYPE_CHECKING: + + class MatchFunc(typing.Protocol): + def __call__( + self, string: str, pos: int = ..., endpos: int = ... + ) -> Optional["re.Match[str]"]: + ... + + +def _compile(pattern: str) -> "MatchFunc": + return re.compile(pattern % vars(TokenMacros), re.IGNORECASE).match + + +_match_whitespace = _compile(r"[ \t\r\n\f]+") +_match_number = _compile(r"[+-]?(?:[0-9]*\.[0-9]+|[0-9]+)") +_match_hash = _compile("#(?:%(nmchar)s)+") +_match_ident = _compile("-?(?:%(nmstart)s)(?:%(nmchar)s)*") +_match_string_by_quote = { + "'": _compile(r"([^\n\r\f\\']|%(string_escape)s)*"), + '"': _compile(r'([^\n\r\f\\"]|%(string_escape)s)*'), +} + +_sub_simple_escape = re.compile(r"\\(.)").sub +_sub_unicode_escape = re.compile(TokenMacros.unicode_escape, re.I).sub +_sub_newline_escape = re.compile(r"\\(?:\n|\r\n|\r|\f)").sub + +# Same as r'\1', but faster on CPython +_replace_simple = operator.methodcaller("group", 1) + + +def _replace_unicode(match: "re.Match[str]") -> str: + codepoint = int(match.group(1), 16) + if codepoint > sys.maxunicode: + codepoint = 0xFFFD + return chr(codepoint) + + +def unescape_ident(value: str) -> str: + value = _sub_unicode_escape(_replace_unicode, value) + value = _sub_simple_escape(_replace_simple, value) + return value + + +def tokenize(s: str) -> Iterator[Token]: + pos = 0 + len_s = len(s) + while pos < len_s: + match = _match_whitespace(s, pos=pos) + if match: + yield Token("S", " ", pos) + pos = match.end() + continue + + match = _match_ident(s, pos=pos) + if match: + value = _sub_simple_escape( + _replace_simple, _sub_unicode_escape(_replace_unicode, match.group()) + ) + yield Token("IDENT", value, pos) + pos = match.end() + continue + + match = _match_hash(s, pos=pos) + if match: + value = _sub_simple_escape( + _replace_simple, _sub_unicode_escape(_replace_unicode, match.group()[1:]) + ) + yield Token("HASH", value, pos) + pos = match.end() + continue + + quote = s[pos] + if quote in _match_string_by_quote: + match = _match_string_by_quote[quote](s, pos=pos + 1) + assert match, "Should have found at least an empty match" + end_pos = match.end() + if end_pos == len_s: + raise SelectorSyntaxError("Unclosed string at %s" % pos) + if s[end_pos] != quote: + raise SelectorSyntaxError("Invalid string at %s" % pos) + value = _sub_simple_escape( + _replace_simple, + _sub_unicode_escape(_replace_unicode, _sub_newline_escape("", match.group())), + ) + yield Token("STRING", value, pos) + pos = end_pos + 1 + continue + + match = _match_number(s, pos=pos) + if match: + value = match.group() + yield Token("NUMBER", value, pos) + pos = match.end() + continue + + pos2 = pos + 2 + if s[pos:pos2] == "/*": + pos = s.find("*/", pos2) + if pos == -1: + pos = len_s + else: + pos += 2 + continue + + yield Token("DELIM", s[pos], pos) + pos += 1 + + assert pos == len_s + yield EOFToken(pos) + + +class TokenStream: + def __init__(self, tokens: Iterable[Token], source: Optional[str] = None) -> None: + self.used: List[Token] = [] + self.tokens = iter(tokens) + self.source = source + self.peeked: Optional[Token] = None + self._peeking = False + self.next_token = self.tokens.__next__ + + def next(self) -> Token: + if self._peeking: + self._peeking = False + self.used.append(typing.cast(Token, self.peeked)) + return typing.cast(Token, self.peeked) + else: + next = self.next_token() + self.used.append(next) + return next + + def peek(self) -> Token: + if not self._peeking: + self.peeked = self.next_token() + self._peeking = True + return typing.cast(Token, self.peeked) + + def next_ident(self) -> str: + next = self.next() + if next.type != "IDENT": + raise SelectorSyntaxError("Expected ident, got %s" % (next,)) + return typing.cast(str, next.value) + + def next_ident_or_star(self) -> Optional[str]: + next = self.next() + if next.type == "IDENT": + return next.value + elif next == ("DELIM", "*"): + return None + else: + raise SelectorSyntaxError("Expected ident or '*', got %s" % (next,)) + + def skip_whitespace(self) -> None: + peek = self.peek() + if peek.type == "S": + self.next() diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/cssselect/py.typed b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/cssselect/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/cssselect/xpath.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/cssselect/xpath.py new file mode 100644 index 0000000..fd28c47 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/cssselect/xpath.py @@ -0,0 +1,889 @@ +# -*- coding: utf-8 -*- +""" + cssselect.xpath + =============== + + Translation of parsed CSS selectors to XPath expressions. + + + :copyright: (c) 2007-2012 Ian Bicking and contributors. + See AUTHORS for more details. + :license: BSD, see LICENSE for more details. + +""" + +import re +import typing +import warnings +from typing import Optional + +from cssselect.parser import ( + parse, + parse_series, + PseudoElement, + Selector, + SelectorError, + Tree, + Element, + Hash, + Class, + Function, + Pseudo, + Attrib, + Negation, + Relation, + Matching, + SpecificityAdjustment, + CombinedSelector, +) + + +@typing.no_type_check +def _unicode_safe_getattr(obj, name, default=None): + warnings.warn( + "_unicode_safe_getattr is deprecated and will be removed in the" + " next release, use getattr() instead", + DeprecationWarning, + stacklevel=2, + ) + return getattr(obj, name, default) + + +class ExpressionError(SelectorError, RuntimeError): + """Unknown or unsupported selector (eg. pseudo-class).""" + + +#### XPath Helpers + + +class XPathExpr: + def __init__( + self, path: str = "", element: str = "*", condition: str = "", star_prefix: bool = False + ) -> None: + self.path = path + self.element = element + self.condition = condition + + def __str__(self) -> str: + path = str(self.path) + str(self.element) + if self.condition: + path += "[%s]" % self.condition + return path + + def __repr__(self) -> str: + return "%s[%s]" % (self.__class__.__name__, self) + + def add_condition(self, condition: str, conjuction: str = "and") -> "XPathExpr": + if self.condition: + self.condition = "(%s) %s (%s)" % (self.condition, conjuction, condition) + else: + self.condition = condition + return self + + def add_name_test(self) -> None: + if self.element == "*": + # We weren't doing a test anyway + return + self.add_condition("name() = %s" % GenericTranslator.xpath_literal(self.element)) + self.element = "*" + + def add_star_prefix(self) -> None: + """ + Append '*/' to the path to keep the context constrained + to a single parent. + """ + self.path += "*/" + + def join( + self, + combiner: str, + other: "XPathExpr", + closing_combiner: Optional[str] = None, + has_inner_condition: bool = False, + ) -> "XPathExpr": + path = str(self) + combiner + # Any "star prefix" is redundant when joining. + if other.path != "*/": + path += other.path + self.path = path + if not has_inner_condition: + self.element = other.element + closing_combiner if closing_combiner else other.element + self.condition = other.condition + else: + self.element = other.element + if other.condition: + self.element += "[" + other.condition + "]" + if closing_combiner: + self.element += closing_combiner + return self + + +split_at_single_quotes = re.compile("('+)").split + +# The spec is actually more permissive than that, but don’t bother. +# This is just for the fast path. +# http://www.w3.org/TR/REC-xml/#NT-NameStartChar +is_safe_name = re.compile("^[a-zA-Z_][a-zA-Z0-9_.-]*$").match + +# Test that the string is not empty and does not contain whitespace +is_non_whitespace = re.compile(r"^[^ \t\r\n\f]+$").match + + +#### Translation + + +class GenericTranslator: + """ + Translator for "generic" XML documents. + + Everything is case-sensitive, no assumption is made on the meaning + of element names and attribute names. + + """ + + #### + #### HERE BE DRAGONS + #### + #### You are welcome to hook into this to change some behavior, + #### but do so at your own risks. + #### Until it has received a lot more work and review, + #### I reserve the right to change this API in backward-incompatible ways + #### with any minor version of cssselect. + #### See https://github.com/scrapy/cssselect/pull/22 + #### -- Simon Sapin. + #### + + combinator_mapping = { + " ": "descendant", + ">": "child", + "+": "direct_adjacent", + "~": "indirect_adjacent", + } + + attribute_operator_mapping = { + "exists": "exists", + "=": "equals", + "~=": "includes", + "|=": "dashmatch", + "^=": "prefixmatch", + "$=": "suffixmatch", + "*=": "substringmatch", + "!=": "different", # XXX Not in Level 3 but meh + } + + #: The attribute used for ID selectors depends on the document language: + #: http://www.w3.org/TR/selectors/#id-selectors + id_attribute = "id" + + #: The attribute used for ``:lang()`` depends on the document language: + #: http://www.w3.org/TR/selectors/#lang-pseudo + lang_attribute = "xml:lang" + + #: The case sensitivity of document language element names, + #: attribute names, and attribute values in selectors depends + #: on the document language. + #: http://www.w3.org/TR/selectors/#casesens + #: + #: When a document language defines one of these as case-insensitive, + #: cssselect assumes that the document parser makes the parsed values + #: lower-case. Making the selector lower-case too makes the comparaison + #: case-insensitive. + #: + #: In HTML, element names and attributes names (but not attribute values) + #: are case-insensitive. All of lxml.html, html5lib, BeautifulSoup4 + #: and HTMLParser make them lower-case in their parse result, so + #: the assumption holds. + lower_case_element_names = False + lower_case_attribute_names = False + lower_case_attribute_values = False + + # class used to represent and xpath expression + xpathexpr_cls = XPathExpr + + def css_to_xpath(self, css: str, prefix: str = "descendant-or-self::") -> str: + """Translate a *group of selectors* to XPath. + + Pseudo-elements are not supported here since XPath only knows + about "real" elements. + + :param css: + A *group of selectors* as a string. + :param prefix: + This string is prepended to the XPath expression for each selector. + The default makes selectors scoped to the context node’s subtree. + :raises: + :class:`~cssselect.SelectorSyntaxError` on invalid selectors, + :class:`ExpressionError` on unknown/unsupported selectors, + including pseudo-elements. + :returns: + The equivalent XPath 1.0 expression as a string. + + """ + return " | ".join( + self.selector_to_xpath(selector, prefix, translate_pseudo_elements=True) + for selector in parse(css) + ) + + def selector_to_xpath( + self, + selector: Selector, + prefix: str = "descendant-or-self::", + translate_pseudo_elements: bool = False, + ) -> str: + """Translate a parsed selector to XPath. + + + :param selector: + A parsed :class:`Selector` object. + :param prefix: + This string is prepended to the resulting XPath expression. + The default makes selectors scoped to the context node’s subtree. + :param translate_pseudo_elements: + Unless this is set to ``True`` (as :meth:`css_to_xpath` does), + the :attr:`~Selector.pseudo_element` attribute of the selector + is ignored. + It is the caller's responsibility to reject selectors + with pseudo-elements, or to account for them somehow. + :raises: + :class:`ExpressionError` on unknown/unsupported selectors. + :returns: + The equivalent XPath 1.0 expression as a string. + + """ + tree = getattr(selector, "parsed_tree", None) + if not tree: + raise TypeError("Expected a parsed selector, got %r" % (selector,)) + xpath = self.xpath(tree) + assert isinstance(xpath, self.xpathexpr_cls) # help debug a missing 'return' + if translate_pseudo_elements and selector.pseudo_element: + xpath = self.xpath_pseudo_element(xpath, selector.pseudo_element) + return (prefix or "") + str(xpath) + + def xpath_pseudo_element(self, xpath: XPathExpr, pseudo_element: PseudoElement) -> XPathExpr: + """Translate a pseudo-element. + + Defaults to not supporting pseudo-elements at all, + but can be overridden by sub-classes. + + """ + raise ExpressionError("Pseudo-elements are not supported.") + + @staticmethod + def xpath_literal(s: str) -> str: + s = str(s) + if "'" not in s: + s = "'%s'" % s + elif '"' not in s: + s = '"%s"' % s + else: + s = "concat(%s)" % ",".join( + [ + (("'" in part) and '"%s"' or "'%s'") % part + for part in split_at_single_quotes(s) + if part + ] + ) + return s + + def xpath(self, parsed_selector: Tree) -> XPathExpr: + """Translate any parsed selector object.""" + type_name = type(parsed_selector).__name__ + method = getattr(self, "xpath_%s" % type_name.lower(), None) + if method is None: + raise ExpressionError("%s is not supported." % type_name) + return typing.cast(XPathExpr, method(parsed_selector)) + + # Dispatched by parsed object type + + def xpath_combinedselector(self, combined: CombinedSelector) -> XPathExpr: + """Translate a combined selector.""" + combinator = self.combinator_mapping[combined.combinator] + method = getattr(self, "xpath_%s_combinator" % combinator) + return typing.cast( + XPathExpr, method(self.xpath(combined.selector), self.xpath(combined.subselector)) + ) + + def xpath_negation(self, negation: Negation) -> XPathExpr: + xpath = self.xpath(negation.selector) + sub_xpath = self.xpath(negation.subselector) + sub_xpath.add_name_test() + if sub_xpath.condition: + return xpath.add_condition("not(%s)" % sub_xpath.condition) + else: + return xpath.add_condition("0") + + def xpath_relation(self, relation: Relation) -> XPathExpr: + xpath = self.xpath(relation.selector) + combinator = relation.combinator + subselector = relation.subselector + right = self.xpath(subselector.parsed_tree) + method = getattr( + self, + "xpath_relation_%s_combinator" + % self.combinator_mapping[typing.cast(str, combinator.value)], + ) + return typing.cast(XPathExpr, method(xpath, right)) + + def xpath_matching(self, matching: Matching) -> XPathExpr: + xpath = self.xpath(matching.selector) + exprs = [self.xpath(selector) for selector in matching.selector_list] + for e in exprs: + e.add_name_test() + if e.condition: + xpath.add_condition(e.condition, "or") + return xpath + + def xpath_specificityadjustment(self, matching: SpecificityAdjustment) -> XPathExpr: + xpath = self.xpath(matching.selector) + exprs = [self.xpath(selector) for selector in matching.selector_list] + for e in exprs: + e.add_name_test() + if e.condition: + xpath.add_condition(e.condition, "or") + return xpath + + def xpath_function(self, function: Function) -> XPathExpr: + """Translate a functional pseudo-class.""" + method_name = "xpath_%s_function" % function.name.replace("-", "_") + method = getattr(self, method_name, None) + if not method: + raise ExpressionError("The pseudo-class :%s() is unknown" % function.name) + return typing.cast(XPathExpr, method(self.xpath(function.selector), function)) + + def xpath_pseudo(self, pseudo: Pseudo) -> XPathExpr: + """Translate a pseudo-class.""" + method_name = "xpath_%s_pseudo" % pseudo.ident.replace("-", "_") + method = getattr(self, method_name, None) + if not method: + # TODO: better error message for pseudo-elements? + raise ExpressionError("The pseudo-class :%s is unknown" % pseudo.ident) + return typing.cast(XPathExpr, method(self.xpath(pseudo.selector))) + + def xpath_attrib(self, selector: Attrib) -> XPathExpr: + """Translate an attribute selector.""" + operator = self.attribute_operator_mapping[selector.operator] + method = getattr(self, "xpath_attrib_%s" % operator) + if self.lower_case_attribute_names: + name = selector.attrib.lower() + else: + name = selector.attrib + safe = is_safe_name(name) + if selector.namespace: + name = "%s:%s" % (selector.namespace, name) + safe = safe and is_safe_name(selector.namespace) + if safe: + attrib = "@" + name + else: + attrib = "attribute::*[name() = %s]" % self.xpath_literal(name) + if selector.value is None: + value = None + elif self.lower_case_attribute_values: + value = typing.cast(str, selector.value.value).lower() + else: + value = selector.value.value + return typing.cast(XPathExpr, method(self.xpath(selector.selector), attrib, value)) + + def xpath_class(self, class_selector: Class) -> XPathExpr: + """Translate a class selector.""" + # .foo is defined as [class~=foo] in the spec. + xpath = self.xpath(class_selector.selector) + return self.xpath_attrib_includes(xpath, "@class", class_selector.class_name) + + def xpath_hash(self, id_selector: Hash) -> XPathExpr: + """Translate an ID selector.""" + xpath = self.xpath(id_selector.selector) + return self.xpath_attrib_equals(xpath, "@id", id_selector.id) + + def xpath_element(self, selector: Element) -> XPathExpr: + """Translate a type or universal selector.""" + element = selector.element + if not element: + element = "*" + safe = True + else: + safe = bool(is_safe_name(element)) + if self.lower_case_element_names: + element = element.lower() + if selector.namespace: + # Namespace prefixes are case-sensitive. + # http://www.w3.org/TR/css3-namespace/#prefixes + element = "%s:%s" % (selector.namespace, element) + safe = safe and bool(is_safe_name(selector.namespace)) + xpath = self.xpathexpr_cls(element=element) + if not safe: + xpath.add_name_test() + return xpath + + # CombinedSelector: dispatch by combinator + + def xpath_descendant_combinator(self, left: XPathExpr, right: XPathExpr) -> XPathExpr: + """right is a child, grand-child or further descendant of left""" + return left.join("/descendant-or-self::*/", right) + + def xpath_child_combinator(self, left: XPathExpr, right: XPathExpr) -> XPathExpr: + """right is an immediate child of left""" + return left.join("/", right) + + def xpath_direct_adjacent_combinator(self, left: XPathExpr, right: XPathExpr) -> XPathExpr: + """right is a sibling immediately after left""" + xpath = left.join("/following-sibling::", right) + xpath.add_name_test() + return xpath.add_condition("position() = 1") + + def xpath_indirect_adjacent_combinator(self, left: XPathExpr, right: XPathExpr) -> XPathExpr: + """right is a sibling after left, immediately or not""" + return left.join("/following-sibling::", right) + + def xpath_relation_descendant_combinator(self, left: XPathExpr, right: XPathExpr) -> XPathExpr: + """right is a child, grand-child or further descendant of left; select left""" + return left.join("[descendant::", right, closing_combiner="]", has_inner_condition=True) + + def xpath_relation_child_combinator(self, left: XPathExpr, right: XPathExpr) -> XPathExpr: + """right is an immediate child of left; select left""" + return left.join("[./", right, closing_combiner="]") + + def xpath_relation_direct_adjacent_combinator( + self, left: XPathExpr, right: XPathExpr + ) -> XPathExpr: + """right is a sibling immediately after left; select left""" + xpath = left.add_condition( + "following-sibling::*[(name() = '{}') and (position() = 1)]".format(right.element) + ) + return xpath + + def xpath_relation_indirect_adjacent_combinator( + self, left: XPathExpr, right: XPathExpr + ) -> XPathExpr: + """right is a sibling after left, immediately or not; select left""" + return left.join("[following-sibling::", right, closing_combiner="]") + + # Function: dispatch by function/pseudo-class name + + def xpath_nth_child_function( + self, xpath: XPathExpr, function: Function, last: bool = False, add_name_test: bool = True + ) -> XPathExpr: + try: + a, b = parse_series(function.arguments) + except ValueError: + raise ExpressionError("Invalid series: '%r'" % function.arguments) + + # From https://www.w3.org/TR/css3-selectors/#structural-pseudos: + # + # :nth-child(an+b) + # an+b-1 siblings before + # + # :nth-last-child(an+b) + # an+b-1 siblings after + # + # :nth-of-type(an+b) + # an+b-1 siblings with the same expanded element name before + # + # :nth-last-of-type(an+b) + # an+b-1 siblings with the same expanded element name after + # + # So, + # for :nth-child and :nth-of-type + # + # count(preceding-sibling::) = an+b-1 + # + # for :nth-last-child and :nth-last-of-type + # + # count(following-sibling::) = an+b-1 + # + # therefore, + # count(...) - (b-1) ≡ 0 (mod a) + # + # if a == 0: + # ~~~~~~~~~~ + # count(...) = b-1 + # + # if a < 0: + # ~~~~~~~~~ + # count(...) - b +1 <= 0 + # -> count(...) <= b-1 + # + # if a > 0: + # ~~~~~~~~~ + # count(...) - b +1 >= 0 + # -> count(...) >= b-1 + + # work with b-1 instead + b_min_1 = b - 1 + + # early-exit condition 1: + # ~~~~~~~~~~~~~~~~~~~~~~~ + # for a == 1, nth-*(an+b) means n+b-1 siblings before/after, + # and since n ∈ {0, 1, 2, ...}, if b-1<=0, + # there is always an "n" matching any number of siblings (maybe none) + if a == 1 and b_min_1 <= 0: + return xpath + + # early-exit condition 2: + # ~~~~~~~~~~~~~~~~~~~~~~~ + # an+b-1 siblings with a<0 and (b-1)<0 is not possible + if a < 0 and b_min_1 < 0: + return xpath.add_condition("0") + + # `add_name_test` boolean is inverted and somewhat counter-intuitive: + # + # nth_of_type() calls nth_child(add_name_test=False) + if add_name_test: + nodetest = "*" + else: + nodetest = "%s" % xpath.element + + # count siblings before or after the element + if not last: + siblings_count = "count(preceding-sibling::%s)" % nodetest + else: + siblings_count = "count(following-sibling::%s)" % nodetest + + # special case of fixed position: nth-*(0n+b) + # if a == 0: + # ~~~~~~~~~~ + # count(***-sibling::***) = b-1 + if a == 0: + return xpath.add_condition("%s = %s" % (siblings_count, b_min_1)) + + expressions = [] + + if a > 0: + # siblings count, an+b-1, is always >= 0, + # so if a>0, and (b-1)<=0, an "n" exists to satisfy this, + # therefore, the predicate is only interesting if (b-1)>0 + if b_min_1 > 0: + expressions.append("%s >= %s" % (siblings_count, b_min_1)) + else: + # if a<0, and (b-1)<0, no "n" satisfies this, + # this is tested above as an early exist condition + # otherwise, + expressions.append("%s <= %s" % (siblings_count, b_min_1)) + + # operations modulo 1 or -1 are simpler, one only needs to verify: + # + # - either: + # count(***-sibling::***) - (b-1) = n = 0, 1, 2, 3, etc., + # i.e. count(***-sibling::***) >= (b-1) + # + # - or: + # count(***-sibling::***) - (b-1) = -n = 0, -1, -2, -3, etc., + # i.e. count(***-sibling::***) <= (b-1) + # we we just did above. + # + if abs(a) != 1: + # count(***-sibling::***) - (b-1) ≡ 0 (mod a) + left = siblings_count + + # apply "modulo a" on 2nd term, -(b-1), + # to simplify things like "(... +6) % -3", + # and also make it positive with |a| + b_neg = (-b_min_1) % abs(a) + + if b_neg != 0: + b_neg_as_str = "+%s" % b_neg + left = "(%s %s)" % (left, b_neg_as_str) + + expressions.append("%s mod %s = 0" % (left, a)) + + if len(expressions) > 1: + template = "(%s)" + else: + template = "%s" + xpath.add_condition(" and ".join(template % expression for expression in expressions)) + return xpath + + def xpath_nth_last_child_function(self, xpath: XPathExpr, function: Function) -> XPathExpr: + return self.xpath_nth_child_function(xpath, function, last=True) + + def xpath_nth_of_type_function(self, xpath: XPathExpr, function: Function) -> XPathExpr: + if xpath.element == "*": + raise ExpressionError("*:nth-of-type() is not implemented") + return self.xpath_nth_child_function(xpath, function, add_name_test=False) + + def xpath_nth_last_of_type_function(self, xpath: XPathExpr, function: Function) -> XPathExpr: + if xpath.element == "*": + raise ExpressionError("*:nth-of-type() is not implemented") + return self.xpath_nth_child_function(xpath, function, last=True, add_name_test=False) + + def xpath_contains_function(self, xpath: XPathExpr, function: Function) -> XPathExpr: + # Defined there, removed in later drafts: + # http://www.w3.org/TR/2001/CR-css3-selectors-20011113/#content-selectors + if function.argument_types() not in (["STRING"], ["IDENT"]): + raise ExpressionError( + "Expected a single string or ident for :contains(), got %r" % function.arguments + ) + value = typing.cast(str, function.arguments[0].value) + return xpath.add_condition("contains(., %s)" % self.xpath_literal(value)) + + def xpath_lang_function(self, xpath: XPathExpr, function: Function) -> XPathExpr: + if function.argument_types() not in (["STRING"], ["IDENT"]): + raise ExpressionError( + "Expected a single string or ident for :lang(), got %r" % function.arguments + ) + value = typing.cast(str, function.arguments[0].value) + return xpath.add_condition("lang(%s)" % (self.xpath_literal(value))) + + # Pseudo: dispatch by pseudo-class name + + def xpath_root_pseudo(self, xpath: XPathExpr) -> XPathExpr: + return xpath.add_condition("not(parent::*)") + + # CSS immediate children (CSS ":scope > div" to XPath "child::div" or "./div") + # Works only at the start of a selector + # Needed to get immediate children of a processed selector in Scrapy + # for product in response.css('.product'): + # description = product.css(':scope > div::text').get() + def xpath_scope_pseudo(self, xpath: XPathExpr) -> XPathExpr: + return xpath.add_condition("1") + + def xpath_first_child_pseudo(self, xpath: XPathExpr) -> XPathExpr: + return xpath.add_condition("count(preceding-sibling::*) = 0") + + def xpath_last_child_pseudo(self, xpath: XPathExpr) -> XPathExpr: + return xpath.add_condition("count(following-sibling::*) = 0") + + def xpath_first_of_type_pseudo(self, xpath: XPathExpr) -> XPathExpr: + if xpath.element == "*": + raise ExpressionError("*:first-of-type is not implemented") + return xpath.add_condition("count(preceding-sibling::%s) = 0" % xpath.element) + + def xpath_last_of_type_pseudo(self, xpath: XPathExpr) -> XPathExpr: + if xpath.element == "*": + raise ExpressionError("*:last-of-type is not implemented") + return xpath.add_condition("count(following-sibling::%s) = 0" % xpath.element) + + def xpath_only_child_pseudo(self, xpath: XPathExpr) -> XPathExpr: + return xpath.add_condition("count(parent::*/child::*) = 1") + + def xpath_only_of_type_pseudo(self, xpath: XPathExpr) -> XPathExpr: + if xpath.element == "*": + raise ExpressionError("*:only-of-type is not implemented") + return xpath.add_condition("count(parent::*/child::%s) = 1" % xpath.element) + + def xpath_empty_pseudo(self, xpath: XPathExpr) -> XPathExpr: + return xpath.add_condition("not(*) and not(string-length())") + + def pseudo_never_matches(self, xpath: XPathExpr) -> XPathExpr: + """Common implementation for pseudo-classes that never match.""" + return xpath.add_condition("0") + + xpath_link_pseudo = pseudo_never_matches + xpath_visited_pseudo = pseudo_never_matches + xpath_hover_pseudo = pseudo_never_matches + xpath_active_pseudo = pseudo_never_matches + xpath_focus_pseudo = pseudo_never_matches + xpath_target_pseudo = pseudo_never_matches + xpath_enabled_pseudo = pseudo_never_matches + xpath_disabled_pseudo = pseudo_never_matches + xpath_checked_pseudo = pseudo_never_matches + + # Attrib: dispatch by attribute operator + + def xpath_attrib_exists(self, xpath: XPathExpr, name: str, value: Optional[str]) -> XPathExpr: + assert not value + xpath.add_condition(name) + return xpath + + def xpath_attrib_equals(self, xpath: XPathExpr, name: str, value: Optional[str]) -> XPathExpr: + assert value is not None + xpath.add_condition("%s = %s" % (name, self.xpath_literal(value))) + return xpath + + def xpath_attrib_different( + self, xpath: XPathExpr, name: str, value: Optional[str] + ) -> XPathExpr: + assert value is not None + # FIXME: this seems like a weird hack... + if value: + xpath.add_condition("not(%s) or %s != %s" % (name, name, self.xpath_literal(value))) + else: + xpath.add_condition("%s != %s" % (name, self.xpath_literal(value))) + return xpath + + def xpath_attrib_includes( + self, xpath: XPathExpr, name: str, value: Optional[str] + ) -> XPathExpr: + if value and is_non_whitespace(value): + xpath.add_condition( + "%s and contains(concat(' ', normalize-space(%s), ' '), %s)" + % (name, name, self.xpath_literal(" " + value + " ")) + ) + else: + xpath.add_condition("0") + return xpath + + def xpath_attrib_dashmatch( + self, xpath: XPathExpr, name: str, value: Optional[str] + ) -> XPathExpr: + assert value is not None + # Weird, but true... + xpath.add_condition( + "%s and (%s = %s or starts-with(%s, %s))" + % (name, name, self.xpath_literal(value), name, self.xpath_literal(value + "-")) + ) + return xpath + + def xpath_attrib_prefixmatch( + self, xpath: XPathExpr, name: str, value: Optional[str] + ) -> XPathExpr: + if value: + xpath.add_condition( + "%s and starts-with(%s, %s)" % (name, name, self.xpath_literal(value)) + ) + else: + xpath.add_condition("0") + return xpath + + def xpath_attrib_suffixmatch( + self, xpath: XPathExpr, name: str, value: Optional[str] + ) -> XPathExpr: + if value: + # Oddly there is a starts-with in XPath 1.0, but not ends-with + xpath.add_condition( + "%s and substring(%s, string-length(%s)-%s) = %s" + % (name, name, name, len(value) - 1, self.xpath_literal(value)) + ) + else: + xpath.add_condition("0") + return xpath + + def xpath_attrib_substringmatch( + self, xpath: XPathExpr, name: str, value: Optional[str] + ) -> XPathExpr: + if value: + # Attribute selectors are case sensitive + xpath.add_condition( + "%s and contains(%s, %s)" % (name, name, self.xpath_literal(value)) + ) + else: + xpath.add_condition("0") + return xpath + + +class HTMLTranslator(GenericTranslator): + """ + Translator for (X)HTML documents. + + Has a more useful implementation of some pseudo-classes based on + HTML-specific element names and attribute names, as described in + the `HTML5 specification`_. It assumes no-quirks mode. + The API is the same as :class:`GenericTranslator`. + + .. _HTML5 specification: http://www.w3.org/TR/html5/links.html#selectors + + :param xhtml: + If false (the default), element names and attribute names + are case-insensitive. + + """ + + lang_attribute = "lang" + + def __init__(self, xhtml: bool = False) -> None: + self.xhtml = xhtml # Might be useful for sub-classes? + if not xhtml: + # See their definition in GenericTranslator. + self.lower_case_element_names = True + self.lower_case_attribute_names = True + + def xpath_checked_pseudo(self, xpath: XPathExpr) -> XPathExpr: # type: ignore + # FIXME: is this really all the elements? + return xpath.add_condition( + "(@selected and name(.) = 'option') or " + "(@checked " + "and (name(.) = 'input' or name(.) = 'command')" + "and (@type = 'checkbox' or @type = 'radio'))" + ) + + def xpath_lang_function(self, xpath: XPathExpr, function: Function) -> XPathExpr: + if function.argument_types() not in (["STRING"], ["IDENT"]): + raise ExpressionError( + "Expected a single string or ident for :lang(), got %r" % function.arguments + ) + value = function.arguments[0].value + assert value + return xpath.add_condition( + "ancestor-or-self::*[@lang][1][starts-with(concat(" + # XPath 1.0 has no lower-case function... + "translate(@%s, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', " + "'abcdefghijklmnopqrstuvwxyz'), " + "'-'), %s)]" % (self.lang_attribute, self.xpath_literal(value.lower() + "-")) + ) + + def xpath_link_pseudo(self, xpath: XPathExpr) -> XPathExpr: # type: ignore + return xpath.add_condition( + "@href and (name(.) = 'a' or name(.) = 'link' or name(.) = 'area')" + ) + + # Links are never visited, the implementation for :visited is the same + # as in GenericTranslator + + def xpath_disabled_pseudo(self, xpath: XPathExpr) -> XPathExpr: # type: ignore + # http://www.w3.org/TR/html5/section-index.html#attributes-1 + return xpath.add_condition( + """ + ( + @disabled and + ( + (name(.) = 'input' and @type != 'hidden') or + name(.) = 'button' or + name(.) = 'select' or + name(.) = 'textarea' or + name(.) = 'command' or + name(.) = 'fieldset' or + name(.) = 'optgroup' or + name(.) = 'option' + ) + ) or ( + ( + (name(.) = 'input' and @type != 'hidden') or + name(.) = 'button' or + name(.) = 'select' or + name(.) = 'textarea' + ) + and ancestor::fieldset[@disabled] + ) + """ + ) + # FIXME: in the second half, add "and is not a descendant of that + # fieldset element's first legend element child, if any." + + def xpath_enabled_pseudo(self, xpath: XPathExpr) -> XPathExpr: # type: ignore + # http://www.w3.org/TR/html5/section-index.html#attributes-1 + return xpath.add_condition( + """ + ( + @href and ( + name(.) = 'a' or + name(.) = 'link' or + name(.) = 'area' + ) + ) or ( + ( + name(.) = 'command' or + name(.) = 'fieldset' or + name(.) = 'optgroup' + ) + and not(@disabled) + ) or ( + ( + (name(.) = 'input' and @type != 'hidden') or + name(.) = 'button' or + name(.) = 'select' or + name(.) = 'textarea' or + name(.) = 'keygen' + ) + and not (@disabled or ancestor::fieldset[@disabled]) + ) or ( + name(.) = 'option' and not( + @disabled or ancestor::optgroup[@disabled] + ) + ) + """ + ) + # FIXME: ... or "li elements that are children of menu elements, + # and that have a child element that defines a command, if the first + # such element's Disabled State facet is false (not disabled)". + # FIXME: after ancestor::fieldset[@disabled], add "and is not a + # descendant of that fieldset element's first legend element child, + # if any." diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/__init__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/__init__.py new file mode 100644 index 0000000..499eb9c --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/__init__.py @@ -0,0 +1,8 @@ +import logging +from fontTools.misc.loggingTools import configLogger + +log = logging.getLogger(__name__) + +version = __version__ = "4.40.1.dev0" + +__all__ = ["version", "log", "configLogger"] diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/__main__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/__main__.py new file mode 100644 index 0000000..7c74ad3 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/__main__.py @@ -0,0 +1,35 @@ +import sys + + +def main(args=None): + if args is None: + args = sys.argv[1:] + + # TODO Handle library-wide options. Eg.: + # --unicodedata + # --verbose / other logging stuff + + # TODO Allow a way to run arbitrary modules? Useful for setting + # library-wide options and calling another library. Eg.: + # + # $ fonttools --unicodedata=... fontmake ... + # + # This allows for a git-like command where thirdparty commands + # can be added. Should we just try importing the fonttools + # module first and try without if it fails? + + if len(sys.argv) < 2: + sys.argv.append("help") + if sys.argv[1] == "-h" or sys.argv[1] == "--help": + sys.argv[1] = "help" + mod = "fontTools." + sys.argv[1] + sys.argv[1] = sys.argv[0] + " " + sys.argv[1] + del sys.argv[0] + + import runpy + + runpy.run_module(mod, run_name="__main__") + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/afmLib.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/afmLib.py new file mode 100644 index 0000000..198559d --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/afmLib.py @@ -0,0 +1,440 @@ +"""Module for reading and writing AFM (Adobe Font Metrics) files. + +Note that this has been designed to read in AFM files generated by Fontographer +and has not been tested on many other files. In particular, it does not +implement the whole Adobe AFM specification [#f1]_ but, it should read most +"common" AFM files. + +Here is an example of using `afmLib` to read, modify and write an AFM file: + + >>> from fontTools.afmLib import AFM + >>> f = AFM("Tests/afmLib/data/TestAFM.afm") + >>> + >>> # Accessing a pair gets you the kern value + >>> f[("V","A")] + -60 + >>> + >>> # Accessing a glyph name gets you metrics + >>> f["A"] + (65, 668, (8, -25, 660, 666)) + >>> # (charnum, width, bounding box) + >>> + >>> # Accessing an attribute gets you metadata + >>> f.FontName + 'TestFont-Regular' + >>> f.FamilyName + 'TestFont' + >>> f.Weight + 'Regular' + >>> f.XHeight + 500 + >>> f.Ascender + 750 + >>> + >>> # Attributes and items can also be set + >>> f[("A","V")] = -150 # Tighten kerning + >>> f.FontName = "TestFont Squished" + >>> + >>> # And the font written out again (remove the # in front) + >>> #f.write("testfont-squished.afm") + +.. rubric:: Footnotes + +.. [#f1] `Adobe Technote 5004 `_, + Adobe Font Metrics File Format Specification. + +""" + + +import re + +# every single line starts with a "word" +identifierRE = re.compile(r"^([A-Za-z]+).*") + +# regular expression to parse char lines +charRE = re.compile( + r"(-?\d+)" # charnum + r"\s*;\s*WX\s+" # ; WX + r"(-?\d+)" # width + r"\s*;\s*N\s+" # ; N + r"([.A-Za-z0-9_]+)" # charname + r"\s*;\s*B\s+" # ; B + r"(-?\d+)" # left + r"\s+" + r"(-?\d+)" # bottom + r"\s+" + r"(-?\d+)" # right + r"\s+" + r"(-?\d+)" # top + r"\s*;\s*" # ; +) + +# regular expression to parse kerning lines +kernRE = re.compile( + r"([.A-Za-z0-9_]+)" # leftchar + r"\s+" + r"([.A-Za-z0-9_]+)" # rightchar + r"\s+" + r"(-?\d+)" # value + r"\s*" +) + +# regular expressions to parse composite info lines of the form: +# Aacute 2 ; PCC A 0 0 ; PCC acute 182 211 ; +compositeRE = re.compile( + r"([.A-Za-z0-9_]+)" + r"\s+" + r"(\d+)" + r"\s*;\s*" # char name # number of parts +) +componentRE = re.compile( + r"PCC\s+" # PPC + r"([.A-Za-z0-9_]+)" # base char name + r"\s+" + r"(-?\d+)" # x offset + r"\s+" + r"(-?\d+)" # y offset + r"\s*;\s*" +) + +preferredAttributeOrder = [ + "FontName", + "FullName", + "FamilyName", + "Weight", + "ItalicAngle", + "IsFixedPitch", + "FontBBox", + "UnderlinePosition", + "UnderlineThickness", + "Version", + "Notice", + "EncodingScheme", + "CapHeight", + "XHeight", + "Ascender", + "Descender", +] + + +class error(Exception): + pass + + +class AFM(object): + _attrs = None + + _keywords = [ + "StartFontMetrics", + "EndFontMetrics", + "StartCharMetrics", + "EndCharMetrics", + "StartKernData", + "StartKernPairs", + "EndKernPairs", + "EndKernData", + "StartComposites", + "EndComposites", + ] + + def __init__(self, path=None): + """AFM file reader. + + Instantiating an object with a path name will cause the file to be opened, + read, and parsed. Alternatively the path can be left unspecified, and a + file can be parsed later with the :meth:`read` method.""" + self._attrs = {} + self._chars = {} + self._kerning = {} + self._index = {} + self._comments = [] + self._composites = {} + if path is not None: + self.read(path) + + def read(self, path): + """Opens, reads and parses a file.""" + lines = readlines(path) + for line in lines: + if not line.strip(): + continue + m = identifierRE.match(line) + if m is None: + raise error("syntax error in AFM file: " + repr(line)) + + pos = m.regs[1][1] + word = line[:pos] + rest = line[pos:].strip() + if word in self._keywords: + continue + if word == "C": + self.parsechar(rest) + elif word == "KPX": + self.parsekernpair(rest) + elif word == "CC": + self.parsecomposite(rest) + else: + self.parseattr(word, rest) + + def parsechar(self, rest): + m = charRE.match(rest) + if m is None: + raise error("syntax error in AFM file: " + repr(rest)) + things = [] + for fr, to in m.regs[1:]: + things.append(rest[fr:to]) + charname = things[2] + del things[2] + charnum, width, l, b, r, t = (int(thing) for thing in things) + self._chars[charname] = charnum, width, (l, b, r, t) + + def parsekernpair(self, rest): + m = kernRE.match(rest) + if m is None: + raise error("syntax error in AFM file: " + repr(rest)) + things = [] + for fr, to in m.regs[1:]: + things.append(rest[fr:to]) + leftchar, rightchar, value = things + value = int(value) + self._kerning[(leftchar, rightchar)] = value + + def parseattr(self, word, rest): + if word == "FontBBox": + l, b, r, t = [int(thing) for thing in rest.split()] + self._attrs[word] = l, b, r, t + elif word == "Comment": + self._comments.append(rest) + else: + try: + value = int(rest) + except (ValueError, OverflowError): + self._attrs[word] = rest + else: + self._attrs[word] = value + + def parsecomposite(self, rest): + m = compositeRE.match(rest) + if m is None: + raise error("syntax error in AFM file: " + repr(rest)) + charname = m.group(1) + ncomponents = int(m.group(2)) + rest = rest[m.regs[0][1] :] + components = [] + while True: + m = componentRE.match(rest) + if m is None: + raise error("syntax error in AFM file: " + repr(rest)) + basechar = m.group(1) + xoffset = int(m.group(2)) + yoffset = int(m.group(3)) + components.append((basechar, xoffset, yoffset)) + rest = rest[m.regs[0][1] :] + if not rest: + break + assert len(components) == ncomponents + self._composites[charname] = components + + def write(self, path, sep="\r"): + """Writes out an AFM font to the given path.""" + import time + + lines = [ + "StartFontMetrics 2.0", + "Comment Generated by afmLib; at %s" + % (time.strftime("%m/%d/%Y %H:%M:%S", time.localtime(time.time()))), + ] + + # write comments, assuming (possibly wrongly!) they should + # all appear at the top + for comment in self._comments: + lines.append("Comment " + comment) + + # write attributes, first the ones we know about, in + # a preferred order + attrs = self._attrs + for attr in preferredAttributeOrder: + if attr in attrs: + value = attrs[attr] + if attr == "FontBBox": + value = "%s %s %s %s" % value + lines.append(attr + " " + str(value)) + # then write the attributes we don't know about, + # in alphabetical order + items = sorted(attrs.items()) + for attr, value in items: + if attr in preferredAttributeOrder: + continue + lines.append(attr + " " + str(value)) + + # write char metrics + lines.append("StartCharMetrics " + repr(len(self._chars))) + items = [ + (charnum, (charname, width, box)) + for charname, (charnum, width, box) in self._chars.items() + ] + + def myKey(a): + """Custom key function to make sure unencoded chars (-1) + end up at the end of the list after sorting.""" + if a[0] == -1: + a = (0xFFFF,) + a[1:] # 0xffff is an arbitrary large number + return a + + items.sort(key=myKey) + + for charnum, (charname, width, (l, b, r, t)) in items: + lines.append( + "C %d ; WX %d ; N %s ; B %d %d %d %d ;" + % (charnum, width, charname, l, b, r, t) + ) + lines.append("EndCharMetrics") + + # write kerning info + lines.append("StartKernData") + lines.append("StartKernPairs " + repr(len(self._kerning))) + items = sorted(self._kerning.items()) + for (leftchar, rightchar), value in items: + lines.append("KPX %s %s %d" % (leftchar, rightchar, value)) + lines.append("EndKernPairs") + lines.append("EndKernData") + + if self._composites: + composites = sorted(self._composites.items()) + lines.append("StartComposites %s" % len(self._composites)) + for charname, components in composites: + line = "CC %s %s ;" % (charname, len(components)) + for basechar, xoffset, yoffset in components: + line = line + " PCC %s %s %s ;" % (basechar, xoffset, yoffset) + lines.append(line) + lines.append("EndComposites") + + lines.append("EndFontMetrics") + + writelines(path, lines, sep) + + def has_kernpair(self, pair): + """Returns `True` if the given glyph pair (specified as a tuple) exists + in the kerning dictionary.""" + return pair in self._kerning + + def kernpairs(self): + """Returns a list of all kern pairs in the kerning dictionary.""" + return list(self._kerning.keys()) + + def has_char(self, char): + """Returns `True` if the given glyph exists in the font.""" + return char in self._chars + + def chars(self): + """Returns a list of all glyph names in the font.""" + return list(self._chars.keys()) + + def comments(self): + """Returns all comments from the file.""" + return self._comments + + def addComment(self, comment): + """Adds a new comment to the file.""" + self._comments.append(comment) + + def addComposite(self, glyphName, components): + """Specifies that the glyph `glyphName` is made up of the given components. + The components list should be of the following form:: + + [ + (glyphname, xOffset, yOffset), + ... + ] + + """ + self._composites[glyphName] = components + + def __getattr__(self, attr): + if attr in self._attrs: + return self._attrs[attr] + else: + raise AttributeError(attr) + + def __setattr__(self, attr, value): + # all attrs *not* starting with "_" are consider to be AFM keywords + if attr[:1] == "_": + self.__dict__[attr] = value + else: + self._attrs[attr] = value + + def __delattr__(self, attr): + # all attrs *not* starting with "_" are consider to be AFM keywords + if attr[:1] == "_": + try: + del self.__dict__[attr] + except KeyError: + raise AttributeError(attr) + else: + try: + del self._attrs[attr] + except KeyError: + raise AttributeError(attr) + + def __getitem__(self, key): + if isinstance(key, tuple): + # key is a tuple, return the kernpair + return self._kerning[key] + else: + # return the metrics instead + return self._chars[key] + + def __setitem__(self, key, value): + if isinstance(key, tuple): + # key is a tuple, set kernpair + self._kerning[key] = value + else: + # set char metrics + self._chars[key] = value + + def __delitem__(self, key): + if isinstance(key, tuple): + # key is a tuple, del kernpair + del self._kerning[key] + else: + # del char metrics + del self._chars[key] + + def __repr__(self): + if hasattr(self, "FullName"): + return "" % self.FullName + else: + return "" % id(self) + + +def readlines(path): + with open(path, "r", encoding="ascii") as f: + data = f.read() + return data.splitlines() + + +def writelines(path, lines, sep="\r"): + with open(path, "w", encoding="ascii", newline=sep) as f: + f.write("\n".join(lines) + "\n") + + +if __name__ == "__main__": + import EasyDialogs + + path = EasyDialogs.AskFileForOpen() + if path: + afm = AFM(path) + char = "A" + if afm.has_char(char): + print(afm[char]) # print charnum, width and boundingbox + pair = ("A", "V") + if afm.has_kernpair(pair): + print(afm[pair]) # print kerning value for pair + print(afm.Version) # various other afm entries have become attributes + print(afm.Weight) + # afm.comments() returns a list of all Comment lines found in the AFM + print(afm.comments()) + # print afm.chars() + # print afm.kernpairs() + print(afm) + afm.write(path + ".muck") diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/agl.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/agl.py new file mode 100644 index 0000000..d699462 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/agl.py @@ -0,0 +1,5233 @@ +# -*- coding: utf-8 -*- +# The tables below are taken from +# https://github.com/adobe-type-tools/agl-aglfn/raw/4036a9ca80a62f64f9de4f7321a9a045ad0ecfd6/glyphlist.txt +# and +# https://github.com/adobe-type-tools/agl-aglfn/raw/4036a9ca80a62f64f9de4f7321a9a045ad0ecfd6/aglfn.txt +""" +Interface to the Adobe Glyph List + +This module exists to convert glyph names from the Adobe Glyph List +to their Unicode equivalents. Example usage: + + >>> from fontTools.agl import toUnicode + >>> toUnicode("nahiragana") + 'な' + +It also contains two dictionaries, ``UV2AGL`` and ``AGL2UV``, which map from +Unicode codepoints to AGL names and vice versa: + + >>> import fontTools + >>> fontTools.agl.UV2AGL[ord("?")] + 'question' + >>> fontTools.agl.AGL2UV["wcircumflex"] + 373 + +This is used by fontTools when it has to construct glyph names for a font which +doesn't include any (e.g. format 3.0 post tables). +""" + +from fontTools.misc.textTools import tostr +import re + + +_aglText = """\ +# ----------------------------------------------------------- +# Copyright 2002-2019 Adobe (http://www.adobe.com/). +# +# Redistribution and use in source and binary forms, with or +# without modification, are permitted provided that the +# following conditions are met: +# +# Redistributions of source code must retain the above +# copyright notice, this list of conditions and the following +# disclaimer. +# +# Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials +# provided with the distribution. +# +# Neither the name of Adobe nor the names of its contributors +# may be used to endorse or promote products derived from this +# software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ----------------------------------------------------------- +# Name: Adobe Glyph List +# Table version: 2.0 +# Date: September 20, 2002 +# URL: https://github.com/adobe-type-tools/agl-aglfn +# +# Format: two semicolon-delimited fields: +# (1) glyph name--upper/lowercase letters and digits +# (2) Unicode scalar value--four uppercase hexadecimal digits +# +A;0041 +AE;00C6 +AEacute;01FC +AEmacron;01E2 +AEsmall;F7E6 +Aacute;00C1 +Aacutesmall;F7E1 +Abreve;0102 +Abreveacute;1EAE +Abrevecyrillic;04D0 +Abrevedotbelow;1EB6 +Abrevegrave;1EB0 +Abrevehookabove;1EB2 +Abrevetilde;1EB4 +Acaron;01CD +Acircle;24B6 +Acircumflex;00C2 +Acircumflexacute;1EA4 +Acircumflexdotbelow;1EAC +Acircumflexgrave;1EA6 +Acircumflexhookabove;1EA8 +Acircumflexsmall;F7E2 +Acircumflextilde;1EAA +Acute;F6C9 +Acutesmall;F7B4 +Acyrillic;0410 +Adblgrave;0200 +Adieresis;00C4 +Adieresiscyrillic;04D2 +Adieresismacron;01DE +Adieresissmall;F7E4 +Adotbelow;1EA0 +Adotmacron;01E0 +Agrave;00C0 +Agravesmall;F7E0 +Ahookabove;1EA2 +Aiecyrillic;04D4 +Ainvertedbreve;0202 +Alpha;0391 +Alphatonos;0386 +Amacron;0100 +Amonospace;FF21 +Aogonek;0104 +Aring;00C5 +Aringacute;01FA +Aringbelow;1E00 +Aringsmall;F7E5 +Asmall;F761 +Atilde;00C3 +Atildesmall;F7E3 +Aybarmenian;0531 +B;0042 +Bcircle;24B7 +Bdotaccent;1E02 +Bdotbelow;1E04 +Becyrillic;0411 +Benarmenian;0532 +Beta;0392 +Bhook;0181 +Blinebelow;1E06 +Bmonospace;FF22 +Brevesmall;F6F4 +Bsmall;F762 +Btopbar;0182 +C;0043 +Caarmenian;053E +Cacute;0106 +Caron;F6CA +Caronsmall;F6F5 +Ccaron;010C +Ccedilla;00C7 +Ccedillaacute;1E08 +Ccedillasmall;F7E7 +Ccircle;24B8 +Ccircumflex;0108 +Cdot;010A +Cdotaccent;010A +Cedillasmall;F7B8 +Chaarmenian;0549 +Cheabkhasiancyrillic;04BC +Checyrillic;0427 +Chedescenderabkhasiancyrillic;04BE +Chedescendercyrillic;04B6 +Chedieresiscyrillic;04F4 +Cheharmenian;0543 +Chekhakassiancyrillic;04CB +Cheverticalstrokecyrillic;04B8 +Chi;03A7 +Chook;0187 +Circumflexsmall;F6F6 +Cmonospace;FF23 +Coarmenian;0551 +Csmall;F763 +D;0044 +DZ;01F1 +DZcaron;01C4 +Daarmenian;0534 +Dafrican;0189 +Dcaron;010E +Dcedilla;1E10 +Dcircle;24B9 +Dcircumflexbelow;1E12 +Dcroat;0110 +Ddotaccent;1E0A +Ddotbelow;1E0C +Decyrillic;0414 +Deicoptic;03EE +Delta;2206 +Deltagreek;0394 +Dhook;018A +Dieresis;F6CB +DieresisAcute;F6CC +DieresisGrave;F6CD +Dieresissmall;F7A8 +Digammagreek;03DC +Djecyrillic;0402 +Dlinebelow;1E0E +Dmonospace;FF24 +Dotaccentsmall;F6F7 +Dslash;0110 +Dsmall;F764 +Dtopbar;018B +Dz;01F2 +Dzcaron;01C5 +Dzeabkhasiancyrillic;04E0 +Dzecyrillic;0405 +Dzhecyrillic;040F +E;0045 +Eacute;00C9 +Eacutesmall;F7E9 +Ebreve;0114 +Ecaron;011A +Ecedillabreve;1E1C +Echarmenian;0535 +Ecircle;24BA +Ecircumflex;00CA +Ecircumflexacute;1EBE +Ecircumflexbelow;1E18 +Ecircumflexdotbelow;1EC6 +Ecircumflexgrave;1EC0 +Ecircumflexhookabove;1EC2 +Ecircumflexsmall;F7EA +Ecircumflextilde;1EC4 +Ecyrillic;0404 +Edblgrave;0204 +Edieresis;00CB +Edieresissmall;F7EB +Edot;0116 +Edotaccent;0116 +Edotbelow;1EB8 +Efcyrillic;0424 +Egrave;00C8 +Egravesmall;F7E8 +Eharmenian;0537 +Ehookabove;1EBA +Eightroman;2167 +Einvertedbreve;0206 +Eiotifiedcyrillic;0464 +Elcyrillic;041B +Elevenroman;216A +Emacron;0112 +Emacronacute;1E16 +Emacrongrave;1E14 +Emcyrillic;041C +Emonospace;FF25 +Encyrillic;041D +Endescendercyrillic;04A2 +Eng;014A +Enghecyrillic;04A4 +Enhookcyrillic;04C7 +Eogonek;0118 +Eopen;0190 +Epsilon;0395 +Epsilontonos;0388 +Ercyrillic;0420 +Ereversed;018E +Ereversedcyrillic;042D +Escyrillic;0421 +Esdescendercyrillic;04AA +Esh;01A9 +Esmall;F765 +Eta;0397 +Etarmenian;0538 +Etatonos;0389 +Eth;00D0 +Ethsmall;F7F0 +Etilde;1EBC +Etildebelow;1E1A +Euro;20AC +Ezh;01B7 +Ezhcaron;01EE +Ezhreversed;01B8 +F;0046 +Fcircle;24BB +Fdotaccent;1E1E +Feharmenian;0556 +Feicoptic;03E4 +Fhook;0191 +Fitacyrillic;0472 +Fiveroman;2164 +Fmonospace;FF26 +Fourroman;2163 +Fsmall;F766 +G;0047 +GBsquare;3387 +Gacute;01F4 +Gamma;0393 +Gammaafrican;0194 +Gangiacoptic;03EA +Gbreve;011E +Gcaron;01E6 +Gcedilla;0122 +Gcircle;24BC +Gcircumflex;011C +Gcommaaccent;0122 +Gdot;0120 +Gdotaccent;0120 +Gecyrillic;0413 +Ghadarmenian;0542 +Ghemiddlehookcyrillic;0494 +Ghestrokecyrillic;0492 +Gheupturncyrillic;0490 +Ghook;0193 +Gimarmenian;0533 +Gjecyrillic;0403 +Gmacron;1E20 +Gmonospace;FF27 +Grave;F6CE +Gravesmall;F760 +Gsmall;F767 +Gsmallhook;029B +Gstroke;01E4 +H;0048 +H18533;25CF +H18543;25AA +H18551;25AB +H22073;25A1 +HPsquare;33CB +Haabkhasiancyrillic;04A8 +Hadescendercyrillic;04B2 +Hardsigncyrillic;042A +Hbar;0126 +Hbrevebelow;1E2A +Hcedilla;1E28 +Hcircle;24BD +Hcircumflex;0124 +Hdieresis;1E26 +Hdotaccent;1E22 +Hdotbelow;1E24 +Hmonospace;FF28 +Hoarmenian;0540 +Horicoptic;03E8 +Hsmall;F768 +Hungarumlaut;F6CF +Hungarumlautsmall;F6F8 +Hzsquare;3390 +I;0049 +IAcyrillic;042F +IJ;0132 +IUcyrillic;042E +Iacute;00CD +Iacutesmall;F7ED +Ibreve;012C +Icaron;01CF +Icircle;24BE +Icircumflex;00CE +Icircumflexsmall;F7EE +Icyrillic;0406 +Idblgrave;0208 +Idieresis;00CF +Idieresisacute;1E2E +Idieresiscyrillic;04E4 +Idieresissmall;F7EF +Idot;0130 +Idotaccent;0130 +Idotbelow;1ECA +Iebrevecyrillic;04D6 +Iecyrillic;0415 +Ifraktur;2111 +Igrave;00CC +Igravesmall;F7EC +Ihookabove;1EC8 +Iicyrillic;0418 +Iinvertedbreve;020A +Iishortcyrillic;0419 +Imacron;012A +Imacroncyrillic;04E2 +Imonospace;FF29 +Iniarmenian;053B +Iocyrillic;0401 +Iogonek;012E +Iota;0399 +Iotaafrican;0196 +Iotadieresis;03AA +Iotatonos;038A +Ismall;F769 +Istroke;0197 +Itilde;0128 +Itildebelow;1E2C +Izhitsacyrillic;0474 +Izhitsadblgravecyrillic;0476 +J;004A +Jaarmenian;0541 +Jcircle;24BF +Jcircumflex;0134 +Jecyrillic;0408 +Jheharmenian;054B +Jmonospace;FF2A +Jsmall;F76A +K;004B +KBsquare;3385 +KKsquare;33CD +Kabashkircyrillic;04A0 +Kacute;1E30 +Kacyrillic;041A +Kadescendercyrillic;049A +Kahookcyrillic;04C3 +Kappa;039A +Kastrokecyrillic;049E +Kaverticalstrokecyrillic;049C +Kcaron;01E8 +Kcedilla;0136 +Kcircle;24C0 +Kcommaaccent;0136 +Kdotbelow;1E32 +Keharmenian;0554 +Kenarmenian;053F +Khacyrillic;0425 +Kheicoptic;03E6 +Khook;0198 +Kjecyrillic;040C +Klinebelow;1E34 +Kmonospace;FF2B +Koppacyrillic;0480 +Koppagreek;03DE +Ksicyrillic;046E +Ksmall;F76B +L;004C +LJ;01C7 +LL;F6BF +Lacute;0139 +Lambda;039B +Lcaron;013D +Lcedilla;013B +Lcircle;24C1 +Lcircumflexbelow;1E3C +Lcommaaccent;013B +Ldot;013F +Ldotaccent;013F +Ldotbelow;1E36 +Ldotbelowmacron;1E38 +Liwnarmenian;053C +Lj;01C8 +Ljecyrillic;0409 +Llinebelow;1E3A +Lmonospace;FF2C +Lslash;0141 +Lslashsmall;F6F9 +Lsmall;F76C +M;004D +MBsquare;3386 +Macron;F6D0 +Macronsmall;F7AF +Macute;1E3E +Mcircle;24C2 +Mdotaccent;1E40 +Mdotbelow;1E42 +Menarmenian;0544 +Mmonospace;FF2D +Msmall;F76D +Mturned;019C +Mu;039C +N;004E +NJ;01CA +Nacute;0143 +Ncaron;0147 +Ncedilla;0145 +Ncircle;24C3 +Ncircumflexbelow;1E4A +Ncommaaccent;0145 +Ndotaccent;1E44 +Ndotbelow;1E46 +Nhookleft;019D +Nineroman;2168 +Nj;01CB +Njecyrillic;040A +Nlinebelow;1E48 +Nmonospace;FF2E +Nowarmenian;0546 +Nsmall;F76E +Ntilde;00D1 +Ntildesmall;F7F1 +Nu;039D +O;004F +OE;0152 +OEsmall;F6FA +Oacute;00D3 +Oacutesmall;F7F3 +Obarredcyrillic;04E8 +Obarreddieresiscyrillic;04EA +Obreve;014E +Ocaron;01D1 +Ocenteredtilde;019F +Ocircle;24C4 +Ocircumflex;00D4 +Ocircumflexacute;1ED0 +Ocircumflexdotbelow;1ED8 +Ocircumflexgrave;1ED2 +Ocircumflexhookabove;1ED4 +Ocircumflexsmall;F7F4 +Ocircumflextilde;1ED6 +Ocyrillic;041E +Odblacute;0150 +Odblgrave;020C +Odieresis;00D6 +Odieresiscyrillic;04E6 +Odieresissmall;F7F6 +Odotbelow;1ECC +Ogoneksmall;F6FB +Ograve;00D2 +Ogravesmall;F7F2 +Oharmenian;0555 +Ohm;2126 +Ohookabove;1ECE +Ohorn;01A0 +Ohornacute;1EDA +Ohorndotbelow;1EE2 +Ohorngrave;1EDC +Ohornhookabove;1EDE +Ohorntilde;1EE0 +Ohungarumlaut;0150 +Oi;01A2 +Oinvertedbreve;020E +Omacron;014C +Omacronacute;1E52 +Omacrongrave;1E50 +Omega;2126 +Omegacyrillic;0460 +Omegagreek;03A9 +Omegaroundcyrillic;047A +Omegatitlocyrillic;047C +Omegatonos;038F +Omicron;039F +Omicrontonos;038C +Omonospace;FF2F +Oneroman;2160 +Oogonek;01EA +Oogonekmacron;01EC +Oopen;0186 +Oslash;00D8 +Oslashacute;01FE +Oslashsmall;F7F8 +Osmall;F76F +Ostrokeacute;01FE +Otcyrillic;047E +Otilde;00D5 +Otildeacute;1E4C +Otildedieresis;1E4E +Otildesmall;F7F5 +P;0050 +Pacute;1E54 +Pcircle;24C5 +Pdotaccent;1E56 +Pecyrillic;041F +Peharmenian;054A +Pemiddlehookcyrillic;04A6 +Phi;03A6 +Phook;01A4 +Pi;03A0 +Piwrarmenian;0553 +Pmonospace;FF30 +Psi;03A8 +Psicyrillic;0470 +Psmall;F770 +Q;0051 +Qcircle;24C6 +Qmonospace;FF31 +Qsmall;F771 +R;0052 +Raarmenian;054C +Racute;0154 +Rcaron;0158 +Rcedilla;0156 +Rcircle;24C7 +Rcommaaccent;0156 +Rdblgrave;0210 +Rdotaccent;1E58 +Rdotbelow;1E5A +Rdotbelowmacron;1E5C +Reharmenian;0550 +Rfraktur;211C +Rho;03A1 +Ringsmall;F6FC +Rinvertedbreve;0212 +Rlinebelow;1E5E +Rmonospace;FF32 +Rsmall;F772 +Rsmallinverted;0281 +Rsmallinvertedsuperior;02B6 +S;0053 +SF010000;250C +SF020000;2514 +SF030000;2510 +SF040000;2518 +SF050000;253C +SF060000;252C +SF070000;2534 +SF080000;251C +SF090000;2524 +SF100000;2500 +SF110000;2502 +SF190000;2561 +SF200000;2562 +SF210000;2556 +SF220000;2555 +SF230000;2563 +SF240000;2551 +SF250000;2557 +SF260000;255D +SF270000;255C +SF280000;255B +SF360000;255E +SF370000;255F +SF380000;255A +SF390000;2554 +SF400000;2569 +SF410000;2566 +SF420000;2560 +SF430000;2550 +SF440000;256C +SF450000;2567 +SF460000;2568 +SF470000;2564 +SF480000;2565 +SF490000;2559 +SF500000;2558 +SF510000;2552 +SF520000;2553 +SF530000;256B +SF540000;256A +Sacute;015A +Sacutedotaccent;1E64 +Sampigreek;03E0 +Scaron;0160 +Scarondotaccent;1E66 +Scaronsmall;F6FD +Scedilla;015E +Schwa;018F +Schwacyrillic;04D8 +Schwadieresiscyrillic;04DA +Scircle;24C8 +Scircumflex;015C +Scommaaccent;0218 +Sdotaccent;1E60 +Sdotbelow;1E62 +Sdotbelowdotaccent;1E68 +Seharmenian;054D +Sevenroman;2166 +Shaarmenian;0547 +Shacyrillic;0428 +Shchacyrillic;0429 +Sheicoptic;03E2 +Shhacyrillic;04BA +Shimacoptic;03EC +Sigma;03A3 +Sixroman;2165 +Smonospace;FF33 +Softsigncyrillic;042C +Ssmall;F773 +Stigmagreek;03DA +T;0054 +Tau;03A4 +Tbar;0166 +Tcaron;0164 +Tcedilla;0162 +Tcircle;24C9 +Tcircumflexbelow;1E70 +Tcommaaccent;0162 +Tdotaccent;1E6A +Tdotbelow;1E6C +Tecyrillic;0422 +Tedescendercyrillic;04AC +Tenroman;2169 +Tetsecyrillic;04B4 +Theta;0398 +Thook;01AC +Thorn;00DE +Thornsmall;F7FE +Threeroman;2162 +Tildesmall;F6FE +Tiwnarmenian;054F +Tlinebelow;1E6E +Tmonospace;FF34 +Toarmenian;0539 +Tonefive;01BC +Tonesix;0184 +Tonetwo;01A7 +Tretroflexhook;01AE +Tsecyrillic;0426 +Tshecyrillic;040B +Tsmall;F774 +Twelveroman;216B +Tworoman;2161 +U;0055 +Uacute;00DA +Uacutesmall;F7FA +Ubreve;016C +Ucaron;01D3 +Ucircle;24CA +Ucircumflex;00DB +Ucircumflexbelow;1E76 +Ucircumflexsmall;F7FB +Ucyrillic;0423 +Udblacute;0170 +Udblgrave;0214 +Udieresis;00DC +Udieresisacute;01D7 +Udieresisbelow;1E72 +Udieresiscaron;01D9 +Udieresiscyrillic;04F0 +Udieresisgrave;01DB +Udieresismacron;01D5 +Udieresissmall;F7FC +Udotbelow;1EE4 +Ugrave;00D9 +Ugravesmall;F7F9 +Uhookabove;1EE6 +Uhorn;01AF +Uhornacute;1EE8 +Uhorndotbelow;1EF0 +Uhorngrave;1EEA +Uhornhookabove;1EEC +Uhorntilde;1EEE +Uhungarumlaut;0170 +Uhungarumlautcyrillic;04F2 +Uinvertedbreve;0216 +Ukcyrillic;0478 +Umacron;016A +Umacroncyrillic;04EE +Umacrondieresis;1E7A +Umonospace;FF35 +Uogonek;0172 +Upsilon;03A5 +Upsilon1;03D2 +Upsilonacutehooksymbolgreek;03D3 +Upsilonafrican;01B1 +Upsilondieresis;03AB +Upsilondieresishooksymbolgreek;03D4 +Upsilonhooksymbol;03D2 +Upsilontonos;038E +Uring;016E +Ushortcyrillic;040E +Usmall;F775 +Ustraightcyrillic;04AE +Ustraightstrokecyrillic;04B0 +Utilde;0168 +Utildeacute;1E78 +Utildebelow;1E74 +V;0056 +Vcircle;24CB +Vdotbelow;1E7E +Vecyrillic;0412 +Vewarmenian;054E +Vhook;01B2 +Vmonospace;FF36 +Voarmenian;0548 +Vsmall;F776 +Vtilde;1E7C +W;0057 +Wacute;1E82 +Wcircle;24CC +Wcircumflex;0174 +Wdieresis;1E84 +Wdotaccent;1E86 +Wdotbelow;1E88 +Wgrave;1E80 +Wmonospace;FF37 +Wsmall;F777 +X;0058 +Xcircle;24CD +Xdieresis;1E8C +Xdotaccent;1E8A +Xeharmenian;053D +Xi;039E +Xmonospace;FF38 +Xsmall;F778 +Y;0059 +Yacute;00DD +Yacutesmall;F7FD +Yatcyrillic;0462 +Ycircle;24CE +Ycircumflex;0176 +Ydieresis;0178 +Ydieresissmall;F7FF +Ydotaccent;1E8E +Ydotbelow;1EF4 +Yericyrillic;042B +Yerudieresiscyrillic;04F8 +Ygrave;1EF2 +Yhook;01B3 +Yhookabove;1EF6 +Yiarmenian;0545 +Yicyrillic;0407 +Yiwnarmenian;0552 +Ymonospace;FF39 +Ysmall;F779 +Ytilde;1EF8 +Yusbigcyrillic;046A +Yusbigiotifiedcyrillic;046C +Yuslittlecyrillic;0466 +Yuslittleiotifiedcyrillic;0468 +Z;005A +Zaarmenian;0536 +Zacute;0179 +Zcaron;017D +Zcaronsmall;F6FF +Zcircle;24CF +Zcircumflex;1E90 +Zdot;017B +Zdotaccent;017B +Zdotbelow;1E92 +Zecyrillic;0417 +Zedescendercyrillic;0498 +Zedieresiscyrillic;04DE +Zeta;0396 +Zhearmenian;053A +Zhebrevecyrillic;04C1 +Zhecyrillic;0416 +Zhedescendercyrillic;0496 +Zhedieresiscyrillic;04DC +Zlinebelow;1E94 +Zmonospace;FF3A +Zsmall;F77A +Zstroke;01B5 +a;0061 +aabengali;0986 +aacute;00E1 +aadeva;0906 +aagujarati;0A86 +aagurmukhi;0A06 +aamatragurmukhi;0A3E +aarusquare;3303 +aavowelsignbengali;09BE +aavowelsigndeva;093E +aavowelsigngujarati;0ABE +abbreviationmarkarmenian;055F +abbreviationsigndeva;0970 +abengali;0985 +abopomofo;311A +abreve;0103 +abreveacute;1EAF +abrevecyrillic;04D1 +abrevedotbelow;1EB7 +abrevegrave;1EB1 +abrevehookabove;1EB3 +abrevetilde;1EB5 +acaron;01CE +acircle;24D0 +acircumflex;00E2 +acircumflexacute;1EA5 +acircumflexdotbelow;1EAD +acircumflexgrave;1EA7 +acircumflexhookabove;1EA9 +acircumflextilde;1EAB +acute;00B4 +acutebelowcmb;0317 +acutecmb;0301 +acutecomb;0301 +acutedeva;0954 +acutelowmod;02CF +acutetonecmb;0341 +acyrillic;0430 +adblgrave;0201 +addakgurmukhi;0A71 +adeva;0905 +adieresis;00E4 +adieresiscyrillic;04D3 +adieresismacron;01DF +adotbelow;1EA1 +adotmacron;01E1 +ae;00E6 +aeacute;01FD +aekorean;3150 +aemacron;01E3 +afii00208;2015 +afii08941;20A4 +afii10017;0410 +afii10018;0411 +afii10019;0412 +afii10020;0413 +afii10021;0414 +afii10022;0415 +afii10023;0401 +afii10024;0416 +afii10025;0417 +afii10026;0418 +afii10027;0419 +afii10028;041A +afii10029;041B +afii10030;041C +afii10031;041D +afii10032;041E +afii10033;041F +afii10034;0420 +afii10035;0421 +afii10036;0422 +afii10037;0423 +afii10038;0424 +afii10039;0425 +afii10040;0426 +afii10041;0427 +afii10042;0428 +afii10043;0429 +afii10044;042A +afii10045;042B +afii10046;042C +afii10047;042D +afii10048;042E +afii10049;042F +afii10050;0490 +afii10051;0402 +afii10052;0403 +afii10053;0404 +afii10054;0405 +afii10055;0406 +afii10056;0407 +afii10057;0408 +afii10058;0409 +afii10059;040A +afii10060;040B +afii10061;040C +afii10062;040E +afii10063;F6C4 +afii10064;F6C5 +afii10065;0430 +afii10066;0431 +afii10067;0432 +afii10068;0433 +afii10069;0434 +afii10070;0435 +afii10071;0451 +afii10072;0436 +afii10073;0437 +afii10074;0438 +afii10075;0439 +afii10076;043A +afii10077;043B +afii10078;043C +afii10079;043D +afii10080;043E +afii10081;043F +afii10082;0440 +afii10083;0441 +afii10084;0442 +afii10085;0443 +afii10086;0444 +afii10087;0445 +afii10088;0446 +afii10089;0447 +afii10090;0448 +afii10091;0449 +afii10092;044A +afii10093;044B +afii10094;044C +afii10095;044D +afii10096;044E +afii10097;044F +afii10098;0491 +afii10099;0452 +afii10100;0453 +afii10101;0454 +afii10102;0455 +afii10103;0456 +afii10104;0457 +afii10105;0458 +afii10106;0459 +afii10107;045A +afii10108;045B +afii10109;045C +afii10110;045E +afii10145;040F +afii10146;0462 +afii10147;0472 +afii10148;0474 +afii10192;F6C6 +afii10193;045F +afii10194;0463 +afii10195;0473 +afii10196;0475 +afii10831;F6C7 +afii10832;F6C8 +afii10846;04D9 +afii299;200E +afii300;200F +afii301;200D +afii57381;066A +afii57388;060C +afii57392;0660 +afii57393;0661 +afii57394;0662 +afii57395;0663 +afii57396;0664 +afii57397;0665 +afii57398;0666 +afii57399;0667 +afii57400;0668 +afii57401;0669 +afii57403;061B +afii57407;061F +afii57409;0621 +afii57410;0622 +afii57411;0623 +afii57412;0624 +afii57413;0625 +afii57414;0626 +afii57415;0627 +afii57416;0628 +afii57417;0629 +afii57418;062A +afii57419;062B +afii57420;062C +afii57421;062D +afii57422;062E +afii57423;062F +afii57424;0630 +afii57425;0631 +afii57426;0632 +afii57427;0633 +afii57428;0634 +afii57429;0635 +afii57430;0636 +afii57431;0637 +afii57432;0638 +afii57433;0639 +afii57434;063A +afii57440;0640 +afii57441;0641 +afii57442;0642 +afii57443;0643 +afii57444;0644 +afii57445;0645 +afii57446;0646 +afii57448;0648 +afii57449;0649 +afii57450;064A +afii57451;064B +afii57452;064C +afii57453;064D +afii57454;064E +afii57455;064F +afii57456;0650 +afii57457;0651 +afii57458;0652 +afii57470;0647 +afii57505;06A4 +afii57506;067E +afii57507;0686 +afii57508;0698 +afii57509;06AF +afii57511;0679 +afii57512;0688 +afii57513;0691 +afii57514;06BA +afii57519;06D2 +afii57534;06D5 +afii57636;20AA +afii57645;05BE +afii57658;05C3 +afii57664;05D0 +afii57665;05D1 +afii57666;05D2 +afii57667;05D3 +afii57668;05D4 +afii57669;05D5 +afii57670;05D6 +afii57671;05D7 +afii57672;05D8 +afii57673;05D9 +afii57674;05DA +afii57675;05DB +afii57676;05DC +afii57677;05DD +afii57678;05DE +afii57679;05DF +afii57680;05E0 +afii57681;05E1 +afii57682;05E2 +afii57683;05E3 +afii57684;05E4 +afii57685;05E5 +afii57686;05E6 +afii57687;05E7 +afii57688;05E8 +afii57689;05E9 +afii57690;05EA +afii57694;FB2A +afii57695;FB2B +afii57700;FB4B +afii57705;FB1F +afii57716;05F0 +afii57717;05F1 +afii57718;05F2 +afii57723;FB35 +afii57793;05B4 +afii57794;05B5 +afii57795;05B6 +afii57796;05BB +afii57797;05B8 +afii57798;05B7 +afii57799;05B0 +afii57800;05B2 +afii57801;05B1 +afii57802;05B3 +afii57803;05C2 +afii57804;05C1 +afii57806;05B9 +afii57807;05BC +afii57839;05BD +afii57841;05BF +afii57842;05C0 +afii57929;02BC +afii61248;2105 +afii61289;2113 +afii61352;2116 +afii61573;202C +afii61574;202D +afii61575;202E +afii61664;200C +afii63167;066D +afii64937;02BD +agrave;00E0 +agujarati;0A85 +agurmukhi;0A05 +ahiragana;3042 +ahookabove;1EA3 +aibengali;0990 +aibopomofo;311E +aideva;0910 +aiecyrillic;04D5 +aigujarati;0A90 +aigurmukhi;0A10 +aimatragurmukhi;0A48 +ainarabic;0639 +ainfinalarabic;FECA +aininitialarabic;FECB +ainmedialarabic;FECC +ainvertedbreve;0203 +aivowelsignbengali;09C8 +aivowelsigndeva;0948 +aivowelsigngujarati;0AC8 +akatakana;30A2 +akatakanahalfwidth;FF71 +akorean;314F +alef;05D0 +alefarabic;0627 +alefdageshhebrew;FB30 +aleffinalarabic;FE8E +alefhamzaabovearabic;0623 +alefhamzaabovefinalarabic;FE84 +alefhamzabelowarabic;0625 +alefhamzabelowfinalarabic;FE88 +alefhebrew;05D0 +aleflamedhebrew;FB4F +alefmaddaabovearabic;0622 +alefmaddaabovefinalarabic;FE82 +alefmaksuraarabic;0649 +alefmaksurafinalarabic;FEF0 +alefmaksurainitialarabic;FEF3 +alefmaksuramedialarabic;FEF4 +alefpatahhebrew;FB2E +alefqamatshebrew;FB2F +aleph;2135 +allequal;224C +alpha;03B1 +alphatonos;03AC +amacron;0101 +amonospace;FF41 +ampersand;0026 +ampersandmonospace;FF06 +ampersandsmall;F726 +amsquare;33C2 +anbopomofo;3122 +angbopomofo;3124 +angkhankhuthai;0E5A +angle;2220 +anglebracketleft;3008 +anglebracketleftvertical;FE3F +anglebracketright;3009 +anglebracketrightvertical;FE40 +angleleft;2329 +angleright;232A +angstrom;212B +anoteleia;0387 +anudattadeva;0952 +anusvarabengali;0982 +anusvaradeva;0902 +anusvaragujarati;0A82 +aogonek;0105 +apaatosquare;3300 +aparen;249C +apostrophearmenian;055A +apostrophemod;02BC +apple;F8FF +approaches;2250 +approxequal;2248 +approxequalorimage;2252 +approximatelyequal;2245 +araeaekorean;318E +araeakorean;318D +arc;2312 +arighthalfring;1E9A +aring;00E5 +aringacute;01FB +aringbelow;1E01 +arrowboth;2194 +arrowdashdown;21E3 +arrowdashleft;21E0 +arrowdashright;21E2 +arrowdashup;21E1 +arrowdblboth;21D4 +arrowdbldown;21D3 +arrowdblleft;21D0 +arrowdblright;21D2 +arrowdblup;21D1 +arrowdown;2193 +arrowdownleft;2199 +arrowdownright;2198 +arrowdownwhite;21E9 +arrowheaddownmod;02C5 +arrowheadleftmod;02C2 +arrowheadrightmod;02C3 +arrowheadupmod;02C4 +arrowhorizex;F8E7 +arrowleft;2190 +arrowleftdbl;21D0 +arrowleftdblstroke;21CD +arrowleftoverright;21C6 +arrowleftwhite;21E6 +arrowright;2192 +arrowrightdblstroke;21CF +arrowrightheavy;279E +arrowrightoverleft;21C4 +arrowrightwhite;21E8 +arrowtableft;21E4 +arrowtabright;21E5 +arrowup;2191 +arrowupdn;2195 +arrowupdnbse;21A8 +arrowupdownbase;21A8 +arrowupleft;2196 +arrowupleftofdown;21C5 +arrowupright;2197 +arrowupwhite;21E7 +arrowvertex;F8E6 +asciicircum;005E +asciicircummonospace;FF3E +asciitilde;007E +asciitildemonospace;FF5E +ascript;0251 +ascriptturned;0252 +asmallhiragana;3041 +asmallkatakana;30A1 +asmallkatakanahalfwidth;FF67 +asterisk;002A +asteriskaltonearabic;066D +asteriskarabic;066D +asteriskmath;2217 +asteriskmonospace;FF0A +asterisksmall;FE61 +asterism;2042 +asuperior;F6E9 +asymptoticallyequal;2243 +at;0040 +atilde;00E3 +atmonospace;FF20 +atsmall;FE6B +aturned;0250 +aubengali;0994 +aubopomofo;3120 +audeva;0914 +augujarati;0A94 +augurmukhi;0A14 +aulengthmarkbengali;09D7 +aumatragurmukhi;0A4C +auvowelsignbengali;09CC +auvowelsigndeva;094C +auvowelsigngujarati;0ACC +avagrahadeva;093D +aybarmenian;0561 +ayin;05E2 +ayinaltonehebrew;FB20 +ayinhebrew;05E2 +b;0062 +babengali;09AC +backslash;005C +backslashmonospace;FF3C +badeva;092C +bagujarati;0AAC +bagurmukhi;0A2C +bahiragana;3070 +bahtthai;0E3F +bakatakana;30D0 +bar;007C +barmonospace;FF5C +bbopomofo;3105 +bcircle;24D1 +bdotaccent;1E03 +bdotbelow;1E05 +beamedsixteenthnotes;266C +because;2235 +becyrillic;0431 +beharabic;0628 +behfinalarabic;FE90 +behinitialarabic;FE91 +behiragana;3079 +behmedialarabic;FE92 +behmeeminitialarabic;FC9F +behmeemisolatedarabic;FC08 +behnoonfinalarabic;FC6D +bekatakana;30D9 +benarmenian;0562 +bet;05D1 +beta;03B2 +betasymbolgreek;03D0 +betdagesh;FB31 +betdageshhebrew;FB31 +bethebrew;05D1 +betrafehebrew;FB4C +bhabengali;09AD +bhadeva;092D +bhagujarati;0AAD +bhagurmukhi;0A2D +bhook;0253 +bihiragana;3073 +bikatakana;30D3 +bilabialclick;0298 +bindigurmukhi;0A02 +birusquare;3331 +blackcircle;25CF +blackdiamond;25C6 +blackdownpointingtriangle;25BC +blackleftpointingpointer;25C4 +blackleftpointingtriangle;25C0 +blacklenticularbracketleft;3010 +blacklenticularbracketleftvertical;FE3B +blacklenticularbracketright;3011 +blacklenticularbracketrightvertical;FE3C +blacklowerlefttriangle;25E3 +blacklowerrighttriangle;25E2 +blackrectangle;25AC +blackrightpointingpointer;25BA +blackrightpointingtriangle;25B6 +blacksmallsquare;25AA +blacksmilingface;263B +blacksquare;25A0 +blackstar;2605 +blackupperlefttriangle;25E4 +blackupperrighttriangle;25E5 +blackuppointingsmalltriangle;25B4 +blackuppointingtriangle;25B2 +blank;2423 +blinebelow;1E07 +block;2588 +bmonospace;FF42 +bobaimaithai;0E1A +bohiragana;307C +bokatakana;30DC +bparen;249D +bqsquare;33C3 +braceex;F8F4 +braceleft;007B +braceleftbt;F8F3 +braceleftmid;F8F2 +braceleftmonospace;FF5B +braceleftsmall;FE5B +bracelefttp;F8F1 +braceleftvertical;FE37 +braceright;007D +bracerightbt;F8FE +bracerightmid;F8FD +bracerightmonospace;FF5D +bracerightsmall;FE5C +bracerighttp;F8FC +bracerightvertical;FE38 +bracketleft;005B +bracketleftbt;F8F0 +bracketleftex;F8EF +bracketleftmonospace;FF3B +bracketlefttp;F8EE +bracketright;005D +bracketrightbt;F8FB +bracketrightex;F8FA +bracketrightmonospace;FF3D +bracketrighttp;F8F9 +breve;02D8 +brevebelowcmb;032E +brevecmb;0306 +breveinvertedbelowcmb;032F +breveinvertedcmb;0311 +breveinverteddoublecmb;0361 +bridgebelowcmb;032A +bridgeinvertedbelowcmb;033A +brokenbar;00A6 +bstroke;0180 +bsuperior;F6EA +btopbar;0183 +buhiragana;3076 +bukatakana;30D6 +bullet;2022 +bulletinverse;25D8 +bulletoperator;2219 +bullseye;25CE +c;0063 +caarmenian;056E +cabengali;099A +cacute;0107 +cadeva;091A +cagujarati;0A9A +cagurmukhi;0A1A +calsquare;3388 +candrabindubengali;0981 +candrabinducmb;0310 +candrabindudeva;0901 +candrabindugujarati;0A81 +capslock;21EA +careof;2105 +caron;02C7 +caronbelowcmb;032C +caroncmb;030C +carriagereturn;21B5 +cbopomofo;3118 +ccaron;010D +ccedilla;00E7 +ccedillaacute;1E09 +ccircle;24D2 +ccircumflex;0109 +ccurl;0255 +cdot;010B +cdotaccent;010B +cdsquare;33C5 +cedilla;00B8 +cedillacmb;0327 +cent;00A2 +centigrade;2103 +centinferior;F6DF +centmonospace;FFE0 +centoldstyle;F7A2 +centsuperior;F6E0 +chaarmenian;0579 +chabengali;099B +chadeva;091B +chagujarati;0A9B +chagurmukhi;0A1B +chbopomofo;3114 +cheabkhasiancyrillic;04BD +checkmark;2713 +checyrillic;0447 +chedescenderabkhasiancyrillic;04BF +chedescendercyrillic;04B7 +chedieresiscyrillic;04F5 +cheharmenian;0573 +chekhakassiancyrillic;04CC +cheverticalstrokecyrillic;04B9 +chi;03C7 +chieuchacirclekorean;3277 +chieuchaparenkorean;3217 +chieuchcirclekorean;3269 +chieuchkorean;314A +chieuchparenkorean;3209 +chochangthai;0E0A +chochanthai;0E08 +chochingthai;0E09 +chochoethai;0E0C +chook;0188 +cieucacirclekorean;3276 +cieucaparenkorean;3216 +cieuccirclekorean;3268 +cieuckorean;3148 +cieucparenkorean;3208 +cieucuparenkorean;321C +circle;25CB +circlemultiply;2297 +circleot;2299 +circleplus;2295 +circlepostalmark;3036 +circlewithlefthalfblack;25D0 +circlewithrighthalfblack;25D1 +circumflex;02C6 +circumflexbelowcmb;032D +circumflexcmb;0302 +clear;2327 +clickalveolar;01C2 +clickdental;01C0 +clicklateral;01C1 +clickretroflex;01C3 +club;2663 +clubsuitblack;2663 +clubsuitwhite;2667 +cmcubedsquare;33A4 +cmonospace;FF43 +cmsquaredsquare;33A0 +coarmenian;0581 +colon;003A +colonmonetary;20A1 +colonmonospace;FF1A +colonsign;20A1 +colonsmall;FE55 +colontriangularhalfmod;02D1 +colontriangularmod;02D0 +comma;002C +commaabovecmb;0313 +commaaboverightcmb;0315 +commaaccent;F6C3 +commaarabic;060C +commaarmenian;055D +commainferior;F6E1 +commamonospace;FF0C +commareversedabovecmb;0314 +commareversedmod;02BD +commasmall;FE50 +commasuperior;F6E2 +commaturnedabovecmb;0312 +commaturnedmod;02BB +compass;263C +congruent;2245 +contourintegral;222E +control;2303 +controlACK;0006 +controlBEL;0007 +controlBS;0008 +controlCAN;0018 +controlCR;000D +controlDC1;0011 +controlDC2;0012 +controlDC3;0013 +controlDC4;0014 +controlDEL;007F +controlDLE;0010 +controlEM;0019 +controlENQ;0005 +controlEOT;0004 +controlESC;001B +controlETB;0017 +controlETX;0003 +controlFF;000C +controlFS;001C +controlGS;001D +controlHT;0009 +controlLF;000A +controlNAK;0015 +controlRS;001E +controlSI;000F +controlSO;000E +controlSOT;0002 +controlSTX;0001 +controlSUB;001A +controlSYN;0016 +controlUS;001F +controlVT;000B +copyright;00A9 +copyrightsans;F8E9 +copyrightserif;F6D9 +cornerbracketleft;300C +cornerbracketlefthalfwidth;FF62 +cornerbracketleftvertical;FE41 +cornerbracketright;300D +cornerbracketrighthalfwidth;FF63 +cornerbracketrightvertical;FE42 +corporationsquare;337F +cosquare;33C7 +coverkgsquare;33C6 +cparen;249E +cruzeiro;20A2 +cstretched;0297 +curlyand;22CF +curlyor;22CE +currency;00A4 +cyrBreve;F6D1 +cyrFlex;F6D2 +cyrbreve;F6D4 +cyrflex;F6D5 +d;0064 +daarmenian;0564 +dabengali;09A6 +dadarabic;0636 +dadeva;0926 +dadfinalarabic;FEBE +dadinitialarabic;FEBF +dadmedialarabic;FEC0 +dagesh;05BC +dageshhebrew;05BC +dagger;2020 +daggerdbl;2021 +dagujarati;0AA6 +dagurmukhi;0A26 +dahiragana;3060 +dakatakana;30C0 +dalarabic;062F +dalet;05D3 +daletdagesh;FB33 +daletdageshhebrew;FB33 +dalethatafpatah;05D3 05B2 +dalethatafpatahhebrew;05D3 05B2 +dalethatafsegol;05D3 05B1 +dalethatafsegolhebrew;05D3 05B1 +dalethebrew;05D3 +dalethiriq;05D3 05B4 +dalethiriqhebrew;05D3 05B4 +daletholam;05D3 05B9 +daletholamhebrew;05D3 05B9 +daletpatah;05D3 05B7 +daletpatahhebrew;05D3 05B7 +daletqamats;05D3 05B8 +daletqamatshebrew;05D3 05B8 +daletqubuts;05D3 05BB +daletqubutshebrew;05D3 05BB +daletsegol;05D3 05B6 +daletsegolhebrew;05D3 05B6 +daletsheva;05D3 05B0 +daletshevahebrew;05D3 05B0 +dalettsere;05D3 05B5 +dalettserehebrew;05D3 05B5 +dalfinalarabic;FEAA +dammaarabic;064F +dammalowarabic;064F +dammatanaltonearabic;064C +dammatanarabic;064C +danda;0964 +dargahebrew;05A7 +dargalefthebrew;05A7 +dasiapneumatacyrilliccmb;0485 +dblGrave;F6D3 +dblanglebracketleft;300A +dblanglebracketleftvertical;FE3D +dblanglebracketright;300B +dblanglebracketrightvertical;FE3E +dblarchinvertedbelowcmb;032B +dblarrowleft;21D4 +dblarrowright;21D2 +dbldanda;0965 +dblgrave;F6D6 +dblgravecmb;030F +dblintegral;222C +dbllowline;2017 +dbllowlinecmb;0333 +dbloverlinecmb;033F +dblprimemod;02BA +dblverticalbar;2016 +dblverticallineabovecmb;030E +dbopomofo;3109 +dbsquare;33C8 +dcaron;010F +dcedilla;1E11 +dcircle;24D3 +dcircumflexbelow;1E13 +dcroat;0111 +ddabengali;09A1 +ddadeva;0921 +ddagujarati;0AA1 +ddagurmukhi;0A21 +ddalarabic;0688 +ddalfinalarabic;FB89 +dddhadeva;095C +ddhabengali;09A2 +ddhadeva;0922 +ddhagujarati;0AA2 +ddhagurmukhi;0A22 +ddotaccent;1E0B +ddotbelow;1E0D +decimalseparatorarabic;066B +decimalseparatorpersian;066B +decyrillic;0434 +degree;00B0 +dehihebrew;05AD +dehiragana;3067 +deicoptic;03EF +dekatakana;30C7 +deleteleft;232B +deleteright;2326 +delta;03B4 +deltaturned;018D +denominatorminusonenumeratorbengali;09F8 +dezh;02A4 +dhabengali;09A7 +dhadeva;0927 +dhagujarati;0AA7 +dhagurmukhi;0A27 +dhook;0257 +dialytikatonos;0385 +dialytikatonoscmb;0344 +diamond;2666 +diamondsuitwhite;2662 +dieresis;00A8 +dieresisacute;F6D7 +dieresisbelowcmb;0324 +dieresiscmb;0308 +dieresisgrave;F6D8 +dieresistonos;0385 +dihiragana;3062 +dikatakana;30C2 +dittomark;3003 +divide;00F7 +divides;2223 +divisionslash;2215 +djecyrillic;0452 +dkshade;2593 +dlinebelow;1E0F +dlsquare;3397 +dmacron;0111 +dmonospace;FF44 +dnblock;2584 +dochadathai;0E0E +dodekthai;0E14 +dohiragana;3069 +dokatakana;30C9 +dollar;0024 +dollarinferior;F6E3 +dollarmonospace;FF04 +dollaroldstyle;F724 +dollarsmall;FE69 +dollarsuperior;F6E4 +dong;20AB +dorusquare;3326 +dotaccent;02D9 +dotaccentcmb;0307 +dotbelowcmb;0323 +dotbelowcomb;0323 +dotkatakana;30FB +dotlessi;0131 +dotlessj;F6BE +dotlessjstrokehook;0284 +dotmath;22C5 +dottedcircle;25CC +doubleyodpatah;FB1F +doubleyodpatahhebrew;FB1F +downtackbelowcmb;031E +downtackmod;02D5 +dparen;249F +dsuperior;F6EB +dtail;0256 +dtopbar;018C +duhiragana;3065 +dukatakana;30C5 +dz;01F3 +dzaltone;02A3 +dzcaron;01C6 +dzcurl;02A5 +dzeabkhasiancyrillic;04E1 +dzecyrillic;0455 +dzhecyrillic;045F +e;0065 +eacute;00E9 +earth;2641 +ebengali;098F +ebopomofo;311C +ebreve;0115 +ecandradeva;090D +ecandragujarati;0A8D +ecandravowelsigndeva;0945 +ecandravowelsigngujarati;0AC5 +ecaron;011B +ecedillabreve;1E1D +echarmenian;0565 +echyiwnarmenian;0587 +ecircle;24D4 +ecircumflex;00EA +ecircumflexacute;1EBF +ecircumflexbelow;1E19 +ecircumflexdotbelow;1EC7 +ecircumflexgrave;1EC1 +ecircumflexhookabove;1EC3 +ecircumflextilde;1EC5 +ecyrillic;0454 +edblgrave;0205 +edeva;090F +edieresis;00EB +edot;0117 +edotaccent;0117 +edotbelow;1EB9 +eegurmukhi;0A0F +eematragurmukhi;0A47 +efcyrillic;0444 +egrave;00E8 +egujarati;0A8F +eharmenian;0567 +ehbopomofo;311D +ehiragana;3048 +ehookabove;1EBB +eibopomofo;311F +eight;0038 +eightarabic;0668 +eightbengali;09EE +eightcircle;2467 +eightcircleinversesansserif;2791 +eightdeva;096E +eighteencircle;2471 +eighteenparen;2485 +eighteenperiod;2499 +eightgujarati;0AEE +eightgurmukhi;0A6E +eighthackarabic;0668 +eighthangzhou;3028 +eighthnotebeamed;266B +eightideographicparen;3227 +eightinferior;2088 +eightmonospace;FF18 +eightoldstyle;F738 +eightparen;247B +eightperiod;248F +eightpersian;06F8 +eightroman;2177 +eightsuperior;2078 +eightthai;0E58 +einvertedbreve;0207 +eiotifiedcyrillic;0465 +ekatakana;30A8 +ekatakanahalfwidth;FF74 +ekonkargurmukhi;0A74 +ekorean;3154 +elcyrillic;043B +element;2208 +elevencircle;246A +elevenparen;247E +elevenperiod;2492 +elevenroman;217A +ellipsis;2026 +ellipsisvertical;22EE +emacron;0113 +emacronacute;1E17 +emacrongrave;1E15 +emcyrillic;043C +emdash;2014 +emdashvertical;FE31 +emonospace;FF45 +emphasismarkarmenian;055B +emptyset;2205 +enbopomofo;3123 +encyrillic;043D +endash;2013 +endashvertical;FE32 +endescendercyrillic;04A3 +eng;014B +engbopomofo;3125 +enghecyrillic;04A5 +enhookcyrillic;04C8 +enspace;2002 +eogonek;0119 +eokorean;3153 +eopen;025B +eopenclosed;029A +eopenreversed;025C +eopenreversedclosed;025E +eopenreversedhook;025D +eparen;24A0 +epsilon;03B5 +epsilontonos;03AD +equal;003D +equalmonospace;FF1D +equalsmall;FE66 +equalsuperior;207C +equivalence;2261 +erbopomofo;3126 +ercyrillic;0440 +ereversed;0258 +ereversedcyrillic;044D +escyrillic;0441 +esdescendercyrillic;04AB +esh;0283 +eshcurl;0286 +eshortdeva;090E +eshortvowelsigndeva;0946 +eshreversedloop;01AA +eshsquatreversed;0285 +esmallhiragana;3047 +esmallkatakana;30A7 +esmallkatakanahalfwidth;FF6A +estimated;212E +esuperior;F6EC +eta;03B7 +etarmenian;0568 +etatonos;03AE +eth;00F0 +etilde;1EBD +etildebelow;1E1B +etnahtafoukhhebrew;0591 +etnahtafoukhlefthebrew;0591 +etnahtahebrew;0591 +etnahtalefthebrew;0591 +eturned;01DD +eukorean;3161 +euro;20AC +evowelsignbengali;09C7 +evowelsigndeva;0947 +evowelsigngujarati;0AC7 +exclam;0021 +exclamarmenian;055C +exclamdbl;203C +exclamdown;00A1 +exclamdownsmall;F7A1 +exclammonospace;FF01 +exclamsmall;F721 +existential;2203 +ezh;0292 +ezhcaron;01EF +ezhcurl;0293 +ezhreversed;01B9 +ezhtail;01BA +f;0066 +fadeva;095E +fagurmukhi;0A5E +fahrenheit;2109 +fathaarabic;064E +fathalowarabic;064E +fathatanarabic;064B +fbopomofo;3108 +fcircle;24D5 +fdotaccent;1E1F +feharabic;0641 +feharmenian;0586 +fehfinalarabic;FED2 +fehinitialarabic;FED3 +fehmedialarabic;FED4 +feicoptic;03E5 +female;2640 +ff;FB00 +ffi;FB03 +ffl;FB04 +fi;FB01 +fifteencircle;246E +fifteenparen;2482 +fifteenperiod;2496 +figuredash;2012 +filledbox;25A0 +filledrect;25AC +finalkaf;05DA +finalkafdagesh;FB3A +finalkafdageshhebrew;FB3A +finalkafhebrew;05DA +finalkafqamats;05DA 05B8 +finalkafqamatshebrew;05DA 05B8 +finalkafsheva;05DA 05B0 +finalkafshevahebrew;05DA 05B0 +finalmem;05DD +finalmemhebrew;05DD +finalnun;05DF +finalnunhebrew;05DF +finalpe;05E3 +finalpehebrew;05E3 +finaltsadi;05E5 +finaltsadihebrew;05E5 +firsttonechinese;02C9 +fisheye;25C9 +fitacyrillic;0473 +five;0035 +fivearabic;0665 +fivebengali;09EB +fivecircle;2464 +fivecircleinversesansserif;278E +fivedeva;096B +fiveeighths;215D +fivegujarati;0AEB +fivegurmukhi;0A6B +fivehackarabic;0665 +fivehangzhou;3025 +fiveideographicparen;3224 +fiveinferior;2085 +fivemonospace;FF15 +fiveoldstyle;F735 +fiveparen;2478 +fiveperiod;248C +fivepersian;06F5 +fiveroman;2174 +fivesuperior;2075 +fivethai;0E55 +fl;FB02 +florin;0192 +fmonospace;FF46 +fmsquare;3399 +fofanthai;0E1F +fofathai;0E1D +fongmanthai;0E4F +forall;2200 +four;0034 +fourarabic;0664 +fourbengali;09EA +fourcircle;2463 +fourcircleinversesansserif;278D +fourdeva;096A +fourgujarati;0AEA +fourgurmukhi;0A6A +fourhackarabic;0664 +fourhangzhou;3024 +fourideographicparen;3223 +fourinferior;2084 +fourmonospace;FF14 +fournumeratorbengali;09F7 +fouroldstyle;F734 +fourparen;2477 +fourperiod;248B +fourpersian;06F4 +fourroman;2173 +foursuperior;2074 +fourteencircle;246D +fourteenparen;2481 +fourteenperiod;2495 +fourthai;0E54 +fourthtonechinese;02CB +fparen;24A1 +fraction;2044 +franc;20A3 +g;0067 +gabengali;0997 +gacute;01F5 +gadeva;0917 +gafarabic;06AF +gaffinalarabic;FB93 +gafinitialarabic;FB94 +gafmedialarabic;FB95 +gagujarati;0A97 +gagurmukhi;0A17 +gahiragana;304C +gakatakana;30AC +gamma;03B3 +gammalatinsmall;0263 +gammasuperior;02E0 +gangiacoptic;03EB +gbopomofo;310D +gbreve;011F +gcaron;01E7 +gcedilla;0123 +gcircle;24D6 +gcircumflex;011D +gcommaaccent;0123 +gdot;0121 +gdotaccent;0121 +gecyrillic;0433 +gehiragana;3052 +gekatakana;30B2 +geometricallyequal;2251 +gereshaccenthebrew;059C +gereshhebrew;05F3 +gereshmuqdamhebrew;059D +germandbls;00DF +gershayimaccenthebrew;059E +gershayimhebrew;05F4 +getamark;3013 +ghabengali;0998 +ghadarmenian;0572 +ghadeva;0918 +ghagujarati;0A98 +ghagurmukhi;0A18 +ghainarabic;063A +ghainfinalarabic;FECE +ghaininitialarabic;FECF +ghainmedialarabic;FED0 +ghemiddlehookcyrillic;0495 +ghestrokecyrillic;0493 +gheupturncyrillic;0491 +ghhadeva;095A +ghhagurmukhi;0A5A +ghook;0260 +ghzsquare;3393 +gihiragana;304E +gikatakana;30AE +gimarmenian;0563 +gimel;05D2 +gimeldagesh;FB32 +gimeldageshhebrew;FB32 +gimelhebrew;05D2 +gjecyrillic;0453 +glottalinvertedstroke;01BE +glottalstop;0294 +glottalstopinverted;0296 +glottalstopmod;02C0 +glottalstopreversed;0295 +glottalstopreversedmod;02C1 +glottalstopreversedsuperior;02E4 +glottalstopstroke;02A1 +glottalstopstrokereversed;02A2 +gmacron;1E21 +gmonospace;FF47 +gohiragana;3054 +gokatakana;30B4 +gparen;24A2 +gpasquare;33AC +gradient;2207 +grave;0060 +gravebelowcmb;0316 +gravecmb;0300 +gravecomb;0300 +gravedeva;0953 +gravelowmod;02CE +gravemonospace;FF40 +gravetonecmb;0340 +greater;003E +greaterequal;2265 +greaterequalorless;22DB +greatermonospace;FF1E +greaterorequivalent;2273 +greaterorless;2277 +greateroverequal;2267 +greatersmall;FE65 +gscript;0261 +gstroke;01E5 +guhiragana;3050 +guillemotleft;00AB +guillemotright;00BB +guilsinglleft;2039 +guilsinglright;203A +gukatakana;30B0 +guramusquare;3318 +gysquare;33C9 +h;0068 +haabkhasiancyrillic;04A9 +haaltonearabic;06C1 +habengali;09B9 +hadescendercyrillic;04B3 +hadeva;0939 +hagujarati;0AB9 +hagurmukhi;0A39 +haharabic;062D +hahfinalarabic;FEA2 +hahinitialarabic;FEA3 +hahiragana;306F +hahmedialarabic;FEA4 +haitusquare;332A +hakatakana;30CF +hakatakanahalfwidth;FF8A +halantgurmukhi;0A4D +hamzaarabic;0621 +hamzadammaarabic;0621 064F +hamzadammatanarabic;0621 064C +hamzafathaarabic;0621 064E +hamzafathatanarabic;0621 064B +hamzalowarabic;0621 +hamzalowkasraarabic;0621 0650 +hamzalowkasratanarabic;0621 064D +hamzasukunarabic;0621 0652 +hangulfiller;3164 +hardsigncyrillic;044A +harpoonleftbarbup;21BC +harpoonrightbarbup;21C0 +hasquare;33CA +hatafpatah;05B2 +hatafpatah16;05B2 +hatafpatah23;05B2 +hatafpatah2f;05B2 +hatafpatahhebrew;05B2 +hatafpatahnarrowhebrew;05B2 +hatafpatahquarterhebrew;05B2 +hatafpatahwidehebrew;05B2 +hatafqamats;05B3 +hatafqamats1b;05B3 +hatafqamats28;05B3 +hatafqamats34;05B3 +hatafqamatshebrew;05B3 +hatafqamatsnarrowhebrew;05B3 +hatafqamatsquarterhebrew;05B3 +hatafqamatswidehebrew;05B3 +hatafsegol;05B1 +hatafsegol17;05B1 +hatafsegol24;05B1 +hatafsegol30;05B1 +hatafsegolhebrew;05B1 +hatafsegolnarrowhebrew;05B1 +hatafsegolquarterhebrew;05B1 +hatafsegolwidehebrew;05B1 +hbar;0127 +hbopomofo;310F +hbrevebelow;1E2B +hcedilla;1E29 +hcircle;24D7 +hcircumflex;0125 +hdieresis;1E27 +hdotaccent;1E23 +hdotbelow;1E25 +he;05D4 +heart;2665 +heartsuitblack;2665 +heartsuitwhite;2661 +hedagesh;FB34 +hedageshhebrew;FB34 +hehaltonearabic;06C1 +heharabic;0647 +hehebrew;05D4 +hehfinalaltonearabic;FBA7 +hehfinalalttwoarabic;FEEA +hehfinalarabic;FEEA +hehhamzaabovefinalarabic;FBA5 +hehhamzaaboveisolatedarabic;FBA4 +hehinitialaltonearabic;FBA8 +hehinitialarabic;FEEB +hehiragana;3078 +hehmedialaltonearabic;FBA9 +hehmedialarabic;FEEC +heiseierasquare;337B +hekatakana;30D8 +hekatakanahalfwidth;FF8D +hekutaarusquare;3336 +henghook;0267 +herutusquare;3339 +het;05D7 +hethebrew;05D7 +hhook;0266 +hhooksuperior;02B1 +hieuhacirclekorean;327B +hieuhaparenkorean;321B +hieuhcirclekorean;326D +hieuhkorean;314E +hieuhparenkorean;320D +hihiragana;3072 +hikatakana;30D2 +hikatakanahalfwidth;FF8B +hiriq;05B4 +hiriq14;05B4 +hiriq21;05B4 +hiriq2d;05B4 +hiriqhebrew;05B4 +hiriqnarrowhebrew;05B4 +hiriqquarterhebrew;05B4 +hiriqwidehebrew;05B4 +hlinebelow;1E96 +hmonospace;FF48 +hoarmenian;0570 +hohipthai;0E2B +hohiragana;307B +hokatakana;30DB +hokatakanahalfwidth;FF8E +holam;05B9 +holam19;05B9 +holam26;05B9 +holam32;05B9 +holamhebrew;05B9 +holamnarrowhebrew;05B9 +holamquarterhebrew;05B9 +holamwidehebrew;05B9 +honokhukthai;0E2E +hookabovecomb;0309 +hookcmb;0309 +hookpalatalizedbelowcmb;0321 +hookretroflexbelowcmb;0322 +hoonsquare;3342 +horicoptic;03E9 +horizontalbar;2015 +horncmb;031B +hotsprings;2668 +house;2302 +hparen;24A3 +hsuperior;02B0 +hturned;0265 +huhiragana;3075 +huiitosquare;3333 +hukatakana;30D5 +hukatakanahalfwidth;FF8C +hungarumlaut;02DD +hungarumlautcmb;030B +hv;0195 +hyphen;002D +hypheninferior;F6E5 +hyphenmonospace;FF0D +hyphensmall;FE63 +hyphensuperior;F6E6 +hyphentwo;2010 +i;0069 +iacute;00ED +iacyrillic;044F +ibengali;0987 +ibopomofo;3127 +ibreve;012D +icaron;01D0 +icircle;24D8 +icircumflex;00EE +icyrillic;0456 +idblgrave;0209 +ideographearthcircle;328F +ideographfirecircle;328B +ideographicallianceparen;323F +ideographiccallparen;323A +ideographiccentrecircle;32A5 +ideographicclose;3006 +ideographiccomma;3001 +ideographiccommaleft;FF64 +ideographiccongratulationparen;3237 +ideographiccorrectcircle;32A3 +ideographicearthparen;322F +ideographicenterpriseparen;323D +ideographicexcellentcircle;329D +ideographicfestivalparen;3240 +ideographicfinancialcircle;3296 +ideographicfinancialparen;3236 +ideographicfireparen;322B +ideographichaveparen;3232 +ideographichighcircle;32A4 +ideographiciterationmark;3005 +ideographiclaborcircle;3298 +ideographiclaborparen;3238 +ideographicleftcircle;32A7 +ideographiclowcircle;32A6 +ideographicmedicinecircle;32A9 +ideographicmetalparen;322E +ideographicmoonparen;322A +ideographicnameparen;3234 +ideographicperiod;3002 +ideographicprintcircle;329E +ideographicreachparen;3243 +ideographicrepresentparen;3239 +ideographicresourceparen;323E +ideographicrightcircle;32A8 +ideographicsecretcircle;3299 +ideographicselfparen;3242 +ideographicsocietyparen;3233 +ideographicspace;3000 +ideographicspecialparen;3235 +ideographicstockparen;3231 +ideographicstudyparen;323B +ideographicsunparen;3230 +ideographicsuperviseparen;323C +ideographicwaterparen;322C +ideographicwoodparen;322D +ideographiczero;3007 +ideographmetalcircle;328E +ideographmooncircle;328A +ideographnamecircle;3294 +ideographsuncircle;3290 +ideographwatercircle;328C +ideographwoodcircle;328D +ideva;0907 +idieresis;00EF +idieresisacute;1E2F +idieresiscyrillic;04E5 +idotbelow;1ECB +iebrevecyrillic;04D7 +iecyrillic;0435 +ieungacirclekorean;3275 +ieungaparenkorean;3215 +ieungcirclekorean;3267 +ieungkorean;3147 +ieungparenkorean;3207 +igrave;00EC +igujarati;0A87 +igurmukhi;0A07 +ihiragana;3044 +ihookabove;1EC9 +iibengali;0988 +iicyrillic;0438 +iideva;0908 +iigujarati;0A88 +iigurmukhi;0A08 +iimatragurmukhi;0A40 +iinvertedbreve;020B +iishortcyrillic;0439 +iivowelsignbengali;09C0 +iivowelsigndeva;0940 +iivowelsigngujarati;0AC0 +ij;0133 +ikatakana;30A4 +ikatakanahalfwidth;FF72 +ikorean;3163 +ilde;02DC +iluyhebrew;05AC +imacron;012B +imacroncyrillic;04E3 +imageorapproximatelyequal;2253 +imatragurmukhi;0A3F +imonospace;FF49 +increment;2206 +infinity;221E +iniarmenian;056B +integral;222B +integralbottom;2321 +integralbt;2321 +integralex;F8F5 +integraltop;2320 +integraltp;2320 +intersection;2229 +intisquare;3305 +invbullet;25D8 +invcircle;25D9 +invsmileface;263B +iocyrillic;0451 +iogonek;012F +iota;03B9 +iotadieresis;03CA +iotadieresistonos;0390 +iotalatin;0269 +iotatonos;03AF +iparen;24A4 +irigurmukhi;0A72 +ismallhiragana;3043 +ismallkatakana;30A3 +ismallkatakanahalfwidth;FF68 +issharbengali;09FA +istroke;0268 +isuperior;F6ED +iterationhiragana;309D +iterationkatakana;30FD +itilde;0129 +itildebelow;1E2D +iubopomofo;3129 +iucyrillic;044E +ivowelsignbengali;09BF +ivowelsigndeva;093F +ivowelsigngujarati;0ABF +izhitsacyrillic;0475 +izhitsadblgravecyrillic;0477 +j;006A +jaarmenian;0571 +jabengali;099C +jadeva;091C +jagujarati;0A9C +jagurmukhi;0A1C +jbopomofo;3110 +jcaron;01F0 +jcircle;24D9 +jcircumflex;0135 +jcrossedtail;029D +jdotlessstroke;025F +jecyrillic;0458 +jeemarabic;062C +jeemfinalarabic;FE9E +jeeminitialarabic;FE9F +jeemmedialarabic;FEA0 +jeharabic;0698 +jehfinalarabic;FB8B +jhabengali;099D +jhadeva;091D +jhagujarati;0A9D +jhagurmukhi;0A1D +jheharmenian;057B +jis;3004 +jmonospace;FF4A +jparen;24A5 +jsuperior;02B2 +k;006B +kabashkircyrillic;04A1 +kabengali;0995 +kacute;1E31 +kacyrillic;043A +kadescendercyrillic;049B +kadeva;0915 +kaf;05DB +kafarabic;0643 +kafdagesh;FB3B +kafdageshhebrew;FB3B +kaffinalarabic;FEDA +kafhebrew;05DB +kafinitialarabic;FEDB +kafmedialarabic;FEDC +kafrafehebrew;FB4D +kagujarati;0A95 +kagurmukhi;0A15 +kahiragana;304B +kahookcyrillic;04C4 +kakatakana;30AB +kakatakanahalfwidth;FF76 +kappa;03BA +kappasymbolgreek;03F0 +kapyeounmieumkorean;3171 +kapyeounphieuphkorean;3184 +kapyeounpieupkorean;3178 +kapyeounssangpieupkorean;3179 +karoriisquare;330D +kashidaautoarabic;0640 +kashidaautonosidebearingarabic;0640 +kasmallkatakana;30F5 +kasquare;3384 +kasraarabic;0650 +kasratanarabic;064D +kastrokecyrillic;049F +katahiraprolongmarkhalfwidth;FF70 +kaverticalstrokecyrillic;049D +kbopomofo;310E +kcalsquare;3389 +kcaron;01E9 +kcedilla;0137 +kcircle;24DA +kcommaaccent;0137 +kdotbelow;1E33 +keharmenian;0584 +kehiragana;3051 +kekatakana;30B1 +kekatakanahalfwidth;FF79 +kenarmenian;056F +kesmallkatakana;30F6 +kgreenlandic;0138 +khabengali;0996 +khacyrillic;0445 +khadeva;0916 +khagujarati;0A96 +khagurmukhi;0A16 +khaharabic;062E +khahfinalarabic;FEA6 +khahinitialarabic;FEA7 +khahmedialarabic;FEA8 +kheicoptic;03E7 +khhadeva;0959 +khhagurmukhi;0A59 +khieukhacirclekorean;3278 +khieukhaparenkorean;3218 +khieukhcirclekorean;326A +khieukhkorean;314B +khieukhparenkorean;320A +khokhaithai;0E02 +khokhonthai;0E05 +khokhuatthai;0E03 +khokhwaithai;0E04 +khomutthai;0E5B +khook;0199 +khorakhangthai;0E06 +khzsquare;3391 +kihiragana;304D +kikatakana;30AD +kikatakanahalfwidth;FF77 +kiroguramusquare;3315 +kiromeetorusquare;3316 +kirosquare;3314 +kiyeokacirclekorean;326E +kiyeokaparenkorean;320E +kiyeokcirclekorean;3260 +kiyeokkorean;3131 +kiyeokparenkorean;3200 +kiyeoksioskorean;3133 +kjecyrillic;045C +klinebelow;1E35 +klsquare;3398 +kmcubedsquare;33A6 +kmonospace;FF4B +kmsquaredsquare;33A2 +kohiragana;3053 +kohmsquare;33C0 +kokaithai;0E01 +kokatakana;30B3 +kokatakanahalfwidth;FF7A +kooposquare;331E +koppacyrillic;0481 +koreanstandardsymbol;327F +koroniscmb;0343 +kparen;24A6 +kpasquare;33AA +ksicyrillic;046F +ktsquare;33CF +kturned;029E +kuhiragana;304F +kukatakana;30AF +kukatakanahalfwidth;FF78 +kvsquare;33B8 +kwsquare;33BE +l;006C +labengali;09B2 +lacute;013A +ladeva;0932 +lagujarati;0AB2 +lagurmukhi;0A32 +lakkhangyaothai;0E45 +lamaleffinalarabic;FEFC +lamalefhamzaabovefinalarabic;FEF8 +lamalefhamzaaboveisolatedarabic;FEF7 +lamalefhamzabelowfinalarabic;FEFA +lamalefhamzabelowisolatedarabic;FEF9 +lamalefisolatedarabic;FEFB +lamalefmaddaabovefinalarabic;FEF6 +lamalefmaddaaboveisolatedarabic;FEF5 +lamarabic;0644 +lambda;03BB +lambdastroke;019B +lamed;05DC +lameddagesh;FB3C +lameddageshhebrew;FB3C +lamedhebrew;05DC +lamedholam;05DC 05B9 +lamedholamdagesh;05DC 05B9 05BC +lamedholamdageshhebrew;05DC 05B9 05BC +lamedholamhebrew;05DC 05B9 +lamfinalarabic;FEDE +lamhahinitialarabic;FCCA +laminitialarabic;FEDF +lamjeeminitialarabic;FCC9 +lamkhahinitialarabic;FCCB +lamlamhehisolatedarabic;FDF2 +lammedialarabic;FEE0 +lammeemhahinitialarabic;FD88 +lammeeminitialarabic;FCCC +lammeemjeeminitialarabic;FEDF FEE4 FEA0 +lammeemkhahinitialarabic;FEDF FEE4 FEA8 +largecircle;25EF +lbar;019A +lbelt;026C +lbopomofo;310C +lcaron;013E +lcedilla;013C +lcircle;24DB +lcircumflexbelow;1E3D +lcommaaccent;013C +ldot;0140 +ldotaccent;0140 +ldotbelow;1E37 +ldotbelowmacron;1E39 +leftangleabovecmb;031A +lefttackbelowcmb;0318 +less;003C +lessequal;2264 +lessequalorgreater;22DA +lessmonospace;FF1C +lessorequivalent;2272 +lessorgreater;2276 +lessoverequal;2266 +lesssmall;FE64 +lezh;026E +lfblock;258C +lhookretroflex;026D +lira;20A4 +liwnarmenian;056C +lj;01C9 +ljecyrillic;0459 +ll;F6C0 +lladeva;0933 +llagujarati;0AB3 +llinebelow;1E3B +llladeva;0934 +llvocalicbengali;09E1 +llvocalicdeva;0961 +llvocalicvowelsignbengali;09E3 +llvocalicvowelsigndeva;0963 +lmiddletilde;026B +lmonospace;FF4C +lmsquare;33D0 +lochulathai;0E2C +logicaland;2227 +logicalnot;00AC +logicalnotreversed;2310 +logicalor;2228 +lolingthai;0E25 +longs;017F +lowlinecenterline;FE4E +lowlinecmb;0332 +lowlinedashed;FE4D +lozenge;25CA +lparen;24A7 +lslash;0142 +lsquare;2113 +lsuperior;F6EE +ltshade;2591 +luthai;0E26 +lvocalicbengali;098C +lvocalicdeva;090C +lvocalicvowelsignbengali;09E2 +lvocalicvowelsigndeva;0962 +lxsquare;33D3 +m;006D +mabengali;09AE +macron;00AF +macronbelowcmb;0331 +macroncmb;0304 +macronlowmod;02CD +macronmonospace;FFE3 +macute;1E3F +madeva;092E +magujarati;0AAE +magurmukhi;0A2E +mahapakhhebrew;05A4 +mahapakhlefthebrew;05A4 +mahiragana;307E +maichattawalowleftthai;F895 +maichattawalowrightthai;F894 +maichattawathai;0E4B +maichattawaupperleftthai;F893 +maieklowleftthai;F88C +maieklowrightthai;F88B +maiekthai;0E48 +maiekupperleftthai;F88A +maihanakatleftthai;F884 +maihanakatthai;0E31 +maitaikhuleftthai;F889 +maitaikhuthai;0E47 +maitholowleftthai;F88F +maitholowrightthai;F88E +maithothai;0E49 +maithoupperleftthai;F88D +maitrilowleftthai;F892 +maitrilowrightthai;F891 +maitrithai;0E4A +maitriupperleftthai;F890 +maiyamokthai;0E46 +makatakana;30DE +makatakanahalfwidth;FF8F +male;2642 +mansyonsquare;3347 +maqafhebrew;05BE +mars;2642 +masoracirclehebrew;05AF +masquare;3383 +mbopomofo;3107 +mbsquare;33D4 +mcircle;24DC +mcubedsquare;33A5 +mdotaccent;1E41 +mdotbelow;1E43 +meemarabic;0645 +meemfinalarabic;FEE2 +meeminitialarabic;FEE3 +meemmedialarabic;FEE4 +meemmeeminitialarabic;FCD1 +meemmeemisolatedarabic;FC48 +meetorusquare;334D +mehiragana;3081 +meizierasquare;337E +mekatakana;30E1 +mekatakanahalfwidth;FF92 +mem;05DE +memdagesh;FB3E +memdageshhebrew;FB3E +memhebrew;05DE +menarmenian;0574 +merkhahebrew;05A5 +merkhakefulahebrew;05A6 +merkhakefulalefthebrew;05A6 +merkhalefthebrew;05A5 +mhook;0271 +mhzsquare;3392 +middledotkatakanahalfwidth;FF65 +middot;00B7 +mieumacirclekorean;3272 +mieumaparenkorean;3212 +mieumcirclekorean;3264 +mieumkorean;3141 +mieumpansioskorean;3170 +mieumparenkorean;3204 +mieumpieupkorean;316E +mieumsioskorean;316F +mihiragana;307F +mikatakana;30DF +mikatakanahalfwidth;FF90 +minus;2212 +minusbelowcmb;0320 +minuscircle;2296 +minusmod;02D7 +minusplus;2213 +minute;2032 +miribaarusquare;334A +mirisquare;3349 +mlonglegturned;0270 +mlsquare;3396 +mmcubedsquare;33A3 +mmonospace;FF4D +mmsquaredsquare;339F +mohiragana;3082 +mohmsquare;33C1 +mokatakana;30E2 +mokatakanahalfwidth;FF93 +molsquare;33D6 +momathai;0E21 +moverssquare;33A7 +moverssquaredsquare;33A8 +mparen;24A8 +mpasquare;33AB +mssquare;33B3 +msuperior;F6EF +mturned;026F +mu;00B5 +mu1;00B5 +muasquare;3382 +muchgreater;226B +muchless;226A +mufsquare;338C +mugreek;03BC +mugsquare;338D +muhiragana;3080 +mukatakana;30E0 +mukatakanahalfwidth;FF91 +mulsquare;3395 +multiply;00D7 +mumsquare;339B +munahhebrew;05A3 +munahlefthebrew;05A3 +musicalnote;266A +musicalnotedbl;266B +musicflatsign;266D +musicsharpsign;266F +mussquare;33B2 +muvsquare;33B6 +muwsquare;33BC +mvmegasquare;33B9 +mvsquare;33B7 +mwmegasquare;33BF +mwsquare;33BD +n;006E +nabengali;09A8 +nabla;2207 +nacute;0144 +nadeva;0928 +nagujarati;0AA8 +nagurmukhi;0A28 +nahiragana;306A +nakatakana;30CA +nakatakanahalfwidth;FF85 +napostrophe;0149 +nasquare;3381 +nbopomofo;310B +nbspace;00A0 +ncaron;0148 +ncedilla;0146 +ncircle;24DD +ncircumflexbelow;1E4B +ncommaaccent;0146 +ndotaccent;1E45 +ndotbelow;1E47 +nehiragana;306D +nekatakana;30CD +nekatakanahalfwidth;FF88 +newsheqelsign;20AA +nfsquare;338B +ngabengali;0999 +ngadeva;0919 +ngagujarati;0A99 +ngagurmukhi;0A19 +ngonguthai;0E07 +nhiragana;3093 +nhookleft;0272 +nhookretroflex;0273 +nieunacirclekorean;326F +nieunaparenkorean;320F +nieuncieuckorean;3135 +nieuncirclekorean;3261 +nieunhieuhkorean;3136 +nieunkorean;3134 +nieunpansioskorean;3168 +nieunparenkorean;3201 +nieunsioskorean;3167 +nieuntikeutkorean;3166 +nihiragana;306B +nikatakana;30CB +nikatakanahalfwidth;FF86 +nikhahitleftthai;F899 +nikhahitthai;0E4D +nine;0039 +ninearabic;0669 +ninebengali;09EF +ninecircle;2468 +ninecircleinversesansserif;2792 +ninedeva;096F +ninegujarati;0AEF +ninegurmukhi;0A6F +ninehackarabic;0669 +ninehangzhou;3029 +nineideographicparen;3228 +nineinferior;2089 +ninemonospace;FF19 +nineoldstyle;F739 +nineparen;247C +nineperiod;2490 +ninepersian;06F9 +nineroman;2178 +ninesuperior;2079 +nineteencircle;2472 +nineteenparen;2486 +nineteenperiod;249A +ninethai;0E59 +nj;01CC +njecyrillic;045A +nkatakana;30F3 +nkatakanahalfwidth;FF9D +nlegrightlong;019E +nlinebelow;1E49 +nmonospace;FF4E +nmsquare;339A +nnabengali;09A3 +nnadeva;0923 +nnagujarati;0AA3 +nnagurmukhi;0A23 +nnnadeva;0929 +nohiragana;306E +nokatakana;30CE +nokatakanahalfwidth;FF89 +nonbreakingspace;00A0 +nonenthai;0E13 +nonuthai;0E19 +noonarabic;0646 +noonfinalarabic;FEE6 +noonghunnaarabic;06BA +noonghunnafinalarabic;FB9F +noonhehinitialarabic;FEE7 FEEC +nooninitialarabic;FEE7 +noonjeeminitialarabic;FCD2 +noonjeemisolatedarabic;FC4B +noonmedialarabic;FEE8 +noonmeeminitialarabic;FCD5 +noonmeemisolatedarabic;FC4E +noonnoonfinalarabic;FC8D +notcontains;220C +notelement;2209 +notelementof;2209 +notequal;2260 +notgreater;226F +notgreaternorequal;2271 +notgreaternorless;2279 +notidentical;2262 +notless;226E +notlessnorequal;2270 +notparallel;2226 +notprecedes;2280 +notsubset;2284 +notsucceeds;2281 +notsuperset;2285 +nowarmenian;0576 +nparen;24A9 +nssquare;33B1 +nsuperior;207F +ntilde;00F1 +nu;03BD +nuhiragana;306C +nukatakana;30CC +nukatakanahalfwidth;FF87 +nuktabengali;09BC +nuktadeva;093C +nuktagujarati;0ABC +nuktagurmukhi;0A3C +numbersign;0023 +numbersignmonospace;FF03 +numbersignsmall;FE5F +numeralsigngreek;0374 +numeralsignlowergreek;0375 +numero;2116 +nun;05E0 +nundagesh;FB40 +nundageshhebrew;FB40 +nunhebrew;05E0 +nvsquare;33B5 +nwsquare;33BB +nyabengali;099E +nyadeva;091E +nyagujarati;0A9E +nyagurmukhi;0A1E +o;006F +oacute;00F3 +oangthai;0E2D +obarred;0275 +obarredcyrillic;04E9 +obarreddieresiscyrillic;04EB +obengali;0993 +obopomofo;311B +obreve;014F +ocandradeva;0911 +ocandragujarati;0A91 +ocandravowelsigndeva;0949 +ocandravowelsigngujarati;0AC9 +ocaron;01D2 +ocircle;24DE +ocircumflex;00F4 +ocircumflexacute;1ED1 +ocircumflexdotbelow;1ED9 +ocircumflexgrave;1ED3 +ocircumflexhookabove;1ED5 +ocircumflextilde;1ED7 +ocyrillic;043E +odblacute;0151 +odblgrave;020D +odeva;0913 +odieresis;00F6 +odieresiscyrillic;04E7 +odotbelow;1ECD +oe;0153 +oekorean;315A +ogonek;02DB +ogonekcmb;0328 +ograve;00F2 +ogujarati;0A93 +oharmenian;0585 +ohiragana;304A +ohookabove;1ECF +ohorn;01A1 +ohornacute;1EDB +ohorndotbelow;1EE3 +ohorngrave;1EDD +ohornhookabove;1EDF +ohorntilde;1EE1 +ohungarumlaut;0151 +oi;01A3 +oinvertedbreve;020F +okatakana;30AA +okatakanahalfwidth;FF75 +okorean;3157 +olehebrew;05AB +omacron;014D +omacronacute;1E53 +omacrongrave;1E51 +omdeva;0950 +omega;03C9 +omega1;03D6 +omegacyrillic;0461 +omegalatinclosed;0277 +omegaroundcyrillic;047B +omegatitlocyrillic;047D +omegatonos;03CE +omgujarati;0AD0 +omicron;03BF +omicrontonos;03CC +omonospace;FF4F +one;0031 +onearabic;0661 +onebengali;09E7 +onecircle;2460 +onecircleinversesansserif;278A +onedeva;0967 +onedotenleader;2024 +oneeighth;215B +onefitted;F6DC +onegujarati;0AE7 +onegurmukhi;0A67 +onehackarabic;0661 +onehalf;00BD +onehangzhou;3021 +oneideographicparen;3220 +oneinferior;2081 +onemonospace;FF11 +onenumeratorbengali;09F4 +oneoldstyle;F731 +oneparen;2474 +oneperiod;2488 +onepersian;06F1 +onequarter;00BC +oneroman;2170 +onesuperior;00B9 +onethai;0E51 +onethird;2153 +oogonek;01EB +oogonekmacron;01ED +oogurmukhi;0A13 +oomatragurmukhi;0A4B +oopen;0254 +oparen;24AA +openbullet;25E6 +option;2325 +ordfeminine;00AA +ordmasculine;00BA +orthogonal;221F +oshortdeva;0912 +oshortvowelsigndeva;094A +oslash;00F8 +oslashacute;01FF +osmallhiragana;3049 +osmallkatakana;30A9 +osmallkatakanahalfwidth;FF6B +ostrokeacute;01FF +osuperior;F6F0 +otcyrillic;047F +otilde;00F5 +otildeacute;1E4D +otildedieresis;1E4F +oubopomofo;3121 +overline;203E +overlinecenterline;FE4A +overlinecmb;0305 +overlinedashed;FE49 +overlinedblwavy;FE4C +overlinewavy;FE4B +overscore;00AF +ovowelsignbengali;09CB +ovowelsigndeva;094B +ovowelsigngujarati;0ACB +p;0070 +paampssquare;3380 +paasentosquare;332B +pabengali;09AA +pacute;1E55 +padeva;092A +pagedown;21DF +pageup;21DE +pagujarati;0AAA +pagurmukhi;0A2A +pahiragana;3071 +paiyannoithai;0E2F +pakatakana;30D1 +palatalizationcyrilliccmb;0484 +palochkacyrillic;04C0 +pansioskorean;317F +paragraph;00B6 +parallel;2225 +parenleft;0028 +parenleftaltonearabic;FD3E +parenleftbt;F8ED +parenleftex;F8EC +parenleftinferior;208D +parenleftmonospace;FF08 +parenleftsmall;FE59 +parenleftsuperior;207D +parenlefttp;F8EB +parenleftvertical;FE35 +parenright;0029 +parenrightaltonearabic;FD3F +parenrightbt;F8F8 +parenrightex;F8F7 +parenrightinferior;208E +parenrightmonospace;FF09 +parenrightsmall;FE5A +parenrightsuperior;207E +parenrighttp;F8F6 +parenrightvertical;FE36 +partialdiff;2202 +paseqhebrew;05C0 +pashtahebrew;0599 +pasquare;33A9 +patah;05B7 +patah11;05B7 +patah1d;05B7 +patah2a;05B7 +patahhebrew;05B7 +patahnarrowhebrew;05B7 +patahquarterhebrew;05B7 +patahwidehebrew;05B7 +pazerhebrew;05A1 +pbopomofo;3106 +pcircle;24DF +pdotaccent;1E57 +pe;05E4 +pecyrillic;043F +pedagesh;FB44 +pedageshhebrew;FB44 +peezisquare;333B +pefinaldageshhebrew;FB43 +peharabic;067E +peharmenian;057A +pehebrew;05E4 +pehfinalarabic;FB57 +pehinitialarabic;FB58 +pehiragana;307A +pehmedialarabic;FB59 +pekatakana;30DA +pemiddlehookcyrillic;04A7 +perafehebrew;FB4E +percent;0025 +percentarabic;066A +percentmonospace;FF05 +percentsmall;FE6A +period;002E +periodarmenian;0589 +periodcentered;00B7 +periodhalfwidth;FF61 +periodinferior;F6E7 +periodmonospace;FF0E +periodsmall;FE52 +periodsuperior;F6E8 +perispomenigreekcmb;0342 +perpendicular;22A5 +perthousand;2030 +peseta;20A7 +pfsquare;338A +phabengali;09AB +phadeva;092B +phagujarati;0AAB +phagurmukhi;0A2B +phi;03C6 +phi1;03D5 +phieuphacirclekorean;327A +phieuphaparenkorean;321A +phieuphcirclekorean;326C +phieuphkorean;314D +phieuphparenkorean;320C +philatin;0278 +phinthuthai;0E3A +phisymbolgreek;03D5 +phook;01A5 +phophanthai;0E1E +phophungthai;0E1C +phosamphaothai;0E20 +pi;03C0 +pieupacirclekorean;3273 +pieupaparenkorean;3213 +pieupcieuckorean;3176 +pieupcirclekorean;3265 +pieupkiyeokkorean;3172 +pieupkorean;3142 +pieupparenkorean;3205 +pieupsioskiyeokkorean;3174 +pieupsioskorean;3144 +pieupsiostikeutkorean;3175 +pieupthieuthkorean;3177 +pieuptikeutkorean;3173 +pihiragana;3074 +pikatakana;30D4 +pisymbolgreek;03D6 +piwrarmenian;0583 +plus;002B +plusbelowcmb;031F +pluscircle;2295 +plusminus;00B1 +plusmod;02D6 +plusmonospace;FF0B +plussmall;FE62 +plussuperior;207A +pmonospace;FF50 +pmsquare;33D8 +pohiragana;307D +pointingindexdownwhite;261F +pointingindexleftwhite;261C +pointingindexrightwhite;261E +pointingindexupwhite;261D +pokatakana;30DD +poplathai;0E1B +postalmark;3012 +postalmarkface;3020 +pparen;24AB +precedes;227A +prescription;211E +primemod;02B9 +primereversed;2035 +product;220F +projective;2305 +prolongedkana;30FC +propellor;2318 +propersubset;2282 +propersuperset;2283 +proportion;2237 +proportional;221D +psi;03C8 +psicyrillic;0471 +psilipneumatacyrilliccmb;0486 +pssquare;33B0 +puhiragana;3077 +pukatakana;30D7 +pvsquare;33B4 +pwsquare;33BA +q;0071 +qadeva;0958 +qadmahebrew;05A8 +qafarabic;0642 +qaffinalarabic;FED6 +qafinitialarabic;FED7 +qafmedialarabic;FED8 +qamats;05B8 +qamats10;05B8 +qamats1a;05B8 +qamats1c;05B8 +qamats27;05B8 +qamats29;05B8 +qamats33;05B8 +qamatsde;05B8 +qamatshebrew;05B8 +qamatsnarrowhebrew;05B8 +qamatsqatanhebrew;05B8 +qamatsqatannarrowhebrew;05B8 +qamatsqatanquarterhebrew;05B8 +qamatsqatanwidehebrew;05B8 +qamatsquarterhebrew;05B8 +qamatswidehebrew;05B8 +qarneyparahebrew;059F +qbopomofo;3111 +qcircle;24E0 +qhook;02A0 +qmonospace;FF51 +qof;05E7 +qofdagesh;FB47 +qofdageshhebrew;FB47 +qofhatafpatah;05E7 05B2 +qofhatafpatahhebrew;05E7 05B2 +qofhatafsegol;05E7 05B1 +qofhatafsegolhebrew;05E7 05B1 +qofhebrew;05E7 +qofhiriq;05E7 05B4 +qofhiriqhebrew;05E7 05B4 +qofholam;05E7 05B9 +qofholamhebrew;05E7 05B9 +qofpatah;05E7 05B7 +qofpatahhebrew;05E7 05B7 +qofqamats;05E7 05B8 +qofqamatshebrew;05E7 05B8 +qofqubuts;05E7 05BB +qofqubutshebrew;05E7 05BB +qofsegol;05E7 05B6 +qofsegolhebrew;05E7 05B6 +qofsheva;05E7 05B0 +qofshevahebrew;05E7 05B0 +qoftsere;05E7 05B5 +qoftserehebrew;05E7 05B5 +qparen;24AC +quarternote;2669 +qubuts;05BB +qubuts18;05BB +qubuts25;05BB +qubuts31;05BB +qubutshebrew;05BB +qubutsnarrowhebrew;05BB +qubutsquarterhebrew;05BB +qubutswidehebrew;05BB +question;003F +questionarabic;061F +questionarmenian;055E +questiondown;00BF +questiondownsmall;F7BF +questiongreek;037E +questionmonospace;FF1F +questionsmall;F73F +quotedbl;0022 +quotedblbase;201E +quotedblleft;201C +quotedblmonospace;FF02 +quotedblprime;301E +quotedblprimereversed;301D +quotedblright;201D +quoteleft;2018 +quoteleftreversed;201B +quotereversed;201B +quoteright;2019 +quoterightn;0149 +quotesinglbase;201A +quotesingle;0027 +quotesinglemonospace;FF07 +r;0072 +raarmenian;057C +rabengali;09B0 +racute;0155 +radeva;0930 +radical;221A +radicalex;F8E5 +radoverssquare;33AE +radoverssquaredsquare;33AF +radsquare;33AD +rafe;05BF +rafehebrew;05BF +ragujarati;0AB0 +ragurmukhi;0A30 +rahiragana;3089 +rakatakana;30E9 +rakatakanahalfwidth;FF97 +ralowerdiagonalbengali;09F1 +ramiddlediagonalbengali;09F0 +ramshorn;0264 +ratio;2236 +rbopomofo;3116 +rcaron;0159 +rcedilla;0157 +rcircle;24E1 +rcommaaccent;0157 +rdblgrave;0211 +rdotaccent;1E59 +rdotbelow;1E5B +rdotbelowmacron;1E5D +referencemark;203B +reflexsubset;2286 +reflexsuperset;2287 +registered;00AE +registersans;F8E8 +registerserif;F6DA +reharabic;0631 +reharmenian;0580 +rehfinalarabic;FEAE +rehiragana;308C +rehyehaleflamarabic;0631 FEF3 FE8E 0644 +rekatakana;30EC +rekatakanahalfwidth;FF9A +resh;05E8 +reshdageshhebrew;FB48 +reshhatafpatah;05E8 05B2 +reshhatafpatahhebrew;05E8 05B2 +reshhatafsegol;05E8 05B1 +reshhatafsegolhebrew;05E8 05B1 +reshhebrew;05E8 +reshhiriq;05E8 05B4 +reshhiriqhebrew;05E8 05B4 +reshholam;05E8 05B9 +reshholamhebrew;05E8 05B9 +reshpatah;05E8 05B7 +reshpatahhebrew;05E8 05B7 +reshqamats;05E8 05B8 +reshqamatshebrew;05E8 05B8 +reshqubuts;05E8 05BB +reshqubutshebrew;05E8 05BB +reshsegol;05E8 05B6 +reshsegolhebrew;05E8 05B6 +reshsheva;05E8 05B0 +reshshevahebrew;05E8 05B0 +reshtsere;05E8 05B5 +reshtserehebrew;05E8 05B5 +reversedtilde;223D +reviahebrew;0597 +reviamugrashhebrew;0597 +revlogicalnot;2310 +rfishhook;027E +rfishhookreversed;027F +rhabengali;09DD +rhadeva;095D +rho;03C1 +rhook;027D +rhookturned;027B +rhookturnedsuperior;02B5 +rhosymbolgreek;03F1 +rhotichookmod;02DE +rieulacirclekorean;3271 +rieulaparenkorean;3211 +rieulcirclekorean;3263 +rieulhieuhkorean;3140 +rieulkiyeokkorean;313A +rieulkiyeoksioskorean;3169 +rieulkorean;3139 +rieulmieumkorean;313B +rieulpansioskorean;316C +rieulparenkorean;3203 +rieulphieuphkorean;313F +rieulpieupkorean;313C +rieulpieupsioskorean;316B +rieulsioskorean;313D +rieulthieuthkorean;313E +rieultikeutkorean;316A +rieulyeorinhieuhkorean;316D +rightangle;221F +righttackbelowcmb;0319 +righttriangle;22BF +rihiragana;308A +rikatakana;30EA +rikatakanahalfwidth;FF98 +ring;02DA +ringbelowcmb;0325 +ringcmb;030A +ringhalfleft;02BF +ringhalfleftarmenian;0559 +ringhalfleftbelowcmb;031C +ringhalfleftcentered;02D3 +ringhalfright;02BE +ringhalfrightbelowcmb;0339 +ringhalfrightcentered;02D2 +rinvertedbreve;0213 +rittorusquare;3351 +rlinebelow;1E5F +rlongleg;027C +rlonglegturned;027A +rmonospace;FF52 +rohiragana;308D +rokatakana;30ED +rokatakanahalfwidth;FF9B +roruathai;0E23 +rparen;24AD +rrabengali;09DC +rradeva;0931 +rragurmukhi;0A5C +rreharabic;0691 +rrehfinalarabic;FB8D +rrvocalicbengali;09E0 +rrvocalicdeva;0960 +rrvocalicgujarati;0AE0 +rrvocalicvowelsignbengali;09C4 +rrvocalicvowelsigndeva;0944 +rrvocalicvowelsigngujarati;0AC4 +rsuperior;F6F1 +rtblock;2590 +rturned;0279 +rturnedsuperior;02B4 +ruhiragana;308B +rukatakana;30EB +rukatakanahalfwidth;FF99 +rupeemarkbengali;09F2 +rupeesignbengali;09F3 +rupiah;F6DD +ruthai;0E24 +rvocalicbengali;098B +rvocalicdeva;090B +rvocalicgujarati;0A8B +rvocalicvowelsignbengali;09C3 +rvocalicvowelsigndeva;0943 +rvocalicvowelsigngujarati;0AC3 +s;0073 +sabengali;09B8 +sacute;015B +sacutedotaccent;1E65 +sadarabic;0635 +sadeva;0938 +sadfinalarabic;FEBA +sadinitialarabic;FEBB +sadmedialarabic;FEBC +sagujarati;0AB8 +sagurmukhi;0A38 +sahiragana;3055 +sakatakana;30B5 +sakatakanahalfwidth;FF7B +sallallahoualayhewasallamarabic;FDFA +samekh;05E1 +samekhdagesh;FB41 +samekhdageshhebrew;FB41 +samekhhebrew;05E1 +saraaathai;0E32 +saraaethai;0E41 +saraaimaimalaithai;0E44 +saraaimaimuanthai;0E43 +saraamthai;0E33 +saraathai;0E30 +saraethai;0E40 +saraiileftthai;F886 +saraiithai;0E35 +saraileftthai;F885 +saraithai;0E34 +saraothai;0E42 +saraueeleftthai;F888 +saraueethai;0E37 +saraueleftthai;F887 +sarauethai;0E36 +sarauthai;0E38 +sarauuthai;0E39 +sbopomofo;3119 +scaron;0161 +scarondotaccent;1E67 +scedilla;015F +schwa;0259 +schwacyrillic;04D9 +schwadieresiscyrillic;04DB +schwahook;025A +scircle;24E2 +scircumflex;015D +scommaaccent;0219 +sdotaccent;1E61 +sdotbelow;1E63 +sdotbelowdotaccent;1E69 +seagullbelowcmb;033C +second;2033 +secondtonechinese;02CA +section;00A7 +seenarabic;0633 +seenfinalarabic;FEB2 +seeninitialarabic;FEB3 +seenmedialarabic;FEB4 +segol;05B6 +segol13;05B6 +segol1f;05B6 +segol2c;05B6 +segolhebrew;05B6 +segolnarrowhebrew;05B6 +segolquarterhebrew;05B6 +segoltahebrew;0592 +segolwidehebrew;05B6 +seharmenian;057D +sehiragana;305B +sekatakana;30BB +sekatakanahalfwidth;FF7E +semicolon;003B +semicolonarabic;061B +semicolonmonospace;FF1B +semicolonsmall;FE54 +semivoicedmarkkana;309C +semivoicedmarkkanahalfwidth;FF9F +sentisquare;3322 +sentosquare;3323 +seven;0037 +sevenarabic;0667 +sevenbengali;09ED +sevencircle;2466 +sevencircleinversesansserif;2790 +sevendeva;096D +seveneighths;215E +sevengujarati;0AED +sevengurmukhi;0A6D +sevenhackarabic;0667 +sevenhangzhou;3027 +sevenideographicparen;3226 +seveninferior;2087 +sevenmonospace;FF17 +sevenoldstyle;F737 +sevenparen;247A +sevenperiod;248E +sevenpersian;06F7 +sevenroman;2176 +sevensuperior;2077 +seventeencircle;2470 +seventeenparen;2484 +seventeenperiod;2498 +seventhai;0E57 +sfthyphen;00AD +shaarmenian;0577 +shabengali;09B6 +shacyrillic;0448 +shaddaarabic;0651 +shaddadammaarabic;FC61 +shaddadammatanarabic;FC5E +shaddafathaarabic;FC60 +shaddafathatanarabic;0651 064B +shaddakasraarabic;FC62 +shaddakasratanarabic;FC5F +shade;2592 +shadedark;2593 +shadelight;2591 +shademedium;2592 +shadeva;0936 +shagujarati;0AB6 +shagurmukhi;0A36 +shalshelethebrew;0593 +shbopomofo;3115 +shchacyrillic;0449 +sheenarabic;0634 +sheenfinalarabic;FEB6 +sheeninitialarabic;FEB7 +sheenmedialarabic;FEB8 +sheicoptic;03E3 +sheqel;20AA +sheqelhebrew;20AA +sheva;05B0 +sheva115;05B0 +sheva15;05B0 +sheva22;05B0 +sheva2e;05B0 +shevahebrew;05B0 +shevanarrowhebrew;05B0 +shevaquarterhebrew;05B0 +shevawidehebrew;05B0 +shhacyrillic;04BB +shimacoptic;03ED +shin;05E9 +shindagesh;FB49 +shindageshhebrew;FB49 +shindageshshindot;FB2C +shindageshshindothebrew;FB2C +shindageshsindot;FB2D +shindageshsindothebrew;FB2D +shindothebrew;05C1 +shinhebrew;05E9 +shinshindot;FB2A +shinshindothebrew;FB2A +shinsindot;FB2B +shinsindothebrew;FB2B +shook;0282 +sigma;03C3 +sigma1;03C2 +sigmafinal;03C2 +sigmalunatesymbolgreek;03F2 +sihiragana;3057 +sikatakana;30B7 +sikatakanahalfwidth;FF7C +siluqhebrew;05BD +siluqlefthebrew;05BD +similar;223C +sindothebrew;05C2 +siosacirclekorean;3274 +siosaparenkorean;3214 +sioscieuckorean;317E +sioscirclekorean;3266 +sioskiyeokkorean;317A +sioskorean;3145 +siosnieunkorean;317B +siosparenkorean;3206 +siospieupkorean;317D +siostikeutkorean;317C +six;0036 +sixarabic;0666 +sixbengali;09EC +sixcircle;2465 +sixcircleinversesansserif;278F +sixdeva;096C +sixgujarati;0AEC +sixgurmukhi;0A6C +sixhackarabic;0666 +sixhangzhou;3026 +sixideographicparen;3225 +sixinferior;2086 +sixmonospace;FF16 +sixoldstyle;F736 +sixparen;2479 +sixperiod;248D +sixpersian;06F6 +sixroman;2175 +sixsuperior;2076 +sixteencircle;246F +sixteencurrencydenominatorbengali;09F9 +sixteenparen;2483 +sixteenperiod;2497 +sixthai;0E56 +slash;002F +slashmonospace;FF0F +slong;017F +slongdotaccent;1E9B +smileface;263A +smonospace;FF53 +sofpasuqhebrew;05C3 +softhyphen;00AD +softsigncyrillic;044C +sohiragana;305D +sokatakana;30BD +sokatakanahalfwidth;FF7F +soliduslongoverlaycmb;0338 +solidusshortoverlaycmb;0337 +sorusithai;0E29 +sosalathai;0E28 +sosothai;0E0B +sosuathai;0E2A +space;0020 +spacehackarabic;0020 +spade;2660 +spadesuitblack;2660 +spadesuitwhite;2664 +sparen;24AE +squarebelowcmb;033B +squarecc;33C4 +squarecm;339D +squarediagonalcrosshatchfill;25A9 +squarehorizontalfill;25A4 +squarekg;338F +squarekm;339E +squarekmcapital;33CE +squareln;33D1 +squarelog;33D2 +squaremg;338E +squaremil;33D5 +squaremm;339C +squaremsquared;33A1 +squareorthogonalcrosshatchfill;25A6 +squareupperlefttolowerrightfill;25A7 +squareupperrighttolowerleftfill;25A8 +squareverticalfill;25A5 +squarewhitewithsmallblack;25A3 +srsquare;33DB +ssabengali;09B7 +ssadeva;0937 +ssagujarati;0AB7 +ssangcieuckorean;3149 +ssanghieuhkorean;3185 +ssangieungkorean;3180 +ssangkiyeokkorean;3132 +ssangnieunkorean;3165 +ssangpieupkorean;3143 +ssangsioskorean;3146 +ssangtikeutkorean;3138 +ssuperior;F6F2 +sterling;00A3 +sterlingmonospace;FFE1 +strokelongoverlaycmb;0336 +strokeshortoverlaycmb;0335 +subset;2282 +subsetnotequal;228A +subsetorequal;2286 +succeeds;227B +suchthat;220B +suhiragana;3059 +sukatakana;30B9 +sukatakanahalfwidth;FF7D +sukunarabic;0652 +summation;2211 +sun;263C +superset;2283 +supersetnotequal;228B +supersetorequal;2287 +svsquare;33DC +syouwaerasquare;337C +t;0074 +tabengali;09A4 +tackdown;22A4 +tackleft;22A3 +tadeva;0924 +tagujarati;0AA4 +tagurmukhi;0A24 +taharabic;0637 +tahfinalarabic;FEC2 +tahinitialarabic;FEC3 +tahiragana;305F +tahmedialarabic;FEC4 +taisyouerasquare;337D +takatakana;30BF +takatakanahalfwidth;FF80 +tatweelarabic;0640 +tau;03C4 +tav;05EA +tavdages;FB4A +tavdagesh;FB4A +tavdageshhebrew;FB4A +tavhebrew;05EA +tbar;0167 +tbopomofo;310A +tcaron;0165 +tccurl;02A8 +tcedilla;0163 +tcheharabic;0686 +tchehfinalarabic;FB7B +tchehinitialarabic;FB7C +tchehmedialarabic;FB7D +tchehmeeminitialarabic;FB7C FEE4 +tcircle;24E3 +tcircumflexbelow;1E71 +tcommaaccent;0163 +tdieresis;1E97 +tdotaccent;1E6B +tdotbelow;1E6D +tecyrillic;0442 +tedescendercyrillic;04AD +teharabic;062A +tehfinalarabic;FE96 +tehhahinitialarabic;FCA2 +tehhahisolatedarabic;FC0C +tehinitialarabic;FE97 +tehiragana;3066 +tehjeeminitialarabic;FCA1 +tehjeemisolatedarabic;FC0B +tehmarbutaarabic;0629 +tehmarbutafinalarabic;FE94 +tehmedialarabic;FE98 +tehmeeminitialarabic;FCA4 +tehmeemisolatedarabic;FC0E +tehnoonfinalarabic;FC73 +tekatakana;30C6 +tekatakanahalfwidth;FF83 +telephone;2121 +telephoneblack;260E +telishagedolahebrew;05A0 +telishaqetanahebrew;05A9 +tencircle;2469 +tenideographicparen;3229 +tenparen;247D +tenperiod;2491 +tenroman;2179 +tesh;02A7 +tet;05D8 +tetdagesh;FB38 +tetdageshhebrew;FB38 +tethebrew;05D8 +tetsecyrillic;04B5 +tevirhebrew;059B +tevirlefthebrew;059B +thabengali;09A5 +thadeva;0925 +thagujarati;0AA5 +thagurmukhi;0A25 +thalarabic;0630 +thalfinalarabic;FEAC +thanthakhatlowleftthai;F898 +thanthakhatlowrightthai;F897 +thanthakhatthai;0E4C +thanthakhatupperleftthai;F896 +theharabic;062B +thehfinalarabic;FE9A +thehinitialarabic;FE9B +thehmedialarabic;FE9C +thereexists;2203 +therefore;2234 +theta;03B8 +theta1;03D1 +thetasymbolgreek;03D1 +thieuthacirclekorean;3279 +thieuthaparenkorean;3219 +thieuthcirclekorean;326B +thieuthkorean;314C +thieuthparenkorean;320B +thirteencircle;246C +thirteenparen;2480 +thirteenperiod;2494 +thonangmonthothai;0E11 +thook;01AD +thophuthaothai;0E12 +thorn;00FE +thothahanthai;0E17 +thothanthai;0E10 +thothongthai;0E18 +thothungthai;0E16 +thousandcyrillic;0482 +thousandsseparatorarabic;066C +thousandsseparatorpersian;066C +three;0033 +threearabic;0663 +threebengali;09E9 +threecircle;2462 +threecircleinversesansserif;278C +threedeva;0969 +threeeighths;215C +threegujarati;0AE9 +threegurmukhi;0A69 +threehackarabic;0663 +threehangzhou;3023 +threeideographicparen;3222 +threeinferior;2083 +threemonospace;FF13 +threenumeratorbengali;09F6 +threeoldstyle;F733 +threeparen;2476 +threeperiod;248A +threepersian;06F3 +threequarters;00BE +threequartersemdash;F6DE +threeroman;2172 +threesuperior;00B3 +threethai;0E53 +thzsquare;3394 +tihiragana;3061 +tikatakana;30C1 +tikatakanahalfwidth;FF81 +tikeutacirclekorean;3270 +tikeutaparenkorean;3210 +tikeutcirclekorean;3262 +tikeutkorean;3137 +tikeutparenkorean;3202 +tilde;02DC +tildebelowcmb;0330 +tildecmb;0303 +tildecomb;0303 +tildedoublecmb;0360 +tildeoperator;223C +tildeoverlaycmb;0334 +tildeverticalcmb;033E +timescircle;2297 +tipehahebrew;0596 +tipehalefthebrew;0596 +tippigurmukhi;0A70 +titlocyrilliccmb;0483 +tiwnarmenian;057F +tlinebelow;1E6F +tmonospace;FF54 +toarmenian;0569 +tohiragana;3068 +tokatakana;30C8 +tokatakanahalfwidth;FF84 +tonebarextrahighmod;02E5 +tonebarextralowmod;02E9 +tonebarhighmod;02E6 +tonebarlowmod;02E8 +tonebarmidmod;02E7 +tonefive;01BD +tonesix;0185 +tonetwo;01A8 +tonos;0384 +tonsquare;3327 +topatakthai;0E0F +tortoiseshellbracketleft;3014 +tortoiseshellbracketleftsmall;FE5D +tortoiseshellbracketleftvertical;FE39 +tortoiseshellbracketright;3015 +tortoiseshellbracketrightsmall;FE5E +tortoiseshellbracketrightvertical;FE3A +totaothai;0E15 +tpalatalhook;01AB +tparen;24AF +trademark;2122 +trademarksans;F8EA +trademarkserif;F6DB +tretroflexhook;0288 +triagdn;25BC +triaglf;25C4 +triagrt;25BA +triagup;25B2 +ts;02A6 +tsadi;05E6 +tsadidagesh;FB46 +tsadidageshhebrew;FB46 +tsadihebrew;05E6 +tsecyrillic;0446 +tsere;05B5 +tsere12;05B5 +tsere1e;05B5 +tsere2b;05B5 +tserehebrew;05B5 +tserenarrowhebrew;05B5 +tserequarterhebrew;05B5 +tserewidehebrew;05B5 +tshecyrillic;045B +tsuperior;F6F3 +ttabengali;099F +ttadeva;091F +ttagujarati;0A9F +ttagurmukhi;0A1F +tteharabic;0679 +ttehfinalarabic;FB67 +ttehinitialarabic;FB68 +ttehmedialarabic;FB69 +tthabengali;09A0 +tthadeva;0920 +tthagujarati;0AA0 +tthagurmukhi;0A20 +tturned;0287 +tuhiragana;3064 +tukatakana;30C4 +tukatakanahalfwidth;FF82 +tusmallhiragana;3063 +tusmallkatakana;30C3 +tusmallkatakanahalfwidth;FF6F +twelvecircle;246B +twelveparen;247F +twelveperiod;2493 +twelveroman;217B +twentycircle;2473 +twentyhangzhou;5344 +twentyparen;2487 +twentyperiod;249B +two;0032 +twoarabic;0662 +twobengali;09E8 +twocircle;2461 +twocircleinversesansserif;278B +twodeva;0968 +twodotenleader;2025 +twodotleader;2025 +twodotleadervertical;FE30 +twogujarati;0AE8 +twogurmukhi;0A68 +twohackarabic;0662 +twohangzhou;3022 +twoideographicparen;3221 +twoinferior;2082 +twomonospace;FF12 +twonumeratorbengali;09F5 +twooldstyle;F732 +twoparen;2475 +twoperiod;2489 +twopersian;06F2 +tworoman;2171 +twostroke;01BB +twosuperior;00B2 +twothai;0E52 +twothirds;2154 +u;0075 +uacute;00FA +ubar;0289 +ubengali;0989 +ubopomofo;3128 +ubreve;016D +ucaron;01D4 +ucircle;24E4 +ucircumflex;00FB +ucircumflexbelow;1E77 +ucyrillic;0443 +udattadeva;0951 +udblacute;0171 +udblgrave;0215 +udeva;0909 +udieresis;00FC +udieresisacute;01D8 +udieresisbelow;1E73 +udieresiscaron;01DA +udieresiscyrillic;04F1 +udieresisgrave;01DC +udieresismacron;01D6 +udotbelow;1EE5 +ugrave;00F9 +ugujarati;0A89 +ugurmukhi;0A09 +uhiragana;3046 +uhookabove;1EE7 +uhorn;01B0 +uhornacute;1EE9 +uhorndotbelow;1EF1 +uhorngrave;1EEB +uhornhookabove;1EED +uhorntilde;1EEF +uhungarumlaut;0171 +uhungarumlautcyrillic;04F3 +uinvertedbreve;0217 +ukatakana;30A6 +ukatakanahalfwidth;FF73 +ukcyrillic;0479 +ukorean;315C +umacron;016B +umacroncyrillic;04EF +umacrondieresis;1E7B +umatragurmukhi;0A41 +umonospace;FF55 +underscore;005F +underscoredbl;2017 +underscoremonospace;FF3F +underscorevertical;FE33 +underscorewavy;FE4F +union;222A +universal;2200 +uogonek;0173 +uparen;24B0 +upblock;2580 +upperdothebrew;05C4 +upsilon;03C5 +upsilondieresis;03CB +upsilondieresistonos;03B0 +upsilonlatin;028A +upsilontonos;03CD +uptackbelowcmb;031D +uptackmod;02D4 +uragurmukhi;0A73 +uring;016F +ushortcyrillic;045E +usmallhiragana;3045 +usmallkatakana;30A5 +usmallkatakanahalfwidth;FF69 +ustraightcyrillic;04AF +ustraightstrokecyrillic;04B1 +utilde;0169 +utildeacute;1E79 +utildebelow;1E75 +uubengali;098A +uudeva;090A +uugujarati;0A8A +uugurmukhi;0A0A +uumatragurmukhi;0A42 +uuvowelsignbengali;09C2 +uuvowelsigndeva;0942 +uuvowelsigngujarati;0AC2 +uvowelsignbengali;09C1 +uvowelsigndeva;0941 +uvowelsigngujarati;0AC1 +v;0076 +vadeva;0935 +vagujarati;0AB5 +vagurmukhi;0A35 +vakatakana;30F7 +vav;05D5 +vavdagesh;FB35 +vavdagesh65;FB35 +vavdageshhebrew;FB35 +vavhebrew;05D5 +vavholam;FB4B +vavholamhebrew;FB4B +vavvavhebrew;05F0 +vavyodhebrew;05F1 +vcircle;24E5 +vdotbelow;1E7F +vecyrillic;0432 +veharabic;06A4 +vehfinalarabic;FB6B +vehinitialarabic;FB6C +vehmedialarabic;FB6D +vekatakana;30F9 +venus;2640 +verticalbar;007C +verticallineabovecmb;030D +verticallinebelowcmb;0329 +verticallinelowmod;02CC +verticallinemod;02C8 +vewarmenian;057E +vhook;028B +vikatakana;30F8 +viramabengali;09CD +viramadeva;094D +viramagujarati;0ACD +visargabengali;0983 +visargadeva;0903 +visargagujarati;0A83 +vmonospace;FF56 +voarmenian;0578 +voicediterationhiragana;309E +voicediterationkatakana;30FE +voicedmarkkana;309B +voicedmarkkanahalfwidth;FF9E +vokatakana;30FA +vparen;24B1 +vtilde;1E7D +vturned;028C +vuhiragana;3094 +vukatakana;30F4 +w;0077 +wacute;1E83 +waekorean;3159 +wahiragana;308F +wakatakana;30EF +wakatakanahalfwidth;FF9C +wakorean;3158 +wasmallhiragana;308E +wasmallkatakana;30EE +wattosquare;3357 +wavedash;301C +wavyunderscorevertical;FE34 +wawarabic;0648 +wawfinalarabic;FEEE +wawhamzaabovearabic;0624 +wawhamzaabovefinalarabic;FE86 +wbsquare;33DD +wcircle;24E6 +wcircumflex;0175 +wdieresis;1E85 +wdotaccent;1E87 +wdotbelow;1E89 +wehiragana;3091 +weierstrass;2118 +wekatakana;30F1 +wekorean;315E +weokorean;315D +wgrave;1E81 +whitebullet;25E6 +whitecircle;25CB +whitecircleinverse;25D9 +whitecornerbracketleft;300E +whitecornerbracketleftvertical;FE43 +whitecornerbracketright;300F +whitecornerbracketrightvertical;FE44 +whitediamond;25C7 +whitediamondcontainingblacksmalldiamond;25C8 +whitedownpointingsmalltriangle;25BF +whitedownpointingtriangle;25BD +whiteleftpointingsmalltriangle;25C3 +whiteleftpointingtriangle;25C1 +whitelenticularbracketleft;3016 +whitelenticularbracketright;3017 +whiterightpointingsmalltriangle;25B9 +whiterightpointingtriangle;25B7 +whitesmallsquare;25AB +whitesmilingface;263A +whitesquare;25A1 +whitestar;2606 +whitetelephone;260F +whitetortoiseshellbracketleft;3018 +whitetortoiseshellbracketright;3019 +whiteuppointingsmalltriangle;25B5 +whiteuppointingtriangle;25B3 +wihiragana;3090 +wikatakana;30F0 +wikorean;315F +wmonospace;FF57 +wohiragana;3092 +wokatakana;30F2 +wokatakanahalfwidth;FF66 +won;20A9 +wonmonospace;FFE6 +wowaenthai;0E27 +wparen;24B2 +wring;1E98 +wsuperior;02B7 +wturned;028D +wynn;01BF +x;0078 +xabovecmb;033D +xbopomofo;3112 +xcircle;24E7 +xdieresis;1E8D +xdotaccent;1E8B +xeharmenian;056D +xi;03BE +xmonospace;FF58 +xparen;24B3 +xsuperior;02E3 +y;0079 +yaadosquare;334E +yabengali;09AF +yacute;00FD +yadeva;092F +yaekorean;3152 +yagujarati;0AAF +yagurmukhi;0A2F +yahiragana;3084 +yakatakana;30E4 +yakatakanahalfwidth;FF94 +yakorean;3151 +yamakkanthai;0E4E +yasmallhiragana;3083 +yasmallkatakana;30E3 +yasmallkatakanahalfwidth;FF6C +yatcyrillic;0463 +ycircle;24E8 +ycircumflex;0177 +ydieresis;00FF +ydotaccent;1E8F +ydotbelow;1EF5 +yeharabic;064A +yehbarreearabic;06D2 +yehbarreefinalarabic;FBAF +yehfinalarabic;FEF2 +yehhamzaabovearabic;0626 +yehhamzaabovefinalarabic;FE8A +yehhamzaaboveinitialarabic;FE8B +yehhamzaabovemedialarabic;FE8C +yehinitialarabic;FEF3 +yehmedialarabic;FEF4 +yehmeeminitialarabic;FCDD +yehmeemisolatedarabic;FC58 +yehnoonfinalarabic;FC94 +yehthreedotsbelowarabic;06D1 +yekorean;3156 +yen;00A5 +yenmonospace;FFE5 +yeokorean;3155 +yeorinhieuhkorean;3186 +yerahbenyomohebrew;05AA +yerahbenyomolefthebrew;05AA +yericyrillic;044B +yerudieresiscyrillic;04F9 +yesieungkorean;3181 +yesieungpansioskorean;3183 +yesieungsioskorean;3182 +yetivhebrew;059A +ygrave;1EF3 +yhook;01B4 +yhookabove;1EF7 +yiarmenian;0575 +yicyrillic;0457 +yikorean;3162 +yinyang;262F +yiwnarmenian;0582 +ymonospace;FF59 +yod;05D9 +yoddagesh;FB39 +yoddageshhebrew;FB39 +yodhebrew;05D9 +yodyodhebrew;05F2 +yodyodpatahhebrew;FB1F +yohiragana;3088 +yoikorean;3189 +yokatakana;30E8 +yokatakanahalfwidth;FF96 +yokorean;315B +yosmallhiragana;3087 +yosmallkatakana;30E7 +yosmallkatakanahalfwidth;FF6E +yotgreek;03F3 +yoyaekorean;3188 +yoyakorean;3187 +yoyakthai;0E22 +yoyingthai;0E0D +yparen;24B4 +ypogegrammeni;037A +ypogegrammenigreekcmb;0345 +yr;01A6 +yring;1E99 +ysuperior;02B8 +ytilde;1EF9 +yturned;028E +yuhiragana;3086 +yuikorean;318C +yukatakana;30E6 +yukatakanahalfwidth;FF95 +yukorean;3160 +yusbigcyrillic;046B +yusbigiotifiedcyrillic;046D +yuslittlecyrillic;0467 +yuslittleiotifiedcyrillic;0469 +yusmallhiragana;3085 +yusmallkatakana;30E5 +yusmallkatakanahalfwidth;FF6D +yuyekorean;318B +yuyeokorean;318A +yyabengali;09DF +yyadeva;095F +z;007A +zaarmenian;0566 +zacute;017A +zadeva;095B +zagurmukhi;0A5B +zaharabic;0638 +zahfinalarabic;FEC6 +zahinitialarabic;FEC7 +zahiragana;3056 +zahmedialarabic;FEC8 +zainarabic;0632 +zainfinalarabic;FEB0 +zakatakana;30B6 +zaqefgadolhebrew;0595 +zaqefqatanhebrew;0594 +zarqahebrew;0598 +zayin;05D6 +zayindagesh;FB36 +zayindageshhebrew;FB36 +zayinhebrew;05D6 +zbopomofo;3117 +zcaron;017E +zcircle;24E9 +zcircumflex;1E91 +zcurl;0291 +zdot;017C +zdotaccent;017C +zdotbelow;1E93 +zecyrillic;0437 +zedescendercyrillic;0499 +zedieresiscyrillic;04DF +zehiragana;305C +zekatakana;30BC +zero;0030 +zeroarabic;0660 +zerobengali;09E6 +zerodeva;0966 +zerogujarati;0AE6 +zerogurmukhi;0A66 +zerohackarabic;0660 +zeroinferior;2080 +zeromonospace;FF10 +zerooldstyle;F730 +zeropersian;06F0 +zerosuperior;2070 +zerothai;0E50 +zerowidthjoiner;FEFF +zerowidthnonjoiner;200C +zerowidthspace;200B +zeta;03B6 +zhbopomofo;3113 +zhearmenian;056A +zhebrevecyrillic;04C2 +zhecyrillic;0436 +zhedescendercyrillic;0497 +zhedieresiscyrillic;04DD +zihiragana;3058 +zikatakana;30B8 +zinorhebrew;05AE +zlinebelow;1E95 +zmonospace;FF5A +zohiragana;305E +zokatakana;30BE +zparen;24B5 +zretroflexhook;0290 +zstroke;01B6 +zuhiragana;305A +zukatakana;30BA +# END +""" + + +_aglfnText = """\ +# ----------------------------------------------------------- +# Copyright 2002-2019 Adobe (http://www.adobe.com/). +# +# Redistribution and use in source and binary forms, with or +# without modification, are permitted provided that the +# following conditions are met: +# +# Redistributions of source code must retain the above +# copyright notice, this list of conditions and the following +# disclaimer. +# +# Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials +# provided with the distribution. +# +# Neither the name of Adobe nor the names of its contributors +# may be used to endorse or promote products derived from this +# software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ----------------------------------------------------------- +# Name: Adobe Glyph List For New Fonts +# Table version: 1.7 +# Date: November 6, 2008 +# URL: https://github.com/adobe-type-tools/agl-aglfn +# +# Description: +# +# AGLFN (Adobe Glyph List For New Fonts) provides a list of base glyph +# names that are recommended for new fonts, which are compatible with +# the AGL (Adobe Glyph List) Specification, and which should be used +# as described in Section 6 of that document. AGLFN comprises the set +# of glyph names from AGL that map via the AGL Specification rules to +# the semantically correct UV (Unicode Value). For example, "Asmall" +# is omitted because AGL maps this glyph name to the PUA (Private Use +# Area) value U+F761, rather than to the UV that maps from the glyph +# name "A." Also omitted is "ffi," because AGL maps this to the +# Alphabetic Presentation Forms value U+FB03, rather than decomposing +# it into the following sequence of three UVs: U+0066, U+0066, and +# U+0069. The name "arrowvertex" has been omitted because this glyph +# now has a real UV, and AGL is now incorrect in mapping it to the PUA +# value U+F8E6. If you do not find an appropriate name for your glyph +# in this list, then please refer to Section 6 of the AGL +# Specification. +# +# Format: three semicolon-delimited fields: +# (1) Standard UV or CUS UV--four uppercase hexadecimal digits +# (2) Glyph name--upper/lowercase letters and digits +# (3) Character names: Unicode character names for standard UVs, and +# descriptive names for CUS UVs--uppercase letters, hyphen, and +# space +# +# The records are sorted by glyph name in increasing ASCII order, +# entries with the same glyph name are sorted in decreasing priority +# order, the UVs and Unicode character names are provided for +# convenience, lines starting with "#" are comments, and blank lines +# should be ignored. +# +# Revision History: +# +# 1.7 [6 November 2008] +# - Reverted to the original 1.4 and earlier mappings for Delta, +# Omega, and mu. +# - Removed mappings for "afii" names. These should now be assigned +# "uni" names. +# - Removed mappings for "commaaccent" names. These should now be +# assigned "uni" names. +# +# 1.6 [30 January 2006] +# - Completed work intended in 1.5. +# +# 1.5 [23 November 2005] +# - Removed duplicated block at end of file. +# - Changed mappings: +# 2206;Delta;INCREMENT changed to 0394;Delta;GREEK CAPITAL LETTER DELTA +# 2126;Omega;OHM SIGN changed to 03A9;Omega;GREEK CAPITAL LETTER OMEGA +# 03BC;mu;MICRO SIGN changed to 03BC;mu;GREEK SMALL LETTER MU +# - Corrected statement above about why "ffi" is omitted. +# +# 1.4 [24 September 2003] +# - Changed version to 1.4, to avoid confusion with the AGL 1.3. +# - Fixed spelling errors in the header. +# - Fully removed "arrowvertex," as it is mapped only to a PUA Unicode +# value in some fonts. +# +# 1.1 [17 April 2003] +# - Renamed [Tt]cedilla back to [Tt]commaaccent. +# +# 1.0 [31 January 2003] +# - Original version. +# - Derived from the AGLv1.2 by: +# removing the PUA area codes; +# removing duplicate Unicode mappings; and +# renaming "tcommaaccent" to "tcedilla" and "Tcommaaccent" to "Tcedilla" +# +0041;A;LATIN CAPITAL LETTER A +00C6;AE;LATIN CAPITAL LETTER AE +01FC;AEacute;LATIN CAPITAL LETTER AE WITH ACUTE +00C1;Aacute;LATIN CAPITAL LETTER A WITH ACUTE +0102;Abreve;LATIN CAPITAL LETTER A WITH BREVE +00C2;Acircumflex;LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C4;Adieresis;LATIN CAPITAL LETTER A WITH DIAERESIS +00C0;Agrave;LATIN CAPITAL LETTER A WITH GRAVE +0391;Alpha;GREEK CAPITAL LETTER ALPHA +0386;Alphatonos;GREEK CAPITAL LETTER ALPHA WITH TONOS +0100;Amacron;LATIN CAPITAL LETTER A WITH MACRON +0104;Aogonek;LATIN CAPITAL LETTER A WITH OGONEK +00C5;Aring;LATIN CAPITAL LETTER A WITH RING ABOVE +01FA;Aringacute;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +00C3;Atilde;LATIN CAPITAL LETTER A WITH TILDE +0042;B;LATIN CAPITAL LETTER B +0392;Beta;GREEK CAPITAL LETTER BETA +0043;C;LATIN CAPITAL LETTER C +0106;Cacute;LATIN CAPITAL LETTER C WITH ACUTE +010C;Ccaron;LATIN CAPITAL LETTER C WITH CARON +00C7;Ccedilla;LATIN CAPITAL LETTER C WITH CEDILLA +0108;Ccircumflex;LATIN CAPITAL LETTER C WITH CIRCUMFLEX +010A;Cdotaccent;LATIN CAPITAL LETTER C WITH DOT ABOVE +03A7;Chi;GREEK CAPITAL LETTER CHI +0044;D;LATIN CAPITAL LETTER D +010E;Dcaron;LATIN CAPITAL LETTER D WITH CARON +0110;Dcroat;LATIN CAPITAL LETTER D WITH STROKE +2206;Delta;INCREMENT +0045;E;LATIN CAPITAL LETTER E +00C9;Eacute;LATIN CAPITAL LETTER E WITH ACUTE +0114;Ebreve;LATIN CAPITAL LETTER E WITH BREVE +011A;Ecaron;LATIN CAPITAL LETTER E WITH CARON +00CA;Ecircumflex;LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CB;Edieresis;LATIN CAPITAL LETTER E WITH DIAERESIS +0116;Edotaccent;LATIN CAPITAL LETTER E WITH DOT ABOVE +00C8;Egrave;LATIN CAPITAL LETTER E WITH GRAVE +0112;Emacron;LATIN CAPITAL LETTER E WITH MACRON +014A;Eng;LATIN CAPITAL LETTER ENG +0118;Eogonek;LATIN CAPITAL LETTER E WITH OGONEK +0395;Epsilon;GREEK CAPITAL LETTER EPSILON +0388;Epsilontonos;GREEK CAPITAL LETTER EPSILON WITH TONOS +0397;Eta;GREEK CAPITAL LETTER ETA +0389;Etatonos;GREEK CAPITAL LETTER ETA WITH TONOS +00D0;Eth;LATIN CAPITAL LETTER ETH +20AC;Euro;EURO SIGN +0046;F;LATIN CAPITAL LETTER F +0047;G;LATIN CAPITAL LETTER G +0393;Gamma;GREEK CAPITAL LETTER GAMMA +011E;Gbreve;LATIN CAPITAL LETTER G WITH BREVE +01E6;Gcaron;LATIN CAPITAL LETTER G WITH CARON +011C;Gcircumflex;LATIN CAPITAL LETTER G WITH CIRCUMFLEX +0120;Gdotaccent;LATIN CAPITAL LETTER G WITH DOT ABOVE +0048;H;LATIN CAPITAL LETTER H +25CF;H18533;BLACK CIRCLE +25AA;H18543;BLACK SMALL SQUARE +25AB;H18551;WHITE SMALL SQUARE +25A1;H22073;WHITE SQUARE +0126;Hbar;LATIN CAPITAL LETTER H WITH STROKE +0124;Hcircumflex;LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0049;I;LATIN CAPITAL LETTER I +0132;IJ;LATIN CAPITAL LIGATURE IJ +00CD;Iacute;LATIN CAPITAL LETTER I WITH ACUTE +012C;Ibreve;LATIN CAPITAL LETTER I WITH BREVE +00CE;Icircumflex;LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF;Idieresis;LATIN CAPITAL LETTER I WITH DIAERESIS +0130;Idotaccent;LATIN CAPITAL LETTER I WITH DOT ABOVE +2111;Ifraktur;BLACK-LETTER CAPITAL I +00CC;Igrave;LATIN CAPITAL LETTER I WITH GRAVE +012A;Imacron;LATIN CAPITAL LETTER I WITH MACRON +012E;Iogonek;LATIN CAPITAL LETTER I WITH OGONEK +0399;Iota;GREEK CAPITAL LETTER IOTA +03AA;Iotadieresis;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +038A;Iotatonos;GREEK CAPITAL LETTER IOTA WITH TONOS +0128;Itilde;LATIN CAPITAL LETTER I WITH TILDE +004A;J;LATIN CAPITAL LETTER J +0134;Jcircumflex;LATIN CAPITAL LETTER J WITH CIRCUMFLEX +004B;K;LATIN CAPITAL LETTER K +039A;Kappa;GREEK CAPITAL LETTER KAPPA +004C;L;LATIN CAPITAL LETTER L +0139;Lacute;LATIN CAPITAL LETTER L WITH ACUTE +039B;Lambda;GREEK CAPITAL LETTER LAMDA +013D;Lcaron;LATIN CAPITAL LETTER L WITH CARON +013F;Ldot;LATIN CAPITAL LETTER L WITH MIDDLE DOT +0141;Lslash;LATIN CAPITAL LETTER L WITH STROKE +004D;M;LATIN CAPITAL LETTER M +039C;Mu;GREEK CAPITAL LETTER MU +004E;N;LATIN CAPITAL LETTER N +0143;Nacute;LATIN CAPITAL LETTER N WITH ACUTE +0147;Ncaron;LATIN CAPITAL LETTER N WITH CARON +00D1;Ntilde;LATIN CAPITAL LETTER N WITH TILDE +039D;Nu;GREEK CAPITAL LETTER NU +004F;O;LATIN CAPITAL LETTER O +0152;OE;LATIN CAPITAL LIGATURE OE +00D3;Oacute;LATIN CAPITAL LETTER O WITH ACUTE +014E;Obreve;LATIN CAPITAL LETTER O WITH BREVE +00D4;Ocircumflex;LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00D6;Odieresis;LATIN CAPITAL LETTER O WITH DIAERESIS +00D2;Ograve;LATIN CAPITAL LETTER O WITH GRAVE +01A0;Ohorn;LATIN CAPITAL LETTER O WITH HORN +0150;Ohungarumlaut;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +014C;Omacron;LATIN CAPITAL LETTER O WITH MACRON +2126;Omega;OHM SIGN +038F;Omegatonos;GREEK CAPITAL LETTER OMEGA WITH TONOS +039F;Omicron;GREEK CAPITAL LETTER OMICRON +038C;Omicrontonos;GREEK CAPITAL LETTER OMICRON WITH TONOS +00D8;Oslash;LATIN CAPITAL LETTER O WITH STROKE +01FE;Oslashacute;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +00D5;Otilde;LATIN CAPITAL LETTER O WITH TILDE +0050;P;LATIN CAPITAL LETTER P +03A6;Phi;GREEK CAPITAL LETTER PHI +03A0;Pi;GREEK CAPITAL LETTER PI +03A8;Psi;GREEK CAPITAL LETTER PSI +0051;Q;LATIN CAPITAL LETTER Q +0052;R;LATIN CAPITAL LETTER R +0154;Racute;LATIN CAPITAL LETTER R WITH ACUTE +0158;Rcaron;LATIN CAPITAL LETTER R WITH CARON +211C;Rfraktur;BLACK-LETTER CAPITAL R +03A1;Rho;GREEK CAPITAL LETTER RHO +0053;S;LATIN CAPITAL LETTER S +250C;SF010000;BOX DRAWINGS LIGHT DOWN AND RIGHT +2514;SF020000;BOX DRAWINGS LIGHT UP AND RIGHT +2510;SF030000;BOX DRAWINGS LIGHT DOWN AND LEFT +2518;SF040000;BOX DRAWINGS LIGHT UP AND LEFT +253C;SF050000;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +252C;SF060000;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +2534;SF070000;BOX DRAWINGS LIGHT UP AND HORIZONTAL +251C;SF080000;BOX DRAWINGS LIGHT VERTICAL AND RIGHT +2524;SF090000;BOX DRAWINGS LIGHT VERTICAL AND LEFT +2500;SF100000;BOX DRAWINGS LIGHT HORIZONTAL +2502;SF110000;BOX DRAWINGS LIGHT VERTICAL +2561;SF190000;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE +2562;SF200000;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE +2556;SF210000;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE +2555;SF220000;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE +2563;SF230000;BOX DRAWINGS DOUBLE VERTICAL AND LEFT +2551;SF240000;BOX DRAWINGS DOUBLE VERTICAL +2557;SF250000;BOX DRAWINGS DOUBLE DOWN AND LEFT +255D;SF260000;BOX DRAWINGS DOUBLE UP AND LEFT +255C;SF270000;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE +255B;SF280000;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE +255E;SF360000;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE +255F;SF370000;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE +255A;SF380000;BOX DRAWINGS DOUBLE UP AND RIGHT +2554;SF390000;BOX DRAWINGS DOUBLE DOWN AND RIGHT +2569;SF400000;BOX DRAWINGS DOUBLE UP AND HORIZONTAL +2566;SF410000;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL +2560;SF420000;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT +2550;SF430000;BOX DRAWINGS DOUBLE HORIZONTAL +256C;SF440000;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL +2567;SF450000;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE +2568;SF460000;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE +2564;SF470000;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE +2565;SF480000;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE +2559;SF490000;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE +2558;SF500000;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE +2552;SF510000;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE +2553;SF520000;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE +256B;SF530000;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE +256A;SF540000;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE +015A;Sacute;LATIN CAPITAL LETTER S WITH ACUTE +0160;Scaron;LATIN CAPITAL LETTER S WITH CARON +015E;Scedilla;LATIN CAPITAL LETTER S WITH CEDILLA +015C;Scircumflex;LATIN CAPITAL LETTER S WITH CIRCUMFLEX +03A3;Sigma;GREEK CAPITAL LETTER SIGMA +0054;T;LATIN CAPITAL LETTER T +03A4;Tau;GREEK CAPITAL LETTER TAU +0166;Tbar;LATIN CAPITAL LETTER T WITH STROKE +0164;Tcaron;LATIN CAPITAL LETTER T WITH CARON +0398;Theta;GREEK CAPITAL LETTER THETA +00DE;Thorn;LATIN CAPITAL LETTER THORN +0055;U;LATIN CAPITAL LETTER U +00DA;Uacute;LATIN CAPITAL LETTER U WITH ACUTE +016C;Ubreve;LATIN CAPITAL LETTER U WITH BREVE +00DB;Ucircumflex;LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00DC;Udieresis;LATIN CAPITAL LETTER U WITH DIAERESIS +00D9;Ugrave;LATIN CAPITAL LETTER U WITH GRAVE +01AF;Uhorn;LATIN CAPITAL LETTER U WITH HORN +0170;Uhungarumlaut;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +016A;Umacron;LATIN CAPITAL LETTER U WITH MACRON +0172;Uogonek;LATIN CAPITAL LETTER U WITH OGONEK +03A5;Upsilon;GREEK CAPITAL LETTER UPSILON +03D2;Upsilon1;GREEK UPSILON WITH HOOK SYMBOL +03AB;Upsilondieresis;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +038E;Upsilontonos;GREEK CAPITAL LETTER UPSILON WITH TONOS +016E;Uring;LATIN CAPITAL LETTER U WITH RING ABOVE +0168;Utilde;LATIN CAPITAL LETTER U WITH TILDE +0056;V;LATIN CAPITAL LETTER V +0057;W;LATIN CAPITAL LETTER W +1E82;Wacute;LATIN CAPITAL LETTER W WITH ACUTE +0174;Wcircumflex;LATIN CAPITAL LETTER W WITH CIRCUMFLEX +1E84;Wdieresis;LATIN CAPITAL LETTER W WITH DIAERESIS +1E80;Wgrave;LATIN CAPITAL LETTER W WITH GRAVE +0058;X;LATIN CAPITAL LETTER X +039E;Xi;GREEK CAPITAL LETTER XI +0059;Y;LATIN CAPITAL LETTER Y +00DD;Yacute;LATIN CAPITAL LETTER Y WITH ACUTE +0176;Ycircumflex;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0178;Ydieresis;LATIN CAPITAL LETTER Y WITH DIAERESIS +1EF2;Ygrave;LATIN CAPITAL LETTER Y WITH GRAVE +005A;Z;LATIN CAPITAL LETTER Z +0179;Zacute;LATIN CAPITAL LETTER Z WITH ACUTE +017D;Zcaron;LATIN CAPITAL LETTER Z WITH CARON +017B;Zdotaccent;LATIN CAPITAL LETTER Z WITH DOT ABOVE +0396;Zeta;GREEK CAPITAL LETTER ZETA +0061;a;LATIN SMALL LETTER A +00E1;aacute;LATIN SMALL LETTER A WITH ACUTE +0103;abreve;LATIN SMALL LETTER A WITH BREVE +00E2;acircumflex;LATIN SMALL LETTER A WITH CIRCUMFLEX +00B4;acute;ACUTE ACCENT +0301;acutecomb;COMBINING ACUTE ACCENT +00E4;adieresis;LATIN SMALL LETTER A WITH DIAERESIS +00E6;ae;LATIN SMALL LETTER AE +01FD;aeacute;LATIN SMALL LETTER AE WITH ACUTE +00E0;agrave;LATIN SMALL LETTER A WITH GRAVE +2135;aleph;ALEF SYMBOL +03B1;alpha;GREEK SMALL LETTER ALPHA +03AC;alphatonos;GREEK SMALL LETTER ALPHA WITH TONOS +0101;amacron;LATIN SMALL LETTER A WITH MACRON +0026;ampersand;AMPERSAND +2220;angle;ANGLE +2329;angleleft;LEFT-POINTING ANGLE BRACKET +232A;angleright;RIGHT-POINTING ANGLE BRACKET +0387;anoteleia;GREEK ANO TELEIA +0105;aogonek;LATIN SMALL LETTER A WITH OGONEK +2248;approxequal;ALMOST EQUAL TO +00E5;aring;LATIN SMALL LETTER A WITH RING ABOVE +01FB;aringacute;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +2194;arrowboth;LEFT RIGHT ARROW +21D4;arrowdblboth;LEFT RIGHT DOUBLE ARROW +21D3;arrowdbldown;DOWNWARDS DOUBLE ARROW +21D0;arrowdblleft;LEFTWARDS DOUBLE ARROW +21D2;arrowdblright;RIGHTWARDS DOUBLE ARROW +21D1;arrowdblup;UPWARDS DOUBLE ARROW +2193;arrowdown;DOWNWARDS ARROW +2190;arrowleft;LEFTWARDS ARROW +2192;arrowright;RIGHTWARDS ARROW +2191;arrowup;UPWARDS ARROW +2195;arrowupdn;UP DOWN ARROW +21A8;arrowupdnbse;UP DOWN ARROW WITH BASE +005E;asciicircum;CIRCUMFLEX ACCENT +007E;asciitilde;TILDE +002A;asterisk;ASTERISK +2217;asteriskmath;ASTERISK OPERATOR +0040;at;COMMERCIAL AT +00E3;atilde;LATIN SMALL LETTER A WITH TILDE +0062;b;LATIN SMALL LETTER B +005C;backslash;REVERSE SOLIDUS +007C;bar;VERTICAL LINE +03B2;beta;GREEK SMALL LETTER BETA +2588;block;FULL BLOCK +007B;braceleft;LEFT CURLY BRACKET +007D;braceright;RIGHT CURLY BRACKET +005B;bracketleft;LEFT SQUARE BRACKET +005D;bracketright;RIGHT SQUARE BRACKET +02D8;breve;BREVE +00A6;brokenbar;BROKEN BAR +2022;bullet;BULLET +0063;c;LATIN SMALL LETTER C +0107;cacute;LATIN SMALL LETTER C WITH ACUTE +02C7;caron;CARON +21B5;carriagereturn;DOWNWARDS ARROW WITH CORNER LEFTWARDS +010D;ccaron;LATIN SMALL LETTER C WITH CARON +00E7;ccedilla;LATIN SMALL LETTER C WITH CEDILLA +0109;ccircumflex;LATIN SMALL LETTER C WITH CIRCUMFLEX +010B;cdotaccent;LATIN SMALL LETTER C WITH DOT ABOVE +00B8;cedilla;CEDILLA +00A2;cent;CENT SIGN +03C7;chi;GREEK SMALL LETTER CHI +25CB;circle;WHITE CIRCLE +2297;circlemultiply;CIRCLED TIMES +2295;circleplus;CIRCLED PLUS +02C6;circumflex;MODIFIER LETTER CIRCUMFLEX ACCENT +2663;club;BLACK CLUB SUIT +003A;colon;COLON +20A1;colonmonetary;COLON SIGN +002C;comma;COMMA +2245;congruent;APPROXIMATELY EQUAL TO +00A9;copyright;COPYRIGHT SIGN +00A4;currency;CURRENCY SIGN +0064;d;LATIN SMALL LETTER D +2020;dagger;DAGGER +2021;daggerdbl;DOUBLE DAGGER +010F;dcaron;LATIN SMALL LETTER D WITH CARON +0111;dcroat;LATIN SMALL LETTER D WITH STROKE +00B0;degree;DEGREE SIGN +03B4;delta;GREEK SMALL LETTER DELTA +2666;diamond;BLACK DIAMOND SUIT +00A8;dieresis;DIAERESIS +0385;dieresistonos;GREEK DIALYTIKA TONOS +00F7;divide;DIVISION SIGN +2593;dkshade;DARK SHADE +2584;dnblock;LOWER HALF BLOCK +0024;dollar;DOLLAR SIGN +20AB;dong;DONG SIGN +02D9;dotaccent;DOT ABOVE +0323;dotbelowcomb;COMBINING DOT BELOW +0131;dotlessi;LATIN SMALL LETTER DOTLESS I +22C5;dotmath;DOT OPERATOR +0065;e;LATIN SMALL LETTER E +00E9;eacute;LATIN SMALL LETTER E WITH ACUTE +0115;ebreve;LATIN SMALL LETTER E WITH BREVE +011B;ecaron;LATIN SMALL LETTER E WITH CARON +00EA;ecircumflex;LATIN SMALL LETTER E WITH CIRCUMFLEX +00EB;edieresis;LATIN SMALL LETTER E WITH DIAERESIS +0117;edotaccent;LATIN SMALL LETTER E WITH DOT ABOVE +00E8;egrave;LATIN SMALL LETTER E WITH GRAVE +0038;eight;DIGIT EIGHT +2208;element;ELEMENT OF +2026;ellipsis;HORIZONTAL ELLIPSIS +0113;emacron;LATIN SMALL LETTER E WITH MACRON +2014;emdash;EM DASH +2205;emptyset;EMPTY SET +2013;endash;EN DASH +014B;eng;LATIN SMALL LETTER ENG +0119;eogonek;LATIN SMALL LETTER E WITH OGONEK +03B5;epsilon;GREEK SMALL LETTER EPSILON +03AD;epsilontonos;GREEK SMALL LETTER EPSILON WITH TONOS +003D;equal;EQUALS SIGN +2261;equivalence;IDENTICAL TO +212E;estimated;ESTIMATED SYMBOL +03B7;eta;GREEK SMALL LETTER ETA +03AE;etatonos;GREEK SMALL LETTER ETA WITH TONOS +00F0;eth;LATIN SMALL LETTER ETH +0021;exclam;EXCLAMATION MARK +203C;exclamdbl;DOUBLE EXCLAMATION MARK +00A1;exclamdown;INVERTED EXCLAMATION MARK +2203;existential;THERE EXISTS +0066;f;LATIN SMALL LETTER F +2640;female;FEMALE SIGN +2012;figuredash;FIGURE DASH +25A0;filledbox;BLACK SQUARE +25AC;filledrect;BLACK RECTANGLE +0035;five;DIGIT FIVE +215D;fiveeighths;VULGAR FRACTION FIVE EIGHTHS +0192;florin;LATIN SMALL LETTER F WITH HOOK +0034;four;DIGIT FOUR +2044;fraction;FRACTION SLASH +20A3;franc;FRENCH FRANC SIGN +0067;g;LATIN SMALL LETTER G +03B3;gamma;GREEK SMALL LETTER GAMMA +011F;gbreve;LATIN SMALL LETTER G WITH BREVE +01E7;gcaron;LATIN SMALL LETTER G WITH CARON +011D;gcircumflex;LATIN SMALL LETTER G WITH CIRCUMFLEX +0121;gdotaccent;LATIN SMALL LETTER G WITH DOT ABOVE +00DF;germandbls;LATIN SMALL LETTER SHARP S +2207;gradient;NABLA +0060;grave;GRAVE ACCENT +0300;gravecomb;COMBINING GRAVE ACCENT +003E;greater;GREATER-THAN SIGN +2265;greaterequal;GREATER-THAN OR EQUAL TO +00AB;guillemotleft;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +00BB;guillemotright;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +2039;guilsinglleft;SINGLE LEFT-POINTING ANGLE QUOTATION MARK +203A;guilsinglright;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0068;h;LATIN SMALL LETTER H +0127;hbar;LATIN SMALL LETTER H WITH STROKE +0125;hcircumflex;LATIN SMALL LETTER H WITH CIRCUMFLEX +2665;heart;BLACK HEART SUIT +0309;hookabovecomb;COMBINING HOOK ABOVE +2302;house;HOUSE +02DD;hungarumlaut;DOUBLE ACUTE ACCENT +002D;hyphen;HYPHEN-MINUS +0069;i;LATIN SMALL LETTER I +00ED;iacute;LATIN SMALL LETTER I WITH ACUTE +012D;ibreve;LATIN SMALL LETTER I WITH BREVE +00EE;icircumflex;LATIN SMALL LETTER I WITH CIRCUMFLEX +00EF;idieresis;LATIN SMALL LETTER I WITH DIAERESIS +00EC;igrave;LATIN SMALL LETTER I WITH GRAVE +0133;ij;LATIN SMALL LIGATURE IJ +012B;imacron;LATIN SMALL LETTER I WITH MACRON +221E;infinity;INFINITY +222B;integral;INTEGRAL +2321;integralbt;BOTTOM HALF INTEGRAL +2320;integraltp;TOP HALF INTEGRAL +2229;intersection;INTERSECTION +25D8;invbullet;INVERSE BULLET +25D9;invcircle;INVERSE WHITE CIRCLE +263B;invsmileface;BLACK SMILING FACE +012F;iogonek;LATIN SMALL LETTER I WITH OGONEK +03B9;iota;GREEK SMALL LETTER IOTA +03CA;iotadieresis;GREEK SMALL LETTER IOTA WITH DIALYTIKA +0390;iotadieresistonos;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +03AF;iotatonos;GREEK SMALL LETTER IOTA WITH TONOS +0129;itilde;LATIN SMALL LETTER I WITH TILDE +006A;j;LATIN SMALL LETTER J +0135;jcircumflex;LATIN SMALL LETTER J WITH CIRCUMFLEX +006B;k;LATIN SMALL LETTER K +03BA;kappa;GREEK SMALL LETTER KAPPA +0138;kgreenlandic;LATIN SMALL LETTER KRA +006C;l;LATIN SMALL LETTER L +013A;lacute;LATIN SMALL LETTER L WITH ACUTE +03BB;lambda;GREEK SMALL LETTER LAMDA +013E;lcaron;LATIN SMALL LETTER L WITH CARON +0140;ldot;LATIN SMALL LETTER L WITH MIDDLE DOT +003C;less;LESS-THAN SIGN +2264;lessequal;LESS-THAN OR EQUAL TO +258C;lfblock;LEFT HALF BLOCK +20A4;lira;LIRA SIGN +2227;logicaland;LOGICAL AND +00AC;logicalnot;NOT SIGN +2228;logicalor;LOGICAL OR +017F;longs;LATIN SMALL LETTER LONG S +25CA;lozenge;LOZENGE +0142;lslash;LATIN SMALL LETTER L WITH STROKE +2591;ltshade;LIGHT SHADE +006D;m;LATIN SMALL LETTER M +00AF;macron;MACRON +2642;male;MALE SIGN +2212;minus;MINUS SIGN +2032;minute;PRIME +00B5;mu;MICRO SIGN +00D7;multiply;MULTIPLICATION SIGN +266A;musicalnote;EIGHTH NOTE +266B;musicalnotedbl;BEAMED EIGHTH NOTES +006E;n;LATIN SMALL LETTER N +0144;nacute;LATIN SMALL LETTER N WITH ACUTE +0149;napostrophe;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +0148;ncaron;LATIN SMALL LETTER N WITH CARON +0039;nine;DIGIT NINE +2209;notelement;NOT AN ELEMENT OF +2260;notequal;NOT EQUAL TO +2284;notsubset;NOT A SUBSET OF +00F1;ntilde;LATIN SMALL LETTER N WITH TILDE +03BD;nu;GREEK SMALL LETTER NU +0023;numbersign;NUMBER SIGN +006F;o;LATIN SMALL LETTER O +00F3;oacute;LATIN SMALL LETTER O WITH ACUTE +014F;obreve;LATIN SMALL LETTER O WITH BREVE +00F4;ocircumflex;LATIN SMALL LETTER O WITH CIRCUMFLEX +00F6;odieresis;LATIN SMALL LETTER O WITH DIAERESIS +0153;oe;LATIN SMALL LIGATURE OE +02DB;ogonek;OGONEK +00F2;ograve;LATIN SMALL LETTER O WITH GRAVE +01A1;ohorn;LATIN SMALL LETTER O WITH HORN +0151;ohungarumlaut;LATIN SMALL LETTER O WITH DOUBLE ACUTE +014D;omacron;LATIN SMALL LETTER O WITH MACRON +03C9;omega;GREEK SMALL LETTER OMEGA +03D6;omega1;GREEK PI SYMBOL +03CE;omegatonos;GREEK SMALL LETTER OMEGA WITH TONOS +03BF;omicron;GREEK SMALL LETTER OMICRON +03CC;omicrontonos;GREEK SMALL LETTER OMICRON WITH TONOS +0031;one;DIGIT ONE +2024;onedotenleader;ONE DOT LEADER +215B;oneeighth;VULGAR FRACTION ONE EIGHTH +00BD;onehalf;VULGAR FRACTION ONE HALF +00BC;onequarter;VULGAR FRACTION ONE QUARTER +2153;onethird;VULGAR FRACTION ONE THIRD +25E6;openbullet;WHITE BULLET +00AA;ordfeminine;FEMININE ORDINAL INDICATOR +00BA;ordmasculine;MASCULINE ORDINAL INDICATOR +221F;orthogonal;RIGHT ANGLE +00F8;oslash;LATIN SMALL LETTER O WITH STROKE +01FF;oslashacute;LATIN SMALL LETTER O WITH STROKE AND ACUTE +00F5;otilde;LATIN SMALL LETTER O WITH TILDE +0070;p;LATIN SMALL LETTER P +00B6;paragraph;PILCROW SIGN +0028;parenleft;LEFT PARENTHESIS +0029;parenright;RIGHT PARENTHESIS +2202;partialdiff;PARTIAL DIFFERENTIAL +0025;percent;PERCENT SIGN +002E;period;FULL STOP +00B7;periodcentered;MIDDLE DOT +22A5;perpendicular;UP TACK +2030;perthousand;PER MILLE SIGN +20A7;peseta;PESETA SIGN +03C6;phi;GREEK SMALL LETTER PHI +03D5;phi1;GREEK PHI SYMBOL +03C0;pi;GREEK SMALL LETTER PI +002B;plus;PLUS SIGN +00B1;plusminus;PLUS-MINUS SIGN +211E;prescription;PRESCRIPTION TAKE +220F;product;N-ARY PRODUCT +2282;propersubset;SUBSET OF +2283;propersuperset;SUPERSET OF +221D;proportional;PROPORTIONAL TO +03C8;psi;GREEK SMALL LETTER PSI +0071;q;LATIN SMALL LETTER Q +003F;question;QUESTION MARK +00BF;questiondown;INVERTED QUESTION MARK +0022;quotedbl;QUOTATION MARK +201E;quotedblbase;DOUBLE LOW-9 QUOTATION MARK +201C;quotedblleft;LEFT DOUBLE QUOTATION MARK +201D;quotedblright;RIGHT DOUBLE QUOTATION MARK +2018;quoteleft;LEFT SINGLE QUOTATION MARK +201B;quotereversed;SINGLE HIGH-REVERSED-9 QUOTATION MARK +2019;quoteright;RIGHT SINGLE QUOTATION MARK +201A;quotesinglbase;SINGLE LOW-9 QUOTATION MARK +0027;quotesingle;APOSTROPHE +0072;r;LATIN SMALL LETTER R +0155;racute;LATIN SMALL LETTER R WITH ACUTE +221A;radical;SQUARE ROOT +0159;rcaron;LATIN SMALL LETTER R WITH CARON +2286;reflexsubset;SUBSET OF OR EQUAL TO +2287;reflexsuperset;SUPERSET OF OR EQUAL TO +00AE;registered;REGISTERED SIGN +2310;revlogicalnot;REVERSED NOT SIGN +03C1;rho;GREEK SMALL LETTER RHO +02DA;ring;RING ABOVE +2590;rtblock;RIGHT HALF BLOCK +0073;s;LATIN SMALL LETTER S +015B;sacute;LATIN SMALL LETTER S WITH ACUTE +0161;scaron;LATIN SMALL LETTER S WITH CARON +015F;scedilla;LATIN SMALL LETTER S WITH CEDILLA +015D;scircumflex;LATIN SMALL LETTER S WITH CIRCUMFLEX +2033;second;DOUBLE PRIME +00A7;section;SECTION SIGN +003B;semicolon;SEMICOLON +0037;seven;DIGIT SEVEN +215E;seveneighths;VULGAR FRACTION SEVEN EIGHTHS +2592;shade;MEDIUM SHADE +03C3;sigma;GREEK SMALL LETTER SIGMA +03C2;sigma1;GREEK SMALL LETTER FINAL SIGMA +223C;similar;TILDE OPERATOR +0036;six;DIGIT SIX +002F;slash;SOLIDUS +263A;smileface;WHITE SMILING FACE +0020;space;SPACE +2660;spade;BLACK SPADE SUIT +00A3;sterling;POUND SIGN +220B;suchthat;CONTAINS AS MEMBER +2211;summation;N-ARY SUMMATION +263C;sun;WHITE SUN WITH RAYS +0074;t;LATIN SMALL LETTER T +03C4;tau;GREEK SMALL LETTER TAU +0167;tbar;LATIN SMALL LETTER T WITH STROKE +0165;tcaron;LATIN SMALL LETTER T WITH CARON +2234;therefore;THEREFORE +03B8;theta;GREEK SMALL LETTER THETA +03D1;theta1;GREEK THETA SYMBOL +00FE;thorn;LATIN SMALL LETTER THORN +0033;three;DIGIT THREE +215C;threeeighths;VULGAR FRACTION THREE EIGHTHS +00BE;threequarters;VULGAR FRACTION THREE QUARTERS +02DC;tilde;SMALL TILDE +0303;tildecomb;COMBINING TILDE +0384;tonos;GREEK TONOS +2122;trademark;TRADE MARK SIGN +25BC;triagdn;BLACK DOWN-POINTING TRIANGLE +25C4;triaglf;BLACK LEFT-POINTING POINTER +25BA;triagrt;BLACK RIGHT-POINTING POINTER +25B2;triagup;BLACK UP-POINTING TRIANGLE +0032;two;DIGIT TWO +2025;twodotenleader;TWO DOT LEADER +2154;twothirds;VULGAR FRACTION TWO THIRDS +0075;u;LATIN SMALL LETTER U +00FA;uacute;LATIN SMALL LETTER U WITH ACUTE +016D;ubreve;LATIN SMALL LETTER U WITH BREVE +00FB;ucircumflex;LATIN SMALL LETTER U WITH CIRCUMFLEX +00FC;udieresis;LATIN SMALL LETTER U WITH DIAERESIS +00F9;ugrave;LATIN SMALL LETTER U WITH GRAVE +01B0;uhorn;LATIN SMALL LETTER U WITH HORN +0171;uhungarumlaut;LATIN SMALL LETTER U WITH DOUBLE ACUTE +016B;umacron;LATIN SMALL LETTER U WITH MACRON +005F;underscore;LOW LINE +2017;underscoredbl;DOUBLE LOW LINE +222A;union;UNION +2200;universal;FOR ALL +0173;uogonek;LATIN SMALL LETTER U WITH OGONEK +2580;upblock;UPPER HALF BLOCK +03C5;upsilon;GREEK SMALL LETTER UPSILON +03CB;upsilondieresis;GREEK SMALL LETTER UPSILON WITH DIALYTIKA +03B0;upsilondieresistonos;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +03CD;upsilontonos;GREEK SMALL LETTER UPSILON WITH TONOS +016F;uring;LATIN SMALL LETTER U WITH RING ABOVE +0169;utilde;LATIN SMALL LETTER U WITH TILDE +0076;v;LATIN SMALL LETTER V +0077;w;LATIN SMALL LETTER W +1E83;wacute;LATIN SMALL LETTER W WITH ACUTE +0175;wcircumflex;LATIN SMALL LETTER W WITH CIRCUMFLEX +1E85;wdieresis;LATIN SMALL LETTER W WITH DIAERESIS +2118;weierstrass;SCRIPT CAPITAL P +1E81;wgrave;LATIN SMALL LETTER W WITH GRAVE +0078;x;LATIN SMALL LETTER X +03BE;xi;GREEK SMALL LETTER XI +0079;y;LATIN SMALL LETTER Y +00FD;yacute;LATIN SMALL LETTER Y WITH ACUTE +0177;ycircumflex;LATIN SMALL LETTER Y WITH CIRCUMFLEX +00FF;ydieresis;LATIN SMALL LETTER Y WITH DIAERESIS +00A5;yen;YEN SIGN +1EF3;ygrave;LATIN SMALL LETTER Y WITH GRAVE +007A;z;LATIN SMALL LETTER Z +017A;zacute;LATIN SMALL LETTER Z WITH ACUTE +017E;zcaron;LATIN SMALL LETTER Z WITH CARON +017C;zdotaccent;LATIN SMALL LETTER Z WITH DOT ABOVE +0030;zero;DIGIT ZERO +03B6;zeta;GREEK SMALL LETTER ZETA +# END +""" + + +class AGLError(Exception): + pass + + +LEGACY_AGL2UV = {} +AGL2UV = {} +UV2AGL = {} + + +def _builddicts(): + import re + + lines = _aglText.splitlines() + + parseAGL_RE = re.compile("([A-Za-z0-9]+);((?:[0-9A-F]{4})(?: (?:[0-9A-F]{4}))*)$") + + for line in lines: + if not line or line[:1] == "#": + continue + m = parseAGL_RE.match(line) + if not m: + raise AGLError("syntax error in glyphlist.txt: %s" % repr(line[:20])) + unicodes = m.group(2) + assert len(unicodes) % 5 == 4 + unicodes = [int(unicode, 16) for unicode in unicodes.split()] + glyphName = tostr(m.group(1)) + LEGACY_AGL2UV[glyphName] = unicodes + + lines = _aglfnText.splitlines() + + parseAGLFN_RE = re.compile("([0-9A-F]{4});([A-Za-z0-9]+);.*?$") + + for line in lines: + if not line or line[:1] == "#": + continue + m = parseAGLFN_RE.match(line) + if not m: + raise AGLError("syntax error in aglfn.txt: %s" % repr(line[:20])) + unicode = m.group(1) + assert len(unicode) == 4 + unicode = int(unicode, 16) + glyphName = tostr(m.group(2)) + AGL2UV[glyphName] = unicode + UV2AGL[unicode] = glyphName + + +_builddicts() + + +def toUnicode(glyph, isZapfDingbats=False): + """Convert glyph names to Unicode, such as ``'longs_t.oldstyle'`` --> ``u'ſt'`` + + If ``isZapfDingbats`` is ``True``, the implementation recognizes additional + glyph names (as required by the AGL specification). + """ + # https://github.com/adobe-type-tools/agl-specification#2-the-mapping + # + # 1. Drop all the characters from the glyph name starting with + # the first occurrence of a period (U+002E; FULL STOP), if any. + glyph = glyph.split(".", 1)[0] + + # 2. Split the remaining string into a sequence of components, + # using underscore (U+005F; LOW LINE) as the delimiter. + components = glyph.split("_") + + # 3. Map each component to a character string according to the + # procedure below, and concatenate those strings; the result + # is the character string to which the glyph name is mapped. + result = [_glyphComponentToUnicode(c, isZapfDingbats) for c in components] + return "".join(result) + + +def _glyphComponentToUnicode(component, isZapfDingbats): + # If the font is Zapf Dingbats (PostScript FontName: ZapfDingbats), + # and the component is in the ITC Zapf Dingbats Glyph List, then + # map it to the corresponding character in that list. + dingbat = _zapfDingbatsToUnicode(component) if isZapfDingbats else None + if dingbat: + return dingbat + + # Otherwise, if the component is in AGL, then map it + # to the corresponding character in that list. + uchars = LEGACY_AGL2UV.get(component) + if uchars: + return "".join(map(chr, uchars)) + + # Otherwise, if the component is of the form "uni" (U+0075, + # U+006E, and U+0069) followed by a sequence of uppercase + # hexadecimal digits (0–9 and A–F, meaning U+0030 through + # U+0039 and U+0041 through U+0046), if the length of that + # sequence is a multiple of four, and if each group of four + # digits represents a value in the ranges 0000 through D7FF + # or E000 through FFFF, then interpret each as a Unicode scalar + # value and map the component to the string made of those + # scalar values. Note that the range and digit-length + # restrictions mean that the "uni" glyph name prefix can be + # used only with UVs in the Basic Multilingual Plane (BMP). + uni = _uniToUnicode(component) + if uni: + return uni + + # Otherwise, if the component is of the form "u" (U+0075) + # followed by a sequence of four to six uppercase hexadecimal + # digits (0–9 and A–F, meaning U+0030 through U+0039 and + # U+0041 through U+0046), and those digits represents a value + # in the ranges 0000 through D7FF or E000 through 10FFFF, then + # interpret it as a Unicode scalar value and map the component + # to the string made of this scalar value. + uni = _uToUnicode(component) + if uni: + return uni + + # Otherwise, map the component to an empty string. + return "" + + +# https://github.com/adobe-type-tools/agl-aglfn/blob/master/zapfdingbats.txt +_AGL_ZAPF_DINGBATS = ( + " ✁✂✄☎✆✝✞✟✠✡☛☞✌✍✎✏✑✒✓✔✕✖✗✘✙✚✛✜✢✣✤✥✦✧★✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸✹✺✻✼✽✾✿❀" + "❁❂❃❄❅❆❇❈❉❊❋●❍■❏❑▲▼◆❖ ◗❘❙❚❯❱❲❳❨❩❬❭❪❫❴❵❛❜❝❞❡❢❣❤✐❥❦❧♠♥♦♣ ✉✈✇" + "①②③④⑤⑥⑦⑧⑨⑩❶❷❸❹❺❻❼❽❾❿➀➁➂➃➄➅➆➇➈➉➊➋➌➍➎➏➐➑➒➓➔→➣↔" + "↕➙➛➜➝➞➟➠➡➢➤➥➦➧➨➩➫➭➯➲➳➵➸➺➻➼➽➾➚➪➶➹➘➴➷➬➮➱✃❐❒❮❰" +) + + +def _zapfDingbatsToUnicode(glyph): + """Helper for toUnicode().""" + if len(glyph) < 2 or glyph[0] != "a": + return None + try: + gid = int(glyph[1:]) + except ValueError: + return None + if gid < 0 or gid >= len(_AGL_ZAPF_DINGBATS): + return None + uchar = _AGL_ZAPF_DINGBATS[gid] + return uchar if uchar != " " else None + + +_re_uni = re.compile("^uni([0-9A-F]+)$") + + +def _uniToUnicode(component): + """Helper for toUnicode() to handle "uniABCD" components.""" + match = _re_uni.match(component) + if match is None: + return None + digits = match.group(1) + if len(digits) % 4 != 0: + return None + chars = [int(digits[i : i + 4], 16) for i in range(0, len(digits), 4)] + if any(c >= 0xD800 and c <= 0xDFFF for c in chars): + # The AGL specification explicitly excluded surrogate pairs. + return None + return "".join([chr(c) for c in chars]) + + +_re_u = re.compile("^u([0-9A-F]{4,6})$") + + +def _uToUnicode(component): + """Helper for toUnicode() to handle "u1ABCD" components.""" + match = _re_u.match(component) + if match is None: + return None + digits = match.group(1) + try: + value = int(digits, 16) + except ValueError: + return None + if (value >= 0x0000 and value <= 0xD7FF) or (value >= 0xE000 and value <= 0x10FFFF): + return chr(value) + return None diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cffLib/__init__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cffLib/__init__.py new file mode 100644 index 0000000..bb62673 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cffLib/__init__.py @@ -0,0 +1,3830 @@ +"""cffLib: read/write Adobe CFF fonts + +OpenType fonts with PostScript outlines contain a completely independent +font file, Adobe's *Compact Font Format*. So dealing with OpenType fonts +requires also dealing with CFF. This module allows you to read and write +fonts written in the CFF format. + +In 2016, OpenType 1.8 introduced the `CFF2 `_ +format which, along with other changes, extended the CFF format to deal with +the demands of variable fonts. This module parses both original CFF and CFF2. + +""" + +from fontTools.misc import sstruct +from fontTools.misc import psCharStrings +from fontTools.misc.arrayTools import unionRect, intRect +from fontTools.misc.textTools import ( + bytechr, + byteord, + bytesjoin, + tobytes, + tostr, + safeEval, +) +from fontTools.ttLib import TTFont +from fontTools.ttLib.tables.otBase import OTTableWriter +from fontTools.ttLib.tables.otBase import OTTableReader +from fontTools.ttLib.tables import otTables as ot +from io import BytesIO +import struct +import logging +import re + +# mute cffLib debug messages when running ttx in verbose mode +DEBUG = logging.DEBUG - 1 +log = logging.getLogger(__name__) + +cffHeaderFormat = """ + major: B + minor: B + hdrSize: B +""" + +maxStackLimit = 513 +# maxstack operator has been deprecated. max stack is now always 513. + + +class StopHintCountEvent(Exception): + pass + + +class _DesubroutinizingT2Decompiler(psCharStrings.SimpleT2Decompiler): + stop_hintcount_ops = ( + "op_hintmask", + "op_cntrmask", + "op_rmoveto", + "op_hmoveto", + "op_vmoveto", + ) + + def __init__(self, localSubrs, globalSubrs, private=None): + psCharStrings.SimpleT2Decompiler.__init__( + self, localSubrs, globalSubrs, private + ) + + def execute(self, charString): + self.need_hintcount = True # until proven otherwise + for op_name in self.stop_hintcount_ops: + setattr(self, op_name, self.stop_hint_count) + + if hasattr(charString, "_desubroutinized"): + # If a charstring has already been desubroutinized, we will still + # need to execute it if we need to count hints in order to + # compute the byte length for mask arguments, and haven't finished + # counting hints pairs. + if self.need_hintcount and self.callingStack: + try: + psCharStrings.SimpleT2Decompiler.execute(self, charString) + except StopHintCountEvent: + del self.callingStack[-1] + return + + charString._patches = [] + psCharStrings.SimpleT2Decompiler.execute(self, charString) + desubroutinized = charString.program[:] + for idx, expansion in reversed(charString._patches): + assert idx >= 2 + assert desubroutinized[idx - 1] in [ + "callsubr", + "callgsubr", + ], desubroutinized[idx - 1] + assert type(desubroutinized[idx - 2]) == int + if expansion[-1] == "return": + expansion = expansion[:-1] + desubroutinized[idx - 2 : idx] = expansion + if not self.private.in_cff2: + if "endchar" in desubroutinized: + # Cut off after first endchar + desubroutinized = desubroutinized[ + : desubroutinized.index("endchar") + 1 + ] + else: + if not len(desubroutinized) or desubroutinized[-1] != "return": + desubroutinized.append("return") + + charString._desubroutinized = desubroutinized + del charString._patches + + def op_callsubr(self, index): + subr = self.localSubrs[self.operandStack[-1] + self.localBias] + psCharStrings.SimpleT2Decompiler.op_callsubr(self, index) + self.processSubr(index, subr) + + def op_callgsubr(self, index): + subr = self.globalSubrs[self.operandStack[-1] + self.globalBias] + psCharStrings.SimpleT2Decompiler.op_callgsubr(self, index) + self.processSubr(index, subr) + + def stop_hint_count(self, *args): + self.need_hintcount = False + for op_name in self.stop_hintcount_ops: + setattr(self, op_name, None) + cs = self.callingStack[-1] + if hasattr(cs, "_desubroutinized"): + raise StopHintCountEvent() + + def op_hintmask(self, index): + psCharStrings.SimpleT2Decompiler.op_hintmask(self, index) + if self.need_hintcount: + self.stop_hint_count() + + def processSubr(self, index, subr): + cs = self.callingStack[-1] + if not hasattr(cs, "_desubroutinized"): + cs._patches.append((index, subr._desubroutinized)) + + +class CFFFontSet(object): + """A CFF font "file" can contain more than one font, although this is + extremely rare (and not allowed within OpenType fonts). + + This class is the entry point for parsing a CFF table. To actually + manipulate the data inside the CFF font, you will want to access the + ``CFFFontSet``'s :class:`TopDict` object. To do this, a ``CFFFontSet`` + object can either be treated as a dictionary (with appropriate + ``keys()`` and ``values()`` methods) mapping font names to :class:`TopDict` + objects, or as a list. + + .. code:: python + + from fontTools import ttLib + tt = ttLib.TTFont("Tests/cffLib/data/LinLibertine_RBI.otf") + tt["CFF "].cff + # + tt["CFF "].cff[0] # Here's your actual font data + # + + """ + + def decompile(self, file, otFont, isCFF2=None): + """Parse a binary CFF file into an internal representation. ``file`` + should be a file handle object. ``otFont`` is the top-level + :py:class:`fontTools.ttLib.ttFont.TTFont` object containing this CFF file. + + If ``isCFF2`` is passed and set to ``True`` or ``False``, then the + library makes an assertion that the CFF header is of the appropriate + version. + """ + + self.otFont = otFont + sstruct.unpack(cffHeaderFormat, file.read(3), self) + if isCFF2 is not None: + # called from ttLib: assert 'major' as read from file matches the + # expected version + expected_major = 2 if isCFF2 else 1 + if self.major != expected_major: + raise ValueError( + "Invalid CFF 'major' version: expected %d, found %d" + % (expected_major, self.major) + ) + else: + # use 'major' version from file to determine if isCFF2 + assert self.major in (1, 2), "Unknown CFF format" + isCFF2 = self.major == 2 + if not isCFF2: + self.offSize = struct.unpack("B", file.read(1))[0] + file.seek(self.hdrSize) + self.fontNames = list(tostr(s) for s in Index(file, isCFF2=isCFF2)) + self.topDictIndex = TopDictIndex(file, isCFF2=isCFF2) + self.strings = IndexedStrings(file) + else: # isCFF2 + self.topDictSize = struct.unpack(">H", file.read(2))[0] + file.seek(self.hdrSize) + self.fontNames = ["CFF2Font"] + cff2GetGlyphOrder = otFont.getGlyphOrder + # in CFF2, offsetSize is the size of the TopDict data. + self.topDictIndex = TopDictIndex( + file, cff2GetGlyphOrder, self.topDictSize, isCFF2=isCFF2 + ) + self.strings = None + self.GlobalSubrs = GlobalSubrsIndex(file, isCFF2=isCFF2) + self.topDictIndex.strings = self.strings + self.topDictIndex.GlobalSubrs = self.GlobalSubrs + + def __len__(self): + return len(self.fontNames) + + def keys(self): + return list(self.fontNames) + + def values(self): + return self.topDictIndex + + def __getitem__(self, nameOrIndex): + """Return TopDict instance identified by name (str) or index (int + or any object that implements `__index__`). + """ + if hasattr(nameOrIndex, "__index__"): + index = nameOrIndex.__index__() + elif isinstance(nameOrIndex, str): + name = nameOrIndex + try: + index = self.fontNames.index(name) + except ValueError: + raise KeyError(nameOrIndex) + else: + raise TypeError(nameOrIndex) + return self.topDictIndex[index] + + def compile(self, file, otFont, isCFF2=None): + """Write the object back into binary representation onto the given file. + ``file`` should be a file handle object. ``otFont`` is the top-level + :py:class:`fontTools.ttLib.ttFont.TTFont` object containing this CFF file. + + If ``isCFF2`` is passed and set to ``True`` or ``False``, then the + library makes an assertion that the CFF header is of the appropriate + version. + """ + self.otFont = otFont + if isCFF2 is not None: + # called from ttLib: assert 'major' value matches expected version + expected_major = 2 if isCFF2 else 1 + if self.major != expected_major: + raise ValueError( + "Invalid CFF 'major' version: expected %d, found %d" + % (expected_major, self.major) + ) + else: + # use current 'major' value to determine output format + assert self.major in (1, 2), "Unknown CFF format" + isCFF2 = self.major == 2 + + if otFont.recalcBBoxes and not isCFF2: + for topDict in self.topDictIndex: + topDict.recalcFontBBox() + + if not isCFF2: + strings = IndexedStrings() + else: + strings = None + writer = CFFWriter(isCFF2) + topCompiler = self.topDictIndex.getCompiler(strings, self, isCFF2=isCFF2) + if isCFF2: + self.hdrSize = 5 + writer.add(sstruct.pack(cffHeaderFormat, self)) + # Note: topDictSize will most likely change in CFFWriter.toFile(). + self.topDictSize = topCompiler.getDataLength() + writer.add(struct.pack(">H", self.topDictSize)) + else: + self.hdrSize = 4 + self.offSize = 4 # will most likely change in CFFWriter.toFile(). + writer.add(sstruct.pack(cffHeaderFormat, self)) + writer.add(struct.pack("B", self.offSize)) + if not isCFF2: + fontNames = Index() + for name in self.fontNames: + fontNames.append(name) + writer.add(fontNames.getCompiler(strings, self, isCFF2=isCFF2)) + writer.add(topCompiler) + if not isCFF2: + writer.add(strings.getCompiler()) + writer.add(self.GlobalSubrs.getCompiler(strings, self, isCFF2=isCFF2)) + + for topDict in self.topDictIndex: + if not hasattr(topDict, "charset") or topDict.charset is None: + charset = otFont.getGlyphOrder() + topDict.charset = charset + children = topCompiler.getChildren(strings) + for child in children: + writer.add(child) + + writer.toFile(file) + + def toXML(self, xmlWriter): + """Write the object into XML representation onto the given + :class:`fontTools.misc.xmlWriter.XMLWriter`. + + .. code:: python + + writer = xmlWriter.XMLWriter(sys.stdout) + tt["CFF "].cff.toXML(writer) + + """ + + xmlWriter.simpletag("major", value=self.major) + xmlWriter.newline() + xmlWriter.simpletag("minor", value=self.minor) + xmlWriter.newline() + for fontName in self.fontNames: + xmlWriter.begintag("CFFFont", name=tostr(fontName)) + xmlWriter.newline() + font = self[fontName] + font.toXML(xmlWriter) + xmlWriter.endtag("CFFFont") + xmlWriter.newline() + xmlWriter.newline() + xmlWriter.begintag("GlobalSubrs") + xmlWriter.newline() + self.GlobalSubrs.toXML(xmlWriter) + xmlWriter.endtag("GlobalSubrs") + xmlWriter.newline() + + def fromXML(self, name, attrs, content, otFont=None): + """Reads data from the XML element into the ``CFFFontSet`` object.""" + self.otFont = otFont + + # set defaults. These will be replaced if there are entries for them + # in the XML file. + if not hasattr(self, "major"): + self.major = 1 + if not hasattr(self, "minor"): + self.minor = 0 + + if name == "CFFFont": + if self.major == 1: + if not hasattr(self, "offSize"): + # this will be recalculated when the cff is compiled. + self.offSize = 4 + if not hasattr(self, "hdrSize"): + self.hdrSize = 4 + if not hasattr(self, "GlobalSubrs"): + self.GlobalSubrs = GlobalSubrsIndex() + if not hasattr(self, "fontNames"): + self.fontNames = [] + self.topDictIndex = TopDictIndex() + fontName = attrs["name"] + self.fontNames.append(fontName) + topDict = TopDict(GlobalSubrs=self.GlobalSubrs) + topDict.charset = None # gets filled in later + elif self.major == 2: + if not hasattr(self, "hdrSize"): + self.hdrSize = 5 + if not hasattr(self, "GlobalSubrs"): + self.GlobalSubrs = GlobalSubrsIndex() + if not hasattr(self, "fontNames"): + self.fontNames = ["CFF2Font"] + cff2GetGlyphOrder = self.otFont.getGlyphOrder + topDict = TopDict( + GlobalSubrs=self.GlobalSubrs, cff2GetGlyphOrder=cff2GetGlyphOrder + ) + self.topDictIndex = TopDictIndex(None, cff2GetGlyphOrder) + self.topDictIndex.append(topDict) + for element in content: + if isinstance(element, str): + continue + name, attrs, content = element + topDict.fromXML(name, attrs, content) + + if hasattr(topDict, "VarStore") and topDict.FDArray[0].vstore is None: + fdArray = topDict.FDArray + for fontDict in fdArray: + if hasattr(fontDict, "Private"): + fontDict.Private.vstore = topDict.VarStore + + elif name == "GlobalSubrs": + subrCharStringClass = psCharStrings.T2CharString + if not hasattr(self, "GlobalSubrs"): + self.GlobalSubrs = GlobalSubrsIndex() + for element in content: + if isinstance(element, str): + continue + name, attrs, content = element + subr = subrCharStringClass() + subr.fromXML(name, attrs, content) + self.GlobalSubrs.append(subr) + elif name == "major": + self.major = int(attrs["value"]) + elif name == "minor": + self.minor = int(attrs["value"]) + + def convertCFFToCFF2(self, otFont): + """Converts this object from CFF format to CFF2 format. This conversion + is done 'in-place'. The conversion cannot be reversed. + + This assumes a decompiled CFF table. (i.e. that the object has been + filled via :meth:`decompile`.)""" + self.major = 2 + cff2GetGlyphOrder = self.otFont.getGlyphOrder + topDictData = TopDictIndex(None, cff2GetGlyphOrder) + topDictData.items = self.topDictIndex.items + self.topDictIndex = topDictData + topDict = topDictData[0] + if hasattr(topDict, "Private"): + privateDict = topDict.Private + else: + privateDict = None + opOrder = buildOrder(topDictOperators2) + topDict.order = opOrder + topDict.cff2GetGlyphOrder = cff2GetGlyphOrder + for entry in topDictOperators: + key = entry[1] + if key not in opOrder: + if key in topDict.rawDict: + del topDict.rawDict[key] + if hasattr(topDict, key): + delattr(topDict, key) + + if not hasattr(topDict, "FDArray"): + fdArray = topDict.FDArray = FDArrayIndex() + fdArray.strings = None + fdArray.GlobalSubrs = topDict.GlobalSubrs + topDict.GlobalSubrs.fdArray = fdArray + charStrings = topDict.CharStrings + if charStrings.charStringsAreIndexed: + charStrings.charStringsIndex.fdArray = fdArray + else: + charStrings.fdArray = fdArray + fontDict = FontDict() + fontDict.setCFF2(True) + fdArray.append(fontDict) + fontDict.Private = privateDict + privateOpOrder = buildOrder(privateDictOperators2) + for entry in privateDictOperators: + key = entry[1] + if key not in privateOpOrder: + if key in privateDict.rawDict: + # print "Removing private dict", key + del privateDict.rawDict[key] + if hasattr(privateDict, key): + delattr(privateDict, key) + # print "Removing privateDict attr", key + else: + # clean up the PrivateDicts in the fdArray + fdArray = topDict.FDArray + privateOpOrder = buildOrder(privateDictOperators2) + for fontDict in fdArray: + fontDict.setCFF2(True) + for key in fontDict.rawDict.keys(): + if key not in fontDict.order: + del fontDict.rawDict[key] + if hasattr(fontDict, key): + delattr(fontDict, key) + + privateDict = fontDict.Private + for entry in privateDictOperators: + key = entry[1] + if key not in privateOpOrder: + if key in privateDict.rawDict: + # print "Removing private dict", key + del privateDict.rawDict[key] + if hasattr(privateDict, key): + delattr(privateDict, key) + # print "Removing privateDict attr", key + # At this point, the Subrs and Charstrings are all still T2Charstring class + # easiest to fix this by compiling, then decompiling again + file = BytesIO() + self.compile(file, otFont, isCFF2=True) + file.seek(0) + self.decompile(file, otFont, isCFF2=True) + + def desubroutinize(self): + for fontName in self.fontNames: + font = self[fontName] + cs = font.CharStrings + for g in font.charset: + c, _ = cs.getItemAndSelector(g) + c.decompile() + subrs = getattr(c.private, "Subrs", []) + decompiler = _DesubroutinizingT2Decompiler( + subrs, c.globalSubrs, c.private + ) + decompiler.execute(c) + c.program = c._desubroutinized + del c._desubroutinized + # Delete all the local subrs + if hasattr(font, "FDArray"): + for fd in font.FDArray: + pd = fd.Private + if hasattr(pd, "Subrs"): + del pd.Subrs + if "Subrs" in pd.rawDict: + del pd.rawDict["Subrs"] + else: + pd = font.Private + if hasattr(pd, "Subrs"): + del pd.Subrs + if "Subrs" in pd.rawDict: + del pd.rawDict["Subrs"] + # as well as the global subrs + self.GlobalSubrs.clear() + + +class CFFWriter(object): + """Helper class for serializing CFF data to binary. Used by + :meth:`CFFFontSet.compile`.""" + + def __init__(self, isCFF2): + self.data = [] + self.isCFF2 = isCFF2 + + def add(self, table): + self.data.append(table) + + def toFile(self, file): + lastPosList = None + count = 1 + while True: + log.log(DEBUG, "CFFWriter.toFile() iteration: %d", count) + count = count + 1 + pos = 0 + posList = [pos] + for item in self.data: + if hasattr(item, "getDataLength"): + endPos = pos + item.getDataLength() + if isinstance(item, TopDictIndexCompiler) and item.isCFF2: + self.topDictSize = item.getDataLength() + else: + endPos = pos + len(item) + if hasattr(item, "setPos"): + item.setPos(pos, endPos) + pos = endPos + posList.append(pos) + if posList == lastPosList: + break + lastPosList = posList + log.log(DEBUG, "CFFWriter.toFile() writing to file.") + begin = file.tell() + if self.isCFF2: + self.data[1] = struct.pack(">H", self.topDictSize) + else: + self.offSize = calcOffSize(lastPosList[-1]) + self.data[1] = struct.pack("B", self.offSize) + posList = [0] + for item in self.data: + if hasattr(item, "toFile"): + item.toFile(file) + else: + file.write(item) + posList.append(file.tell() - begin) + assert posList == lastPosList + + +def calcOffSize(largestOffset): + if largestOffset < 0x100: + offSize = 1 + elif largestOffset < 0x10000: + offSize = 2 + elif largestOffset < 0x1000000: + offSize = 3 + else: + offSize = 4 + return offSize + + +class IndexCompiler(object): + """Base class for writing CFF `INDEX data `_ + to binary.""" + + def __init__(self, items, strings, parent, isCFF2=None): + if isCFF2 is None and hasattr(parent, "isCFF2"): + isCFF2 = parent.isCFF2 + assert isCFF2 is not None + self.isCFF2 = isCFF2 + self.items = self.getItems(items, strings) + self.parent = parent + + def getItems(self, items, strings): + return items + + def getOffsets(self): + # An empty INDEX contains only the count field. + if self.items: + pos = 1 + offsets = [pos] + for item in self.items: + if hasattr(item, "getDataLength"): + pos = pos + item.getDataLength() + else: + pos = pos + len(item) + offsets.append(pos) + else: + offsets = [] + return offsets + + def getDataLength(self): + if self.isCFF2: + countSize = 4 + else: + countSize = 2 + + if self.items: + lastOffset = self.getOffsets()[-1] + offSize = calcOffSize(lastOffset) + dataLength = ( + countSize + + 1 # count + + (len(self.items) + 1) * offSize # offSize + + lastOffset # the offsets + - 1 # size of object data + ) + else: + # count. For empty INDEX tables, this is the only entry. + dataLength = countSize + + return dataLength + + def toFile(self, file): + offsets = self.getOffsets() + if self.isCFF2: + writeCard32(file, len(self.items)) + else: + writeCard16(file, len(self.items)) + # An empty INDEX contains only the count field. + if self.items: + offSize = calcOffSize(offsets[-1]) + writeCard8(file, offSize) + offSize = -offSize + pack = struct.pack + for offset in offsets: + binOffset = pack(">l", offset)[offSize:] + assert len(binOffset) == -offSize + file.write(binOffset) + for item in self.items: + if hasattr(item, "toFile"): + item.toFile(file) + else: + data = tobytes(item, encoding="latin1") + file.write(data) + + +class IndexedStringsCompiler(IndexCompiler): + def getItems(self, items, strings): + return items.strings + + +class TopDictIndexCompiler(IndexCompiler): + """Helper class for writing the TopDict to binary.""" + + def getItems(self, items, strings): + out = [] + for item in items: + out.append(item.getCompiler(strings, self)) + return out + + def getChildren(self, strings): + children = [] + for topDict in self.items: + children.extend(topDict.getChildren(strings)) + return children + + def getOffsets(self): + if self.isCFF2: + offsets = [0, self.items[0].getDataLength()] + return offsets + else: + return super(TopDictIndexCompiler, self).getOffsets() + + def getDataLength(self): + if self.isCFF2: + dataLength = self.items[0].getDataLength() + return dataLength + else: + return super(TopDictIndexCompiler, self).getDataLength() + + def toFile(self, file): + if self.isCFF2: + self.items[0].toFile(file) + else: + super(TopDictIndexCompiler, self).toFile(file) + + +class FDArrayIndexCompiler(IndexCompiler): + """Helper class for writing the + `Font DICT INDEX `_ + to binary.""" + + def getItems(self, items, strings): + out = [] + for item in items: + out.append(item.getCompiler(strings, self)) + return out + + def getChildren(self, strings): + children = [] + for fontDict in self.items: + children.extend(fontDict.getChildren(strings)) + return children + + def toFile(self, file): + offsets = self.getOffsets() + if self.isCFF2: + writeCard32(file, len(self.items)) + else: + writeCard16(file, len(self.items)) + offSize = calcOffSize(offsets[-1]) + writeCard8(file, offSize) + offSize = -offSize + pack = struct.pack + for offset in offsets: + binOffset = pack(">l", offset)[offSize:] + assert len(binOffset) == -offSize + file.write(binOffset) + for item in self.items: + if hasattr(item, "toFile"): + item.toFile(file) + else: + file.write(item) + + def setPos(self, pos, endPos): + self.parent.rawDict["FDArray"] = pos + + +class GlobalSubrsCompiler(IndexCompiler): + """Helper class for writing the `global subroutine INDEX `_ + to binary.""" + + def getItems(self, items, strings): + out = [] + for cs in items: + cs.compile(self.isCFF2) + out.append(cs.bytecode) + return out + + +class SubrsCompiler(GlobalSubrsCompiler): + """Helper class for writing the `local subroutine INDEX `_ + to binary.""" + + def setPos(self, pos, endPos): + offset = pos - self.parent.pos + self.parent.rawDict["Subrs"] = offset + + +class CharStringsCompiler(GlobalSubrsCompiler): + """Helper class for writing the `CharStrings INDEX `_ + to binary.""" + + def getItems(self, items, strings): + out = [] + for cs in items: + cs.compile(self.isCFF2) + out.append(cs.bytecode) + return out + + def setPos(self, pos, endPos): + self.parent.rawDict["CharStrings"] = pos + + +class Index(object): + """This class represents what the CFF spec calls an INDEX (an array of + variable-sized objects). `Index` items can be addressed and set using + Python list indexing.""" + + compilerClass = IndexCompiler + + def __init__(self, file=None, isCFF2=None): + assert (isCFF2 is None) == (file is None) + self.items = [] + name = self.__class__.__name__ + if file is None: + return + self._isCFF2 = isCFF2 + log.log(DEBUG, "loading %s at %s", name, file.tell()) + self.file = file + if isCFF2: + count = readCard32(file) + else: + count = readCard16(file) + if count == 0: + return + self.items = [None] * count + offSize = readCard8(file) + log.log(DEBUG, " index count: %s offSize: %s", count, offSize) + assert offSize <= 4, "offSize too large: %s" % offSize + self.offsets = offsets = [] + pad = b"\0" * (4 - offSize) + for index in range(count + 1): + chunk = file.read(offSize) + chunk = pad + chunk + (offset,) = struct.unpack(">L", chunk) + offsets.append(int(offset)) + self.offsetBase = file.tell() - 1 + file.seek(self.offsetBase + offsets[-1]) # pretend we've read the whole lot + log.log(DEBUG, " end of %s at %s", name, file.tell()) + + def __len__(self): + return len(self.items) + + def __getitem__(self, index): + item = self.items[index] + if item is not None: + return item + offset = self.offsets[index] + self.offsetBase + size = self.offsets[index + 1] - self.offsets[index] + file = self.file + file.seek(offset) + data = file.read(size) + assert len(data) == size + item = self.produceItem(index, data, file, offset) + self.items[index] = item + return item + + def __setitem__(self, index, item): + self.items[index] = item + + def produceItem(self, index, data, file, offset): + return data + + def append(self, item): + """Add an item to an INDEX.""" + self.items.append(item) + + def getCompiler(self, strings, parent, isCFF2=None): + return self.compilerClass(self, strings, parent, isCFF2=isCFF2) + + def clear(self): + """Empty the INDEX.""" + del self.items[:] + + +class GlobalSubrsIndex(Index): + """This index contains all the global subroutines in the font. A global + subroutine is a set of ``CharString`` data which is accessible to any + glyph in the font, and are used to store repeated instructions - for + example, components may be encoded as global subroutines, but so could + hinting instructions. + + Remember that when interpreting a ``callgsubr`` instruction (or indeed + a ``callsubr`` instruction) that you will need to add the "subroutine + number bias" to number given: + + .. code:: python + + tt = ttLib.TTFont("Almendra-Bold.otf") + u = tt["CFF "].cff[0].CharStrings["udieresis"] + u.decompile() + + u.toXML(XMLWriter(sys.stdout)) + # + # -64 callgsubr <-- Subroutine which implements the dieresis mark + # + + tt["CFF "].cff[0].GlobalSubrs[-64] # <-- WRONG + # + + tt["CFF "].cff[0].GlobalSubrs[-64 + 107] # <-- RIGHT + # + + ("The bias applied depends on the number of subrs (gsubrs). If the number of + subrs (gsubrs) is less than 1240, the bias is 107. Otherwise if it is less + than 33900, it is 1131; otherwise it is 32768.", + `Subroutine Operators `) + """ + + compilerClass = GlobalSubrsCompiler + subrClass = psCharStrings.T2CharString + charStringClass = psCharStrings.T2CharString + + def __init__( + self, + file=None, + globalSubrs=None, + private=None, + fdSelect=None, + fdArray=None, + isCFF2=None, + ): + super(GlobalSubrsIndex, self).__init__(file, isCFF2=isCFF2) + self.globalSubrs = globalSubrs + self.private = private + if fdSelect: + self.fdSelect = fdSelect + if fdArray: + self.fdArray = fdArray + + def produceItem(self, index, data, file, offset): + if self.private is not None: + private = self.private + elif hasattr(self, "fdArray") and self.fdArray is not None: + if hasattr(self, "fdSelect") and self.fdSelect is not None: + fdIndex = self.fdSelect[index] + else: + fdIndex = 0 + private = self.fdArray[fdIndex].Private + else: + private = None + return self.subrClass(data, private=private, globalSubrs=self.globalSubrs) + + def toXML(self, xmlWriter): + """Write the subroutines index into XML representation onto the given + :class:`fontTools.misc.xmlWriter.XMLWriter`. + + .. code:: python + + writer = xmlWriter.XMLWriter(sys.stdout) + tt["CFF "].cff[0].GlobalSubrs.toXML(writer) + + """ + xmlWriter.comment( + "The 'index' attribute is only for humans; " "it is ignored when parsed." + ) + xmlWriter.newline() + for i in range(len(self)): + subr = self[i] + if subr.needsDecompilation(): + xmlWriter.begintag("CharString", index=i, raw=1) + else: + xmlWriter.begintag("CharString", index=i) + xmlWriter.newline() + subr.toXML(xmlWriter) + xmlWriter.endtag("CharString") + xmlWriter.newline() + + def fromXML(self, name, attrs, content): + if name != "CharString": + return + subr = self.subrClass() + subr.fromXML(name, attrs, content) + self.append(subr) + + def getItemAndSelector(self, index): + sel = None + if hasattr(self, "fdSelect"): + sel = self.fdSelect[index] + return self[index], sel + + +class SubrsIndex(GlobalSubrsIndex): + """This index contains a glyph's local subroutines. A local subroutine is a + private set of ``CharString`` data which is accessible only to the glyph to + which the index is attached.""" + + compilerClass = SubrsCompiler + + +class TopDictIndex(Index): + """This index represents the array of ``TopDict`` structures in the font + (again, usually only one entry is present). Hence the following calls are + equivalent: + + .. code:: python + + tt["CFF "].cff[0] + # + tt["CFF "].cff.topDictIndex[0] + # + + """ + + compilerClass = TopDictIndexCompiler + + def __init__(self, file=None, cff2GetGlyphOrder=None, topSize=0, isCFF2=None): + assert (isCFF2 is None) == (file is None) + self.cff2GetGlyphOrder = cff2GetGlyphOrder + if file is not None and isCFF2: + self._isCFF2 = isCFF2 + self.items = [] + name = self.__class__.__name__ + log.log(DEBUG, "loading %s at %s", name, file.tell()) + self.file = file + count = 1 + self.items = [None] * count + self.offsets = [0, topSize] + self.offsetBase = file.tell() + # pretend we've read the whole lot + file.seek(self.offsetBase + topSize) + log.log(DEBUG, " end of %s at %s", name, file.tell()) + else: + super(TopDictIndex, self).__init__(file, isCFF2=isCFF2) + + def produceItem(self, index, data, file, offset): + top = TopDict( + self.strings, + file, + offset, + self.GlobalSubrs, + self.cff2GetGlyphOrder, + isCFF2=self._isCFF2, + ) + top.decompile(data) + return top + + def toXML(self, xmlWriter): + for i in range(len(self)): + xmlWriter.begintag("FontDict", index=i) + xmlWriter.newline() + self[i].toXML(xmlWriter) + xmlWriter.endtag("FontDict") + xmlWriter.newline() + + +class FDArrayIndex(Index): + compilerClass = FDArrayIndexCompiler + + def toXML(self, xmlWriter): + for i in range(len(self)): + xmlWriter.begintag("FontDict", index=i) + xmlWriter.newline() + self[i].toXML(xmlWriter) + xmlWriter.endtag("FontDict") + xmlWriter.newline() + + def produceItem(self, index, data, file, offset): + fontDict = FontDict( + self.strings, + file, + offset, + self.GlobalSubrs, + isCFF2=self._isCFF2, + vstore=self.vstore, + ) + fontDict.decompile(data) + return fontDict + + def fromXML(self, name, attrs, content): + if name != "FontDict": + return + fontDict = FontDict() + for element in content: + if isinstance(element, str): + continue + name, attrs, content = element + fontDict.fromXML(name, attrs, content) + self.append(fontDict) + + +class VarStoreData(object): + def __init__(self, file=None, otVarStore=None): + self.file = file + self.data = None + self.otVarStore = otVarStore + self.font = TTFont() # dummy font for the decompile function. + + def decompile(self): + if self.file: + # read data in from file. Assume position is correct. + length = readCard16(self.file) + self.data = self.file.read(length) + globalState = {} + reader = OTTableReader(self.data, globalState) + self.otVarStore = ot.VarStore() + self.otVarStore.decompile(reader, self.font) + return self + + def compile(self): + writer = OTTableWriter() + self.otVarStore.compile(writer, self.font) + # Note that this omits the initial Card16 length from the CFF2 + # VarStore data block + self.data = writer.getAllData() + + def writeXML(self, xmlWriter, name): + self.otVarStore.toXML(xmlWriter, self.font) + + def xmlRead(self, name, attrs, content, parent): + self.otVarStore = ot.VarStore() + for element in content: + if isinstance(element, tuple): + name, attrs, content = element + self.otVarStore.fromXML(name, attrs, content, self.font) + else: + pass + return None + + def __len__(self): + return len(self.data) + + def getNumRegions(self, vsIndex): + if vsIndex is None: + vsIndex = 0 + varData = self.otVarStore.VarData[vsIndex] + numRegions = varData.VarRegionCount + return numRegions + + +class FDSelect(object): + def __init__(self, file=None, numGlyphs=None, format=None): + if file: + # read data in from file + self.format = readCard8(file) + if self.format == 0: + from array import array + + self.gidArray = array("B", file.read(numGlyphs)).tolist() + elif self.format == 3: + gidArray = [None] * numGlyphs + nRanges = readCard16(file) + fd = None + prev = None + for i in range(nRanges): + first = readCard16(file) + if prev is not None: + for glyphID in range(prev, first): + gidArray[glyphID] = fd + prev = first + fd = readCard8(file) + if prev is not None: + first = readCard16(file) + for glyphID in range(prev, first): + gidArray[glyphID] = fd + self.gidArray = gidArray + elif self.format == 4: + gidArray = [None] * numGlyphs + nRanges = readCard32(file) + fd = None + prev = None + for i in range(nRanges): + first = readCard32(file) + if prev is not None: + for glyphID in range(prev, first): + gidArray[glyphID] = fd + prev = first + fd = readCard16(file) + if prev is not None: + first = readCard32(file) + for glyphID in range(prev, first): + gidArray[glyphID] = fd + self.gidArray = gidArray + else: + assert False, "unsupported FDSelect format: %s" % format + else: + # reading from XML. Make empty gidArray, and leave format as passed in. + # format is None will result in the smallest representation being used. + self.format = format + self.gidArray = [] + + def __len__(self): + return len(self.gidArray) + + def __getitem__(self, index): + return self.gidArray[index] + + def __setitem__(self, index, fdSelectValue): + self.gidArray[index] = fdSelectValue + + def append(self, fdSelectValue): + self.gidArray.append(fdSelectValue) + + +class CharStrings(object): + """The ``CharStrings`` in the font represent the instructions for drawing + each glyph. This object presents a dictionary interface to the font's + CharStrings, indexed by glyph name: + + .. code:: python + + tt["CFF "].cff[0].CharStrings["a"] + # + + See :class:`fontTools.misc.psCharStrings.T1CharString` and + :class:`fontTools.misc.psCharStrings.T2CharString` for how to decompile, + compile and interpret the glyph drawing instructions in the returned objects. + + """ + + def __init__( + self, + file, + charset, + globalSubrs, + private, + fdSelect, + fdArray, + isCFF2=None, + varStore=None, + ): + self.globalSubrs = globalSubrs + self.varStore = varStore + if file is not None: + self.charStringsIndex = SubrsIndex( + file, globalSubrs, private, fdSelect, fdArray, isCFF2=isCFF2 + ) + self.charStrings = charStrings = {} + for i in range(len(charset)): + charStrings[charset[i]] = i + # read from OTF file: charStrings.values() are indices into + # charStringsIndex. + self.charStringsAreIndexed = 1 + else: + self.charStrings = {} + # read from ttx file: charStrings.values() are actual charstrings + self.charStringsAreIndexed = 0 + self.private = private + if fdSelect is not None: + self.fdSelect = fdSelect + if fdArray is not None: + self.fdArray = fdArray + + def keys(self): + return list(self.charStrings.keys()) + + def values(self): + if self.charStringsAreIndexed: + return self.charStringsIndex + else: + return list(self.charStrings.values()) + + def has_key(self, name): + return name in self.charStrings + + __contains__ = has_key + + def __len__(self): + return len(self.charStrings) + + def __getitem__(self, name): + charString = self.charStrings[name] + if self.charStringsAreIndexed: + charString = self.charStringsIndex[charString] + return charString + + def __setitem__(self, name, charString): + if self.charStringsAreIndexed: + index = self.charStrings[name] + self.charStringsIndex[index] = charString + else: + self.charStrings[name] = charString + + def getItemAndSelector(self, name): + if self.charStringsAreIndexed: + index = self.charStrings[name] + return self.charStringsIndex.getItemAndSelector(index) + else: + if hasattr(self, "fdArray"): + if hasattr(self, "fdSelect"): + sel = self.charStrings[name].fdSelectIndex + else: + sel = 0 + else: + sel = None + return self.charStrings[name], sel + + def toXML(self, xmlWriter): + names = sorted(self.keys()) + for name in names: + charStr, fdSelectIndex = self.getItemAndSelector(name) + if charStr.needsDecompilation(): + raw = [("raw", 1)] + else: + raw = [] + if fdSelectIndex is None: + xmlWriter.begintag("CharString", [("name", name)] + raw) + else: + xmlWriter.begintag( + "CharString", + [("name", name), ("fdSelectIndex", fdSelectIndex)] + raw, + ) + xmlWriter.newline() + charStr.toXML(xmlWriter) + xmlWriter.endtag("CharString") + xmlWriter.newline() + + def fromXML(self, name, attrs, content): + for element in content: + if isinstance(element, str): + continue + name, attrs, content = element + if name != "CharString": + continue + fdID = -1 + if hasattr(self, "fdArray"): + try: + fdID = safeEval(attrs["fdSelectIndex"]) + except KeyError: + fdID = 0 + private = self.fdArray[fdID].Private + else: + private = self.private + + glyphName = attrs["name"] + charStringClass = psCharStrings.T2CharString + charString = charStringClass(private=private, globalSubrs=self.globalSubrs) + charString.fromXML(name, attrs, content) + if fdID >= 0: + charString.fdSelectIndex = fdID + self[glyphName] = charString + + +def readCard8(file): + return byteord(file.read(1)) + + +def readCard16(file): + (value,) = struct.unpack(">H", file.read(2)) + return value + + +def readCard32(file): + (value,) = struct.unpack(">L", file.read(4)) + return value + + +def writeCard8(file, value): + file.write(bytechr(value)) + + +def writeCard16(file, value): + file.write(struct.pack(">H", value)) + + +def writeCard32(file, value): + file.write(struct.pack(">L", value)) + + +def packCard8(value): + return bytechr(value) + + +def packCard16(value): + return struct.pack(">H", value) + + +def packCard32(value): + return struct.pack(">L", value) + + +def buildOperatorDict(table): + d = {} + for op, name, arg, default, conv in table: + d[op] = (name, arg) + return d + + +def buildOpcodeDict(table): + d = {} + for op, name, arg, default, conv in table: + if isinstance(op, tuple): + op = bytechr(op[0]) + bytechr(op[1]) + else: + op = bytechr(op) + d[name] = (op, arg) + return d + + +def buildOrder(table): + l = [] + for op, name, arg, default, conv in table: + l.append(name) + return l + + +def buildDefaults(table): + d = {} + for op, name, arg, default, conv in table: + if default is not None: + d[name] = default + return d + + +def buildConverters(table): + d = {} + for op, name, arg, default, conv in table: + d[name] = conv + return d + + +class SimpleConverter(object): + def read(self, parent, value): + if not hasattr(parent, "file"): + return self._read(parent, value) + file = parent.file + pos = file.tell() + try: + return self._read(parent, value) + finally: + file.seek(pos) + + def _read(self, parent, value): + return value + + def write(self, parent, value): + return value + + def xmlWrite(self, xmlWriter, name, value): + xmlWriter.simpletag(name, value=value) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + return attrs["value"] + + +class ASCIIConverter(SimpleConverter): + def _read(self, parent, value): + return tostr(value, encoding="ascii") + + def write(self, parent, value): + return tobytes(value, encoding="ascii") + + def xmlWrite(self, xmlWriter, name, value): + xmlWriter.simpletag(name, value=tostr(value, encoding="ascii")) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + return tobytes(attrs["value"], encoding=("ascii")) + + +class Latin1Converter(SimpleConverter): + def _read(self, parent, value): + return tostr(value, encoding="latin1") + + def write(self, parent, value): + return tobytes(value, encoding="latin1") + + def xmlWrite(self, xmlWriter, name, value): + value = tostr(value, encoding="latin1") + if name in ["Notice", "Copyright"]: + value = re.sub(r"[\r\n]\s+", " ", value) + xmlWriter.simpletag(name, value=value) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + return tobytes(attrs["value"], encoding=("latin1")) + + +def parseNum(s): + try: + value = int(s) + except: + value = float(s) + return value + + +def parseBlendList(s): + valueList = [] + for element in s: + if isinstance(element, str): + continue + name, attrs, content = element + blendList = attrs["value"].split() + blendList = [eval(val) for val in blendList] + valueList.append(blendList) + if len(valueList) == 1: + valueList = valueList[0] + return valueList + + +class NumberConverter(SimpleConverter): + def xmlWrite(self, xmlWriter, name, value): + if isinstance(value, list): + xmlWriter.begintag(name) + xmlWriter.newline() + xmlWriter.indent() + blendValue = " ".join([str(val) for val in value]) + xmlWriter.simpletag(kBlendDictOpName, value=blendValue) + xmlWriter.newline() + xmlWriter.dedent() + xmlWriter.endtag(name) + xmlWriter.newline() + else: + xmlWriter.simpletag(name, value=value) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + valueString = attrs.get("value", None) + if valueString is None: + value = parseBlendList(content) + else: + value = parseNum(attrs["value"]) + return value + + +class ArrayConverter(SimpleConverter): + def xmlWrite(self, xmlWriter, name, value): + if value and isinstance(value[0], list): + xmlWriter.begintag(name) + xmlWriter.newline() + xmlWriter.indent() + for valueList in value: + blendValue = " ".join([str(val) for val in valueList]) + xmlWriter.simpletag(kBlendDictOpName, value=blendValue) + xmlWriter.newline() + xmlWriter.dedent() + xmlWriter.endtag(name) + xmlWriter.newline() + else: + value = " ".join([str(val) for val in value]) + xmlWriter.simpletag(name, value=value) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + valueString = attrs.get("value", None) + if valueString is None: + valueList = parseBlendList(content) + else: + values = valueString.split() + valueList = [parseNum(value) for value in values] + return valueList + + +class TableConverter(SimpleConverter): + def xmlWrite(self, xmlWriter, name, value): + xmlWriter.begintag(name) + xmlWriter.newline() + value.toXML(xmlWriter) + xmlWriter.endtag(name) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + ob = self.getClass()() + for element in content: + if isinstance(element, str): + continue + name, attrs, content = element + ob.fromXML(name, attrs, content) + return ob + + +class PrivateDictConverter(TableConverter): + def getClass(self): + return PrivateDict + + def _read(self, parent, value): + size, offset = value + file = parent.file + isCFF2 = parent._isCFF2 + try: + vstore = parent.vstore + except AttributeError: + vstore = None + priv = PrivateDict(parent.strings, file, offset, isCFF2=isCFF2, vstore=vstore) + file.seek(offset) + data = file.read(size) + assert len(data) == size + priv.decompile(data) + return priv + + def write(self, parent, value): + return (0, 0) # dummy value + + +class SubrsConverter(TableConverter): + def getClass(self): + return SubrsIndex + + def _read(self, parent, value): + file = parent.file + isCFF2 = parent._isCFF2 + file.seek(parent.offset + value) # Offset(self) + return SubrsIndex(file, isCFF2=isCFF2) + + def write(self, parent, value): + return 0 # dummy value + + +class CharStringsConverter(TableConverter): + def _read(self, parent, value): + file = parent.file + isCFF2 = parent._isCFF2 + charset = parent.charset + varStore = getattr(parent, "VarStore", None) + globalSubrs = parent.GlobalSubrs + if hasattr(parent, "FDArray"): + fdArray = parent.FDArray + if hasattr(parent, "FDSelect"): + fdSelect = parent.FDSelect + else: + fdSelect = None + private = None + else: + fdSelect, fdArray = None, None + private = parent.Private + file.seek(value) # Offset(0) + charStrings = CharStrings( + file, + charset, + globalSubrs, + private, + fdSelect, + fdArray, + isCFF2=isCFF2, + varStore=varStore, + ) + return charStrings + + def write(self, parent, value): + return 0 # dummy value + + def xmlRead(self, name, attrs, content, parent): + if hasattr(parent, "FDArray"): + # if it is a CID-keyed font, then the private Dict is extracted from the + # parent.FDArray + fdArray = parent.FDArray + if hasattr(parent, "FDSelect"): + fdSelect = parent.FDSelect + else: + fdSelect = None + private = None + else: + # if it is a name-keyed font, then the private dict is in the top dict, + # and + # there is no fdArray. + private, fdSelect, fdArray = parent.Private, None, None + charStrings = CharStrings( + None, + None, + parent.GlobalSubrs, + private, + fdSelect, + fdArray, + varStore=getattr(parent, "VarStore", None), + ) + charStrings.fromXML(name, attrs, content) + return charStrings + + +class CharsetConverter(SimpleConverter): + def _read(self, parent, value): + isCID = hasattr(parent, "ROS") + if value > 2: + numGlyphs = parent.numGlyphs + file = parent.file + file.seek(value) + log.log(DEBUG, "loading charset at %s", value) + format = readCard8(file) + if format == 0: + charset = parseCharset0(numGlyphs, file, parent.strings, isCID) + elif format == 1 or format == 2: + charset = parseCharset(numGlyphs, file, parent.strings, isCID, format) + else: + raise NotImplementedError + assert len(charset) == numGlyphs + log.log(DEBUG, " charset end at %s", file.tell()) + # make sure glyph names are unique + allNames = {} + newCharset = [] + for glyphName in charset: + if glyphName in allNames: + # make up a new glyphName that's unique + n = allNames[glyphName] + while (glyphName + "#" + str(n)) in allNames: + n += 1 + allNames[glyphName] = n + 1 + glyphName = glyphName + "#" + str(n) + allNames[glyphName] = 1 + newCharset.append(glyphName) + charset = newCharset + else: # offset == 0 -> no charset data. + if isCID or "CharStrings" not in parent.rawDict: + # We get here only when processing fontDicts from the FDArray of + # CFF-CID fonts. Only the real topDict references the chrset. + assert value == 0 + charset = None + elif value == 0: + charset = cffISOAdobeStrings + elif value == 1: + charset = cffIExpertStrings + elif value == 2: + charset = cffExpertSubsetStrings + if charset and (len(charset) != parent.numGlyphs): + charset = charset[: parent.numGlyphs] + return charset + + def write(self, parent, value): + return 0 # dummy value + + def xmlWrite(self, xmlWriter, name, value): + # XXX only write charset when not in OT/TTX context, where we + # dump charset as a separate "GlyphOrder" table. + # # xmlWriter.simpletag("charset") + xmlWriter.comment("charset is dumped separately as the 'GlyphOrder' element") + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + pass + + +class CharsetCompiler(object): + def __init__(self, strings, charset, parent): + assert charset[0] == ".notdef" + isCID = hasattr(parent.dictObj, "ROS") + data0 = packCharset0(charset, isCID, strings) + data = packCharset(charset, isCID, strings) + if len(data) < len(data0): + self.data = data + else: + self.data = data0 + self.parent = parent + + def setPos(self, pos, endPos): + self.parent.rawDict["charset"] = pos + + def getDataLength(self): + return len(self.data) + + def toFile(self, file): + file.write(self.data) + + +def getStdCharSet(charset): + # check to see if we can use a predefined charset value. + predefinedCharSetVal = None + predefinedCharSets = [ + (cffISOAdobeStringCount, cffISOAdobeStrings, 0), + (cffExpertStringCount, cffIExpertStrings, 1), + (cffExpertSubsetStringCount, cffExpertSubsetStrings, 2), + ] + lcs = len(charset) + for cnt, pcs, csv in predefinedCharSets: + if predefinedCharSetVal is not None: + break + if lcs > cnt: + continue + predefinedCharSetVal = csv + for i in range(lcs): + if charset[i] != pcs[i]: + predefinedCharSetVal = None + break + return predefinedCharSetVal + + +def getCIDfromName(name, strings): + return int(name[3:]) + + +def getSIDfromName(name, strings): + return strings.getSID(name) + + +def packCharset0(charset, isCID, strings): + fmt = 0 + data = [packCard8(fmt)] + if isCID: + getNameID = getCIDfromName + else: + getNameID = getSIDfromName + + for name in charset[1:]: + data.append(packCard16(getNameID(name, strings))) + return bytesjoin(data) + + +def packCharset(charset, isCID, strings): + fmt = 1 + ranges = [] + first = None + end = 0 + if isCID: + getNameID = getCIDfromName + else: + getNameID = getSIDfromName + + for name in charset[1:]: + SID = getNameID(name, strings) + if first is None: + first = SID + elif end + 1 != SID: + nLeft = end - first + if nLeft > 255: + fmt = 2 + ranges.append((first, nLeft)) + first = SID + end = SID + if end: + nLeft = end - first + if nLeft > 255: + fmt = 2 + ranges.append((first, nLeft)) + + data = [packCard8(fmt)] + if fmt == 1: + nLeftFunc = packCard8 + else: + nLeftFunc = packCard16 + for first, nLeft in ranges: + data.append(packCard16(first) + nLeftFunc(nLeft)) + return bytesjoin(data) + + +def parseCharset0(numGlyphs, file, strings, isCID): + charset = [".notdef"] + if isCID: + for i in range(numGlyphs - 1): + CID = readCard16(file) + charset.append("cid" + str(CID).zfill(5)) + else: + for i in range(numGlyphs - 1): + SID = readCard16(file) + charset.append(strings[SID]) + return charset + + +def parseCharset(numGlyphs, file, strings, isCID, fmt): + charset = [".notdef"] + count = 1 + if fmt == 1: + nLeftFunc = readCard8 + else: + nLeftFunc = readCard16 + while count < numGlyphs: + first = readCard16(file) + nLeft = nLeftFunc(file) + if isCID: + for CID in range(first, first + nLeft + 1): + charset.append("cid" + str(CID).zfill(5)) + else: + for SID in range(first, first + nLeft + 1): + charset.append(strings[SID]) + count = count + nLeft + 1 + return charset + + +class EncodingCompiler(object): + def __init__(self, strings, encoding, parent): + assert not isinstance(encoding, str) + data0 = packEncoding0(parent.dictObj.charset, encoding, parent.strings) + data1 = packEncoding1(parent.dictObj.charset, encoding, parent.strings) + if len(data0) < len(data1): + self.data = data0 + else: + self.data = data1 + self.parent = parent + + def setPos(self, pos, endPos): + self.parent.rawDict["Encoding"] = pos + + def getDataLength(self): + return len(self.data) + + def toFile(self, file): + file.write(self.data) + + +class EncodingConverter(SimpleConverter): + def _read(self, parent, value): + if value == 0: + return "StandardEncoding" + elif value == 1: + return "ExpertEncoding" + else: + assert value > 1 + file = parent.file + file.seek(value) + log.log(DEBUG, "loading Encoding at %s", value) + fmt = readCard8(file) + haveSupplement = fmt & 0x80 + if haveSupplement: + raise NotImplementedError("Encoding supplements are not yet supported") + fmt = fmt & 0x7F + if fmt == 0: + encoding = parseEncoding0( + parent.charset, file, haveSupplement, parent.strings + ) + elif fmt == 1: + encoding = parseEncoding1( + parent.charset, file, haveSupplement, parent.strings + ) + return encoding + + def write(self, parent, value): + if value == "StandardEncoding": + return 0 + elif value == "ExpertEncoding": + return 1 + return 0 # dummy value + + def xmlWrite(self, xmlWriter, name, value): + if value in ("StandardEncoding", "ExpertEncoding"): + xmlWriter.simpletag(name, name=value) + xmlWriter.newline() + return + xmlWriter.begintag(name) + xmlWriter.newline() + for code in range(len(value)): + glyphName = value[code] + if glyphName != ".notdef": + xmlWriter.simpletag("map", code=hex(code), name=glyphName) + xmlWriter.newline() + xmlWriter.endtag(name) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + if "name" in attrs: + return attrs["name"] + encoding = [".notdef"] * 256 + for element in content: + if isinstance(element, str): + continue + name, attrs, content = element + code = safeEval(attrs["code"]) + glyphName = attrs["name"] + encoding[code] = glyphName + return encoding + + +def parseEncoding0(charset, file, haveSupplement, strings): + nCodes = readCard8(file) + encoding = [".notdef"] * 256 + for glyphID in range(1, nCodes + 1): + code = readCard8(file) + if code != 0: + encoding[code] = charset[glyphID] + return encoding + + +def parseEncoding1(charset, file, haveSupplement, strings): + nRanges = readCard8(file) + encoding = [".notdef"] * 256 + glyphID = 1 + for i in range(nRanges): + code = readCard8(file) + nLeft = readCard8(file) + for glyphID in range(glyphID, glyphID + nLeft + 1): + encoding[code] = charset[glyphID] + code = code + 1 + glyphID = glyphID + 1 + return encoding + + +def packEncoding0(charset, encoding, strings): + fmt = 0 + m = {} + for code in range(len(encoding)): + name = encoding[code] + if name != ".notdef": + m[name] = code + codes = [] + for name in charset[1:]: + code = m.get(name) + codes.append(code) + + while codes and codes[-1] is None: + codes.pop() + + data = [packCard8(fmt), packCard8(len(codes))] + for code in codes: + if code is None: + code = 0 + data.append(packCard8(code)) + return bytesjoin(data) + + +def packEncoding1(charset, encoding, strings): + fmt = 1 + m = {} + for code in range(len(encoding)): + name = encoding[code] + if name != ".notdef": + m[name] = code + ranges = [] + first = None + end = 0 + for name in charset[1:]: + code = m.get(name, -1) + if first is None: + first = code + elif end + 1 != code: + nLeft = end - first + ranges.append((first, nLeft)) + first = code + end = code + nLeft = end - first + ranges.append((first, nLeft)) + + # remove unencoded glyphs at the end. + while ranges and ranges[-1][0] == -1: + ranges.pop() + + data = [packCard8(fmt), packCard8(len(ranges))] + for first, nLeft in ranges: + if first == -1: # unencoded + first = 0 + data.append(packCard8(first) + packCard8(nLeft)) + return bytesjoin(data) + + +class FDArrayConverter(TableConverter): + def _read(self, parent, value): + try: + vstore = parent.VarStore + except AttributeError: + vstore = None + file = parent.file + isCFF2 = parent._isCFF2 + file.seek(value) + fdArray = FDArrayIndex(file, isCFF2=isCFF2) + fdArray.vstore = vstore + fdArray.strings = parent.strings + fdArray.GlobalSubrs = parent.GlobalSubrs + return fdArray + + def write(self, parent, value): + return 0 # dummy value + + def xmlRead(self, name, attrs, content, parent): + fdArray = FDArrayIndex() + for element in content: + if isinstance(element, str): + continue + name, attrs, content = element + fdArray.fromXML(name, attrs, content) + return fdArray + + +class FDSelectConverter(SimpleConverter): + def _read(self, parent, value): + file = parent.file + file.seek(value) + fdSelect = FDSelect(file, parent.numGlyphs) + return fdSelect + + def write(self, parent, value): + return 0 # dummy value + + # The FDSelect glyph data is written out to XML in the charstring keys, + # so we write out only the format selector + def xmlWrite(self, xmlWriter, name, value): + xmlWriter.simpletag(name, [("format", value.format)]) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + fmt = safeEval(attrs["format"]) + file = None + numGlyphs = None + fdSelect = FDSelect(file, numGlyphs, fmt) + return fdSelect + + +class VarStoreConverter(SimpleConverter): + def _read(self, parent, value): + file = parent.file + file.seek(value) + varStore = VarStoreData(file) + varStore.decompile() + return varStore + + def write(self, parent, value): + return 0 # dummy value + + def xmlWrite(self, xmlWriter, name, value): + value.writeXML(xmlWriter, name) + + def xmlRead(self, name, attrs, content, parent): + varStore = VarStoreData() + varStore.xmlRead(name, attrs, content, parent) + return varStore + + +def packFDSelect0(fdSelectArray): + fmt = 0 + data = [packCard8(fmt)] + for index in fdSelectArray: + data.append(packCard8(index)) + return bytesjoin(data) + + +def packFDSelect3(fdSelectArray): + fmt = 3 + fdRanges = [] + lenArray = len(fdSelectArray) + lastFDIndex = -1 + for i in range(lenArray): + fdIndex = fdSelectArray[i] + if lastFDIndex != fdIndex: + fdRanges.append([i, fdIndex]) + lastFDIndex = fdIndex + sentinelGID = i + 1 + + data = [packCard8(fmt)] + data.append(packCard16(len(fdRanges))) + for fdRange in fdRanges: + data.append(packCard16(fdRange[0])) + data.append(packCard8(fdRange[1])) + data.append(packCard16(sentinelGID)) + return bytesjoin(data) + + +def packFDSelect4(fdSelectArray): + fmt = 4 + fdRanges = [] + lenArray = len(fdSelectArray) + lastFDIndex = -1 + for i in range(lenArray): + fdIndex = fdSelectArray[i] + if lastFDIndex != fdIndex: + fdRanges.append([i, fdIndex]) + lastFDIndex = fdIndex + sentinelGID = i + 1 + + data = [packCard8(fmt)] + data.append(packCard32(len(fdRanges))) + for fdRange in fdRanges: + data.append(packCard32(fdRange[0])) + data.append(packCard16(fdRange[1])) + data.append(packCard32(sentinelGID)) + return bytesjoin(data) + + +class FDSelectCompiler(object): + def __init__(self, fdSelect, parent): + fmt = fdSelect.format + fdSelectArray = fdSelect.gidArray + if fmt == 0: + self.data = packFDSelect0(fdSelectArray) + elif fmt == 3: + self.data = packFDSelect3(fdSelectArray) + elif fmt == 4: + self.data = packFDSelect4(fdSelectArray) + else: + # choose smaller of the two formats + data0 = packFDSelect0(fdSelectArray) + data3 = packFDSelect3(fdSelectArray) + if len(data0) < len(data3): + self.data = data0 + fdSelect.format = 0 + else: + self.data = data3 + fdSelect.format = 3 + + self.parent = parent + + def setPos(self, pos, endPos): + self.parent.rawDict["FDSelect"] = pos + + def getDataLength(self): + return len(self.data) + + def toFile(self, file): + file.write(self.data) + + +class VarStoreCompiler(object): + def __init__(self, varStoreData, parent): + self.parent = parent + if not varStoreData.data: + varStoreData.compile() + data = [packCard16(len(varStoreData.data)), varStoreData.data] + self.data = bytesjoin(data) + + def setPos(self, pos, endPos): + self.parent.rawDict["VarStore"] = pos + + def getDataLength(self): + return len(self.data) + + def toFile(self, file): + file.write(self.data) + + +class ROSConverter(SimpleConverter): + def xmlWrite(self, xmlWriter, name, value): + registry, order, supplement = value + xmlWriter.simpletag( + name, + [ + ("Registry", tostr(registry)), + ("Order", tostr(order)), + ("Supplement", supplement), + ], + ) + xmlWriter.newline() + + def xmlRead(self, name, attrs, content, parent): + return (attrs["Registry"], attrs["Order"], safeEval(attrs["Supplement"])) + + +topDictOperators = [ + # opcode name argument type default converter + (25, "maxstack", "number", None, None), + ((12, 30), "ROS", ("SID", "SID", "number"), None, ROSConverter()), + ((12, 20), "SyntheticBase", "number", None, None), + (0, "version", "SID", None, None), + (1, "Notice", "SID", None, Latin1Converter()), + ((12, 0), "Copyright", "SID", None, Latin1Converter()), + (2, "FullName", "SID", None, None), + ((12, 38), "FontName", "SID", None, None), + (3, "FamilyName", "SID", None, None), + (4, "Weight", "SID", None, None), + ((12, 1), "isFixedPitch", "number", 0, None), + ((12, 2), "ItalicAngle", "number", 0, None), + ((12, 3), "UnderlinePosition", "number", -100, None), + ((12, 4), "UnderlineThickness", "number", 50, None), + ((12, 5), "PaintType", "number", 0, None), + ((12, 6), "CharstringType", "number", 2, None), + ((12, 7), "FontMatrix", "array", [0.001, 0, 0, 0.001, 0, 0], None), + (13, "UniqueID", "number", None, None), + (5, "FontBBox", "array", [0, 0, 0, 0], None), + ((12, 8), "StrokeWidth", "number", 0, None), + (14, "XUID", "array", None, None), + ((12, 21), "PostScript", "SID", None, None), + ((12, 22), "BaseFontName", "SID", None, None), + ((12, 23), "BaseFontBlend", "delta", None, None), + ((12, 31), "CIDFontVersion", "number", 0, None), + ((12, 32), "CIDFontRevision", "number", 0, None), + ((12, 33), "CIDFontType", "number", 0, None), + ((12, 34), "CIDCount", "number", 8720, None), + (15, "charset", "number", None, CharsetConverter()), + ((12, 35), "UIDBase", "number", None, None), + (16, "Encoding", "number", 0, EncodingConverter()), + (18, "Private", ("number", "number"), None, PrivateDictConverter()), + ((12, 37), "FDSelect", "number", None, FDSelectConverter()), + ((12, 36), "FDArray", "number", None, FDArrayConverter()), + (17, "CharStrings", "number", None, CharStringsConverter()), + (24, "VarStore", "number", None, VarStoreConverter()), +] + +topDictOperators2 = [ + # opcode name argument type default converter + (25, "maxstack", "number", None, None), + ((12, 7), "FontMatrix", "array", [0.001, 0, 0, 0.001, 0, 0], None), + ((12, 37), "FDSelect", "number", None, FDSelectConverter()), + ((12, 36), "FDArray", "number", None, FDArrayConverter()), + (17, "CharStrings", "number", None, CharStringsConverter()), + (24, "VarStore", "number", None, VarStoreConverter()), +] + +# Note! FDSelect and FDArray must both preceed CharStrings in the output XML build order, +# in order for the font to compile back from xml. + +kBlendDictOpName = "blend" +blendOp = 23 + +privateDictOperators = [ + # opcode name argument type default converter + (22, "vsindex", "number", None, None), + ( + blendOp, + kBlendDictOpName, + "blendList", + None, + None, + ), # This is for reading to/from XML: it not written to CFF. + (6, "BlueValues", "delta", None, None), + (7, "OtherBlues", "delta", None, None), + (8, "FamilyBlues", "delta", None, None), + (9, "FamilyOtherBlues", "delta", None, None), + ((12, 9), "BlueScale", "number", 0.039625, None), + ((12, 10), "BlueShift", "number", 7, None), + ((12, 11), "BlueFuzz", "number", 1, None), + (10, "StdHW", "number", None, None), + (11, "StdVW", "number", None, None), + ((12, 12), "StemSnapH", "delta", None, None), + ((12, 13), "StemSnapV", "delta", None, None), + ((12, 14), "ForceBold", "number", 0, None), + ((12, 15), "ForceBoldThreshold", "number", None, None), # deprecated + ((12, 16), "lenIV", "number", None, None), # deprecated + ((12, 17), "LanguageGroup", "number", 0, None), + ((12, 18), "ExpansionFactor", "number", 0.06, None), + ((12, 19), "initialRandomSeed", "number", 0, None), + (20, "defaultWidthX", "number", 0, None), + (21, "nominalWidthX", "number", 0, None), + (19, "Subrs", "number", None, SubrsConverter()), +] + +privateDictOperators2 = [ + # opcode name argument type default converter + (22, "vsindex", "number", None, None), + ( + blendOp, + kBlendDictOpName, + "blendList", + None, + None, + ), # This is for reading to/from XML: it not written to CFF. + (6, "BlueValues", "delta", None, None), + (7, "OtherBlues", "delta", None, None), + (8, "FamilyBlues", "delta", None, None), + (9, "FamilyOtherBlues", "delta", None, None), + ((12, 9), "BlueScale", "number", 0.039625, None), + ((12, 10), "BlueShift", "number", 7, None), + ((12, 11), "BlueFuzz", "number", 1, None), + (10, "StdHW", "number", None, None), + (11, "StdVW", "number", None, None), + ((12, 12), "StemSnapH", "delta", None, None), + ((12, 13), "StemSnapV", "delta", None, None), + ((12, 17), "LanguageGroup", "number", 0, None), + ((12, 18), "ExpansionFactor", "number", 0.06, None), + (19, "Subrs", "number", None, SubrsConverter()), +] + + +def addConverters(table): + for i in range(len(table)): + op, name, arg, default, conv = table[i] + if conv is not None: + continue + if arg in ("delta", "array"): + conv = ArrayConverter() + elif arg == "number": + conv = NumberConverter() + elif arg == "SID": + conv = ASCIIConverter() + elif arg == "blendList": + conv = None + else: + assert False + table[i] = op, name, arg, default, conv + + +addConverters(privateDictOperators) +addConverters(topDictOperators) + + +class TopDictDecompiler(psCharStrings.DictDecompiler): + operators = buildOperatorDict(topDictOperators) + + +class PrivateDictDecompiler(psCharStrings.DictDecompiler): + operators = buildOperatorDict(privateDictOperators) + + +class DictCompiler(object): + maxBlendStack = 0 + + def __init__(self, dictObj, strings, parent, isCFF2=None): + if strings: + assert isinstance(strings, IndexedStrings) + if isCFF2 is None and hasattr(parent, "isCFF2"): + isCFF2 = parent.isCFF2 + assert isCFF2 is not None + self.isCFF2 = isCFF2 + self.dictObj = dictObj + self.strings = strings + self.parent = parent + rawDict = {} + for name in dictObj.order: + value = getattr(dictObj, name, None) + if value is None: + continue + conv = dictObj.converters[name] + value = conv.write(dictObj, value) + if value == dictObj.defaults.get(name): + continue + rawDict[name] = value + self.rawDict = rawDict + + def setPos(self, pos, endPos): + pass + + def getDataLength(self): + return len(self.compile("getDataLength")) + + def compile(self, reason): + log.log(DEBUG, "-- compiling %s for %s", self.__class__.__name__, reason) + rawDict = self.rawDict + data = [] + for name in self.dictObj.order: + value = rawDict.get(name) + if value is None: + continue + op, argType = self.opcodes[name] + if isinstance(argType, tuple): + l = len(argType) + assert len(value) == l, "value doesn't match arg type" + for i in range(l): + arg = argType[i] + v = value[i] + arghandler = getattr(self, "arg_" + arg) + data.append(arghandler(v)) + else: + arghandler = getattr(self, "arg_" + argType) + data.append(arghandler(value)) + data.append(op) + data = bytesjoin(data) + return data + + def toFile(self, file): + data = self.compile("toFile") + file.write(data) + + def arg_number(self, num): + if isinstance(num, list): + data = [encodeNumber(val) for val in num] + data.append(encodeNumber(1)) + data.append(bytechr(blendOp)) + datum = bytesjoin(data) + else: + datum = encodeNumber(num) + return datum + + def arg_SID(self, s): + return psCharStrings.encodeIntCFF(self.strings.getSID(s)) + + def arg_array(self, value): + data = [] + for num in value: + data.append(self.arg_number(num)) + return bytesjoin(data) + + def arg_delta(self, value): + if not value: + return b"" + val0 = value[0] + if isinstance(val0, list): + data = self.arg_delta_blend(value) + else: + out = [] + last = 0 + for v in value: + out.append(v - last) + last = v + data = [] + for num in out: + data.append(encodeNumber(num)) + return bytesjoin(data) + + def arg_delta_blend(self, value): + """A delta list with blend lists has to be *all* blend lists. + + The value is a list is arranged as follows:: + + [ + [V0, d0..dn] + [V1, d0..dn] + ... + [Vm, d0..dn] + ] + + ``V`` is the absolute coordinate value from the default font, and ``d0-dn`` + are the delta values from the *n* regions. Each ``V`` is an absolute + coordinate from the default font. + + We want to return a list:: + + [ + [v0, v1..vm] + [d0..dn] + ... + [d0..dn] + numBlends + blendOp + ] + + where each ``v`` is relative to the previous default font value. + """ + numMasters = len(value[0]) + numBlends = len(value) + numStack = (numBlends * numMasters) + 1 + if numStack > self.maxBlendStack: + # Figure out the max number of value we can blend + # and divide this list up into chunks of that size. + + numBlendValues = int((self.maxBlendStack - 1) / numMasters) + out = [] + while True: + numVal = min(len(value), numBlendValues) + if numVal == 0: + break + valList = value[0:numVal] + out1 = self.arg_delta_blend(valList) + out.extend(out1) + value = value[numVal:] + else: + firstList = [0] * numBlends + deltaList = [None] * numBlends + i = 0 + prevVal = 0 + while i < numBlends: + # For PrivateDict BlueValues, the default font + # values are absolute, not relative. + # Must convert these back to relative coordinates + # befor writing to CFF2. + defaultValue = value[i][0] + firstList[i] = defaultValue - prevVal + prevVal = defaultValue + deltaList[i] = value[i][1:] + i += 1 + + relValueList = firstList + for blendList in deltaList: + relValueList.extend(blendList) + out = [encodeNumber(val) for val in relValueList] + out.append(encodeNumber(numBlends)) + out.append(bytechr(blendOp)) + return out + + +def encodeNumber(num): + if isinstance(num, float): + return psCharStrings.encodeFloat(num) + else: + return psCharStrings.encodeIntCFF(num) + + +class TopDictCompiler(DictCompiler): + opcodes = buildOpcodeDict(topDictOperators) + + def getChildren(self, strings): + isCFF2 = self.isCFF2 + children = [] + if self.dictObj.cff2GetGlyphOrder is None: + if hasattr(self.dictObj, "charset") and self.dictObj.charset: + if hasattr(self.dictObj, "ROS"): # aka isCID + charsetCode = None + else: + charsetCode = getStdCharSet(self.dictObj.charset) + if charsetCode is None: + children.append( + CharsetCompiler(strings, self.dictObj.charset, self) + ) + else: + self.rawDict["charset"] = charsetCode + if hasattr(self.dictObj, "Encoding") and self.dictObj.Encoding: + encoding = self.dictObj.Encoding + if not isinstance(encoding, str): + children.append(EncodingCompiler(strings, encoding, self)) + else: + if hasattr(self.dictObj, "VarStore"): + varStoreData = self.dictObj.VarStore + varStoreComp = VarStoreCompiler(varStoreData, self) + children.append(varStoreComp) + if hasattr(self.dictObj, "FDSelect"): + # I have not yet supported merging a ttx CFF-CID font, as there are + # interesting issues about merging the FDArrays. Here I assume that + # either the font was read from XML, and the FDSelect indices are all + # in the charstring data, or the FDSelect array is already fully defined. + fdSelect = self.dictObj.FDSelect + # probably read in from XML; assume fdIndex in CharString data + if len(fdSelect) == 0: + charStrings = self.dictObj.CharStrings + for name in self.dictObj.charset: + fdSelect.append(charStrings[name].fdSelectIndex) + fdSelectComp = FDSelectCompiler(fdSelect, self) + children.append(fdSelectComp) + if hasattr(self.dictObj, "CharStrings"): + items = [] + charStrings = self.dictObj.CharStrings + for name in self.dictObj.charset: + items.append(charStrings[name]) + charStringsComp = CharStringsCompiler(items, strings, self, isCFF2=isCFF2) + children.append(charStringsComp) + if hasattr(self.dictObj, "FDArray"): + # I have not yet supported merging a ttx CFF-CID font, as there are + # interesting issues about merging the FDArrays. Here I assume that the + # FDArray info is correct and complete. + fdArrayIndexComp = self.dictObj.FDArray.getCompiler(strings, self) + children.append(fdArrayIndexComp) + children.extend(fdArrayIndexComp.getChildren(strings)) + if hasattr(self.dictObj, "Private"): + privComp = self.dictObj.Private.getCompiler(strings, self) + children.append(privComp) + children.extend(privComp.getChildren(strings)) + return children + + +class FontDictCompiler(DictCompiler): + opcodes = buildOpcodeDict(topDictOperators) + + def __init__(self, dictObj, strings, parent, isCFF2=None): + super(FontDictCompiler, self).__init__(dictObj, strings, parent, isCFF2=isCFF2) + # + # We now take some effort to detect if there were any key/value pairs + # supplied that were ignored in the FontDict context, and issue a warning + # for those cases. + # + ignoredNames = [] + dictObj = self.dictObj + for name in sorted(set(dictObj.converters) - set(dictObj.order)): + if name in dictObj.rawDict: + # The font was directly read from binary. In this + # case, we want to report *all* "useless" key/value + # pairs that are in the font, not just the ones that + # are different from the default. + ignoredNames.append(name) + else: + # The font was probably read from a TTX file. We only + # warn about keys whos value is not the default. The + # ones that have the default value will not be written + # to binary anyway. + default = dictObj.defaults.get(name) + if default is not None: + conv = dictObj.converters[name] + default = conv.read(dictObj, default) + if getattr(dictObj, name, None) != default: + ignoredNames.append(name) + if ignoredNames: + log.warning( + "Some CFF FDArray/FontDict keys were ignored upon compile: " + + " ".join(sorted(ignoredNames)) + ) + + def getChildren(self, strings): + children = [] + if hasattr(self.dictObj, "Private"): + privComp = self.dictObj.Private.getCompiler(strings, self) + children.append(privComp) + children.extend(privComp.getChildren(strings)) + return children + + +class PrivateDictCompiler(DictCompiler): + maxBlendStack = maxStackLimit + opcodes = buildOpcodeDict(privateDictOperators) + + def setPos(self, pos, endPos): + size = endPos - pos + self.parent.rawDict["Private"] = size, pos + self.pos = pos + + def getChildren(self, strings): + children = [] + if hasattr(self.dictObj, "Subrs"): + children.append(self.dictObj.Subrs.getCompiler(strings, self)) + return children + + +class BaseDict(object): + def __init__(self, strings=None, file=None, offset=None, isCFF2=None): + assert (isCFF2 is None) == (file is None) + self.rawDict = {} + self.skipNames = [] + self.strings = strings + if file is None: + return + self._isCFF2 = isCFF2 + self.file = file + if offset is not None: + log.log(DEBUG, "loading %s at %s", self.__class__.__name__, offset) + self.offset = offset + + def decompile(self, data): + log.log(DEBUG, " length %s is %d", self.__class__.__name__, len(data)) + dec = self.decompilerClass(self.strings, self) + dec.decompile(data) + self.rawDict = dec.getDict() + self.postDecompile() + + def postDecompile(self): + pass + + def getCompiler(self, strings, parent, isCFF2=None): + return self.compilerClass(self, strings, parent, isCFF2=isCFF2) + + def __getattr__(self, name): + if name[:2] == name[-2:] == "__": + # to make deepcopy() and pickle.load() work, we need to signal with + # AttributeError that dunder methods like '__deepcopy__' or '__getstate__' + # aren't implemented. For more details, see: + # https://github.com/fonttools/fonttools/pull/1488 + raise AttributeError(name) + value = self.rawDict.get(name, None) + if value is None: + value = self.defaults.get(name) + if value is None: + raise AttributeError(name) + conv = self.converters[name] + value = conv.read(self, value) + setattr(self, name, value) + return value + + def toXML(self, xmlWriter): + for name in self.order: + if name in self.skipNames: + continue + value = getattr(self, name, None) + # XXX For "charset" we never skip calling xmlWrite even if the + # value is None, so we always write the following XML comment: + # + # + # + # Charset is None when 'CFF ' table is imported from XML into an + # empty TTFont(). By writing this comment all the time, we obtain + # the same XML output whether roundtripping XML-to-XML or + # dumping binary-to-XML + if value is None and name != "charset": + continue + conv = self.converters[name] + conv.xmlWrite(xmlWriter, name, value) + ignoredNames = set(self.rawDict) - set(self.order) + if ignoredNames: + xmlWriter.comment( + "some keys were ignored: %s" % " ".join(sorted(ignoredNames)) + ) + xmlWriter.newline() + + def fromXML(self, name, attrs, content): + conv = self.converters[name] + value = conv.xmlRead(name, attrs, content, self) + setattr(self, name, value) + + +class TopDict(BaseDict): + """The ``TopDict`` represents the top-level dictionary holding font + information. CFF2 tables contain a restricted set of top-level entries + as described `here `_, + but CFF tables may contain a wider range of information. This information + can be accessed through attributes or through the dictionary returned + through the ``rawDict`` property: + + .. code:: python + + font = tt["CFF "].cff[0] + font.FamilyName + # 'Linux Libertine O' + font.rawDict["FamilyName"] + # 'Linux Libertine O' + + More information is available in the CFF file's private dictionary, accessed + via the ``Private`` property: + + .. code:: python + + tt["CFF "].cff[0].Private.BlueValues + # [-15, 0, 515, 515, 666, 666] + + """ + + defaults = buildDefaults(topDictOperators) + converters = buildConverters(topDictOperators) + compilerClass = TopDictCompiler + order = buildOrder(topDictOperators) + decompilerClass = TopDictDecompiler + + def __init__( + self, + strings=None, + file=None, + offset=None, + GlobalSubrs=None, + cff2GetGlyphOrder=None, + isCFF2=None, + ): + super(TopDict, self).__init__(strings, file, offset, isCFF2=isCFF2) + self.cff2GetGlyphOrder = cff2GetGlyphOrder + self.GlobalSubrs = GlobalSubrs + if isCFF2: + self.defaults = buildDefaults(topDictOperators2) + self.charset = cff2GetGlyphOrder() + self.order = buildOrder(topDictOperators2) + else: + self.defaults = buildDefaults(topDictOperators) + self.order = buildOrder(topDictOperators) + + def getGlyphOrder(self): + """Returns a list of glyph names in the CFF font.""" + return self.charset + + def postDecompile(self): + offset = self.rawDict.get("CharStrings") + if offset is None: + return + # get the number of glyphs beforehand. + self.file.seek(offset) + if self._isCFF2: + self.numGlyphs = readCard32(self.file) + else: + self.numGlyphs = readCard16(self.file) + + def toXML(self, xmlWriter): + if hasattr(self, "CharStrings"): + self.decompileAllCharStrings() + if hasattr(self, "ROS"): + self.skipNames = ["Encoding"] + if not hasattr(self, "ROS") or not hasattr(self, "CharStrings"): + # these values have default values, but I only want them to show up + # in CID fonts. + self.skipNames = [ + "CIDFontVersion", + "CIDFontRevision", + "CIDFontType", + "CIDCount", + ] + BaseDict.toXML(self, xmlWriter) + + def decompileAllCharStrings(self): + # Make sure that all the Private Dicts have been instantiated. + for i, charString in enumerate(self.CharStrings.values()): + try: + charString.decompile() + except: + log.error("Error in charstring %s", i) + raise + + def recalcFontBBox(self): + fontBBox = None + for charString in self.CharStrings.values(): + bounds = charString.calcBounds(self.CharStrings) + if bounds is not None: + if fontBBox is not None: + fontBBox = unionRect(fontBBox, bounds) + else: + fontBBox = bounds + + if fontBBox is None: + self.FontBBox = self.defaults["FontBBox"][:] + else: + self.FontBBox = list(intRect(fontBBox)) + + +class FontDict(BaseDict): + # + # Since fonttools used to pass a lot of fields that are not relevant in the FDArray + # FontDict, there are 'ttx' files in the wild that contain all these. These got in + # the ttx files because fonttools writes explicit values for all the TopDict default + # values. These are not actually illegal in the context of an FDArray FontDict - you + # can legally, per spec, put any arbitrary key/value pair in a FontDict - but are + # useless since current major company CFF interpreters ignore anything but the set + # listed in this file. So, we just silently skip them. An exception is Weight: this + # is not used by any interpreter, but some foundries have asked that this be + # supported in FDArray FontDicts just to preserve information about the design when + # the font is being inspected. + # + # On top of that, there are fonts out there that contain such useless FontDict values. + # + # By subclassing TopDict, we *allow* all key/values from TopDict, both when reading + # from binary or when reading from XML, but by overriding `order` with a limited + # list of names, we ensure that only the useful names ever get exported to XML and + # ever get compiled into the binary font. + # + # We override compilerClass so we can warn about "useless" key/value pairs, either + # from the original binary font or from TTX input. + # + # See: + # - https://github.com/fonttools/fonttools/issues/740 + # - https://github.com/fonttools/fonttools/issues/601 + # - https://github.com/adobe-type-tools/afdko/issues/137 + # + defaults = {} + converters = buildConverters(topDictOperators) + compilerClass = FontDictCompiler + orderCFF = ["FontName", "FontMatrix", "Weight", "Private"] + orderCFF2 = ["Private"] + decompilerClass = TopDictDecompiler + + def __init__( + self, + strings=None, + file=None, + offset=None, + GlobalSubrs=None, + isCFF2=None, + vstore=None, + ): + super(FontDict, self).__init__(strings, file, offset, isCFF2=isCFF2) + self.vstore = vstore + self.setCFF2(isCFF2) + + def setCFF2(self, isCFF2): + # isCFF2 may be None. + if isCFF2: + self.order = self.orderCFF2 + self._isCFF2 = True + else: + self.order = self.orderCFF + self._isCFF2 = False + + +class PrivateDict(BaseDict): + defaults = buildDefaults(privateDictOperators) + converters = buildConverters(privateDictOperators) + order = buildOrder(privateDictOperators) + decompilerClass = PrivateDictDecompiler + compilerClass = PrivateDictCompiler + + def __init__(self, strings=None, file=None, offset=None, isCFF2=None, vstore=None): + super(PrivateDict, self).__init__(strings, file, offset, isCFF2=isCFF2) + self.vstore = vstore + if isCFF2: + self.defaults = buildDefaults(privateDictOperators2) + self.order = buildOrder(privateDictOperators2) + # Provide dummy values. This avoids needing to provide + # an isCFF2 state in a lot of places. + self.nominalWidthX = self.defaultWidthX = None + else: + self.defaults = buildDefaults(privateDictOperators) + self.order = buildOrder(privateDictOperators) + + @property + def in_cff2(self): + return self._isCFF2 + + def getNumRegions(self, vi=None): # called from misc/psCharStrings.py + # if getNumRegions is being called, we can assume that VarStore exists. + if vi is None: + if hasattr(self, "vsindex"): + vi = self.vsindex + else: + vi = 0 + numRegions = self.vstore.getNumRegions(vi) + return numRegions + + +class IndexedStrings(object): + + """SID -> string mapping.""" + + def __init__(self, file=None): + if file is None: + strings = [] + else: + strings = [tostr(s, encoding="latin1") for s in Index(file, isCFF2=False)] + self.strings = strings + + def getCompiler(self): + return IndexedStringsCompiler(self, None, self, isCFF2=False) + + def __len__(self): + return len(self.strings) + + def __getitem__(self, SID): + if SID < cffStandardStringCount: + return cffStandardStrings[SID] + else: + return self.strings[SID - cffStandardStringCount] + + def getSID(self, s): + if not hasattr(self, "stringMapping"): + self.buildStringMapping() + s = tostr(s, encoding="latin1") + if s in cffStandardStringMapping: + SID = cffStandardStringMapping[s] + elif s in self.stringMapping: + SID = self.stringMapping[s] + else: + SID = len(self.strings) + cffStandardStringCount + self.strings.append(s) + self.stringMapping[s] = SID + return SID + + def getStrings(self): + return self.strings + + def buildStringMapping(self): + self.stringMapping = {} + for index in range(len(self.strings)): + self.stringMapping[self.strings[index]] = index + cffStandardStringCount + + +# The 391 Standard Strings as used in the CFF format. +# from Adobe Technical None #5176, version 1.0, 18 March 1998 + +cffStandardStrings = [ + ".notdef", + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quoteright", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "quoteleft", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + "exclamdown", + "cent", + "sterling", + "fraction", + "yen", + "florin", + "section", + "currency", + "quotesingle", + "quotedblleft", + "guillemotleft", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + "endash", + "dagger", + "daggerdbl", + "periodcentered", + "paragraph", + "bullet", + "quotesinglbase", + "quotedblbase", + "quotedblright", + "guillemotright", + "ellipsis", + "perthousand", + "questiondown", + "grave", + "acute", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "dieresis", + "ring", + "cedilla", + "hungarumlaut", + "ogonek", + "caron", + "emdash", + "AE", + "ordfeminine", + "Lslash", + "Oslash", + "OE", + "ordmasculine", + "ae", + "dotlessi", + "lslash", + "oslash", + "oe", + "germandbls", + "onesuperior", + "logicalnot", + "mu", + "trademark", + "Eth", + "onehalf", + "plusminus", + "Thorn", + "onequarter", + "divide", + "brokenbar", + "degree", + "thorn", + "threequarters", + "twosuperior", + "registered", + "minus", + "eth", + "multiply", + "threesuperior", + "copyright", + "Aacute", + "Acircumflex", + "Adieresis", + "Agrave", + "Aring", + "Atilde", + "Ccedilla", + "Eacute", + "Ecircumflex", + "Edieresis", + "Egrave", + "Iacute", + "Icircumflex", + "Idieresis", + "Igrave", + "Ntilde", + "Oacute", + "Ocircumflex", + "Odieresis", + "Ograve", + "Otilde", + "Scaron", + "Uacute", + "Ucircumflex", + "Udieresis", + "Ugrave", + "Yacute", + "Ydieresis", + "Zcaron", + "aacute", + "acircumflex", + "adieresis", + "agrave", + "aring", + "atilde", + "ccedilla", + "eacute", + "ecircumflex", + "edieresis", + "egrave", + "iacute", + "icircumflex", + "idieresis", + "igrave", + "ntilde", + "oacute", + "ocircumflex", + "odieresis", + "ograve", + "otilde", + "scaron", + "uacute", + "ucircumflex", + "udieresis", + "ugrave", + "yacute", + "ydieresis", + "zcaron", + "exclamsmall", + "Hungarumlautsmall", + "dollaroldstyle", + "dollarsuperior", + "ampersandsmall", + "Acutesmall", + "parenleftsuperior", + "parenrightsuperior", + "twodotenleader", + "onedotenleader", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "commasuperior", + "threequartersemdash", + "periodsuperior", + "questionsmall", + "asuperior", + "bsuperior", + "centsuperior", + "dsuperior", + "esuperior", + "isuperior", + "lsuperior", + "msuperior", + "nsuperior", + "osuperior", + "rsuperior", + "ssuperior", + "tsuperior", + "ff", + "ffi", + "ffl", + "parenleftinferior", + "parenrightinferior", + "Circumflexsmall", + "hyphensuperior", + "Gravesmall", + "Asmall", + "Bsmall", + "Csmall", + "Dsmall", + "Esmall", + "Fsmall", + "Gsmall", + "Hsmall", + "Ismall", + "Jsmall", + "Ksmall", + "Lsmall", + "Msmall", + "Nsmall", + "Osmall", + "Psmall", + "Qsmall", + "Rsmall", + "Ssmall", + "Tsmall", + "Usmall", + "Vsmall", + "Wsmall", + "Xsmall", + "Ysmall", + "Zsmall", + "colonmonetary", + "onefitted", + "rupiah", + "Tildesmall", + "exclamdownsmall", + "centoldstyle", + "Lslashsmall", + "Scaronsmall", + "Zcaronsmall", + "Dieresissmall", + "Brevesmall", + "Caronsmall", + "Dotaccentsmall", + "Macronsmall", + "figuredash", + "hypheninferior", + "Ogoneksmall", + "Ringsmall", + "Cedillasmall", + "questiondownsmall", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + "zerosuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "eightsuperior", + "ninesuperior", + "zeroinferior", + "oneinferior", + "twoinferior", + "threeinferior", + "fourinferior", + "fiveinferior", + "sixinferior", + "seveninferior", + "eightinferior", + "nineinferior", + "centinferior", + "dollarinferior", + "periodinferior", + "commainferior", + "Agravesmall", + "Aacutesmall", + "Acircumflexsmall", + "Atildesmall", + "Adieresissmall", + "Aringsmall", + "AEsmall", + "Ccedillasmall", + "Egravesmall", + "Eacutesmall", + "Ecircumflexsmall", + "Edieresissmall", + "Igravesmall", + "Iacutesmall", + "Icircumflexsmall", + "Idieresissmall", + "Ethsmall", + "Ntildesmall", + "Ogravesmall", + "Oacutesmall", + "Ocircumflexsmall", + "Otildesmall", + "Odieresissmall", + "OEsmall", + "Oslashsmall", + "Ugravesmall", + "Uacutesmall", + "Ucircumflexsmall", + "Udieresissmall", + "Yacutesmall", + "Thornsmall", + "Ydieresissmall", + "001.000", + "001.001", + "001.002", + "001.003", + "Black", + "Bold", + "Book", + "Light", + "Medium", + "Regular", + "Roman", + "Semibold", +] + +cffStandardStringCount = 391 +assert len(cffStandardStrings) == cffStandardStringCount +# build reverse mapping +cffStandardStringMapping = {} +for _i in range(cffStandardStringCount): + cffStandardStringMapping[cffStandardStrings[_i]] = _i + +cffISOAdobeStrings = [ + ".notdef", + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quoteright", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "quoteleft", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + "exclamdown", + "cent", + "sterling", + "fraction", + "yen", + "florin", + "section", + "currency", + "quotesingle", + "quotedblleft", + "guillemotleft", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + "endash", + "dagger", + "daggerdbl", + "periodcentered", + "paragraph", + "bullet", + "quotesinglbase", + "quotedblbase", + "quotedblright", + "guillemotright", + "ellipsis", + "perthousand", + "questiondown", + "grave", + "acute", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "dieresis", + "ring", + "cedilla", + "hungarumlaut", + "ogonek", + "caron", + "emdash", + "AE", + "ordfeminine", + "Lslash", + "Oslash", + "OE", + "ordmasculine", + "ae", + "dotlessi", + "lslash", + "oslash", + "oe", + "germandbls", + "onesuperior", + "logicalnot", + "mu", + "trademark", + "Eth", + "onehalf", + "plusminus", + "Thorn", + "onequarter", + "divide", + "brokenbar", + "degree", + "thorn", + "threequarters", + "twosuperior", + "registered", + "minus", + "eth", + "multiply", + "threesuperior", + "copyright", + "Aacute", + "Acircumflex", + "Adieresis", + "Agrave", + "Aring", + "Atilde", + "Ccedilla", + "Eacute", + "Ecircumflex", + "Edieresis", + "Egrave", + "Iacute", + "Icircumflex", + "Idieresis", + "Igrave", + "Ntilde", + "Oacute", + "Ocircumflex", + "Odieresis", + "Ograve", + "Otilde", + "Scaron", + "Uacute", + "Ucircumflex", + "Udieresis", + "Ugrave", + "Yacute", + "Ydieresis", + "Zcaron", + "aacute", + "acircumflex", + "adieresis", + "agrave", + "aring", + "atilde", + "ccedilla", + "eacute", + "ecircumflex", + "edieresis", + "egrave", + "iacute", + "icircumflex", + "idieresis", + "igrave", + "ntilde", + "oacute", + "ocircumflex", + "odieresis", + "ograve", + "otilde", + "scaron", + "uacute", + "ucircumflex", + "udieresis", + "ugrave", + "yacute", + "ydieresis", + "zcaron", +] + +cffISOAdobeStringCount = 229 +assert len(cffISOAdobeStrings) == cffISOAdobeStringCount + +cffIExpertStrings = [ + ".notdef", + "space", + "exclamsmall", + "Hungarumlautsmall", + "dollaroldstyle", + "dollarsuperior", + "ampersandsmall", + "Acutesmall", + "parenleftsuperior", + "parenrightsuperior", + "twodotenleader", + "onedotenleader", + "comma", + "hyphen", + "period", + "fraction", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "colon", + "semicolon", + "commasuperior", + "threequartersemdash", + "periodsuperior", + "questionsmall", + "asuperior", + "bsuperior", + "centsuperior", + "dsuperior", + "esuperior", + "isuperior", + "lsuperior", + "msuperior", + "nsuperior", + "osuperior", + "rsuperior", + "ssuperior", + "tsuperior", + "ff", + "fi", + "fl", + "ffi", + "ffl", + "parenleftinferior", + "parenrightinferior", + "Circumflexsmall", + "hyphensuperior", + "Gravesmall", + "Asmall", + "Bsmall", + "Csmall", + "Dsmall", + "Esmall", + "Fsmall", + "Gsmall", + "Hsmall", + "Ismall", + "Jsmall", + "Ksmall", + "Lsmall", + "Msmall", + "Nsmall", + "Osmall", + "Psmall", + "Qsmall", + "Rsmall", + "Ssmall", + "Tsmall", + "Usmall", + "Vsmall", + "Wsmall", + "Xsmall", + "Ysmall", + "Zsmall", + "colonmonetary", + "onefitted", + "rupiah", + "Tildesmall", + "exclamdownsmall", + "centoldstyle", + "Lslashsmall", + "Scaronsmall", + "Zcaronsmall", + "Dieresissmall", + "Brevesmall", + "Caronsmall", + "Dotaccentsmall", + "Macronsmall", + "figuredash", + "hypheninferior", + "Ogoneksmall", + "Ringsmall", + "Cedillasmall", + "onequarter", + "onehalf", + "threequarters", + "questiondownsmall", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + "zerosuperior", + "onesuperior", + "twosuperior", + "threesuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "eightsuperior", + "ninesuperior", + "zeroinferior", + "oneinferior", + "twoinferior", + "threeinferior", + "fourinferior", + "fiveinferior", + "sixinferior", + "seveninferior", + "eightinferior", + "nineinferior", + "centinferior", + "dollarinferior", + "periodinferior", + "commainferior", + "Agravesmall", + "Aacutesmall", + "Acircumflexsmall", + "Atildesmall", + "Adieresissmall", + "Aringsmall", + "AEsmall", + "Ccedillasmall", + "Egravesmall", + "Eacutesmall", + "Ecircumflexsmall", + "Edieresissmall", + "Igravesmall", + "Iacutesmall", + "Icircumflexsmall", + "Idieresissmall", + "Ethsmall", + "Ntildesmall", + "Ogravesmall", + "Oacutesmall", + "Ocircumflexsmall", + "Otildesmall", + "Odieresissmall", + "OEsmall", + "Oslashsmall", + "Ugravesmall", + "Uacutesmall", + "Ucircumflexsmall", + "Udieresissmall", + "Yacutesmall", + "Thornsmall", + "Ydieresissmall", +] + +cffExpertStringCount = 166 +assert len(cffIExpertStrings) == cffExpertStringCount + +cffExpertSubsetStrings = [ + ".notdef", + "space", + "dollaroldstyle", + "dollarsuperior", + "parenleftsuperior", + "parenrightsuperior", + "twodotenleader", + "onedotenleader", + "comma", + "hyphen", + "period", + "fraction", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "colon", + "semicolon", + "commasuperior", + "threequartersemdash", + "periodsuperior", + "asuperior", + "bsuperior", + "centsuperior", + "dsuperior", + "esuperior", + "isuperior", + "lsuperior", + "msuperior", + "nsuperior", + "osuperior", + "rsuperior", + "ssuperior", + "tsuperior", + "ff", + "fi", + "fl", + "ffi", + "ffl", + "parenleftinferior", + "parenrightinferior", + "hyphensuperior", + "colonmonetary", + "onefitted", + "rupiah", + "centoldstyle", + "figuredash", + "hypheninferior", + "onequarter", + "onehalf", + "threequarters", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + "zerosuperior", + "onesuperior", + "twosuperior", + "threesuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "eightsuperior", + "ninesuperior", + "zeroinferior", + "oneinferior", + "twoinferior", + "threeinferior", + "fourinferior", + "fiveinferior", + "sixinferior", + "seveninferior", + "eightinferior", + "nineinferior", + "centinferior", + "dollarinferior", + "periodinferior", + "commainferior", +] + +cffExpertSubsetStringCount = 87 +assert len(cffExpertSubsetStrings) == cffExpertSubsetStringCount diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cffLib/specializer.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cffLib/specializer.py new file mode 100644 index 0000000..f3645bf --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cffLib/specializer.py @@ -0,0 +1,849 @@ +# -*- coding: utf-8 -*- + +"""T2CharString operator specializer and generalizer. + +PostScript glyph drawing operations can be expressed in multiple different +ways. For example, as well as the ``lineto`` operator, there is also a +``hlineto`` operator which draws a horizontal line, removing the need to +specify a ``dx`` coordinate, and a ``vlineto`` operator which draws a +vertical line, removing the need to specify a ``dy`` coordinate. As well +as decompiling :class:`fontTools.misc.psCharStrings.T2CharString` objects +into lists of operations, this module allows for conversion between general +and specific forms of the operation. + +""" + +from fontTools.cffLib import maxStackLimit + + +def stringToProgram(string): + if isinstance(string, str): + string = string.split() + program = [] + for token in string: + try: + token = int(token) + except ValueError: + try: + token = float(token) + except ValueError: + pass + program.append(token) + return program + + +def programToString(program): + return " ".join(str(x) for x in program) + + +def programToCommands(program, getNumRegions=None): + """Takes a T2CharString program list and returns list of commands. + Each command is a two-tuple of commandname,arg-list. The commandname might + be empty string if no commandname shall be emitted (used for glyph width, + hintmask/cntrmask argument, as well as stray arguments at the end of the + program (¯\_(ツ)_/¯). + 'getNumRegions' may be None, or a callable object. It must return the + number of regions. 'getNumRegions' takes a single argument, vsindex. If + the vsindex argument is None, getNumRegions returns the default number + of regions for the charstring, else it returns the numRegions for + the vsindex. + The Charstring may or may not start with a width value. If the first + non-blend operator has an odd number of arguments, then the first argument is + a width, and is popped off. This is complicated with blend operators, as + there may be more than one before the first hint or moveto operator, and each + one reduces several arguments to just one list argument. We have to sum the + number of arguments that are not part of the blend arguments, and all the + 'numBlends' values. We could instead have said that by definition, if there + is a blend operator, there is no width value, since CFF2 Charstrings don't + have width values. I discussed this with Behdad, and we are allowing for an + initial width value in this case because developers may assemble a CFF2 + charstring from CFF Charstrings, which could have width values. + """ + + seenWidthOp = False + vsIndex = None + lenBlendStack = 0 + lastBlendIndex = 0 + commands = [] + stack = [] + it = iter(program) + + for token in it: + if not isinstance(token, str): + stack.append(token) + continue + + if token == "blend": + assert getNumRegions is not None + numSourceFonts = 1 + getNumRegions(vsIndex) + # replace the blend op args on the stack with a single list + # containing all the blend op args. + numBlends = stack[-1] + numBlendArgs = numBlends * numSourceFonts + 1 + # replace first blend op by a list of the blend ops. + stack[-numBlendArgs:] = [stack[-numBlendArgs:]] + lenBlendStack += numBlends + len(stack) - 1 + lastBlendIndex = len(stack) + # if a blend op exists, this is or will be a CFF2 charstring. + continue + + elif token == "vsindex": + vsIndex = stack[-1] + assert type(vsIndex) is int + + elif (not seenWidthOp) and token in { + "hstem", + "hstemhm", + "vstem", + "vstemhm", + "cntrmask", + "hintmask", + "hmoveto", + "vmoveto", + "rmoveto", + "endchar", + }: + seenWidthOp = True + parity = token in {"hmoveto", "vmoveto"} + if lenBlendStack: + # lenBlendStack has the number of args represented by the last blend + # arg and all the preceding args. We need to now add the number of + # args following the last blend arg. + numArgs = lenBlendStack + len(stack[lastBlendIndex:]) + else: + numArgs = len(stack) + if numArgs and (numArgs % 2) ^ parity: + width = stack.pop(0) + commands.append(("", [width])) + + if token in {"hintmask", "cntrmask"}: + if stack: + commands.append(("", stack)) + commands.append((token, [])) + commands.append(("", [next(it)])) + else: + commands.append((token, stack)) + stack = [] + if stack: + commands.append(("", stack)) + return commands + + +def _flattenBlendArgs(args): + token_list = [] + for arg in args: + if isinstance(arg, list): + token_list.extend(arg) + token_list.append("blend") + else: + token_list.append(arg) + return token_list + + +def commandsToProgram(commands): + """Takes a commands list as returned by programToCommands() and converts + it back to a T2CharString program list.""" + program = [] + for op, args in commands: + if any(isinstance(arg, list) for arg in args): + args = _flattenBlendArgs(args) + program.extend(args) + if op: + program.append(op) + return program + + +def _everyN(el, n): + """Group the list el into groups of size n""" + if len(el) % n != 0: + raise ValueError(el) + for i in range(0, len(el), n): + yield el[i : i + n] + + +class _GeneralizerDecombinerCommandsMap(object): + @staticmethod + def rmoveto(args): + if len(args) != 2: + raise ValueError(args) + yield ("rmoveto", args) + + @staticmethod + def hmoveto(args): + if len(args) != 1: + raise ValueError(args) + yield ("rmoveto", [args[0], 0]) + + @staticmethod + def vmoveto(args): + if len(args) != 1: + raise ValueError(args) + yield ("rmoveto", [0, args[0]]) + + @staticmethod + def rlineto(args): + if not args: + raise ValueError(args) + for args in _everyN(args, 2): + yield ("rlineto", args) + + @staticmethod + def hlineto(args): + if not args: + raise ValueError(args) + it = iter(args) + try: + while True: + yield ("rlineto", [next(it), 0]) + yield ("rlineto", [0, next(it)]) + except StopIteration: + pass + + @staticmethod + def vlineto(args): + if not args: + raise ValueError(args) + it = iter(args) + try: + while True: + yield ("rlineto", [0, next(it)]) + yield ("rlineto", [next(it), 0]) + except StopIteration: + pass + + @staticmethod + def rrcurveto(args): + if not args: + raise ValueError(args) + for args in _everyN(args, 6): + yield ("rrcurveto", args) + + @staticmethod + def hhcurveto(args): + if len(args) < 4 or len(args) % 4 > 1: + raise ValueError(args) + if len(args) % 2 == 1: + yield ("rrcurveto", [args[1], args[0], args[2], args[3], args[4], 0]) + args = args[5:] + for args in _everyN(args, 4): + yield ("rrcurveto", [args[0], 0, args[1], args[2], args[3], 0]) + + @staticmethod + def vvcurveto(args): + if len(args) < 4 or len(args) % 4 > 1: + raise ValueError(args) + if len(args) % 2 == 1: + yield ("rrcurveto", [args[0], args[1], args[2], args[3], 0, args[4]]) + args = args[5:] + for args in _everyN(args, 4): + yield ("rrcurveto", [0, args[0], args[1], args[2], 0, args[3]]) + + @staticmethod + def hvcurveto(args): + if len(args) < 4 or len(args) % 8 not in {0, 1, 4, 5}: + raise ValueError(args) + last_args = None + if len(args) % 2 == 1: + lastStraight = len(args) % 8 == 5 + args, last_args = args[:-5], args[-5:] + it = _everyN(args, 4) + try: + while True: + args = next(it) + yield ("rrcurveto", [args[0], 0, args[1], args[2], 0, args[3]]) + args = next(it) + yield ("rrcurveto", [0, args[0], args[1], args[2], args[3], 0]) + except StopIteration: + pass + if last_args: + args = last_args + if lastStraight: + yield ("rrcurveto", [args[0], 0, args[1], args[2], args[4], args[3]]) + else: + yield ("rrcurveto", [0, args[0], args[1], args[2], args[3], args[4]]) + + @staticmethod + def vhcurveto(args): + if len(args) < 4 or len(args) % 8 not in {0, 1, 4, 5}: + raise ValueError(args) + last_args = None + if len(args) % 2 == 1: + lastStraight = len(args) % 8 == 5 + args, last_args = args[:-5], args[-5:] + it = _everyN(args, 4) + try: + while True: + args = next(it) + yield ("rrcurveto", [0, args[0], args[1], args[2], args[3], 0]) + args = next(it) + yield ("rrcurveto", [args[0], 0, args[1], args[2], 0, args[3]]) + except StopIteration: + pass + if last_args: + args = last_args + if lastStraight: + yield ("rrcurveto", [0, args[0], args[1], args[2], args[3], args[4]]) + else: + yield ("rrcurveto", [args[0], 0, args[1], args[2], args[4], args[3]]) + + @staticmethod + def rcurveline(args): + if len(args) < 8 or len(args) % 6 != 2: + raise ValueError(args) + args, last_args = args[:-2], args[-2:] + for args in _everyN(args, 6): + yield ("rrcurveto", args) + yield ("rlineto", last_args) + + @staticmethod + def rlinecurve(args): + if len(args) < 8 or len(args) % 2 != 0: + raise ValueError(args) + args, last_args = args[:-6], args[-6:] + for args in _everyN(args, 2): + yield ("rlineto", args) + yield ("rrcurveto", last_args) + + +def _convertBlendOpToArgs(blendList): + # args is list of blend op args. Since we are supporting + # recursive blend op calls, some of these args may also + # be a list of blend op args, and need to be converted before + # we convert the current list. + if any([isinstance(arg, list) for arg in blendList]): + args = [ + i + for e in blendList + for i in (_convertBlendOpToArgs(e) if isinstance(e, list) else [e]) + ] + else: + args = blendList + + # We now know that blendList contains a blend op argument list, even if + # some of the args are lists that each contain a blend op argument list. + # Convert from: + # [default font arg sequence x0,...,xn] + [delta tuple for x0] + ... + [delta tuple for xn] + # to: + # [ [x0] + [delta tuple for x0], + # ..., + # [xn] + [delta tuple for xn] ] + numBlends = args[-1] + # Can't use args.pop() when the args are being used in a nested list + # comprehension. See calling context + args = args[:-1] + + numRegions = len(args) // numBlends - 1 + if not (numBlends * (numRegions + 1) == len(args)): + raise ValueError(blendList) + + defaultArgs = [[arg] for arg in args[:numBlends]] + deltaArgs = args[numBlends:] + numDeltaValues = len(deltaArgs) + deltaList = [ + deltaArgs[i : i + numRegions] for i in range(0, numDeltaValues, numRegions) + ] + blend_args = [a + b + [1] for a, b in zip(defaultArgs, deltaList)] + return blend_args + + +def generalizeCommands(commands, ignoreErrors=False): + result = [] + mapping = _GeneralizerDecombinerCommandsMap + for op, args in commands: + # First, generalize any blend args in the arg list. + if any([isinstance(arg, list) for arg in args]): + try: + args = [ + n + for arg in args + for n in ( + _convertBlendOpToArgs(arg) if isinstance(arg, list) else [arg] + ) + ] + except ValueError: + if ignoreErrors: + # Store op as data, such that consumers of commands do not have to + # deal with incorrect number of arguments. + result.append(("", args)) + result.append(("", [op])) + else: + raise + + func = getattr(mapping, op, None) + if not func: + result.append((op, args)) + continue + try: + for command in func(args): + result.append(command) + except ValueError: + if ignoreErrors: + # Store op as data, such that consumers of commands do not have to + # deal with incorrect number of arguments. + result.append(("", args)) + result.append(("", [op])) + else: + raise + return result + + +def generalizeProgram(program, getNumRegions=None, **kwargs): + return commandsToProgram( + generalizeCommands(programToCommands(program, getNumRegions), **kwargs) + ) + + +def _categorizeVector(v): + """ + Takes X,Y vector v and returns one of r, h, v, or 0 depending on which + of X and/or Y are zero, plus tuple of nonzero ones. If both are zero, + it returns a single zero still. + + >>> _categorizeVector((0,0)) + ('0', (0,)) + >>> _categorizeVector((1,0)) + ('h', (1,)) + >>> _categorizeVector((0,2)) + ('v', (2,)) + >>> _categorizeVector((1,2)) + ('r', (1, 2)) + """ + if not v[0]: + if not v[1]: + return "0", v[:1] + else: + return "v", v[1:] + else: + if not v[1]: + return "h", v[:1] + else: + return "r", v + + +def _mergeCategories(a, b): + if a == "0": + return b + if b == "0": + return a + if a == b: + return a + return None + + +def _negateCategory(a): + if a == "h": + return "v" + if a == "v": + return "h" + assert a in "0r" + return a + + +def _convertToBlendCmds(args): + # return a list of blend commands, and + # the remaining non-blended args, if any. + num_args = len(args) + stack_use = 0 + new_args = [] + i = 0 + while i < num_args: + arg = args[i] + if not isinstance(arg, list): + new_args.append(arg) + i += 1 + stack_use += 1 + else: + prev_stack_use = stack_use + # The arg is a tuple of blend values. + # These are each (master 0,delta 1..delta n, 1) + # Combine as many successive tuples as we can, + # up to the max stack limit. + num_sources = len(arg) - 1 + blendlist = [arg] + i += 1 + stack_use += 1 + num_sources # 1 for the num_blends arg + while (i < num_args) and isinstance(args[i], list): + blendlist.append(args[i]) + i += 1 + stack_use += num_sources + if stack_use + num_sources > maxStackLimit: + # if we are here, max stack is the CFF2 max stack. + # I use the CFF2 max stack limit here rather than + # the 'maxstack' chosen by the client, as the default + # maxstack may have been used unintentionally. For all + # the other operators, this just produces a little less + # optimization, but here it puts a hard (and low) limit + # on the number of source fonts that can be used. + break + # blendList now contains as many single blend tuples as can be + # combined without exceeding the CFF2 stack limit. + num_blends = len(blendlist) + # append the 'num_blends' default font values + blend_args = [] + for arg in blendlist: + blend_args.append(arg[0]) + for arg in blendlist: + assert arg[-1] == 1 + blend_args.extend(arg[1:-1]) + blend_args.append(num_blends) + new_args.append(blend_args) + stack_use = prev_stack_use + num_blends + + return new_args + + +def _addArgs(a, b): + if isinstance(b, list): + if isinstance(a, list): + if len(a) != len(b) or a[-1] != b[-1]: + raise ValueError() + return [_addArgs(va, vb) for va, vb in zip(a[:-1], b[:-1])] + [a[-1]] + else: + a, b = b, a + if isinstance(a, list): + assert a[-1] == 1 + return [_addArgs(a[0], b)] + a[1:] + return a + b + + +def specializeCommands( + commands, + ignoreErrors=False, + generalizeFirst=True, + preserveTopology=False, + maxstack=48, +): + # We perform several rounds of optimizations. They are carefully ordered and are: + # + # 0. Generalize commands. + # This ensures that they are in our expected simple form, with each line/curve only + # having arguments for one segment, and using the generic form (rlineto/rrcurveto). + # If caller is sure the input is in this form, they can turn off generalization to + # save time. + # + # 1. Combine successive rmoveto operations. + # + # 2. Specialize rmoveto/rlineto/rrcurveto operators into horizontal/vertical variants. + # We specialize into some, made-up, variants as well, which simplifies following + # passes. + # + # 3. Merge or delete redundant operations, to the extent requested. + # OpenType spec declares point numbers in CFF undefined. As such, we happily + # change topology. If client relies on point numbers (in GPOS anchors, or for + # hinting purposes(what?)) they can turn this off. + # + # 4. Peephole optimization to revert back some of the h/v variants back into their + # original "relative" operator (rline/rrcurveto) if that saves a byte. + # + # 5. Combine adjacent operators when possible, minding not to go over max stack size. + # + # 6. Resolve any remaining made-up operators into real operators. + # + # I have convinced myself that this produces optimal bytecode (except for, possibly + # one byte each time maxstack size prohibits combining.) YMMV, but you'd be wrong. :-) + # A dynamic-programming approach can do the same but would be significantly slower. + # + # 7. For any args which are blend lists, convert them to a blend command. + + # 0. Generalize commands. + if generalizeFirst: + commands = generalizeCommands(commands, ignoreErrors=ignoreErrors) + else: + commands = list(commands) # Make copy since we modify in-place later. + + # 1. Combine successive rmoveto operations. + for i in range(len(commands) - 1, 0, -1): + if "rmoveto" == commands[i][0] == commands[i - 1][0]: + v1, v2 = commands[i - 1][1], commands[i][1] + commands[i - 1] = ("rmoveto", [v1[0] + v2[0], v1[1] + v2[1]]) + del commands[i] + + # 2. Specialize rmoveto/rlineto/rrcurveto operators into horizontal/vertical variants. + # + # We, in fact, specialize into more, made-up, variants that special-case when both + # X and Y components are zero. This simplifies the following optimization passes. + # This case is rare, but OCD does not let me skip it. + # + # After this round, we will have four variants that use the following mnemonics: + # + # - 'r' for relative, ie. non-zero X and non-zero Y, + # - 'h' for horizontal, ie. zero X and non-zero Y, + # - 'v' for vertical, ie. non-zero X and zero Y, + # - '0' for zeros, ie. zero X and zero Y. + # + # The '0' pseudo-operators are not part of the spec, but help simplify the following + # optimization rounds. We resolve them at the end. So, after this, we will have four + # moveto and four lineto variants: + # + # - 0moveto, 0lineto + # - hmoveto, hlineto + # - vmoveto, vlineto + # - rmoveto, rlineto + # + # and sixteen curveto variants. For example, a '0hcurveto' operator means a curve + # dx0,dy0,dx1,dy1,dx2,dy2,dx3,dy3 where dx0, dx1, and dy3 are zero but not dx3. + # An 'rvcurveto' means dx3 is zero but not dx0,dy0,dy3. + # + # There are nine different variants of curves without the '0'. Those nine map exactly + # to the existing curve variants in the spec: rrcurveto, and the four variants hhcurveto, + # vvcurveto, hvcurveto, and vhcurveto each cover two cases, one with an odd number of + # arguments and one without. Eg. an hhcurveto with an extra argument (odd number of + # arguments) is in fact an rhcurveto. The operators in the spec are designed such that + # all four of rhcurveto, rvcurveto, hrcurveto, and vrcurveto are encodable for one curve. + # + # Of the curve types with '0', the 00curveto is equivalent to a lineto variant. The rest + # of the curve types with a 0 need to be encoded as a h or v variant. Ie. a '0' can be + # thought of a "don't care" and can be used as either an 'h' or a 'v'. As such, we always + # encode a number 0 as argument when we use a '0' variant. Later on, we can just substitute + # the '0' with either 'h' or 'v' and it works. + # + # When we get to curve splines however, things become more complicated... XXX finish this. + # There's one more complexity with splines. If one side of the spline is not horizontal or + # vertical (or zero), ie. if it's 'r', then it limits which spline types we can encode. + # Only hhcurveto and vvcurveto operators can encode a spline starting with 'r', and + # only hvcurveto and vhcurveto operators can encode a spline ending with 'r'. + # This limits our merge opportunities later. + # + for i in range(len(commands)): + op, args = commands[i] + + if op in {"rmoveto", "rlineto"}: + c, args = _categorizeVector(args) + commands[i] = c + op[1:], args + continue + + if op == "rrcurveto": + c1, args1 = _categorizeVector(args[:2]) + c2, args2 = _categorizeVector(args[-2:]) + commands[i] = c1 + c2 + "curveto", args1 + args[2:4] + args2 + continue + + # 3. Merge or delete redundant operations, to the extent requested. + # + # TODO + # A 0moveto that comes before all other path operations can be removed. + # though I find conflicting evidence for this. + # + # TODO + # "If hstem and vstem hints are both declared at the beginning of a + # CharString, and this sequence is followed directly by the hintmask or + # cntrmask operators, then the vstem hint operator (or, if applicable, + # the vstemhm operator) need not be included." + # + # "The sequence and form of a CFF2 CharString program may be represented as: + # {hs* vs* cm* hm* mt subpath}? {mt subpath}*" + # + # https://www.microsoft.com/typography/otspec/cff2charstr.htm#section3.1 + # + # For Type2 CharStrings the sequence is: + # w? {hs* vs* cm* hm* mt subpath}? {mt subpath}* endchar" + + # Some other redundancies change topology (point numbers). + if not preserveTopology: + for i in range(len(commands) - 1, -1, -1): + op, args = commands[i] + + # A 00curveto is demoted to a (specialized) lineto. + if op == "00curveto": + assert len(args) == 4 + c, args = _categorizeVector(args[1:3]) + op = c + "lineto" + commands[i] = op, args + # and then... + + # A 0lineto can be deleted. + if op == "0lineto": + del commands[i] + continue + + # Merge adjacent hlineto's and vlineto's. + # In CFF2 charstrings from variable fonts, each + # arg item may be a list of blendable values, one from + # each source font. + if i and op in {"hlineto", "vlineto"} and (op == commands[i - 1][0]): + _, other_args = commands[i - 1] + assert len(args) == 1 and len(other_args) == 1 + try: + new_args = [_addArgs(args[0], other_args[0])] + except ValueError: + continue + commands[i - 1] = (op, new_args) + del commands[i] + continue + + # 4. Peephole optimization to revert back some of the h/v variants back into their + # original "relative" operator (rline/rrcurveto) if that saves a byte. + for i in range(1, len(commands) - 1): + op, args = commands[i] + prv, nxt = commands[i - 1][0], commands[i + 1][0] + + if op in {"0lineto", "hlineto", "vlineto"} and prv == nxt == "rlineto": + assert len(args) == 1 + args = [0, args[0]] if op[0] == "v" else [args[0], 0] + commands[i] = ("rlineto", args) + continue + + if op[2:] == "curveto" and len(args) == 5 and prv == nxt == "rrcurveto": + assert (op[0] == "r") ^ (op[1] == "r") + if op[0] == "v": + pos = 0 + elif op[0] != "r": + pos = 1 + elif op[1] == "v": + pos = 4 + else: + pos = 5 + # Insert, while maintaining the type of args (can be tuple or list). + args = args[:pos] + type(args)((0,)) + args[pos:] + commands[i] = ("rrcurveto", args) + continue + + # 5. Combine adjacent operators when possible, minding not to go over max stack size. + for i in range(len(commands) - 1, 0, -1): + op1, args1 = commands[i - 1] + op2, args2 = commands[i] + new_op = None + + # Merge logic... + if {op1, op2} <= {"rlineto", "rrcurveto"}: + if op1 == op2: + new_op = op1 + else: + if op2 == "rrcurveto" and len(args2) == 6: + new_op = "rlinecurve" + elif len(args2) == 2: + new_op = "rcurveline" + + elif (op1, op2) in {("rlineto", "rlinecurve"), ("rrcurveto", "rcurveline")}: + new_op = op2 + + elif {op1, op2} == {"vlineto", "hlineto"}: + new_op = op1 + + elif "curveto" == op1[2:] == op2[2:]: + d0, d1 = op1[:2] + d2, d3 = op2[:2] + + if d1 == "r" or d2 == "r" or d0 == d3 == "r": + continue + + d = _mergeCategories(d1, d2) + if d is None: + continue + if d0 == "r": + d = _mergeCategories(d, d3) + if d is None: + continue + new_op = "r" + d + "curveto" + elif d3 == "r": + d0 = _mergeCategories(d0, _negateCategory(d)) + if d0 is None: + continue + new_op = d0 + "r" + "curveto" + else: + d0 = _mergeCategories(d0, d3) + if d0 is None: + continue + new_op = d0 + d + "curveto" + + # Make sure the stack depth does not exceed (maxstack - 1), so + # that subroutinizer can insert subroutine calls at any point. + if new_op and len(args1) + len(args2) < maxstack: + commands[i - 1] = (new_op, args1 + args2) + del commands[i] + + # 6. Resolve any remaining made-up operators into real operators. + for i in range(len(commands)): + op, args = commands[i] + + if op in {"0moveto", "0lineto"}: + commands[i] = "h" + op[1:], args + continue + + if op[2:] == "curveto" and op[:2] not in {"rr", "hh", "vv", "vh", "hv"}: + op0, op1 = op[:2] + if (op0 == "r") ^ (op1 == "r"): + assert len(args) % 2 == 1 + if op0 == "0": + op0 = "h" + if op1 == "0": + op1 = "h" + if op0 == "r": + op0 = op1 + if op1 == "r": + op1 = _negateCategory(op0) + assert {op0, op1} <= {"h", "v"}, (op0, op1) + + if len(args) % 2: + if op0 != op1: # vhcurveto / hvcurveto + if (op0 == "h") ^ (len(args) % 8 == 1): + # Swap last two args order + args = args[:-2] + args[-1:] + args[-2:-1] + else: # hhcurveto / vvcurveto + if op0 == "h": # hhcurveto + # Swap first two args order + args = args[1:2] + args[:1] + args[2:] + + commands[i] = op0 + op1 + "curveto", args + continue + + # 7. For any series of args which are blend lists, convert the series to a single blend arg. + for i in range(len(commands)): + op, args = commands[i] + if any(isinstance(arg, list) for arg in args): + commands[i] = op, _convertToBlendCmds(args) + + return commands + + +def specializeProgram(program, getNumRegions=None, **kwargs): + return commandsToProgram( + specializeCommands(programToCommands(program, getNumRegions), **kwargs) + ) + + +if __name__ == "__main__": + import sys + + if len(sys.argv) == 1: + import doctest + + sys.exit(doctest.testmod().failed) + + import argparse + + parser = argparse.ArgumentParser( + "fonttools cffLib.specialer", + description="CFF CharString generalizer/specializer", + ) + parser.add_argument("program", metavar="command", nargs="*", help="Commands.") + parser.add_argument( + "--num-regions", + metavar="NumRegions", + nargs="*", + default=None, + help="Number of variable-font regions for blend opertaions.", + ) + + options = parser.parse_args(sys.argv[1:]) + + getNumRegions = ( + None + if options.num_regions is None + else lambda vsIndex: int(options.num_regions[0 if vsIndex is None else vsIndex]) + ) + + program = stringToProgram(options.program) + print("Program:") + print(programToString(program)) + commands = programToCommands(program, getNumRegions) + print("Commands:") + print(commands) + program2 = commandsToProgram(commands) + print("Program from commands:") + print(programToString(program2)) + assert program == program2 + print("Generalized program:") + print(programToString(generalizeProgram(program, getNumRegions))) + print("Specialized program:") + print(programToString(specializeProgram(program, getNumRegions))) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cffLib/width.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cffLib/width.py new file mode 100644 index 0000000..0ba3ed3 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cffLib/width.py @@ -0,0 +1,207 @@ +# -*- coding: utf-8 -*- + +"""T2CharString glyph width optimizer. + +CFF glyphs whose width equals the CFF Private dictionary's ``defaultWidthX`` +value do not need to specify their width in their charstring, saving bytes. +This module determines the optimum ``defaultWidthX`` and ``nominalWidthX`` +values for a font, when provided with a list of glyph widths.""" + +from fontTools.ttLib import TTFont +from collections import defaultdict +from operator import add +from functools import reduce + + +class missingdict(dict): + def __init__(self, missing_func): + self.missing_func = missing_func + + def __missing__(self, v): + return self.missing_func(v) + + +def cumSum(f, op=add, start=0, decreasing=False): + keys = sorted(f.keys()) + minx, maxx = keys[0], keys[-1] + + total = reduce(op, f.values(), start) + + if decreasing: + missing = lambda x: start if x > maxx else total + domain = range(maxx, minx - 1, -1) + else: + missing = lambda x: start if x < minx else total + domain = range(minx, maxx + 1) + + out = missingdict(missing) + + v = start + for x in domain: + v = op(v, f[x]) + out[x] = v + + return out + + +def byteCost(widths, default, nominal): + if not hasattr(widths, "items"): + d = defaultdict(int) + for w in widths: + d[w] += 1 + widths = d + + cost = 0 + for w, freq in widths.items(): + if w == default: + continue + diff = abs(w - nominal) + if diff <= 107: + cost += freq + elif diff <= 1131: + cost += freq * 2 + else: + cost += freq * 5 + return cost + + +def optimizeWidthsBruteforce(widths): + """Bruteforce version. Veeeeeeeeeeeeeeeeery slow. Only works for smallests of fonts.""" + + d = defaultdict(int) + for w in widths: + d[w] += 1 + + # Maximum number of bytes using default can possibly save + maxDefaultAdvantage = 5 * max(d.values()) + + minw, maxw = min(widths), max(widths) + domain = list(range(minw, maxw + 1)) + + bestCostWithoutDefault = min(byteCost(widths, None, nominal) for nominal in domain) + + bestCost = len(widths) * 5 + 1 + for nominal in domain: + if byteCost(widths, None, nominal) > bestCost + maxDefaultAdvantage: + continue + for default in domain: + cost = byteCost(widths, default, nominal) + if cost < bestCost: + bestCost = cost + bestDefault = default + bestNominal = nominal + + return bestDefault, bestNominal + + +def optimizeWidths(widths): + """Given a list of glyph widths, or dictionary mapping glyph width to number of + glyphs having that, returns a tuple of best CFF default and nominal glyph widths. + + This algorithm is linear in UPEM+numGlyphs.""" + + if not hasattr(widths, "items"): + d = defaultdict(int) + for w in widths: + d[w] += 1 + widths = d + + keys = sorted(widths.keys()) + minw, maxw = keys[0], keys[-1] + domain = list(range(minw, maxw + 1)) + + # Cumulative sum/max forward/backward. + cumFrqU = cumSum(widths, op=add) + cumMaxU = cumSum(widths, op=max) + cumFrqD = cumSum(widths, op=add, decreasing=True) + cumMaxD = cumSum(widths, op=max, decreasing=True) + + # Cost per nominal choice, without default consideration. + nomnCostU = missingdict( + lambda x: cumFrqU[x] + cumFrqU[x - 108] + cumFrqU[x - 1132] * 3 + ) + nomnCostD = missingdict( + lambda x: cumFrqD[x] + cumFrqD[x + 108] + cumFrqD[x + 1132] * 3 + ) + nomnCost = missingdict(lambda x: nomnCostU[x] + nomnCostD[x] - widths[x]) + + # Cost-saving per nominal choice, by best default choice. + dfltCostU = missingdict( + lambda x: max(cumMaxU[x], cumMaxU[x - 108] * 2, cumMaxU[x - 1132] * 5) + ) + dfltCostD = missingdict( + lambda x: max(cumMaxD[x], cumMaxD[x + 108] * 2, cumMaxD[x + 1132] * 5) + ) + dfltCost = missingdict(lambda x: max(dfltCostU[x], dfltCostD[x])) + + # Combined cost per nominal choice. + bestCost = missingdict(lambda x: nomnCost[x] - dfltCost[x]) + + # Best nominal. + nominal = min(domain, key=lambda x: bestCost[x]) + + # Work back the best default. + bestC = bestCost[nominal] + dfltC = nomnCost[nominal] - bestCost[nominal] + ends = [] + if dfltC == dfltCostU[nominal]: + starts = [nominal, nominal - 108, nominal - 1132] + for start in starts: + while cumMaxU[start] and cumMaxU[start] == cumMaxU[start - 1]: + start -= 1 + ends.append(start) + else: + starts = [nominal, nominal + 108, nominal + 1132] + for start in starts: + while cumMaxD[start] and cumMaxD[start] == cumMaxD[start + 1]: + start += 1 + ends.append(start) + default = min(ends, key=lambda default: byteCost(widths, default, nominal)) + + return default, nominal + + +def main(args=None): + """Calculate optimum defaultWidthX/nominalWidthX values""" + + import argparse + + parser = argparse.ArgumentParser( + "fonttools cffLib.width", + description=main.__doc__, + ) + parser.add_argument( + "inputs", metavar="FILE", type=str, nargs="+", help="Input TTF files" + ) + parser.add_argument( + "-b", + "--brute-force", + dest="brute", + action="store_true", + help="Use brute-force approach (VERY slow)", + ) + + args = parser.parse_args(args) + + for fontfile in args.inputs: + font = TTFont(fontfile) + hmtx = font["hmtx"] + widths = [m[0] for m in hmtx.metrics.values()] + if args.brute: + default, nominal = optimizeWidthsBruteforce(widths) + else: + default, nominal = optimizeWidths(widths) + print( + "glyphs=%d default=%d nominal=%d byteCost=%d" + % (len(widths), default, nominal, byteCost(widths, default, nominal)) + ) + + +if __name__ == "__main__": + import sys + + if len(sys.argv) == 1: + import doctest + + sys.exit(doctest.testmod().failed) + main() diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/__init__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/builder.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/builder.py new file mode 100644 index 0000000..442bc20 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/builder.py @@ -0,0 +1,659 @@ +""" +colorLib.builder: Build COLR/CPAL tables from scratch + +""" +import collections +import copy +import enum +from functools import partial +from math import ceil, log +from typing import ( + Any, + Dict, + Generator, + Iterable, + List, + Mapping, + Optional, + Sequence, + Tuple, + Type, + TypeVar, + Union, +) +from fontTools.misc.arrayTools import intRect +from fontTools.misc.fixedTools import fixedToFloat +from fontTools.misc.treeTools import build_n_ary_tree +from fontTools.ttLib.tables import C_O_L_R_ +from fontTools.ttLib.tables import C_P_A_L_ +from fontTools.ttLib.tables import _n_a_m_e +from fontTools.ttLib.tables import otTables as ot +from fontTools.ttLib.tables.otTables import ExtendMode, CompositeMode +from .errors import ColorLibError +from .geometry import round_start_circle_stable_containment +from .table_builder import BuildCallback, TableBuilder + + +# TODO move type aliases to colorLib.types? +T = TypeVar("T") +_Kwargs = Mapping[str, Any] +_PaintInput = Union[int, _Kwargs, ot.Paint, Tuple[str, "_PaintInput"]] +_PaintInputList = Sequence[_PaintInput] +_ColorGlyphsDict = Dict[str, Union[_PaintInputList, _PaintInput]] +_ColorGlyphsV0Dict = Dict[str, Sequence[Tuple[str, int]]] +_ClipBoxInput = Union[ + Tuple[int, int, int, int, int], # format 1, variable + Tuple[int, int, int, int], # format 0, non-variable + ot.ClipBox, +] + + +MAX_PAINT_COLR_LAYER_COUNT = 255 +_DEFAULT_ALPHA = 1.0 +_MAX_REUSE_LEN = 32 + + +def _beforeBuildPaintRadialGradient(paint, source): + x0 = source["x0"] + y0 = source["y0"] + r0 = source["r0"] + x1 = source["x1"] + y1 = source["y1"] + r1 = source["r1"] + + # TODO apparently no builder_test confirms this works (?) + + # avoid abrupt change after rounding when c0 is near c1's perimeter + c = round_start_circle_stable_containment((x0, y0), r0, (x1, y1), r1) + x0, y0 = c.centre + r0 = c.radius + + # update source to ensure paint is built with corrected values + source["x0"] = x0 + source["y0"] = y0 + source["r0"] = r0 + source["x1"] = x1 + source["y1"] = y1 + source["r1"] = r1 + + return paint, source + + +def _defaultColorStop(): + colorStop = ot.ColorStop() + colorStop.Alpha = _DEFAULT_ALPHA + return colorStop + + +def _defaultVarColorStop(): + colorStop = ot.VarColorStop() + colorStop.Alpha = _DEFAULT_ALPHA + return colorStop + + +def _defaultColorLine(): + colorLine = ot.ColorLine() + colorLine.Extend = ExtendMode.PAD + return colorLine + + +def _defaultVarColorLine(): + colorLine = ot.VarColorLine() + colorLine.Extend = ExtendMode.PAD + return colorLine + + +def _defaultPaintSolid(): + paint = ot.Paint() + paint.Alpha = _DEFAULT_ALPHA + return paint + + +def _buildPaintCallbacks(): + return { + ( + BuildCallback.BEFORE_BUILD, + ot.Paint, + ot.PaintFormat.PaintRadialGradient, + ): _beforeBuildPaintRadialGradient, + ( + BuildCallback.BEFORE_BUILD, + ot.Paint, + ot.PaintFormat.PaintVarRadialGradient, + ): _beforeBuildPaintRadialGradient, + (BuildCallback.CREATE_DEFAULT, ot.ColorStop): _defaultColorStop, + (BuildCallback.CREATE_DEFAULT, ot.VarColorStop): _defaultVarColorStop, + (BuildCallback.CREATE_DEFAULT, ot.ColorLine): _defaultColorLine, + (BuildCallback.CREATE_DEFAULT, ot.VarColorLine): _defaultVarColorLine, + ( + BuildCallback.CREATE_DEFAULT, + ot.Paint, + ot.PaintFormat.PaintSolid, + ): _defaultPaintSolid, + ( + BuildCallback.CREATE_DEFAULT, + ot.Paint, + ot.PaintFormat.PaintVarSolid, + ): _defaultPaintSolid, + } + + +def populateCOLRv0( + table: ot.COLR, + colorGlyphsV0: _ColorGlyphsV0Dict, + glyphMap: Optional[Mapping[str, int]] = None, +): + """Build v0 color layers and add to existing COLR table. + + Args: + table: a raw ``otTables.COLR()`` object (not ttLib's ``table_C_O_L_R_``). + colorGlyphsV0: map of base glyph names to lists of (layer glyph names, + color palette index) tuples. Can be empty. + glyphMap: a map from glyph names to glyph indices, as returned from + ``TTFont.getReverseGlyphMap()``, to optionally sort base records by GID. + """ + if glyphMap is not None: + colorGlyphItems = sorted( + colorGlyphsV0.items(), key=lambda item: glyphMap[item[0]] + ) + else: + colorGlyphItems = colorGlyphsV0.items() + baseGlyphRecords = [] + layerRecords = [] + for baseGlyph, layers in colorGlyphItems: + baseRec = ot.BaseGlyphRecord() + baseRec.BaseGlyph = baseGlyph + baseRec.FirstLayerIndex = len(layerRecords) + baseRec.NumLayers = len(layers) + baseGlyphRecords.append(baseRec) + + for layerGlyph, paletteIndex in layers: + layerRec = ot.LayerRecord() + layerRec.LayerGlyph = layerGlyph + layerRec.PaletteIndex = paletteIndex + layerRecords.append(layerRec) + + table.BaseGlyphRecordArray = table.LayerRecordArray = None + if baseGlyphRecords: + table.BaseGlyphRecordArray = ot.BaseGlyphRecordArray() + table.BaseGlyphRecordArray.BaseGlyphRecord = baseGlyphRecords + if layerRecords: + table.LayerRecordArray = ot.LayerRecordArray() + table.LayerRecordArray.LayerRecord = layerRecords + table.BaseGlyphRecordCount = len(baseGlyphRecords) + table.LayerRecordCount = len(layerRecords) + + +def buildCOLR( + colorGlyphs: _ColorGlyphsDict, + version: Optional[int] = None, + *, + glyphMap: Optional[Mapping[str, int]] = None, + varStore: Optional[ot.VarStore] = None, + varIndexMap: Optional[ot.DeltaSetIndexMap] = None, + clipBoxes: Optional[Dict[str, _ClipBoxInput]] = None, + allowLayerReuse: bool = True, +) -> C_O_L_R_.table_C_O_L_R_: + """Build COLR table from color layers mapping. + + Args: + + colorGlyphs: map of base glyph name to, either list of (layer glyph name, + color palette index) tuples for COLRv0; or a single ``Paint`` (dict) or + list of ``Paint`` for COLRv1. + version: the version of COLR table. If None, the version is determined + by the presence of COLRv1 paints or variation data (varStore), which + require version 1; otherwise, if all base glyphs use only simple color + layers, version 0 is used. + glyphMap: a map from glyph names to glyph indices, as returned from + TTFont.getReverseGlyphMap(), to optionally sort base records by GID. + varStore: Optional ItemVarationStore for deltas associated with v1 layer. + varIndexMap: Optional DeltaSetIndexMap for deltas associated with v1 layer. + clipBoxes: Optional map of base glyph name to clip box 4- or 5-tuples: + (xMin, yMin, xMax, yMax) or (xMin, yMin, xMax, yMax, varIndexBase). + + Returns: + A new COLR table. + """ + self = C_O_L_R_.table_C_O_L_R_() + + if varStore is not None and version == 0: + raise ValueError("Can't add VarStore to COLRv0") + + if version in (None, 0) and not varStore: + # split color glyphs into v0 and v1 and encode separately + colorGlyphsV0, colorGlyphsV1 = _split_color_glyphs_by_version(colorGlyphs) + if version == 0 and colorGlyphsV1: + raise ValueError("Can't encode COLRv1 glyphs in COLRv0") + else: + # unless explicitly requested for v1 or have variations, in which case + # we encode all color glyph as v1 + colorGlyphsV0, colorGlyphsV1 = {}, colorGlyphs + + colr = ot.COLR() + + populateCOLRv0(colr, colorGlyphsV0, glyphMap) + + colr.LayerList, colr.BaseGlyphList = buildColrV1( + colorGlyphsV1, + glyphMap, + allowLayerReuse=allowLayerReuse, + ) + + if version is None: + version = 1 if (varStore or colorGlyphsV1) else 0 + elif version not in (0, 1): + raise NotImplementedError(version) + self.version = colr.Version = version + + if version == 0: + self.ColorLayers = self._decompileColorLayersV0(colr) + else: + colr.ClipList = buildClipList(clipBoxes) if clipBoxes else None + colr.VarIndexMap = varIndexMap + colr.VarStore = varStore + self.table = colr + + return self + + +def buildClipList(clipBoxes: Dict[str, _ClipBoxInput]) -> ot.ClipList: + clipList = ot.ClipList() + clipList.Format = 1 + clipList.clips = {name: buildClipBox(box) for name, box in clipBoxes.items()} + return clipList + + +def buildClipBox(clipBox: _ClipBoxInput) -> ot.ClipBox: + if isinstance(clipBox, ot.ClipBox): + return clipBox + n = len(clipBox) + clip = ot.ClipBox() + if n not in (4, 5): + raise ValueError(f"Invalid ClipBox: expected 4 or 5 values, found {n}") + clip.xMin, clip.yMin, clip.xMax, clip.yMax = intRect(clipBox[:4]) + clip.Format = int(n == 5) + 1 + if n == 5: + clip.VarIndexBase = int(clipBox[4]) + return clip + + +class ColorPaletteType(enum.IntFlag): + USABLE_WITH_LIGHT_BACKGROUND = 0x0001 + USABLE_WITH_DARK_BACKGROUND = 0x0002 + + @classmethod + def _missing_(cls, value): + # enforce reserved bits + if isinstance(value, int) and (value < 0 or value & 0xFFFC != 0): + raise ValueError(f"{value} is not a valid {cls.__name__}") + return super()._missing_(value) + + +# None, 'abc' or {'en': 'abc', 'de': 'xyz'} +_OptionalLocalizedString = Union[None, str, Dict[str, str]] + + +def buildPaletteLabels( + labels: Iterable[_OptionalLocalizedString], nameTable: _n_a_m_e.table__n_a_m_e +) -> List[Optional[int]]: + return [ + nameTable.addMultilingualName(l, mac=False) + if isinstance(l, dict) + else C_P_A_L_.table_C_P_A_L_.NO_NAME_ID + if l is None + else nameTable.addMultilingualName({"en": l}, mac=False) + for l in labels + ] + + +def buildCPAL( + palettes: Sequence[Sequence[Tuple[float, float, float, float]]], + paletteTypes: Optional[Sequence[ColorPaletteType]] = None, + paletteLabels: Optional[Sequence[_OptionalLocalizedString]] = None, + paletteEntryLabels: Optional[Sequence[_OptionalLocalizedString]] = None, + nameTable: Optional[_n_a_m_e.table__n_a_m_e] = None, +) -> C_P_A_L_.table_C_P_A_L_: + """Build CPAL table from list of color palettes. + + Args: + palettes: list of lists of colors encoded as tuples of (R, G, B, A) floats + in the range [0..1]. + paletteTypes: optional list of ColorPaletteType, one for each palette. + paletteLabels: optional list of palette labels. Each lable can be either: + None (no label), a string (for for default English labels), or a + localized string (as a dict keyed with BCP47 language codes). + paletteEntryLabels: optional list of palette entry labels, one for each + palette entry (see paletteLabels). + nameTable: optional name table where to store palette and palette entry + labels. Required if either paletteLabels or paletteEntryLabels is set. + + Return: + A new CPAL v0 or v1 table, if custom palette types or labels are specified. + """ + if len({len(p) for p in palettes}) != 1: + raise ColorLibError("color palettes have different lengths") + + if (paletteLabels or paletteEntryLabels) and not nameTable: + raise TypeError( + "nameTable is required if palette or palette entries have labels" + ) + + cpal = C_P_A_L_.table_C_P_A_L_() + cpal.numPaletteEntries = len(palettes[0]) + + cpal.palettes = [] + for i, palette in enumerate(palettes): + colors = [] + for j, color in enumerate(palette): + if not isinstance(color, tuple) or len(color) != 4: + raise ColorLibError( + f"In palette[{i}][{j}]: expected (R, G, B, A) tuple, got {color!r}" + ) + if any(v > 1 or v < 0 for v in color): + raise ColorLibError( + f"palette[{i}][{j}] has invalid out-of-range [0..1] color: {color!r}" + ) + # input colors are RGBA, CPAL encodes them as BGRA + red, green, blue, alpha = color + colors.append( + C_P_A_L_.Color(*(round(v * 255) for v in (blue, green, red, alpha))) + ) + cpal.palettes.append(colors) + + if any(v is not None for v in (paletteTypes, paletteLabels, paletteEntryLabels)): + cpal.version = 1 + + if paletteTypes is not None: + if len(paletteTypes) != len(palettes): + raise ColorLibError( + f"Expected {len(palettes)} paletteTypes, got {len(paletteTypes)}" + ) + cpal.paletteTypes = [ColorPaletteType(t).value for t in paletteTypes] + else: + cpal.paletteTypes = [C_P_A_L_.table_C_P_A_L_.DEFAULT_PALETTE_TYPE] * len( + palettes + ) + + if paletteLabels is not None: + if len(paletteLabels) != len(palettes): + raise ColorLibError( + f"Expected {len(palettes)} paletteLabels, got {len(paletteLabels)}" + ) + cpal.paletteLabels = buildPaletteLabels(paletteLabels, nameTable) + else: + cpal.paletteLabels = [C_P_A_L_.table_C_P_A_L_.NO_NAME_ID] * len(palettes) + + if paletteEntryLabels is not None: + if len(paletteEntryLabels) != cpal.numPaletteEntries: + raise ColorLibError( + f"Expected {cpal.numPaletteEntries} paletteEntryLabels, " + f"got {len(paletteEntryLabels)}" + ) + cpal.paletteEntryLabels = buildPaletteLabels(paletteEntryLabels, nameTable) + else: + cpal.paletteEntryLabels = [ + C_P_A_L_.table_C_P_A_L_.NO_NAME_ID + ] * cpal.numPaletteEntries + else: + cpal.version = 0 + + return cpal + + +# COLR v1 tables +# See draft proposal at: https://github.com/googlefonts/colr-gradients-spec + + +def _is_colrv0_layer(layer: Any) -> bool: + # Consider as COLRv0 layer any sequence of length 2 (be it tuple or list) in which + # the first element is a str (the layerGlyph) and the second element is an int + # (CPAL paletteIndex). + # https://github.com/googlefonts/ufo2ft/issues/426 + try: + layerGlyph, paletteIndex = layer + except (TypeError, ValueError): + return False + else: + return isinstance(layerGlyph, str) and isinstance(paletteIndex, int) + + +def _split_color_glyphs_by_version( + colorGlyphs: _ColorGlyphsDict, +) -> Tuple[_ColorGlyphsV0Dict, _ColorGlyphsDict]: + colorGlyphsV0 = {} + colorGlyphsV1 = {} + for baseGlyph, layers in colorGlyphs.items(): + if all(_is_colrv0_layer(l) for l in layers): + colorGlyphsV0[baseGlyph] = layers + else: + colorGlyphsV1[baseGlyph] = layers + + # sanity check + assert set(colorGlyphs) == (set(colorGlyphsV0) | set(colorGlyphsV1)) + + return colorGlyphsV0, colorGlyphsV1 + + +def _reuse_ranges(num_layers: int) -> Generator[Tuple[int, int], None, None]: + # TODO feels like something itertools might have already + for lbound in range(num_layers): + # Reuse of very large #s of layers is relatively unlikely + # +2: we want sequences of at least 2 + # otData handles single-record duplication + for ubound in range( + lbound + 2, min(num_layers + 1, lbound + 2 + _MAX_REUSE_LEN) + ): + yield (lbound, ubound) + + +class LayerReuseCache: + reusePool: Mapping[Tuple[Any, ...], int] + tuples: Mapping[int, Tuple[Any, ...]] + keepAlive: List[ot.Paint] # we need id to remain valid + + def __init__(self): + self.reusePool = {} + self.tuples = {} + self.keepAlive = [] + + def _paint_tuple(self, paint: ot.Paint): + # start simple, who even cares about cyclic graphs or interesting field types + def _tuple_safe(value): + if isinstance(value, enum.Enum): + return value + elif hasattr(value, "__dict__"): + return tuple( + (k, _tuple_safe(v)) for k, v in sorted(value.__dict__.items()) + ) + elif isinstance(value, collections.abc.MutableSequence): + return tuple(_tuple_safe(e) for e in value) + return value + + # Cache the tuples for individual Paint instead of the whole sequence + # because the seq could be a transient slice + result = self.tuples.get(id(paint), None) + if result is None: + result = _tuple_safe(paint) + self.tuples[id(paint)] = result + self.keepAlive.append(paint) + return result + + def _as_tuple(self, paints: Sequence[ot.Paint]) -> Tuple[Any, ...]: + return tuple(self._paint_tuple(p) for p in paints) + + def try_reuse(self, layers: List[ot.Paint]) -> List[ot.Paint]: + found_reuse = True + while found_reuse: + found_reuse = False + + ranges = sorted( + _reuse_ranges(len(layers)), + key=lambda t: (t[1] - t[0], t[1], t[0]), + reverse=True, + ) + for lbound, ubound in ranges: + reuse_lbound = self.reusePool.get( + self._as_tuple(layers[lbound:ubound]), -1 + ) + if reuse_lbound == -1: + continue + new_slice = ot.Paint() + new_slice.Format = int(ot.PaintFormat.PaintColrLayers) + new_slice.NumLayers = ubound - lbound + new_slice.FirstLayerIndex = reuse_lbound + layers = layers[:lbound] + [new_slice] + layers[ubound:] + found_reuse = True + break + return layers + + def add(self, layers: List[ot.Paint], first_layer_index: int): + for lbound, ubound in _reuse_ranges(len(layers)): + self.reusePool[self._as_tuple(layers[lbound:ubound])] = ( + lbound + first_layer_index + ) + + +class LayerListBuilder: + layers: List[ot.Paint] + cache: LayerReuseCache + allowLayerReuse: bool + + def __init__(self, *, allowLayerReuse=True): + self.layers = [] + if allowLayerReuse: + self.cache = LayerReuseCache() + else: + self.cache = None + + # We need to intercept construction of PaintColrLayers + callbacks = _buildPaintCallbacks() + callbacks[ + ( + BuildCallback.BEFORE_BUILD, + ot.Paint, + ot.PaintFormat.PaintColrLayers, + ) + ] = self._beforeBuildPaintColrLayers + self.tableBuilder = TableBuilder(callbacks) + + # COLR layers is unusual in that it modifies shared state + # so we need a callback into an object + def _beforeBuildPaintColrLayers(self, dest, source): + # Sketchy gymnastics: a sequence input will have dropped it's layers + # into NumLayers; get it back + if isinstance(source.get("NumLayers", None), collections.abc.Sequence): + layers = source["NumLayers"] + else: + layers = source["Layers"] + + # Convert maps seqs or whatever into typed objects + layers = [self.buildPaint(l) for l in layers] + + # No reason to have a colr layers with just one entry + if len(layers) == 1: + return layers[0], {} + + if self.cache is not None: + # Look for reuse, with preference to longer sequences + # This may make the layer list smaller + layers = self.cache.try_reuse(layers) + + # The layer list is now final; if it's too big we need to tree it + is_tree = len(layers) > MAX_PAINT_COLR_LAYER_COUNT + layers = build_n_ary_tree(layers, n=MAX_PAINT_COLR_LAYER_COUNT) + + # We now have a tree of sequences with Paint leaves. + # Convert the sequences into PaintColrLayers. + def listToColrLayers(layer): + if isinstance(layer, collections.abc.Sequence): + return self.buildPaint( + { + "Format": ot.PaintFormat.PaintColrLayers, + "Layers": [listToColrLayers(l) for l in layer], + } + ) + return layer + + layers = [listToColrLayers(l) for l in layers] + + # No reason to have a colr layers with just one entry + if len(layers) == 1: + return layers[0], {} + + paint = ot.Paint() + paint.Format = int(ot.PaintFormat.PaintColrLayers) + paint.NumLayers = len(layers) + paint.FirstLayerIndex = len(self.layers) + self.layers.extend(layers) + + # Register our parts for reuse provided we aren't a tree + # If we are a tree the leaves registered for reuse and that will suffice + if self.cache is not None and not is_tree: + self.cache.add(layers, paint.FirstLayerIndex) + + # we've fully built dest; empty source prevents generalized build from kicking in + return paint, {} + + def buildPaint(self, paint: _PaintInput) -> ot.Paint: + return self.tableBuilder.build(ot.Paint, paint) + + def build(self) -> Optional[ot.LayerList]: + if not self.layers: + return None + layers = ot.LayerList() + layers.LayerCount = len(self.layers) + layers.Paint = self.layers + return layers + + +def buildBaseGlyphPaintRecord( + baseGlyph: str, layerBuilder: LayerListBuilder, paint: _PaintInput +) -> ot.BaseGlyphList: + self = ot.BaseGlyphPaintRecord() + self.BaseGlyph = baseGlyph + self.Paint = layerBuilder.buildPaint(paint) + return self + + +def _format_glyph_errors(errors: Mapping[str, Exception]) -> str: + lines = [] + for baseGlyph, error in sorted(errors.items()): + lines.append(f" {baseGlyph} => {type(error).__name__}: {error}") + return "\n".join(lines) + + +def buildColrV1( + colorGlyphs: _ColorGlyphsDict, + glyphMap: Optional[Mapping[str, int]] = None, + *, + allowLayerReuse: bool = True, +) -> Tuple[Optional[ot.LayerList], ot.BaseGlyphList]: + if glyphMap is not None: + colorGlyphItems = sorted( + colorGlyphs.items(), key=lambda item: glyphMap[item[0]] + ) + else: + colorGlyphItems = colorGlyphs.items() + + errors = {} + baseGlyphs = [] + layerBuilder = LayerListBuilder(allowLayerReuse=allowLayerReuse) + for baseGlyph, paint in colorGlyphItems: + try: + baseGlyphs.append(buildBaseGlyphPaintRecord(baseGlyph, layerBuilder, paint)) + + except (ColorLibError, OverflowError, ValueError, TypeError) as e: + errors[baseGlyph] = e + + if errors: + failed_glyphs = _format_glyph_errors(errors) + exc = ColorLibError(f"Failed to build BaseGlyphList:\n{failed_glyphs}") + exc.errors = errors + raise exc from next(iter(errors.values())) + + layers = layerBuilder.build() + glyphs = ot.BaseGlyphList() + glyphs.BaseGlyphCount = len(baseGlyphs) + glyphs.BaseGlyphPaintRecord = baseGlyphs + return (layers, glyphs) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/errors.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/errors.py new file mode 100644 index 0000000..18cbebb --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/errors.py @@ -0,0 +1,2 @@ +class ColorLibError(Exception): + pass diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/geometry.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/geometry.py new file mode 100644 index 0000000..1ce161b --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/geometry.py @@ -0,0 +1,143 @@ +"""Helpers for manipulating 2D points and vectors in COLR table.""" + +from math import copysign, cos, hypot, isclose, pi +from fontTools.misc.roundTools import otRound + + +def _vector_between(origin, target): + return (target[0] - origin[0], target[1] - origin[1]) + + +def _round_point(pt): + return (otRound(pt[0]), otRound(pt[1])) + + +def _unit_vector(vec): + length = hypot(*vec) + if length == 0: + return None + return (vec[0] / length, vec[1] / length) + + +_CIRCLE_INSIDE_TOLERANCE = 1e-4 + + +# The unit vector's X and Y components are respectively +# U = (cos(α), sin(α)) +# where α is the angle between the unit vector and the positive x axis. +_UNIT_VECTOR_THRESHOLD = cos(3 / 8 * pi) # == sin(1/8 * pi) == 0.38268343236508984 + + +def _rounding_offset(direction): + # Return 2-tuple of -/+ 1.0 or 0.0 approximately based on the direction vector. + # We divide the unit circle in 8 equal slices oriented towards the cardinal + # (N, E, S, W) and intermediate (NE, SE, SW, NW) directions. To each slice we + # map one of the possible cases: -1, 0, +1 for either X and Y coordinate. + # E.g. Return (+1.0, -1.0) if unit vector is oriented towards SE, or + # (-1.0, 0.0) if it's pointing West, etc. + uv = _unit_vector(direction) + if not uv: + return (0, 0) + + result = [] + for uv_component in uv: + if -_UNIT_VECTOR_THRESHOLD <= uv_component < _UNIT_VECTOR_THRESHOLD: + # unit vector component near 0: direction almost orthogonal to the + # direction of the current axis, thus keep coordinate unchanged + result.append(0) + else: + # nudge coord by +/- 1.0 in direction of unit vector + result.append(copysign(1.0, uv_component)) + return tuple(result) + + +class Circle: + def __init__(self, centre, radius): + self.centre = centre + self.radius = radius + + def __repr__(self): + return f"Circle(centre={self.centre}, radius={self.radius})" + + def round(self): + return Circle(_round_point(self.centre), otRound(self.radius)) + + def inside(self, outer_circle, tolerance=_CIRCLE_INSIDE_TOLERANCE): + dist = self.radius + hypot(*_vector_between(self.centre, outer_circle.centre)) + return ( + isclose(outer_circle.radius, dist, rel_tol=_CIRCLE_INSIDE_TOLERANCE) + or outer_circle.radius > dist + ) + + def concentric(self, other): + return self.centre == other.centre + + def move(self, dx, dy): + self.centre = (self.centre[0] + dx, self.centre[1] + dy) + + +def round_start_circle_stable_containment(c0, r0, c1, r1): + """Round start circle so that it stays inside/outside end circle after rounding. + + The rounding of circle coordinates to integers may cause an abrupt change + if the start circle c0 is so close to the end circle c1's perimiter that + it ends up falling outside (or inside) as a result of the rounding. + To keep the gradient unchanged, we nudge it in the right direction. + + See: + https://github.com/googlefonts/colr-gradients-spec/issues/204 + https://github.com/googlefonts/picosvg/issues/158 + """ + start, end = Circle(c0, r0), Circle(c1, r1) + + inside_before_round = start.inside(end) + + round_start = start.round() + round_end = end.round() + inside_after_round = round_start.inside(round_end) + + if inside_before_round == inside_after_round: + return round_start + elif inside_after_round: + # start was outside before rounding: we need to push start away from end + direction = _vector_between(round_end.centre, round_start.centre) + radius_delta = +1.0 + else: + # start was inside before rounding: we need to push start towards end + direction = _vector_between(round_start.centre, round_end.centre) + radius_delta = -1.0 + dx, dy = _rounding_offset(direction) + + # At most 2 iterations ought to be enough to converge. Before the loop, we + # know the start circle didn't keep containment after normal rounding; thus + # we continue adjusting by -/+ 1.0 until containment is restored. + # Normal rounding can at most move each coordinates -/+0.5; in the worst case + # both the start and end circle's centres and radii will be rounded in opposite + # directions, e.g. when they move along a 45 degree diagonal: + # c0 = (1.5, 1.5) ===> (2.0, 2.0) + # r0 = 0.5 ===> 1.0 + # c1 = (0.499, 0.499) ===> (0.0, 0.0) + # r1 = 2.499 ===> 2.0 + # In this example, the relative distance between the circles, calculated + # as r1 - (r0 + distance(c0, c1)) is initially 0.57437 (c0 is inside c1), and + # -1.82842 after rounding (c0 is now outside c1). Nudging c0 by -1.0 on both + # x and y axes moves it towards c1 by hypot(-1.0, -1.0) = 1.41421. Two of these + # moves cover twice that distance, which is enough to restore containment. + max_attempts = 2 + for _ in range(max_attempts): + if round_start.concentric(round_end): + # can't move c0 towards c1 (they are the same), so we change the radius + round_start.radius += radius_delta + assert round_start.radius >= 0 + else: + round_start.move(dx, dy) + if inside_before_round == round_start.inside(round_end): + break + else: # likely a bug + raise AssertionError( + f"Rounding circle {start} " + f"{'inside' if inside_before_round else 'outside'} " + f"{end} failed after {max_attempts} attempts!" + ) + + return round_start diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/table_builder.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/table_builder.py new file mode 100644 index 0000000..f1e182c --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/table_builder.py @@ -0,0 +1,223 @@ +""" +colorLib.table_builder: Generic helper for filling in BaseTable derivatives from tuples and maps and such. + +""" + +import collections +import enum +from fontTools.ttLib.tables.otBase import ( + BaseTable, + FormatSwitchingBaseTable, + UInt8FormatSwitchingBaseTable, +) +from fontTools.ttLib.tables.otConverters import ( + ComputedInt, + SimpleValue, + Struct, + Short, + UInt8, + UShort, + IntValue, + FloatValue, + OptionalValue, +) +from fontTools.misc.roundTools import otRound + + +class BuildCallback(enum.Enum): + """Keyed on (BEFORE_BUILD, class[, Format if available]). + Receives (dest, source). + Should return (dest, source), which can be new objects. + """ + + BEFORE_BUILD = enum.auto() + + """Keyed on (AFTER_BUILD, class[, Format if available]). + Receives (dest). + Should return dest, which can be a new object. + """ + AFTER_BUILD = enum.auto() + + """Keyed on (CREATE_DEFAULT, class[, Format if available]). + Receives no arguments. + Should return a new instance of class. + """ + CREATE_DEFAULT = enum.auto() + + +def _assignable(convertersByName): + return {k: v for k, v in convertersByName.items() if not isinstance(v, ComputedInt)} + + +def _isNonStrSequence(value): + return isinstance(value, collections.abc.Sequence) and not isinstance(value, str) + + +def _split_format(cls, source): + if _isNonStrSequence(source): + assert len(source) > 0, f"{cls} needs at least format from {source}" + fmt, remainder = source[0], source[1:] + elif isinstance(source, collections.abc.Mapping): + assert "Format" in source, f"{cls} needs at least Format from {source}" + remainder = source.copy() + fmt = remainder.pop("Format") + else: + raise ValueError(f"Not sure how to populate {cls} from {source}") + + assert isinstance( + fmt, collections.abc.Hashable + ), f"{cls} Format is not hashable: {fmt!r}" + assert fmt in cls.convertersByName, f"{cls} invalid Format: {fmt!r}" + + return fmt, remainder + + +class TableBuilder: + """ + Helps to populate things derived from BaseTable from maps, tuples, etc. + + A table of lifecycle callbacks may be provided to add logic beyond what is possible + based on otData info for the target class. See BuildCallbacks. + """ + + def __init__(self, callbackTable=None): + if callbackTable is None: + callbackTable = {} + self._callbackTable = callbackTable + + def _convert(self, dest, field, converter, value): + enumClass = getattr(converter, "enumClass", None) + + if enumClass: + if isinstance(value, enumClass): + pass + elif isinstance(value, str): + try: + value = getattr(enumClass, value.upper()) + except AttributeError: + raise ValueError(f"{value} is not a valid {enumClass}") + else: + value = enumClass(value) + + elif isinstance(converter, IntValue): + value = otRound(value) + elif isinstance(converter, FloatValue): + value = float(value) + + elif isinstance(converter, Struct): + if converter.repeat: + if _isNonStrSequence(value): + value = [self.build(converter.tableClass, v) for v in value] + else: + value = [self.build(converter.tableClass, value)] + setattr(dest, converter.repeat, len(value)) + else: + value = self.build(converter.tableClass, value) + elif callable(converter): + value = converter(value) + + setattr(dest, field, value) + + def build(self, cls, source): + assert issubclass(cls, BaseTable) + + if isinstance(source, cls): + return source + + callbackKey = (cls,) + fmt = None + if issubclass(cls, FormatSwitchingBaseTable): + fmt, source = _split_format(cls, source) + callbackKey = (cls, fmt) + + dest = self._callbackTable.get( + (BuildCallback.CREATE_DEFAULT,) + callbackKey, lambda: cls() + )() + assert isinstance(dest, cls) + + convByName = _assignable(cls.convertersByName) + skippedFields = set() + + # For format switchers we need to resolve converters based on format + if issubclass(cls, FormatSwitchingBaseTable): + dest.Format = fmt + convByName = _assignable(convByName[dest.Format]) + skippedFields.add("Format") + + # Convert sequence => mapping so before thunk only has to handle one format + if _isNonStrSequence(source): + # Sequence (typically list or tuple) assumed to match fields in declaration order + assert len(source) <= len( + convByName + ), f"Sequence of {len(source)} too long for {cls}; expected <= {len(convByName)} values" + source = dict(zip(convByName.keys(), source)) + + dest, source = self._callbackTable.get( + (BuildCallback.BEFORE_BUILD,) + callbackKey, lambda d, s: (d, s) + )(dest, source) + + if isinstance(source, collections.abc.Mapping): + for field, value in source.items(): + if field in skippedFields: + continue + converter = convByName.get(field, None) + if not converter: + raise ValueError( + f"Unrecognized field {field} for {cls}; expected one of {sorted(convByName.keys())}" + ) + self._convert(dest, field, converter, value) + else: + # let's try as a 1-tuple + dest = self.build(cls, (source,)) + + for field, conv in convByName.items(): + if not hasattr(dest, field) and isinstance(conv, OptionalValue): + setattr(dest, field, conv.DEFAULT) + + dest = self._callbackTable.get( + (BuildCallback.AFTER_BUILD,) + callbackKey, lambda d: d + )(dest) + + return dest + + +class TableUnbuilder: + def __init__(self, callbackTable=None): + if callbackTable is None: + callbackTable = {} + self._callbackTable = callbackTable + + def unbuild(self, table): + assert isinstance(table, BaseTable) + + source = {} + + callbackKey = (type(table),) + if isinstance(table, FormatSwitchingBaseTable): + source["Format"] = int(table.Format) + callbackKey += (table.Format,) + + for converter in table.getConverters(): + if isinstance(converter, ComputedInt): + continue + value = getattr(table, converter.name) + + enumClass = getattr(converter, "enumClass", None) + if enumClass: + source[converter.name] = value.name.lower() + elif isinstance(converter, Struct): + if converter.repeat: + source[converter.name] = [self.unbuild(v) for v in value] + else: + source[converter.name] = self.unbuild(value) + elif isinstance(converter, SimpleValue): + # "simple" values (e.g. int, float, str) need no further un-building + source[converter.name] = value + else: + raise NotImplementedError( + "Don't know how unbuild {value!r} with {converter!r}" + ) + + source = self._callbackTable.get(callbackKey, lambda s: s)(source) + + return source diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/unbuilder.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/unbuilder.py new file mode 100644 index 0000000..ac24355 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/colorLib/unbuilder.py @@ -0,0 +1,81 @@ +from fontTools.ttLib.tables import otTables as ot +from .table_builder import TableUnbuilder + + +def unbuildColrV1(layerList, baseGlyphList): + layers = [] + if layerList: + layers = layerList.Paint + unbuilder = LayerListUnbuilder(layers) + return { + rec.BaseGlyph: unbuilder.unbuildPaint(rec.Paint) + for rec in baseGlyphList.BaseGlyphPaintRecord + } + + +def _flatten_layers(lst): + for paint in lst: + if paint["Format"] == ot.PaintFormat.PaintColrLayers: + yield from _flatten_layers(paint["Layers"]) + else: + yield paint + + +class LayerListUnbuilder: + def __init__(self, layers): + self.layers = layers + + callbacks = { + ( + ot.Paint, + ot.PaintFormat.PaintColrLayers, + ): self._unbuildPaintColrLayers, + } + self.tableUnbuilder = TableUnbuilder(callbacks) + + def unbuildPaint(self, paint): + assert isinstance(paint, ot.Paint) + return self.tableUnbuilder.unbuild(paint) + + def _unbuildPaintColrLayers(self, source): + assert source["Format"] == ot.PaintFormat.PaintColrLayers + + layers = list( + _flatten_layers( + [ + self.unbuildPaint(childPaint) + for childPaint in self.layers[ + source["FirstLayerIndex"] : source["FirstLayerIndex"] + + source["NumLayers"] + ] + ] + ) + ) + + if len(layers) == 1: + return layers[0] + + return {"Format": source["Format"], "Layers": layers} + + +if __name__ == "__main__": + from pprint import pprint + import sys + from fontTools.ttLib import TTFont + + try: + fontfile = sys.argv[1] + except IndexError: + sys.exit("usage: fonttools colorLib.unbuilder FONTFILE") + + font = TTFont(fontfile) + colr = font["COLR"] + if colr.version < 1: + sys.exit(f"error: No COLR table version=1 found in {fontfile}") + + colorGlyphs = unbuildColrV1( + colr.table.LayerList, + colr.table.BaseGlyphList, + ) + + pprint(colorGlyphs) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/config/__init__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/config/__init__.py new file mode 100644 index 0000000..c106fe5 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/config/__init__.py @@ -0,0 +1,74 @@ +""" +Define all configuration options that can affect the working of fontTools +modules. E.g. optimization levels of varLib IUP, otlLib GPOS compression level, +etc. If this file gets too big, split it into smaller files per-module. + +An instance of the Config class can be attached to a TTFont object, so that +the various modules can access their configuration options from it. +""" +from textwrap import dedent + +from fontTools.misc.configTools import * + + +class Config(AbstractConfig): + options = Options() + + +OPTIONS = Config.options + + +Config.register_option( + name="fontTools.otlLib.optimize.gpos:COMPRESSION_LEVEL", + help=dedent( + """\ + GPOS Lookup type 2 (PairPos) compression level: + 0 = do not attempt to compact PairPos lookups; + 1 to 8 = create at most 1 to 8 new subtables for each existing + subtable, provided that it would yield a 50%% file size saving; + 9 = create as many new subtables as needed to yield a file size saving. + Default: 0. + + This compaction aims to save file size, by splitting large class + kerning subtables (Format 2) that contain many zero values into + smaller and denser subtables. It's a trade-off between the overhead + of several subtables versus the sparseness of one big subtable. + + See the pull request: https://github.com/fonttools/fonttools/pull/2326 + """ + ), + default=0, + parse=int, + validate=lambda v: v in range(10), +) + +Config.register_option( + name="fontTools.ttLib.tables.otBase:USE_HARFBUZZ_REPACKER", + help=dedent( + """\ + FontTools tries to use the HarfBuzz Repacker to serialize GPOS/GSUB tables + if the uharfbuzz python bindings are importable, otherwise falls back to its + slower, less efficient serializer. Set to False to always use the latter. + Set to True to explicitly request the HarfBuzz Repacker (will raise an + error if uharfbuzz cannot be imported). + """ + ), + default=None, + parse=Option.parse_optional_bool, + validate=Option.validate_optional_bool, +) + +Config.register_option( + name="fontTools.otlLib.builder:WRITE_GPOS7", + help=dedent( + """\ + macOS before 13.2 didn’t support GPOS LookupType 7 (non-chaining + ContextPos lookups), so FontTools.otlLib.builder disables a file size + optimisation that would use LookupType 7 instead of 8 when there is no + chaining (no prefix or suffix). Set to True to enable the optimization. + """ + ), + default=False, + parse=Option.parse_optional_bool, + validate=Option.validate_optional_bool, +) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/__init__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/__init__.py new file mode 100644 index 0000000..4ae6356 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2016 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .cu2qu import * diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/__main__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/__main__.py new file mode 100644 index 0000000..084bf8f --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/__main__.py @@ -0,0 +1,6 @@ +import sys +from .cli import main + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/benchmark.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/benchmark.py new file mode 100644 index 0000000..2ab1e96 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/benchmark.py @@ -0,0 +1,55 @@ +"""Benchmark the cu2qu algorithm performance.""" + +from .cu2qu import * +import random +import timeit + +MAX_ERR = 0.05 + + +def generate_curve(): + return [ + tuple(float(random.randint(0, 2048)) for coord in range(2)) + for point in range(4) + ] + + +def setup_curve_to_quadratic(): + return generate_curve(), MAX_ERR + + +def setup_curves_to_quadratic(): + num_curves = 3 + return ([generate_curve() for curve in range(num_curves)], [MAX_ERR] * num_curves) + + +def run_benchmark(module, function, setup_suffix="", repeat=5, number=1000): + setup_func = "setup_" + function + if setup_suffix: + print("%s with %s:" % (function, setup_suffix), end="") + setup_func += "_" + setup_suffix + else: + print("%s:" % function, end="") + + def wrapper(function, setup_func): + function = globals()[function] + setup_func = globals()[setup_func] + + def wrapped(): + return function(*setup_func()) + + return wrapped + + results = timeit.repeat(wrapper(function, setup_func), repeat=repeat, number=number) + print("\t%5.1fus" % (min(results) * 1000000.0 / number)) + + +def main(): + """Benchmark the cu2qu algorithm performance.""" + run_benchmark("cu2qu", "curve_to_quadratic") + run_benchmark("cu2qu", "curves_to_quadratic") + + +if __name__ == "__main__": + random.seed(1) + main() diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/cli.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/cli.py new file mode 100644 index 0000000..9144043 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/cli.py @@ -0,0 +1,198 @@ +import os +import argparse +import logging +import shutil +import multiprocessing as mp +from contextlib import closing +from functools import partial + +import fontTools +from .ufo import font_to_quadratic, fonts_to_quadratic + +ufo_module = None +try: + import ufoLib2 as ufo_module +except ImportError: + try: + import defcon as ufo_module + except ImportError as e: + pass + + +logger = logging.getLogger("fontTools.cu2qu") + + +def _cpu_count(): + try: + return mp.cpu_count() + except NotImplementedError: # pragma: no cover + return 1 + + +def open_ufo(path): + if hasattr(ufo_module.Font, "open"): # ufoLib2 + return ufo_module.Font.open(path) + return ufo_module.Font(path) # defcon + + +def _font_to_quadratic(input_path, output_path=None, **kwargs): + ufo = open_ufo(input_path) + logger.info("Converting curves for %s", input_path) + if font_to_quadratic(ufo, **kwargs): + logger.info("Saving %s", output_path) + if output_path: + ufo.save(output_path) + else: + ufo.save() # save in-place + elif output_path: + _copytree(input_path, output_path) + + +def _samepath(path1, path2): + # TODO on python3+, there's os.path.samefile + path1 = os.path.normcase(os.path.abspath(os.path.realpath(path1))) + path2 = os.path.normcase(os.path.abspath(os.path.realpath(path2))) + return path1 == path2 + + +def _copytree(input_path, output_path): + if _samepath(input_path, output_path): + logger.debug("input and output paths are the same file; skipped copy") + return + if os.path.exists(output_path): + shutil.rmtree(output_path) + shutil.copytree(input_path, output_path) + + +def main(args=None): + """Convert a UFO font from cubic to quadratic curves""" + parser = argparse.ArgumentParser(prog="cu2qu") + parser.add_argument("--version", action="version", version=fontTools.__version__) + parser.add_argument( + "infiles", + nargs="+", + metavar="INPUT", + help="one or more input UFO source file(s).", + ) + parser.add_argument("-v", "--verbose", action="count", default=0) + parser.add_argument( + "-e", + "--conversion-error", + type=float, + metavar="ERROR", + default=None, + help="maxiumum approximation error measured in EM (default: 0.001)", + ) + parser.add_argument( + "-m", + "--mixed", + default=False, + action="store_true", + help="whether to used mixed quadratic and cubic curves", + ) + parser.add_argument( + "--keep-direction", + dest="reverse_direction", + action="store_false", + help="do not reverse the contour direction", + ) + + mode_parser = parser.add_mutually_exclusive_group() + mode_parser.add_argument( + "-i", + "--interpolatable", + action="store_true", + help="whether curve conversion should keep interpolation compatibility", + ) + mode_parser.add_argument( + "-j", + "--jobs", + type=int, + nargs="?", + default=1, + const=_cpu_count(), + metavar="N", + help="Convert using N multiple processes (default: %(default)s)", + ) + + output_parser = parser.add_mutually_exclusive_group() + output_parser.add_argument( + "-o", + "--output-file", + default=None, + metavar="OUTPUT", + help=( + "output filename for the converted UFO. By default fonts are " + "modified in place. This only works with a single input." + ), + ) + output_parser.add_argument( + "-d", + "--output-dir", + default=None, + metavar="DIRECTORY", + help="output directory where to save converted UFOs", + ) + + options = parser.parse_args(args) + + if ufo_module is None: + parser.error("Either ufoLib2 or defcon are required to run this script.") + + if not options.verbose: + level = "WARNING" + elif options.verbose == 1: + level = "INFO" + else: + level = "DEBUG" + logging.basicConfig(level=level) + + if len(options.infiles) > 1 and options.output_file: + parser.error("-o/--output-file can't be used with multile inputs") + + if options.output_dir: + output_dir = options.output_dir + if not os.path.exists(output_dir): + os.mkdir(output_dir) + elif not os.path.isdir(output_dir): + parser.error("'%s' is not a directory" % output_dir) + output_paths = [ + os.path.join(output_dir, os.path.basename(p)) for p in options.infiles + ] + elif options.output_file: + output_paths = [options.output_file] + else: + # save in-place + output_paths = [None] * len(options.infiles) + + kwargs = dict( + dump_stats=options.verbose > 0, + max_err_em=options.conversion_error, + reverse_direction=options.reverse_direction, + all_quadratic=False if options.mixed else True, + ) + + if options.interpolatable: + logger.info("Converting curves compatibly") + ufos = [open_ufo(infile) for infile in options.infiles] + if fonts_to_quadratic(ufos, **kwargs): + for ufo, output_path in zip(ufos, output_paths): + logger.info("Saving %s", output_path) + if output_path: + ufo.save(output_path) + else: + ufo.save() + else: + for input_path, output_path in zip(options.infiles, output_paths): + if output_path: + _copytree(input_path, output_path) + else: + jobs = min(len(options.infiles), options.jobs) if options.jobs > 1 else 1 + if jobs > 1: + func = partial(_font_to_quadratic, **kwargs) + logger.info("Running %d parallel processes", jobs) + with closing(mp.Pool(jobs)) as pool: + pool.starmap(func, zip(options.infiles, output_paths)) + else: + for input_path, output_path in zip(options.infiles, output_paths): + _font_to_quadratic(input_path, output_path, **kwargs) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/cu2qu.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/cu2qu.py new file mode 100644 index 0000000..e620b48 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/cu2qu.py @@ -0,0 +1,534 @@ +# cython: language_level=3 +# distutils: define_macros=CYTHON_TRACE_NOGIL=1 + +# Copyright 2015 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +try: + import cython + + COMPILED = cython.compiled +except (AttributeError, ImportError): + # if cython not installed, use mock module with no-op decorators and types + from fontTools.misc import cython + + COMPILED = False + +import math + +from .errors import Error as Cu2QuError, ApproxNotFoundError + + +__all__ = ["curve_to_quadratic", "curves_to_quadratic"] + +MAX_N = 100 + +NAN = float("NaN") + + +@cython.cfunc +@cython.inline +@cython.returns(cython.double) +@cython.locals(v1=cython.complex, v2=cython.complex) +def dot(v1, v2): + """Return the dot product of two vectors. + + Args: + v1 (complex): First vector. + v2 (complex): Second vector. + + Returns: + double: Dot product. + """ + return (v1 * v2.conjugate()).real + + +@cython.cfunc +@cython.inline +@cython.locals(a=cython.complex, b=cython.complex, c=cython.complex, d=cython.complex) +@cython.locals( + _1=cython.complex, _2=cython.complex, _3=cython.complex, _4=cython.complex +) +def calc_cubic_points(a, b, c, d): + _1 = d + _2 = (c / 3.0) + d + _3 = (b + c) / 3.0 + _2 + _4 = a + d + c + b + return _1, _2, _3, _4 + + +@cython.cfunc +@cython.inline +@cython.locals( + p0=cython.complex, p1=cython.complex, p2=cython.complex, p3=cython.complex +) +@cython.locals(a=cython.complex, b=cython.complex, c=cython.complex, d=cython.complex) +def calc_cubic_parameters(p0, p1, p2, p3): + c = (p1 - p0) * 3.0 + b = (p2 - p1) * 3.0 - c + d = p0 + a = p3 - d - c - b + return a, b, c, d + + +@cython.cfunc +@cython.inline +@cython.locals( + p0=cython.complex, p1=cython.complex, p2=cython.complex, p3=cython.complex +) +def split_cubic_into_n_iter(p0, p1, p2, p3, n): + """Split a cubic Bezier into n equal parts. + + Splits the curve into `n` equal parts by curve time. + (t=0..1/n, t=1/n..2/n, ...) + + Args: + p0 (complex): Start point of curve. + p1 (complex): First handle of curve. + p2 (complex): Second handle of curve. + p3 (complex): End point of curve. + + Returns: + An iterator yielding the control points (four complex values) of the + subcurves. + """ + # Hand-coded special-cases + if n == 2: + return iter(split_cubic_into_two(p0, p1, p2, p3)) + if n == 3: + return iter(split_cubic_into_three(p0, p1, p2, p3)) + if n == 4: + a, b = split_cubic_into_two(p0, p1, p2, p3) + return iter( + split_cubic_into_two(a[0], a[1], a[2], a[3]) + + split_cubic_into_two(b[0], b[1], b[2], b[3]) + ) + if n == 6: + a, b = split_cubic_into_two(p0, p1, p2, p3) + return iter( + split_cubic_into_three(a[0], a[1], a[2], a[3]) + + split_cubic_into_three(b[0], b[1], b[2], b[3]) + ) + + return _split_cubic_into_n_gen(p0, p1, p2, p3, n) + + +@cython.locals( + p0=cython.complex, + p1=cython.complex, + p2=cython.complex, + p3=cython.complex, + n=cython.int, +) +@cython.locals(a=cython.complex, b=cython.complex, c=cython.complex, d=cython.complex) +@cython.locals( + dt=cython.double, delta_2=cython.double, delta_3=cython.double, i=cython.int +) +@cython.locals( + a1=cython.complex, b1=cython.complex, c1=cython.complex, d1=cython.complex +) +def _split_cubic_into_n_gen(p0, p1, p2, p3, n): + a, b, c, d = calc_cubic_parameters(p0, p1, p2, p3) + dt = 1 / n + delta_2 = dt * dt + delta_3 = dt * delta_2 + for i in range(n): + t1 = i * dt + t1_2 = t1 * t1 + # calc new a, b, c and d + a1 = a * delta_3 + b1 = (3 * a * t1 + b) * delta_2 + c1 = (2 * b * t1 + c + 3 * a * t1_2) * dt + d1 = a * t1 * t1_2 + b * t1_2 + c * t1 + d + yield calc_cubic_points(a1, b1, c1, d1) + + +@cython.cfunc +@cython.inline +@cython.locals( + p0=cython.complex, p1=cython.complex, p2=cython.complex, p3=cython.complex +) +@cython.locals(mid=cython.complex, deriv3=cython.complex) +def split_cubic_into_two(p0, p1, p2, p3): + """Split a cubic Bezier into two equal parts. + + Splits the curve into two equal parts at t = 0.5 + + Args: + p0 (complex): Start point of curve. + p1 (complex): First handle of curve. + p2 (complex): Second handle of curve. + p3 (complex): End point of curve. + + Returns: + tuple: Two cubic Beziers (each expressed as a tuple of four complex + values). + """ + mid = (p0 + 3 * (p1 + p2) + p3) * 0.125 + deriv3 = (p3 + p2 - p1 - p0) * 0.125 + return ( + (p0, (p0 + p1) * 0.5, mid - deriv3, mid), + (mid, mid + deriv3, (p2 + p3) * 0.5, p3), + ) + + +@cython.cfunc +@cython.inline +@cython.locals( + p0=cython.complex, + p1=cython.complex, + p2=cython.complex, + p3=cython.complex, +) +@cython.locals( + mid1=cython.complex, + deriv1=cython.complex, + mid2=cython.complex, + deriv2=cython.complex, +) +def split_cubic_into_three(p0, p1, p2, p3): + """Split a cubic Bezier into three equal parts. + + Splits the curve into three equal parts at t = 1/3 and t = 2/3 + + Args: + p0 (complex): Start point of curve. + p1 (complex): First handle of curve. + p2 (complex): Second handle of curve. + p3 (complex): End point of curve. + + Returns: + tuple: Three cubic Beziers (each expressed as a tuple of four complex + values). + """ + mid1 = (8 * p0 + 12 * p1 + 6 * p2 + p3) * (1 / 27) + deriv1 = (p3 + 3 * p2 - 4 * p0) * (1 / 27) + mid2 = (p0 + 6 * p1 + 12 * p2 + 8 * p3) * (1 / 27) + deriv2 = (4 * p3 - 3 * p1 - p0) * (1 / 27) + return ( + (p0, (2 * p0 + p1) / 3.0, mid1 - deriv1, mid1), + (mid1, mid1 + deriv1, mid2 - deriv2, mid2), + (mid2, mid2 + deriv2, (p2 + 2 * p3) / 3.0, p3), + ) + + +@cython.cfunc +@cython.inline +@cython.returns(cython.complex) +@cython.locals( + t=cython.double, + p0=cython.complex, + p1=cython.complex, + p2=cython.complex, + p3=cython.complex, +) +@cython.locals(_p1=cython.complex, _p2=cython.complex) +def cubic_approx_control(t, p0, p1, p2, p3): + """Approximate a cubic Bezier using a quadratic one. + + Args: + t (double): Position of control point. + p0 (complex): Start point of curve. + p1 (complex): First handle of curve. + p2 (complex): Second handle of curve. + p3 (complex): End point of curve. + + Returns: + complex: Location of candidate control point on quadratic curve. + """ + _p1 = p0 + (p1 - p0) * 1.5 + _p2 = p3 + (p2 - p3) * 1.5 + return _p1 + (_p2 - _p1) * t + + +@cython.cfunc +@cython.inline +@cython.returns(cython.complex) +@cython.locals(a=cython.complex, b=cython.complex, c=cython.complex, d=cython.complex) +@cython.locals(ab=cython.complex, cd=cython.complex, p=cython.complex, h=cython.double) +def calc_intersect(a, b, c, d): + """Calculate the intersection of two lines. + + Args: + a (complex): Start point of first line. + b (complex): End point of first line. + c (complex): Start point of second line. + d (complex): End point of second line. + + Returns: + complex: Location of intersection if one present, ``complex(NaN,NaN)`` + if no intersection was found. + """ + ab = b - a + cd = d - c + p = ab * 1j + try: + h = dot(p, a - c) / dot(p, cd) + except ZeroDivisionError: + return complex(NAN, NAN) + return c + cd * h + + +@cython.cfunc +@cython.returns(cython.int) +@cython.locals( + tolerance=cython.double, + p0=cython.complex, + p1=cython.complex, + p2=cython.complex, + p3=cython.complex, +) +@cython.locals(mid=cython.complex, deriv3=cython.complex) +def cubic_farthest_fit_inside(p0, p1, p2, p3, tolerance): + """Check if a cubic Bezier lies within a given distance of the origin. + + "Origin" means *the* origin (0,0), not the start of the curve. Note that no + checks are made on the start and end positions of the curve; this function + only checks the inside of the curve. + + Args: + p0 (complex): Start point of curve. + p1 (complex): First handle of curve. + p2 (complex): Second handle of curve. + p3 (complex): End point of curve. + tolerance (double): Distance from origin. + + Returns: + bool: True if the cubic Bezier ``p`` entirely lies within a distance + ``tolerance`` of the origin, False otherwise. + """ + # First check p2 then p1, as p2 has higher error early on. + if abs(p2) <= tolerance and abs(p1) <= tolerance: + return True + + # Split. + mid = (p0 + 3 * (p1 + p2) + p3) * 0.125 + if abs(mid) > tolerance: + return False + deriv3 = (p3 + p2 - p1 - p0) * 0.125 + return cubic_farthest_fit_inside( + p0, (p0 + p1) * 0.5, mid - deriv3, mid, tolerance + ) and cubic_farthest_fit_inside(mid, mid + deriv3, (p2 + p3) * 0.5, p3, tolerance) + + +@cython.cfunc +@cython.inline +@cython.locals(tolerance=cython.double) +@cython.locals( + q1=cython.complex, + c0=cython.complex, + c1=cython.complex, + c2=cython.complex, + c3=cython.complex, +) +def cubic_approx_quadratic(cubic, tolerance): + """Approximate a cubic Bezier with a single quadratic within a given tolerance. + + Args: + cubic (sequence): Four complex numbers representing control points of + the cubic Bezier curve. + tolerance (double): Permitted deviation from the original curve. + + Returns: + Three complex numbers representing control points of the quadratic + curve if it fits within the given tolerance, or ``None`` if no suitable + curve could be calculated. + """ + + q1 = calc_intersect(cubic[0], cubic[1], cubic[2], cubic[3]) + if math.isnan(q1.imag): + return None + c0 = cubic[0] + c3 = cubic[3] + c1 = c0 + (q1 - c0) * (2 / 3) + c2 = c3 + (q1 - c3) * (2 / 3) + if not cubic_farthest_fit_inside(0, c1 - cubic[1], c2 - cubic[2], 0, tolerance): + return None + return c0, q1, c3 + + +@cython.cfunc +@cython.locals(n=cython.int, tolerance=cython.double) +@cython.locals(i=cython.int) +@cython.locals(all_quadratic=cython.int) +@cython.locals( + c0=cython.complex, c1=cython.complex, c2=cython.complex, c3=cython.complex +) +@cython.locals( + q0=cython.complex, + q1=cython.complex, + next_q1=cython.complex, + q2=cython.complex, + d1=cython.complex, +) +def cubic_approx_spline(cubic, n, tolerance, all_quadratic): + """Approximate a cubic Bezier curve with a spline of n quadratics. + + Args: + cubic (sequence): Four complex numbers representing control points of + the cubic Bezier curve. + n (int): Number of quadratic Bezier curves in the spline. + tolerance (double): Permitted deviation from the original curve. + + Returns: + A list of ``n+2`` complex numbers, representing control points of the + quadratic spline if it fits within the given tolerance, or ``None`` if + no suitable spline could be calculated. + """ + + if n == 1: + return cubic_approx_quadratic(cubic, tolerance) + if n == 2 and all_quadratic == False: + return cubic + + cubics = split_cubic_into_n_iter(cubic[0], cubic[1], cubic[2], cubic[3], n) + + # calculate the spline of quadratics and check errors at the same time. + next_cubic = next(cubics) + next_q1 = cubic_approx_control( + 0, next_cubic[0], next_cubic[1], next_cubic[2], next_cubic[3] + ) + q2 = cubic[0] + d1 = 0j + spline = [cubic[0], next_q1] + for i in range(1, n + 1): + # Current cubic to convert + c0, c1, c2, c3 = next_cubic + + # Current quadratic approximation of current cubic + q0 = q2 + q1 = next_q1 + if i < n: + next_cubic = next(cubics) + next_q1 = cubic_approx_control( + i / (n - 1), next_cubic[0], next_cubic[1], next_cubic[2], next_cubic[3] + ) + spline.append(next_q1) + q2 = (q1 + next_q1) * 0.5 + else: + q2 = c3 + + # End-point deltas + d0 = d1 + d1 = q2 - c3 + + if abs(d1) > tolerance or not cubic_farthest_fit_inside( + d0, + q0 + (q1 - q0) * (2 / 3) - c1, + q2 + (q1 - q2) * (2 / 3) - c2, + d1, + tolerance, + ): + return None + spline.append(cubic[3]) + + return spline + + +@cython.locals(max_err=cython.double) +@cython.locals(n=cython.int) +@cython.locals(all_quadratic=cython.int) +def curve_to_quadratic(curve, max_err, all_quadratic=True): + """Approximate a cubic Bezier curve with a spline of n quadratics. + + Args: + cubic (sequence): Four 2D tuples representing control points of + the cubic Bezier curve. + max_err (double): Permitted deviation from the original curve. + all_quadratic (bool): If True (default) returned value is a + quadratic spline. If False, it's either a single quadratic + curve or a single cubic curve. + + Returns: + If all_quadratic is True: A list of 2D tuples, representing + control points of the quadratic spline if it fits within the + given tolerance, or ``None`` if no suitable spline could be + calculated. + + If all_quadratic is False: Either a quadratic curve (if length + of output is 3), or a cubic curve (if length of output is 4). + """ + + curve = [complex(*p) for p in curve] + + for n in range(1, MAX_N + 1): + spline = cubic_approx_spline(curve, n, max_err, all_quadratic) + if spline is not None: + # done. go home + return [(s.real, s.imag) for s in spline] + + raise ApproxNotFoundError(curve) + + +@cython.locals(l=cython.int, last_i=cython.int, i=cython.int) +@cython.locals(all_quadratic=cython.int) +def curves_to_quadratic(curves, max_errors, all_quadratic=True): + """Return quadratic Bezier splines approximating the input cubic Beziers. + + Args: + curves: A sequence of *n* curves, each curve being a sequence of four + 2D tuples. + max_errors: A sequence of *n* floats representing the maximum permissible + deviation from each of the cubic Bezier curves. + all_quadratic (bool): If True (default) returned values are a + quadratic spline. If False, they are either a single quadratic + curve or a single cubic curve. + + Example:: + + >>> curves_to_quadratic( [ + ... [ (50,50), (100,100), (150,100), (200,50) ], + ... [ (75,50), (120,100), (150,75), (200,60) ] + ... ], [1,1] ) + [[(50.0, 50.0), (75.0, 75.0), (125.0, 91.66666666666666), (175.0, 75.0), (200.0, 50.0)], [(75.0, 50.0), (97.5, 75.0), (135.41666666666666, 82.08333333333333), (175.0, 67.5), (200.0, 60.0)]] + + The returned splines have "implied oncurve points" suitable for use in + TrueType ``glif`` outlines - i.e. in the first spline returned above, + the first quadratic segment runs from (50,50) to + ( (75 + 125)/2 , (120 + 91.666..)/2 ) = (100, 83.333...). + + Returns: + If all_quadratic is True, a list of splines, each spline being a list + of 2D tuples. + + If all_quadratic is False, a list of curves, each curve being a quadratic + (length 3), or cubic (length 4). + + Raises: + fontTools.cu2qu.Errors.ApproxNotFoundError: if no suitable approximation + can be found for all curves with the given parameters. + """ + + curves = [[complex(*p) for p in curve] for curve in curves] + assert len(max_errors) == len(curves) + + l = len(curves) + splines = [None] * l + last_i = i = 0 + n = 1 + while True: + spline = cubic_approx_spline(curves[i], n, max_errors[i], all_quadratic) + if spline is None: + if n == MAX_N: + break + n += 1 + last_i = i + continue + splines[i] = spline + i = (i + 1) % l + if i == last_i: + # done. go home + return [[(s.real, s.imag) for s in spline] for spline in splines] + + raise ApproxNotFoundError(curves) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/errors.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/errors.py new file mode 100644 index 0000000..fa3dc42 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/errors.py @@ -0,0 +1,77 @@ +# Copyright 2016 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +class Error(Exception): + """Base Cu2Qu exception class for all other errors.""" + + +class ApproxNotFoundError(Error): + def __init__(self, curve): + message = "no approximation found: %s" % curve + super().__init__(message) + self.curve = curve + + +class UnequalZipLengthsError(Error): + pass + + +class IncompatibleGlyphsError(Error): + def __init__(self, glyphs): + assert len(glyphs) > 1 + self.glyphs = glyphs + names = set(repr(g.name) for g in glyphs) + if len(names) > 1: + self.combined_name = "{%s}" % ", ".join(sorted(names)) + else: + self.combined_name = names.pop() + + def __repr__(self): + return "<%s %s>" % (type(self).__name__, self.combined_name) + + +class IncompatibleSegmentNumberError(IncompatibleGlyphsError): + def __str__(self): + return "Glyphs named %s have different number of segments" % ( + self.combined_name + ) + + +class IncompatibleSegmentTypesError(IncompatibleGlyphsError): + def __init__(self, glyphs, segments): + IncompatibleGlyphsError.__init__(self, glyphs) + self.segments = segments + + def __str__(self): + lines = [] + ndigits = len(str(max(self.segments))) + for i, tags in sorted(self.segments.items()): + lines.append( + "%s: (%s)" % (str(i).rjust(ndigits), ", ".join(repr(t) for t in tags)) + ) + return "Glyphs named %s have incompatible segment types:\n %s" % ( + self.combined_name, + "\n ".join(lines), + ) + + +class IncompatibleFontsError(Error): + def __init__(self, glyph_errors): + self.glyph_errors = glyph_errors + + def __str__(self): + return "fonts contains incompatible glyphs: %s" % ( + ", ".join(repr(g) for g in sorted(self.glyph_errors.keys())) + ) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/ufo.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/ufo.py new file mode 100644 index 0000000..10367cf --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/cu2qu/ufo.py @@ -0,0 +1,349 @@ +# Copyright 2015 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +"""Converts cubic bezier curves to quadratic splines. + +Conversion is performed such that the quadratic splines keep the same end-curve +tangents as the original cubics. The approach is iterative, increasing the +number of segments for a spline until the error gets below a bound. + +Respective curves from multiple fonts will be converted at once to ensure that +the resulting splines are interpolation-compatible. +""" + +import logging +from fontTools.pens.basePen import AbstractPen +from fontTools.pens.pointPen import PointToSegmentPen +from fontTools.pens.reverseContourPen import ReverseContourPen + +from . import curves_to_quadratic +from .errors import ( + UnequalZipLengthsError, + IncompatibleSegmentNumberError, + IncompatibleSegmentTypesError, + IncompatibleGlyphsError, + IncompatibleFontsError, +) + + +__all__ = ["fonts_to_quadratic", "font_to_quadratic"] + +# The default approximation error below is a relative value (1/1000 of the EM square). +# Later on, we convert it to absolute font units by multiplying it by a font's UPEM +# (see fonts_to_quadratic). +DEFAULT_MAX_ERR = 0.001 +CURVE_TYPE_LIB_KEY = "com.github.googlei18n.cu2qu.curve_type" + +logger = logging.getLogger(__name__) + + +_zip = zip + + +def zip(*args): + """Ensure each argument to zip has the same length. Also make sure a list is + returned for python 2/3 compatibility. + """ + + if len(set(len(a) for a in args)) != 1: + raise UnequalZipLengthsError(*args) + return list(_zip(*args)) + + +class GetSegmentsPen(AbstractPen): + """Pen to collect segments into lists of points for conversion. + + Curves always include their initial on-curve point, so some points are + duplicated between segments. + """ + + def __init__(self): + self._last_pt = None + self.segments = [] + + def _add_segment(self, tag, *args): + if tag in ["move", "line", "qcurve", "curve"]: + self._last_pt = args[-1] + self.segments.append((tag, args)) + + def moveTo(self, pt): + self._add_segment("move", pt) + + def lineTo(self, pt): + self._add_segment("line", pt) + + def qCurveTo(self, *points): + self._add_segment("qcurve", self._last_pt, *points) + + def curveTo(self, *points): + self._add_segment("curve", self._last_pt, *points) + + def closePath(self): + self._add_segment("close") + + def endPath(self): + self._add_segment("end") + + def addComponent(self, glyphName, transformation): + pass + + +def _get_segments(glyph): + """Get a glyph's segments as extracted by GetSegmentsPen.""" + + pen = GetSegmentsPen() + # glyph.draw(pen) + # We can't simply draw the glyph with the pen, but we must initialize the + # PointToSegmentPen explicitly with outputImpliedClosingLine=True. + # By default PointToSegmentPen does not outputImpliedClosingLine -- unless + # last and first point on closed contour are duplicated. Because we are + # converting multiple glyphs at the same time, we want to make sure + # this function returns the same number of segments, whether or not + # the last and first point overlap. + # https://github.com/googlefonts/fontmake/issues/572 + # https://github.com/fonttools/fonttools/pull/1720 + pointPen = PointToSegmentPen(pen, outputImpliedClosingLine=True) + glyph.drawPoints(pointPen) + return pen.segments + + +def _set_segments(glyph, segments, reverse_direction): + """Draw segments as extracted by GetSegmentsPen back to a glyph.""" + + glyph.clearContours() + pen = glyph.getPen() + if reverse_direction: + pen = ReverseContourPen(pen) + for tag, args in segments: + if tag == "move": + pen.moveTo(*args) + elif tag == "line": + pen.lineTo(*args) + elif tag == "curve": + pen.curveTo(*args[1:]) + elif tag == "qcurve": + pen.qCurveTo(*args[1:]) + elif tag == "close": + pen.closePath() + elif tag == "end": + pen.endPath() + else: + raise AssertionError('Unhandled segment type "%s"' % tag) + + +def _segments_to_quadratic(segments, max_err, stats, all_quadratic=True): + """Return quadratic approximations of cubic segments.""" + + assert all(s[0] == "curve" for s in segments), "Non-cubic given to convert" + + new_points = curves_to_quadratic([s[1] for s in segments], max_err, all_quadratic) + n = len(new_points[0]) + assert all(len(s) == n for s in new_points[1:]), "Converted incompatibly" + + spline_length = str(n - 2) + stats[spline_length] = stats.get(spline_length, 0) + 1 + + if all_quadratic or n == 3: + return [("qcurve", p) for p in new_points] + else: + return [("curve", p) for p in new_points] + + +def _glyphs_to_quadratic(glyphs, max_err, reverse_direction, stats, all_quadratic=True): + """Do the actual conversion of a set of compatible glyphs, after arguments + have been set up. + + Return True if the glyphs were modified, else return False. + """ + + try: + segments_by_location = zip(*[_get_segments(g) for g in glyphs]) + except UnequalZipLengthsError: + raise IncompatibleSegmentNumberError(glyphs) + if not any(segments_by_location): + return False + + # always modify input glyphs if reverse_direction is True + glyphs_modified = reverse_direction + + new_segments_by_location = [] + incompatible = {} + for i, segments in enumerate(segments_by_location): + tag = segments[0][0] + if not all(s[0] == tag for s in segments[1:]): + incompatible[i] = [s[0] for s in segments] + elif tag == "curve": + new_segments = _segments_to_quadratic( + segments, max_err, stats, all_quadratic + ) + if all_quadratic or new_segments != segments: + glyphs_modified = True + segments = new_segments + new_segments_by_location.append(segments) + + if glyphs_modified: + new_segments_by_glyph = zip(*new_segments_by_location) + for glyph, new_segments in zip(glyphs, new_segments_by_glyph): + _set_segments(glyph, new_segments, reverse_direction) + + if incompatible: + raise IncompatibleSegmentTypesError(glyphs, segments=incompatible) + return glyphs_modified + + +def glyphs_to_quadratic( + glyphs, max_err=None, reverse_direction=False, stats=None, all_quadratic=True +): + """Convert the curves of a set of compatible of glyphs to quadratic. + + All curves will be converted to quadratic at once, ensuring interpolation + compatibility. If this is not required, calling glyphs_to_quadratic with one + glyph at a time may yield slightly more optimized results. + + Return True if glyphs were modified, else return False. + + Raises IncompatibleGlyphsError if glyphs have non-interpolatable outlines. + """ + if stats is None: + stats = {} + + if not max_err: + # assume 1000 is the default UPEM + max_err = DEFAULT_MAX_ERR * 1000 + + if isinstance(max_err, (list, tuple)): + max_errors = max_err + else: + max_errors = [max_err] * len(glyphs) + assert len(max_errors) == len(glyphs) + + return _glyphs_to_quadratic( + glyphs, max_errors, reverse_direction, stats, all_quadratic + ) + + +def fonts_to_quadratic( + fonts, + max_err_em=None, + max_err=None, + reverse_direction=False, + stats=None, + dump_stats=False, + remember_curve_type=True, + all_quadratic=True, +): + """Convert the curves of a collection of fonts to quadratic. + + All curves will be converted to quadratic at once, ensuring interpolation + compatibility. If this is not required, calling fonts_to_quadratic with one + font at a time may yield slightly more optimized results. + + Return True if fonts were modified, else return False. + + By default, cu2qu stores the curve type in the fonts' lib, under a private + key "com.github.googlei18n.cu2qu.curve_type", and will not try to convert + them again if the curve type is already set to "quadratic". + Setting 'remember_curve_type' to False disables this optimization. + + Raises IncompatibleFontsError if same-named glyphs from different fonts + have non-interpolatable outlines. + """ + + if remember_curve_type: + curve_types = {f.lib.get(CURVE_TYPE_LIB_KEY, "cubic") for f in fonts} + if len(curve_types) == 1: + curve_type = next(iter(curve_types)) + if curve_type in ("quadratic", "mixed"): + logger.info("Curves already converted to quadratic") + return False + elif curve_type == "cubic": + pass # keep converting + else: + raise NotImplementedError(curve_type) + elif len(curve_types) > 1: + # going to crash later if they do differ + logger.warning("fonts may contain different curve types") + + if stats is None: + stats = {} + + if max_err_em and max_err: + raise TypeError("Only one of max_err and max_err_em can be specified.") + if not (max_err_em or max_err): + max_err_em = DEFAULT_MAX_ERR + + if isinstance(max_err, (list, tuple)): + assert len(max_err) == len(fonts) + max_errors = max_err + elif max_err: + max_errors = [max_err] * len(fonts) + + if isinstance(max_err_em, (list, tuple)): + assert len(fonts) == len(max_err_em) + max_errors = [f.info.unitsPerEm * e for f, e in zip(fonts, max_err_em)] + elif max_err_em: + max_errors = [f.info.unitsPerEm * max_err_em for f in fonts] + + modified = False + glyph_errors = {} + for name in set().union(*(f.keys() for f in fonts)): + glyphs = [] + cur_max_errors = [] + for font, error in zip(fonts, max_errors): + if name in font: + glyphs.append(font[name]) + cur_max_errors.append(error) + try: + modified |= _glyphs_to_quadratic( + glyphs, cur_max_errors, reverse_direction, stats, all_quadratic + ) + except IncompatibleGlyphsError as exc: + logger.error(exc) + glyph_errors[name] = exc + + if glyph_errors: + raise IncompatibleFontsError(glyph_errors) + + if modified and dump_stats: + spline_lengths = sorted(stats.keys()) + logger.info( + "New spline lengths: %s" + % (", ".join("%s: %d" % (l, stats[l]) for l in spline_lengths)) + ) + + if remember_curve_type: + for font in fonts: + curve_type = font.lib.get(CURVE_TYPE_LIB_KEY, "cubic") + new_curve_type = "quadratic" if all_quadratic else "mixed" + if curve_type != new_curve_type: + font.lib[CURVE_TYPE_LIB_KEY] = new_curve_type + modified = True + return modified + + +def glyph_to_quadratic(glyph, **kwargs): + """Convenience wrapper around glyphs_to_quadratic, for just one glyph. + Return True if the glyph was modified, else return False. + """ + + return glyphs_to_quadratic([glyph], **kwargs) + + +def font_to_quadratic(font, **kwargs): + """Convenience wrapper around fonts_to_quadratic, for just one font. + Return True if the font was modified, else return False. + """ + + return fonts_to_quadratic([font], **kwargs) diff --git a/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/designspaceLib/__init__.py b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/designspaceLib/__init__.py new file mode 100644 index 0000000..1c71fd0 --- /dev/null +++ b/config/inkscape/extensions/org.inkscape.extension.30306/scientific_inkscape/inkex1_3_0/site-packages/fontTools/designspaceLib/__init__.py @@ -0,0 +1,3283 @@ +from __future__ import annotations + +import collections +import copy +import itertools +import math +import os +import posixpath +from io import BytesIO, StringIO +from textwrap import indent +from typing import Any, Dict, List, MutableMapping, Optional, Tuple, Union, cast + +from fontTools.misc import etree as ET +from fontTools.misc import plistlib +from fontTools.misc.loggingTools import LogMixin +from fontTools.misc.textTools import tobytes, tostr + +""" + designSpaceDocument + + - read and write designspace files +""" + +__all__ = [ + "AxisDescriptor", + "AxisLabelDescriptor", + "AxisMappingDescriptor", + "BaseDocReader", + "BaseDocWriter", + "DesignSpaceDocument", + "DesignSpaceDocumentError", + "DiscreteAxisDescriptor", + "InstanceDescriptor", + "LocationLabelDescriptor", + "RangeAxisSubsetDescriptor", + "RuleDescriptor", + "SourceDescriptor", + "ValueAxisSubsetDescriptor", + "VariableFontDescriptor", +] + +# ElementTree allows to find namespace-prefixed elements, but not attributes +# so we have to do it ourselves for 'xml:lang' +XML_NS = "{http://www.w3.org/XML/1998/namespace}" +XML_LANG = XML_NS + "lang" + + +def posix(path): + """Normalize paths using forward slash to work also on Windows.""" + new_path = posixpath.join(*path.split(os.path.sep)) + if path.startswith("/"): + # The above transformation loses absolute paths + new_path = "/" + new_path + elif path.startswith(r"\\"): + # The above transformation loses leading slashes of UNC path mounts + new_path = "//" + new_path + return new_path + + +def posixpath_property(private_name): + """Generate a propery that holds a path always using forward slashes.""" + + def getter(self): + # Normal getter + return getattr(self, private_name) + + def setter(self, value): + # The setter rewrites paths using forward slashes + if value is not None: + value = posix(value) + setattr(self, private_name, value) + + return property(getter, setter) + + +class DesignSpaceDocumentError(Exception): + def __init__(self, msg, obj=None): + self.msg = msg + self.obj = obj + + def __str__(self): + return str(self.msg) + (": %r" % self.obj if self.obj is not None else "") + + +class AsDictMixin(object): + def asdict(self): + d = {} + for attr, value in self.__dict__.items(): + if attr.startswith("_"): + continue + if hasattr(value, "asdict"): + value = value.asdict() + elif isinstance(value, list): + value = [v.asdict() if hasattr(v, "asdict") else v for v in value] + d[attr] = value + return d + + +class SimpleDescriptor(AsDictMixin): + """Containers for a bunch of attributes""" + + # XXX this is ugly. The 'print' is inappropriate here, and instead of + # assert, it should simply return True/False + def compare(self, other): + # test if this object contains the same data as the other + for attr in self._attrs: + try: + assert getattr(self, attr) == getattr(other, attr) + except AssertionError: + print( + "failed attribute", + attr, + getattr(self, attr), + "!=", + getattr(other, attr), + ) + + def __repr__(self): + attrs = [f"{a}={repr(getattr(self, a))}," for a in self._attrs] + attrs = indent("\n".join(attrs), " ") + return f"{self.__class__.__name__}(\n{attrs}\n)" + + +class SourceDescriptor(SimpleDescriptor): + """Simple container for data related to the source + + .. code:: python + + doc = DesignSpaceDocument() + s1 = SourceDescriptor() + s1.path = masterPath1 + s1.name = "master.ufo1" + s1.font = defcon.Font("master.ufo1") + s1.location = dict(weight=0) + s1.familyName = "MasterFamilyName" + s1.styleName = "MasterStyleNameOne" + s1.localisedFamilyName = dict(fr="Caractère") + s1.mutedGlyphNames.append("A") + s1.mutedGlyphNames.append("Z") + doc.addSource(s1) + + """ + + flavor = "source" + _attrs = [ + "filename", + "path", + "name", + "layerName", + "location", + "copyLib", + "copyGroups", + "copyFeatures", + "muteKerning", + "muteInfo", + "mutedGlyphNames", + "familyName", + "styleName", + "localisedFamilyName", + ] + + filename = posixpath_property("_filename") + path = posixpath_property("_path") + + def __init__( + self, + *, + filename=None, + path=None, + font=None, + name=None, + location=None, + designLocation=None, + layerName=None, + familyName=None, + styleName=None, + localisedFamilyName=None, + copyLib=False, + copyInfo=False, + copyGroups=False, + copyFeatures=False, + muteKerning=False, + muteInfo=False, + mutedGlyphNames=None, + ): + self.filename = filename + """string. A relative path to the source file, **as it is in the document**. + + MutatorMath + VarLib. + """ + self.path = path + """The absolute path, calculated from filename.""" + + self.font = font + """Any Python object. Optional. Points to a representation of this + source font that is loaded in memory, as a Python object (e.g. a + ``defcon.Font`` or a ``fontTools.ttFont.TTFont``). + + The default document reader will not fill-in this attribute, and the + default writer will not use this attribute. It is up to the user of + ``designspaceLib`` to either load the resource identified by + ``filename`` and store it in this field, or write the contents of + this field to the disk and make ```filename`` point to that. + """ + + self.name = name + """string. Optional. Unique identifier name for this source. + + MutatorMath + varLib. + """ + + self.designLocation = ( + designLocation if designLocation is not None else location or {} + ) + """dict. Axis values for this source, in design space coordinates. + + MutatorMath + varLib. + + This may be only part of the full design location. + See :meth:`getFullDesignLocation()` + + .. versionadded:: 5.0 + """ + + self.layerName = layerName + """string. The name of the layer in the source to look for + outline data. Default ``None`` which means ``foreground``. + """ + self.familyName = familyName + """string. Family name of this source. Though this data + can be extracted from the font, it can be efficient to have it right + here. + + varLib. + """ + self.styleName = styleName + """string. Style name of this source. Though this data + can be extracted from the font, it can be efficient to have it right + here. + + varLib. + """ + self.localisedFamilyName = localisedFamilyName or {} + """dict. A dictionary of localised family name strings, keyed by + language code. + + If present, will be used to build localized names for all instances. + + .. versionadded:: 5.0 + """ + + self.copyLib = copyLib + """bool. Indicates if the contents of the font.lib need to + be copied to the instances. + + MutatorMath. + + .. deprecated:: 5.0 + """ + self.copyInfo = copyInfo + """bool. Indicates if the non-interpolating font.info needs + to be copied to the instances. + + MutatorMath. + + .. deprecated:: 5.0 + """ + self.copyGroups = copyGroups + """bool. Indicates if the groups need to be copied to the + instances. + + MutatorMath. + + .. deprecated:: 5.0 + """ + self.copyFeatures = copyFeatures + """bool. Indicates if the feature text needs to be + copied to the instances. + + MutatorMath. + + .. deprecated:: 5.0 + """ + self.muteKerning = muteKerning + """bool. Indicates if the kerning data from this source + needs to be muted (i.e. not be part of the calculations). + + MutatorMath only. + """ + self.muteInfo = muteInfo + """bool. Indicated if the interpolating font.info data for + this source needs to be muted. + + MutatorMath only. + """ + self.mutedGlyphNames = mutedGlyphNames or [] + """list. Glyphnames that need to be muted in the + instances. + + MutatorMath only. + """ + + @property + def location(self): + """dict. Axis values for this source, in design space coordinates. + + MutatorMath + varLib. + + .. deprecated:: 5.0 + Use the more explicit alias for this property :attr:`designLocation`. + """ + return self.designLocation + + @location.setter + def location(self, location: Optional[AnisotropicLocationDict]): + self.designLocation = location or {} + + def setFamilyName(self, familyName, languageCode="en"): + """Setter for :attr:`localisedFamilyName` + + .. versionadded:: 5.0 + """ + self.localisedFamilyName[languageCode] = tostr(familyName) + + def getFamilyName(self, languageCode="en"): + """Getter for :attr:`localisedFamilyName` + + .. versionadded:: 5.0 + """ + return self.localisedFamilyName.get(languageCode) + + def getFullDesignLocation( + self, doc: "DesignSpaceDocument" + ) -> AnisotropicLocationDict: + """Get the complete design location of this source, from its + :attr:`designLocation` and the document's axis defaults. + + .. versionadded:: 5.0 + """ + result: AnisotropicLocationDict = {} + for axis in doc.axes: + if axis.name in self.designLocation: + result[axis.name] = self.designLocation[axis.name] + else: + result[axis.name] = axis.map_forward(axis.default) + return result + + +class RuleDescriptor(SimpleDescriptor): + """Represents the rule descriptor element: a set of glyph substitutions to + trigger conditionally in some parts of the designspace. + + .. code:: python + + r1 = RuleDescriptor() + r1.name = "unique.rule.name" + r1.conditionSets.append([dict(name="weight", minimum=-10, maximum=10), dict(...)]) + r1.conditionSets.append([dict(...), dict(...)]) + r1.subs.append(("a", "a.alt")) + + .. code:: xml + + + + + + + + + + + + + + """ + + _attrs = ["name", "conditionSets", "subs"] # what do we need here + + def __init__(self, *, name=None, conditionSets=None, subs=None): + self.name = name + """string. Unique name for this rule. Can be used to reference this rule data.""" + # list of lists of dict(name='aaaa', minimum=0, maximum=1000) + self.conditionSets = conditionSets or [] + """a list of conditionsets. + + - Each conditionset is a list of conditions. + - Each condition is a dict with ``name``, ``minimum`` and ``maximum`` keys. + """ + # list of substitutions stored as tuples of glyphnames ("a", "a.alt") + self.subs = subs or [] + """list of substitutions. + + - Each substitution is stored as tuples of glyphnames, e.g. ("a", "a.alt"). + - Note: By default, rules are applied first, before other text + shaping/OpenType layout, as they are part of the + `Required Variation Alternates OpenType feature `_. + See ref:`rules-element` § Attributes. + """ + + +def evaluateRule(rule, location): + """Return True if any of the rule's conditionsets matches the given location.""" + return any(evaluateConditions(c, location) for c in rule.conditionSets) + + +def evaluateConditions(conditions, location): + """Return True if all the conditions matches the given location. + + - If a condition has no minimum, check for < maximum. + - If a condition has no maximum, check for > minimum. + """ + for cd in conditions: + value = location[cd["name"]] + if cd.get("minimum") is None: + if value > cd["maximum"]: + return False + elif cd.get("maximum") is None: + if cd["minimum"] > value: + return False + elif not cd["minimum"] <= value <= cd["maximum"]: + return False + return True + + +def processRules(rules, location, glyphNames): + """Apply these rules at this location to these glyphnames. + + Return a new list of glyphNames with substitutions applied. + + - rule order matters + """ + newNames = [] + for rule in rules: + if evaluateRule(rule, location): + for name in glyphNames: + swap = False + for a, b in rule.subs: + if name == a: + swap = True + break + if swap: + newNames.append(b) + else: + newNames.append(name) + glyphNames = newNames + newNames = [] + return glyphNames + + +AnisotropicLocationDict = Dict[str, Union[float, Tuple[float, float]]] +SimpleLocationDict = Dict[str, float] + + +class AxisMappingDescriptor(SimpleDescriptor): + """Represents the axis mapping element: mapping an input location + to an output location in the designspace. + + .. code:: python + + m1 = AxisMappingDescriptor() + m1.inputLocation = {"weight": 900, "width": 150} + m1.outputLocation = {"weight": 870} + + .. code:: xml + + + + + + + + + + + + + """ + + _attrs = ["inputLocation", "outputLocation"] + + def __init__(self, *, inputLocation=None, outputLocation=None): + self.inputLocation: SimpleLocationDict = inputLocation or {} + """dict. Axis values for the input of the mapping, in design space coordinates. + + varLib. + + .. versionadded:: 5.1 + """ + self.outputLocation: SimpleLocationDict = outputLocation or {} + """dict. Axis values for the output of the mapping, in design space coordinates. + + varLib. + + .. versionadded:: 5.1 + """ + + +class InstanceDescriptor(SimpleDescriptor): + """Simple container for data related to the instance + + + .. code:: python + + i2 = InstanceDescriptor() + i2.path = instancePath2 + i2.familyName = "InstanceFamilyName" + i2.styleName = "InstanceStyleName" + i2.name = "instance.ufo2" + # anisotropic location + i2.designLocation = dict(weight=500, width=(400,300)) + i2.postScriptFontName = "InstancePostscriptName" + i2.styleMapFamilyName = "InstanceStyleMapFamilyName" + i2.styleMapStyleName = "InstanceStyleMapStyleName" + i2.lib['com.coolDesignspaceApp.specimenText'] = 'Hamburgerwhatever' + doc.addInstance(i2) + """ + + flavor = "instance" + _defaultLanguageCode = "en" + _attrs = [ + "filename", + "path", + "name", + "locationLabel", + "designLocation", + "userLocation", + "familyName", + "styleName", + "postScriptFontName", + "styleMapFamilyName", + "styleMapStyleName", + "localisedFamilyName", + "localisedStyleName", + "localisedStyleMapFamilyName", + "localisedStyleMapStyleName", + "glyphs", + "kerning", + "info", + "lib", + ] + + filename = posixpath_property("_filename") + path = posixpath_property("_path") + + def __init__( + self, + *, + filename=None, + path=None, + font=None, + name=None, + location=None, + locationLabel=None, + designLocation=None, + userLocation=None, + familyName=None, + styleName=None, + postScriptFontName=None, + styleMapFamilyName=None, + styleMapStyleName=None, + localisedFamilyName=None, + localisedStyleName=None, + localisedStyleMapFamilyName=None, + localisedStyleMapStyleName=None, + glyphs=None, + kerning=True, + info=True, + lib=None, + ): + self.filename = filename + """string. Relative path to the instance file, **as it is + in the document**. The file may or may not exist. + + MutatorMath + VarLib. + """ + self.path = path + """string. Absolute path to the instance file, calculated from + the document path and the string in the filename attr. The file may + or may not exist. + + MutatorMath. + """ + self.font = font + """Same as :attr:`SourceDescriptor.font` + + .. seealso:: :attr:`SourceDescriptor.font` + """ + self.name = name + """string. Unique identifier name of the instance, used to + identify it if it needs to be referenced from elsewhere in the + document. + """ + self.locationLabel = locationLabel + """Name of a :class:`LocationLabelDescriptor`. If + provided, the instance should have the same location as the + LocationLabel. + + .. seealso:: + :meth:`getFullDesignLocation` + :meth:`getFullUserLocation` + + .. versionadded:: 5.0 + """ + self.designLocation: AnisotropicLocationDict = ( + designLocation if designLocation is not None else (location or {}) + ) + """dict. Axis values for this instance, in design space coordinates. + + MutatorMath + varLib. + + .. seealso:: This may be only part of the full location. See: + :meth:`getFullDesignLocation` + :meth:`getFullUserLocation` + + .. versionadded:: 5.0 + """ + self.userLocation: SimpleLocationDict = userLocation or {} + """dict. Axis values for this instance, in user space coordinates. + + MutatorMath + varLib. + + .. seealso:: This may be only part of the full location. See: + :meth:`getFullDesignLocation` + :meth:`getFullUserLocation` + + .. versionadded:: 5.0 + """ + self.familyName = familyName + """string. Family name of this instance. + + MutatorMath + varLib. + """ + self.styleName = styleName + """string. Style name of this instance. + + MutatorMath + varLib. + """ + self.postScriptFontName = postScriptFontName + """string. Postscript fontname for this instance. + + MutatorMath + varLib. + """ + self.styleMapFamilyName = styleMapFamilyName + """string. StyleMap familyname for this instance. + + MutatorMath + varLib. + """ + self.styleMapStyleName = styleMapStyleName + """string. StyleMap stylename for this instance. + + MutatorMath + varLib. + """ + self.localisedFamilyName = localisedFamilyName or {} + """dict. A dictionary of localised family name + strings, keyed by language code. + """ + self.localisedStyleName = localisedStyleName or {} + """dict. A dictionary of localised stylename + strings, keyed by language code. + """ + self.localisedStyleMapFamilyName = localisedStyleMapFamilyName or {} + """A dictionary of localised style map + familyname strings, keyed by language code. + """ + self.localisedStyleMapStyleName = localisedStyleMapStyleName or {} + """A dictionary of localised style map + stylename strings, keyed by language code. + """ + self.glyphs = glyphs or {} + """dict for special master definitions for glyphs. If glyphs + need special masters (to record the results of executed rules for + example). + + MutatorMath. + + .. deprecated:: 5.0 + Use rules or sparse sources instead. + """ + self.kerning = kerning + """ bool. Indicates if this instance needs its kerning + calculated. + + MutatorMath. + + .. deprecated:: 5.0 + """ + self.info = info + """bool. Indicated if this instance needs the interpolating + font.info calculated. + + .. deprecated:: 5.0 + """ + + self.lib = lib or {} + """Custom data associated with this instance.""" + + @property + def location(self): + """dict. Axis values for this instance. + + MutatorMath + varLib. + + .. deprecated:: 5.0 + Use the more explicit alias for this property :attr:`designLocation`. + """ + return self.designLocation + + @location.setter + def location(self, location: Optional[AnisotropicLocationDict]): + self.designLocation = location or {} + + def setStyleName(self, styleName, languageCode="en"): + """These methods give easier access to the localised names.""" + self.localisedStyleName[languageCode] = tostr(styleName) + + def getStyleName(self, languageCode="en"): + return self.localisedStyleName.get(languageCode) + + def setFamilyName(self, familyName, languageCode="en"): + self.localisedFamilyName[languageCode] = tostr(familyName) + + def getFamilyName(self, languageCode="en"): + return self.localisedFamilyName.get(languageCode) + + def setStyleMapStyleName(self, styleMapStyleName, languageCode="en"): + self.localisedStyleMapStyleName[languageCode] = tostr(styleMapStyleName) + + def getStyleMapStyleName(self, languageCode="en"): + return self.localisedStyleMapStyleName.get(languageCode) + + def setStyleMapFamilyName(self, styleMapFamilyName, languageCode="en"): + self.localisedStyleMapFamilyName[languageCode] = tostr(styleMapFamilyName) + + def getStyleMapFamilyName(self, languageCode="en"): + return self.localisedStyleMapFamilyName.get(languageCode) + + def clearLocation(self, axisName: Optional[str] = None): + """Clear all location-related fields. Ensures that + :attr:``designLocation`` and :attr:``userLocation`` are dictionaries + (possibly empty if clearing everything). + + In order to update the location of this instance wholesale, a user + should first clear all the fields, then change the field(s) for which + they have data. + + .. code:: python + + instance.clearLocation() + instance.designLocation = {'Weight': (34, 36.5), 'Width': 100} + instance.userLocation = {'Opsz': 16} + + In order to update a single axis location, the user should only clear + that axis, then edit the values: + + .. code:: python + + instance.clearLocation('Weight') + instance.designLocation['Weight'] = (34, 36.5) + + Args: + axisName: if provided, only clear the location for that axis. + + .. versionadded:: 5.0 + """ + self.locationLabel = None + if axisName is None: + self.designLocation = {} + self.userLocation = {} + else: + if self.designLocation is None: + self.designLocation = {} + if axisName in self.designLocation: + del self.designLocation[axisName] + if self.userLocation is None: + self.userLocation = {} + if axisName in self.userLocation: + del self.userLocation[axisName] + + def getLocationLabelDescriptor( + self, doc: "DesignSpaceDocument" + ) -> Optional[LocationLabelDescriptor]: + """Get the :class:`LocationLabelDescriptor` instance that matches + this instances's :attr:`locationLabel`. + + Raises if the named label can't be found. + + .. versionadded:: 5.0 + """ + if self.locationLabel is None: + return None + label = doc.getLocationLabel(self.locationLabel) + if label is None: + raise DesignSpaceDocumentError( + "InstanceDescriptor.getLocationLabelDescriptor(): " + f"unknown location label `{self.locationLabel}` in instance `{self.name}`." + ) + return label + + def getFullDesignLocation( + self, doc: "DesignSpaceDocument" + ) -> AnisotropicLocationDict: + """Get the complete design location of this instance, by combining data + from the various location fields, default axis values and mappings, and + top-level location labels. + + The source of truth for this instance's location is determined for each + axis independently by taking the first not-None field in this list: + + - ``locationLabel``: the location along this axis is the same as the + matching STAT format 4 label. No anisotropy. + - ``designLocation[axisName]``: the explicit design location along this + axis, possibly anisotropic. + - ``userLocation[axisName]``: the explicit user location along this + axis. No anisotropy. + - ``axis.default``: default axis value. No anisotropy. + + .. versionadded:: 5.0 + """ + label = self.getLocationLabelDescriptor(doc) + if label is not None: + return doc.map_forward(label.userLocation) # type: ignore + result: AnisotropicLocationDict = {} + for axis in doc.axes: + if axis.name in self.designLocation: + result[axis.name] = self.designLocation[axis.name] + elif axis.name in self.userLocation: + result[axis.name] = axis.map_forward(self.userLocation[axis.name]) + else: + result[axis.name] = axis.map_forward(axis.default) + return result + + def getFullUserLocation(self, doc: "DesignSpaceDocument") -> SimpleLocationDict: + """Get the complete user location for this instance. + + .. seealso:: :meth:`getFullDesignLocation` + + .. versionadded:: 5.0 + """ + return doc.map_backward(self.getFullDesignLocation(doc)) + + +def tagForAxisName(name): + # try to find or make a tag name for this axis name + names = { + "weight": ("wght", dict(en="Weight")), + "width": ("wdth", dict(en="Width")), + "optical": ("opsz", dict(en="Optical Size")), + "slant": ("slnt", dict(en="Slant")), + "italic": ("ital", dict(en="Italic")), + } + if name.lower() in names: + return names[name.lower()] + if len(name) < 4: + tag = name + "*" * (4 - len(name)) + else: + tag = name[:4] + return tag, dict(en=name) + + +class AbstractAxisDescriptor(SimpleDescriptor): + flavor = "axis" + + def __init__( + self, + *, + tag=None, + name=None, + labelNames=None, + hidden=False, + map=None, + axisOrdering=None, + axisLabels=None, + ): + # opentype tag for this axis + self.tag = tag + """string. Four letter tag for this axis. Some might be + registered at the `OpenType + specification `__. + Privately-defined axis tags must begin with an uppercase letter and + use only uppercase letters or digits. + """ + # name of the axis used in locations + self.name = name + """string. Name of the axis as it is used in the location dicts. + + MutatorMath + varLib. + """ + # names for UI purposes, if this is not a standard axis, + self.labelNames = labelNames or {} + """dict. When defining a non-registered axis, it will be + necessary to define user-facing readable names for the axis. Keyed by + xml:lang code. Values are required to be ``unicode`` strings, even if + they only contain ASCII characters. + """ + self.hidden = hidden + """bool. Whether this axis should be hidden in user interfaces. + """ + self.map = map or [] + """list of input / output values that can describe a warp of user space + to design space coordinates. If no map values are present, it is assumed + user space is the same as design space, as in [(minimum, minimum), + (maximum, maximum)]. + + varLib. + """ + self.axisOrdering = axisOrdering + """STAT table field ``axisOrdering``. + + See: `OTSpec STAT Axis Record `_ + + .. versionadded:: 5.0 + """ + self.axisLabels: List[AxisLabelDescriptor] = axisLabels or [] + """STAT table entries for Axis Value Tables format 1, 2, 3. + + See: `OTSpec STAT Axis Value Tables `_ + + .. versionadded:: 5.0 + """ + + +class AxisDescriptor(AbstractAxisDescriptor): + """Simple container for the axis data. + + Add more localisations? + + .. code:: python + + a1 = AxisDescriptor() + a1.minimum = 1 + a1.maximum = 1000 + a1.default = 400 + a1.name = "weight" + a1.tag = "wght" + a1.labelNames['fa-IR'] = "قطر" + a1.labelNames['en'] = "Wéíght" + a1.map = [(1.0, 10.0), (400.0, 66.0), (1000.0, 990.0)] + a1.axisOrdering = 1 + a1.axisLabels = [ + AxisLabelDescriptor(name="Regular", userValue=400, elidable=True) + ] + doc.addAxis(a1) + """ + + _attrs = [ + "tag", + "name", + "maximum", + "minimum", + "default", + "map", + "axisOrdering", + "axisLabels", + ] + + def __init__( + self, + *, + tag=None, + name=None, + labelNames=None, + minimum=None, + default=None, + maximum=None, + hidden=False, + map=None, + axisOrdering=None, + axisLabels=None, + ): + super().__init__( + tag=tag, + name=name, + labelNames=labelNames, + hidden=hidden, + map=map, + axisOrdering=axisOrdering, + axisLabels=axisLabels, + ) + self.minimum = minimum + """number. The minimum value for this axis in user space. + + MutatorMath + varLib. + """ + self.maximum = maximum + """number. The maximum value for this axis in user space. + + MutatorMath + varLib. + """ + self.default = default + """number. The default value for this axis, i.e. when a new location is + created, this is the value this axis will get in user space. + + MutatorMath + varLib. + """ + + def serialize(self): + # output to a dict, used in testing + return dict( + tag=self.tag, + name=self.name, + labelNames=self.labelNames, + maximum=self.maximum, + minimum=self.minimum, + default=self.default, + hidden=self.hidden, + map=self.map, + axisOrdering=self.axisOrdering, + axisLabels=self.axisLabels, + ) + + def map_forward(self, v): + """Maps value from axis mapping's input (user) to output (design).""" + from fontTools.varLib.models import piecewiseLinearMap + + if not self.map: + return v + return piecewiseLinearMap(v, {k: v for k, v in self.map}) + + def map_backward(self, v): + """Maps value from axis mapping's output (design) to input (user).""" + from fontTools.varLib.models import piecewiseLinearMap + + if isinstance(v, tuple): + v = v[0] + if not self.map: + return v + return piecewiseLinearMap(v, {v: k for k, v in self.map}) + + +class DiscreteAxisDescriptor(AbstractAxisDescriptor): + """Container for discrete axis data. + + Use this for axes that do not interpolate. The main difference from a + continuous axis is that a continuous axis has a ``minimum`` and ``maximum``, + while a discrete axis has a list of ``values``. + + Example: an Italic axis with 2 stops, Roman and Italic, that are not + compatible. The axis still allows to bind together the full font family, + which is useful for the STAT table, however it can't become a variation + axis in a VF. + + .. code:: python + + a2 = DiscreteAxisDescriptor() + a2.values = [0, 1] + a2.default = 0 + a2.name = "Italic" + a2.tag = "ITAL" + a2.labelNames['fr'] = "Italique" + a2.map = [(0, 0), (1, -11)] + a2.axisOrdering = 2 + a2.axisLabels = [ + AxisLabelDescriptor(name="Roman", userValue=0, elidable=True) + ] + doc.addAxis(a2) + + .. versionadded:: 5.0 + """ + + flavor = "axis" + _attrs = ("tag", "name", "values", "default", "map", "axisOrdering", "axisLabels") + + def __init__( + self, + *, + tag=None, + name=None, + labelNames=None, + values=None, + default=None, + hidden=False, + map=None, + axisOrdering=None, + axisLabels=None, + ): + super().__init__( + tag=tag, + name=name, + labelNames=labelNames, + hidden=hidden, + map=map, + axisOrdering=axisOrdering, + axisLabels=axisLabels, + ) + self.default: float = default + """The default value for this axis, i.e. when a new location is + created, this is the value this axis will get in user space. + + However, this default value is less important than in continuous axes: + + - it doesn't define the "neutral" version of outlines from which + deltas would apply, as this axis does not interpolate. + - it doesn't provide the reference glyph set for the designspace, as + fonts at each value can have different glyph sets. + """ + self.values: List[float] = values or [] + """List of possible values for this axis. Contrary to continuous axes, + only the values in this list can be taken by the axis, nothing in-between. + """ + + def map_forward(self, value): + """Maps value from axis mapping's input to output. + + Returns value unchanged if no mapping entry is found. + + Note: for discrete axes, each value must have its mapping entry, if + you intend that value to be mapped. + """ + return next((v for k, v in self.map if k == value), value) + + def map_backward(self, value): + """Maps value from axis mapping's output to input. + + Returns value unchanged if no mapping entry is found. + + Note: for discrete axes, each value must have its mapping entry, if + you intend that value to be mapped. + """ + if isinstance(value, tuple): + value = value[0] + return next((k for k, v in self.map if v == value), value) + + +class AxisLabelDescriptor(SimpleDescriptor): + """Container for axis label data. + + Analogue of OpenType's STAT data for a single axis (formats 1, 2 and 3). + All values are user values. + See: `OTSpec STAT Axis value table, format 1, 2, 3 `_ + + The STAT format of the Axis value depends on which field are filled-in, + see :meth:`getFormat` + + .. versionadded:: 5.0 + """ + + flavor = "label" + _attrs = ( + "userMinimum", + "userValue", + "userMaximum", + "name", + "elidable", + "olderSibling", + "linkedUserValue", + "labelNames", + ) + + def __init__( + self, + *, + name, + userValue, + userMinimum=None, + userMaximum=None, + elidable=False, + olderSibling=False, + linkedUserValue=None, + labelNames=None, + ): + self.userMinimum: Optional[float] = userMinimum + """STAT field ``rangeMinValue`` (format 2).""" + self.userValue: float = userValue + """STAT field ``value`` (format 1, 3) or ``nominalValue`` (format 2).""" + self.userMaximum: Optional[float] = userMaximum + """STAT field ``rangeMaxValue`` (format 2).""" + self.name: str = name + """Label for this axis location, STAT field ``valueNameID``.""" + self.elidable: bool = elidable + """STAT flag ``ELIDABLE_AXIS_VALUE_NAME``. + + See: `OTSpec STAT Flags `_ + """ + self.olderSibling: bool = olderSibling + """STAT flag ``OLDER_SIBLING_FONT_ATTRIBUTE``. + + See: `OTSpec STAT Flags `_ + """ + self.linkedUserValue: Optional[float] = linkedUserValue + """STAT field ``linkedValue`` (format 3).""" + self.labelNames: MutableMapping[str, str] = labelNames or {} + """User-facing translations of this location's label. Keyed by + ``xml:lang`` code. + """ + + def getFormat(self) -> int: + """Determine which format of STAT Axis value to use to encode this label. + + =========== ========= =========== =========== =============== + STAT Format userValue userMinimum userMaximum linkedUserValue + =========== ========= =========== =========== =============== + 1 ✅ ❌ ❌ ❌ + 2 ✅ ✅ ✅ ❌ + 3 ✅ ❌ ❌ ✅ + =========== ========= =========== =========== =============== + """ + if self.linkedUserValue is not None: + return 3 + if self.userMinimum is not None or self.userMaximum is not None: + return 2 + return 1 + + @property + def defaultName(self) -> str: + """Return the English name from :attr:`labelNames` or the :attr:`name`.""" + return self.labelNames.get("en") or self.name + + +class LocationLabelDescriptor(SimpleDescriptor): + """Container for location label data. + + Analogue of OpenType's STAT data for a free-floating location (format 4). + All values are user values. + + See: `OTSpec STAT Axis value table, format 4 `_ + + .. versionadded:: 5.0 + """ + + flavor = "label" + _attrs = ("name", "elidable", "olderSibling", "userLocation", "labelNames") + + def __init__( + self, + *, + name, + userLocation, + elidable=False, + olderSibling=False, + labelNames=None, + ): + self.name: str = name + """Label for this named location, STAT field ``valueNameID``.""" + self.userLocation: SimpleLocationDict = userLocation or {} + """Location in user coordinates along each axis. + + If an axis is not mentioned, it is assumed to be at its default location. + + .. seealso:: This may be only part of the full location. See: + :meth:`getFullUserLocation` + """ + self.elidable: bool = elidable + """STAT flag ``ELIDABLE_AXIS_VALUE_NAME``. + + See: `OTSpec STAT Flags `_ + """ + self.olderSibling: bool = olderSibling + """STAT flag ``OLDER_SIBLING_FONT_ATTRIBUTE``. + + See: `OTSpec STAT Flags `_ + """ + self.labelNames: Dict[str, str] = labelNames or {} + """User-facing translations of this location's label. Keyed by + xml:lang code. + """ + + @property + def defaultName(self) -> str: + """Return the English name from :attr:`labelNames` or the :attr:`name`.""" + return self.labelNames.get("en") or self.name + + def getFullUserLocation(self, doc: "DesignSpaceDocument") -> SimpleLocationDict: + """Get the complete user location of this label, by combining data + from the explicit user location and default axis values. + + .. versionadded:: 5.0 + """ + return { + axis.name: self.userLocation.get(axis.name, axis.default) + for axis in doc.axes + } + + +class VariableFontDescriptor(SimpleDescriptor): + """Container for variable fonts, sub-spaces of the Designspace. + + Use-cases: + + - From a single DesignSpace with discrete axes, define 1 variable font + per value on the discrete axes. Before version 5, you would have needed + 1 DesignSpace per such variable font, and a lot of data duplication. + - From a big variable font with many axes, define subsets of that variable + font that only include some axes and freeze other axes at a given location. + + .. versionadded:: 5.0 + """ + + flavor = "variable-font" + _attrs = ("filename", "axisSubsets", "lib") + + filename = posixpath_property("_filename") + + def __init__(self, *, name, filename=None, axisSubsets=None, lib=None): + self.name: str = name + """string, required. Name of this variable to identify it during the + build process and from other parts of the document, and also as a + filename in case the filename property is empty. + + VarLib. + """ + self.filename: str = filename + """string, optional. Relative path to the variable font file, **as it is + in the document**. The file may or may not exist. + + If not specified, the :attr:`name` will be used as a basename for the file. + """ + self.axisSubsets: List[ + Union[RangeAxisSubsetDescriptor, ValueAxisSubsetDescriptor] + ] = (axisSubsets or []) + """Axis subsets to include in this variable font. + + If an axis is not mentioned, assume that we only want the default + location of that axis (same as a :class:`ValueAxisSubsetDescriptor`). + """ + self.lib: MutableMapping[str, Any] = lib or {} + """Custom data associated with this variable font.""" + + +class RangeAxisSubsetDescriptor(SimpleDescriptor): + """Subset of a continuous axis to include in a variable font. + + .. versionadded:: 5.0 + """ + + flavor = "axis-subset" + _attrs = ("name", "userMinimum", "userDefault", "userMaximum") + + def __init__( + self, *, name, userMinimum=-math.inf, userDefault=None, userMaximum=math.inf + ): + self.name: str = name + """Name of the :class:`AxisDescriptor` to subset.""" + self.userMinimum: float = userMinimum + """New minimum value of the axis in the target variable font. + If not specified, assume the same minimum value as the full axis. + (default = ``-math.inf``) + """ + self.userDefault: Optional[float] = userDefault + """New default value of the axis in the target variable font. + If not specified, assume the same default value as the full axis. + (default = ``None``) + """ + self.userMaximum: float = userMaximum + """New maximum value of the axis in the target variable font. + If not specified, assume the same maximum value as the full axis. + (default = ``math.inf``) + """ + + +class ValueAxisSubsetDescriptor(SimpleDescriptor): + """Single value of a discrete or continuous axis to use in a variable font. + + .. versionadded:: 5.0 + """ + + flavor = "axis-subset" + _attrs = ("name", "userValue") + + def __init__(self, *, name, userValue): + self.name: str = name + """Name of the :class:`AxisDescriptor` or :class:`DiscreteAxisDescriptor` + to "snapshot" or "freeze". + """ + self.userValue: float = userValue + """Value in user coordinates at which to freeze the given axis.""" + + +class BaseDocWriter(object): + _whiteSpace = " " + axisDescriptorClass = AxisDescriptor + discreteAxisDescriptorClass = DiscreteAxisDescriptor + axisLabelDescriptorClass = AxisLabelDescriptor + axisMappingDescriptorClass = AxisMappingDescriptor + locationLabelDescriptorClass = LocationLabelDescriptor + ruleDescriptorClass = RuleDescriptor + sourceDescriptorClass = SourceDescriptor + variableFontDescriptorClass = VariableFontDescriptor + valueAxisSubsetDescriptorClass = ValueAxisSubsetDescriptor + rangeAxisSubsetDescriptorClass = RangeAxisSubsetDescriptor + instanceDescriptorClass = InstanceDescriptor + + @classmethod + def getAxisDecriptor(cls): + return cls.axisDescriptorClass() + + @classmethod + def getAxisMappingDescriptor(cls): + return cls.axisMappingDescriptorClass() + + @classmethod + def getSourceDescriptor(cls): + return cls.sourceDescriptorClass() + + @classmethod + def getInstanceDescriptor(cls): + return cls.instanceDescriptorClass() + + @classmethod + def getRuleDescriptor(cls): + return cls.ruleDescriptorClass() + + def __init__(self, documentPath, documentObject: DesignSpaceDocument): + self.path = documentPath + self.documentObject = documentObject + self.effectiveFormatTuple = self._getEffectiveFormatTuple() + self.root = ET.Element("designspace") + + def write(self, pretty=True, encoding="UTF-8", xml_declaration=True): + self.root.attrib["format"] = ".".join(str(i) for i in self.effectiveFormatTuple) + + if ( + self.documentObject.axes + or self.documentObject.axisMappings + or self.documentObject.elidedFallbackName is not None + ): + axesElement = ET.Element("axes") + if self.documentObject.elidedFallbackName is not None: + axesElement.attrib[ + "elidedfallbackname" + ] = self.documentObject.elidedFallbackName + self.root.append(axesElement) + for axisObject in self.documentObject.axes: + self._addAxis(axisObject) + + if self.documentObject.axisMappings: + mappingsElement = ET.Element("mappings") + self.root.findall(".axes")[0].append(mappingsElement) + for mappingObject in self.documentObject.axisMappings: + self._addAxisMapping(mappingsElement, mappingObject) + + if self.documentObject.locationLabels: + labelsElement = ET.Element("labels") + for labelObject in self.documentObject.locationLabels: + self._addLocationLabel(labelsElement, labelObject) + self.root.append(labelsElement) + + if self.documentObject.rules: + if getattr(self.documentObject, "rulesProcessingLast", False): + attributes = {"processing": "last"} + else: + attributes = {} + self.root.append(ET.Element("rules", attributes)) + for ruleObject in self.documentObject.rules: + self._addRule(ruleObject) + + if self.documentObject.sources: + self.root.append(ET.Element("sources")) + for sourceObject in self.documentObject.sources: + self._addSource(sourceObject) + + if self.documentObject.variableFonts: + variableFontsElement = ET.Element("variable-fonts") + for variableFont in self.documentObject.variableFonts: + self._addVariableFont(variableFontsElement, variableFont) + self.root.append(variableFontsElement) + + if self.documentObject.instances: + self.root.append(ET.Element("instances")) + for instanceObject in self.documentObject.instances: + self._addInstance(instanceObject) + + if self.documentObject.lib: + self._addLib(self.root, self.documentObject.lib, 2) + + tree = ET.ElementTree(self.root) + tree.write( + self.path, + encoding=encoding, + method="xml", + xml_declaration=xml_declaration, + pretty_print=pretty, + ) + + def _getEffectiveFormatTuple(self): + """Try to use the version specified in the document, or a sufficiently + recent version to be able to encode what the document contains. + """ + minVersion = self.documentObject.formatTuple + if ( + any( + hasattr(axis, "values") + or axis.axisOrdering is not None + or axis.axisLabels + for axis in self.documentObject.axes + ) + or self.documentObject.locationLabels + or any(source.localisedFamilyName for source in self.documentObject.sources) + or self.documentObject.variableFonts + or any( + instance.locationLabel or instance.userLocation + for instance in self.documentObject.instances + ) + ): + if minVersion < (5, 0): + minVersion = (5, 0) + if self.documentObject.axisMappings: + if minVersion < (5, 1): + minVersion = (5, 1) + return minVersion + + def _makeLocationElement(self, locationObject, name=None): + """Convert Location dict to a locationElement.""" + locElement = ET.Element("location") + if name is not None: + locElement.attrib["name"] = name + validatedLocation = self.documentObject.newDefaultLocation() + for axisName, axisValue in locationObject.items(): + if axisName in validatedLocation: + # only accept values we know + validatedLocation[axisName] = axisValue + for dimensionName, dimensionValue in validatedLocation.items(): + dimElement = ET.Element("dimension") + dimElement.attrib["name"] = dimensionName + if type(dimensionValue) == tuple: + dimElement.attrib["xvalue"] = self.intOrFloat(dimensionValue[0]) + dimElement.attrib["yvalue"] = self.intOrFloat(dimensionValue[1]) + else: + dimElement.attrib["xvalue"] = self.intOrFloat(dimensionValue) + locElement.append(dimElement) + return locElement, validatedLocation + + def intOrFloat(self, num): + if int(num) == num: + return "%d" % num + return ("%f" % num).rstrip("0").rstrip(".") + + def _addRule(self, ruleObject): + # if none of the conditions have minimum or maximum values, do not add the rule. + ruleElement = ET.Element("rule") + if ruleObject.name is not None: + ruleElement.attrib["name"] = ruleObject.name + for conditions in ruleObject.conditionSets: + conditionsetElement = ET.Element("conditionset") + for cond in conditions: + if cond.get("minimum") is None and cond.get("maximum") is None: + # neither is defined, don't add this condition + continue + conditionElement = ET.Element("condition") + conditionElement.attrib["name"] = cond.get("name") + if cond.get("minimum") is not None: + conditionElement.attrib["minimum"] = self.intOrFloat( + cond.get("minimum") + ) + if cond.get("maximum") is not None: + conditionElement.attrib["maximum"] = self.intOrFloat( + cond.get("maximum") + ) + conditionsetElement.append(conditionElement) + if len(conditionsetElement): + ruleElement.append(conditionsetElement) + for sub in ruleObject.subs: + subElement = ET.Element("sub") + subElement.attrib["name"] = sub[0] + subElement.attrib["with"] = sub[1] + ruleElement.append(subElement) + if len(ruleElement): + self.root.findall(".rules")[0].append(ruleElement) + + def _addAxis(self, axisObject): + axisElement = ET.Element("axis") + axisElement.attrib["tag"] = axisObject.tag + axisElement.attrib["name"] = axisObject.name + self._addLabelNames(axisElement, axisObject.labelNames) + if axisObject.map: + for inputValue, outputValue in axisObject.map: + mapElement = ET.Element("map") + mapElement.attrib["input"] = self.intOrFloat(inputValue) + mapElement.attrib["output"] = self.intOrFloat(outputValue) + axisElement.append(mapElement) + if axisObject.axisOrdering or axisObject.axisLabels: + labelsElement = ET.Element("labels") + if axisObject.axisOrdering is not None: + labelsElement.attrib["ordering"] = str(axisObject.axisOrdering) + for label in axisObject.axisLabels: + self._addAxisLabel(labelsElement, label) + axisElement.append(labelsElement) + if hasattr(axisObject, "minimum"): + axisElement.attrib["minimum"] = self.intOrFloat(axisObject.minimum) + axisElement.attrib["maximum"] = self.intOrFloat(axisObject.maximum) + elif hasattr(axisObject, "values"): + axisElement.attrib["values"] = " ".join( + self.intOrFloat(v) for v in axisObject.values + ) + axisElement.attrib["default"] = self.intOrFloat(axisObject.default) + if axisObject.hidden: + axisElement.attrib["hidden"] = "1" + self.root.findall(".axes")[0].append(axisElement) + + def _addAxisMapping(self, mappingsElement, mappingObject): + mappingElement = ET.Element("mapping") + for what in ("inputLocation", "outputLocation"): + whatObject = getattr(mappingObject, what, None) + if whatObject is None: + continue + whatElement = ET.Element(what[:-8]) + mappingElement.append(whatElement) + + for name, value in whatObject.items(): + dimensionElement = ET.Element("dimension") + dimensionElement.attrib["name"] = name + dimensionElement.attrib["xvalue"] = self.intOrFloat(value) + whatElement.append(dimensionElement) + + mappingsElement.append(mappingElement) + + def _addAxisLabel( + self, axisElement: ET.Element, label: AxisLabelDescriptor + ) -> None: + labelElement = ET.Element("label") + labelElement.attrib["uservalue"] = self.intOrFloat(label.userValue) + if label.userMinimum is not None: + labelElement.attrib["userminimum"] = self.intOrFloat(label.userMinimum) + if label.userMaximum is not None: + labelElement.attrib["usermaximum"] = self.intOrFloat(label.userMaximum) + labelElement.attrib["name"] = label.name + if label.elidable: + labelElement.attrib["elidable"] = "true" + if label.olderSibling: + labelElement.attrib["oldersibling"] = "true" + if label.linkedUserValue is not None: + labelElement.attrib["linkeduservalue"] = self.intOrFloat( + label.linkedUserValue + ) + self._addLabelNames(labelElement, label.labelNames) + axisElement.append(labelElement) + + def _addLabelNames(self, parentElement, labelNames): + for languageCode, labelName in sorted(labelNames.items()): + languageElement = ET.Element("labelname") + languageElement.attrib[XML_LANG] = languageCode + languageElement.text = labelName + parentElement.append(languageElement) + + def _addLocationLabel( + self, parentElement: ET.Element, label: LocationLabelDescriptor + ) -> None: + labelElement = ET.Element("label") + labelElement.attrib["name"] = label.name + if label.elidable: + labelElement.attrib["elidable"] = "true" + if label.olderSibling: + labelElement.attrib["oldersibling"] = "true" + self._addLabelNames(labelElement, label.labelNames) + self._addLocationElement(labelElement, userLocation=label.userLocation) + parentElement.append(labelElement) + + def _addLocationElement( + self, + parentElement, + *, + designLocation: AnisotropicLocationDict = None, + userLocation: SimpleLocationDict = None, + ): + locElement = ET.Element("location") + for axis in self.documentObject.axes: + if designLocation is not None and axis.name in designLocation: + dimElement = ET.Element("dimension") + dimElement.attrib["name"] = axis.name + value = designLocation[axis.name] + if isinstance(value, tuple): + dimElement.attrib["xvalue"] = self.intOrFloat(value[0]) + dimElement.attrib["yvalue"] = self.intOrFloat(value[1]) + else: + dimElement.attrib["xvalue"] = self.intOrFloat(value) + locElement.append(dimElement) + elif userLocation is not None and axis.name in userLocation: + dimElement = ET.Element("dimension") + dimElement.attrib["name"] = axis.name + value = userLocation[axis.name] + dimElement.attrib["uservalue"] = self.intOrFloat(value) + locElement.append(dimElement) + if len(locElement) > 0: + parentElement.append(locElement) + + def _addInstance(self, instanceObject): + instanceElement = ET.Element("instance") + if instanceObject.name is not None: + instanceElement.attrib["name"] = instanceObject.name + if instanceObject.locationLabel is not None: + instanceElement.attrib["location"] = instanceObject.locationLabel + if instanceObject.familyName is not None: + instanceElement.attrib["familyname"] = instanceObject.familyName + if instanceObject.styleName is not None: + instanceElement.attrib["stylename"] = instanceObject.styleName + # add localisations + if instanceObject.localisedStyleName: + languageCodes = list(instanceObject.localisedStyleName.keys()) + languageCodes.sort() + for code in languageCodes: + if code == "en": + continue # already stored in the element attribute + localisedStyleNameElement = ET.Element("stylename") + localisedStyleNameElement.attrib[XML_LANG] = code + localisedStyleNameElement.text = instanceObject.getStyleName(code) + instanceElement.append(localisedStyleNameElement) + if instanceObject.localisedFamilyName: + languageCodes = list(instanceObject.localisedFamilyName.keys()) + languageCodes.sort() + for code in languageCodes: + if code == "en": + continue # already stored in the element attribute + localisedFamilyNameElement = ET.Element("familyname") + localisedFamilyNameElement.attrib[XML_LANG] = code + localisedFamilyNameElement.text = instanceObject.getFamilyName(code) + instanceElement.append(localisedFamilyNameElement) + if instanceObject.localisedStyleMapStyleName: + languageCodes = list(instanceObject.localisedStyleMapStyleName.keys()) + languageCodes.sort() + for code in languageCodes: + if code == "en": + continue + localisedStyleMapStyleNameElement = ET.Element("stylemapstylename") + localisedStyleMapStyleNameElement.attrib[XML_LANG] = code + localisedStyleMapStyleNameElement.text = ( + instanceObject.getStyleMapStyleName(code) + ) + instanceElement.append(localisedStyleMapStyleNameElement) + if instanceObject.localisedStyleMapFamilyName: + languageCodes = list(instanceObject.localisedStyleMapFamilyName.keys()) + languageCodes.sort() + for code in languageCodes: + if code == "en": + continue + localisedStyleMapFamilyNameElement = ET.Element("stylemapfamilyname") + localisedStyleMapFamilyNameElement.attrib[XML_LANG] = code + localisedStyleMapFamilyNameElement.text = ( + instanceObject.getStyleMapFamilyName(code) + ) + instanceElement.append(localisedStyleMapFamilyNameElement) + + if self.effectiveFormatTuple >= (5, 0): + if instanceObject.locationLabel is None: + self._addLocationElement( + instanceElement, + designLocation=instanceObject.designLocation, + userLocation=instanceObject.userLocation, + ) + else: + # Pre-version 5.0 code was validating and filling in the location + # dict while writing it out, as preserved below. + if instanceObject.location is not None: + locationElement, instanceObject.location = self._makeLocationElement( + instanceObject.location + ) + instanceElement.append(locationElement) + if instanceObject.filename is not None: + instanceElement.attrib["filename"] = instanceObject.filename + if instanceObject.postScriptFontName is not None: + instanceElement.attrib[ + "postscriptfontname" + ] = instanceObject.postScriptFontName + if instanceObject.styleMapFamilyName is not None: + instanceElement.attrib[ + "stylemapfamilyname" + ] = instanceObject.styleMapFamilyName + if instanceObject.styleMapStyleName is not None: + instanceElement.attrib[ + "stylemapstylename" + ] = instanceObject.styleMapStyleName + if self.effectiveFormatTuple < (5, 0): + # Deprecated members as of version 5.0 + if instanceObject.glyphs: + if instanceElement.findall(".glyphs") == []: + glyphsElement = ET.Element("glyphs") + instanceElement.append(glyphsElement) + glyphsElement = instanceElement.findall(".glyphs")[0] + for glyphName, data in sorted(instanceObject.glyphs.items()): + glyphElement = self._writeGlyphElement( + instanceElement, instanceObject, glyphName, data + ) + glyphsElement.append(glyphElement) + if instanceObject.kerning: + kerningElement = ET.Element("kerning") + instanceElement.append(kerningElement) + if instanceObject.info: + infoElement = ET.Element("info") + instanceElement.append(infoElement) + self._addLib(instanceElement, instanceObject.lib, 4) + self.root.findall(".instances")[0].append(instanceElement) + + def _addSource(self, sourceObject): + sourceElement = ET.Element("source") + if sourceObject.filename is not None: + sourceElement.attrib["filename"] = sourceObject.filename + if sourceObject.name is not None: + if sourceObject.name.find("temp_master") != 0: + # do not save temporary source names + sourceElement.attrib["name"] = sourceObject.name + if sourceObject.familyName is not None: + sourceElement.attrib["familyname"] = sourceObject.familyName + if sourceObject.styleName is not None: + sourceElement.attrib["stylename"] = sourceObject.styleName + if sourceObject.layerName is not None: + sourceElement.attrib["layer"] = sourceObject.layerName + if sourceObject.localisedFamilyName: + languageCodes = list(sourceObject.localisedFamilyName.keys()) + languageCodes.sort() + for code in languageCodes: + if code == "en": + continue # already stored in the element attribute + localisedFamilyNameElement = ET.Element("familyname") + localisedFamilyNameElement.attrib[XML_LANG] = code + localisedFamilyNameElement.text = sourceObject.getFamilyName(code) + sourceElement.append(localisedFamilyNameElement) + if sourceObject.copyLib: + libElement = ET.Element("lib") + libElement.attrib["copy"] = "1" + sourceElement.append(libElement) + if sourceObject.copyGroups: + groupsElement = ET.Element("groups") + groupsElement.attrib["copy"] = "1" + sourceElement.append(groupsElement) + if sourceObject.copyFeatures: + featuresElement = ET.Element("features") + featuresElement.attrib["copy"] = "1" + sourceElement.append(featuresElement) + if sourceObject.copyInfo or sourceObject.muteInfo: + infoElement = ET.Element("info") + if sourceObject.copyInfo: + infoElement.attrib["copy"] = "1" + if sourceObject.muteInfo: + infoElement.attrib["mute"] = "1" + sourceElement.append(infoElement) + if sourceObject.muteKerning: + kerningElement = ET.Element("kerning") + kerningElement.attrib["mute"] = "1" + sourceElement.append(kerningElement) + if sourceObject.mutedGlyphNames: + for name in sourceObject.mutedGlyphNames: + glyphElement = ET.Element("glyph") + glyphElement.attrib["name"] = name + glyphElement.attrib["mute"] = "1" + sourceElement.append(glyphElement) + if self.effectiveFormatTuple >= (5, 0): + self._addLocationElement( + sourceElement, designLocation=sourceObject.location + ) + else: + # Pre-version 5.0 code was validating and filling in the location + # dict while writing it out, as preserved below. + locationElement, sourceObject.location = self._makeLocationElement( + sourceObject.location + ) + sourceElement.append(locationElement) + self.root.findall(".sources")[0].append(sourceElement) + + def _addVariableFont( + self, parentElement: ET.Element, vf: VariableFontDescriptor + ) -> None: + vfElement = ET.Element("variable-font") + vfElement.attrib["name"] = vf.name + if vf.filename is not None: + vfElement.attrib["filename"] = vf.filename + if vf.axisSubsets: + subsetsElement = ET.Element("axis-subsets") + for subset in vf.axisSubsets: + subsetElement = ET.Element("axis-subset") + subsetElement.attrib["name"] = subset.name + # Mypy doesn't support narrowing union types via hasattr() + # https://mypy.readthedocs.io/en/stable/type_narrowing.html + # TODO(Python 3.10): use TypeGuard + if hasattr(subset, "userMinimum"): + subset = cast(RangeAxisSubsetDescriptor, subset) + if subset.userMinimum != -math.inf: + subsetElement.attrib["userminimum"] = self.intOrFloat( + subset.userMinimum + ) + if subset.userMaximum != math.inf: + subsetElement.attrib["usermaximum"] = self.intOrFloat( + subset.userMaximum + ) + if subset.userDefault is not None: + subsetElement.attrib["userdefault"] = self.intOrFloat( + subset.userDefault + ) + elif hasattr(subset, "userValue"): + subset = cast(ValueAxisSubsetDescriptor, subset) + subsetElement.attrib["uservalue"] = self.intOrFloat( + subset.userValue + ) + subsetsElement.append(subsetElement) + vfElement.append(subsetsElement) + self._addLib(vfElement, vf.lib, 4) + parentElement.append(vfElement) + + def _addLib(self, parentElement: ET.Element, data: Any, indent_level: int) -> None: + if not data: + return + libElement = ET.Element("lib") + libElement.append(plistlib.totree(data, indent_level=indent_level)) + parentElement.append(libElement) + + def _writeGlyphElement(self, instanceElement, instanceObject, glyphName, data): + glyphElement = ET.Element("glyph") + if data.get("mute"): + glyphElement.attrib["mute"] = "1" + if data.get("unicodes") is not None: + glyphElement.attrib["unicode"] = " ".join( + [hex(u) for u in data.get("unicodes")] + ) + if data.get("instanceLocation") is not None: + locationElement, data["instanceLocation"] = self._makeLocationElement( + data.get("instanceLocation") + ) + glyphElement.append(locationElement) + if glyphName is not None: + glyphElement.attrib["name"] = glyphName + if data.get("note") is not None: + noteElement = ET.Element("note") + noteElement.text = data.get("note") + glyphElement.append(noteElement) + if data.get("masters") is not None: + mastersElement = ET.Element("masters") + for m in data.get("masters"): + masterElement = ET.Element("master") + if m.get("glyphName") is not None: + masterElement.attrib["glyphname"] = m.get("glyphName") + if m.get("font") is not None: + masterElement.attrib["source"] = m.get("font") + if m.get("location") is not None: + locationElement, m["location"] = self._makeLocationElement( + m.get("location") + ) + masterElement.append(locationElement) + mastersElement.append(masterElement) + glyphElement.append(mastersElement) + return glyphElement + + +class BaseDocReader(LogMixin): + axisDescriptorClass = AxisDescriptor + discreteAxisDescriptorClass = DiscreteAxisDescriptor + axisLabelDescriptorClass = AxisLabelDescriptor + axisMappingDescriptorClass = AxisMappingDescriptor + locationLabelDescriptorClass = LocationLabelDescriptor + ruleDescriptorClass = RuleDescriptor + sourceDescriptorClass = SourceDescriptor + variableFontsDescriptorClass = VariableFontDescriptor + valueAxisSubsetDescriptorClass = ValueAxisSubsetDescriptor + rangeAxisSubsetDescriptorClass = RangeAxisSubsetDescriptor + instanceDescriptorClass = InstanceDescriptor + + def __init__(self, documentPath, documentObject): + self.path = documentPath + self.documentObject = documentObject + tree = ET.parse(self.path) + self.root = tree.getroot() + self.documentObject.formatVersion = self.root.attrib.get("format", "3.0") + self._axes = [] + self.rules = [] + self.sources = [] + self.instances = [] + self.axisDefaults = {} + self._strictAxisNames = True + + @classmethod + def fromstring(cls, string, documentObject): + f = BytesIO(tobytes(string, encoding="utf-8")) + self = cls(f, documentObject) + self.path = None + return self + + def read(self): + self.readAxes() + self.readLabels() + self.readRules() + self.readVariableFonts() + self.readSources() + self.readInstances() + self.readLib() + + def readRules(self): + # we also need to read any conditions that are outside of a condition set. + rules = [] + rulesElement = self.root.find(".rules") + if rulesElement is not None: + processingValue = rulesElement.attrib.get("processing", "first") + if processingValue not in {"first", "last"}: + raise DesignSpaceDocumentError( + " processing attribute value is not valid: %r, " + "expected 'first' or 'last'" % processingValue + ) + self.documentObject.rulesProcessingLast = processingValue == "last" + for ruleElement in self.root.findall(".rules/rule"): + ruleObject = self.ruleDescriptorClass() + ruleName = ruleObject.name = ruleElement.attrib.get("name") + # read any stray conditions outside a condition set + externalConditions = self._readConditionElements( + ruleElement, + ruleName, + ) + if externalConditions: + ruleObject.conditionSets.append(externalConditions) + self.log.info( + "Found stray rule conditions outside a conditionset. " + "Wrapped them in a new conditionset." + ) + # read the conditionsets + for conditionSetElement in ruleElement.findall(".conditionset"): + conditionSet = self._readConditionElements( + conditionSetElement, + ruleName, + ) + if conditionSet is not None: + ruleObject.conditionSets.append(conditionSet) + for subElement in ruleElement.findall(".sub"): + a = subElement.attrib["name"] + b = subElement.attrib["with"] + ruleObject.subs.append((a, b)) + rules.append(ruleObject) + self.documentObject.rules = rules + + def _readConditionElements(self, parentElement, ruleName=None): + cds = [] + for conditionElement in parentElement.findall(".condition"): + cd = {} + cdMin = conditionElement.attrib.get("minimum") + if cdMin is not None: + cd["minimum"] = float(cdMin) + else: + # will allow these to be None, assume axis.minimum + cd["minimum"] = None + cdMax = conditionElement.attrib.get("maximum") + if cdMax is not None: + cd["maximum"] = float(cdMax) + else: + # will allow these to be None, assume axis.maximum + cd["maximum"] = None + cd["name"] = conditionElement.attrib.get("name") + # # test for things + if cd.get("minimum") is None and cd.get("maximum") is None: + raise DesignSpaceDocumentError( + "condition missing required minimum or maximum in rule" + + (" '%s'" % ruleName if ruleName is not None else "") + ) + cds.append(cd) + return cds + + def readAxes(self): + # read the axes elements, including the warp map. + axesElement = self.root.find(".axes") + if axesElement is not None and "elidedfallbackname" in axesElement.attrib: + self.documentObject.elidedFallbackName = axesElement.attrib[ + "elidedfallbackname" + ] + axisElements = self.root.findall(".axes/axis") + if not axisElements: + return + for axisElement in axisElements: + if ( + self.documentObject.formatTuple >= (5, 0) + and "values" in axisElement.attrib + ): + axisObject = self.discreteAxisDescriptorClass() + axisObject.values = [ + float(s) for s in axisElement.attrib["values"].split(" ") + ] + else: + axisObject = self.axisDescriptorClass() + axisObject.minimum = float(axisElement.attrib.get("minimum")) + axisObject.maximum = float(axisElement.attrib.get("maximum")) + axisObject.default = float(axisElement.attrib.get("default")) + axisObject.name = axisElement.attrib.get("name") + if axisElement.attrib.get("hidden", False): + axisObject.hidden = True + axisObject.tag = axisElement.attrib.get("tag") + for mapElement in axisElement.findall("map"): + a = float(mapElement.attrib["input"]) + b = float(mapElement.attrib["output"]) + axisObject.map.append((a, b)) + for labelNameElement in axisElement.findall("labelname"): + # Note: elementtree reads the "xml:lang" attribute name as + # '{http://www.w3.org/XML/1998/namespace}lang' + for key, lang in labelNameElement.items(): + if key == XML_LANG: + axisObject.labelNames[lang] = tostr(labelNameElement.text) + labelElement = axisElement.find(".labels") + if labelElement is not None: + if "ordering" in labelElement.attrib: + axisObject.axisOrdering = int(labelElement.attrib["ordering"]) + for label in labelElement.findall(".label"): + axisObject.axisLabels.append(self.readAxisLabel(label)) + self.documentObject.axes.append(axisObject) + self.axisDefaults[axisObject.name] = axisObject.default + + mappingsElement = self.root.find(".axes/mappings") + self.documentObject.axisMappings = [] + if mappingsElement is not None: + for mappingElement in mappingsElement.findall("mapping"): + inputElement = mappingElement.find("input") + outputElement = mappingElement.find("output") + inputLoc = {} + outputLoc = {} + for dimElement in inputElement.findall(".dimension"): + name = dimElement.attrib["name"] + value = float(dimElement.attrib["xvalue"]) + inputLoc[name] = value + for dimElement in outputElement.findall(".dimension"): + name = dimElement.attrib["name"] + value = float(dimElement.attrib["xvalue"]) + outputLoc[name] = value + axisMappingObject = self.axisMappingDescriptorClass( + inputLocation=inputLoc, outputLocation=outputLoc + ) + self.documentObject.axisMappings.append(axisMappingObject) + + def readAxisLabel(self, element: ET.Element): + xml_attrs = { + "userminimum", + "uservalue", + "usermaximum", + "name", + "elidable", + "oldersibling", + "linkeduservalue", + } + unknown_attrs = set(element.attrib) - xml_attrs + if unknown_attrs: + raise DesignSpaceDocumentError( + f"label element contains unknown attributes: {', '.join(unknown_attrs)}" + ) + + name = element.get("name") + if name is None: + raise DesignSpaceDocumentError("label element must have a name attribute.") + valueStr = element.get("uservalue") + if valueStr is None: + raise DesignSpaceDocumentError( + "label element must have a uservalue attribute." + ) + value = float(valueStr) + minimumStr = element.get("userminimum") + minimum = float(minimumStr) if minimumStr is not None else None + maximumStr = element.get("usermaximum") + maximum = float(maximumStr) if maximumStr is not None else None + linkedValueStr = element.get("linkeduservalue") + linkedValue = float(linkedValueStr) if linkedValueStr is not None else None + elidable = True if element.get("elidable") == "true" else False + olderSibling = True if element.get("oldersibling") == "true" else False + labelNames = { + lang: label_name.text or "" + for label_name in element.findall("labelname") + for attr, lang in label_name.items() + if attr == XML_LANG + # Note: elementtree reads the "xml:lang" attribute name as + # '{http://www.w3.org/XML/1998/namespace}lang' + } + return self.axisLabelDescriptorClass( + name=name, + userValue=value, + userMinimum=minimum, + userMaximum=maximum, + elidable=elidable, + olderSibling=olderSibling, + linkedUserValue=linkedValue, + labelNames=labelNames, + ) + + def readLabels(self): + if self.documentObject.formatTuple < (5, 0): + return + + xml_attrs = {"name", "elidable", "oldersibling"} + for labelElement in self.root.findall(".labels/label"): + unknown_attrs = set(labelElement.attrib) - xml_attrs + if unknown_attrs: + raise DesignSpaceDocumentError( + f"Label element contains unknown attributes: {', '.join(unknown_attrs)}" + ) + + name = labelElement.get("name") + if name is None: + raise DesignSpaceDocumentError( + "label element must have a name attribute." + ) + designLocation, userLocation = self.locationFromElement(labelElement) + if designLocation: + raise DesignSpaceDocumentError( + f'